]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9225: [mod_sofia] Allow to force SIP REGISTER Expires: to be within configured...
authorSergey Khripchenko <shripchenko@intermedia.net>
Fri, 3 Jun 2016 12:30:01 +0000 (05:30 -0700)
committerSergey Khripchenko <shripchenko@intermedia.net>
Fri, 3 Jun 2016 12:30:01 +0000 (05:30 -0700)
Allow to force SIP REGISTER Expires: to be within MIN and MAX values.
Not just to force it to one specific value using "sip-force-expires".

New profile parameters:
  "sip-force-expires-min"
  "sip-force-expires-max"

src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_reg.c

index 9a4dca3147b6d730b3cd207f32e9d93805e9ee02..7ab1af53f191146a88483ccb28006892b6929d8a 100644 (file)
@@ -738,6 +738,8 @@ struct sofia_profile {
        char *tls_verify_in_subjects_str;
        su_strlst_t *tls_verify_in_subjects;
        uint32_t sip_force_expires;
+       uint32_t sip_force_expires_min;
+       uint32_t sip_force_expires_max;
        uint32_t sip_expires_max_deviation;
        uint32_t sip_expires_late_margin;
        uint32_t sip_subscription_max_deviation;
index d7e58fc21832fb27f011b394785be6657302e9e1..573ab9dacf769b6054c69e23349529ece79b3ac2 100644 (file)
@@ -4260,6 +4260,8 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
                                        profile->dtmf_duration = 100;
                                        profile->rtp_digit_delay = 40;
                                        profile->sip_force_expires = 0;
+                                       profile->sip_force_expires_min = 0;
+                                       profile->sip_force_expires_max = 0;
                                        profile->sip_expires_max_deviation = 0;
                                        profile->sip_expires_late_margin = 60;
                                        profile->sip_subscription_max_deviation = 0;
@@ -5514,6 +5516,20 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
                                                } else {
                                                        profile->sip_expires_late_margin = 60;
                                                }
+                                       } else if (!strcasecmp(var, "sip-force-expires-min")) {
+                                               int32_t sip_force_expires_min = atoi(val);
+                                               if (sip_force_expires_min >= 0) {
+                                                       profile->sip_force_expires_min = sip_force_expires_min;
+                                               } else {
+                                                       profile->sip_force_expires_min = 0;
+                                               }
+                                       } else if (!strcasecmp(var, "sip-force-expires-max")) {
+                                               int32_t sip_force_expires_max = atoi(val);
+                                               if (sip_force_expires_max >= 0) {
+                                                       profile->sip_force_expires_max = sip_force_expires_max;
+                                               } else {
+                                                       profile->sip_force_expires_max = 0;
+                                               }
                                        } else if (!strcasecmp(var, "sip-force-expires")) {
                                                int32_t sip_force_expires = atoi(val);
                                                if (sip_force_expires >= 0) {
index a4ee3c080a3ec001b6b516a5f3eccac77a13eda9..7f7d8efba310092c4eee3c56fe1b80c13db5b0fa 100644 (file)
@@ -1683,6 +1683,18 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
                                }
                        }
 
+                       if ( (( exp_var = atoi(switch_event_get_header_nil(*v_event, "sip-force-expires-min")) )) ||
+                            (( exp_var = profile->sip_force_expires_min )) ) {
+                               if ( (exp_var > 0) && (exptime < exp_var) ) {
+                                       exptime = exp_var;
+                               }
+                       }
+                       if ( (( exp_var = atoi(switch_event_get_header_nil(*v_event, "sip-force-expires-max")) )) ||
+                            (( exp_var = profile->sip_force_expires_max )) ) {
+                               if ( (exp_var > 0) && (exptime > exp_var) ) {
+                                       exptime = exp_var;
+                               }
+                       }
                        if ( (( exp_var = atoi(switch_event_get_header_nil(*v_event, "sip-force-expires")) )) ||
                             (( exp_var = profile->sip_force_expires )) ) {
                                if (exp_var > 0) {