strlen fixes and don't destroy SIP channels that still have pending things on them...
authorMark Spencer <markster@digium.com>
Tue, 4 May 2004 19:11:25 +0000 (19:11 +0000)
committerMark Spencer <markster@digium.com>
Tue, 4 May 2004 19:11:25 +0000 (19:11 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2890 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_adsiprog.c
apps/app_agi.c
apps/app_authenticate.c
apps/app_dial.c
channels/chan_sip.c

index 1274260..2fa21f0 100755 (executable)
@@ -19,6 +19,7 @@
 #include <asterisk/module.h>
 #include <asterisk/adsi.h>
 #include <asterisk/options.h>
+#include <asterisk/utils.h>
 #include <netinet/in.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -178,7 +179,7 @@ static int process_token(void *out, char *src, int maxlen, int argtype)
                        maxlen = strlen(src) - 1;
                memcpy(out, src, maxlen);
                ((char *)out)[maxlen] = '\0';
-       } else if (strlen(src) && (src[0] == '\\')) {
+       } else if (!ast_strlen_zero(src) && (src[0] == '\\')) {
                if (!(argtype & ARG_NUMBER))
                        return -1;
                /* Octal value */
@@ -198,7 +199,7 @@ static int process_token(void *out, char *src, int maxlen, int argtype)
                        /* Convert */
                        *((unsigned int *)out) = htonl(*((unsigned int *)out));
                }
-       } else if ((strlen(src) && isdigit(src[0]))) {
+       } else if ((!ast_strlen_zero(src) && isdigit(src[0]))) {
                if (!(argtype & ARG_NUMBER))
                        return -1;
                /* Hex value */
@@ -1363,7 +1364,7 @@ static struct adsi_script *compile_script(char *script)
                        /* Strip comments */
                        if (c)
                                *c = '\0';
-                       if (strlen(buf))
+                       if (!ast_strlen_zero(buf))
                                adsi_process(scr, buf, script, lineno);
                }
        }
