add text status variable output to SendText() application (issue )

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6359 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2-netsec
Kevin P. Fleming 20 years ago
parent dffade452c
commit fda760f7bd

@ -26,20 +26,29 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/module.h" #include "asterisk/module.h"
#include "asterisk/translate.h" #include "asterisk/translate.h"
#include "asterisk/image.h" #include "asterisk/image.h"
#include "asterisk/options.h"
static char *tdesc = "Send Text Applications";
static const char *tdesc = "Send Text Applications";
static char *app = "SendText";
static const char *app = "SendText";
static char *synopsis = "Send a Text Message";
static const char *synopsis = "Send a Text Message";
static char *descrip =
" SendText(text): Sends text to client. If the client\n" static const char *descrip =
"does not support text transport, and there exists a step with\n" " SendText(text): Sends text to current channel (callee).\n"
"priority n + 101, then execution will continue at that step.\n" "Otherwise, execution will continue at the next priority level.\n"
"Otherwise, execution will continue at the next priority level.\n" "Result of transmission will be stored in the SENDTEXTSTATUS\n"
"SendText only returns 0 if the text was sent correctly or if\n" "channel variable:\n"
"the channel does not support text transport, and -1 otherwise.\n"; " SUCCESS Transmission succeeded\n"
" FAILURE Transmission failed\n"
" UNSUPPORTED Text transmission not supported by channel\n"
"\n"
"At this moment, text is supposed to be 7 bit ASCII in most channels.\n"
"Old deprecated behavior: \n"
" SendText only returns 0 if the text was sent correctly or if\n"
" the channel does not support text transport.\n"
" If the client does not support text transport, and there exists a\n"
" step with priority n + 101, then execution will continue at that step.\n";
STANDARD_LOCAL_USER; STANDARD_LOCAL_USER;
@ -49,29 +58,37 @@ static int sendtext_exec(struct ast_channel *chan, void *data)
{ {
int res = 0; int res = 0;
struct localuser *u; struct localuser *u;
char *status = "UNSUPPORTED";
if (!data || !strlen((char *)data)) { if (!data || !strlen((char *)data)) {
ast_log(LOG_WARNING, "SendText requires an argument (text)\n"); ast_log(LOG_WARNING, "SendText requires an argument (text)\n");
return -1; return -1;
} }
LOCAL_USER_ADD(u); LOCAL_USER_ADD(u);
ast_mutex_lock(&chan->lock); ast_mutex_lock(&chan->lock);
if (!chan->tech->send_text) { if (!chan->tech->send_text) {
ast_mutex_unlock(&chan->lock); ast_mutex_unlock(&chan->lock);
/* Does not support transport */ /* Does not support transport */
if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->cid.cid_num)) if (option_priority_jumping)
chan->priority += 100; ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
LOCAL_USER_REMOVE(u); LOCAL_USER_REMOVE(u);
return 0; return 0;
} }
status = "FAILURE";
ast_mutex_unlock(&chan->lock); ast_mutex_unlock(&chan->lock);
res = ast_sendtext(chan, (char *)data); res = ast_sendtext(chan, (char *)data);
if (!res)
status = "SUCCESS";
pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
LOCAL_USER_REMOVE(u); LOCAL_USER_REMOVE(u);
return res; return 0;
} }
int unload_module(void) int unload_module(void)
{ {
STANDARD_HANGUP_LOCALUSERS; STANDARD_HANGUP_LOCALUSERS;
return ast_unregister_application(app); return ast_unregister_application(app);
} }
@ -82,13 +99,15 @@ int load_module(void)
char *description(void) char *description(void)
{ {
return tdesc; return (char *) tdesc;
} }
int usecount(void) int usecount(void)
{ {
int res; int res;
STANDARD_USECOUNT(res); STANDARD_USECOUNT(res);
return res; return res;
} }

Loading…
Cancel
Save