mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 08:49:01 +00:00
Updated ftmod_pritap.c to send SIGEVENT_UP when the tapped line is answered
This commit is contained in:
parent
4b5cdd87f1
commit
d2a73cc0e4
@ -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 @@
|
|||||||
#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;
|
||||||
@ -279,25 +281,36 @@ static ftdm_status_t state_advance(ftdm_channel_t *ftdmchan)
|
|||||||
sig.span_id = ftdmchan->span_id;
|
sig.span_id = ftdmchan->span_id;
|
||||||
sig.channel = ftdmchan;
|
sig.channel = ftdmchan;
|
||||||
|
|
||||||
ftdm_channel_complete_state(ftdmchan);
|
ftdm_channel_complete_state(ftdmchan);
|
||||||
|
|
||||||
switch (ftdmchan->state) {
|
switch (ftdmchan->state) {
|
||||||
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)
|
|||||||
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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user