]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 259957 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Wed, 28 Apr 2010 22:35:29 +0000 (22:35 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 28 Apr 2010 22:35:29 +0000 (22:35 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r259957 | mmichelson | 2010-04-28 17:34:15 -0500 (Wed, 28 Apr 2010) | 11 lines

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

channels/chan_sip.c

index 87e183175b7478f02d18c019361985303589193e..9a1583d69abe6c79bec01916159ab361e55ec031 100644 (file)
@@ -1063,6 +1063,7 @@ struct sip_auth {
 /* realtime flags */
 #define SIP_PAGE2_RTCACHEFRIENDS       (1 << 0)        /*!< GP: Should we keep RT objects in memory for extended time? */
 #define SIP_PAGE2_RTAUTOCLEAR          (1 << 2)        /*!< GP: Should we clean memory from peers after expiry? */
+#define SIP_PAGE2_HAVEPEERCONTEXT      (1 << 3)        /*< Are we associated with a configured peer context? */
 /* Space for addition of other realtime flags in the future */
 #define SIP_PAGE2_STATECHANGEQUEUE     (1 << 9)        /*!< D: Unsent state pending change exists */
 
@@ -1096,7 +1097,8 @@ struct sip_auth {
        (SIP_PAGE2_ALLOWSUBSCRIBE | SIP_PAGE2_ALLOWOVERLAP | SIP_PAGE2_IGNORESDPVERSION | \
        SIP_PAGE2_VIDEOSUPPORT | SIP_PAGE2_T38SUPPORT | SIP_PAGE2_RFC2833_COMPENSATE | \
        SIP_PAGE2_BUGGY_MWI | SIP_PAGE2_TEXTSUPPORT | \
-       SIP_PAGE2_UDPTL_DESTINATION | SIP_PAGE2_VIDEOSUPPORT_ALWAYS | SIP_PAGE2_FAX_DETECT)
+       SIP_PAGE2_UDPTL_DESTINATION | SIP_PAGE2_VIDEOSUPPORT_ALWAYS | SIP_PAGE2_FAX_DETECT | \
+       SIP_PAGE2_HAVEPEERCONTEXT)
 
 /*@}*/ 
 
@@ -12565,8 +12567,9 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
                                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);
        }
 
@@ -22888,6 +22891,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
                                ast_copy_string(peer->cid_num, v->value, sizeof(peer->cid_num));
                        } else if (!strcasecmp(v->name, "context")) {
                                ast_copy_string(peer->context, v->value, sizeof(peer->context));
+                               ast_set_flag(&peer->flags[1], SIP_PAGE2_HAVEPEERCONTEXT);
                        } else if (!strcasecmp(v->name, "subscribecontext")) {
                                ast_copy_string(peer->subscribecontext, v->value, sizeof(peer->subscribecontext));
                        } else if (!strcasecmp(v->name, "fromdomain")) {