diff options
author | Sean Bright <sean@malleable.com> | 2012-02-27 16:31:24 +0000 |
---|---|---|
committer | Sean Bright <sean@malleable.com> | 2012-02-27 16:31:24 +0000 |
commit | 3cf09f40f749c8889de7d2b1aadf05d122ccba4f (patch) | |
tree | da5f3d455d9753ae5fca5670e3454ebd8cdbb687 /main/netsock.c | |
parent | 299dd5d4fc2f6617ee924112c1edf2cc071a160b (diff) |
Convert netsock.h over to use ast_sockaddrs rather than sockaddr_in and update
chan_iax2 to pass in the correct types.
chan_iax2 is the only consumer for the various ast_netsock_* functions in trunk
at this point, so this feels like a safe change to make.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@357005 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/netsock.c')
-rw-r--r-- | main/netsock.c | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/main/netsock.c b/main/netsock.c index d178fbed4..334617da6 100644 --- a/main/netsock.c +++ b/main/netsock.c @@ -48,7 +48,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") struct ast_netsock { ASTOBJ_COMPONENTS(struct ast_netsock); - struct sockaddr_in bindaddr; + struct ast_sockaddr bindaddr; int sockfd; int *ioref; struct io_context *ioc; @@ -89,22 +89,22 @@ int ast_netsock_release(struct ast_netsock_list *list) return 0; } -struct ast_netsock *ast_netsock_find(struct ast_netsock_list *list, - struct sockaddr_in *sa) +struct ast_netsock *ast_netsock_find(struct ast_netsock_list *list, struct ast_sockaddr *addr) { struct ast_netsock *sock = NULL; ASTOBJ_CONTAINER_TRAVERSE(list, !sock, { ASTOBJ_RDLOCK(iterator); - if (!inaddrcmp(&iterator->bindaddr, sa)) + if (!ast_sockaddr_cmp(&iterator->bindaddr, addr)) { sock = iterator; + } ASTOBJ_UNLOCK(iterator); }); return sock; } -struct ast_netsock *ast_netsock_bindaddr(struct ast_netsock_list *list, struct io_context *ioc, struct sockaddr_in *bindaddr, int tos, int cos, ast_io_cb callback, void *data) +struct ast_netsock *ast_netsock_bindaddr(struct ast_netsock_list *list, struct io_context *ioc, struct ast_sockaddr *bindaddr, int tos, int cos, ast_io_cb callback, void *data) { int netsocket = -1; int *ioref; @@ -120,10 +120,13 @@ struct ast_netsock *ast_netsock_bindaddr(struct ast_netsock_list *list, struct i return NULL; } if (setsockopt(netsocket, SOL_SOCKET, SO_REUSEADDR, (char *)&reuseFlag, sizeof reuseFlag) < 0) { - ast_log(LOG_WARNING, "Error setting SO_REUSEADDR on sockfd '%d'\n", netsocket); + ast_log(LOG_WARNING, "Error setting SO_REUSEADDR on sockfd '%d'\n", netsocket); } - if (bind(netsocket,(struct sockaddr *)bindaddr, sizeof(struct sockaddr_in))) { - ast_log(LOG_ERROR, "Unable to bind to %s port %d: %s\n", ast_inet_ntoa(bindaddr->sin_addr), ntohs(bindaddr->sin_port), strerror(errno)); + if (ast_bind(netsocket, bindaddr)) { + ast_log(LOG_ERROR, + "Unable to bind to %s: %s\n", + ast_sockaddr_stringify(bindaddr), + strerror(errno)); close(netsocket); return NULL; } @@ -161,26 +164,17 @@ int ast_netsock_set_qos(int sockfd, int tos, int cos, const char *desc) struct ast_netsock *ast_netsock_bind(struct ast_netsock_list *list, struct io_context *ioc, const char *bindinfo, int defaultport, int tos, int cos, ast_io_cb callback, void *data) { - struct sockaddr_in sin; - char *tmp; - char *host; - char *port; - int portno; - - memset(&sin, 0, sizeof(sin)); - sin.sin_family = AF_INET; - sin.sin_port = htons(defaultport); - tmp = ast_strdupa(bindinfo); - - host = strsep(&tmp, ":"); - port = tmp; + struct ast_sockaddr addr; - if (port && ((portno = atoi(port)) > 0)) - sin.sin_port = htons(portno); + if (ast_sockaddr_parse(&addr, bindinfo, 0)) { + if (!ast_sockaddr_port(&addr)) { + ast_sockaddr_set_port(&addr, defaultport); + } - inet_aton(host, &sin.sin_addr); + return ast_netsock_bindaddr(list, ioc, &addr, tos, cos, callback, data); + } - return ast_netsock_bindaddr(list, ioc, &sin, tos, cos, callback, data); + return NULL; } int ast_netsock_sockfd(const struct ast_netsock *ns) @@ -188,9 +182,9 @@ int ast_netsock_sockfd(const struct ast_netsock *ns) return ns ? ns-> sockfd : -1; } -const struct sockaddr_in *ast_netsock_boundaddr(const struct ast_netsock *ns) +const struct ast_sockaddr *ast_netsock_boundaddr(const struct ast_netsock *ns) { - return &(ns->bindaddr); + return &ns->bindaddr; } void *ast_netsock_data(const struct ast_netsock *ns) |