aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-07 16:29:08 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-07 16:29:08 +0000
commit5557c07d6753199bb4e069e4ff7516dda2f7431f (patch)
tree8fe4ddc6833f8377e73b64c228eac3bb103a89b8 /channels
parent909d09a59c9b992e4a39a768dc5b006a4717d3ad (diff)
Eliminate repetition of fullcontact during reconstruction.
If the fullcontact field appears in both the sippeers and the sipregs table, then during reconstruction of the field, it will otherwise be doubled. (closes issue #14754) Reported by: Alexei Gradinari Patches: 20090506__bug14754.diff.txt uploaded by tilghman (license 14) Tested by: lmadsen git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@192932 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index baec6e302..ddcc81773 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -17421,6 +17421,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
struct ast_variable *tmpvar = NULL;
struct ast_flags peerflags[2] = {{(0)}};
struct ast_flags mask[2] = {{(0)}};
+ int alt_fullcontact = alt ? 1 : 0;
char fullcontact[sizeof(peer->fullcontact)] = "";
if (!realtime || ast_test_flag(&global_flags[1], SIP_PAGE2_RTCACHEFRIENDS))
@@ -17479,6 +17480,15 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
} else if (realtime && !strcasecmp(v->name, "name"))
ast_copy_string(peer->name, v->value, sizeof(peer->name));
else if (realtime && !strcasecmp(v->name, "fullcontact")) {
+ if (alt_fullcontact && !alt) {
+ /* Reset, because the alternate also has a fullcontact and we
+ * do NOT want the field value to be doubled. It might be
+ * tempting to skip this, but the first table might not have
+ * fullcontact and since we're here, we know that the alternate
+ * absolutely does. */
+ alt_fullcontact = 0;
+ fullcontact[0] = '\0';
+ }
/* Reconstruct field, because realtime separates our value at the ';' */
if (!ast_strlen_zero(fullcontact)) {
strncat(fullcontact, ";", sizeof(fullcontact) - strlen(fullcontact) - 1);