add 'const' qualifiers in various places where they should have been
[asterisk/asterisk.git] / apps / app_sendtext.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2005, Digium, Inc.
5  *
6  * Mark Spencer <markster@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  *
21  * \brief App to transmit a text message
22  *
23  * \author Mark Spencer <markster@digium.com>
24  * 
25  * \note Requires support of sending text messages from channel driver
26  *
27  * \ingroup applications
28  */
29  
30 #include "asterisk.h"
31
32 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
33
34 #include "asterisk/file.h"
35 #include "asterisk/channel.h"
36 #include "asterisk/pbx.h"
37 #include "asterisk/module.h"
38 #include "asterisk/app.h"
39
40 /*** DOCUMENTATION
41         <application name="SendText" language="en_US">
42                 <synopsis>
43                         Send a Text Message.
44                 </synopsis>
45                 <syntax>
46                         <parameter name="text" required="true" />
47                 </syntax>
48                 <description>
49                         <para>Sends <replaceable>text</replaceable> to current channel (callee).</para>
50                         <para>Result of transmission will be stored in the <variable>SENDTEXTSTATUS</variable></para>
51                         <variablelist>
52                                 <variable name="SENDTEXTSTATUS">
53                                         <value name="SUCCESS">
54                                                 Transmission succeeded.
55                                         </value>
56                                         <value name="FAILURE">
57                                                 Transmission failed.
58                                         </value>
59                                         <value name="UNSUPPORTED">
60                                                 Text transmission not supported by channel.
61                                         </value>
62                                 </variable>
63                         </variablelist>
64                         <note><para>At this moment, text is supposed to be 7 bit ASCII in most channels.</para></note>
65                 </description>
66                 <see-also>
67                         <ref type="application">SendImage</ref>
68                         <ref type="application">SendURL</ref>
69                 </see-also>
70         </application>
71  ***/
72
73 static const char * const app = "SendText";
74
75 static int sendtext_exec(struct ast_channel *chan, void *data)
76 {
77         int res = 0;
78         char *status = "UNSUPPORTED";
79         char *parse = NULL;
80         AST_DECLARE_APP_ARGS(args,
81                 AST_APP_ARG(text);
82         );
83
84         /* NOT ast_strlen_zero, because some protocols (e.g. SIP) MUST be able to
85          * send a zero-length message. */
86         if (!data) {
87                 ast_log(LOG_WARNING, "SendText requires an argument (text)\n");
88                 return -1;
89         } else
90                 parse = ast_strdupa(data);
91         
92         AST_STANDARD_APP_ARGS(args, parse);
93
94         ast_channel_lock(chan);
95         if (!chan->tech->send_text) {
96                 ast_channel_unlock(chan);
97                 /* Does not support transport */
98                 pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
99                 return 0;
100         }
101         status = "FAILURE";
102         ast_channel_unlock(chan);
103         res = ast_sendtext(chan, args.text);
104         if (!res)
105                 status = "SUCCESS";
106         pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
107         return 0;
108 }
109
110 static int unload_module(void)
111 {
112         return ast_unregister_application(app);
113 }
114
115 static int load_module(void)
116 {
117         return ast_register_application_xml(app, sendtext_exec);
118 }
119
120 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Send Text Applications");