]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: Fix E&M answer procedure for DAHDI
authorMoises Silva <moises.silva@gmail.com>
Thu, 20 Sep 2012 00:02:30 +0000 (20:02 -0400)
committerMoises Silva <moises.silva@gmail.com>
Thu, 20 Sep 2012 00:03:09 +0000 (20:03 -0400)
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c

index 271f532a70a3f57cf0c1c11db8a22101d3511bc1..06dc587a4b978ceffbf89658a2b61112636f7ba0 100755 (executable)
@@ -2285,6 +2285,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxo_signal)
                }
                break;
        case FTDM_SIGEVENT_SIGSTATUS_CHANGED:
+       case FTDM_SIGEVENT_COLLECTED_DIGIT: /* Analog E&M */
                break;
        default:
                {
index 2569ea49fde4620e2756defb78a7109bd7fd5cc8..363dcee7c543d0107307679039a61a859121c3ac 100644 (file)
@@ -737,6 +737,7 @@ static FIO_COMMAND_FUNCTION(zt_command)
                                ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "OFFHOOK Failed");
                                return FTDM_FAIL;
                        }
+                       ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Channel is now offhook\n");
                        ftdm_set_flag_locked(ftdmchan, FTDM_CHANNEL_OFFHOOK);
                }
                break;
@@ -747,6 +748,7 @@ static FIO_COMMAND_FUNCTION(zt_command)
                                ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "ONHOOK Failed");
                                return FTDM_FAIL;
                        }
+                       ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Channel is now onhook\n");
                        ftdm_clear_flag_locked(ftdmchan, FTDM_CHANNEL_OFFHOOK);
                }
                break;
@@ -1084,7 +1086,10 @@ static __inline__ ftdm_status_t zt_channel_process_event(ftdm_channel_t *fchan,
        case ZT_EVENT_RINGOFFHOOK:
                {
                        if (fchan->type == FTDM_CHAN_TYPE_FXS || (fchan->type == FTDM_CHAN_TYPE_EM && fchan->state != FTDM_CHANNEL_STATE_UP)) {
-                               ftdm_set_flag_locked(fchan, FTDM_CHANNEL_OFFHOOK);
+                               if (fchan->type != FTDM_CHAN_TYPE_EM) {
+                                       /* In E&M we're supposed to set this flag when the tx side goes offhook, not the rx */
+                                       ftdm_set_flag_locked(fchan, FTDM_CHANNEL_OFFHOOK);
+                               }
                                *event_id = FTDM_OOB_OFFHOOK;
                        } else if (fchan->type == FTDM_CHAN_TYPE_FXO) {
                                *event_id = FTDM_OOB_RING_START;