diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-05-04 19:11:25 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-05-04 19:11:25 +0000 |
commit | 5d7c4bb03e33da0be5f91f34313498f3773ef1e3 (patch) | |
tree | 6b28979729f7e9ea49043ca3e54b7889d188209f | |
parent | 3047e6772d30c76768a9cf9cce54714cad2c7f6d (diff) |
strlen fixes and don't destroy SIP channels that still have pending things on them (bug #1552 et al)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2890 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | apps/app_adsiprog.c | 9 | ||||
-rwxr-xr-x | apps/app_agi.c | 3 | ||||
-rwxr-xr-x | apps/app_authenticate.c | 9 | ||||
-rwxr-xr-x | apps/app_dial.c | 17 | ||||
-rwxr-xr-x | channels/chan_sip.c | 4 |
5 files changed, 24 insertions, 18 deletions
diff --git a/apps/app_adsiprog.c b/apps/app_adsiprog.c index 12742609d..2fa21f0eb 100755 --- a/apps/app_adsiprog.c +++ b/apps/app_adsiprog.c @@ -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)) { diff --git a/apps/app_agi.c b/apps/app_agi.c index 14fa27e49..fb73338d0 100755 --- a/apps/app_agi.c +++ b/apps/app_agi.c @@ -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; } diff --git a/apps/app_authenticate.c b/apps/app_authenticate.c index 2077d3734..4169e59a8 100755 --- a/apps/app_authenticate.c +++ b/apps/app_authenticate.c @@ -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)); diff --git a/apps/app_dial.c b/apps/app_dial.c index 10017e687..0264d9ac3 100755 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -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 */ diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 46fcd9c8c..c4e948159 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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; |