]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add a new tor_addr_from_getsockname()
authorNick Mathewson <nickm@torproject.org>
Fri, 26 Jan 2018 16:48:45 +0000 (11:48 -0500)
committerNick Mathewson <nickm@torproject.org>
Fri, 26 Jan 2018 17:07:37 +0000 (12:07 -0500)
We use this pattern all over, and this should simplify matters a
bit.  Part of 18105.

src/common/compat.c
src/common/compat.h

index 6a61c6c919c43a5040daa14555e6de2539e13496..c457e6383f97fe29c63d06c165612d0a378293b5 100644 (file)
@@ -1392,6 +1392,24 @@ tor_getsockname,(tor_socket_t sock, struct sockaddr *address,
    return getsockname(sock, address, address_len);
 }
 
+/**
+ * Find the local address associated with the socket <b>sock</b>, and
+ * place it in *<b>addr_out</b>.  Return 0 on success, -1 on failure.
+ *
+ * (As tor_getsockname, but instead places the result in a tor_addr_t.) */
+int
+tor_addr_from_getsockname(tor_addr_t *addr_out, tor_socket_t sock)
+{
+  struct sockaddr_storage ss;
+  socklen_t ss_len = sizeof(ss);
+  memset(ss, 0, sizeof(ss));
+
+  if (tor_getsockname(sock, (struct sockaddr *) &ss, &ss_len) < 0)
+    return -1;
+
+  return tor_addr_from_sockaddr(addr_out, (struct sockaddr *)&ss, NULL);
+}
+
 /** Turn <b>socket</b> into a nonblocking socket. Return 0 on success, -1
  * on failure.
  */
index 93301feda01136a5077962df87d2e1650d6c4369..f7932c914a110d85bf6fd6d4d369721e47ac683f 100644 (file)
@@ -510,6 +510,8 @@ int get_n_open_sockets(void);
 MOCK_DECL(int,
 tor_getsockname,(tor_socket_t socket, struct sockaddr *address,
                  socklen_t *address_len));
+struct tor_addr_t;
+int tor_addr_from_getsockname(struct tor_addr_t *addr_out, tor_socket_t sock);
 
 #define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags)
 #define tor_socket_recv(s, buf, len, flags) recv(s, buf, len, flags)