]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
If we receive ZT_EVENT_REMOVED, destroy the specified channel.
authorRussell Bryant <russell@russellbryant.com>
Thu, 8 Mar 2007 01:01:46 +0000 (01:01 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 8 Mar 2007 01:01:46 +0000 (01:01 +0000)
(issue #7256, tzafrir)

Also, update the configure script to make sure that we don't try to build
chan_zap if the installed version of zaptel does not include ZT_EVENT_REMOVED.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@58320 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_zap.c
configure
configure.ac

index 4a1066020a6456a62f53751caaf442c03235b703..cee84952006fa249221f4df31e58c5749ea7659f 100644 (file)
@@ -6496,6 +6496,24 @@ static void *ss_thread(void *data)
        return NULL;
 }
 
+/* destroy a zaptel channel, identified by its number */
+static int zap_destroy_channel_bynum(int channel)
+{
+       struct zt_pvt *tmp = NULL;
+       struct zt_pvt *prev = NULL;
+
+       tmp = iflist;
+       while (tmp) {
+               if (tmp->channel == channel) {
+                       destroy_channel(prev, tmp, 1);
+                       return RESULT_SUCCESS;
+               }
+               prev = tmp;
+               tmp = tmp->next;
+       }
+       return RESULT_FAILURE;
+}
+
 static int handle_init_event(struct zt_pvt *i, int event)
 {
        int res;
@@ -6685,6 +6703,12 @@ static int handle_init_event(struct zt_pvt *i, int event)
                                "polarity reversal on non-FXO (SIG_FXS) "
                                "interface %d\n", i->channel);
                }
+       case ZT_EVENT_REMOVED: /* destroy channel */
+               ast_log(LOG_NOTICE, 
+                               "Got ZT_EVENT_REMOVED. Destroying channel %d\n", 
+                               i->channel);
+               zap_destroy_channel_bynum(i->channel);
+               break;
        }
        pthread_attr_destroy(&attr);
        return 0;
@@ -9670,25 +9694,14 @@ static struct ast_cli_entry zap_pri_cli[] = {
 
 static int zap_destroy_channel(int fd, int argc, char **argv)
 {
-       int channel = 0;
-       struct zt_pvt *tmp = NULL;
-       struct zt_pvt *prev = NULL;
+       int channel;
        
-       if (argc != 4) {
+       if (argc != 4)
                return RESULT_SHOWUSAGE;
-       }
+       
        channel = atoi(argv[3]);
 
-       tmp = iflist;
-       while (tmp) {
-               if (tmp->channel == channel) {
-                       destroy_channel(prev, tmp, 1);
-                       return RESULT_SUCCESS;
-               }
-               prev = tmp;
-               tmp = tmp->next;
-       }
-       return RESULT_FAILURE;
+       return zap_destroy_channel_bynum(channel);
 }
 
 static int setup_zap(int reload);
index 675b7b3b333f342b8979a24cc7d0693bb927388d..594d27de219c2e83ee6d22faf89f3e58719011b7 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 55052 .
+# From configure.ac Revision: 57556 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.60.
 #
@@ -33328,8 +33328,8 @@ echo "$as_me: *** including --without-zaptel." >&6;}
 fi
 
 if test "${PBX_ZAPTEL}" = 1; then
-   { echo "$as_me:$LINENO: checking for ZT_TONE_DTMF_BASE in zaptel/zaptel.h" >&5
-echo $ECHO_N "checking for ZT_TONE_DTMF_BASE in zaptel/zaptel.h... $ECHO_C" >&6; }
+   { echo "$as_me:$LINENO: checking for ZT_EVENT_REMOVED in zaptel/zaptel.h" >&5
+echo $ECHO_N "checking for ZT_EVENT_REMOVED in zaptel/zaptel.h... $ECHO_C" >&6; }
    saved_cppflags="${CPPFLAGS}"
    if test "x${ZAPTEL_DIR}" != "x"; then
       CPPFLAGS="${CPPFLAGS} -I${ZAPTEL_DIR}/include"
@@ -33345,7 +33345,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-int foo = ZT_TONE_DTMF_BASE;
+int foo = ZT_EVENT_REMOVED;
   ;
   return 0;
 }
index 03b34a8032d6009dd5314adcbe0569ee8f1760d9..fd166fc88e68cfcb126b5460743f6cafaa9d6d02 100644 (file)
@@ -1026,7 +1026,7 @@ if test "${USE_ZAPTEL}" != "no"; then
 fi
 
 if test "${PBX_ZAPTEL}" = 1; then
-   AC_MSG_CHECKING(for ZT_TONE_DTMF_BASE in zaptel/zaptel.h)
+   AC_MSG_CHECKING(for ZT_EVENT_REMOVED in zaptel/zaptel.h)
    saved_cppflags="${CPPFLAGS}"
    if test "x${ZAPTEL_DIR}" != "x"; then
       CPPFLAGS="${CPPFLAGS} -I${ZAPTEL_DIR}/include"
@@ -1035,7 +1035,7 @@ if test "${PBX_ZAPTEL}" = 1; then
        [
        AC_LANG_PROGRAM(
        [#include <zaptel/zaptel.h>],
-       [int foo = ZT_TONE_DTMF_BASE;])
+       [int foo = ZT_EVENT_REMOVED;])
        ],
        [       AC_MSG_RESULT(yes) 
                ac_cv_zaptel_vldtmf="yes"