Use find_user for existsmailbox
[asterisk/asterisk.git] / apps / app_eval.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Eval application
5  *
6  * Copyright (c) 2004 Tilghman Lesher.  All rights reserved.
7  *
8  * Tilghman Lesher <app_eval__v001@the-tilghman.com>
9  *
10  * $Id$
11  *
12  * This code is released by the author with no restrictions on usage.
13  *
14  */
15
16 #include <stdio.h>
17 #include <stdlib.h>
18 #include <unistd.h>
19 #include <string.h>
20 #include <asterisk/file.h>
21 #include <asterisk/logger.h>
22 #include <asterisk/options.h>
23 #include <asterisk/channel.h>
24 #include <asterisk/pbx.h>
25 #include <asterisk/module.h>
26
27 /* Maximum length of any variable */
28 #define MAXRESULT       1024
29
30 static char *tdesc = "Reevaluates strings";
31
32 static char *app_eval = "Eval";
33
34 static char *eval_synopsis = "Eval(newvar=somestring)";
35
36 static char *eval_descrip =
37 "Eval(newvar=somestring)\n"
38 "  Normally Asterisk evaluates variables inline.  But what if you want to\n"
39 "store variable offsets in a database, to be evaluated later?  Eval is\n"
40 "the answer, by allowing a string to be evaluated twice in the dialplan,\n"
41 "the first time as part of the normal dialplan, and the second using Eval.\n";
42
43 STANDARD_LOCAL_USER;
44
45 LOCAL_USER_DECL;
46
47 static int eval_exec(struct ast_channel *chan, void *data)
48 {
49         int res=0;
50         struct localuser *u;
51         char *s, *newvar=NULL, tmp[MAXRESULT];
52
53         LOCAL_USER_ADD(u);
54
55         /* Check and parse arguments */
56         if (data) {
57                 s = ast_strdupa((char *)data);
58                 if (s) {
59                         newvar = strsep(&s, "=");
60                         if (newvar && (newvar[0] != '\0')) {
61                                 memset(tmp, 0, MAXRESULT);
62                                 pbx_substitute_variables_helper(chan, s, tmp, MAXRESULT - 1);
63                                 pbx_builtin_setvar_helper(chan, newvar, tmp);
64                         }
65                 } else {
66                         ast_log(LOG_ERROR, "Out of memory\n");
67                         res = -1;
68                 }
69         }
70
71         LOCAL_USER_REMOVE(u);
72         return res;
73 }
74
75 int unload_module(void)
76 {
77         STANDARD_HANGUP_LOCALUSERS;
78         return ast_unregister_application(app_eval);
79 }
80
81 int load_module(void)
82 {
83         return ast_register_application(app_eval, eval_exec, eval_synopsis, eval_descrip);
84 }
85
86 char *description(void)
87 {
88         return tdesc;
89 }
90
91 int usecount(void)
92 {
93         int res;
94         STANDARD_USECOUNT(res);
95         return res;
96 }
97
98 char *key()
99 {
100         return ASTERISK_GPL_KEY;
101 }