[asterisk-commits] seanbright: branch seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_se...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Feb 29 16:35:13 CST 2012
Author: seanbright
Date: Wed Feb 29 16:35:09 2012
New Revision: 357654
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=357654
Log:
Add ast_sockaddr_get_wildcard_addrs() - name, functionality, and existance
subject to change barring review.
Modified:
team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/include/asterisk/netsock2.h
team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/main/netsock2.c
Modified: team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/include/asterisk/netsock2.h
URL: http://svnview.digium.com/svn/asterisk/team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/include/asterisk/netsock2.h?view=diff&rev=357654&r1=357653&r2=357654
==============================================================================
--- team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/include/asterisk/netsock2.h (original)
+++ team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/include/asterisk/netsock2.h Wed Feb 29 16:35:09 2012
@@ -358,6 +358,28 @@
int ast_sockaddr_parse(struct ast_sockaddr *addr, const char *str, int flags);
/*!
+ * \since 11
+ *
+ * \brief
+ * Returns a list of local IPv4 and IPv6 wildcard addresses.
+ *
+ * \details
+ * Given an address family, returns a list wildcard addresses suitable for
+ * passing to ast_bind(). If AST_AF_UNSPEC is passed, IPv4 addresses are only
+ * returned if IPv4 is configured on the current host, and IPv6 addresses are
+ * only returned if IPv6 is configured on the current host.
+ *
+ * \details
+ * \param[out] addrs The resulting array of ast_sockaddrs
+ * \param family Only addresses of the given family will be returned. Use 0 or
+ * AST_AF_UNSPEC to get addresses of all families.
+ *
+ * \retval 1 Success
+ * \retval 0 Failure
+ */
+int ast_sockaddr_get_wildcard_addrs(struct ast_sockaddr **addrs, int family);
+
+/*!
* \since 1.8
*
* \brief
Modified: team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/main/netsock2.c
URL: http://svnview.digium.com/svn/asterisk/team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/main/netsock2.c?view=diff&rev=357654&r1=357653&r2=357654
==============================================================================
--- team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/main/netsock2.c (original)
+++ team/seanbright/the_ipv6ification_of_chan_iax2_by_the_coward_sean_bright/main/netsock2.c Wed Feb 29 16:35:09 2012
@@ -239,6 +239,41 @@
return 1;
}
+int ast_sockaddr_get_wildcard_addrs(struct ast_sockaddr **addrs, int family)
+{
+ struct addrinfo hints, *res, *ai;
+ int e, i, res_cnt;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
+ hints.ai_family = family;
+ hints.ai_socktype = SOCK_DGRAM;
+
+ if ((e = getaddrinfo(NULL, NULL, &hints, &res))) {
+ ast_log(LOG_ERROR, "getaddrinfo(NULL, NULL, ...): %s\n",
+ gai_strerror(e));
+ return 0;
+ }
+
+ for (ai = res, res_cnt = 0; ai; ai = ai->ai_next) {
+ res_cnt++;
+ }
+
+ if ((*addrs = ast_malloc(res_cnt * sizeof(struct ast_sockaddr))) == NULL) {
+ res_cnt = 0;
+ goto cleanup;
+ }
+
+ for (ai = res, i = 0; ai; ai = ai->ai_next, i++) {
+ (*addrs)[i].len = ai->ai_addrlen;
+ memcpy(&(*addrs)[i].ss, ai->ai_addr, ai->ai_addrlen);
+ }
+
+cleanup:
+ freeaddrinfo(res);
+ return res_cnt;
+}
+
int ast_sockaddr_resolve(struct ast_sockaddr **addrs, const char *str,
int flags, int family)
{
More information about the asterisk-commits
mailing list