stream cipher: Allow in-place encryption.
[paraslash.git] / net.c
diff --git a/net.c b/net.c
index 697e3b76963babf6b7d4aaec4e83c400e0060deb..2f720b10477aee8214cac5a5223ca4378b29bd5f 100644 (file)
--- a/net.c
+++ b/net.c
@@ -594,37 +594,6 @@ int generic_max_transport_msg_size(int sockfd)
        return generic_mtu(af_type) - estimated_header_overhead(af_type);
 }
 
-/**
- * Print numeric host and port number (beware - uses static char).
- *
- * \param sa The IPv4/IPv6 socket address to use.
- *
- * \return Host string in numeric host:port format, \sa parse_url().
- * \sa getnameinfo(3), services(5), nsswitch.conf(5)
- */
-static char *host_and_port(const struct sockaddr_storage *ss)
-{
-       const struct sockaddr *sa = normalize_ip_address(ss);
-       char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
-       static char output[sizeof(hbuf) + sizeof(sbuf) + 4];
-       int ret;
-
-       ret = getnameinfo(sa, salen(sa),
-                         hbuf, sizeof(hbuf),
-                         sbuf, sizeof(sbuf),
-                         NI_NUMERICHOST | NI_NUMERICSERV);
-       if (ret) {
-               snprintf(output, sizeof(output), "(unknown)");
-               PARA_WARNING_LOG("hostname lookup error (%s).\n",
-                                gai_strerror(ret));
-       } else if (sa->sa_family == AF_INET6) {
-               snprintf(output, sizeof(output), "[%s]:%s", hbuf, sbuf);
-       } else {
-               snprintf(output, sizeof(output), "%s:%s", hbuf, sbuf);
-       }
-       return output;
-}
-
 /**
  * Look up the local or remote side of a connected socket structure.
  *
@@ -633,23 +602,39 @@ static char *host_and_port(const struct sockaddr_storage *ss)
  * remote side.
  *
  * \return A static character string identifying hostname and port of the
- * chosen side.
+ * chosen side in numeric host:port format.
  *
- * \sa getsockname(2), getpeername(2).
+ * \sa getsockname(2), getpeername(2), parse_url(), getnameinfo(3),
+ * services(5), nsswitch.conf(5).
  */
 static char *__get_sock_name(int fd, int (*getname)(int, struct sockaddr*,
                socklen_t *))
 {
        struct sockaddr_storage ss;
+       const struct sockaddr *sa;
        socklen_t sslen = sizeof(ss);
+       char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
+       static char output[sizeof(hbuf) + sizeof(sbuf) + 4];
+       int ret;
 
        if (getname(fd, (struct sockaddr *)&ss, &sslen) < 0) {
-               static char *dont_know = "(don't know)";
                PARA_ERROR_LOG("can not determine address from fd %d: %s\n",
                        fd, strerror(errno));
-               return dont_know;
+               snprintf(output, sizeof(output), "(unknown)");
+               return output;
        }
-       return host_and_port(&ss);
+       sa = normalize_ip_address(&ss);
+       ret = getnameinfo(sa, salen(sa), hbuf, sizeof(hbuf), sbuf,
+               sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV);
+       if (ret) {
+               PARA_WARNING_LOG("hostname lookup error (%s).\n",
+                       gai_strerror(ret));
+               snprintf(output, sizeof(output), "(lookup error)");
+       } else if (sa->sa_family == AF_INET6)
+               snprintf(output, sizeof(output), "[%s]:%s", hbuf, sbuf);
+       else
+               snprintf(output, sizeof(output), "%s:%s", hbuf, sbuf);
+       return output;
 }
 
 /**