diff options
author | Richard Mudgett <rmudgett@digium.com> | 2012-09-28 22:11:19 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2012-09-28 22:11:19 +0000 |
commit | 1f9d7090dfab2c5ff958c7d0e00e26f09b852e3a (patch) | |
tree | a8795352241d7e02353dc2190c8406fb2880409f /res/res_agi.c | |
parent | 02d2280543b7df8e929ec3c1d0e3f14410190086 (diff) |
Include channel uniqueid in "AsyncAGI" and "AGIExec" events.
* Added AMI event documentation for AsyncAGI and AGIExec events.
(closes issue ASTERISK-20318)
Reported by: Dan Cropp
Patches:
res_agi_patch.txt (license #6422) patch uploaded by Dan Cropp
modified for trunk.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@374075 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_agi.c')
-rw-r--r-- | res/res_agi.c | 154 |
1 files changed, 126 insertions, 28 deletions
diff --git a/res/res_agi.c b/res/res_agi.c index d5393fc68..a7ed8b53e 100644 --- a/res/res_agi.c +++ b/res/res_agi.c @@ -1323,10 +1323,32 @@ static enum agi_result launch_asyncagi(struct ast_channel *chan, char *argv[], i care of AGI commands on this channel can decide which AGI commands to execute based on the setup info */ ast_uri_encode(agi_buffer, ami_buffer, AMI_BUF_SIZE, ast_uri_http); + /*** DOCUMENTATION + <managerEventInstance> + <synopsis>Raised when a channel starts AsyncAGI command processing.</synopsis> + <syntax> + <parameter name="SubEvent"> + <para>A sub event type, specifying the channel AsyncAGI processing status.</para> + <enumlist> + <enum name="Start"/> + <enum name="Exec"/> + <enum name="End"/> + </enumlist> + </parameter> + <parameter name="Env"> + <para>URL encoded string read from the AsyncAGI server.</para> + </parameter> + </syntax> + </managerEventInstance> + ***/ manager_event(EVENT_FLAG_AGI, "AsyncAGI", "SubEvent: Start\r\n" "Channel: %s\r\n" - "Env: %s\r\n", ast_channel_name(chan), ami_buffer); + "Uniqueid: %s\r\n" + "Env: %s\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan), + ami_buffer); hungup = ast_check_hangup(chan); for (;;) { /* @@ -1369,13 +1391,35 @@ static enum agi_result launch_asyncagi(struct ast_channel *chan, char *argv[], i manager_event(EVENT_FLAG_AGI, "AsyncAGI", "SubEvent: Exec\r\n" "Channel: %s\r\n" - "Result: %s\r\n", ast_channel_name(chan), ami_buffer); + "Uniqueid: %s\r\n" + "Result: %s\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan), + ami_buffer); } else { + /*** DOCUMENTATION + <managerEventInstance> + <synopsis>Raised when AsyncAGI completes an AGI command.</synopsis> + <syntax> + <parameter name="CommandID" required="false"> + <para>Optional command ID sent by the AsyncAGI server to identify the command.</para> + </parameter> + <parameter name="Result"> + <para>URL encoded result string from the executed AGI command.</para> + </parameter> + </syntax> + </managerEventInstance> + ***/ manager_event(EVENT_FLAG_AGI, "AsyncAGI", "SubEvent: Exec\r\n" "Channel: %s\r\n" + "Uniqueid: %s\r\n" "CommandID: %s\r\n" - "Result: %s\r\n", ast_channel_name(chan), cmd->cmd_id, ami_buffer); + "Result: %s\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan), + cmd->cmd_id, + ami_buffer); } free_agi_cmd(cmd); @@ -1434,11 +1478,18 @@ async_agi_done: if (async_agi.speech) { ast_speech_destroy(async_agi.speech); } - /* notify manager users this channel cannot be - controlled anymore by Async AGI */ + /* notify manager users this channel cannot be controlled anymore by Async AGI */ + /*** DOCUMENTATION + <managerEventInstance> + <synopsis>Raised when a channel stops AsyncAGI command processing.</synopsis> + </managerEventInstance> + ***/ manager_event(EVENT_FLAG_AGI, "AsyncAGI", "SubEvent: End\r\n" - "Channel: %s\r\n", ast_channel_name(chan)); + "Channel: %s\r\n" + "Uniqueid: %s\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan)); async_agi_abort: /* close the pipe */ @@ -3414,11 +3465,36 @@ static enum agi_result agi_handle_command(struct ast_channel *chan, AGI *agi, ch int command_id = ast_random(); int resultcode; + /*** DOCUMENTATION + <managerEventInstance> + <synopsis>Raised when a received AGI command starts processing.</synopsis> + <syntax> + <parameter name="SubEvent"> + <para>A sub event type, specifying whether the AGI command has begun or ended.</para> + <enumlist> + <enum name="Start"/> + <enum name="End"/> + </enumlist> + </parameter> + <parameter name="CommandId"> + <para>Random identification number assigned to the execution of this command.</para> + </parameter> + <parameter name="Command"> + <para>The AGI command as received from the external source.</para> + </parameter> + </syntax> + </managerEventInstance> + ***/ manager_event(EVENT_FLAG_AGI, "AGIExec", - "SubEvent: Start\r\n" - "Channel: %s\r\n" - "CommandId: %d\r\n" - "Command: %s\r\n", ast_channel_name(chan), command_id, ami_cmd); + "SubEvent: Start\r\n" + "Channel: %s\r\n" + "Uniqueid: %s\r\n" + "CommandId: %d\r\n" + "Command: %s\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan), + command_id, + ami_cmd); parse_args(buf, &argc, argv); c = find_command(argv, 0); if (c && (!dead || (dead && c->dead))) { @@ -3453,13 +3529,25 @@ static enum agi_result agi_handle_command(struct ast_channel *chan, AGI *agi, ch resultcode = 200; break; } + /*** DOCUMENTATION + <managerEventInstance> + <synopsis>Raised when a received AGI command completes processing.</synopsis> + </managerEventInstance> + ***/ manager_event(EVENT_FLAG_AGI, "AGIExec", - "SubEvent: End\r\n" - "Channel: %s\r\n" - "CommandId: %d\r\n" - "Command: %s\r\n" - "ResultCode: %d\r\n" - "Result: %s\r\n", ast_channel_name(chan), command_id, ami_cmd, resultcode, ami_res); + "SubEvent: End\r\n" + "Channel: %s\r\n" + "Uniqueid: %s\r\n" + "CommandId: %d\r\n" + "Command: %s\r\n" + "ResultCode: %d\r\n" + "Result: %s\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan), + command_id, + ami_cmd, + resultcode, + ami_res); switch (res) { case RESULT_SHOWUSAGE: if (ast_strlen_zero(c->usage)) { @@ -3481,21 +3569,31 @@ static enum agi_result agi_handle_command(struct ast_channel *chan, AGI *agi, ch } else if (c) { ast_agi_send(agi->fd, chan, "511 Command Not Permitted on a dead channel\n"); manager_event(EVENT_FLAG_AGI, "AGIExec", - "SubEvent: End\r\n" - "Channel: %s\r\n" - "CommandId: %d\r\n" - "Command: %s\r\n" - "ResultCode: 511\r\n" - "Result: Command not permitted on a dead channel\r\n", ast_channel_name(chan), command_id, ami_cmd); + "SubEvent: End\r\n" + "Channel: %s\r\n" + "Uniqueid: %s\r\n" + "CommandId: %d\r\n" + "Command: %s\r\n" + "ResultCode: 511\r\n" + "Result: Command not permitted on a dead channel\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan), + command_id, + ami_cmd); } else { ast_agi_send(agi->fd, chan, "510 Invalid or unknown command\n"); manager_event(EVENT_FLAG_AGI, "AGIExec", - "SubEvent: End\r\n" - "Channel: %s\r\n" - "CommandId: %d\r\n" - "Command: %s\r\n" - "ResultCode: 510\r\n" - "Result: Invalid or unknown command\r\n", ast_channel_name(chan), command_id, ami_cmd); + "SubEvent: End\r\n" + "Channel: %s\r\n" + "Uniqueid: %s\r\n" + "CommandId: %d\r\n" + "Command: %s\r\n" + "ResultCode: 510\r\n" + "Result: Invalid or unknown command\r\n", + ast_channel_name(chan), + ast_channel_uniqueid(chan), + command_id, + ami_cmd); } return AGI_RESULT_SUCCESS; } |