From 2991a37d10f0645df7586e6b32b948c117175ac2 Mon Sep 17 00:00:00 2001 From: mmichelson Date: Wed, 28 Apr 2010 22:34:15 +0000 Subject: Don't override peer context with domain context. (closes issue #17040) Reported by: pprindeville Patches: asterisk-1.6-bugid17040.patch uploaded by pprindeville (license 347) Tested by: pprindeville Review: https://reviewboard.asterisk.org/r/565/ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@259957 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_sip.c | 6 ++++-- channels/sip/include/sip.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 4d62561e8..a7b57438a 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13508,8 +13508,9 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq, int *cc_ return -2; } } - /* If we have a context defined, overwrite the original context */ - if (!ast_strlen_zero(domain_context)) + /* If we don't have a peer (i.e. we're a guest call), + * overwrite the original context */ + if (!ast_test_flag(&p->flags[1], SIP_PAGE2_HAVEPEERCONTEXT) && !ast_strlen_zero(domain_context)) ast_string_field_set(p, context, domain_context); } @@ -24945,6 +24946,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str ast_string_field_set(peer, cid_num, v->value); } else if (!strcasecmp(v->name, "context")) { ast_string_field_set(peer, context, v->value); + ast_set_flag(&peer->flags[1], SIP_PAGE2_HAVEPEERCONTEXT); } else if (!strcasecmp(v->name, "subscribecontext")) { ast_string_field_set(peer, subscribecontext, v->value); } else if (!strcasecmp(v->name, "fromdomain")) { diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h index 49f8ed098..ddc4bb9c1 100644 --- a/channels/sip/include/sip.h +++ b/channels/sip/include/sip.h @@ -344,6 +344,7 @@ #define SIP_PAGE2_REGISTERTRYING (1 << 24) /*!< DP: Send 100 Trying on REGISTER attempts */ #define SIP_PAGE2_UDPTL_DESTINATION (1 << 25) /*!< DP: Use source IP of RTP as destination if NAT is enabled */ #define SIP_PAGE2_VIDEOSUPPORT_ALWAYS (1 << 26) /*!< DP: Always set up video, even if endpoints don't support it */ +#define SIP_PAGE2_HAVEPEERCONTEXT (1 << 27) /*< Are we associated with a configured peer context? */ #define SIP_PAGE2_FLAGS_TO_COPY \ (SIP_PAGE2_ALLOWSUBSCRIBE | SIP_PAGE2_ALLOWOVERLAP | SIP_PAGE2_IGNORESDPVERSION | \ @@ -351,7 +352,7 @@ SIP_PAGE2_BUGGY_MWI | SIP_PAGE2_TEXTSUPPORT | SIP_PAGE2_FAX_DETECT | \ SIP_PAGE2_UDPTL_DESTINATION | SIP_PAGE2_VIDEOSUPPORT_ALWAYS | SIP_PAGE2_PREFERRED_CODEC | \ SIP_PAGE2_RPID_IMMEDIATE | SIP_PAGE2_RPID_UPDATE | SIP_PAGE2_SYMMETRICRTP |\ - SIP_PAGE2_Q850_REASON) + SIP_PAGE2_Q850_REASON | SIP_PAGE2_HAVEPEERCONTEXT) /*@}*/ -- cgit v1.2.3