Add HangupRequest manager event, to specify when/where a channel gets hung up.
authorJason Parker <jparker@digium.com>
Wed, 2 Mar 2011 21:08:39 +0000 (21:08 +0000)
committerJason Parker <jparker@digium.com>
Wed, 2 Mar 2011 21:08:39 +0000 (21:08 +0000)
(closes issue #18226)
Reported by: clegall_proformatique
Patches:
      asterisk_1.8_293157_hanguprequests.svn.patch uploaded by clegall proformatique (license 1139)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@309300 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index cba634b..c3b3981 100644 (file)
@@ -1496,6 +1496,11 @@ int ast_queue_hangup(struct ast_channel *chan)
        /* Yeah, let's not change a lock-critical value without locking */
        if (!ast_channel_trylock(chan)) {
                chan->_softhangup |= AST_SOFTHANGUP_DEV;
+               manager_event(EVENT_FLAG_CALL, "HangupRequest",
+                       "Channel: %s\r\n"
+                       "Uniqueid: %s\r\n",
+                       chan->name,
+                       chan->uniqueid);
                ast_channel_unlock(chan);
        }
        return ast_queue_frame(chan, &f);
@@ -1515,6 +1520,13 @@ int ast_queue_hangup_with_cause(struct ast_channel *chan, int cause)
                if (cause < 0)
                        f.data.uint32 = chan->hangupcause;
 
+               manager_event(EVENT_FLAG_CALL, "HangupRequest",
+                       "Channel: %s\r\n"
+                       "Uniqueid: %s\r\n"
+                       "Cause: %d\r\n",
+                       chan->name,
+                       chan->uniqueid,
+                       cause);
                ast_channel_unlock(chan);
        }
 
@@ -2661,6 +2673,13 @@ int ast_softhangup(struct ast_channel *chan, int cause)
 
        ast_channel_lock(chan);
        res = ast_softhangup_nolock(chan, cause);
+       manager_event(EVENT_FLAG_CALL, "SoftHangupRequest",
+               "Channel: %s\r\n"
+               "Uniqueid: %s\r\n"
+               "Cause: %d\r\n",
+               chan->name,
+               chan->uniqueid,
+               cause);
        ast_channel_unlock(chan);
 
        return res;