Version 0.3.0 from FTP
authorMark Spencer <markster@digium.com>
Fri, 17 Jan 2003 03:46:33 +0000 (03:46 +0000)
committerMark Spencer <markster@digium.com>
Fri, 17 Jan 2003 03:46:33 +0000 (03:46 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@584 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/privacy.h [new file with mode: 0755]
privacy.c [new file with mode: 0755]

diff --git a/include/asterisk/privacy.h b/include/asterisk/privacy.h
new file mode 100755 (executable)
index 0000000..263bf45
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Persistant data storage (akin to *doze registry)
+ * 
+ * Copyright (C) 1999, Mark Spencer
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+#ifndef _ASTERISK_PRIVACY_H
+#define _ASTERISK_PRIVACY_H
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define AST_PRIVACY_DENY       (1 << 0)                /* Don't bother ringing, send to voicemail */
+#define AST_PRIVACY_ALLOW   (1 << 1)           /* Pass directly to me */
+#define AST_PRIVACY_KILL       (1 << 2)                /* Play anti-telemarketer message and hangup */
+#define AST_PRIVACY_TORTURE    (1 << 3)                /* Send directly to tele-torture */
+#define AST_PRIVACY_UNKNOWN (1 << 16)
+
+int ast_privacy_check(char *dest, char *cid);
+
+int ast_privacy_set(char *dest, char *cid, int status);
+
+int ast_privacy_reset(char *dest);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif
diff --git a/privacy.c b/privacy.c
new file mode 100755 (executable)
index 0000000..ff146f1
--- /dev/null
+++ b/privacy.c
@@ -0,0 +1,102 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Channel Management
+ * 
+ * Copyright (C) 1999, Mark Spencer
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <string.h>
+#include <sys/time.h>
+#include <signal.h>
+#include <errno.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <asterisk/channel.h>
+#include <asterisk/file.h>
+#include <asterisk/app.h>
+#include <asterisk/dsp.h>
+#include <asterisk/logger.h>
+#include <asterisk/options.h>
+#include <asterisk/astdb.h>
+#include <asterisk/callerid.h>
+#include <asterisk/privacy.h>
+#include "asterisk.h"
+
+int ast_privacy_check(char *dest, char *cid)
+{
+       char tmp[256] = "";
+       char *trimcid = "";
+       char *n, *l;
+       int res;
+       char key[256], result[256];
+       if (cid)
+               strncpy(tmp, cid, sizeof(tmp) - 1);
+       ast_callerid_parse(tmp, &n, &l);
+       if (l) {
+               ast_shrink_phone_number(l);
+               trimcid = l;
+       }
+       snprintf(key, sizeof(key), "%s/%s", dest, trimcid);
+       res = ast_db_get("privacy", key, result, sizeof(result));
+       if (!res) {
+               if (!strcasecmp(result, "allow"))
+                       return AST_PRIVACY_ALLOW;
+               if (!strcasecmp(result, "deny"))
+                       return AST_PRIVACY_DENY;
+               if (!strcasecmp(result, "kill"))
+                       return AST_PRIVACY_KILL;
+               if (!strcasecmp(result, "torture"))
+                       return AST_PRIVACY_TORTURE;
+       }
+       return AST_PRIVACY_UNKNOWN;
+}
+
+int ast_privacy_reset(char *dest)
+{
+       if (!dest)
+               return -1;
+       return ast_db_deltree("privacy", dest);
+}
+
+int ast_privacy_set(char *dest, char *cid, int status)
+{
+       char tmp[256] = "";
+       char *trimcid = "";
+       char *n, *l;
+       int res;
+       char key[256];
+       if (cid)
+               strncpy(tmp, cid, sizeof(tmp) - 1);
+       ast_callerid_parse(tmp, &n, &l);
+       if (l) {
+               ast_shrink_phone_number(l);
+               trimcid = l;
+       }
+       if (!strlen(trimcid)) {
+               /* Don't store anything for empty Caller*ID */
+               return 0;
+       }
+       snprintf(key, sizeof(key), "%s/%s", dest, trimcid);
+       if (status == AST_PRIVACY_UNKNOWN) 
+               res = ast_db_del("privacy", key);
+       else if (status == AST_PRIVACY_ALLOW)
+               res = ast_db_put("privacy", key, "allow");
+       else if (status == AST_PRIVACY_DENY)
+               res = ast_db_put("privacy", key, "deny");
+       else if (status == AST_PRIVACY_KILL)
+               res = ast_db_put("privacy", key, "kill");
+       else if (status == AST_PRIVACY_TORTURE)
+               res = ast_db_put("privacy", key, "torture");
+       else
+               res = -1;
+       return res;
+}