summaryrefslogtreecommitdiff
path: root/apps/app_sms.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2005-10-19 18:19:02 +0000
committerRussell Bryant <russell@russellbryant.com>2005-10-19 18:19:02 +0000
commit4aa7912057e83f052e94637f0b1a10026fe14558 (patch)
tree5fee3540f8d72d45cd1b2e5bf15e5860581dd4f8 /apps/app_sms.c
parente5afdbbe160b3267df769c9f04c04c6f152b1c94 (diff)
Massive cleanups to applications for LOCAL_USER handling and some other things.
In general, LOCAL_USER_ADD/REMOVE should be the first/last thing called in an application. An exception is if there is some *fast* setup code that might halt the execution of the application, such as checking to see if an argument exists. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6832 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_sms.c')
-rwxr-xr-xapps/app_sms.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/apps/app_sms.c b/apps/app_sms.c
index 80ad3ddb0..77774f20b 100755
--- a/apps/app_sms.c
+++ b/apps/app_sms.c
@@ -1363,10 +1363,14 @@ static int sms_exec (struct ast_channel *chan, void *data)
struct localuser *u;
struct ast_frame *f;
sms_t h = { 0 };
+
+ LOCAL_USER_ADD(u);
+
h.ipc0 = h.ipc1 = 20; /* phase for cosine */
h.dcs = 0xF1; /* default */
if (!data) {
ast_log (LOG_ERROR, "Requires queue name at least\n");
+ LOCAL_USER_REMOVE(u);
return -1;
}
@@ -1379,11 +1383,13 @@ static int sms_exec (struct ast_channel *chan, void *data)
answer = 0;
if (!*d || *d == '|') {
ast_log (LOG_ERROR, "Requires queue name\n");
+ LOCAL_USER_REMOVE(u);
return -1;
}
for (p = d; *p && *p != '|'; p++);
if (p - d >= sizeof (h.queue)) {
ast_log (LOG_ERROR, "Queue name too long\n");
+ LOCAL_USER_REMOVE(u);
return -1;
}
strncpy (h.queue, d, p - d);
@@ -1452,6 +1458,7 @@ static int sms_exec (struct ast_channel *chan, void *data)
h.rx = 0; /* sent message */
h.mr = -1;
sms_writefile (&h);
+ LOCAL_USER_REMOVE(u);
return 0;
}
@@ -1463,7 +1470,6 @@ static int sms_exec (struct ast_channel *chan, void *data)
}
}
- LOCAL_USER_ADD (u);
if (chan->_state != AST_STATE_UP)
ast_answer (chan);
@@ -1475,14 +1481,14 @@ static int sms_exec (struct ast_channel *chan, void *data)
if (res >= 0)
res = ast_set_read_format (chan, AST_FORMAT_SLINEAR);
if (res < 0) {
- LOCAL_USER_REMOVE (u);
ast_log (LOG_ERROR, "Unable to set to linear mode, giving up\n");
+ LOCAL_USER_REMOVE (u);
return -1;
}
if (ast_activate_generator (chan, &smsgen, &h) < 0) {
- LOCAL_USER_REMOVE (u);
ast_log (LOG_ERROR, "Failed to activate generator on '%s'\n", chan->name);
+ LOCAL_USER_REMOVE (u);
return -1;
}