]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 197467 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Thu, 28 May 2009 13:52:20 +0000 (13:52 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 28 May 2009 13:52:20 +0000 (13:52 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r197467 | file | 2009-05-28 10:47:45 -0300 (Thu, 28 May 2009) | 15 lines

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

  ........
    r197466 | file | 2009-05-28 10:44:58 -0300 (Thu, 28 May 2009) | 8 lines

    Fix a bug where the flag indicating the presence of rport would get overwritten by the nat setting.

    The presence of rport is now stored as a separate flag. Once the dialog is setup and authenticated
    (or it passes through unauthenticated) the proper nat flag is set.

    (closes issue #13823)
    Reported by: dimas
  ........
................

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

channels/chan_sip.c

index 17e93eb6f1d9adb02b6bf7b295e6fe04e16e3f8c..327cd9cbe876c063cebb5d5ef49b4a73debf40a3 100644 (file)
@@ -1059,6 +1059,7 @@ struct sip_auth {
 /* Space for addition of other realtime flags in the future */
 #define SIP_PAGE2_STATECHANGEQUEUE     (1 << 9)        /*!< D: Unsent state pending change exists */
 
+#define SIP_PAGE2_RPORT_PRESENT         (1 << 10)       /*!< Was rport received in the Via header? */
 #define SIP_PAGE2_VIDEOSUPPORT         (1 << 14)       /*!< DP: Video supported if offered? */
 #define SIP_PAGE2_TEXTSUPPORT          (1 << 15)       /*!< GDP: Global text enable */
 #define SIP_PAGE2_ALLOWSUBSCRIBE       (1 << 16)       /*!< GP: Allow subscriptions from this peer? */
@@ -12150,7 +12151,7 @@ static void check_via(struct sip_pvt *p, struct sip_request *req)
        /* Check for rport */
        c = strstr(via, ";rport");
        if (c && (c[6] != '=')) /* rport query, not answer */
-               ast_set_flag(&p->flags[0], SIP_NAT_ROUTE);
+               ast_set_flag(&p->flags[1], SIP_PAGE2_RPORT_PRESENT);
 
        c = strchr(via, ';');
        if (c) 
@@ -12578,6 +12579,11 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ
        else
                res = AUTH_SECRET_FAILED; /* we don't want any guests, authentication will fail */
 
+
+       if (ast_test_flag(&p->flags[1], SIP_PAGE2_RPORT_PRESENT)) {
+               ast_set_flag(&p->flags[0], SIP_NAT_ROUTE);
+       }
+
        return res;
 }