aboutsummaryrefslogtreecommitdiffstats
path: root/acl.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-03-09 05:48:11 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-03-09 05:48:11 +0000
commit7aeeed164a15d2b1001ee28714b06fcd9807094d (patch)
tree4a39544c884d485bb15aa0e80f5118c05df90b83 /acl.c
parent603ade2a2c51430e68df33c18317323e4456bf44 (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
Diffstat (limited to 'acl.c')
-rwxr-xr-xacl.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/acl.c b/acl.c
index 7f2f9c782..dde791adf 100755
--- a/acl.c
+++ b/acl.c
@@ -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;