summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorzuul <zuul@gerrit.asterisk.org>2016-09-23 18:06:43 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2016-09-23 18:06:43 -0500
commit9b0e6f9c8616fa81ec8e11c6fe45a6f6c07c387d (patch)
treeea23d137d7324ddd7a38ec4c7024d08c712d38db /channels
parent52e3c6c2e0d6b0dd9a49250893da3adbf0503af5 (diff)
parenta0a17a8c6f92cea38afb234d2f8b6cb4e3883424 (diff)
Merge "channels/chan_pjsip: fix HANGUPCAUSE function bug." into 13
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_pjsip.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 82f716f08..23545112e 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -2321,6 +2321,21 @@ static void chan_pjsip_incoming_response(struct ast_sip_session *session, struct
return;
}
+ /* Build and send the tech-specific cause information */
+ /* size of the string making up the cause code is "SIP " number + " " + reason length */
+ data_size += 4 + 4 + pj_strlen(&status.reason);
+ cause_code = ast_alloca(data_size);
+ memset(cause_code, 0, data_size);
+
+ ast_copy_string(cause_code->chan_name, ast_channel_name(session->channel), AST_CHANNEL_NAME);
+
+ snprintf(cause_code->code, data_size - sizeof(*cause_code) + 1, "SIP %d %.*s", status.code,
+ (int) pj_strlen(&status.reason), pj_strbuf(&status.reason));
+
+ cause_code->ast_cause = hangup_sip2cause(status.code);
+ ast_queue_control_data(session->channel, AST_CONTROL_PVT_CAUSE_CODE, cause_code, data_size);
+ ast_channel_hangupcause_hash_set(session->channel, cause_code, data_size);
+
switch (status.code) {
case 180:
ast_queue_control(session->channel, AST_CONTROL_RINGING);
@@ -2339,21 +2354,6 @@ static void chan_pjsip_incoming_response(struct ast_sip_session *session, struct
default:
break;
}
-
- /* Build and send the tech-specific cause information */
- /* size of the string making up the cause code is "SIP " number + " " + reason length */
- data_size += 4 + 4 + pj_strlen(&status.reason);
- cause_code = ast_alloca(data_size);
- memset(cause_code, 0, data_size);
-
- ast_copy_string(cause_code->chan_name, ast_channel_name(session->channel), AST_CHANNEL_NAME);
-
- snprintf(cause_code->code, data_size - sizeof(*cause_code) + 1, "SIP %d %.*s", status.code,
- (int) pj_strlen(&status.reason), pj_strbuf(&status.reason));
-
- cause_code->ast_cause = hangup_sip2cause(status.code);
- ast_queue_control_data(session->channel, AST_CONTROL_PVT_CAUSE_CODE, cause_code, data_size);
- ast_channel_hangupcause_hash_set(session->channel, cause_code, data_size);
}
static int chan_pjsip_incoming_ack(struct ast_sip_session *session, struct pjsip_rx_data *rdata)