Version 0.1.12 from FTP
authorMark Spencer <markster@digium.com>
Thu, 30 May 2002 01:40:29 +0000 (01:40 +0000)
committerMark Spencer <markster@digium.com>
Thu, 30 May 2002 01:40:29 +0000 (01:40 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@454 65c4cc65-6c06-0410-ace0-fbb531ad65f3

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

diff --git a/HARDWARE b/HARDWARE
new file mode 100755 (executable)
index 0000000..53ddc9e
--- /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 (executable)
index 0000000..07579dc
--- /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 (executable)
index 0000000..881821c
--- /dev/null
@@ -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