@@ -1540,7 +1541,7 @@ static int adsi_exec(struct ast_channel *chan, void *data)
 {
        int res=0;
        struct localuser *u;
-       if (!data || !strlen(data))
+       if (!data || ast_strlen_zero(data))
                data = "asterisk.adsi";
        LOCAL_USER_ADD(u);
        if (!adsi_available(chan)) {
index 14fa27e..fb73338 100755 (executable)
@@ -36,6 +36,7 @@
 #include <asterisk/app.h>
 #include <asterisk/dsp.h>
 #include <asterisk/musiconhold.h>
+#include <asterisk/utils.h>
 #include "../asterisk.h"
 #include "../astconf.h"
 
@@ -1465,7 +1466,7 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
        int pid;
         char *stringp;
        AGI agi;
-       if (!data || !strlen(data)) {
+       if (!data || ast_strlen_zero(data)) {
                ast_log(LOG_WARNING, "AGI requires an argument (script)\n");
                return -1;
        }
index 2077d37..4169e59 100755 (executable)
@@ -19,6 +19,7 @@
 #include <asterisk/module.h>
 #include <asterisk/app.h>
 #include <asterisk/astdb.h>
+#include <asterisk/utils.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
@@ -63,7 +64,7 @@ static int auth_exec(struct ast_channel *chan, void *data)
        char passwd[256];
        char *opts;
        char *prompt;
-       if (!data || !strlen(data)) {
+       if (!data || ast_strlen_zero(data)) {
                ast_log(LOG_WARNING, "Authenticate requires an argument(password)\n");
                return -1;
        }
@@ -108,14 +109,14 @@ static int auth_exec(struct ast_channel *chan, void *data)
                                        char buf[256] = "";
                                        while(!feof(f)) {
                                                fgets(buf, sizeof(buf), f);
-                                               if (!feof(f) && strlen(buf)) {
+                                               if (!feof(f) && !ast_strlen_zero(buf)) {
                                                        buf[strlen(buf) - 1] = '\0';
-                                                       if (strlen(buf) && !strcmp(passwd, buf))
+                                                       if (!ast_strlen_zero(buf) && !strcmp(passwd, buf))
                                                                break;
                                                }
                                        }
                                        fclose(f);
-                                       if (strlen(buf) && !strcmp(passwd, buf))
+                                       if (!ast_strlen_zero(buf) && !strcmp(passwd, buf))
                                                break;
                                } else 
                                        ast_log(LOG_WARNING, "Unable to open file '%s' for authentication: %s\n", password, strerror(errno));
index 10017e6..0264d9a 100755 (executable)
@@ -24,6 +24,7 @@
 #include <asterisk/parking.h>
 #include <asterisk/musiconhold.h>
 #include <asterisk/callerid.h>
+#include <asterisk/utils.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <unistd.h>
@@ -201,7 +202,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu
                                        *allowdisconnect = o->allowdisconnect;
                                }
                        } else if (o->chan && (o->chan == winner)) {
-                               if (strlen(o->chan->call_forward)) {
+                               if (!ast_strlen_zero(o->chan->call_forward)) {
                                        char tmpchan[256];
                                        /* Before processing channel, go ahead and check for forwarding */
                                        if (option_verbose > 2)
@@ -235,7 +236,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu
                                                }
                                                if (o->chan->rdnis) 
                                                        free(o->chan->rdnis);
-                                               if (strlen(in->macroexten))
+                                               if (!ast_strlen_zero(in->macroexten))
                                                        o->chan->rdnis = strdup(in->macroexten);
                                                else
                                                        o->chan->rdnis = strdup(in->exten);
@@ -445,7 +446,7 @@ static int dial_exec(struct ast_channel *chan, void *data)
                }
        } else
                timeout = NULL;
-       if (!peers || !strlen(peers)) {
+       if (!peers || ast_strlen_zero(peers)) {
                ast_log(LOG_WARNING, "Dial argument takes format (technology1/number1&technology2/number2...|optional timeout)\n");
                goto out;
        }
@@ -581,7 +582,7 @@ static int dial_exec(struct ast_channel *chan, void *data)
        }
        if (resetcdr && chan->cdr)
                ast_cdr_reset(chan->cdr, 0);
-       if (!strlen(privdb) && privacy) {
+       if (ast_strlen_zero(privdb) && privacy) {
                /* If privdb is not specified and we are using privacy, copy from extension */
                strncpy(privdb, chan->exten, sizeof(privdb) - 1);
        }
@@ -658,7 +659,7 @@ static int dial_exec(struct ast_channel *chan, void *data)
                        cur = rest;
                        continue;
                }
-               if (strlen(tmp->chan->call_forward)) {
+               if (!ast_strlen_zero(tmp->chan->call_forward)) {
                        char tmpchan[256];
                        if (option_verbose > 2)
                                ast_verbose(VERBOSE_PREFIX_3 "Forwarding call to '%s@%s'\n", tmp->chan->call_forward, tmp->chan->context);
@@ -721,7 +722,7 @@ static int dial_exec(struct ast_channel *chan, void *data)
                        tmp->chan->callerid = NULL;
                /* Copy language from incoming to outgoing */
                strcpy(tmp->chan->language, chan->language);
-               if (!strlen(tmp->chan->musicclass))
+               if (ast_strlen_zero(tmp->chan->musicclass))
                        strncpy(tmp->chan->musicclass, chan->musicclass, sizeof(tmp->chan->musicclass) - 1);
                if (chan->ani)
                        tmp->chan->ani = strdup(chan->ani);
@@ -768,7 +769,7 @@ static int dial_exec(struct ast_channel *chan, void *data)
                cur = rest;
        } while(cur);
        
-       if (timeout && strlen(timeout)) {
+       if (timeout && !ast_strlen_zero(timeout)) {
                to = atoi(timeout);
                if (to > 0)
                        to *= 1000;
@@ -808,7 +809,7 @@ static int dial_exec(struct ast_channel *chan, void *data)
                        return -1;
                }
                /* JDG: sendurl */
-               if( url && strlen(url) && ast_channel_supports_html(peer) ) {
+               if( url && !ast_strlen_zero(url) && ast_channel_supports_html(peer) ) {
                        ast_log(LOG_DEBUG, "app_dial: sendurl=%s.\n", url);
                        ast_channel_sendurl( peer, url );
                } /* /JDG */
index 46fcd9c..c4e9481 100755 (executable)
@@ -651,6 +651,8 @@ static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp)
                        if (cur->retransid > -1)
                                ast_sched_del(sched, cur->retransid);
                        cur->retransid = -1;
+                       /* Schedule destruction in 15000ms just in case */
+                       sip_scheddestroy(p, 15000);
                        res = 0;
                        break;
                }
@@ -6173,7 +6175,7 @@ restartsearch:
                sip = iflist;
                while(sip) {
                        ast_mutex_lock(&sip->lock);
-                       if (sip->needdestroy && (!sip->packets || (sip->packets->retransid == -1))) {
+                       if (sip->needdestroy && !sip->packets) {
                                ast_mutex_unlock(&sip->lock);
                                __sip_destroy(sip, 1);
                                goto restartsearch;