[asterisk-commits] branch kpfleming/stringfields - r7766 in
/team/kpfleming/stringfields: ./ cha...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Tue Jan 3 22:11:43 CST 2006
Author: kpfleming
Date: Tue Jan 3 22:11:42 2006
New Revision: 7766
URL: http://svn.digium.com/view/asterisk?rev=7766&view=rev
Log:
convert remaining sip_pvt buffers to string fields
add 'const' qualifiers to a few API calls
Modified:
team/kpfleming/stringfields/channels/chan_sip.c
team/kpfleming/stringfields/include/asterisk/pbx.h
team/kpfleming/stringfields/include/asterisk/stringfields.h
team/kpfleming/stringfields/include/asterisk/utils.h
team/kpfleming/stringfields/pbx.c
team/kpfleming/stringfields/utils.c
Modified: team/kpfleming/stringfields/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/kpfleming/stringfields/channels/chan_sip.c?rev=7766&r1=7765&r2=7766&view=diff
==============================================================================
--- team/kpfleming/stringfields/channels/chan_sip.c (original)
+++ team/kpfleming/stringfields/channels/chan_sip.c Tue Jan 3 22:11:42 2006
@@ -606,6 +606,36 @@
AST_STRING_FIELD(opaque); /*!< Opaque nonsense */
AST_STRING_FIELD(qop); /*!< Quality of Protection, since SIP wasn't complicated enough yet. */
AST_STRING_FIELD(domain); /*!< Authorization domain */
+ AST_STRING_FIELD(refer_to); /*!< Place to store REFER-TO extension */
+ AST_STRING_FIELD(referred_by); /*!< Place to store REFERRED-BY extension */
+ AST_STRING_FIELD(refer_contact);/*!< Place to store Contact info from a REFER extension */
+ AST_STRING_FIELD(from); /*!< The From: header */
+ AST_STRING_FIELD(useragent); /*!< User agent in SIP request */
+ AST_STRING_FIELD(exten); /*!< Extension where to start */
+ AST_STRING_FIELD(context); /*!< Context for this call */
+ AST_STRING_FIELD(subscribecontext); /*!< Subscribecontext */
+ AST_STRING_FIELD(fromdomain); /*!< Domain to show in the from field */
+ AST_STRING_FIELD(fromuser); /*!< User to show in the user field */
+ AST_STRING_FIELD(fromname); /*!< Name to show in the user field */
+ AST_STRING_FIELD(tohost); /*!< Host we should put in the "to" field */
+ AST_STRING_FIELD(language); /*!< Default language for this call */
+ AST_STRING_FIELD(musicclass); /*!< Music on Hold class */
+ AST_STRING_FIELD(rdnis); /*!< Referring DNIS */
+ AST_STRING_FIELD(theirtag); /*!< Their tag */
+ AST_STRING_FIELD(username); /*!< [user] name */
+ AST_STRING_FIELD(peername); /*!< [peer] name, not set if [user] */
+ AST_STRING_FIELD(authname); /*!< Who we use for authentication */
+ AST_STRING_FIELD(uri); /*!< Original requested URI */
+ AST_STRING_FIELD(okcontacturi); /*!< URI from the 200 OK on INVITE */
+ AST_STRING_FIELD(peersecret); /*!< Password */
+ AST_STRING_FIELD(peermd5secret);
+ AST_STRING_FIELD(cid_num); /*!< Caller*ID */
+ AST_STRING_FIELD(cid_name); /*!< Caller*ID */
+ AST_STRING_FIELD(via); /*!< Via: header */
+ AST_STRING_FIELD(fullcontact); /*!< The Contact: that the UA registers with us */
+ AST_STRING_FIELD(our_contact); /*!< Our contact header */
+ AST_STRING_FIELD(rpid); /*!< Our RPID header */
+ AST_STRING_FIELD(rpid_from); /*!< Our RPID From header */
);
struct ast_codec_pref prefs; /*!< codec prefs */
unsigned int ocseq; /*!< Current outgoing seqno */
@@ -635,40 +665,10 @@
struct sockaddr_in recv; /*!< Received as */
struct in_addr ourip; /*!< Our IP */
struct ast_channel *owner; /*!< Who owns us */
- char exten[AST_MAX_EXTENSION]; /*!< Extension where to start */
- char refer_to[AST_MAX_EXTENSION]; /*!< Place to store REFER-TO extension */
- char referred_by[AST_MAX_EXTENSION]; /*!< Place to store REFERRED-BY extension */
- char refer_contact[AST_MAX_EXTENSION]; /*!< Place to store Contact info from a REFER extension */
struct sip_pvt *refer_call; /*!< Call we are referring */
struct sip_route *route; /*!< Head of linked list of routing steps (fm Record-Route) */
int route_persistant; /*!< Is this the "real" route? */
- char from[256]; /*!< The From: header */
- char useragent[256]; /*!< User agent in SIP request */
- char context[AST_MAX_CONTEXT]; /*!< Context for this call */
- char subscribecontext[AST_MAX_CONTEXT]; /*!< Subscribecontext */
- char fromdomain[MAXHOSTNAMELEN]; /*!< Domain to show in the from field */
- char fromuser[AST_MAX_EXTENSION]; /*!< User to show in the user field */
- char fromname[AST_MAX_EXTENSION]; /*!< Name to show in the user field */
- char tohost[MAXHOSTNAMELEN]; /*!< Host we should put in the "to" field */
- char language[MAX_LANGUAGE]; /*!< Default language for this call */
- char musicclass[MAX_MUSICCLASS]; /*!< Music on Hold class */
- char rdnis[256]; /*!< Referring DNIS */
- char theirtag[256]; /*!< Their tag */
- char username[256]; /*!< [user] name */
- char peername[256]; /*!< [peer] name, not set if [user] */
- char authname[256]; /*!< Who we use for authentication */
- char uri[256]; /*!< Original requested URI */
- char okcontacturi[256]; /*!< URI from the 200 OK on INVITE */
- char peersecret[256]; /*!< Password */
- char peermd5secret[256];
struct sip_auth *peerauth; /*!< Realm authentication */
- char cid_num[256]; /*!< Caller*ID */
- char cid_name[256]; /*!< Caller*ID */
- char via[256]; /*!< Via: header */
- char fullcontact[128]; /*!< The Contact: that the UA registers with us */
- char our_contact[256]; /*!< Our contact header */
- char *rpid; /*!< Our RPID header */
- char *rpid_from; /*!< Our RPID From header */
int noncecount; /*!< Nonce-count */
char lastmsg[256]; /*!< Last Message sent/received */
int amaflags; /*!< AMA Flags */
@@ -1086,15 +1086,15 @@
static void sip_destroy(struct sip_pvt *p);
/*! \brief build_via: Build a Via header for a request ---*/
-static void build_via(struct sip_pvt *p, char *buf, int len)
+static void build_via(struct sip_pvt *p)
{
char iabuf[INET_ADDRSTRLEN];
/* Work around buggy UNIDEN UIP200 firmware */
- const char *rport= ast_test_flag(p, SIP_NAT) & SIP_NAT_RFC3581 ? ";rport" : "";
+ const char *rport = ast_test_flag(p, SIP_NAT) & SIP_NAT_RFC3581 ? ";rport" : "";
/* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
- snprintf(buf, len, "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x%s",
- ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch, rport);
+ ast_string_field_build(p, via, "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x%s",
+ ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch, rport);
}
/*! \brief ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
@@ -1859,28 +1859,31 @@
ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
ast_rtp_setnat(r->vrtp, (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE));
}
- ast_copy_string(r->peername, peer->username, sizeof(r->peername));
- ast_copy_string(r->authname, peer->username, sizeof(r->authname));
- ast_copy_string(r->username, peer->username, sizeof(r->username));
- ast_copy_string(r->peersecret, peer->secret, sizeof(r->peersecret));
- ast_copy_string(r->peermd5secret, peer->md5secret, sizeof(r->peermd5secret));
- ast_copy_string(r->tohost, peer->tohost, sizeof(r->tohost));
- ast_copy_string(r->fullcontact, peer->fullcontact, sizeof(r->fullcontact));
+ ast_string_field_set(r, peername, peer->username);
+ ast_string_field_set(r, authname, peer->username);
+ ast_string_field_set(r, username, peer->username);
+ ast_string_field_set(r, peersecret, peer->secret);
+ ast_string_field_set(r, peermd5secret, peer->md5secret);
+ ast_string_field_set(r, tohost, peer->tohost);
+ ast_string_field_set(r, fullcontact, peer->fullcontact);
if (!r->initreq.headers && !ast_strlen_zero(peer->fromdomain)) {
if ((callhost = strchr(r->callid, '@'))) {
strncpy(callhost + 1, peer->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
}
}
if (ast_strlen_zero(r->tohost)) {
+ char iabuf[INET_ADDRSTRLEN];
+
if (peer->addr.sin_addr.s_addr)
- ast_inet_ntoa(r->tohost, sizeof(r->tohost), peer->addr.sin_addr);
+ ast_inet_ntoa(iabuf, sizeof(iabuf), peer->addr.sin_addr);
else
- ast_inet_ntoa(r->tohost, sizeof(r->tohost), peer->defaddr.sin_addr);
+ ast_inet_ntoa(iabuf, sizeof(iabuf), peer->defaddr.sin_addr);
+ ast_string_field_set(r, tohost, iabuf);
}
if (!ast_strlen_zero(peer->fromdomain))
- ast_copy_string(r->fromdomain, peer->fromdomain, sizeof(r->fromdomain));
+ ast_string_field_set(r, fromdomain, peer->fromdomain);
if (!ast_strlen_zero(peer->fromuser))
- ast_copy_string(r->fromuser, peer->fromuser, sizeof(r->fromuser));
+ ast_string_field_set(r, fromuser, peer->fromuser);
r->maxtime = peer->maxms;
r->callgroup = peer->callgroup;
r->pickupgroup = peer->pickupgroup;
@@ -1891,7 +1894,7 @@
r->noncodeccapability |= AST_RTP_DTMF;
else
r->noncodeccapability &= ~AST_RTP_DTMF;
- ast_copy_string(r->context, peer->context,sizeof(r->context));
+ ast_string_field_set(r, context, peer->context);
r->rtptimeout = peer->rtptimeout;
r->rtpholdtimeout = peer->rtpholdtimeout;
r->rtpkeepalive = peer->rtpkeepalive;
@@ -1952,7 +1955,7 @@
}
hp = ast_gethostbyname(hostn, &ahp);
if (hp) {
- ast_copy_string(dialog->tohost, peer, sizeof(dialog->tohost));
+ ast_string_field_set(dialog, tohost, peer);
memcpy(&dialog->sa.sin_addr, hp->h_addr, sizeof(dialog->sa.sin_addr));
dialog->sa.sin_port = htons(portno);
memcpy(&dialog->recv, &dialog->sa, sizeof(dialog->recv));
@@ -2117,12 +2120,6 @@
p->registry->call = NULL;
ASTOBJ_UNREF(p->registry,sip_registry_destroy);
}
-
- if (p->rpid)
- free(p->rpid);
-
- if (p->rpid_from)
- free(p->rpid_from);
/* Unlink us from the owner if we have one */
if (p->owner) {
@@ -2712,7 +2709,7 @@
/*! \brief sip_new: Initiate a call in the SIP channel */
/* called from sip_request_call (calls from the pbx ) */
-static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
+static struct ast_channel *sip_new(struct sip_pvt *i, int state, const char *title)
{
struct ast_channel *tmp;
struct ast_variable *v = NULL;
@@ -3110,19 +3107,19 @@
}
if (p->method != SIP_REGISTER)
- ast_copy_string(p->fromdomain, default_fromdomain, sizeof(p->fromdomain));
- build_via(p, p->via, sizeof(p->via));
+ ast_string_field_set(p, fromdomain, default_fromdomain);
+ build_via(p);
if (!callid)
build_callid_pvt(p);
else
ast_string_field_set(p, callid, callid);
ast_copy_flags(p, &global_flags, SIP_FLAGS_TO_COPY);
/* Assign default music on hold class */
- strcpy(p->musicclass, global_musicclass);
+ ast_string_field_set(p, musicclass, global_musicclass);
p->capability = global_capability;
if ((ast_test_flag(p, SIP_DTMF) == SIP_DTMF_RFC2833) || (ast_test_flag(p, SIP_DTMF) == SIP_DTMF_AUTO))
p->noncodeccapability |= AST_RTP_DTMF;
- strcpy(p->context, default_context);
+ ast_string_field_set(p, context, default_context);
/* Add to active dialog list */
ast_mutex_lock(&iflock);
@@ -3979,7 +3976,7 @@
}
/*! \brief init_req: Initialize SIP request ---*/
-static int init_req(struct sip_request *req, int sipmethod, char *recip)
+static int init_req(struct sip_request *req, int sipmethod, const char *recip)
{
/* Initialize a response */
if (req->headers || req->len) {
@@ -4050,7 +4047,8 @@
char stripped[80];
char tmp[80];
char newto[256];
- char *c, *n;
+ const char *c;
+ char *n;
char *ot, *of;
int is_strict = 0; /* Strict routing flag */
@@ -4065,7 +4063,7 @@
if (newbranch) {
p->branch ^= thread_safe_rand();
- build_via(p, p->via, sizeof(p->via));
+ build_via(p);
}
/* Check for strict or loose router */
@@ -4087,8 +4085,8 @@
c = p->uri;
} else {
/* We have no URI, use To: or From: header as URI (depending on direction) */
- c = get_header(orig, (ast_test_flag(p, SIP_OUTGOING)) ? "To" : "From");
- ast_copy_string(stripped, c, sizeof(stripped));
+ ast_copy_string(stripped, get_header(orig, (ast_test_flag(p, SIP_OUTGOING)) ? "To" : "From"),
+ sizeof(stripped));
c = get_in_brackets(stripped);
n = strchr(c, ';');
if (n)
@@ -4637,7 +4635,7 @@
if (n)
*n = '\0';
if (!ast_strlen_zero(c))
- ast_copy_string(p->uri, c, sizeof(p->uri));
+ ast_string_field_set(p, uri, c);
}
/*! \brief build_contact: Build contact header - the contact header we send out ---*/
@@ -4647,9 +4645,9 @@
/* Construct Contact: header */
if (ourport != 5060) /* Needs to be 5060, according to the RFC */
- snprintf(p->our_contact, sizeof(p->our_contact), "<sip:%s%s%s:%d>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport);
+ ast_string_field_build(p, our_contact, "<sip:%s%s%s:%d>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport);
else
- snprintf(p->our_contact, sizeof(p->our_contact), "<sip:%s%s%s>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip));
+ ast_string_field_build(p, our_contact, "<sip:%s%s%s>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip));
}
/*! \brief build_rpid: Build the Remote Party-ID & From using callingpres options ---*/
@@ -4725,12 +4723,11 @@
snprintf(buf, sizeof(buf), "\"%s\" <sip:%s@%s>", clin, clid, fromdomain);
if (send_pres_tags)
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ";privacy=%s;screen=%s", privacy, screen);
- p->rpid = strdup(buf);
-
- snprintf(buf, sizeof(buf), "\"%s\" <sip:%s@%s>;tag=%s", clin,
- ast_strlen_zero(p->fromuser) ? clid : p->fromuser,
- fromdomain, p->tag);
- p->rpid_from = strdup(buf);
+ ast_string_field_set(p, rpid, buf);
+
+ ast_string_field_build(p, rpid_from, "\"%s\" <sip:%s@%s>;tag=%s", clin,
+ ast_strlen_zero(p->fromuser) ? clid : p->fromuser,
+ fromdomain, p->tag);
}
/*! \brief initreqprep: Initiate new SIP request to peer/user ---*/
@@ -4744,7 +4741,7 @@
char tmp[BUFSIZ/2];
char tmp2[BUFSIZ/2];
char iabuf[INET_ADDRSTRLEN];
- char *l = NULL, *n = NULL;
+ const char *l = NULL, *n = NULL;
int x;
char urioptions[256]="";
@@ -4792,13 +4789,13 @@
if (!ast_strlen_zero(p->fromuser))
l = p->fromuser;
else /* Save for any further attempts */
- ast_copy_string(p->fromuser, l, sizeof(p->fromuser));
+ ast_string_field_set(p, fromuser, l);
/* Allow user to be overridden */
if (!ast_strlen_zero(p->fromname))
n = p->fromname;
else /* Save for any further attempts */
- ast_copy_string(p->fromname, n, sizeof(p->fromname));
+ ast_string_field_set(p, fromname, n);
if (pedanticsipchecking) {
ast_uri_encode(n, tmp, sizeof(tmp), 0);
@@ -4836,8 +4833,8 @@
/* If custom URI options have been provided, append them */
if (p->options && p->options->uri_options)
ast_build_string(&invite, &invite_max, ";%s", p->options->uri_options);
-
- ast_copy_string(p->uri, invite_buf, sizeof(p->uri));
+
+ ast_string_field_set(p, uri, invite_buf);
/* If there is a VXML URL append it to the SIP URL */
if (p->options && p->options->vxml_url) {
@@ -4860,7 +4857,7 @@
add_header(req, "From", from);
}
add_header(req, "To", to);
- ast_copy_string(p->exten, l, sizeof(p->exten));
+ ast_string_field_set(p, exten, l);
build_contact(p);
add_header(req, "Contact", p->our_contact);
add_header(req, "Call-ID", p->callid);
@@ -4880,7 +4877,7 @@
if (init) {
/* Bump branch even on initial requests */
p->branch ^= thread_safe_rand();
- build_via(p, p->via, sizeof(p->via));
+ build_via(p);
if (init > 1)
initreqprep(&req, p, sipmethod);
else
@@ -5326,7 +5323,6 @@
char from[256];
char to[256];
char tmp[80];
- char via[80];
char addr[80];
struct sip_pvt *p;
@@ -5343,7 +5339,7 @@
} else {
p = r->call;
make_our_tag(p->tag, sizeof(p->tag)); /* create a new local tag for every register attempt */
- p->theirtag[0]='\0'; /* forget their old tag, so we don't match tags when getting response */
+ ast_string_field_free(p, theirtag); /* forget their old tag, so we don't match tags when getting response */
}
} else {
/* Build callid for registration if we haven't registered before */
@@ -5383,25 +5379,25 @@
r->call=p; /* Save pointer to SIP packet */
p->registry=ASTOBJ_REF(r); /* Add pointer to registry in packet */
if (!ast_strlen_zero(r->secret)) /* Secret (password) */
- ast_copy_string(p->peersecret, r->secret, sizeof(p->peersecret));
+ ast_string_field_set(p, peersecret, r->secret);
if (!ast_strlen_zero(r->md5secret))
- ast_copy_string(p->peermd5secret, r->md5secret, sizeof(p->peermd5secret));
+ ast_string_field_set(p, peermd5secret, r->md5secret);
/* User name in this realm
- if authuser is set, use that, otherwise use username */
if (!ast_strlen_zero(r->authuser)) {
- ast_copy_string(p->peername, r->authuser, sizeof(p->peername));
- ast_copy_string(p->authname, r->authuser, sizeof(p->authname));
+ ast_string_field_set(p, peername, r->authuser);
+ ast_string_field_set(p, authname, r->authuser);
} else {
if (!ast_strlen_zero(r->username)) {
- ast_copy_string(p->peername, r->username, sizeof(p->peername));
- ast_copy_string(p->authname, r->username, sizeof(p->authname));
- ast_copy_string(p->fromuser, r->username, sizeof(p->fromuser));
+ ast_string_field_set(p, peername, r->username);
+ ast_string_field_set(p, authname, r->username);
+ ast_string_field_set(p, fromuser, r->username);
}
}
if (!ast_strlen_zero(r->username))
- ast_copy_string(p->username, r->username, sizeof(p->username));
+ ast_string_field_set(p, username, r->username);
/* Save extension in packet */
- ast_copy_string(p->exten, r->contact, sizeof(p->exten));
+ ast_string_field_set(p, exten, r->contact);
/*
check which address we should use in our contact header
@@ -5443,7 +5439,7 @@
snprintf(addr, sizeof(addr), "sip:%s", p->fromdomain);
else
snprintf(addr, sizeof(addr), "sip:%s", r->hostname);
- ast_copy_string(p->uri, addr, sizeof(p->uri));
+ ast_string_field_set(p, uri, addr);
p->branch ^= thread_safe_rand();
@@ -5454,8 +5450,8 @@
snprintf(tmp, sizeof(tmp), "%u %s", ++r->ocseq, sip_methods[sipmethod].text);
p->ocseq = r->ocseq;
- build_via(p, via, sizeof(via));
- add_header(&req, "Via", via);
+ build_via(p);
+ add_header(&req, "Via", p->via);
add_header(&req, "From", from);
add_header(&req, "To", to);
add_header(&req, "Call-ID", p->callid);
@@ -5529,7 +5525,7 @@
of = get_header(&p->initreq, "From");
ast_copy_string(from, of, sizeof(from));
of = get_in_brackets(from);
- ast_copy_string(p->from,of,sizeof(p->from));
+ ast_string_field_set(p, from, of);
if (strncmp(of, "sip:", 4)) {
ast_log(LOG_NOTICE, "From address missing 'sip:', using it anyway\n");
} else
@@ -5548,8 +5544,8 @@
}
/* save in case we get 407 challenge */
- ast_copy_string(p->refer_to, referto, sizeof(p->refer_to));
- ast_copy_string(p->referred_by, p->our_contact, sizeof(p->referred_by));
+ ast_string_field_set(p, refer_to, referto);
+ ast_string_field_set(p, referred_by, p->our_contact);
reqprep(&req, p, SIP_REFER, 0, 1);
add_header(&req, "Refer-To", referto);
@@ -5739,10 +5735,10 @@
c = get_in_brackets(contact);
/* Save full contact to call pvt for later bye or re-invite */
- ast_copy_string(pvt->fullcontact, c, sizeof(pvt->fullcontact));
+ ast_string_field_set(pvt, fullcontact, c);
/* Save URI for later ACKs, BYE or RE-invites */
- ast_copy_string(pvt->okcontacturi, c, sizeof(pvt->okcontacturi));
+ ast_string_field_set(pvt, okcontacturi, c);
/* Make sure it's a SIP URL */
if (strncasecmp(c, "sip:", 4)) {
@@ -5871,7 +5867,7 @@
}
ast_copy_string(p->fullcontact, c, sizeof(p->fullcontact));
/* For the 200 OK, we should use the received contact */
- snprintf(pvt->our_contact, sizeof(pvt->our_contact) - 1, "<%s>", c);
+ ast_string_field_build(pvt, our_contact, "<%s>", c);
/* Make sure it's a SIP URL */
if (strncasecmp(c, "sip:", 4)) {
ast_log(LOG_NOTICE, "'%s' is not a valid SIP contact (missing sip:) trying to use anyway\n", c);
@@ -6099,7 +6095,9 @@
/*! \brief check_auth: Check user authorization from peer definition ---*/
/* Some actions, like REGISTER and INVITEs from peers require
authentication (if peer have secret set) */
-static int check_auth(struct sip_pvt *p, struct sip_request *req, char *username, char *secret, char *md5secret, int sipmethod, char *uri, int reliable, int ignore)
+static int check_auth(struct sip_pvt *p, struct sip_request *req, const char *username,
+ const char *secret, const char *md5secret, int sipmethod,
+ char *uri, int reliable, int ignore)
{
int res = -1;
char *response = "407 Proxy Authentication Required";
@@ -6397,7 +6395,7 @@
}
}
- ast_copy_string(p->exten, name, sizeof(p->exten));
+ ast_string_field_set(p, exten, name);
build_contact(p);
peer = find_peer(name, NULL, 1);
if (!(peer && ast_apply_ha(peer->ha, sin))) {
@@ -6516,7 +6514,7 @@
}
if (sip_debug_test_pvt(p))
ast_verbose("RDNIS is %s\n", c);
- ast_copy_string(p->rdnis, c, sizeof(p->rdnis));
+ ast_string_field_set(p, rdnis, c);
return 0;
}
@@ -6585,7 +6583,7 @@
}
/* If we have a context defined, overwrite the original context */
if (!ast_strlen_zero(domain_context))
- ast_copy_string(p->context, domain_context, sizeof(p->context));
+ ast_string_field_set(p, context, domain_context);
}
if (from) {
@@ -6593,9 +6591,9 @@
*a = '\0';
if ((a = strchr(from, '@'))) {
*a = '\0';
- ast_copy_string(p->fromdomain, a + 1, sizeof(p->fromdomain));
+ ast_string_field_set(p, fromdomain, a + 1);
} else
- ast_copy_string(p->fromdomain, from, sizeof(p->fromdomain));
+ ast_string_field_set(p, fromdomain, from);
}
if (sip_debug_test_pvt(p))
ast_verbose("Looking for %s in %s (domain %s)\n", uri, p->context, p->domain);
@@ -6604,7 +6602,7 @@
if (ast_exists_extension(NULL, p->context, uri, 1, from) ||
!strcmp(uri, ast_pickup_ext())) {
if (!oreq)
- ast_copy_string(p->exten, uri, sizeof(p->exten));
+ ast_string_field_set(p, exten, uri);
return 0;
}
@@ -6740,9 +6738,9 @@
/* This is a supervised transfer */
ast_log(LOG_DEBUG,"Assigning Replace-Call-ID Info %s to REPLACE_CALL_ID\n",replace_callid);
- ast_copy_string(sip_pvt->refer_to, "", sizeof(sip_pvt->refer_to));
- ast_copy_string(sip_pvt->referred_by, "", sizeof(sip_pvt->referred_by));
- ast_copy_string(sip_pvt->refer_contact, "", sizeof(sip_pvt->refer_contact));
+ ast_string_field_free(sip_pvt, refer_to);
+ ast_string_field_free(sip_pvt, referred_by);
+ ast_string_field_free(sip_pvt, refer_contact);
sip_pvt->refer_call = NULL;
if ((sip_pvt_ptr = get_sip_pvt_byid_locked(replace_callid))) {
sip_pvt->refer_call = sip_pvt_ptr;
@@ -6764,11 +6762,11 @@
if (referred_by)
ast_log(LOG_DEBUG,"Transferred by (Referred-by: ) %s \n", referred_by);
ast_log(LOG_DEBUG,"Transfer Contact Info %s (REFER_CONTACT)\n", h_contact);
- ast_copy_string(sip_pvt->refer_to, refer_to, sizeof(sip_pvt->refer_to));
+ ast_string_field_set(sip_pvt, refer_to, refer_to);
if (referred_by)
- ast_copy_string(sip_pvt->referred_by, referred_by, sizeof(sip_pvt->referred_by));
+ ast_string_field_set(sip_pvt, referred_by, referred_by);
if (h_contact) {
- ast_copy_string(sip_pvt->refer_contact, h_contact, sizeof(sip_pvt->refer_contact));
+ ast_string_field_set(sip_pvt, refer_contact, h_contact);
}
sip_pvt->refer_call = NULL;
if ((chan = sip_pvt->owner) && (peer = ast_bridged_channel(sip_pvt->owner))) {
@@ -6813,9 +6811,9 @@
if (ast_exists_extension(NULL, p->context, c, 1, NULL)) {
/* This is an unsupervised transfer */
ast_log(LOG_DEBUG,"Assigning Extension %s to REFER-TO\n", c);
- ast_copy_string(p->refer_to, c, sizeof(p->refer_to));
- ast_copy_string(p->referred_by, "", sizeof(p->referred_by));
- ast_copy_string(p->refer_contact, "", sizeof(p->refer_contact));
+ ast_string_field_set(p, refer_to, c);
+ ast_string_field_free(p, referred_by);
+ ast_string_field_free(p, refer_contact);
p->refer_call = NULL;
return 0;
} else if (ast_canmatch_extension(NULL, p->context, c, 1, NULL)) {
@@ -6977,7 +6975,7 @@
memset(calleridname, 0, sizeof(calleridname));
get_calleridname(from, calleridname, sizeof(calleridname));
if (calleridname[0])
- ast_copy_string(p->cid_name, calleridname, sizeof(p->cid_name));
+ ast_string_field_set(p, cid_name, calleridname);
rpid = get_header(req, "Remote-Party-ID");
memset(rpid_num, 0, sizeof(rpid_num));
@@ -6989,7 +6987,7 @@
t = uri;
if (!strncmp(t, "sip:", 4))
t+= 4;
- ast_copy_string(p->exten, t, sizeof(p->exten));
+ ast_string_field_set(p, exten, t);
t = strchr(p->exten, '@');
if (t)
*t = '\0';
@@ -6997,7 +6995,7 @@
build_contact(p);
}
/* save the URI part of the From header */
- ast_copy_string(p->from, of, sizeof(p->from));
+ ast_string_field_set(p, from, of);
if (strncmp(of, "sip:", 4)) {
ast_log(LOG_NOTICE, "From address missing 'sip:', using it anyway\n");
} else
@@ -7007,8 +7005,8 @@
*c = '\0';
if ((c = strchr(of, ':')))
*c = '\0';
- ast_copy_string(p->cid_num, of, sizeof(p->cid_num));
- ast_shrink_phone_number(p->cid_num);
+ ast_string_field_set(p, cid_num, of);
+ ast_shrink_phone_number((char *) p->cid_num);
}
if (ast_strlen_zero(of))
return 0;
@@ -7030,9 +7028,9 @@
/* replace callerid if rpid found, and not restricted */
if (!ast_strlen_zero(rpid_num) && ast_test_flag(p, SIP_TRUSTRPID)) {
if (*calleridname)
- ast_copy_string(p->cid_name, calleridname, sizeof(p->cid_name));
- ast_copy_string(p->cid_num, rpid_num, sizeof(p->cid_num));
- ast_shrink_phone_number(p->cid_num);
+ ast_string_field_set(p, cid_name, calleridname);
+ ast_string_field_set(p, cid_num, rpid_num);
+ ast_shrink_phone_number((char *) p->cid_num);
}
if (p->rtp) {
@@ -7056,20 +7054,20 @@
if (user->call_limit)
ast_set_flag(p, SIP_CALL_LIMIT);
if (!ast_strlen_zero(user->context))
- ast_copy_string(p->context, user->context, sizeof(p->context));
- if (!ast_strlen_zero(user->cid_num) && !ast_strlen_zero(p->cid_num)) {
- ast_copy_string(p->cid_num, user->cid_num, sizeof(p->cid_num));
- ast_shrink_phone_number(p->cid_num);
+ ast_string_field_set(p, context, user->context);
+ if (!ast_strlen_zero(user->cid_num) && !ast_strlen_zero(p->cid_num)) {
+ ast_string_field_set(p, cid_num, user->cid_num);
+ ast_shrink_phone_number((char *) p->cid_num);
}
- if (!ast_strlen_zero(user->cid_name) && !ast_strlen_zero(p->cid_num))
- ast_copy_string(p->cid_name, user->cid_name, sizeof(p->cid_name));
- ast_copy_string(p->username, user->name, sizeof(p->username));
- ast_copy_string(p->peersecret, user->secret, sizeof(p->peersecret));
- ast_copy_string(p->subscribecontext, user->subscribecontext, sizeof(p->subscribecontext));
- ast_copy_string(p->peermd5secret, user->md5secret, sizeof(p->peermd5secret));
+ if (!ast_strlen_zero(user->cid_name) && !ast_strlen_zero(p->cid_num))
+ ast_string_field_set(p, cid_name, user->cid_name);
+ ast_string_field_set(p, username, user->name);
+ ast_string_field_set(p, peersecret, user->secret);
+ ast_string_field_set(p, peermd5secret, user->md5secret);
+ ast_string_field_set(p, subscribecontext, user->subscribecontext);
ast_string_field_set(p, accountcode, user->accountcode);
- ast_copy_string(p->language, user->language, sizeof(p->language));
- ast_copy_string(p->musicclass, user->musicclass, sizeof(p->musicclass));
+ ast_string_field_set(p, language, user->language);
+ ast_string_field_set(p, musicclass, user->musicclass);
p->amaflags = user->amaflags;
p->callgroup = user->callgroup;
p->pickupgroup = user->pickupgroup;
@@ -7119,9 +7117,9 @@
/* replace callerid if rpid found, and not restricted */
if (!ast_strlen_zero(rpid_num) && ast_test_flag(p, SIP_TRUSTRPID)) {
if (*calleridname)
- ast_copy_string(p->cid_name, calleridname, sizeof(p->cid_name));
- ast_copy_string(p->cid_num, rpid_num, sizeof(p->cid_num));
- ast_shrink_phone_number(p->cid_num);
+ ast_string_field_set(p, cid_name, calleridname);
+ ast_string_field_set(p, cid_num, rpid_num);
+ ast_shrink_phone_number((char *) p->cid_num);
}
if (p->rtp) {
ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE));
@@ -7131,26 +7129,25 @@
ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE));
ast_rtp_setnat(p->vrtp, (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE));
}
- ast_copy_string(p->peersecret, peer->secret, sizeof(p->peersecret));
- p->peersecret[sizeof(p->peersecret)-1] = '\0';
- ast_copy_string(p->subscribecontext, peer->subscribecontext, sizeof(p->subscribecontext));
- ast_copy_string(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret));
- p->peermd5secret[sizeof(p->peermd5secret)-1] = '\0';
+ ast_string_field_set(p, peersecret, peer->secret);
+ ast_string_field_set(p, peermd5secret, peer->md5secret);
+ ast_string_field_set(p, subscribecontext, peer->subscribecontext);
p->callingpres = peer->callingpres;
if (peer->maxms && peer->lastms)
p->timer_t1 = peer->lastms;
if (ast_test_flag(peer, SIP_INSECURE_INVITE)) {
/* Pretend there is no required authentication */
- p->peersecret[0] = '\0';
- p->peermd5secret[0] = '\0';
+ ast_string_field_free(p, peersecret);
+ ast_string_field_free(p, peermd5secret);
}
if (!(res = check_auth(p, req, peer->name, p->peersecret, p->peermd5secret, sipmethod, uri, reliable, ignore))) {
ast_copy_flags(p, peer, SIP_FLAGS_TO_COPY);
/* If we have a call limit, set flag */
if (peer->call_limit)
ast_set_flag(p, SIP_CALL_LIMIT);
- ast_copy_string(p->peername, peer->name, sizeof(p->peername));
- ast_copy_string(p->authname, peer->name, sizeof(p->authname));
+ ast_string_field_set(p, peername, peer->name);
+ ast_string_field_set(p, authname, peer->name);
+
/* copy channel vars */
for (v = peer->chanvars ; v ; v = v->next) {
if ((tmpvar = ast_variable_new(v->name, v->value))) {
@@ -7161,22 +7158,22 @@
if (mailbox)
snprintf(mailbox, mailboxlen, ",%s,", peer->mailbox);
if (!ast_strlen_zero(peer->username)) {
- ast_copy_string(p->username, peer->username, sizeof(p->username));
+ ast_string_field_set(p, username, peer->username);
/* Use the default username for authentication on outbound calls */
- ast_copy_string(p->authname, peer->username, sizeof(p->authname));
+ ast_string_field_set(p, authname, peer->username);
}
- if (!ast_strlen_zero(peer->cid_num) && !ast_strlen_zero(p->cid_num)) {
- ast_copy_string(p->cid_num, peer->cid_num, sizeof(p->cid_num));
- ast_shrink_phone_number(p->cid_num);
+ if (!ast_strlen_zero(peer->cid_num) && !ast_strlen_zero(p->cid_num)) {
+ ast_string_field_set(p, cid_num, peer->cid_num);
+ ast_shrink_phone_number((char *) p->cid_num);
}
if (!ast_strlen_zero(peer->cid_name) && !ast_strlen_zero(p->cid_name))
- ast_copy_string(p->cid_name, peer->cid_name, sizeof(p->cid_name));
- ast_copy_string(p->fullcontact, peer->fullcontact, sizeof(p->fullcontact));
+ ast_string_field_set(p, cid_name, peer->cid_name);
+ ast_string_field_set(p, fullcontact, peer->fullcontact);
if (!ast_strlen_zero(peer->context))
- ast_copy_string(p->context, peer->context, sizeof(p->context));
- ast_copy_string(p->peersecret, peer->secret, sizeof(p->peersecret));
- ast_copy_string(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret));
- ast_copy_string(p->language, peer->language, sizeof(p->language));
+ ast_string_field_set(p, context, peer->context);
+ ast_string_field_set(p, peersecret, peer->secret);
+ ast_string_field_set(p, peermd5secret, peer->md5secret);
+ ast_string_field_set(p, language, peer->language);
ast_string_field_set(p, accountcode, peer->accountcode);
p->amaflags = peer->amaflags;
p->callgroup = peer->callgroup;
@@ -8808,7 +8805,7 @@
/* Recalculate our side, and recalculate Call ID */
if (ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip))
memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
- build_via(p, p->via, sizeof(p->via));
+ build_via(p);
build_callid_pvt(p);
ast_cli(fd, "Sending NOTIFY of type '%s' to '%s'\n", argv[2], argv[i]);
transmit_sip_request(p, &req);
@@ -8989,9 +8986,9 @@
char uri[256];
char cnonce[80];
char iabuf[INET_ADDRSTRLEN];
- char *username;
- char *secret;
- char *md5secret;
+ const char *username;
+ const char *secret;
+ const char *md5secret;
struct sip_auth *auth = (struct sip_auth *) NULL; /* Realm authentication */
if (!ast_strlen_zero(p->domain))
@@ -9523,7 +9520,7 @@
p->options->auth_type = (resp == 401 ? WWW_AUTH : PROXY_AUTH);
/* Then we AUTH */
- p->theirtag[0]='\0'; /* forget their old tag, so we don't match tags when getting response */
+ ast_string_field_free(p, theirtag); /* forget their old tag, so we don't match tags when getting response */
if (!ignore) {
char *authenticate = (resp == 401 ? "WWW-Authenticate" : "Proxy-Authenticate");
char *authorization = (resp == 401 ? "Authorization" : "Proxy-Authorization");
@@ -9769,7 +9766,10 @@
/* Get their tag if we haven't already */
if (ast_strlen_zero(p->theirtag) || (resp >= 200)) {
- gettag(req, "To", p->theirtag, sizeof(p->theirtag));
+ char tag[128];
+
+ gettag(req, "To", tag, sizeof(tag));
+ ast_string_field_set(p, theirtag, tag);
}
if (p->peerpoke) {
/* We don't really care what the response is, just that it replied back.
@@ -9955,7 +9955,10 @@
if (resp == 200) {
/* Tags in early session is replaced by the tag in 200 OK, which is
the final reply to our INVITE */
- gettag(req, "To", p->theirtag, sizeof(p->theirtag));
+ char tag[128];
+
+ gettag(req, "To", tag, sizeof(tag));
+ ast_string_field_set(p, theirtag, tag);
}
switch(resp) {
@@ -10190,9 +10193,7 @@
/*! \brief gettag: Get tag from packet */
static char *gettag(struct sip_request *req, char *header, char *tagbuf, int tagbufsize)
{
-
char *thetag, *sep;
-
if (!tagbuf)
return NULL;
@@ -10218,7 +10219,7 @@
build_contact(p);
/* XXX Should we authenticate OPTIONS? XXX */
if (ast_strlen_zero(p->context))
- strcpy(p->context, default_context);
+ ast_string_field_set(p, context, default_context);
if (res < 0)
transmit_response_with_allow(p, "404 Not Found", req, 0);
else if (res > 0)
@@ -10311,8 +10312,8 @@
transmit_response(p, "403 Forbidden", req);
else
transmit_response_reliable(p, "403 Forbidden", req, 1);
- ast_set_flag(p, SIP_NEEDDESTROY);
- p->theirtag[0] = '\0'; /* Forget their to-tag, we'll get a new one */
+ ast_set_flag(p, SIP_NEEDDESTROY);
+ ast_string_field_free(p, theirtag);
}
return 0;
}
@@ -10332,7 +10333,7 @@
ast_queue_frame(p->owner, &af);
/* Initialize the context if it hasn't been already */
if (ast_strlen_zero(p->context))
- strcpy(p->context, default_context);
+ ast_string_field_set(p, context, default_context);
/* Check number of concurrent calls -vs- incoming limit HERE */
ast_log(LOG_DEBUG, "Checking SIP call limits for device %s\n", p->username);
res = update_call_counter(p, INC_CALL_LIMIT);
@@ -10372,11 +10373,11 @@
} else {
/* If no extension was specified, use the s one */
if (ast_strlen_zero(p->exten))
- ast_copy_string(p->exten, "s", sizeof(p->exten));
+ ast_string_field_set(p, exten, "s");
/* Initialize tag */
make_our_tag(p->tag, sizeof(p->tag));
/* First invitation */
- c = sip_new(p, AST_STATE_DOWN, ast_strlen_zero(p->username) ? NULL : p->username );
+ c = sip_new(p, AST_STATE_DOWN, ast_strlen_zero(p->username) ? NULL : p->username);
*recount = 1;
/* Save Record-Route for any later requests we make on this dialogue */
build_route(p, req, 0);
@@ -10502,7 +10503,7 @@
if (option_debug > 2)
ast_log(LOG_DEBUG, "SIP call transfer received for call %s (REFER)!\n", p->callid);
if (ast_strlen_zero(p->context))
- strcpy(p->context, default_context);
+ ast_string_field_set(p, context, default_context);
res = get_refer_info(p, req);
if (res < 0)
transmit_response_with_allow(p, "404 Not Found", req, 1);
@@ -10614,7 +10615,7 @@
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))
- strcpy(p->context, default_context);
+ ast_string_field_set(p, context, default_context);
res = get_also_info(p, req);
if (!res) {
c = p->owner;
@@ -10708,9 +10709,9 @@
}
/* Initialize the context if it hasn't been already */
if (!ast_strlen_zero(p->subscribecontext))
- ast_copy_string(p->context, p->subscribecontext, sizeof(p->context));
+ ast_string_field_set(p, context, p->subscribecontext);
else if (ast_strlen_zero(p->context))
- strcpy(p->context, default_context);
+ ast_string_field_set(p, context, default_context);
/* Get destination right away */
gotdest = get_destination(p, NULL);
build_contact(p);
@@ -10917,7 +10918,7 @@
/* Save useragent of the client */
useragent = get_header(req, "User-Agent");
if (!ast_strlen_zero(useragent))
- ast_copy_string(p->useragent, useragent, sizeof(p->useragent));
+ ast_string_field_set(p, useragent, useragent);
/* Find out SIP method for incoming request */
if (req->method == SIP_RESPONSE) { /* Response to our request */
@@ -10976,7 +10977,10 @@
/* Find their tag if we haven't got it */
if (ast_strlen_zero(p->theirtag)) {
- gettag(req, "From", p->theirtag, sizeof(p->theirtag));
+ char tag[128];
+
+ gettag(req, "From", tag, sizeof(tag));
+ ast_string_field_set(p, theirtag, tag);
}
snprintf(p->lastmsg, sizeof(p->lastmsg), "Rx: %s", cmd);
@@ -11184,7 +11188,7 @@
/* Recalculate our side, and recalculate Call ID */
if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
- build_via(p, p->via, sizeof(p->via));
+ build_via(p);
build_callid_pvt(p);
/* Send MWI */
ast_set_flag(p, SIP_OUTGOING);
@@ -11407,19 +11411,22 @@
memcpy(&p->recv, &peer->addr, sizeof(p->sa));
/* Send options to peer's fullcontact */
- if (!ast_strlen_zero(peer->fullcontact)) {
- ast_copy_string (p->fullcontact, peer->fullcontact, sizeof(p->fullcontact));
- }
+ if (!ast_strlen_zero(peer->fullcontact))
+ ast_string_field_set(p, fullcontact, peer->fullcontact);
if (!ast_strlen_zero(peer->tohost))
- ast_copy_string(p->tohost, peer->tohost, sizeof(p->tohost));
- else
- ast_inet_ntoa(p->tohost, sizeof(p->tohost), peer->addr.sin_addr);
+ ast_string_field_set(p, tohost, peer->tohost);
+ else {
+ char iabuf[INET_ADDRSTRLEN];
+
+ ast_inet_ntoa(iabuf, sizeof(iabuf), peer->addr.sin_addr);
+ ast_string_field_set(p, tohost, iabuf);
+ }
/* Recalculate our side, and recalculate Call ID */
if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
- build_via(p, p->via, sizeof(p->via));
+ build_via(p);
build_callid_pvt(p);
if (peer->pokeexpire > -1)
@@ -11556,11 +11563,11 @@
return NULL;
}
if (ast_strlen_zero(p->peername) && ext)
- ast_copy_string(p->peername, ext, sizeof(p->peername));
+ ast_string_field_set(p, peername, ext);
/* Recalculate our side, and recalculate Call ID */
if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
- build_via(p, p->via, sizeof(p->via));
+ build_via(p);
build_callid_pvt(p);
/* We have an extension to call, don't use the full contact here */
@@ -11568,8 +11575,8 @@
like SIP/peername/extension
SIP/peername will still use the full contact */
if (ext) {
- ast_copy_string(p->username, ext, sizeof(p->username));
- p->fullcontact[0] = 0;
[... 157 lines stripped ...]
More information about the asterisk-commits
mailing list