]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 192933 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 7 May 2009 16:45:31 +0000 (16:45 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 7 May 2009 16:45:31 +0000 (16:45 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r192933 | tilghman | 2009-05-07 11:43:56 -0500 (Thu, 07 May 2009) | 17 lines

  Merged revisions 192932 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r192932 | tilghman | 2009-05-07 11:29:08 -0500 (Thu, 07 May 2009) | 10 lines

    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: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@192935 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index c98ca7546fa34743bc49d39b180dd9c43261e3a3..c1113a1cfe3dcb8cfb90c57c0e412fb631e23627 100644 (file)
@@ -21593,6 +21593,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
        struct sip_peer tmp_peer;
        const char *srvlookup = NULL;
        static int deprecation_warning = 1;
+       int alt_fullcontact = alt ? 1 : 0;
        struct ast_str *fullcontact = ast_str_alloca(512);
 
        if (!realtime || ast_test_flag(&global_flags[1], SIP_PAGE2_RTCACHEFRIENDS)) {
@@ -21678,6 +21679,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;
+                               ast_str_reset(fullcontact);
+                       }
                        /* Reconstruct field, because realtime separates our value at the ';' */
                        if (fullcontact->used > 0) {
                                ast_str_append(&fullcontact, 0, ";%s", v->value);