diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index f738ad396a..9f53371a7c 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -368,6 +368,7 @@ struct sofia_profile { uint32_t inuse; time_t started; uint32_t session_timeout; + uint32_t minimum_session_expires; uint32_t max_proceeding; uint32_t rtp_timeout_sec; uint32_t rtp_hold_timeout_sec; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 1659346df9..489162ff08 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -575,6 +575,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void NUTAG_ALLOW("NOTIFY"), NUTAG_ALLOW_EVENTS("talk"), NUTAG_SESSION_TIMER(profile->session_timeout), + TAG_IF(profile->minimum_session_expires, NUTAG_MIN_SE(profile->minimum_session_expires)), NTATAG_MAX_PROCEEDING(profile->max_proceeding), TAG_IF(profile->pres_type, NUTAG_ALLOW("PUBLISH")), TAG_IF(profile->pres_type, NUTAG_ALLOW("SUBSCRIBE")), @@ -1682,6 +1683,12 @@ switch_status_t config_sofia(int reload, char *profile_name) if (!switch_true(val)) { profile->pflags |= PFLAG_DISABLE_TIMER; } + } else if (!strcasecmp(var, "minimum-session-expires")) { + profile->minimum_session_expires = atoi(val); + /* per RFC 4028: minimum_session_expires must be > 90 */ + if (profile->minimum_session_expires < 90) { + profile->minimum_session_expires = 90; + } } else if (!strcasecmp(var, "enable-100rel")) { if (!switch_true(val)) { profile->pflags |= PFLAG_DISABLE_100REL;