]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fixed failing test from r380696.
authorMatthew Jordan <mjordan@digium.com>
Thu, 14 Feb 2013 18:41:21 +0000 (18:41 +0000)
committerMatthew Jordan <mjordan@digium.com>
Thu, 14 Feb 2013 18:41:21 +0000 (18:41 +0000)
When I added my extensive suite of session timer unit tests, apparently one of
them was failing and I never noticed. If neither Min-SE nor Session-Expires is
set in the header, it was responding with a Session-Expires of the global
maxmimum instead of the configured max for the endpoint.

(issue ASTERISK-20787)
........

Merged revisions 380973 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 380974 from http://svn.asterisk.org/svn/asterisk/branches/11

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

channels/chan_sip.c

index ee1dff235c05baf7a3bd29c56d2801af40b1e962..13e8036d5eae750e19176a69adc77e54c5895579 100644 (file)
@@ -24723,6 +24723,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str
        int st_interval = 0;            /* Session-Timer negotiated refresh interval                */
        enum st_refresher tmp_st_ref = SESSION_TIMER_REFRESHER_AUTO; /* Session-Timer refresher     */
        int dlg_min_se = -1;
+       int dlg_max_se = global_max_se;
        struct {
                char exten[AST_MAX_EXTENSION];
                char context[AST_MAX_CONTEXT];
@@ -25325,19 +25326,17 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str
                                tmp_st_ref = st_get_refresher(p);
                        }
 
+                       dlg_max_se = st_get_se(p, TRUE);
                        if (uac_max_se > 0) {
-                               int dlg_max_se = st_get_se(p, TRUE);
                                if (dlg_max_se >= uac_min_se) {
                                        st_interval = (uac_max_se < dlg_max_se) ? uac_max_se : dlg_max_se;
                                } else {
                                        st_interval = uac_max_se;
                                }
                        } else if (uac_min_se > 0) {
-                               int dlg_max_se = st_get_se(p, TRUE);
                                st_interval = MAX(dlg_max_se, uac_min_se);
                        } else {
-                               /* Set to default max value */
-                               st_interval = global_max_se;
+                               st_interval = dlg_max_se;
                        }
                        break;