diff options
author | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-05-04 13:56:25 +0000 |
---|---|---|
committer | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-05-04 13:56:25 +0000 |
commit | e9978c62b7c886e937b82cde5fc8ef5291ef291a (patch) | |
tree | 6eb271cca49363d468e30ed20c21d230ebe95779 /channels | |
parent | add64508622e20f99a6ae7fc194ca08bb36aac45 (diff) |
Add the new ChannelUpdate event to inform manager clients about the PVT ID and some other channel driver data that
is needed to follow the call through the PBX.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@63032 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_iax2.c | 13 | ||||
-rw-r--r-- | channels/chan_sip.c | 14 |
2 files changed, 27 insertions, 0 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 6403bf6ad..fe53030bb 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -895,6 +895,17 @@ static void mwi_event_cb(const struct ast_event *event, void *userdata) * is time to send MWI, since it is only sent with a REGACK. */ } +/*! \brief Send manager event at call setup to link between Asterisk channel name + and IAX2 call identifiers */ +static void iax2_ami_channelupdate(struct chan_iax2_pvt *pvt) +{ + manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate", + "Channel: %s\r\nChanneltype: IAX2\r\nIAX2-callno-local: %d\r\nIAX2-callno-remote: %d\r\nIAX2-peer: %s\r\n", + pvt->owner ? pvt->owner->name : "", + pvt->callno, pvt->peercallno, pvt->peer ? pvt->peer : ""); +} + + static void insert_idle_thread(struct iax2_thread *thread) { if (thread->type == IAX_THREAD_TYPE_DYNAMIC) { @@ -3332,6 +3343,7 @@ static int iax2_answer(struct ast_channel *c) unsigned short callno = PTR_TO_CALLNO(c->tech_pvt); if (option_debug) ast_log(LOG_DEBUG, "Answering IAX2 call\n"); + iax2_ami_channelupdate(c->tech_pvt); return send_command_locked(callno, AST_FRAME_CONTROL, AST_CONTROL_ANSWER, 0, NULL, 0, -1); } @@ -3422,6 +3434,7 @@ static struct ast_channel *ast_iax2_new(int callno, int state, int capability) ast_mutex_unlock(&iaxsl[callno]); tmp = ast_channel_alloc(1, state, i->cid_num, i->cid_name, i->accountcode, i->exten, i->context, i->amaflags, "IAX2/%s-%d", i->host, i->callno); ast_mutex_lock(&iaxsl[callno]); + iax2_ami_channelupdate(i); if (!tmp) return NULL; tmp->tech = &iax2_tech; diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8384d0000..db1b06324 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4264,6 +4264,12 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, const char *tit if (!ast_test_flag(&i->flags[0], SIP_NO_HISTORY)) append_history(i, "NewChan", "Channel %s - from %s", tmp->name, i->callid); + /* Inform manager user about new channel and their SIP call ID */ + if (global_callevents) + manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate", + "Channel: %s\r\nUniqueid: %s\r\nChanneltype: %s\r\nSIPcallid: %s\r\nSIPfullcontact: %s\r\n", + tmp->name, tmp->uniqueid, "SIP", i->callid, i->fullcontact); + return tmp; } @@ -12601,6 +12607,10 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru if (!ast_test_flag(req, SIP_PKT_IGNORE) && p->owner) { if (!reinvite) { ast_queue_control(p->owner, AST_CONTROL_ANSWER); + if (global_callevents) + manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate", + "Channel: %s\r\nChanneltype: %s\r\nUniqueid: %s\r\nSIPcallid: %s\r\nSIPfullcontact: %s\r\nPeername: %s\r\n", + p->owner->name, p->owner->uniqueid, "SIP", p->callid, p->fullcontact, p->peername); } else { /* RE-invite */ ast_queue_frame(p->owner, &ast_null_frame); } @@ -16240,6 +16250,10 @@ static struct ast_channel *sip_request_call(const char *type, int format, void * p->jointcapability = oldformat; sip_pvt_lock(p); tmpc = sip_new(p, AST_STATE_DOWN, host); /* Place the call */ + if (global_callevents) + manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate", + "Channel: %s\r\nChanneltype: %s\r\nSIPcallid: %s\r\nSIPfullcontact: %s\r\nPeername: %s\r\n", + p->owner? p->owner->name : "", "SIP", p->callid, p->fullcontact, p->peername); sip_pvt_unlock(p); if (!tmpc) sip_destroy(p); |