diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 793e14179490fce401240ed31bc889570b77b37a..9d5d638ad75907eefc83d250808c31f3482701c4 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -14052,7 +14052,9 @@ static int transmit_invite(struct sip_pvt *p, int sipmethod, int sdp, int init, } /* Add Session-Timers related headers */ - if (st_get_mode(p, 0) == SESSION_TIMER_MODE_ORIGINATE) { + if (st_get_mode(p, 0) == SESSION_TIMER_MODE_ORIGINATE + || (st_get_mode(p, 0) == SESSION_TIMER_MODE_ACCEPT + && st_get_se(p, FALSE) != DEFAULT_MIN_SE)) { char i2astr[10]; if (!p->stimer->st_interval) { @@ -14060,9 +14062,11 @@ static int transmit_invite(struct sip_pvt *p, int sipmethod, int sdp, int init, } p->stimer->st_active = TRUE; - - snprintf(i2astr, sizeof(i2astr), "%d", p->stimer->st_interval); - add_header(&req, "Session-Expires", i2astr); + if (st_get_mode(p, 0) == SESSION_TIMER_MODE_ORIGINATE) { + snprintf(i2astr, sizeof(i2astr), "%d", p->stimer->st_interval); + add_header(&req, "Session-Expires", i2astr); + } + snprintf(i2astr, sizeof(i2astr), "%d", st_get_se(p, FALSE)); add_header(&req, "Min-SE", i2astr); } @@ -29147,7 +29151,10 @@ static void proc_422_rsp(struct sip_pvt *p, struct sip_request *rsp) ast_log(LOG_WARNING, "Parsing of Min-SE header failed %s\n", p_hdrval); return; } - p->stimer->st_interval = minse; + p->stimer->st_cached_min_se = minse; + if (p->stimer->st_interval < minse) { + p->stimer->st_interval = minse; + } transmit_invite(p, SIP_INVITE, 1, 2, NULL); } @@ -30730,8 +30737,8 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str ast_log(LOG_WARNING, "Invalid session-minse '%s' at line %d of %s\n", v->value, v->lineno, config); peer->stimer.st_min_se = global_min_se; } - if (peer->stimer.st_min_se < 90) { - ast_log(LOG_WARNING, "session-minse '%s' at line %d of %s is not allowed to be < 90 secs\n", v->value, v->lineno, config); + if (peer->stimer.st_min_se < DEFAULT_MIN_SE) { + ast_log(LOG_WARNING, "session-minse '%s' at line %d of %s is not allowed to be < %d secs\n", v->value, v->lineno, config, DEFAULT_MIN_SE); peer->stimer.st_min_se = global_min_se; } } else if (!strcasecmp(v->name, "session-refresher")) { @@ -31826,8 +31833,8 @@ static int reload_config(enum channelreloadreason reason) ast_log(LOG_WARNING, "Invalid session-minse '%s' at line %d of %s\n", v->value, v->lineno, config); global_min_se = DEFAULT_MIN_SE; } - if (global_min_se < 90) { - ast_log(LOG_WARNING, "session-minse '%s' at line %d of %s is not allowed to be < 90 secs\n", v->value, v->lineno, config); + if (global_min_se < DEFAULT_MIN_SE) { + ast_log(LOG_WARNING, "session-minse '%s' at line %d of %s is not allowed to be < %d secs\n", v->value, v->lineno, config, DEFAULT_MIN_SE); global_min_se = DEFAULT_MIN_SE; } } else if (!strcasecmp(v->name, "session-refresher")) {