mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
channel: Always provide cause code in ChannelHangupRequest.
When queueing a channel to be hung up a cause code can be specified in one of two ways: 1. ast_queue_hangup_with_cause This function takes in a cause code and queues it as part of the hangup request, which ultimately results in it being set on the channel. 2. ast_channel_hangupcause_set + ast_queue_hangup This combination sets the hangup cause on the channel before queueing the hangup instead of as part of that process. In the #2 case the ChannelHangupRequest event would not contain the cause code. For consistency if a cause code has been set on the channel it will now be added to the event. Resolves: #1197
This commit is contained in:
@@ -1168,13 +1168,21 @@ int ast_queue_frame_head(struct ast_channel *chan, struct ast_frame *fin)
|
||||
/*! \brief Queue a hangup frame for channel */
|
||||
int ast_queue_hangup(struct ast_channel *chan)
|
||||
{
|
||||
RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
|
||||
struct ast_frame f = { AST_FRAME_CONTROL, .subclass.integer = AST_CONTROL_HANGUP };
|
||||
int res;
|
||||
int res, cause;
|
||||
|
||||
/* Yeah, let's not change a lock-critical value without locking */
|
||||
ast_channel_lock(chan);
|
||||
ast_channel_softhangup_internal_flag_add(chan, AST_SOFTHANGUP_DEV);
|
||||
ast_channel_publish_blob(chan, ast_channel_hangup_request_type(), NULL);
|
||||
|
||||
cause = ast_channel_hangupcause(chan);
|
||||
if (cause) {
|
||||
blob = ast_json_pack("{s: i}",
|
||||
"cause", cause);
|
||||
}
|
||||
|
||||
ast_channel_publish_blob(chan, ast_channel_hangup_request_type(), blob);
|
||||
|
||||
res = ast_queue_frame(chan, &f);
|
||||
ast_channel_unlock(chan);
|
||||
|
Reference in New Issue
Block a user