diff options
author | zuul <zuul@gerrit.asterisk.org> | 2016-09-23 18:06:43 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2016-09-23 18:06:43 -0500 |
commit | 9b0e6f9c8616fa81ec8e11c6fe45a6f6c07c387d (patch) | |
tree | ea23d137d7324ddd7a38ec4c7024d08c712d38db /channels | |
parent | 52e3c6c2e0d6b0dd9a49250893da3adbf0503af5 (diff) | |
parent | a0a17a8c6f92cea38afb234d2f8b6cb4e3883424 (diff) |
Merge "channels/chan_pjsip: fix HANGUPCAUSE function bug." into 13
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_pjsip.c | 30 |
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) |