aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2002-05-30 01:40:29 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2002-05-30 01:40:29 +0000
commit1894676b424803dd8dee2df9c0b76beeeb695fac (patch)
tree643b78509cf00b053cdb487804b4499a1b2f0db4
parentadd416e064b0ba02f5efd6a1a6dcfdc8a353bdb8 (diff)
Version 0.1.12 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@454 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xHARDWARE55
-rwxr-xr-xacl.c116
-rwxr-xr-xinclude/asterisk/acl.h36
3 files changed, 207 insertions, 0 deletions
diff --git a/HARDWARE b/HARDWARE
new file mode 100755
index 000000000..53ddc9eb8
--- /dev/null
+++ b/HARDWARE
@@ -0,0 +1,55 @@
+A PBX is only really useful if you can get calls into it. Of course, you
+can use Asterisk with VoIP calls (SIP, H.323, IAX), but you can also talk
+to the real PSTN through various cards.
+
+Supported Hardware is divided into two general groups: Zaptel devices and
+non-zaptel devices. The Zaptel compatible hardware supports pseudo-TDM
+conferencing and all call features through chan_zap, whereas non-zaptel
+compatible hardware may have different features.
+
+Zaptel compatible hardware
+==========================
+
+-- Linux Support Services, Inc. (Primary author of Asterisk)
+ http://www.linux-support.net, http://store.yahoo.com/asteriskpbx
+
+ * Wildcard X100P - Single FXO interface connects to Loopstart phone
+ line
+
+ * Wildcard T400P - Quad T1 interface connects to four T1/PRI
+ interfaces. Supports RBS and PRI voice and PPP, FR, and HDLC data.
+
+ * Wildcard E400P - Quad E1 interface connects to four E1/PRI (or PRA)
+ interfaces. Supports PRA/PRI, EuroISDN voice and PPP, FR, HDLC data.
+
+Non-zaptel compatible hardware
+==============================
+
+-- QuickNet, Inc.
+ http://www.quicknet.net
+
+ * Internet PhoneJack - Single FXS interface. Supports Linux telephony
+ interface. DSP compression built-in.
+
+ * Internet LineJack - Single FXS or FXO interface. Supports Linux
+ telephony interface.
+
+
+Miscellaneous other interfaces
+==============================
+
+-- ISDN4Linux
+ http://www.isdn4linux.de/
+
+ * Any ISDN terminal adapter supported by isdn4linux should provide
+ connectivity.
+
+-- ALSA
+ http://www.alsa-project.org
+
+ * Any ALSA compatible full-duplex sound card
+
+-- OSS
+ http://www.opensound.com
+
+ * Any OSS compatible full-duplex sound card
diff --git a/acl.c b/acl.c
new file mode 100755
index 000000000..07579dc1d
--- /dev/null
+++ b/acl.c
@@ -0,0 +1,116 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Various sorts of access control
+ *
+ * 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 <asterisk/acl.h>
+#include <asterisk/logger.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+#include <netdb.h>
+
+#define AST_SENSE_DENY 0
+#define AST_SENSE_ALLOW 1
+
+struct ast_ha {
+ /* Host access rule */
+ struct in_addr netaddr;
+ struct in_addr netmask;
+ int sense;
+ struct ast_ha *next;
+};
+
+void ast_free_ha(struct ast_ha *ha)
+{
+ struct ast_ha *hal;
+ while(ha) {
+ hal = ha;
+ ha = ha->next;
+ free(hal);
+ }
+}
+
+struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
+{
+ struct ast_ha *ha = malloc(sizeof(struct ast_ha));
+ char *nm;
+ struct ast_ha *prev = NULL;
+ struct ast_ha *ret;
+ ret = path;
+ while(path) {
+ prev = path;
+ path = path->next;
+ }
+ if (ha) {
+ strtok(stuff, "/");
+ nm = strtok(NULL, "/");
+ if (!nm)
+ nm = "255.255.255.255";
+ if (!inet_aton(stuff, &ha->netaddr)) {
+ ast_log(LOG_WARNING, "%s not a valid IP\n", stuff);
+ free(ha);
+ return NULL;
+ }
+ if (!inet_aton(nm, &ha->netmask)) {
+ ast_log(LOG_WARNING, "%s not a valid netmask\n", nm);
+ free(ha);
+ return NULL;
+ }
+ ha->netaddr.s_addr &= ha->netmask.s_addr;
+ if (!strncasecmp(sense, "p", 1)) {
+ ha->sense = AST_SENSE_ALLOW;
+ } else {
+ ha->sense = AST_SENSE_DENY;
+ }
+ ha->next = NULL;
+ if (prev)
+ prev->next = ha;
+ else
+ ret = ha;
+ }
+ return NULL;
+}
+
+int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin)
+{
+ /* Start optimistic */
+ int res = AST_SENSE_ALLOW;
+ while(ha) {
+ /* For each rule, if this address and the netmask = the net address
+ apply the current rule */
+ if ((sin->sin_addr.s_addr & ha->netmask.s_addr) == (ha->netaddr.s_addr))
+ res = ha->sense;
+ ha = ha->next;
+ }
+ return res;
+}
+
+int ast_get_ip(struct sockaddr_in *sin, char *value)
+{
+ struct hostent *hp;
+ hp = gethostbyname(value);
+ if (hp) {
+ memcpy(&sin->sin_addr, hp->h_addr, sizeof(sin->sin_addr));
+ } else {
+ ast_log(LOG_WARNING, "Unable to lookup '%s'\n", value);
+ return -1;
+ }
+ return 0;
+}
+
diff --git a/include/asterisk/acl.h b/include/asterisk/acl.h
new file mode 100755
index 000000000..881821c53
--- /dev/null
+++ b/include/asterisk/acl.h
@@ -0,0 +1,36 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Access Control of various sorts
+ *
+ * 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_ACL_H
+#define _ASTERISK_ACL_H
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#include <netinet/in.h>
+
+/* Host based access control */
+
+struct ast_ha;
+
+extern void ast_free_ha(struct ast_ha *ha);
+extern struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path);
+extern int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin);
+extern int ast_get_ip(struct sockaddr_in *sin, char *value);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif