mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
Add missing support for "who hung up" to chan_motif.
(closes issue ASTERISK-20671) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2208/ ........ Merged revisions 377462 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@377463 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -2360,6 +2360,8 @@ static void jingle_action_session_terminate(struct jingle_endpoint *endpoint, st
|
||||
struct ast_channel *chan;
|
||||
iks *reason, *text;
|
||||
int cause = AST_CAUSE_NORMAL;
|
||||
struct ast_control_pvt_cause_code *cause_code;
|
||||
int data_size = sizeof(*cause_code);
|
||||
|
||||
if (!session) {
|
||||
jingle_send_error_response(endpoint->connection, pak, "cancel", "item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'",
|
||||
@@ -2377,6 +2379,10 @@ static void jingle_action_session_terminate(struct jingle_endpoint *endpoint, st
|
||||
if ((reason = iks_find(pak->query, "reason")) && (text = iks_child(reason))) {
|
||||
int i;
|
||||
|
||||
/* Size of the string making up the cause code is "Motif " + text */
|
||||
data_size += 6 + strlen(iks_name(text));
|
||||
cause_code = ast_malloc(data_size);
|
||||
|
||||
/* Get the appropriate cause code mapping for this reason */
|
||||
for (i = 0; i < ARRAY_LEN(jingle_reason_mappings); i++) {
|
||||
if (!strcasecmp(jingle_reason_mappings[i].reason, iks_name(text))) {
|
||||
@@ -2384,8 +2390,21 @@ static void jingle_action_session_terminate(struct jingle_endpoint *endpoint, st
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Store the technology specific information */
|
||||
snprintf(cause_code->code, data_size - sizeof(*cause_code) + 1, "Motif %s", iks_name(text));
|
||||
} else {
|
||||
/* No technology specific information is available */
|
||||
cause_code = ast_malloc(data_size);
|
||||
}
|
||||
|
||||
ast_copy_string(cause_code->chan_name, ast_channel_name(chan), AST_CHANNEL_NAME);
|
||||
cause_code->ast_cause = cause;
|
||||
ast_queue_control_data(chan, AST_CONTROL_PVT_CAUSE_CODE, cause_code, data_size);
|
||||
ast_channel_hangupcause_hash_set(chan, cause_code, data_size);
|
||||
|
||||
ast_free(cause_code);
|
||||
|
||||
ast_debug(3, "Hanging up channel '%s' due to session terminate message with cause '%d'\n", ast_channel_name(chan), cause);
|
||||
ast_queue_hangup_with_cause(chan, cause);
|
||||
session->gone = 1;
|
||||
|
Reference in New Issue
Block a user