Merge in branch which gives you the ability to set the hangup causecode using the Hangup application. (issue #7160 reported by kmilitzer branch by jcollie)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@30390 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Joshua Colp
2006-05-25 20:51:27 +00:00
parent 16d0f580f9
commit 6b185c1bed
3 changed files with 88 additions and 47 deletions

27
pbx.c
View File

@@ -343,7 +343,9 @@ static struct pbx_builtin {
{ "Hangup", pbx_builtin_hangup,
"Hang up the calling channel",
" Hangup(): This application will hang up the calling channel.\n"
" Hangup([causecode]): This application will hang up the calling channel.\n"
"If a causecode is given the channel's hangup cause will be set to the given\n"
"value.\n"
},
{ "NoOp", pbx_builtin_noop,
@@ -5018,9 +5020,28 @@ static int pbx_builtin_setamaflags(struct ast_channel *chan, void *data)
*/
static int pbx_builtin_hangup(struct ast_channel *chan, void *data)
{
/* Just return non-zero and it will hang up */
if (!chan->hangupcause)
if (!ast_strlen_zero(data)) {
int cause;
char *endptr;
if ((cause = ast_str2cause(data)) > -1) {
chan->hangupcause = cause;
return -1;
}
cause = strtol((const char *) data, &endptr, 10);
if (cause != 0 || (data != endptr)) {
chan->hangupcause = cause;
return -1;
}
ast_log(LOG_NOTICE, "Invalid cause given to Hangup(): \"%s\"\n", (char *) data);
}
if (!chan->hangupcause) {
chan->hangupcause = AST_CAUSE_NORMAL_CLEARING;
}
return -1;
}