diff options
author | Nick Mathewson <nickm@torproject.org> | 2011-05-13 10:48:07 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2011-05-13 10:48:07 -0400 |
commit | 600744b4be3d83a3e4924c8712bc30b7de1f4d3c (patch) | |
tree | 9060cc5d17499fc87b93c8d14492df8cae1a9e59 /src/common/address.c | |
parent | 87c79cf01760787bcd9e8616b17babe5a7e4eca4 (diff) | |
parent | 5f2a1a7b4f20be121cd30def95cf7789924ca70a (diff) | |
download | tor-600744b4be3d83a3e4924c8712bc30b7de1f4d3c.tar.gz tor-600744b4be3d83a3e4924c8712bc30b7de1f4d3c.zip |
Merge remote-tracking branch 'origin/maint-0.2.2'
Conflicts:
src/or/config.c
src/or/dirserv.c
src/or/or.h
Diffstat (limited to 'src/common/address.c')
-rw-r--r-- | src/common/address.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/common/address.c b/src/common/address.c index 65f429a4d2..d0c2d5e15c 100644 --- a/src/common/address.c +++ b/src/common/address.c @@ -43,6 +43,9 @@ #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> /* FreeBSD needs this to know what version it is */ #endif +#ifdef HAVE_SYS_UN_H +#include <sys/un.h> +#endif #include <stdarg.h> #include <stdio.h> #include <stdlib.h> @@ -120,6 +123,33 @@ tor_addr_from_sockaddr(tor_addr_t *a, const struct sockaddr *sa, return 0; } +/** Return a newly allocated string holding the address described in + * <b>sa</b>. AF_UNIX, AF_UNSPEC, AF_INET, and AF_INET6 are supported. */ +char * +tor_sockaddr_to_str(const struct sockaddr *sa) +{ + char address[TOR_ADDR_BUF_LEN]; + char *result; + tor_addr_t addr; + uint16_t port; +#ifdef HAVE_SYS_UN_H + if (sa->sa_family == AF_UNIX) { + struct sockaddr_un *s_un = (struct sockaddr_un *)sa; + tor_asprintf(&result, "unix:%s", s_un->sun_path); + return result; + } +#endif + if (sa->sa_family == AF_UNSPEC) + return tor_strdup("unspec"); + + if (tor_addr_from_sockaddr(&addr, sa, &port) < 0) + return NULL; + if (! tor_addr_to_str(address, &addr, sizeof(address), 1)) + return NULL; + tor_asprintf(&result, "%s:%d", address, (int)port); + return result; +} + /** Set address <b>a</b> to the unspecified address. This address belongs to * no family. */ void |