c33561af2636ceb78951683b0bfaef40a6d94e02
[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 /*
20  *
21  * App to transmit a text message
22  * 
23  */
24  
25 #include <string.h>
26 #include <stdlib.h>
27
28 #include "asterisk.h"
29
30 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
31
32 #include "asterisk/lock.h"
33 #include "asterisk/file.h"
34 #include "asterisk/logger.h"
35 #include "asterisk/channel.h"
36 #include "asterisk/pbx.h"
37 #include "asterisk/module.h"
38 #include "asterisk/translate.h"
39 #include "asterisk/image.h"
40 #include "asterisk/options.h"
41
42 static const char *tdesc = "Send Text Applications";
43
44 static const char *app = "SendText";
45
46 static const char *synopsis = "Send a Text Message";
47
48 static const char *descrip = 
49 "  SendText(text): Sends text to current channel (callee).\n"
50 "Otherwise, execution will continue at the next priority level.\n"
51 "Result of transmission will be stored in the SENDTEXTSTATUS\n"
52 "channel variable:\n"
53 "      SUCCESS      Transmission succeeded\n"
54 "      FAILURE      Transmission failed\n"
55 "      UNSUPPORTED  Text transmission not supported by channel\n"
56 "\n"
57 "At this moment, text is supposed to be 7 bit ASCII in most channels.\n"
58 "Old deprecated behavior: \n"
59 " SendText only returns 0 if the text was sent correctly or if\n"
60 " the channel does not support text transport.\n"
61 " If the client does not support text transport, and there exists a\n"
62 " step with priority n + 101, then execution will continue at that step.\n";
63
64 STANDARD_LOCAL_USER;
65
66 LOCAL_USER_DECL;
67
68 static int sendtext_exec(struct ast_channel *chan, void *data)
69 {
70         int res = 0;
71         struct localuser *u;
72         char *status = "UNSUPPORTED";
73
74         if (!data || !strlen((char *)data)) {
75                 ast_log(LOG_WARNING, "SendText requires an argument (text)\n");
76                 return -1;
77         }
78
79         LOCAL_USER_ADD(u);
80         ast_mutex_lock(&chan->lock);
81         if (!chan->tech->send_text) {
82                 ast_mutex_unlock(&chan->lock);
83                 /* Does not support transport */
84                 if (option_priority_jumping)
85                         ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
86                 LOCAL_USER_REMOVE(u);
87                 return 0;
88         }
89         status = "FAILURE";
90         ast_mutex_unlock(&chan->lock);
91         res = ast_sendtext(chan, (char *)data);
92         if (!res)
93                 status = "SUCCESS";
94         pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
95         LOCAL_USER_REMOVE(u);
96         return 0;
97 }
98
99 int unload_module(void)
100 {
101         int res;
102         
103         res = ast_unregister_application(app);
104         
105         STANDARD_HANGUP_LOCALUSERS;
106
107         return res;     
108 }
109
110 int load_module(void)
111 {
112         return ast_register_application(app, sendtext_exec, synopsis, descrip);
113 }
114
115 char *description(void)
116 {
117         return (char *) tdesc;
118 }
119
120 int usecount(void)
121 {
122         int res;
123
124         STANDARD_USECOUNT(res);
125
126         return res;
127 }
128
129 char *key()
130 {
131         return ASTERISK_GPL_KEY;
132 }