the last round of file version tags
[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
30 static char *tdesc = "Send Text Applications";
31
32 static char *app = "SendText";
33
34 static char *synopsis = "Send a Text Message";
35
36 static char *descrip = 
37 "  SendText(text): Sends text to client.  If the client\n"
38 "does not support text transport, and  there  exists  a  step  with\n"
39 "priority  n + 101,  then  execution  will  continue  at that step.\n"
40 "Otherwise, execution will continue at  the  next  priority  level.\n"
41 "SendText only returns 0  if  the  text  was  sent  correctly  or  if\n"
42 "the channel  does  not  support text transport,  and -1 otherwise.\n";
43
44 STANDARD_LOCAL_USER;
45
46 LOCAL_USER_DECL;
47
48 static int sendtext_exec(struct ast_channel *chan, void *data)
49 {
50         int res = 0;
51         struct localuser *u;
52         if (!data || !strlen((char *)data)) {
53                 ast_log(LOG_WARNING, "SendText requires an argument (text)\n");
54                 return -1;
55         }
56         LOCAL_USER_ADD(u);
57         ast_mutex_lock(&chan->lock);
58         if (!chan->tech->send_text) {
59                 ast_mutex_unlock(&chan->lock);
60                 /* Does not support transport */
61                 if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->cid.cid_num))
62                         chan->priority += 100;
63                 LOCAL_USER_REMOVE(u);
64                 return 0;
65         }
66         ast_mutex_unlock(&chan->lock);
67         res = ast_sendtext(chan, (char *)data);
68         LOCAL_USER_REMOVE(u);
69         return res;
70 }
71
72 int unload_module(void)
73 {
74         STANDARD_HANGUP_LOCALUSERS;
75         return ast_unregister_application(app);
76 }
77
78 int load_module(void)
79 {
80         return ast_register_application(app, sendtext_exec, synopsis, descrip);
81 }
82
83 char *description(void)
84 {
85         return tdesc;
86 }
87
88 int usecount(void)
89 {
90         int res;
91         STANDARD_USECOUNT(res);
92         return res;
93 }
94
95 char *key()
96 {
97         return ASTERISK_GPL_KEY;
98 }