add text status variable output to SendText() application (issue #4808)
[asterisk/asterisk.git] / apps / app_sendtext.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * App to transmit a text message
5  * 
6  * Copyright (C) 1999 - 2005, Digium, Inc.
7  *
8  * Mark Spencer <markster@digium.com>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13  
14 #include <string.h>
15 #include <stdlib.h>
16
17 #include "asterisk.h"
18
19 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
20
21 #include "asterisk/lock.h"
22 #include "asterisk/file.h"
23 #include "asterisk/logger.h"
24 #include "asterisk/channel.h"
25 #include "asterisk/pbx.h"
26 #include "asterisk/module.h"
27 #include "asterisk/translate.h"
28 #include "asterisk/image.h"
29 #include "asterisk/options.h"
30
31 static const char *tdesc = "Send Text Applications";
32
33 static const char *app = "SendText";
34
35 static const char *synopsis = "Send a Text Message";
36
37 static const char *descrip = 
38 "  SendText(text): Sends text to current channel (callee).\n"
39 "Otherwise, execution will continue at the next priority level.\n"
40 "Result of transmission will be stored in the SENDTEXTSTATUS\n"
41 "channel variable:\n"
42 "      SUCCESS      Transmission succeeded\n"
43 "      FAILURE      Transmission failed\n"
44 "      UNSUPPORTED  Text transmission not supported by channel\n"
45 "\n"
46 "At this moment, text is supposed to be 7 bit ASCII in most channels.\n"
47 "Old deprecated behavior: \n"
48 " SendText only returns 0 if the text was sent correctly or if\n"
49 " the channel does not support text transport.\n"
50 " If the client does not support text transport, and there exists a\n"
51 " step with priority n + 101, then execution will continue at that step.\n";
52
53 STANDARD_LOCAL_USER;
54
55 LOCAL_USER_DECL;
56
57 static int sendtext_exec(struct ast_channel *chan, void *data)
58 {
59         int res = 0;
60         struct localuser *u;
61         char *status = "UNSUPPORTED";
62
63         if (!data || !strlen((char *)data)) {
64                 ast_log(LOG_WARNING, "SendText requires an argument (text)\n");
65                 return -1;
66         }
67
68         LOCAL_USER_ADD(u);
69         ast_mutex_lock(&chan->lock);
70         if (!chan->tech->send_text) {
71                 ast_mutex_unlock(&chan->lock);
72                 /* Does not support transport */
73                 if (option_priority_jumping)
74                         ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
75                 LOCAL_USER_REMOVE(u);
76                 return 0;
77         }
78         status = "FAILURE";
79         ast_mutex_unlock(&chan->lock);
80         res = ast_sendtext(chan, (char *)data);
81         if (!res)
82                 status = "SUCCESS";
83         pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
84         LOCAL_USER_REMOVE(u);
85         return 0;
86 }
87
88 int unload_module(void)
89 {
90         STANDARD_HANGUP_LOCALUSERS;
91
92         return ast_unregister_application(app);
93 }
94
95 int load_module(void)
96 {
97         return ast_register_application(app, sendtext_exec, synopsis, descrip);
98 }
99
100 char *description(void)
101 {
102         return (char *) tdesc;
103 }
104
105 int usecount(void)
106 {
107         int res;
108
109         STANDARD_USECOUNT(res);
110
111         return res;
112 }
113
114 char *key()
115 {
116         return ASTERISK_GPL_KEY;
117 }