diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-09 05:48:11 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-09 05:48:11 +0000 |
commit | 7aeeed164a15d2b1001ee28714b06fcd9807094d (patch) | |
tree | 4a39544c884d485bb15aa0e80f5118c05df90b83 | |
parent | 603ade2a2c51430e68df33c18317323e4456bf44 (diff) |
Make ACL be what SIP is going to need (bug #2358, just first part)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5155 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | acl.c | 29 | ||||
-rwxr-xr-x | include/asterisk/acl.h | 2 |
2 files changed, 22 insertions, 9 deletions
@@ -49,6 +49,7 @@ struct ast_netsock { int sockfd; int *ioref; struct io_context *ioc; + void *data; }; @@ -317,25 +318,25 @@ struct ast_netsock *ast_netsock_bindaddr(struct ast_netsock_list *list, struct i if (setsockopt(netsocket, IPPROTO_IP, IP_TOS, &tos, sizeof(tos))) ast_log(LOG_WARNING, "Unable to set TOS to %d\n", tos); - /* Establish I/O callback for socket read */ - ioref = ast_io_add(ioc, netsocket, callback, AST_IO_IN, data); - if (!ioref) { - ast_log(LOG_WARNING, "Out of memory!\n"); - close(netsocket); - return NULL; - } - ns = malloc(sizeof(struct ast_netsock)); if (ns) { + /* Establish I/O callback for socket read */ + ioref = ast_io_add(ioc, netsocket, callback, AST_IO_IN, ns); + if (!ioref) { + ast_log(LOG_WARNING, "Out of memory!\n"); + close(netsocket); + free(ns); + return NULL; + } ASTOBJ_INIT(ns); ns->ioref = ioref; ns->ioc = ioc; ns->sockfd = netsocket; + ns->data = data; memcpy(&ns->bindaddr, bindaddr, sizeof(ns->bindaddr)); ASTOBJ_CONTAINER_LINK(list, ns); } else { ast_log(LOG_WARNING, "Out of memory!\n"); - ast_io_remove(ioc, ioref); close(netsocket); } return ns; @@ -362,6 +363,16 @@ int ast_netsock_release(struct ast_netsock_list *list) return 0; } +const struct sockaddr_in *ast_netsock_boundaddr(struct ast_netsock *ns) +{ + return &(ns->bindaddr); +} + +void *ast_netsock_data(struct ast_netsock *ns) +{ + return ns->data; +} + struct ast_netsock *ast_netsock_bind(struct ast_netsock_list *list, struct io_context *ioc, const char *bindinfo, int defaultport, int tos, ast_io_cb callback, void *data) { struct sockaddr_in sin; diff --git a/include/asterisk/acl.h b/include/asterisk/acl.h index 3aa777718..6454b1e3e 100755 --- a/include/asterisk/acl.h +++ b/include/asterisk/acl.h @@ -50,6 +50,8 @@ extern struct ast_netsock *ast_netsock_bindaddr(struct ast_netsock_list *list, s extern int ast_netsock_free(struct ast_netsock_list *list, struct ast_netsock *netsock); extern int ast_netsock_release(struct ast_netsock_list *list); extern int ast_netsock_sockfd(struct ast_netsock *ns); +extern const struct sockaddr_in *ast_netsock_boundaddr(struct ast_netsock *ns); +extern void *ast_netsock_data(struct ast_netsock *ns); extern int ast_find_ourip(struct in_addr *ourip, struct sockaddr_in bindaddr); /*! Compares the source address and port of two sockaddr_in */ |