]> granicus.if.org Git - curl/commitdiff
- Bart Whiteley provided a patch that made libcurl work properly when an app
authorDaniel Stenberg <daniel@haxx.se>
Thu, 1 May 2008 21:34:34 +0000 (21:34 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 1 May 2008 21:34:34 +0000 (21:34 +0000)
  uses the CURLOPT_OPENSOCKETFUNCTION callback to create a unix domain socket
  to a http server.

CHANGES
RELEASE-NOTES
configure.ac
lib/connect.c

diff --git a/CHANGES b/CHANGES
index fc3f3f0e9aea2d3db6e1ee504847c01a98ce530f..b180b8156978c53f45dc0272fd6d307129a6e7e8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,11 @@
                                   Changelog
 
 
+Daniel Stenberg (1 May 2008)
+- Bart Whiteley provided a patch that made libcurl work properly when an app
+  uses the CURLOPT_OPENSOCKETFUNCTION callback to create a unix domain socket
+  to a http server.
+
 Daniel Stenberg (29 Apr 2008)
 - To make it easier for applications that want lots of magic stuff done on
   redirections and thus cannot use CURLOPT_FOLLOWLOCATION easily, we now
index 3a4fffeba59ee54eef4d3cdc4194ab3277bbc33d..815e9ed07e18bb6a6335f24991a0e9bdcf13cb2b 100644 (file)
@@ -26,6 +26,7 @@ This release includes the following bugfixes:
  o the typechecker can be bypassed by defining CURL_DISABLE_TYPECHECK
  o a pointer mixup could make the FTP code send bad user+password under rare
    circumstances (found when using curlftpfs)
+ o the CURLOPT_OPENSOCKETFUNCTION can now be used to create a unix domain socket
 
 This release includes the following known bugs:
 
@@ -46,6 +47,6 @@ advice from friends like these:
 
  Michal Marek, Daniel Fandrich, Scott Barrett, Alexey Simak, Daniel Black,
  Rafa Muyo, Andre Guibert de Bruet, Brock Noland, Sandor Feldi, Stefan Krause,
- David Shaw, Norbert Frese
+ David Shaw, Norbert Frese, Bart Whiteley
 
         Thanks! (and sorry if I forgot to mention someone)
index d9ba94ddd2689b9f226b89083492d04e640db2d3..503272883bcc2f8a8916033a0cbe136943686032 100644 (file)
@@ -1861,6 +1861,7 @@ AC_CHECK_HEADERS(
         arpa/inet.h \
         net/if.h \
         netinet/in.h \
+        sys/un.h \
         netinet/tcp.h \
         netdb.h \
         sys/sockio.h \
@@ -1907,6 +1908,9 @@ dnl default includes
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
 #endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
 ]
 )
 
index 063556315d10acdd10b0d9fe93424be6b96f0e18..dcccfe4d2b7e0cc93a711949434d5c087bc471a4 100644 (file)
@@ -34,6 +34,9 @@
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h> /* <netinet/tcp.h> may need it */
 #endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h> /* for sockaddr_un */
+#endif
 #ifdef HAVE_NETINET_TCP_H
 #include <netinet/tcp.h> /* for TCP_NODELAY */
 #endif
@@ -766,13 +769,24 @@ singleipconnect(struct connectdata *conn,
 
   /* FIXME: do we have Curl_printable_address-like with struct sockaddr* as
      argument? */
-  iptoprint = &((const struct sockaddr_in*)(&addr->addr))->sin_addr;
+#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
+  if(addr->family==AF_UNIX)
+    infof(data, "  Trying %s... ",
+          ((const struct sockaddr_un*)(&addr->addr))->sun_path);
+  else
+#endif
+  {
 #ifdef ENABLE_IPV6
-  if(addr->family==AF_INET6)
-    iptoprint= &((const struct sockaddr_in6*)(&addr->addr))->sin6_addr;
+    if(addr->family==AF_INET6)
+      iptoprint= &((const struct sockaddr_in6*)(&addr->addr))->sin6_addr;
+    else
 #endif
-  Curl_inet_ntop(addr->family, iptoprint, addr_buf, sizeof(addr_buf));
-  infof(data, "  Trying %s... ", addr_buf);
+      iptoprint = &((const struct sockaddr_in*)(&addr->addr))->sin_addr;
+
+    if(Curl_inet_ntop(addr->family, iptoprint, addr_buf,
+                      sizeof(addr_buf)) != NULL)
+      infof(data, "  Trying %s... ", addr_buf);
+  }
 
   if(data->set.tcp_nodelay)
     tcpnodelay(conn, sockfd);