diff --git a/HARDWARE b/HARDWARE new file mode 100755 index 0000000000..53ddc9eb8c --- /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 0000000000..07579dc1db --- /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 + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 0000000000..881821c53b --- /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 + * + * 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 + +/* 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