From: Naveen Albert Date: Wed, 17 Nov 2021 21:39:34 +0000 (+0000) Subject: app_sendtext: Add ReceiveText application X-Git-Tag: 20.0.0-rc1~248 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=54761a41cd1e713733782d0ac923559fe3c61746;p=thirdparty%2Fasterisk.git app_sendtext: Add ReceiveText application Adds a ReceiveText application that can be used in conjunction with SendText. Currently, there is no way in Asterisk to receive text in the dialplan (or anywhere else, really). This allows for Asterisk to be the recipient of text instead of just the sender. ASTERISK-29759 #close Change-Id: Ica2c354a42bff69f323a0493d3a7cd0fb129d52d --- diff --git a/apps/app_sendtext.c b/apps/app_sendtext.c index 45ae073a3d..07e6accff9 100644 --- a/apps/app_sendtext.c +++ b/apps/app_sendtext.c @@ -21,6 +21,7 @@ * \brief App to transmit a text message * * \author Mark Spencer + * \author Naveen Albert * * \note Requires support of sending text messages from channel driver * @@ -140,11 +141,50 @@ SendImage SendURL + ReceiveText + + + + + Receive a Text Message on a channel. + + + + Time in seconds to wait for text. Default is 0 (forever). + + + + Waits for timeout seconds on the current channel + to receive text. + Result of transmission will be stored in the following variables: + + + The received text message. + + + + Transmission succeeded. + + + Transmission failed or timed out. + + + + + same => n,ReceiveText() + same => n,NoOp(${RECEIVETEXTMESSAGE}) + + + + SendText + SendImage + SendURL ***/ static const char * const app = "SendText"; +static const char * const app2 = "ReceiveText"; static int sendtext_exec(struct ast_channel *chan, const char *data) { @@ -237,14 +277,55 @@ cleanup: return rc; } +static int recvtext_exec(struct ast_channel *chan, const char *data) +{ + double timeout = 0, timeout_ms = 0; + char *parse, *buf; + + AST_DECLARE_APP_ARGS(args, + AST_APP_ARG(timeout); + ); + + parse = ast_strdupa(data); + + AST_STANDARD_APP_ARGS(args, parse); + + if (!ast_strlen_zero(args.timeout)) { + if (sscanf(args.timeout, "%30lg", &timeout) != 1) { + ast_log(LOG_WARNING, "Invalid timeout provided: %s. No timeout set.\n", args.timeout); + return -1; + } + timeout_ms = timeout * 1000.0; + } + + buf = ast_recvtext(chan, timeout_ms); + pbx_builtin_setvar_helper(chan, "RECEIVETEXTSTATUS", buf ? "SUCCESS" : "FAILURE"); + if (buf) { + pbx_builtin_setvar_helper(chan, "RECEIVETEXTMESSAGE", buf); + ast_free(buf); + } + + return 0; +} + static int unload_module(void) { - return ast_unregister_application(app); + int res; + + res = ast_unregister_application(app); + res |= ast_unregister_application(app2); + + return res; } static int load_module(void) { - return ast_register_application_xml(app, sendtext_exec); + int res; + + res = ast_register_application_xml(app, sendtext_exec); + res |= ast_register_application_xml(app2, recvtext_exec); + + return res; } -AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Send Text Applications"); +AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Send and Receive Text Applications"); diff --git a/doc/CHANGES-staging/app_sendtext.txt b/doc/CHANGES-staging/app_sendtext.txt new file mode 100644 index 0000000000..37dd64bace --- /dev/null +++ b/doc/CHANGES-staging/app_sendtext.txt @@ -0,0 +1,4 @@ +Subject: app_sendtext + +A ReceiveText application has been added that can be +used in conjunction with the SendText application.