From 71ceefa75d94c9f598e56b56eacaa170f03320da Mon Sep 17 00:00:00 2001 From: "Joshua C. Colp" <jcolp@sangoma.com> Date: Tue, 18 Aug 2020 06:36:05 -0300 Subject: [PATCH] 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 --- res/res_pjsip_session.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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); -- GitLab