summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Spencer <markster@digium.com>2003-01-17 03:46:33 +0000
committerMark Spencer <markster@digium.com>2003-01-17 03:46:33 +0000
commite5ce9c9c14cb3d5b2fb8c10930d1ea77d41dfd58 (patch)
tree259b9db363994460b27485427181b1681b4814f7
parent99469b77d2c9f43e5a39d59e102b9863e1212e6a (diff)
Version 0.3.0 from FTP
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@584 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-xinclude/asterisk/privacy.h37
-rwxr-xr-xprivacy.c102
2 files changed, 139 insertions, 0 deletions
diff --git a/include/asterisk/privacy.h b/include/asterisk/privacy.h
new file mode 100755
index 000000000..263bf4525
--- /dev/null
+++ b/include/asterisk/privacy.h
@@ -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
index 000000000..ff146f1c2
--- /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;
+}