summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2013-12-18 07:10:12 +0000
committerNanang Izzuddin <nanang@teluu.com>2013-12-18 07:10:12 +0000
commite3fb1d3a94660e8fcfd5174060143cc79a3a0c1f (patch)
tree74f18a5ecc442bddd8a400ba03037f6a508833ab
parent105a9eab72acf4d61613f5e7fb0c064dd54c4a25 (diff)
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
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c4
-rw-r--r--pjsip/src/pjsip-ua/sip_timer.c9
2 files changed, 10 insertions, 3 deletions
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 */