]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Eliminate repetition of fullcontact during reconstruction.
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 7 May 2009 16:29:08 +0000 (16:29 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 7 May 2009 16:29:08 +0000 (16:29 +0000)
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: https://origsvn.digium.com/svn/asterisk/branches/1.4@192932 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index baec6e3028d19f71a1fce268d4689d621c865a1a..ddcc81773ee1ed789d9efc22ad39dd16e5d5c288 100644 (file)
@@ -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);