From: Joshua C. Colp Date: Tue, 18 Aug 2020 09:36:05 +0000 (-0300) Subject: res_pjsip_session: Don't aggressively terminate on failed re-INVITE. X-Git-Tag: 18.0.0-rc1~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c074038fee984fd8e83ca8f48337d00f802e179;p=thirdparty%2Fasterisk.git res_pjsip_session: Don't aggressively terminate on failed re-INVITE. Per the RFC when an outgoing re-INVITE is done we should only terminate the dialog if a 481 or 408 is received. ASTERISK-29033 Change-Id: I6c3ff513aa41005d02de0396ba820083e9b18503 --- diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index bdca887179..147ebadd63 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -4071,8 +4071,11 @@ static void session_inv_on_tsx_state_changed(pjsip_inv_session *inv, pjsip_trans ast_sip_session_send_request_with_cb(session, tdata, cb); SCOPE_EXIT_RTN("Sending authed reinvite\n"); } - if (tsx->status_code != 488 && tsx->status_code != 500) { - /* Other reinvite failures (except 488 and 500) result in destroying the session. */ + /* Per RFC3261 14.1 a response to a re-INVITE should only terminate + * the dialog if a 481 or 408 occurs. All other responses should leave + * the dialog untouched. + */ + if (tsx->status_code == 481 || tsx->status_code == 408) { if (pjsip_inv_end_session(inv, 500, NULL, &tdata) == PJ_SUCCESS && tdata) { ast_sip_session_send_request(session, tdata);