1be840aed253c4c85fe5979d612c6e78c8ae55a4
[asterisk/asterisk.git] / apps / app_md5.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * MD5 checksum application
5  * 
6  * Copyright (C) 2005, Olle E. Johansson, Edvina.net
7  *
8  * This program is free software, distributed under the terms of
9  * the GNU General Public License
10  */
11
12 #include <asterisk/file.h>
13 #include <asterisk/logger.h>
14 #include <asterisk/utils.h>
15 #include <asterisk/channel.h>
16 #include <asterisk/pbx.h>
17 #include <asterisk/module.h>
18 #include <asterisk/lock.h>
19 #include <stdlib.h>
20 #include <unistd.h>
21 #include <string.h>
22
23 static char *tdesc = "MD5 checksum application";
24 static char *app_md5 = "md5";
25 static char *synopsis = 
26 "  md5(<var>=<string>): Calculates a MD5 checksum on <string>.\n"
27 "Returns hash value in a channel variable. Always return 0\n";
28
29 STANDARD_LOCAL_USER;
30
31 LOCAL_USER_DECL;
32
33 static int md5_exec(struct ast_channel *chan, void *data)
34 {
35         int res=0;
36         struct localuser *u;
37         char *varname= NULL; /* Variable to set */
38         char *string = NULL; /* String to calculate on */
39         char retvar[50]; /* Return value */
40
41         if (!data) {
42                 ast_log(LOG_WARNING, "Syntax: md5(<varname>=<string>) - missing argument!\n");
43                 return -1;
44         }
45         LOCAL_USER_ADD(u);
46         memset(retvar,0, sizeof(retvar));
47         string = ast_strdupa(data);
48         varname = strsep(&string,"=");
49         if (ast_strlen_zero(varname)) {
50                 ast_log(LOG_WARNING, "Syntax: md5(<varname>=<string>) - missing argument!\n");
51                 LOCAL_USER_REMOVE(u);
52                 return -1;
53         }
54         ast_md5_hash(retvar, string);
55         pbx_builtin_setvar_helper(chan, varname, retvar);
56         LOCAL_USER_REMOVE(u);
57         return res;
58 }
59
60 int unload_module(void)
61 {
62         STANDARD_HANGUP_LOCALUSERS;
63         return ast_unregister_application(app_md5);
64 }
65
66 int load_module(void)
67 {
68         return ast_register_application(app_md5, md5_exec, synopsis, tdesc);
69 }
70
71 char *description(void)
72 {
73         return tdesc;
74 }
75
76 int usecount(void)
77 {
78         int res;
79         STANDARD_USECOUNT(res);
80         return res;
81 }
82
83 char *key()
84 {
85         return ASTERISK_GPL_KEY;
86 }