summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzuul <zuul@gerrit.asterisk.org>2016-06-14 13:36:41 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2016-06-14 13:36:41 -0500
commit181766748fb5c4ef3024cdb0e7fa330669e50e7c (patch)
tree1d40454ca95b8c6de82bc8ba28fe2571e94394a5
parent51cc5c31c43b29559c223d1a5ff8d6b8495d631b (diff)
parent3d0632a9c2d87f2a731539e66e9e7f8ed3fa8a83 (diff)
Merge "res_pjsip_session.c: Reorganize ast_sip_session_terminate()."
-rw-r--r--res/res_pjsip_session.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 67cd09ddf..fad0606de 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;
}
}