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