diff options
author | zuul <zuul@gerrit.asterisk.org> | 2016-06-14 13:36:44 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2016-06-14 13:36:44 -0500 |
commit | 97a8576d166f7697ab4b0411b8ce1d16473b8791 (patch) | |
tree | bd2e5580f7d34b1090fae40b19b6a7748766bd50 | |
parent | 32ab98116e7e43674cb9f639876cdbbb5cf86f4b (diff) | |
parent | 0429c5336845e08c3f3a1279da34d958eff14391 (diff) |
Merge "res_pjsip_session.c: Reorganize ast_sip_session_terminate()." into 13
-rw-r--r-- | res/res_pjsip_session.c | 47 |
1 files changed, 28 insertions, 19 deletions
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; } } |