aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-07-08 11:05:03 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-07-08 11:05:03 +0000
commitcce8f951b1cc6ba649775083c117bd6911a74895 (patch)
treee42e35e4d5c81425807a88465016d9077f679da0
parent950e756132baf943399a575cb2cd93be2d4ecf47 (diff)
Cleanup SIP formatting, strncpy's strncats and global variable names (bug #1990)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3392 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xchannels/chan_sip.c625
1 files changed, 325 insertions, 300 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 759ef4b1b..c8b578dee 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -132,15 +132,15 @@ static char *config = "sip.conf";
#define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
-static char useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
+static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
-static char context[AST_MAX_EXTENSION] = "default";
+static char default_context[AST_MAX_EXTENSION] = "default";
-static char language[MAX_LANGUAGE] = "";
+static char default_language[MAX_LANGUAGE] = "";
-static char callerid[AST_MAX_EXTENSION] = "asterisk";
+static char default_callerid[AST_MAX_EXTENSION] = "asterisk";
-static char fromdomain[AST_MAX_EXTENSION] = "";
+static char default_fromdomain[AST_MAX_EXTENSION] = "";
static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
@@ -152,16 +152,16 @@ static int autocreatepeer = 0;
static int relaxdtmf = 0;
-static int globalrtptimeout = 0;
+static int global_rtptimeout = 0;
-static int globalrtpholdtimeout = 0;
+static int global_rtpholdtimeout = 0;
-static int globaltrustrpid = 0;
+static int global_trustrpid = 0;
-static int globalprogressinband = 0;
+static int global_progressinband = 0;
#ifdef OSP_SUPPORT
-static int globalospauth = 0;
+static int global_ospauth = 0;
#endif
static int usecnt =0;
@@ -183,7 +183,7 @@ static pthread_t monitor_thread = AST_PTHREADT_NULL;
static int restart_monitor(void);
/* Codecs that we support by default: */
-static int capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
+static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
static int noncodeccapability = AST_RTP_DTMF;
static char ourhost[256];
@@ -197,11 +197,11 @@ static int tos = 0;
static int videosupport = 0;
-static int globaldtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
+static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
static int recordhistory = 0;
-static int globalpromiscredir;
+static int global_promiscredir;
-static char globalmusicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
+static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
/* Expire slowly */
@@ -527,8 +527,8 @@ static struct ast_register_list {
static int __sip_do_register(struct sip_registry *r);
static int sipsock = -1;
-static int globalnat = SIP_NAT_RFC3581;
-static int globalcanreinvite = REINVITE_INVITE;
+static int global_nat = SIP_NAT_RFC3581;
+static int global_canreinvite = REINVITE_INVITE;
static struct sockaddr_in bindaddr;
@@ -607,11 +607,10 @@ static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
theirs.sin_addr = *them;
if (localaddr && externip.sin_addr.s_addr &&
ast_apply_ha(localaddr, &theirs)) {
- char t[256];
char iabuf[INET_ADDRSTRLEN];
memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
- strcpy(t, ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr));
- ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", t);
+ ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
+ ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
}
else if (bindaddr.sin_addr.s_addr)
memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
@@ -952,73 +951,72 @@ static int sip_sendtext(struct ast_channel *ast, char *text)
/*--- mysql_host: Get user from database ---*/
static struct sip_user *mysql_user(char *user)
{
- struct sip_user *u;
- int success = 0;
- u = malloc(sizeof(struct sip_user));
- memset(u, 0, sizeof(struct sip_user));
- if (mysql && (!user || (strlen(user) < 128))) {
- char query[512];
- char *name = NULL;
- int numfields, x;
- time_t regseconds, nowtime;
- MYSQL_RES *result;
- MYSQL_FIELD *fields;
- MYSQL_ROW rowval;
- if (user) {
- name = alloca(strlen(user) * 2 + 1);
- mysql_real_escape_string(mysql, name, user, strlen(user));
- }
+ struct sip_user *u;
+ int success = 0;
+ u = malloc(sizeof(struct sip_user));
+ memset(u, 0, sizeof(struct sip_user));
+ if (mysql && (!user || (strlen(user) < 128))) {
+ char query[512];
+ char *name = NULL;
+ int numfields, x;
+ time_t regseconds, nowtime;
+ MYSQL_RES *result;
+ MYSQL_FIELD *fields;
+ MYSQL_ROW rowval;
+ if (user) {
+ name = alloca(strlen(user) * 2 + 1);
+ mysql_real_escape_string(mysql, name, user, strlen(user));
+ }
- snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds, callerid, restrictcid FROM sipfriends WHERE name=\"%s\"", name);
-
-
- ast_mutex_lock(&mysqllock);
- mysql_query(mysql, query);
- if ((result = mysql_store_result(mysql))) {
-
- if ((rowval = mysql_fetch_row(result))) {
- numfields = mysql_num_fields(result);
- fields = mysql_fetch_fields(result);
- success = 1;
- for (x=0;x<numfields;x++) {
- if (rowval[x]) {
- if (!strcasecmp(fields[x].name, "secret")) {
- strncpy(u->secret, rowval[x], sizeof(u->secret));
- } else if (!strcasecmp(fields[x].name, "name")) {
- strncpy(u->name, rowval[x], sizeof(u->name) - 1);
- } else if (!strcasecmp(fields[x].name, "context")) {
- strncpy(u->context, rowval[x], sizeof(u->context) - 1);
- } else if (!strcasecmp(fields[x].name, "username")) {
- strncpy(u->name, rowval[x], sizeof(u->name) - 1);
- } else if (!strcasecmp(fields[x].name, "regseconds")) {
- if (sscanf(rowval[x], "%li", &regseconds) != 1)
- regseconds = 0;
- } else if (!strcasecmp(fields[x].name, "restrictcid")) {
- u->restrictcid = 1;
- } else if (!strcasecmp(fields[x].name, "callerid")) {
- strncpy(u->callerid, rowval[x], sizeof(u->callerid) - 1);
- u->hascallerid=1;
- }
- }
- }
- time(&nowtime);
- }
- mysql_free_result(result);
- result = NULL;
- }
- ast_mutex_unlock(&mysqllock);
- }
- if (!success) {
- free(u);
- u = NULL;
- } else {
- u->capability = capability;
- u->nat = globalnat;
- u->dtmfmode = globaldtmfmode;
- u->insecure = 1;
- u->temponly = 1;
- }
- return u;
+ snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds, callerid, restrictcid FROM sipfriends WHERE name=\"%s\"", name);
+
+ ast_mutex_lock(&mysqllock);
+ mysql_query(mysql, query);
+ if ((result = mysql_store_result(mysql))) {
+
+ if ((rowval = mysql_fetch_row(result))) {
+ numfields = mysql_num_fields(result);
+ fields = mysql_fetch_fields(result);
+ success = 1;
+ for (x=0;x<numfields;x++) {
+ if (rowval[x]) {
+ if (!strcasecmp(fields[x].name, "secret")) {
+ strncpy(u->secret, rowval[x], sizeof(u->secret));
+ } else if (!strcasecmp(fields[x].name, "name")) {
+ strncpy(u->name, rowval[x], sizeof(u->name) - 1);
+ } else if (!strcasecmp(fields[x].name, "context")) {
+ strncpy(u->context, rowval[x], sizeof(u->context) - 1);
+ } else if (!strcasecmp(fields[x].name, "username")) {
+ strncpy(u->name, rowval[x], sizeof(u->name) - 1);
+ } else if (!strcasecmp(fields[x].name, "regseconds")) {
+ if (sscanf(rowval[x], "%li", &regseconds) != 1)
+ regseconds = 0;
+ } else if (!strcasecmp(fields[x].name, "restrictcid")) {
+ u->restrictcid = 1;
+ } else if (!strcasecmp(fields[x].name, "callerid")) {
+ strncpy(u->callerid, rowval[x], sizeof(u->callerid) - 1);
+ u->hascallerid=1;
+ }
+ }
+ }
+ time(&nowtime);
+ }
+ mysql_free_result(result);
+ result = NULL;
+ }
+ ast_mutex_unlock(&mysqllock);
+ }
+ if (!success) {
+ free(u);
+ u = NULL;
+ } else {
+ u->capability = global_capability;
+ u->nat = global_nat;
+ u->dtmfmode = global_dtmfmode;
+ u->insecure = 1;
+ u->temponly = 1;
+ }
+ return u;
}
#endif /* MYSQL_USERS */
@@ -1118,10 +1116,10 @@ static struct sip_peer *mysql_peer(char *peer, struct sockaddr_in *sin)
p = NULL;
} else {
p->dynamic = 1;
- p->capability = capability;
- p->nat = globalnat;
- p->dtmfmode = globaldtmfmode;
- p->promiscredir = globalpromiscredir;
+ p->capability = global_capability;
+ p->nat = global_nat;
+ p->dtmfmode = global_dtmfmode;
+ p->promiscredir = global_promiscredir;
p->insecure = 1;
p->expire = -1;
p->temponly = 1;
@@ -1208,7 +1206,6 @@ static int create_addr(struct sip_pvt *r, char *peer)
int found=0;
char *port;
int portno;
- char iabuf[INET_ADDRSTRLEN];
char host[256], *hostn;
r->sa.sin_family = AF_INET;
@@ -1235,9 +1232,9 @@ static int create_addr(struct sip_pvt *r, char *peer)
strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
if (ast_strlen_zero(r->tohost)) {
if (p->addr.sin_addr.s_addr)
- snprintf(r->tohost, sizeof(r->tohost), ast_inet_ntoa(iabuf, sizeof(iabuf), p->addr.sin_addr));
+ ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
else
- snprintf(r->tohost, sizeof(r->tohost), ast_inet_ntoa(iabuf, sizeof(iabuf), p->defaddr.sin_addr));
+ ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
}
if (!ast_strlen_zero(p->fromdomain))
strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
@@ -1949,7 +1946,7 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
else if (i->capability)
tmp->nativeformats = sip_codec_choose(i->capability);
else
- tmp->nativeformats = sip_codec_choose(capability);
+ tmp->nativeformats = sip_codec_choose(global_capability);
fmt = ast_best_codec(tmp->nativeformats);
if (title)
snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
@@ -2208,7 +2205,7 @@ static void build_callid(char *callid, int len, struct in_addr ourip)
}
/*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
-static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobalnat)
+static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
{
struct sip_pvt *p;
char iabuf[INET_ADDRSTRLEN];
@@ -2242,9 +2239,9 @@ static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useg
ast_rtp_settos(p->rtp, tos);
if (p->vrtp)
ast_rtp_settos(p->vrtp, tos);
- if (useglobalnat && sin) {
+ if (useglobal_nat && sin) {
/* Setup NAT structure according to global settings if we have an address */
- p->nat = globalnat;
+ p->nat = global_nat;
memcpy(&p->recv, sin, sizeof(p->recv));
ast_rtp_setnat(p->rtp, (p->nat == SIP_NAT_ALWAYS));
if (p->vrtp)
@@ -2268,23 +2265,23 @@ static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useg
else
strncpy(p->callid, callid, sizeof(p->callid) - 1);
/* Assume reinvite OK and via INVITE */
- p->canreinvite = globalcanreinvite;
+ p->canreinvite = global_canreinvite;
/* Assign default music on hold class */
- strncpy(p->musicclass, globalmusicclass, sizeof(p->musicclass));
- p->dtmfmode = globaldtmfmode;
- p->promiscredir = globalpromiscredir;
- p->trustrpid = globaltrustrpid;
- p->progressinband = globalprogressinband;
+ strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass));
+ p->dtmfmode = global_dtmfmode;
+ p->promiscredir = global_promiscredir;
+ p->trustrpid = global_trustrpid;
+ p->progressinband = global_progressinband;
#ifdef OSP_SUPPORT
- p->ospauth = globalospauth;
+ p->ospauth = global_ospauth;
#endif
- p->rtptimeout = globalrtptimeout;
- p->rtpholdtimeout = globalrtpholdtimeout;
- p->capability = capability;
+ p->rtptimeout = global_rtptimeout;
+ p->rtpholdtimeout = global_rtpholdtimeout;
+ p->capability = global_capability;
if (p->dtmfmode & SIP_DTMF_RFC2833)
p->noncodeccapability |= AST_RTP_DTMF;
- strncpy(p->context, context, sizeof(p->context) - 1);
- strncpy(p->fromdomain, fromdomain, sizeof(p->fromdomain) - 1);
+ strncpy(p->context, default_context, sizeof(p->context) - 1);
+ strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
/* Add to list */
ast_mutex_lock(&iflock);
p->next = iflist;
@@ -2899,7 +2896,7 @@ static void add_route(struct sip_request *req, struct sip_route *route)
--rem;
}
*p++ = '<';
- strcpy(p, route->hop); p += n;
+ strncpy(p, route->hop, rem); p += n;
*p++ = '>';
rem -= (n+2);
route = route->next;
@@ -3010,6 +3007,7 @@ static int init_req(struct sip_request *req, char *resp, char *recip)
static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
{
char newto[256] = "", *ot;
+
memset(resp, 0, sizeof(*resp));
init_resp(resp, msg, req);
copy_via_headers(p, resp, req, "Via");
@@ -3023,14 +3021,16 @@ static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, stru
snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
else if (p->tag && !p->outgoing)
snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
- else
+ else {
strncpy(newto, ot, sizeof(newto) - 1);
+ newto[sizeof(newto) - 1] = '\0';
+ }
ot = newto;
}
add_header(resp, "To", ot);
copy_header(resp, req, "Call-ID");
copy_header(resp, req, "CSeq");
- add_header(resp, "User-Agent", useragent);
+ add_header(resp, "User-Agent", default_useragent);
add_header(resp, "Allow", ALLOWED_METHODS);
if (p->expiry) {
/* For registration responses, we also need expiry and
@@ -3132,7 +3132,7 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int se
copy_header(req, orig, "Call-ID");
add_header(req, "CSeq", tmp);
- add_header(req, "User-Agent", useragent);
+ add_header(req, "User-Agent", default_useragent);
return 0;
}
@@ -3326,13 +3326,13 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
if (codec > -1) {
snprintf(costr, sizeof(costr), " %d", codec);
if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
- strncat(m, costr, sizeof(m) - strlen(m));
+ strncat(m, costr, sizeof(m) - strlen(m) - 1);
snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
- strncat(a, costr, sizeof(a));
+ strncpy(a, costr, sizeof(a) - 1);
} else {
- strncat(m2, costr, sizeof(m2) - strlen(m2));
+ strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
- strncat(a2, costr, sizeof(a2));
+ strncpy(a2, costr, sizeof(a2) - 1);
}
}
alreadysent |= p->prefcodec;
@@ -3347,13 +3347,13 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
if (codec > -1) {
snprintf(costr, sizeof(costr), " %d", codec);
if (cur->codec <= AST_FORMAT_MAX_AUDIO) {
- strncat(m, costr, sizeof(m) - strlen(m));
+ strncat(m, costr, sizeof(m) - strlen(m) - 1);
snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
- strncat(a, costr, sizeof(a));
+ strncat(a, costr, sizeof(a) - strlen(a) - 1);
} else {
- strncat(m2, costr, sizeof(m2) - strlen(m2));
+ strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
- strncat(a2, costr, sizeof(a2));
+ strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
}
}
}
@@ -3369,13 +3369,13 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
if (codec > -1) {
snprintf(costr, sizeof(costr), " %d", codec);
if (x <= AST_FORMAT_MAX_AUDIO) {
- strncat(m, costr, sizeof(m) - strlen(m));
+ strncat(m, costr, sizeof(m) - strlen(m) - 1);
snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
- strncat(a, costr, sizeof(a) - strlen(a));
+ strncat(a, costr, sizeof(a) - strlen(a) - 1);
} else {
strncat(m2, costr, sizeof(m2) - strlen(m2));
snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
- strncat(a2, costr, sizeof(a2) - strlen(a2));
+ strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);
}
}
}
@@ -3387,19 +3387,19 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
codec = ast_rtp_lookup_code(p->rtp, 0, x);
if (codec > -1) {
snprintf(costr, sizeof(costr), " %d", codec);
- strncat(m, costr, sizeof(m) - strlen(m));
+ strncat(m, costr, sizeof(m) - strlen(m) - 1);
snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(0, x));
- strncat(a, costr, sizeof(a) - strlen(a));
+ strncat(a, costr, sizeof(a) - strlen(a) - 1);
if (x == AST_RTP_DTMF) {
/* Indicate we support DTMF... Not sure about 16, but MSN supports it so dang it, we will too... */
snprintf(costr, sizeof costr, "a=fmtp:%d 0-16\r\n",
codec);
- strncat(a, costr, sizeof(a) - strlen(a));
+ strncat(a, costr, sizeof(a) - strlen(a) - 1);
}
}
}
}
- strncat(a, "a=silenceSupp:off - - - -\r\n", sizeof(a) - strlen(a));
+ strncat(a, "a=silenceSupp:off - - - -\r\n", sizeof(a) - strlen(a) - 1);
if (strlen(m) < sizeof(m) - 2)
strcat(m, "\r\n");
if (strlen(m2) < sizeof(m2) - 2)
@@ -3582,17 +3582,18 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, char *cmd, c
char tmp[80];
char iabuf[INET_ADDRSTRLEN];
char cid[256];
- char *l = callerid, *n=NULL;
+ char *l = default_callerid, *n=NULL;
snprintf(p->lastmsg, sizeof(p->lastmsg), "Init: %s", cmd);
if (p->owner && p->owner->callerid) {
- strcpy(cid, p->owner->callerid);
+ strncpy(cid, p->owner->callerid, sizeof(cid) - 1);
+ cid[sizeof(cid) - 1] = '\0';
ast_callerid_parse(cid, &n, &l);
if (l)
ast_shrink_phone_number(l);
if (!l || !ast_isphonenumber(l))
- l = callerid;
+ l = default_callerid;
}
/* if user want's his callerid restricted */
if (p->restrictcid) {
@@ -3645,7 +3646,7 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, char *cmd, c
add_header(req, "Contact", p->our_contact);
add_header(req, "Call-ID", p->callid);
add_header(req, "CSeq", tmp);
- add_header(req, "User-Agent", useragent);
+ add_header(req, "User-Agent", default_useragent);
}
@@ -3708,12 +3709,16 @@ static int transmit_invite(struct sip_pvt *p, char *cmd, int sdp, char *auth, ch
static int transmit_state_notify(struct sip_pvt *p, int state, int full)
{
char tmp[4000];
+ int maxbytes = 0;
+ int bytes = 0;
char from[256], to[256];
char *t, *c, *a;
char *mfrom, *mto;
struct sip_request req;
char clen[20];
-
+
+ memset(from, 0, sizeof(from));
+ memset(to, 0, sizeof(to));
strncpy(from, get_header(&p->initreq, "From"), sizeof(from)-1);
c = ditch_braces(from);
@@ -3725,63 +3730,77 @@ static int transmit_state_notify(struct sip_pvt *p, int state, int full)
*a = '\0';
}
mfrom = c;
-
+
reqprep(&req, p, "NOTIFY", 0, 1);
if (p->subscribed == 1) {
- strncpy(to, get_header(&p->initreq, "To"), sizeof(to)-1);
+ strncpy(to, get_header(&p->initreq, "To"), sizeof(to)-1);
- c = ditch_braces(to);
- if (strncmp(c, "sip:", 4)) {
- ast_log(LOG_WARNING, "Huh? Not a SIP header (%s)?\n", c);
- return -1;
- }
- if ((a = strchr(c, ';'))) {
- *a = '\0';
- }
- mto = c;
-
- add_header(&req, "Content-Type", "application/xpidf+xml");
-
- if ((state==AST_EXTENSION_UNAVAILABLE) || (state==AST_EXTENSION_BUSY))
- state = 2;
- else if (state==AST_EXTENSION_INUSE)
- state = 1;
- else
- state = 0;
-
- t = tmp;
- sprintf(t, "<?xml version=\"1.0\"?>\n");
- t = tmp + strlen(tmp);
- sprintf(t, "<!DOCTYPE presence PUBLIC \"-//IETF//DTD RFCxxxx XPIDF 1.0//EN\" \"xpidf.dtd\">\n");
- t = tmp + strlen(tmp);
- sprintf(t, "<presence>\n");
- t = tmp + strlen(tmp);
- snprintf(t, 1000, "<presentity uri=\"%s;method=SUBSCRIBE\" />\n", mfrom);
- t = tmp + strlen(tmp);
- snprintf(t, 1000, "<atom id=\"%s\">\n", p->exten);
- t = tmp + strlen(tmp);
- snprintf(t, 1000, "<address uri=\"%s;user=ip\" priority=\"0,800000\">\n", mto);
- t = tmp + strlen(tmp);
- sprintf(t, "<status status=\"%s\" />\n", !state ? "open" : (state==1) ? "inuse" : "closed");
- t = tmp + strlen(tmp);
- sprintf(t, "<msnsubstatus substatus=\"%s\" />\n", !state ? "online" : (state==1) ? "onthephone" : "offline");
- t = tmp + strlen(tmp);
- sprintf(t, "</address>\n</atom>\n</presence>\n");
+ c = ditch_braces(to);
+ if (strncmp(c, "sip:", 4)) {
+ ast_log(LOG_WARNING, "Huh? Not a SIP header (%s)?\n", c);
+ return -1;
+ }
+ if ((a = strchr(c, ';'))) {
+ *a = '\0';
+ }
+ mto = c;
+
+ add_header(&req, "Content-Type", "application/xpidf+xml");
+
+ if ((state==AST_EXTENSION_UNAVAILABLE) || (state==AST_EXTENSION_BUSY))
+ state = 2;
+ else if (state==AST_EXTENSION_INUSE)
+ state = 1;
+ else
+ state = 0;
+
+ t = tmp;
+ maxbytes = sizeof(tmp);
+ bytes = snprintf(t, maxbytes, "<?xml version=\"1.0\"?>\n");
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<!DOCTYPE presence PUBLIC \"-//IETF//DTD RFCxxxx XPIDF 1.0//EN\" \"xpidf.dtd\">\n");
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<presence>\n");
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<presentity uri=\"%s;method=SUBSCRIBE\" />\n", mfrom);
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<atom id=\"%s\">\n", p->exten);
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<address uri=\"%s;user=ip\" priority=\"0,800000\">\n", mto);
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<status status=\"%s\" />\n", !state ? "open" : (state==1) ? "inuse" : "closed");
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<msnsubstatus substatus=\"%s\" />\n", !state ? "online" : (state==1) ? "onthephone" : "offline");
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "</address>\n</atom>\n</presence>\n");
} else {
- add_header(&req, "Event", "dialog");
- add_header(&req, "Content-Type", "application/dialog-info+xml");
-
- t = tmp;
- sprintf(t, "<?xml version=\"1.0\"?>\n");
- t = tmp + strlen(tmp);
- snprintf(t, 1000, "<dialog-info xmlns=\"urn:ietf:params:xml:ns:dialog-info\" version=\"%d\" state=\"%s\" entity=\"%s\">\n", p->dialogver++, full ? "full":"partial", mfrom);
- t = tmp + strlen(tmp);
- snprintf(t, 1000, "<dialog id=\"%s\">\n", p->exten);
- t = tmp + strlen(tmp);
- sprintf(t, "<state>%s</state>\n", state ? "confirmed" : "terminated");
- t = tmp + strlen(tmp);
- sprintf(t, "</dialog>\n</dialog-info>\n");
+ add_header(&req, "Event", "dialog");
+ add_header(&req, "Content-Type", "application/dialog-info+xml");
+
+ t = tmp;
+ maxbytes = sizeof(tmp);
+ bytes = snprintf(t, maxbytes, "<?xml version=\"1.0\"?>\n");
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<dialog-info xmlns=\"urn:ietf:params:xml:ns:dialog-info\" version=\"%d\" state=\"%s\" entity=\"%s\">\n", p->dialogver++, full ? "full":"partial", mfrom);
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<dialog id=\"%s\">\n", p->exten);
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "<state>%s</state>\n", state ? "confirmed" : "terminated");
+ t += bytes;
+ maxbytes -= bytes;
+ bytes = snprintf(t, maxbytes, "</dialog>\n</dialog-info>\n");
}
if (t > tmp + sizeof(tmp))
ast_log(LOG_WARNING, "Buffer overflow detected!! (Please file a bug report)\n");
@@ -3977,7 +3996,7 @@ static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char
add_header(&req, "To", to);
add_header(&req, "Call-ID", p->callid);
add_header(&req, "CSeq", tmp);
- add_header(&req, "User-Agent", useragent);
+ add_header(&req, "User-Agent", default_useragent);
if (auth)
add_header(&req, authheader, auth);
@@ -4185,7 +4204,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req
ast_sched_del(sched, p->expire);
p->expire = -1;
ast_db_del("SIP/Registry", p->name);
- strcpy(p->useragent, "");
+ p->useragent[0] = '\0';
p->lastms = 0;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Unregistered SIP '%s'\n", p->name);
@@ -4235,7 +4254,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req
if (c)
strncpy(p->username, c, sizeof(p->username) - 1);
else
- strcpy(p->username, "");
+ p->username[0] = '\0';
if (p->expire > -1)
ast_sched_del(sched, p->expire);
if ((expiry < 1) || (expiry > max_expiry))
@@ -5018,7 +5037,7 @@ static int get_rpid_num(char *input,char *output, int maxlen)
start = strchr(input,':');
if (!start) {
- strcpy(output, "");
+ output[0] = '\0';
return 0;
}
start++;
@@ -5088,7 +5107,7 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, char *cmd
if ((c = strchr(of, ':')))
*c = '\0';
if (*calleridname)
- sprintf(p->callerid,"\"%s\" <%s>",calleridname,of);
+ snprintf(p->callerid,sizeof(p->callerid),"\"%s\" <%s>",calleridname,of);
else
strncpy(p->callerid, of, sizeof(p->callerid) - 1);
if (ast_strlen_zero(of))
@@ -5105,7 +5124,7 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, char *cmd
/* replace callerid if rpid found, and not restricted */
if(!ast_strlen_zero(rpid_num) && p->trustrpid) {
if (*calleridname)
- sprintf(p->callerid,"\"%s\" <%s>",calleridname,rpid_num);
+ snprintf(p->callerid, sizeof(p->callerid), "\"%s\" <%s>",calleridname,rpid_num);
else
strncpy(p->callerid, rpid_num, sizeof(p->callerid) - 1);
}
@@ -5176,7 +5195,7 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, char *cmd
/* replace callerid if rpid found, and not restricted */
if(!ast_strlen_zero(rpid_num) && p->trustrpid) {
if (*calleridname)
- sprintf(p->callerid,"\"%s\" <%s>",calleridname,rpid_num);
+ snprintf(p->callerid,sizeof(p->callerid),"\"%s\" <%s>",calleridname,rpid_num);
else
strncpy(p->callerid, rpid_num, sizeof(p->callerid) - 1);
}
@@ -5191,12 +5210,14 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, char *cmd
ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (p->nat == SIP_NAT_ALWAYS));
ast_rtp_setnat(p->vrtp, (p->nat == SIP_NAT_ALWAYS));
}
- strcpy(p->peersecret, peer->secret);
- strcpy(p->peermd5secret, peer->md5secret);
+ strncpy(p->peersecret, peer->secret, sizeof(p->peersecret)-1);
+ p->peersecret[sizeof(p->peersecret)-1] = '\0';
+ strncpy(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret)-1);
+ p->peermd5secret[sizeof(p->peermd5secret)-1] = '\0';
if (peer->insecure > 1) {
/* Pretend there is no required authentication if insecure is "very" */
- strcpy(p->peersecret, "");
- strcpy(p->peermd5secret, "");
+ p->peersecret[0] = '\0';
+ p->peermd5secret[0] = '\0';
}
if (!(res = check_auth(p, req, p->randdata, sizeof(p->randdata), peer->name, p->peersecret, p->peermd5secret, cmd, uri, reliable, ignore))) {
p->canreinvite = peer->canreinvite;
@@ -5249,7 +5270,8 @@ static int get_msg_text(char *buf, int len, struct sip_request *req)
{
int x;
int y;
- strcpy(buf, "");
+
+ buf[0] = '\0';
y = len - strlen(buf) - 5;
if (y < 0)
y = 0;
@@ -5361,7 +5383,8 @@ static int sip_show_peers(int fd, int argc, char *argv[])
char status[20];
int print_line = -1;
char srch[2000];
- strncpy(nm, ast_inet_ntoa(iabuf, sizeof(iabuf), peer->mask), sizeof(nm)-1);
+
+ ast_inet_ntoa(nm, sizeof(nm), peer->mask);
if (!ast_strlen_zero(peer->username))
snprintf(name, sizeof(name), "%s/%s", peer->name, peer->username);
else
@@ -5377,25 +5400,25 @@ static int sip_show_peers(int fd, int argc, char *argv[])
strcpy(status, "UNKNOWN");
} else
strcpy(status, "Unmonitored");
- sprintf(srch, FORMAT, name,
- peer->addr.sin_addr.s_addr ? ast_inet_ntoa(iabuf, sizeof(iabuf), peer->addr.sin_addr) : "(Unspecified)",
- peer->dynamic ? " D " : " ", /* Dynamic or not? */
- (peer->nat == SIP_NAT_ALWAYS) ? " N " : " ", /* NAT=yes? */
- peer->ha ? " A " : " ", /* permit/deny */
- nm,
- ntohs(peer->addr.sin_port), status);
-
- if (argc == 5) {
- if (!strcasecmp(argv[3],"include") && strstr(srch,argv[4])) {
- print_line = -1;
- } else if (!strcasecmp(argv[3],"exclude") && !strstr(srch,argv[4])) {
- print_line = 1;
- } else if (!strcasecmp(argv[3],"begin") && !strncasecmp(srch,argv[4],strlen(argv[4]))) {
- print_line = -1;
- } else {
- print_line = 0;
- }
- }
+ snprintf(srch, sizeof(srch), FORMAT, name,
+ peer->addr.sin_addr.s_addr ? ast_inet_ntoa(iabuf, sizeof(iabuf), peer->addr.sin_addr) : "(Unspecified)",
+ peer->dynamic ? " D " : " ", /* Dynamic or not? */
+ (peer->nat == SIP_NAT_ALWAYS) ? " N " : " ", /* NAT=yes? */
+ peer->ha ? " A " : " ", /* permit/deny */
+ nm,
+ ntohs(peer->addr.sin_port), status);
+
+ if (argc == 5) {
+ if (!strcasecmp(argv[3],"include") && strstr(srch,argv[4])) {
+ print_line = -1;
+ } else if (!strcasecmp(argv[3],"exclude") && !strstr(srch,argv[4])) {
+ print_line = 1;
+ } else if (!strcasecmp(argv[3],"begin") && !strncasecmp(srch,argv[4],strlen(argv[4]))) {
+ print_line = -1;
+ } else {
+ print_line = 0;
+ }
+ }
if (print_line) {
ast_cli(fd, FORMAT, name,
@@ -5703,13 +5726,13 @@ static int sip_show_channel(int fd, int argc, char *argv[])
ast_cli(fd, " Last Message: %s\n", cur->lastmsg);
ast_cli(fd, " Promiscuous Redir: %s\n", cur->promiscredir ? "Yes" : "No");
ast_cli(fd, " Route: %s\n", cur->route ? cur->route->hop : "N/A");
- strcpy(tmp, "");
+ tmp[0] = '\0';
if (cur->dtmfmode & SIP_DTMF_RFC2833)
- strcat(tmp, "rfc2833 ");
+ strncat(tmp, "rfc2833 ", sizeof(tmp) - strlen(tmp) - 1);
if (cur->dtmfmode & SIP_DTMF_INFO)
- strcat(tmp, "info ");
+ strncat(tmp, "info ", sizeof(tmp) - strlen(tmp) - 1);
if (cur->dtmfmode & SIP_DTMF_INBAND)
- strcat(tmp, "inband ");
+ strncat(tmp, "inband ", sizeof(tmp) - strlen(tmp) - 1);
ast_cli(fd, " DTMF Mode: %s\n\n", tmp);
found++;
}
@@ -6737,7 +6760,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
build_contact(p);
/* XXX Should we authenticate OPTIONS? XXX */
if (ast_strlen_zero(p->context))
- strncpy(p->context, context, sizeof(p->context) - 1);
+ strncpy(p->context, default_context, sizeof(p->context) - 1);
if (res < 0)
transmit_response_with_allow(p, "404 Not Found", req, 0);
else if (res > 0)
@@ -6797,7 +6820,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
}
/* Initialize the context if it hasn't been already */
if (ast_strlen_zero(p->context))
- strncpy(p->context, context, sizeof(p->context) - 1);
+ strncpy(p->context, default_context, sizeof(p->context) - 1);
/* Check number of concurrent calls -vs- incoming limit HERE */
ast_log(LOG_DEBUG, "Check for res for %s\n", p->username);
res = update_user_counter(p,INC_IN_USE);
@@ -6918,7 +6941,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
} else if (!strcasecmp(cmd, "REFER")) {
ast_log(LOG_DEBUG, "We found a REFER!\n");
if (ast_strlen_zero(p->context))
- strncpy(p->context, context, sizeof(p->context) - 1);
+ strncpy(p->context, default_context, sizeof(p->context) - 1);
res = get_refer_info(p, req);
if (res < 0)
transmit_response_with_allow(p, "404 Not Found", req, 1);
@@ -6992,7 +7015,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
ast_log(LOG_NOTICE, "Client '%s' using deprecated BYE/Also transfer method. Ask vendor to support REFER instead\n",
ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr));
if (ast_strlen_zero(p->context))
- strncpy(p->context, context, sizeof(p->context) - 1);
+ strncpy(p->context, default_context, sizeof(p->context) - 1);
res = get_also_info(p, req);
if (!res) {
c = p->owner;
@@ -7048,7 +7071,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
}
/* Initialize the context if it hasn't been already */
if (ast_strlen_zero(p->context))
- strncpy(p->context, context, sizeof(p->context) - 1);
+ strncpy(p->context, default_context, sizeof(p->context) - 1);
/* Get destination right away */
gotdest = get_destination(p, NULL);
build_contact(p);
@@ -7474,7 +7497,7 @@ static int sip_poke_peer(struct sip_peer *peer)
if (!ast_strlen_zero(p->tohost))
strncpy(p->tohost, peer->tohost, sizeof(p->tohost) - 1);
else
- snprintf(p->tohost, sizeof(p->tohost), "%s", ast_inet_ntoa(iabuf, sizeof(iabuf), peer->addr.sin_addr));
+ ast_inet_ntoa(p->tohost, sizeof(p->tohost), peer->addr.sin_addr);
/* Recalculate our side, and recalculate Call ID */
if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
@@ -7562,7 +7585,7 @@ static struct ast_channel *sip_request(char *type, int format, void *data)
oldformat = format;
format &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
if (!format) {
- ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format %s while capability is %s\n", ast_getformatname(oldformat), ast_getformatname(capability));
+ ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format %s while capability is %s\n", ast_getformatname(oldformat), ast_getformatname(global_capability));
return NULL;
}
p = sip_alloc(NULL, NULL, 0);
@@ -7590,7 +7613,7 @@ static struct ast_channel *sip_request(char *type, int format, void *data)
}
/* Assign a default capability */
- p->capability = capability;
+ p->capability = global_capability;
if (create_addr(p, host)) {
sip_destroy(p);
@@ -7638,18 +7661,17 @@ static struct sip_user *build_user(char *name, struct ast_variable *v)
/* set the usage flag to a sane staring value*/
user->inUse = 0;
user->outUse = 0;
- user->capability = capability;
-
- user->canreinvite = globalcanreinvite;
- user->trustrpid = globaltrustrpid;
- user->progressinband = globalprogressinband;
+ user->capability = global_capability;
+ user->canreinvite = global_canreinvite;
+ user->trustrpid = global_trustrpid;
+ user->progressinband = global_progressinband;
#ifdef OSP_SUPPORT
- user->ospauth = globalospauth;
+ user->ospauth = global_ospauth;
#endif
/* set default context */
- strncpy(user->context, context, sizeof(user->context)-1);
- strncpy(user->language, language, sizeof(user->language)-1);
- strncpy(user->musicclass, globalmusicclass, sizeof(user->musicclass)-1);
+ strncpy(user->context, default_context, sizeof(user->context)-1);
+ strncpy(user->language, default_language, sizeof(user->language)-1);
+ strncpy(user->musicclass, global_musicclass, sizeof(user->musicclass)-1);
while(v) {
if (!strcasecmp(v->name, "context")) {
strncpy(user->context, v->value, sizeof(user->context));
@@ -7763,26 +7785,26 @@ static struct sip_peer *temp_peer(char *name)
peer->expire = -1;
peer->pokeexpire = -1;
strncpy(peer->name, name, sizeof(peer->name)-1);
- strncpy(peer->context, context, sizeof(peer->context)-1);
- strncpy(peer->language, language, sizeof(peer->language)-1);
- strncpy(peer->musicclass, globalmusicclass, sizeof(peer->musicclass)-1);
+ strncpy(peer->context, default_context, sizeof(peer->context)-1);
+ strncpy(peer->language, default_language, sizeof(peer->language)-1);
+ strncpy(peer->musicclass, global_musicclass, sizeof(peer->musicclass)-1);
peer->addr.sin_port = htons(DEFAULT_SIP_PORT);
peer->addr.sin_family = AF_INET;
peer->expiry = expiry;
- peer->capability = capability;
+ peer->capability = global_capability;
/* Assume can reinvite */
- peer->canreinvite = globalcanreinvite;
- peer->dtmfmode = globaldtmfmode;
- peer->promiscredir = globalpromiscredir;
- peer->nat = globalnat;
- peer->rtptimeout = globalrtptimeout;
- peer->rtpholdtimeout = globalrtpholdtimeout;
+ peer->canreinvite = global_canreinvite;
+ peer->dtmfmode = global_dtmfmode;
+ peer->promiscredir = global_promiscredir;
+ peer->nat = global_nat;
+ peer->rtptimeout = global_rtptimeout;
+ peer->rtpholdtimeout = global_rtpholdtimeout;
peer->selfdestruct = 1;
peer->dynamic = 1;
- peer->trustrpid = globaltrustrpid;
- peer->progressinband = globalprogressinband;
+ peer->trustrpid = global_trustrpid;
+ peer->progressinband = global_progressinband;
#ifdef OSP_SUPPORT
- peer->ospauth = globalospauth;
+ peer->ospauth = global_ospauth;
#endif
reg_source_db(peer);
return peer;
@@ -7827,9 +7849,9 @@ static struct sip_peer *build_peer(char *name, struct ast_variable *v)
if (peer) {
if (!found) {
strncpy(peer->name, name, sizeof(peer->name)-1);
- strncpy(peer->context, context, sizeof(peer->context)-1);
- strncpy(peer->language, language, sizeof(peer->language)-1);
- strncpy(peer->musicclass, globalmusicclass, sizeof(peer->musicclass)-1);
+ strncpy(peer->context, default_context, sizeof(peer->context)-1);
+ strncpy(peer->language, default_language, sizeof(peer->language)-1);
+ strncpy(peer->musicclass, global_musicclass, sizeof(peer->musicclass)-1);
peer->addr.sin_port = htons(DEFAULT_SIP_PORT);
peer->addr.sin_family = AF_INET;
peer->defaddr.sin_family = AF_INET;
@@ -7837,17 +7859,17 @@ static struct sip_peer *build_peer(char *name, struct ast_variable *v)
}
oldha = peer->ha;
peer->ha = NULL;
- peer->capability = capability;
+ peer->capability = global_capability;
/* Assume can reinvite */
- peer->canreinvite = globalcanreinvite;
- peer->rtptimeout = globalrtptimeout;
- peer->rtpholdtimeout = globalrtpholdtimeout;
+ peer->canreinvite = global_canreinvite;
+ peer->rtptimeout = global_rtptimeout;
+ peer->rtpholdtimeout = global_rtpholdtimeout;
peer->dtmfmode = 0;
- peer->promiscredir = globalpromiscredir;
- peer->trustrpid = globaltrustrpid;
- peer->progressinband = globalprogressinband;
+ peer->promiscredir = global_promiscredir;
+ peer->trustrpid = global_trustrpid;
+ peer->progressinband = global_progressinband;
#ifdef OSP_SUPPORT
- peer->ospauth = globalospauth;
+ peer->ospauth = global_ospauth;
#endif
while(v) {
if (!strcasecmp(v->name, "secret"))
@@ -7963,12 +7985,12 @@ static struct sip_peer *build_peer(char *name, struct ast_variable *v)
} else if (!strcasecmp(v->name, "rtptimeout")) {
if ((sscanf(v->value, "%d", &peer->rtptimeout) != 1) || (peer->rtptimeout < 0)) {
ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno);
- peer->rtptimeout = globalrtptimeout;
+ peer->rtptimeout = global_rtptimeout;
}
} else if (!strcasecmp(v->name, "rtpholdtimeout")) {
if ((sscanf(v->value, "%d", &peer->rtpholdtimeout) != 1) || (peer->rtpholdtimeout < 0)) {
ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno);
- peer->rtpholdtimeout = globalrtpholdtimeout;
+ peer->rtpholdtimeout = global_rtpholdtimeout;
}
} else if (!strcasecmp(v->name, "qualify")) {
if (!strcasecmp(v->value, "no")) {
@@ -8022,8 +8044,8 @@ static int reload_config(void)
int oldport = ntohs(bindaddr.sin_port);
char iabuf[INET_ADDRSTRLEN];
- globaldtmfmode = SIP_DTMF_RFC2833;
- globalpromiscredir = 0;
+ global_dtmfmode = SIP_DTMF_RFC2833;
+ global_promiscredir = 0;
if (gethostname(ourhost, sizeof(ourhost))) {
ast_log(LOG_WARNING, "Unable to get hostname, SIP disabled\n");
@@ -8037,7 +8059,7 @@ static int reload_config(void)
return 0;
}
- globalnat = SIP_NAT_RFC3581;
+ global_nat = SIP_NAT_RFC3581;
sip_prefs_free();
@@ -8046,94 +8068,97 @@ static int reload_config(void)
memset(&externip, 0, sizeof(externip));
/* Initialize some reasonable defaults */
- strncpy(context, "default", sizeof(context) - 1);
- strcpy(language, "");
- strcpy(fromdomain, "");
+ strncpy(default_context, "default", sizeof(default_context) - 1);
+ default_language[0] = '\0';
+ default_fromdomain[0] = '\0';
strncpy(global_realm, "asterisk", sizeof(global_realm) - 1);
- globalcanreinvite = REINVITE_INVITE;
+ global_realm[sizeof(global_realm)-1] = '\0';
+ global_canreinvite = REINVITE_INVITE;
videosupport = 0;
relaxdtmf = 0;
- globalrtptimeout = 0;
- globalrtpholdtimeout = 0;
+ global_rtptimeout = 0;
+ global_rtpholdtimeout = 0;
pedanticsipchecking=0;
v = ast_variable_browse(cfg, "general");
while(v) {
/* Create the interface list */
if (!strcasecmp(v->name, "context")) {
- strncpy(context, v->value, sizeof(context)-1);
+ strncpy(default_context, v->value, sizeof(default_context)-1);
} else if (!strcasecmp(v->name, "realm")) {
strncpy(global_realm, v->value, sizeof(global_realm)-1);
+ global_realm[sizeof(global_realm)-1] = '\0';
} else if (!strcasecmp(v->name, "useragent")) {
- strncpy(useragent, v->value, sizeof(useragent)-1);
- ast_log(LOG_DEBUG, "Setting User Agent Name to %s\n", useragent);
+ strncpy(default_useragent, v->value, sizeof(default_useragent)-1);
+ ast_log(LOG_DEBUG, "Setting User Agent Name to %s\n",
+ default_useragent);
} else if (!strcasecmp(v->name, "relaxdtmf")) {
relaxdtmf = ast_true(v->value);
} else if (!strcasecmp(v->name, "promiscredir")) {
- globalpromiscredir = ast_true(v->value);
+ global_promiscredir = ast_true(v->value);
} else if (!strcasecmp(v->name, "dtmfmode")) {
if (!strcasecmp(v->value, "inband"))
- globaldtmfmode=SIP_DTMF_INBAND;
+ global_dtmfmode=SIP_DTMF_INBAND;
else if (!strcasecmp(v->value, "rfc2833"))
- globaldtmfmode = SIP_DTMF_RFC2833;
+ global_dtmfmode = SIP_DTMF_RFC2833;
else if (!strcasecmp(v->value, "info"))
- globaldtmfmode = SIP_DTMF_INFO;
+ global_dtmfmode = SIP_DTMF_INFO;
else {
ast_log(LOG_WARNING, "Unknown dtmf mode '%s', using rfc2833\n", v->value);
- globaldtmfmode = SIP_DTMF_RFC2833;
+ global_dtmfmode = SIP_DTMF_RFC2833;
}
} else if (!strcasecmp(v->name, "rtptimeout")) {
- if ((sscanf(v->value, "%d", &globalrtptimeout) != 1) || (globalrtptimeout < 0)) {
+ if ((sscanf(v->value, "%d", &global_rtptimeout) != 1) || (global_rtptimeout < 0)) {
ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno);
- globalrtptimeout = 0;
+ global_rtptimeout = 0;
}
} else if (!strcasecmp(v->name, "rtpholdtimeout")) {
- if ((sscanf(v->value, "%d", &globalrtpholdtimeout) != 1) || (globalrtpholdtimeout < 0)) {
+ if ((sscanf(v->value, "%d", &global_rtpholdtimeout) != 1) || (global_rtpholdtimeout < 0)) {
ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno);
- globalrtpholdtimeout = 0;
+ global_rtpholdtimeout = 0;
}
} else if (!strcasecmp(v->name, "videosupport")) {
videosupport = ast_true(v->value);
} else if (!strcasecmp(v->name, "notifymimetype")) {
strncpy(notifymime, v->value, sizeof(notifymime) - 1);
} else if (!strcasecmp(v->name, "musicclass")) {
- strncpy(globalmusicclass, v->value, sizeof(globalmusicclass) - 1);
+ strncpy(global_musicclass, v->value, sizeof(global_musicclass) - 1);
} else if (!strcasecmp(v->name, "language")) {
- strncpy(language, v->value, sizeof(language)-1);
+ strncpy(default_language, v->value, sizeof(default_language)-1);
} else if (!strcasecmp(v->name, "callerid")) {
- strncpy(callerid, v->value, sizeof(callerid)-1);
+ strncpy(default_callerid, v->value, sizeof(default_callerid)-1);
} else if (!strcasecmp(v->name, "fromdomain")) {
- strncpy(fromdomain, v->value, sizeof(fromdomain)-1);
+ strncpy(default_fromdomain, v->value, sizeof(default_fromdomain)-1);
} else if (!strcasecmp(v->name, "nat")) {
if (!strcasecmp(v->value, "rfc3581"))
- globalnat = SIP_NAT_RFC3581;
+ global_nat = SIP_NAT_RFC3581;
else if (ast_true(v->value))
- globalnat = SIP_NAT_ALWAYS;
+ global_nat = SIP_NAT_ALWAYS;
else
- globalnat = SIP_NAT_NEVER;
+ global_nat = SIP_NAT_NEVER;
} else if (!strcasecmp(v->name, "autocreatepeer")) {
autocreatepeer = ast_true(v->value);
} else if (!strcasecmp(v->name, "srvlookup")) {
srvlookup = ast_true(v->value);
} else if (!strcasecmp(v->name, "trustrpid")) {
- globaltrustrpid = ast_true(v->value);
+ global_trustrpid = ast_true(v->value);
} else if (!strcasecmp(v->name, "progressinband")) {
- globalprogressinband = ast_true(v->value);
+ global_progressinband = ast_true(v->value);
#ifdef OSP_SUPPORT
} else if (!strcasecmp(v->name, "ospauth")) {
if (!strcasecmp(v->value, "exclusive")) {
- globalospauth = 2;
+ global_ospauth = 2;
} else if (ast_true(v->value)) {
- globalospauth = 1;
+ global_ospauth = 1;
} else
- globalospauth = 0;
+ global_ospauth = 0;
#endif
} else if (!strcasecmp(v->name, "pedantic")) {
pedanticsipchecking = ast_true(v->value);
} else if (!strcasecmp(v->name, "canreinvite")) {
if (!strcasecmp(v->value, "update"))
- globalcanreinvite = REINVITE_UPDATE;
+ global_canreinvite = REINVITE_UPDATE;
else
- globalcanreinvite = ast_true(v->value);
+ global_canreinvite = ast_true(v->value);
} else if (!strcasecmp(v->name, "maxexpirey") || !strcasecmp(v->name, "maxexpiry")) {
max_expiry = atoi(v->value);
if (max_expiry < 1)
@@ -8166,7 +8191,7 @@ static int reload_config(void)
if (format < 1)
ast_log(LOG_WARNING, "Cannot allow unknown format '%s'\n", v->value);
else {
- capability |= format;
+ global_capability |= format;
sip_pref_append(format);
}
} else if (!strcasecmp(v->name, "disallow")) {
@@ -8174,7 +8199,7 @@ static int reload_config(void)
if (format < 1)
ast_log(LOG_WARNING, "Cannot disallow unknown format '%s'\n", v->value);
else {
- capability &= ~format;
+ global_capability &= ~format;
sip_pref_remove(format);
}
} else if (!strcasecmp(v->name, "register")) {