]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Updated ftmod_pritap.c to send SIGEVENT_UP when the tapped line is answered
authorMoises Silva <moy@sangoma.com>
Thu, 11 Oct 2012 05:49:33 +0000 (00:49 -0500)
committerMoises Silva <moy@sangoma.com>
Mon, 29 Oct 2012 19:32:16 +0000 (15:32 -0400)
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_pritap/ftmod_pritap.c

index 932ce30aa73dbc2c8dae61f3268bec55a30bbdd6..8e6db56af4db9378e54ff91200f5a24739fe9a63 100644 (file)
@@ -6093,7 +6093,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
 
        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)) {
                                ftdm_log_chan_msg(fchan, FTDM_LOG_WARNING, "Inbound call taking over outbound channel\n");
index f136d59d9c829414048091bbab40f1257cb4f0f3..343f31794406005369be1266959487a1cc7eba1e 100644 (file)
@@ -38,6 +38,8 @@
 #define PRI_SPAN(p) (((p) >> 8) & 0xff)
 #define PRI_CHANNEL(p) ((p) & 0xff)
 
+#define PRITAP_NETWORK_ANSWER 0x1
+
 typedef enum {
        PRITAP_RUNNING = (1 << 0),
 } pritap_flags_t;
@@ -279,25 +281,36 @@ static ftdm_status_t state_advance(ftdm_channel_t *ftdmchan)
        sig.span_id = ftdmchan->span_id;
        sig.channel = ftdmchan;
 
-        ftdm_channel_complete_state(ftdmchan);
+       ftdm_channel_complete_state(ftdmchan);
 
        switch (ftdmchan->state) {
        case FTDM_CHANNEL_STATE_DOWN:
                {                       
                        ftdmchan->call_data = NULL;
+                       ftdmchan->pflags = 0;
                        ftdm_channel_close(&ftdmchan);
 
                        peerchan->call_data = NULL;
+                       peerchan->pflags = 0;
                        ftdm_channel_close(&peerchan);
                }
                break;
 
        case FTDM_CHANNEL_STATE_PROGRESS:
        case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
-       case FTDM_CHANNEL_STATE_UP:
        case FTDM_CHANNEL_STATE_HANGUP:
                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:
                {
                        sig.event_id = FTDM_SIGEVENT_START;
@@ -625,6 +638,8 @@ static void handle_pri_passive_event(pritap_t *pritap, pri_event *e)
                        break;
                }
                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;
 
        case PRI_EVENT_HANGUP_REQ: