mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 11:58:52 +00:00
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
This commit is contained in:
154
res/res_agi.c
154
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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user