Allow the AMI Hangup command to accept a Cause header.
(closes issue #14695) Reported by: mneuhauser Patches: cause-for-hangup-manager-action.patch uploaded by mneuhauser (license 425) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@185704 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
93ee72ca92
commit
0e97d64540
5
CHANGES
5
CHANGES
|
@ -27,6 +27,11 @@ Functions
|
|||
---------
|
||||
* The CHANNEL() function now supports the "name" option.
|
||||
|
||||
Asterisk Manager Interface
|
||||
--------------------------
|
||||
* The Hangup action now accepts a Cause header which may be used to
|
||||
set the channel's hangup cause.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
--- Functionality changes from Asterisk 1.6.1 to Asterisk 1.6.2 -------------
|
||||
------------------------------------------------------------------------------
|
||||
|
|
|
@ -1759,21 +1759,40 @@ static int action_challenge(struct mansession *s, const struct message *m)
|
|||
static char mandescr_hangup[] =
|
||||
"Description: Hangup a channel\n"
|
||||
"Variables: \n"
|
||||
" Channel: The channel name to be hungup\n";
|
||||
" Channel: The channel name to be hungup\n"
|
||||
" Cause: numeric hangup cause\n";
|
||||
|
||||
static int action_hangup(struct mansession *s, const struct message *m)
|
||||
{
|
||||
struct ast_channel *c = NULL;
|
||||
int causecode = 0; /* all values <= 0 mean 'do not set hangupcause in channel' */
|
||||
const char *name = astman_get_header(m, "Channel");
|
||||
const char *cause = astman_get_header(m, "Cause");
|
||||
if (ast_strlen_zero(name)) {
|
||||
astman_send_error(s, m, "No channel specified");
|
||||
return 0;
|
||||
}
|
||||
if (!ast_strlen_zero(cause)) {
|
||||
char *endptr;
|
||||
causecode = strtol(cause, &endptr, 10);
|
||||
if (causecode < 0 || causecode > 127 || *endptr != '\0') {
|
||||
ast_log(LOG_NOTICE, "Invalid 'Cause: %s' in manager action Hangup\n", cause);
|
||||
/* keep going, better to hangup without cause than to not hang up at all */
|
||||
causecode = 0; /* do not set channel's hangupcause */
|
||||
}
|
||||
}
|
||||
c = ast_get_channel_by_name_locked(name);
|
||||
if (!c) {
|
||||
astman_send_error(s, m, "No such channel");
|
||||
return 0;
|
||||
}
|
||||
if (causecode > 0) {
|
||||
if (option_debug >= 1) {
|
||||
ast_log(LOG_DEBUG, "Setting hangupcause of channel %s to %d (is %d now)\n",
|
||||
c->name, causecode, c->hangupcause);
|
||||
}
|
||||
c->hangupcause = causecode;
|
||||
}
|
||||
ast_softhangup(c, AST_SOFTHANGUP_EXPLICIT);
|
||||
ast_channel_unlock(c);
|
||||
astman_send_ack(s, m, "Channel Hungup");
|
||||
|
|
Reference in New Issue