privacy.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "asterisk.h"
00031
00032 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
00033
00034 #include <sys/time.h>
00035 #include <signal.h>
00036 #include <dirent.h>
00037
00038 #include "asterisk/channel.h"
00039 #include "asterisk/file.h"
00040 #include "asterisk/app.h"
00041 #include "asterisk/dsp.h"
00042 #include "asterisk/astdb.h"
00043 #include "asterisk/callerid.h"
00044 #include "asterisk/privacy.h"
00045 #include "asterisk/utils.h"
00046 #include "asterisk/lock.h"
00047
00048 int ast_privacy_check(char *dest, char *cid)
00049 {
00050 char tmp[256] = "";
00051 char *trimcid = "";
00052 char *n, *l;
00053 int res;
00054 char key[256], result[256];
00055 if (cid)
00056 ast_copy_string(tmp, cid, sizeof(tmp));
00057 ast_callerid_parse(tmp, &n, &l);
00058 if (l) {
00059 ast_shrink_phone_number(l);
00060 trimcid = l;
00061 }
00062 snprintf(key, sizeof(key), "%s/%s", dest, trimcid);
00063 res = ast_db_get("privacy", key, result, sizeof(result));
00064 if (!res) {
00065 if (!strcasecmp(result, "allow"))
00066 return AST_PRIVACY_ALLOW;
00067 if (!strcasecmp(result, "deny"))
00068 return AST_PRIVACY_DENY;
00069 if (!strcasecmp(result, "kill"))
00070 return AST_PRIVACY_KILL;
00071 if (!strcasecmp(result, "torture"))
00072 return AST_PRIVACY_TORTURE;
00073 }
00074 return AST_PRIVACY_UNKNOWN;
00075 }
00076
00077 int ast_privacy_reset(char *dest)
00078 {
00079 if (!dest)
00080 return -1;
00081 return ast_db_deltree("privacy", dest);
00082 }
00083
00084 int ast_privacy_set(char *dest, char *cid, int status)
00085 {
00086 char tmp[256] = "";
00087 char *trimcid = "";
00088 char *n, *l;
00089 int res;
00090 char key[256];
00091 if (cid)
00092 ast_copy_string(tmp, cid, sizeof(tmp));
00093 ast_callerid_parse(tmp, &n, &l);
00094 if (l) {
00095 ast_shrink_phone_number(l);
00096 trimcid = l;
00097 }
00098 if (ast_strlen_zero(trimcid)) {
00099
00100 return 0;
00101 }
00102 snprintf(key, sizeof(key), "%s/%s", dest, trimcid);
00103 if (status == AST_PRIVACY_UNKNOWN)
00104 res = ast_db_del("privacy", key);
00105 else if (status == AST_PRIVACY_ALLOW)
00106 res = ast_db_put("privacy", key, "allow");
00107 else if (status == AST_PRIVACY_DENY)
00108 res = ast_db_put("privacy", key, "deny");
00109 else if (status == AST_PRIVACY_KILL)
00110 res = ast_db_put("privacy", key, "kill");
00111 else if (status == AST_PRIVACY_TORTURE)
00112 res = ast_db_put("privacy", key, "torture");
00113 else
00114 res = -1;
00115 return res;
00116 }