aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-07 16:43:56 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-07 16:43:56 +0000
commitd159ca98e16876e772ad16ec3f94e0210b70751d (patch)
tree0fba7cbe161c23a4b132f813d20c67fc099d3f33
parent215732da8d11436681cc4b0d43c45a79a1d23e1c (diff)
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: http://svn.digium.com/svn/asterisk/trunk@192933 f38db490-d61c-443f-a65b-d21fe96a405b
-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 866738c2a..1fc93cc25 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -23220,6 +23220,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)) {
@@ -23310,6 +23311,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);