]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
During request to dialog matching, verify init_ruri is present before comparing.
authorDavid Vossel <dvossel@digium.com>
Wed, 1 Sep 2010 21:47:01 +0000 (21:47 +0000)
committerDavid Vossel <dvossel@digium.com>
Wed, 1 Sep 2010 21:47:01 +0000 (21:47 +0000)
During request to dialog matching, we attempt a best effort routine for fork
detection which requires several elements to be in place.  The dialog's
initial request uri is one of those elements.  Since it is best effort,
if the init_ruri is not present for some reason we can not proceed with that
routine.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@284561 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index e0aed6a76dad6f495fe9907914f2055bc0f8d88c..16fe0390311399a7e1d4c209eeac8ac87d110f8d 100644 (file)
@@ -7204,7 +7204,10 @@ enum match_req_res {
  */
 static enum match_req_res match_req_to_dialog(struct sip_pvt *sip_pvt_ptr, struct match_req_args *arg)
 {
-       const char *init_ruri = REQ_OFFSET_TO_STR(&sip_pvt_ptr->initreq, rlPart2);
+       const char *init_ruri = NULL;
+       if (sip_pvt_ptr->initreq.headers) {
+               init_ruri = REQ_OFFSET_TO_STR(&sip_pvt_ptr->initreq, rlPart2);
+       }
 
        /*
         * Match Tags and call-id to Dialog
@@ -7263,8 +7266,8 @@ static enum match_req_res match_req_to_dialog(struct sip_pvt *sip_pvt_ptr, struc
        if ((arg->method != SIP_RESPONSE) &&                 /* must be a Request */
                ast_strlen_zero(arg->totag) &&                   /* must not have a totag */
                (sip_pvt_ptr->init_icseq == arg->seqno) &&       /* the cseq must be the same as this dialogs initial cseq */
-               !ast_strlen_zero(sip_pvt_ptr->initviabranch)) {  /* The dialog must have started with a RFC3261 compliant branch tag */
-
+               !ast_strlen_zero(sip_pvt_ptr->initviabranch) &&  /* The dialog must have started with a RFC3261 compliant branch tag */
+               init_ruri) {                                     /* the dialog must have an initial request uri associated with it */
                /* This Request matches all the criteria required for Loop/Merge detection.
                 * Now we must go down the path of comparing VIA's and RURIs. */
                if (ast_strlen_zero(arg->viabranch) ||