From e8a6d2995e95e8b27aba9551c3da025e7b9bfa6d Mon Sep 17 00:00:00 2001 From: Tilghman Lesher <tilghman@meg.abyt.es> Date: Fri, 15 Jan 2010 21:04:34 +0000 Subject: [PATCH] Add pickup event to AMI. Also, fix AMI documentation. (closes issue #16431) Reported by: syspert Patches: 20100112__issue16431.diff.txt uploaded by tilghman (license 14) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@240421 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_directed_pickup.c | 6 ++++++ include/asterisk/manager.h | 4 ++-- main/features.c | 8 +++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/apps/app_directed_pickup.c b/apps/app_directed_pickup.c index bc25defe2d..92e2938f4a 100644 --- a/apps/app_directed_pickup.c +++ b/apps/app_directed_pickup.c @@ -40,6 +40,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/lock.h" #include "asterisk/app.h" #include "asterisk/features.h" +#include "asterisk/manager.h" #include "asterisk/callerid.h" #include "asterisk/cel.h" @@ -94,6 +95,7 @@ static int pickup_do(struct ast_channel *chan, struct ast_channel *target) { int res = 0; struct ast_party_connected_line connected_caller; + struct ast_channel *chans[2] = { chan, target }; ast_debug(1, "Call pickup on '%s' by '%s'\n", target->name, chan->name); ast_cel_report_event(target, AST_CEL_PICKUP, NULL, NULL, chan); @@ -128,6 +130,10 @@ static int pickup_do(struct ast_channel *chan, struct ast_channel *target) return -1; } + /* If you want UniqueIDs, set channelvars in manager.conf to CHANNEL(uniqueid) */ + ast_manager_event_multichan(EVENT_FLAG_CALL, "Pickup", 2, chans, + "Channel: %s\r\nTargetChannel: %s\r\n", chan->name, target->name); + return res; } diff --git a/include/asterisk/manager.h b/include/asterisk/manager.h index f67b678a85..35fea8e02f 100644 --- a/include/asterisk/manager.h +++ b/include/asterisk/manager.h @@ -207,10 +207,10 @@ int astman_verify_session_writepermissions(uint32_t ident, int perm); __ast_manager_event_multichan(category, event, nchans, chans, __FILE__, __LINE__, __PRETTY_FUNCTION__, contents , ## __VA_ARGS__); /*! External routines may send asterisk manager events this way - * \param chan1 First channel related to this event (or NULL if none are relevant) - * \param chan2 Second channel related to this event (or NULL if none are relevant) * \param category Event category, matches manager authorization * \param event Event name + * \param chancount Number of channels in chans parameter + * \param chans A pointer to an array of channels involved in the event * \param contents Format string describing event * \since 1.8 */ diff --git a/main/features.c b/main/features.c index 68f2f858ab..3e8255de6a 100644 --- a/main/features.c +++ b/main/features.c @@ -4734,7 +4734,7 @@ static int find_channel_by_group(void *obj, void *arg, void *data, int flags) */ int ast_pickup_call(struct ast_channel *chan) { - struct ast_channel *cur; + struct ast_channel *cur, *chans[2] = { chan, }; struct ast_party_connected_line connected_caller; int res; const char *chan_name; @@ -4748,6 +4748,8 @@ int ast_pickup_call(struct ast_channel *chan) return -1; } + chans[1] = cur; + ast_channel_lock_both(cur, chan); cur_name = ast_strdupa(cur->name); @@ -4784,6 +4786,10 @@ int ast_pickup_call(struct ast_channel *chan) ast_stream_and_wait(cur, pickupsound, ""); } + /* If you want UniqueIDs, set channelvars in manager.conf to CHANNEL(uniqueid) */ + ast_manager_event_multichan(EVENT_FLAG_CALL, "Pickup", 2, chans, + "Channel: %s\r\nTargetChannel: %s\r\n", chan->name, cur->name); + cur = ast_channel_unref(cur); return res; -- GitLab