SOURCES: openvpn-2.0_rc16MH.patch (NEW) - http://openvpn.net/patch...

areq areq at pld-linux.org
Mon Aug 29 22:48:21 CEST 2005


Author: areq                         Date: Mon Aug 29 20:48:21 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- http://openvpn.net/patch/openvpn-2.0_rc16MH.patch
- Enable multi-homed UDP server support 

---- Files affected:
SOURCES:
   openvpn-2.0_rc16MH.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/openvpn-2.0_rc16MH.patch
diff -u /dev/null SOURCES/openvpn-2.0_rc16MH.patch:1.1
--- /dev/null	Mon Aug 29 22:48:21 2005
+++ SOURCES/openvpn-2.0_rc16MH.patch	Mon Aug 29 22:48:16 2005
@@ -0,0 +1,2139 @@
+diff -ur openvpn-2.0_rc16/configure.ac openvpn-2.0_rc16MH/configure.ac
+--- openvpn-2.0_rc16/configure.ac	2005-02-20 11:46:15.000000000 -0700
++++ openvpn-2.0_rc16MH/configure.ac	2005-02-26 00:21:45.000000000 -0700
+@@ -89,6 +89,12 @@
+    [FRAGMENT="yes"]
+ )
+ 
++AC_ARG_ENABLE(multihome,
++   [  --disable-multihome     Disable multi-homed UDP server support (--multihome)],
++   [MULTIHOME="$enableval"],
++   [MULTIHOME="yes"]
++)
++
+ AC_ARG_ENABLE(debug,
+    [  --disable-debug         Disable debugging support (disable gremlin and verb 7+ messages)],
+    [DEBUG="$enableval"],
+@@ -326,6 +332,11 @@
+ 	[AC_DEFINE(HAVE_CMSGHDR, 1, [struct cmsghdr needed for extended socket error support])],
+ 	[],
+ 	[#include "syshead.h"])
++AC_CHECK_TYPE(
++	[struct in_pktinfo],
++	[AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo needed for IP_PKTINFO support])],
++	[],
++	[#include "syshead.h"])
+ 
+ AC_CHECK_SIZEOF(unsigned int)
+ AC_CHECK_SIZEOF(unsigned long)
+@@ -351,7 +362,7 @@
+ 	       getpass strerror syslog openlog mlockall getgrnam setgid dnl
+ 	       setgroups stat flock readv writev setsockopt getsockopt dnl
+ 	       setsid chdir gettimeofday putenv getpeername unlink dnl
+-               poll chsize ftruncate)
++               poll chsize ftruncate sendmsg recvmsg)
+ AC_CACHE_SAVE
+ 
+ dnl Required library functions
+@@ -568,6 +579,11 @@
+    AC_DEFINE(ENABLE_HTTP_PROXY, 1, [Enable HTTP proxy support])
+ fi
+ 
++dnl compile --multihome option
++if test "$MULTIHOME" = "yes"; then
++   AC_DEFINE(ENABLE_MULTIHOME, 1, [Enable multi-homed UDP server capability])
++fi
++
+ dnl enable debugging
+ if test "$DEBUG" = "yes"; then
+    AC_DEFINE(ENABLE_DEBUG, 1, [Enable debugging support])
+diff -ur openvpn-2.0_rc16/forward.c openvpn-2.0_rc16MH/forward.c
+--- openvpn-2.0_rc16/forward.c	2005-02-05 01:55:10.000000000 -0700
++++ openvpn-2.0_rc16MH/forward.c	2005-02-25 20:52:18.000000000 -0700
+@@ -563,12 +563,12 @@
+ 
+ static inline void
+ socks_preprocess_outgoing_link (struct context *c,
+-				struct sockaddr_in **to_addr,
++				struct link_socket_actual **to_addr,
+ 				int *size_delta)
+ {
+   if (c->c2.link_socket->socks_proxy && c->c2.link_socket->info.proto == PROTO_UDPv4)
+     {
+-      *size_delta += socks_process_outgoing_udp (&c->c2.to_link, &c->c2.to_link_addr);
++      *size_delta += socks_process_outgoing_udp (&c->c2.to_link, c->c2.to_link_addr);
+       *to_addr = &c->c2.link_socket->socks_relay;
+     }
+ }
+@@ -607,7 +607,11 @@
+ 
+   c->c2.buf = c->c2.buffers->read_link_buf;
+   ASSERT (buf_init (&c->c2.buf, FRAME_HEADROOM_ADJ (&c->c2.frame, FRAME_HEADROOM_MARKER_READ_LINK)));
+-  status = link_socket_read (c->c2.link_socket, &c->c2.buf, MAX_RW_SIZE_LINK (&c->c2.frame), &c->c2.from);
++
++  status = link_socket_read (c->c2.link_socket,
++			     &c->c2.buf,
++			     MAX_RW_SIZE_LINK (&c->c2.frame),
++			     &c->c2.from);
+ 
+   if (socket_connection_reset (c->c2.link_socket, status))
+     {
+@@ -677,7 +681,7 @@
+   msg (D_LINK_RW, "%s READ [%d] from %s: %s",
+        proto2ascii (lsi->proto, true),
+        BLEN (&c->c2.buf),
+-       print_sockaddr (&c->c2.from, &gc),
++       print_link_socket_actual (&c->c2.from, &gc),
+        PROTO_DUMP (&c->c2.buf, &gc));
+ 
+   /*
+@@ -947,7 +951,7 @@
+        * packet to remote over the TCP/UDP port.
+        */
+       int size = 0;
+-      ASSERT (addr_defined (&c->c2.to_link_addr));
++      ASSERT (link_socket_actual_defined (c->c2.to_link_addr));
+ 
+ #ifdef ENABLE_DEBUG
+       /* In gremlin-test mode, we may choose to drop this packet */
+@@ -982,12 +986,12 @@
+ 	  msg (D_LINK_RW, "%s WRITE [%d] to %s: %s",
+ 	       proto2ascii (c->c2.link_socket->info.proto, true),
+ 	       BLEN (&c->c2.to_link),
+-	       print_sockaddr (&c->c2.to_link_addr, &gc),
++	       print_link_socket_actual (c->c2.to_link_addr, &gc),
+ 	       PROTO_DUMP (&c->c2.to_link, &gc));
+ 
+ 	  /* Packet send complexified by possible Socks5 usage */
+ 	  {
+-	    struct sockaddr_in *to_addr = &c->c2.to_link_addr;
++	    struct link_socket_actual *to_addr = c->c2.to_link_addr;
+ #ifdef ENABLE_SOCKS
+ 	    int size_delta = 0;
+ #endif
+@@ -997,7 +1001,9 @@
+ 	    socks_preprocess_outgoing_link (c, &to_addr, &size_delta);
+ #endif
+ 	    /* Send packet */
+-	    size = link_socket_write (c->c2.link_socket, &c->c2.to_link, to_addr);
++	    size = link_socket_write (c->c2.link_socket,
++				      &c->c2.to_link,
++				      to_addr);
+ 
+ #ifdef ENABLE_SOCKS
+ 	    /* Undo effect of prepend */
+@@ -1021,7 +1027,7 @@
+ 	  if (size != BLEN (&c->c2.to_link))
+ 	    msg (D_LINK_ERRORS,
+ 		 "TCP/UDP packet was truncated/expanded on write to %s (tried=%d,actual=%d)",
+-		 print_sockaddr (&c->c2.to_link_addr, &gc),
++		 print_link_socket_actual (c->c2.to_link_addr, &gc),
+ 		 BLEN (&c->c2.to_link),
+ 		 size);
+ 	}
+@@ -1030,7 +1036,7 @@
+     {
+       if (c->c2.to_link.len > 0)
+ 	msg (D_LINK_ERRORS, "TCP/UDP packet too large on write to %s (tried=%d,max=%d)",
+-	     print_sockaddr (&c->c2.to_link_addr, &gc),
++	     print_link_socket_actual (c->c2.to_link_addr, &gc),
+ 	     c->c2.to_link.len,
+ 	     EXPANDED_SIZE (&c->c2.frame));
+     }
+diff -ur openvpn-2.0_rc16/init.c openvpn-2.0_rc16MH/init.c
+--- openvpn-2.0_rc16/init.c	2005-02-17 13:36:08.000000000 -0700
++++ openvpn-2.0_rc16MH/init.c	2005-02-25 21:12:42.000000000 -0700
+@@ -1651,6 +1651,13 @@
+ static void
+ do_init_socket_1 (struct context *c, int mode)
+ {
++  unsigned int flags = 0;
++
++#if ENABLE_IP_PKTINFO
++  if (c->options.multihome)
++    flags |= SF_USE_IP_PKTINFO;
++#endif
++  
+   link_socket_init_phase1 (c->c2.link_socket,
+ 			   c->options.local,
+ 			   c->c1.remote_list,
+@@ -1677,7 +1684,8 @@
+ 			   c->options.connect_retry_seconds,
+ 			   c->options.mtu_discover_type,
+ 			   c->options.rcvbuf,
+-			   c->options.sndbuf);
++			   c->options.sndbuf,
++			   flags);
+ }
+ 
+ /*
+diff -ur openvpn-2.0_rc16/manage.c openvpn-2.0_rc16MH/manage.c
+--- openvpn-2.0_rc16/manage.c	2005-01-14 21:04:11.000000000 -0700
++++ openvpn-2.0_rc16MH/manage.c	2005-02-24 20:13:31.000000000 -0700
+@@ -746,13 +746,16 @@
+ man_accept (struct management *man)
+ {
+   struct gc_arena gc = gc_new ();
++  struct link_socket_actual act;
+ 
+   /*
+    * Accept the TCP client.
+    */
+-  man->connection.sd_cli = socket_do_accept (man->connection.sd_top, &man->connection.remote, false);
++  man->connection.sd_cli = socket_do_accept (man->connection.sd_top, &act, false);
+   if (socket_defined (man->connection.sd_cli))
+     {
++      man->connection.remote = act.dest;
++
+       if (socket_defined (man->connection.sd_top))
+ 	{
+ #ifdef WIN32
+@@ -1121,9 +1124,9 @@
+       /*
+        * Initialize socket address
+        */
+-      ms->local.sin_family = AF_INET;
+-      ms->local.sin_addr.s_addr = 0;
+-      ms->local.sin_port = htons (port);
++      ms->local.sa.sin_family = AF_INET;
++      ms->local.sa.sin_addr.s_addr = 0;
++      ms->local.sa.sin_port = htons (port);
+ 
+       /*
+        * Run management over tunnel, or
+@@ -1135,7 +1138,7 @@
+ 	}
+       else
+ 	{
+-	  ms->local.sin_addr.s_addr = getaddr
++	  ms->local.sa.sin_addr.s_addr = getaddr
+ 	    (GETADDR_RESOLVE|GETADDR_WARN_ON_SIGNAL|GETADDR_FATAL, addr, 0, NULL, NULL);
+ 	}
+       
+@@ -1382,7 +1385,7 @@
+       && man->connection.state == MS_INITIAL)
+     {
+       /* listen on our local TUN/TAP IP address */
+-      man->settings.local.sin_addr.s_addr = htonl (tun_local_ip);
++      man->settings.local.sa.sin_addr.s_addr = htonl (tun_local_ip);
+       man_connection_init (man);
+     }
+ 
+diff -ur openvpn-2.0_rc16/manage.h openvpn-2.0_rc16MH/manage.h
+--- openvpn-2.0_rc16/manage.h	2005-01-09 17:46:29.000000000 -0700
++++ openvpn-2.0_rc16MH/manage.h	2005-02-24 20:01:50.000000000 -0700
+@@ -186,7 +186,7 @@
+ 
+ struct man_settings {
+   bool defined;
+-  struct sockaddr_in local;
++  struct openvpn_sockaddr local;
+   bool up_query_passwords;
+   bool management_over_tunnel;
+   struct user_pass up;
+@@ -213,7 +213,7 @@
+ 
+   socket_descriptor_t sd_top;
+   socket_descriptor_t sd_cli;
+-  struct sockaddr_in remote;
++  struct openvpn_sockaddr remote;
+ 
+ #ifdef WIN32
+   struct net_event_win32 ne32;
+diff -ur openvpn-2.0_rc16/mroute.c openvpn-2.0_rc16MH/mroute.c
+--- openvpn-2.0_rc16/mroute.c	2005-01-09 17:46:41.000000000 -0700
++++ openvpn-2.0_rc16MH/mroute.c	2005-02-24 20:20:57.000000000 -0700
+@@ -169,28 +169,29 @@
+ }
+ 
+ /*
+- * Translate a struct sockaddr_in (saddr)
++ * Translate a struct openvpn_sockaddr (osaddr)
+  * to a struct mroute_addr (addr).
+  */
+-bool
+-mroute_extract_sockaddr_in (struct mroute_addr *addr, const struct sockaddr_in *saddr, bool use_port)
++bool mroute_extract_openvpn_sockaddr (struct mroute_addr *addr,
++				      const struct openvpn_sockaddr *osaddr,
++				      bool use_port)
+ {
+-  if (saddr->sin_family == AF_INET)
++  if (osaddr->sa.sin_family == AF_INET)
+     {
+       if (use_port)
+ 	{
+ 	  addr->type = MR_ADDR_IPV4 | MR_WITH_PORT;
+ 	  addr->netbits = 0;
+ 	  addr->len = 6;
+-	  memcpy (addr->addr, &saddr->sin_addr.s_addr, 4);
+-	  memcpy (addr->addr + 4, &saddr->sin_port, 2);
++	  memcpy (addr->addr, &osaddr->sa.sin_addr.s_addr, 4);
++	  memcpy (addr->addr + 4, &osaddr->sa.sin_port, 2);
+ 	}
+       else
+ 	{
+ 	  addr->type = MR_ADDR_IPV4;
+ 	  addr->netbits = 0;
+ 	  addr->len = 4;
+-	  memcpy (addr->addr, &saddr->sin_addr.s_addr, 4);
++	  memcpy (addr->addr, &osaddr->sa.sin_addr.s_addr, 4);
+ 	}
+       return true;
+     }
+diff -ur openvpn-2.0_rc16/mroute.h openvpn-2.0_rc16MH/mroute.h
+--- openvpn-2.0_rc16/mroute.h	2005-01-09 17:46:41.000000000 -0700
++++ openvpn-2.0_rc16MH/mroute.h	2005-02-24 20:19:05.000000000 -0700
+@@ -95,9 +95,11 @@
+ 					      struct buffer *buf,
+ 					      int tunnel_type);
+ 
+-bool mroute_extract_sockaddr_in (struct mroute_addr *addr,
+-				 const struct sockaddr_in *saddr,
+-				 bool use_port);
++struct openvpn_sockaddr;
++
++bool mroute_extract_openvpn_sockaddr (struct mroute_addr *addr,
++				      const struct openvpn_sockaddr *osaddr,
++				      bool use_port);
+ 
+ bool mroute_learnable_address (const struct mroute_addr *addr);
+ 
+diff -ur openvpn-2.0_rc16/mtcp.c openvpn-2.0_rc16MH/mtcp.c
+--- openvpn-2.0_rc16/mtcp.c	2005-02-05 01:55:09.000000000 -0700
++++ openvpn-2.0_rc16MH/mtcp.c	2005-02-24 20:18:27.000000000 -0700
+@@ -160,7 +160,7 @@
+   ASSERT (mi->context.c2.link_socket);
+   ASSERT (mi->context.c2.link_socket->info.lsa);
+   ASSERT (mi->context.c2.link_socket->mode == LS_MODE_TCP_ACCEPT_FROM);
+-  if (!mroute_extract_sockaddr_in (&mi->real, &mi->context.c2.link_socket->info.lsa->actual, true))
++  if (!mroute_extract_openvpn_sockaddr (&mi->real, &mi->context.c2.link_socket->info.lsa->actual.dest, true))
+     {
+       msg (D_MULTI_ERRORS, "MULTI TCP: TCP client address is undefined");
+       return false;
+diff -ur openvpn-2.0_rc16/mudp.c openvpn-2.0_rc16MH/mudp.c
+--- openvpn-2.0_rc16/mudp.c	2005-02-05 01:55:09.000000000 -0700
++++ openvpn-2.0_rc16MH/mudp.c	2005-02-24 20:23:14.000000000 -0700
+@@ -52,7 +52,7 @@
+   struct multi_instance *mi = NULL;
+   struct hash *hash = m->hash;
+ 
+-  if (mroute_extract_sockaddr_in (&real, &m->top.c2.from, true))
++  if (mroute_extract_openvpn_sockaddr (&real, &m->top.c2.from.dest, true))
+     {
+       struct hash_element *he;
+       const uint32_t hv = hash_value (hash, &real);
+diff -ur openvpn-2.0_rc16/multi.c openvpn-2.0_rc16MH/multi.c
+--- openvpn-2.0_rc16/multi.c	2005-01-18 22:23:17.000000000 -0700
++++ openvpn-2.0_rc16MH/multi.c	2005-02-24 20:27:42.000000000 -0700
+@@ -939,13 +939,13 @@
+ 		       in_addr_t a,
+ 		       int netbits) /* -1 if host route, otherwise # of network bits in address */
+ {
+-  struct sockaddr_in remote_si;
++  struct openvpn_sockaddr remote_si;
+   struct mroute_addr addr;
+ 
+   CLEAR (remote_si);
+-  remote_si.sin_family = AF_INET;
+-  remote_si.sin_addr.s_addr = htonl (a);
+-  ASSERT (mroute_extract_sockaddr_in (&addr, &remote_si, false));
++  remote_si.sa.sin_family = AF_INET;
++  remote_si.sa.sin_addr.s_addr = htonl (a);
++  ASSERT (mroute_extract_openvpn_sockaddr (&addr, &remote_si, false));
+ 
+   if (netbits >= 0)
+     {
+@@ -2009,15 +2009,15 @@
+   struct multi_context *m = (struct multi_context *) arg;
+   struct hash_iterator hi;
+   struct hash_element *he;
+-  struct sockaddr_in saddr;
++  struct openvpn_sockaddr saddr;
+   struct mroute_addr maddr;
+   int count = 0;
+ 
+   CLEAR (saddr);
+-  saddr.sin_family = AF_INET;
+-  saddr.sin_addr.s_addr = htonl (addr);
+-  saddr.sin_port = htons (port);
+-  if (mroute_extract_sockaddr_in (&maddr, &saddr, true))
++  saddr.sa.sin_family = AF_INET;
++  saddr.sa.sin_addr.s_addr = htonl (addr);
++  saddr.sa.sin_port = htons (port);
++  if (mroute_extract_openvpn_sockaddr (&maddr, &saddr, true))
+     {
+       hash_iterator_init (m->iter, &hi, true);
+       while ((he = hash_iterator_next (&hi)))
+diff -ur openvpn-2.0_rc16/openvpn.h openvpn-2.0_rc16MH/openvpn.h
+--- openvpn-2.0_rc16/openvpn.h	2005-01-09 17:46:29.000000000 -0700
++++ openvpn-2.0_rc16MH/openvpn.h	2005-02-24 18:53:27.000000000 -0700
+@@ -210,8 +210,8 @@
+   struct link_socket_info *link_socket_info;
+   const struct link_socket *accept_from; /* possibly do accept() on a parent link_socket */
+ 
+-  struct sockaddr_in to_link_addr;	 /* IP address of remote */
+-  struct sockaddr_in from;               /* address of incoming datagram */
++  struct link_socket_actual *to_link_addr;	/* IP address of remote */
++  struct link_socket_actual from;               /* address of incoming datagram */
+ 
+   /* MTU frame parameters */
+   struct frame frame;
+diff -ur openvpn-2.0_rc16/options.c openvpn-2.0_rc16MH/options.c
+--- openvpn-2.0_rc16/options.c	2005-02-10 19:18:08.000000000 -0700
++++ openvpn-2.0_rc16MH/options.c	2005-02-25 21:11:12.000000000 -0700
+@@ -172,6 +172,9 @@
+   "--ping-timer-rem: Run the --ping-exit/--ping-restart timer only if we have a\n"
+   "                  remote address.\n"
+   "--ping n        : Ping remote once every n seconds over TCP/UDP port.\n"
++#if ENABLE_IP_PKTINFO
++  "--multihome     : Configure a multi-homed UDP server.\n"
++#endif
+   "--fast-io       : (experimental) Optimize TUN/TAP/UDP writes.\n"
+ #ifdef ENABLE_OCC
+   "--explicit-exit-notify n : (experimental) on exit, send exit signal to remote.\n"
+@@ -1034,6 +1037,10 @@
+   SHOW_INT (rcvbuf);
+   SHOW_INT (sndbuf);
+ 
++#if ENABLE_IP_PKTINFO
++  SHOW_BOOL (multihome);
++#endif
++
+ #ifdef ENABLE_HTTP_PROXY
+   if (o->http_proxy_options)
+     show_http_proxy_options (o->http_proxy_options);
+@@ -2997,6 +3004,13 @@
+       VERIFY_PERMISSION (OPT_P_GENERAL);
+       options->mlock = true;
+     }
++#if ENABLE_IP_PKTINFO
++  else if (streq (p[0], "multihome"))
++    {
++      VERIFY_PERMISSION (OPT_P_GENERAL);
++      options->multihome = true;
++    }
++#endif
+   else if (streq (p[0], "verb") && p[1])
+     {
+       ++i;
+diff -ur openvpn-2.0_rc16/options.h openvpn-2.0_rc16MH/options.h
+--- openvpn-2.0_rc16/options.h	2005-02-10 16:37:25.000000000 -0700
++++ openvpn-2.0_rc16MH/options.h	2005-02-25 21:11:13.000000000 -0700
+@@ -223,6 +223,10 @@
+   /* optimize TUN/TAP/UDP writes */
+   bool fast_io;
+ 
++#if ENABLE_IP_PKTINFO
++  bool multihome;
++#endif
++
+ #ifdef USE_LZO
+   bool comp_lzo;
+   bool comp_lzo_adaptive;
+diff -ur openvpn-2.0_rc16/ping-inline.h openvpn-2.0_rc16MH/ping-inline.h
+--- openvpn-2.0_rc16/ping-inline.h	2005-01-09 17:46:41.000000000 -0700
++++ openvpn-2.0_rc16MH/ping-inline.h	2005-02-24 19:56:53.000000000 -0700
+@@ -38,7 +38,7 @@
+       && event_timeout_trigger (&c->c2.ping_rec_interval,
+ 				&c->c2.timeval,
+ 				(!c->options.ping_timer_remote
+-				 || addr_defined (&c->c1.link_socket_addr.actual))
++				 || link_socket_actual_defined (&c->c1.link_socket_addr.actual))
+ 				? ETT_DEFAULT : 15))
+     check_ping_restart_dowork (c);
+ }
+Only in openvpn-2.0_rc16MH/plugin: common
+diff -ur openvpn-2.0_rc16/socket.c openvpn-2.0_rc16MH/socket.c
+--- openvpn-2.0_rc16/socket.c	2005-02-05 01:42:13.000000000 -0700
++++ openvpn-2.0_rc16MH/socket.c	2005-02-25 21:41:34.000000000 -0700
+@@ -237,7 +237,7 @@
+ 
+ static void
+ update_remote (const char* host,
+-	       struct sockaddr_in *addr,
++	       struct openvpn_sockaddr *addr,
+ 	       bool *changed)
+ {
+   if (host && addr)
+@@ -248,9 +248,9 @@
+ 					  1,
+ 					  NULL,
+ 					  NULL);
+-      if (new_addr && addr->sin_addr.s_addr != new_addr)
++      if (new_addr && addr->sa.sin_addr.s_addr != new_addr)
+ 	{
+-	  addr->sin_addr.s_addr = new_addr;
++	  addr->sa.sin_addr.s_addr = new_addr;
+ 	  *changed = true;
+ 	}
+     }
+@@ -440,12 +440,19 @@
+ }
+ 
+ static socket_descriptor_t
+-create_socket_udp (void)
++create_socket_udp (const unsigned int flags)
+ {
+   socket_descriptor_t sd;
+ 
+   if ((sd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
+     msg (M_SOCKERR, "UDP: Cannot create UDP socket");
++#if ENABLE_IP_PKTINFO
++  else if (flags & SF_USE_IP_PKTINFO)
++    {
++      int pad = 1;
++      setsockopt (sd, SOL_IP, IP_PKTINFO, (void*)&pad, sizeof(pad));
++    }
++#endif
+   return sd;
+ }
+ 
+@@ -455,7 +462,7 @@
+   /* create socket */
+   if (sock->info.proto == PROTO_UDPv4)
+     {
+-      sock->sd = create_socket_udp ();
++      sock->sd = create_socket_udp (sock->socket_flags);
+ 
+ #ifdef ENABLE_SOCKS
+       if (sock->socks_proxy)
+@@ -479,7 +486,7 @@
+ 
+ static void
+ socket_do_listen (socket_descriptor_t sd,
+-		  const struct sockaddr_in *local,
++		  const struct openvpn_sockaddr *local,
+ 		  bool do_listen,
+ 		  bool do_set_nonblock)
+ {
+@@ -501,16 +508,18 @@
+ 
+ socket_descriptor_t
+ socket_do_accept (socket_descriptor_t sd,
+-		  struct sockaddr_in *remote,
++		  struct link_socket_actual *act,
+ 		  const bool nowait)
+ {
+-  socklen_t remote_len = sizeof (*remote);
++  socklen_t remote_len = sizeof (act->dest.sa);
+   socket_descriptor_t new_sd = SOCKET_UNDEFINED;
+ 
++  CLEAR (*act);
++
+ #ifdef HAVE_GETPEERNAME
+   if (nowait)
+     {
+-      new_sd = getpeername (sd, (struct sockaddr *) remote, &remote_len);
++      new_sd = getpeername (sd, (struct sockaddr *) &act->dest.sa, &remote_len);
+ 
+       if (!socket_defined (new_sd))
+ 	msg (D_LINK_ERRORS | M_ERRNO_SOCK, "TCP: getpeername() failed");
+@@ -523,14 +532,14 @@
+ #endif
+   else
+     {
+-      new_sd = accept (sd, (struct sockaddr *) remote, &remote_len);
++      new_sd = accept (sd, (struct sockaddr *) &act->dest.sa, &remote_len);
+     }
+ 
+   if (!socket_defined (new_sd))
+     {
+       msg (D_LINK_ERRORS | M_ERRNO_SOCK, "TCP: accept(%d) failed", sd);
+     }
+-  else if (remote_len != sizeof (*remote))
++  else if (remote_len != sizeof (act->dest.sa))
+     {
+       msg (D_LINK_ERRORS, "TCP: Received strange incoming connection with unknown address length=%d", remote_len);
+       openvpn_close_socket (new_sd);
+@@ -540,28 +549,30 @@
+ }
+ 
+ static void
+-tcp_connection_established (const struct sockaddr_in *remote)
++tcp_connection_established (const struct link_socket_actual *act)
+ {
+   struct gc_arena gc = gc_new ();
+   msg (M_INFO, "TCP connection established with %s", 
+-       print_sockaddr (remote, &gc));
++       print_link_socket_actual (act, &gc));
+   gc_free (&gc);
+ }
+ 
+ static int
+ socket_listen_accept (socket_descriptor_t sd,
+-		      struct sockaddr_in *remote,
++		      struct link_socket_actual *act,
+ 		      const char *remote_dynamic,
+ 		      bool *remote_changed,
+-		      const struct sockaddr_in *local,
++		      const struct openvpn_sockaddr *local,
+ 		      bool do_listen,
+ 		      bool nowait,
+ 		      volatile int *signal_received)
+ {
+   struct gc_arena gc = gc_new ();
+-  struct sockaddr_in remote_verify = *remote;
++  //struct openvpn_sockaddr *remote = &act->dest;
++  struct openvpn_sockaddr remote_verify = act->dest;
+   int new_sd = SOCKET_UNDEFINED;
+ 
++  CLEAR (*act);
+   socket_do_listen (sd, local, do_listen, true);
+ 
+   while (true)
+@@ -590,17 +601,17 @@
+       if (status <= 0)
+ 	continue;
+ 
+-      new_sd = socket_do_accept (sd, remote, nowait);
++      new_sd = socket_do_accept (sd, act, nowait);
+ 
+       if (socket_defined (new_sd))
<<Diff was trimmed, longer than 597 lines>>



More information about the pld-cvs-commit mailing list