Index: apps/app_directed_pickup.c =================================================================== --- apps/app_directed_pickup.c (revision 239307) +++ apps/app_directed_pickup.c (working copy) @@ -40,6 +40,7 @@ #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 @@ { 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 @@ 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; } Index: include/asterisk/manager.h =================================================================== --- include/asterisk/manager.h (revision 239307) +++ include/asterisk/manager.h (working copy) @@ -207,10 +207,10 @@ __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 */ Index: main/features.c =================================================================== --- main/features.c (revision 239307) +++ main/features.c (working copy) @@ -4739,7 +4739,7 @@ */ 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; @@ -4753,6 +4753,8 @@ return -1; } + chans[1] = cur; + ast_channel_lock_both(cur, chan); cur_name = ast_strdupa(cur->name); @@ -4789,6 +4791,10 @@ 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;