aboutsummaryrefslogtreecommitdiff
path: root/src/common/address.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-05-13 10:48:07 -0400
committerNick Mathewson <nickm@torproject.org>2011-05-13 10:48:07 -0400
commit600744b4be3d83a3e4924c8712bc30b7de1f4d3c (patch)
tree9060cc5d17499fc87b93c8d14492df8cae1a9e59 /src/common/address.c
parent87c79cf01760787bcd9e8616b17babe5a7e4eca4 (diff)
parent5f2a1a7b4f20be121cd30def95cf7789924ca70a (diff)
downloadtor-600744b4be3d83a3e4924c8712bc30b7de1f4d3c.tar
tor-600744b4be3d83a3e4924c8712bc30b7de1f4d3c.tar.gz
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.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/common/address.c b/src/common/address.c
index 65f429a4d..d0c2d5e15 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