From e3fb1d3a94660e8fcfd5174060143cc79a3a0c1f Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Wed, 18 Dec 2013 07:10:12 +0000 Subject: Fixed #1718: Immediately shift call state to DISCONNECTED after receiving 422 response without Min-SE header. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4695 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsip-ua/sip_inv.c | 4 +++- pjsip/src/pjsip-ua/sip_timer.c | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'pjsip') diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c index 74ef08ac..cf3fc1ee 100644 --- a/pjsip/src/pjsip-ua/sip_inv.c +++ b/pjsip/src/pjsip-ua/sip_inv.c @@ -3685,7 +3685,9 @@ static void handle_uac_call_rejection(pjsip_inv_session *inv, pjsip_event *e) * Resend the request with requested session timer setting. */ status = handle_timer_response(inv, e->body.tsx_state.src.rdata, - PJ_TRUE); + PJ_FALSE); + if (status != PJ_SUCCESS) + goto terminate_session; } else if (PJSIP_IS_STATUS_IN_CLASS(tsx->status_code, 600)) { /* Global error */ diff --git a/pjsip/src/pjsip-ua/sip_timer.c b/pjsip/src/pjsip-ua/sip_timer.c index 06bfaf06..0d6ed36b 100644 --- a/pjsip/src/pjsip-ua/sip_timer.c +++ b/pjsip/src/pjsip-ua/sip_timer.c @@ -723,8 +723,13 @@ PJ_DEF(pj_status_t) pjsip_timer_process_resp(pjsip_inv_session *inv, min_se_hdr = (pjsip_min_se_hdr*) pjsip_msg_find_hdr_by_name(msg, &STR_MIN_SE, NULL); if (min_se_hdr == NULL) { - /* Response 422 should contain Min-SE header */ - return PJ_SUCCESS; + /* Response 422 MUST contain Min-SE header */ + PJ_LOG(3, (inv->pool->obj_name, + "Received 422 (Session Interval Too Small) response " + "without Min-SE header!")); + + pjsip_timer_end_session(inv); + return PJSIP_EMISSINGHDR; } /* Session Timers should have been initialized here */ -- cgit v1.2.3