提交 d2a73cc0 authored 作者: Moises Silva's avatar Moises Silva

Updated ftmod_pritap.c to send SIGEVENT_UP when the tapped line is answered

上级 4b5cdd87
...@@ -6093,7 +6093,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t ...@@ -6093,7 +6093,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
case FTDM_SIGEVENT_START: case FTDM_SIGEVENT_START:
{ {
ftdm_assert(!ftdm_test_flag(fchan, FTDM_CHANNEL_CALL_STARTED), "Started call twice!"); ftdm_assert(!ftdm_test_flag(fchan, FTDM_CHANNEL_CALL_STARTED), "Started call twice!\n");
if (ftdm_test_flag(fchan, FTDM_CHANNEL_OUTBOUND)) { if (ftdm_test_flag(fchan, FTDM_CHANNEL_OUTBOUND)) {
ftdm_log_chan_msg(fchan, FTDM_LOG_WARNING, "Inbound call taking over outbound channel\n"); ftdm_log_chan_msg(fchan, FTDM_LOG_WARNING, "Inbound call taking over outbound channel\n");
......
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#define PRI_SPAN(p) (((p) >> 8) & 0xff) #define PRI_SPAN(p) (((p) >> 8) & 0xff)
#define PRI_CHANNEL(p) ((p) & 0xff) #define PRI_CHANNEL(p) ((p) & 0xff)
#define PRITAP_NETWORK_ANSWER 0x1
typedef enum { typedef enum {
PRITAP_RUNNING = (1 << 0), PRITAP_RUNNING = (1 << 0),
} pritap_flags_t; } pritap_flags_t;
...@@ -285,19 +287,30 @@ static ftdm_status_t state_advance(ftdm_channel_t *ftdmchan) ...@@ -285,19 +287,30 @@ static ftdm_status_t state_advance(ftdm_channel_t *ftdmchan)
case FTDM_CHANNEL_STATE_DOWN: case FTDM_CHANNEL_STATE_DOWN:
{ {
ftdmchan->call_data = NULL; ftdmchan->call_data = NULL;
ftdmchan->pflags = 0;
ftdm_channel_close(&ftdmchan); ftdm_channel_close(&ftdmchan);
peerchan->call_data = NULL; peerchan->call_data = NULL;
peerchan->pflags = 0;
ftdm_channel_close(&peerchan); ftdm_channel_close(&peerchan);
} }
break; break;
case FTDM_CHANNEL_STATE_PROGRESS: case FTDM_CHANNEL_STATE_PROGRESS:
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA: case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
case FTDM_CHANNEL_STATE_UP:
case FTDM_CHANNEL_STATE_HANGUP: case FTDM_CHANNEL_STATE_HANGUP:
break; break;
case FTDM_CHANNEL_STATE_UP:
{
if (ftdm_test_pflag(ftdmchan, PRITAP_NETWORK_ANSWER)) {
ftdm_clear_pflag(ftdmchan, PRITAP_NETWORK_ANSWER);
sig.event_id = FTDM_SIGEVENT_UP;
ftdm_span_send_signal(ftdmchan->span, &sig);
}
}
break;
case FTDM_CHANNEL_STATE_RING: case FTDM_CHANNEL_STATE_RING:
{ {
sig.event_id = FTDM_SIGEVENT_START; sig.event_id = FTDM_SIGEVENT_START;
...@@ -625,6 +638,8 @@ static void handle_pri_passive_event(pritap_t *pritap, pri_event *e) ...@@ -625,6 +638,8 @@ static void handle_pri_passive_event(pritap_t *pritap, pri_event *e)
break; break;
} }
ftdm_log_chan(pcall->fchan, FTDM_LOG_NOTICE, "Tapped call was answered in state %s\n", ftdm_channel_state2str(pcall->fchan->state)); ftdm_log_chan(pcall->fchan, FTDM_LOG_NOTICE, "Tapped call was answered in state %s\n", ftdm_channel_state2str(pcall->fchan->state));
ftdm_set_pflag_locked(pcall->fchan, PRITAP_NETWORK_ANSWER);
ftdm_set_state_locked(pcall->fchan, FTDM_CHANNEL_STATE_UP);
break; break;
case PRI_EVENT_HANGUP_REQ: case PRI_EVENT_HANGUP_REQ:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论