From 0429c5336845e08c3f3a1279da34d958eff14391 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Thu, 11 Feb 2016 18:15:31 -0600 Subject: res_pjsip_session.c: Reorganize ast_sip_session_terminate(). Change-Id: I68a2128bcba4830985d2d441e70dfd1ac5bd712b --- res/res_pjsip_session.c | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) (limited to 'res') diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index a4108d566..18bb6abe8 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -1794,29 +1794,38 @@ void ast_sip_session_terminate(struct ast_sip_session *session, int response) response = 603; } - if ((session->inv_session->state == PJSIP_INV_STATE_CONFIRMED) && session->inv_session->invite_tsx) { - ast_debug(3, "Delay sending BYE to %s because of outstanding transaction...\n", - ast_sorcery_object_get_id(session->endpoint)); - /* If this is delayed the only thing that will happen is a BYE request so we don't - * actually need to store the response code for when it happens. - */ - delay_request(session, NULL, NULL, NULL, 0, DELAYED_METHOD_BYE); - } else if (session->inv_session->state == PJSIP_INV_STATE_NULL) { + switch (session->inv_session->state) { + case PJSIP_INV_STATE_NULL: pjsip_inv_terminate(session->inv_session, response, PJ_TRUE); - } else if (((status = pjsip_inv_end_session(session->inv_session, response, NULL, &packet)) == PJ_SUCCESS) - && packet) { - struct ast_sip_session_delayed_request *delay; - - /* Flush any delayed requests so they cannot overlap this transaction. */ - while ((delay = AST_LIST_REMOVE_HEAD(&session->delayed_requests, next))) { - ast_free(delay); + break; + case PJSIP_INV_STATE_CONFIRMED: + if (session->inv_session->invite_tsx) { + ast_debug(3, "Delay sending BYE to %s because of outstanding transaction...\n", + ast_sorcery_object_get_id(session->endpoint)); + /* If this is delayed the only thing that will happen is a BYE request so we don't + * actually need to store the response code for when it happens. + */ + delay_request(session, NULL, NULL, NULL, 0, DELAYED_METHOD_BYE); + break; } + /* Fall through */ + default: + status = pjsip_inv_end_session(session->inv_session, response, NULL, &packet); + if (status == PJ_SUCCESS && packet) { + struct ast_sip_session_delayed_request *delay; - if (packet->msg->type == PJSIP_RESPONSE_MSG) { - ast_sip_session_send_response(session, packet); - } else { - ast_sip_session_send_request(session, packet); + /* Flush any delayed requests so they cannot overlap this transaction. */ + while ((delay = AST_LIST_REMOVE_HEAD(&session->delayed_requests, next))) { + ast_free(delay); + } + + if (packet->msg->type == PJSIP_RESPONSE_MSG) { + ast_sip_session_send_response(session, packet); + } else { + ast_sip_session_send_request(session, packet); + } } + break; } } -- cgit v1.2.3