]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: add release event to ftdm core
authorMoises Silva <moy@sangoma.com>
Tue, 23 Nov 2010 16:43:52 +0000 (11:43 -0500)
committerMoises Silva <moy@sangoma.com>
Tue, 23 Nov 2010 16:43:52 +0000 (11:43 -0500)
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/include/freetdm.h

index a410e4eac6daf0725cc55bda477b0455ff112584..165fce0a8442edaaec6cd10cb2d51ad8aa340c2b 100755 (executable)
@@ -1690,6 +1690,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxo_signal)
                        }
                }
                break;
+    case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
 
        default:
                {
@@ -1744,6 +1745,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxs_signal)
                        }
                }
                break;
+    case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
     case FTDM_SIGEVENT_STOP:
                {
                        private_t *tech_pvt = NULL;
@@ -1966,6 +1968,8 @@ static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
                        status = ftdm_channel_from_event(sigmsg, &session);
                }
                break;
+               
+               case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
 
                /* on DNIS received from the R2 forward side, return status == FTDM_BREAK to stop requesting DNIS */
                case FTDM_SIGEVENT_COLLECTED_DIGIT: 
@@ -2063,6 +2067,9 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
                        return ftdm_channel_from_event(sigmsg, &session);
                }
                break;
+
+    case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
+
     case FTDM_SIGEVENT_STOP:
     case FTDM_SIGEVENT_RESTART:
                {
index 939933af73f8398c467a68ae98d27e5a78a149c3..24e54574ae9f91ef8b35aa481ddad0cb66692dad 100644 (file)
@@ -2349,6 +2349,8 @@ static void close_dtmf_debug(ftdm_channel_t *ftdmchan)
 static ftdm_status_t ftdm_channel_clear_vars(ftdm_channel_t *ftdmchan);
 FT_DECLARE(ftdm_status_t) ftdm_channel_done(ftdm_channel_t *ftdmchan)
 {
+       ftdm_sigmsg_t sigmsg;
+       
        ftdm_assert_return(ftdmchan != NULL, FTDM_FAIL, "Null channel can't be done!\n");
 
        ftdm_mutex_lock(ftdmchan->mutex);
@@ -2387,6 +2389,13 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_done(ftdm_channel_t *ftdmchan)
 
        ftdm_log(FTDM_LOG_DEBUG, "channel done %u:%u\n", ftdmchan->span_id, ftdmchan->chan_id);
 
+       memset(&sigmsg, 0, sizeof(sigmsg));
+       sigmsg.span_id = ftdmchan->span_id;
+       sigmsg.chan_id = ftdmchan->chan_id;
+       sigmsg.channel = ftdmchan;
+       sigmsg.event_id = FTDM_SIGEVENT_RELEASED;
+       ftdm_span_send_signal(ftdmchan->span, &sigmsg);
+
        ftdm_mutex_unlock(ftdmchan->mutex);
 
        return FTDM_SUCCESS;
index 55e433d9c704eb5a27c0063f63ac70c3737f191a..dc181e15c785c81472d7a3cc4999dc93e1bb69e9 100644 (file)
@@ -287,6 +287,7 @@ typedef enum {
 typedef enum {
        FTDM_SIGEVENT_START, /*!< Incoming call (ie: incoming SETUP msg or Ring) */
        FTDM_SIGEVENT_STOP, /*!< Hangup */
+       FTDM_SIGEVENT_RELEASED, /*!< Channel is completely released and available */
        FTDM_SIGEVENT_UP, /*!< Outgoing call has been answered */
        FTDM_SIGEVENT_FLASH, /*< Flash event  (typically on-hook/off-hook for analog devices) */
        FTDM_SIGEVENT_PROGRESS, /*!< Outgoing call is making progress */