mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-30 22:13:49 +00:00
Merge pull request #210 from shadowsocks/v2.0.2-int
Fix issues with MinGW
This commit is contained in:
@@ -1,8 +1,4 @@
|
||||
if BUILD_WINCOMPAT
|
||||
SUBDIRS = libsodium libcork libipset libev src
|
||||
else
|
||||
SUBDIRS = libsodium libcork libipset libudns libev src
|
||||
endif
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
man_MANS = shadowsocks-libev.8
|
||||
|
||||
+2
-3
@@ -133,7 +133,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
||||
distdir dist dist-all distcheck
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = libsodium libcork libipset libudns libev src
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
@@ -295,8 +295,7 @@ target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@BUILD_WINCOMPAT_FALSE@SUBDIRS = libsodium libcork libipset libudns libev src
|
||||
@BUILD_WINCOMPAT_TRUE@SUBDIRS = libsodium libcork libipset libev src
|
||||
SUBDIRS = libsodium libcork libipset libudns libev src
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
man_MANS = shadowsocks-libev.8
|
||||
pkgconfiglibdir = $(libdir)/pkgconfig
|
||||
|
||||
@@ -11,7 +11,7 @@ It is a port of [shadowsocks](https://github.com/shadowsocks/shadowsocks)
|
||||
created by [@clowwindy](https://github.com/clowwindy) maintained by
|
||||
[@madeye](https://github.com/madeye) and [@linusyang](https://github.com/linusyang).
|
||||
|
||||
Current version: 2.0.1 | [](https://travis-ci.org/shadowsocks/shadowsocks-libev) | [Changelog](Changes)
|
||||
Current version: 2.0.2 | [](https://travis-ci.org/shadowsocks/shadowsocks-libev) | [Changelog](Changes)
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for shadowsocks-libev 2.0.1.
|
||||
# Generated by GNU Autoconf 2.69 for shadowsocks-libev 2.0.2.
|
||||
#
|
||||
# Report bugs to <max.c.lv@gmail.com>.
|
||||
#
|
||||
@@ -590,8 +590,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='shadowsocks-libev'
|
||||
PACKAGE_TARNAME='shadowsocks-libev'
|
||||
PACKAGE_VERSION='2.0.1'
|
||||
PACKAGE_STRING='shadowsocks-libev 2.0.1'
|
||||
PACKAGE_VERSION='2.0.2'
|
||||
PACKAGE_STRING='shadowsocks-libev 2.0.2'
|
||||
PACKAGE_BUGREPORT='max.c.lv@gmail.com'
|
||||
PACKAGE_URL=''
|
||||
|
||||
@@ -1336,7 +1336,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures shadowsocks-libev 2.0.1 to adapt to many kinds of systems.
|
||||
\`configure' configures shadowsocks-libev 2.0.2 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1407,7 +1407,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of shadowsocks-libev 2.0.1:";;
|
||||
short | recursive ) echo "Configuration of shadowsocks-libev 2.0.2:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1528,7 +1528,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
shadowsocks-libev configure 2.0.1
|
||||
shadowsocks-libev configure 2.0.2
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -2051,7 +2051,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by shadowsocks-libev $as_me 2.0.1, which was
|
||||
It was created by shadowsocks-libev $as_me 2.0.2, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -2872,7 +2872,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='shadowsocks-libev'
|
||||
VERSION='2.0.1'
|
||||
VERSION='2.0.2'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@@ -15636,7 +15636,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by shadowsocks-libev $as_me 2.0.1, which was
|
||||
This file was extended by shadowsocks-libev $as_me 2.0.2, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -15702,7 +15702,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
shadowsocks-libev config.status 2.0.1
|
||||
shadowsocks-libev config.status 2.0.2
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ dnl -*- Autoconf -*-
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ([2.67])
|
||||
AC_INIT([shadowsocks-libev], [2.0.1], [max.c.lv@gmail.com])
|
||||
AC_INIT([shadowsocks-libev], [2.0.2], [max.c.lv@gmail.com])
|
||||
AC_CONFIG_SRCDIR([src/encrypt.c])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_AUX_DIR(auto)
|
||||
|
||||
Vendored
+6
@@ -1,3 +1,9 @@
|
||||
shadowsocks-libev (2.0.2-1) unstable; urgency=low
|
||||
|
||||
* Fix issues with MinGW.
|
||||
|
||||
-- Max Lv <max.c.lv@gmail.com> Sat, 10 Jan 2015 15:17:10 +0800
|
||||
|
||||
shadowsocks-libev (2.0.1-1) unstable; urgency=low
|
||||
|
||||
* Implement a real asynchronous DNS resolver.
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
#else
|
||||
@@ -301,7 +301,7 @@ printrr(const struct dns_parse *p, struct dns_rr *rr) {
|
||||
if (verbose > 0) putchar('"');
|
||||
c = printtxt(c);
|
||||
if (verbose > 0) putchar('"');
|
||||
}
|
||||
}
|
||||
printf(" %s.", dns_dntosp(dn));
|
||||
break;
|
||||
|
||||
|
||||
+3
-9
@@ -46,12 +46,6 @@ struct in_addr;
|
||||
# undef inet_XtoX_no_ntop
|
||||
# undef inet_XtoX_no_pton
|
||||
|
||||
#else /* !TEST */
|
||||
|
||||
struct in_addr { /* declare it here to avoid messing with headers */
|
||||
unsigned char x[4];
|
||||
};
|
||||
|
||||
#endif /* TEST */
|
||||
|
||||
#endif /* inet_XtoX_prototypes */
|
||||
@@ -60,7 +54,7 @@ struct in_addr { /* declare it here to avoid messing with headers */
|
||||
# define inet_XtoX_prefix inet_
|
||||
#endif
|
||||
#ifndef inet_XtoX_decl
|
||||
# define inet_XtoX_decl /*empty*/
|
||||
# define inet_XtoX_decl /* empty */
|
||||
#endif
|
||||
|
||||
#define cc2_(x,y) cc2__(x,y)
|
||||
@@ -70,7 +64,7 @@ struct in_addr { /* declare it here to avoid messing with headers */
|
||||
#ifndef inet_XtoX_no_ntop
|
||||
|
||||
inet_XtoX_decl const char *
|
||||
fn(ntop)(int af, const void *src, char *dst, unsigned size);
|
||||
fn(ntop)(int af, const void *src, char *dst, int size);
|
||||
|
||||
#ifndef inet_XtoX_prototypes
|
||||
|
||||
@@ -147,7 +141,7 @@ static int mjt_ntop6(const void *_src, char *dst, int size) {
|
||||
}
|
||||
|
||||
inet_XtoX_decl const char *
|
||||
fn(ntop)(int af, const void *src, char *dst, unsigned size) {
|
||||
fn(ntop)(int af, const void *src, char *dst, int size) {
|
||||
switch(af) {
|
||||
/* don't use AF_*: don't mess with headers */
|
||||
case 2: /* AF_INET */ if (mjt_ntop4(src, dst, size)) return dst; break;
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
# include <winsock2.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@
|
||||
|
||||
#define UDNS_VERSION "0.4"
|
||||
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
# ifdef UDNS_DYNAMIC_LIBRARY
|
||||
# ifdef DNS_LIBRARY_BUILD
|
||||
# define UDNS_API __declspec(dllexport)
|
||||
|
||||
+11
-2
@@ -28,11 +28,12 @@
|
||||
#endif
|
||||
#include "udns.h"
|
||||
|
||||
#if HAVE_DECL_INET_NTOP == 1
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#ifdef HAVE_DECL_INET_NTOP
|
||||
const char *dns_ntop(int af, const void *src, char *dst, int size) {
|
||||
return inet_ntop(af, src, dst, size);
|
||||
}
|
||||
@@ -40,9 +41,17 @@ const char *dns_ntop(int af, const void *src, char *dst, int size) {
|
||||
int dns_pton(int af, const char *src, void *dst) {
|
||||
return inet_pton(af, src, dst);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define inet_XtoX_prefix udns_
|
||||
#include <winsock2.h> /* includes <windows.h> */
|
||||
#include <ws2tcpip.h> /* needed for struct in6_addr */
|
||||
|
||||
#ifndef EAFNOSUPPORT
|
||||
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
||||
#endif
|
||||
|
||||
#define inet_XtoX_prefix dns_
|
||||
#include "inet_XtoX.c"
|
||||
|
||||
#endif
|
||||
|
||||
+8
-8
@@ -24,14 +24,14 @@
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
# include <winsock2.h> /* includes <windows.h> */
|
||||
# include <iphlpapi.h> /* for dns server addresses etc */
|
||||
#else
|
||||
# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
#endif /* !WINDOWS */
|
||||
#endif /* !__MINGW32__ */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -53,7 +53,7 @@ static void dns_set_srch_internal(struct dns_ctx *ctx, char *srch) {
|
||||
dns_add_srch(ctx, srch);
|
||||
}
|
||||
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
|
||||
#ifndef NO_IPHLPAPI
|
||||
/* Apparently, some systems does not have proper headers for IPHLPAIP to work.
|
||||
@@ -139,7 +139,7 @@ static int dns_initns_registry(struct dns_ctx *ctx) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* !WINDOWS */
|
||||
#else /* !__MINGW32__ */
|
||||
|
||||
static int dns_init_resolvconf(struct dns_ctx *ctx) {
|
||||
char *v;
|
||||
@@ -210,19 +210,19 @@ static int dns_init_resolvconf(struct dns_ctx *ctx) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* !WINDOWS */
|
||||
#endif /* !__MINGW32__ */
|
||||
|
||||
int dns_init(struct dns_ctx *ctx, int do_open) {
|
||||
if (!ctx)
|
||||
ctx = &dns_defctx;
|
||||
dns_reset(ctx);
|
||||
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
if (dns_initns_iphlpapi(ctx) != 0)
|
||||
dns_initns_registry(ctx);
|
||||
/*XXX WINDOWS: probably good to get default domain and search list too...
|
||||
/*XXX __MINGW32__: probably good to get default domain and search list too...
|
||||
* And options. Something is in registry. */
|
||||
/*XXX WINDOWS: maybe environment variables are also useful? */
|
||||
/*XXX __MINGW32__: maybe environment variables are also useful? */
|
||||
#else
|
||||
dns_init_resolvconf(ctx);
|
||||
#endif
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
# include <winsock2.h> /* includes <windows.h> */
|
||||
# include <ws2tcpip.h> /* needed for struct in6_addr */
|
||||
#else
|
||||
@@ -45,7 +45,7 @@
|
||||
# include <sys/times.h>
|
||||
# endif
|
||||
# define closesocket(sock) close(sock)
|
||||
#endif /* !WINDOWS */
|
||||
#endif /* !__MINGW32__ */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -392,7 +392,7 @@ dns_set_tmcbck(struct dns_ctx *ctx, dns_utm_fn *fn, void *data) {
|
||||
}
|
||||
|
||||
static unsigned dns_nonrandom_32(void) {
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
FILETIME ft;
|
||||
GetSystemTimeAsFileTime(&ft);
|
||||
return ft.dwLowDateTime;
|
||||
@@ -551,7 +551,7 @@ int dns_open(struct dns_ctx *ctx) {
|
||||
ctx->dnsc_qstatus = DNS_E_TEMPFAIL;
|
||||
return -1;
|
||||
}
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
{ unsigned long on = 1;
|
||||
if (ioctlsocket(sock, FIONBIO, &on) == SOCKET_ERROR) {
|
||||
closesocket(sock);
|
||||
@@ -559,14 +559,14 @@ int dns_open(struct dns_ctx *ctx) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#else /* !WINDOWS */
|
||||
#else /* !__MINGW32__ */
|
||||
if (fcntl(sock, F_SETFL, fcntl(sock, F_GETFL) | O_NONBLOCK) < 0 ||
|
||||
fcntl(sock, F_SETFD, FD_CLOEXEC) < 0) {
|
||||
closesocket(sock);
|
||||
ctx->dnsc_qstatus = DNS_E_TEMPFAIL;
|
||||
return -1;
|
||||
}
|
||||
#endif /* WINDOWS */
|
||||
#endif /* __MINGW32__ */
|
||||
/* allocate the packet buffer */
|
||||
if ((ctx->dnsc_pbuf = malloc(ctx->dnsc_udpbuf)) == NULL) {
|
||||
closesocket(sock);
|
||||
@@ -991,7 +991,7 @@ again: /* receive the reply */
|
||||
* or remote. On local errors, we should stop, while
|
||||
* remote errors should be ignored (for now anyway).
|
||||
*/
|
||||
#ifdef WINDOWS
|
||||
#ifdef __MINGW32__
|
||||
if (WSAGetLastError() == WSAEWOULDBLOCK)
|
||||
#else
|
||||
if (errno == EAGAIN)
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#ifndef WINDOWS
|
||||
#ifndef __MINGW32__
|
||||
# include <sys/types.h>
|
||||
# include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=shadowsocks-libev
|
||||
PKG_VERSION:=2.0.1
|
||||
PKG_VERSION:=2.0.2
|
||||
PKG_RELEASE=$(PKG_SOURCE_VERSION)
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/archive
|
||||
|
||||
+2
-1
@@ -16,7 +16,6 @@ SS_COMMON_LIBS = $(top_builddir)/libev/libev.la \
|
||||
$(INET_NTOP_LIB)
|
||||
|
||||
bin_PROGRAMS = ss-local ss-tunnel
|
||||
|
||||
if !BUILD_WINCOMPAT
|
||||
bin_PROGRAMS += ss-server
|
||||
endif
|
||||
@@ -50,6 +49,8 @@ ss_server_SOURCES = utils.c \
|
||||
ss_local_LDADD = $(SS_COMMON_LIBS)
|
||||
ss_tunnel_LDADD = $(SS_COMMON_LIBS)
|
||||
ss_server_LDADD = $(SS_COMMON_LIBS)
|
||||
ss_local_LDADD += $(top_builddir)/libudns/libudns.la
|
||||
ss_tunnel_LDADD += $(top_builddir)/libudns/libudns.la
|
||||
ss_server_LDADD += $(top_builddir)/libudns/libudns.la
|
||||
|
||||
ss_local_CFLAGS = $(AM_CFLAGS) -DUDPRELAY_LOCAL
|
||||
|
||||
+8
-5
@@ -111,7 +111,8 @@ am__DEPENDENCIES_2 = $(top_builddir)/libev/libev.la \
|
||||
$(top_builddir)/libcork/libcork.la \
|
||||
$(top_builddir)/libsodium/src/libsodium/libsodium.la \
|
||||
$(am__DEPENDENCIES_1)
|
||||
am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2)
|
||||
am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
|
||||
$(top_builddir)/libudns/libudns.la
|
||||
libshadowsocks_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
|
||||
am__libshadowsocks_la_SOURCES_DIST = utils.c jconf.c json.c encrypt.c \
|
||||
udprelay.c cache.c acl.c local.c win32.c
|
||||
@@ -142,7 +143,8 @@ am_ss_local_OBJECTS = ss_local-utils.$(OBJEXT) \
|
||||
ss_local-cache.$(OBJEXT) ss_local-acl.$(OBJEXT) \
|
||||
ss_local-local.$(OBJEXT) $(am__objects_3)
|
||||
ss_local_OBJECTS = $(am_ss_local_OBJECTS)
|
||||
ss_local_DEPENDENCIES = $(am__DEPENDENCIES_2)
|
||||
ss_local_DEPENDENCIES = $(am__DEPENDENCIES_2) \
|
||||
$(top_builddir)/libudns/libudns.la
|
||||
ss_local_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_local_CFLAGS) \
|
||||
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
@@ -172,7 +174,8 @@ am_ss_tunnel_OBJECTS = ss_tunnel-utils.$(OBJEXT) \
|
||||
ss_tunnel-cache.$(OBJEXT) ss_tunnel-tunnel.$(OBJEXT) \
|
||||
$(am__objects_4)
|
||||
ss_tunnel_OBJECTS = $(am_ss_tunnel_OBJECTS)
|
||||
ss_tunnel_DEPENDENCIES = $(am__DEPENDENCIES_2)
|
||||
ss_tunnel_DEPENDENCIES = $(am__DEPENDENCIES_2) \
|
||||
$(top_builddir)/libudns/libudns.la
|
||||
ss_tunnel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_tunnel_CFLAGS) \
|
||||
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
@@ -364,8 +367,8 @@ ss_server_SOURCES = utils.c \
|
||||
resolv.c \
|
||||
server.c
|
||||
|
||||
ss_local_LDADD = $(SS_COMMON_LIBS)
|
||||
ss_tunnel_LDADD = $(SS_COMMON_LIBS)
|
||||
ss_local_LDADD = $(SS_COMMON_LIBS) $(top_builddir)/libudns/libudns.la
|
||||
ss_tunnel_LDADD = $(SS_COMMON_LIBS) $(top_builddir)/libudns/libudns.la
|
||||
ss_server_LDADD = $(SS_COMMON_LIBS) $(top_builddir)/libudns/libudns.la
|
||||
ss_local_CFLAGS = $(AM_CFLAGS) -DUDPRELAY_LOCAL
|
||||
ss_tunnel_CFLAGS = $(AM_CFLAGS) -DUDPRELAY_LOCAL -DUDPRELAY_TUNNEL
|
||||
|
||||
+5
-4
@@ -55,6 +55,7 @@
|
||||
#endif
|
||||
|
||||
#include <libcork/core.h>
|
||||
#include <udns.h>
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#include "win32.h"
|
||||
@@ -380,8 +381,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
if (acl || verbose) {
|
||||
uint16_t p =
|
||||
ntohs(*(uint16_t *)(buf + 4 + in_addr_len));
|
||||
inet_ntop(AF_INET, (const void *)(buf + 4),
|
||||
host, INET_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET, (const void *)(buf + 4),
|
||||
host, INET_ADDRSTRLEN);
|
||||
sprintf(port, "%d", p);
|
||||
}
|
||||
} else if (request->atyp == 3) {
|
||||
@@ -409,8 +410,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
if (acl || verbose) {
|
||||
uint16_t p =
|
||||
ntohs(*(uint16_t *)(buf + 4 + in6_addr_len));
|
||||
inet_ntop(AF_INET6, (const void *)(buf + 4),
|
||||
host, INET6_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET6, (const void *)(buf + 4),
|
||||
host, INET6_ADDRSTRLEN);
|
||||
sprintf(port, "%d", p);
|
||||
}
|
||||
} else {
|
||||
|
||||
+18
-3
@@ -23,16 +23,27 @@
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <ev.h>
|
||||
#include <udns.h>
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#include "win32.h"
|
||||
#else
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <ev.h>
|
||||
#include <errno.h>
|
||||
#include <udns.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "resolv.h"
|
||||
#include "utils.h"
|
||||
@@ -96,8 +107,12 @@ resolv_init(struct ev_loop *loop, char **nameservers, int nameserver_num)
|
||||
FATAL("Failed to open DNS resolver socket");
|
||||
}
|
||||
|
||||
#ifdef __MINGW32__
|
||||
setnonblocking(sockfd);
|
||||
#else
|
||||
int flags = fcntl(sockfd, F_GETFL, 0);
|
||||
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
|
||||
#endif
|
||||
|
||||
ev_io_init(&resolv_io_watcher, resolv_sock_cb, sockfd, EV_READ);
|
||||
resolv_io_watcher.data = ctx;
|
||||
|
||||
@@ -26,7 +26,17 @@
|
||||
#ifndef RESOLV_H
|
||||
#define RESOLV_H
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#include "win32.h"
|
||||
#else
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
struct ResolvQuery;
|
||||
|
||||
|
||||
+43
-18
@@ -20,16 +20,14 @@
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <locale.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
@@ -37,10 +35,21 @@
|
||||
#include <unistd.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#include <libcork/core.h>
|
||||
#ifndef __MINGW32__
|
||||
#include <netdb.h>
|
||||
#include <errno.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#include <libcork/core.h>
|
||||
#include <udns.h>
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#include "win32.h"
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__)
|
||||
@@ -112,6 +121,7 @@ static void free_connections(struct ev_loop *loop)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __MINGW32__
|
||||
int setnonblocking(int fd)
|
||||
{
|
||||
int flags;
|
||||
@@ -120,6 +130,7 @@ int setnonblocking(int fd)
|
||||
}
|
||||
return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SET_INTERFACE
|
||||
int setinterface(int socket_fd, const char * interface_name)
|
||||
@@ -306,7 +317,11 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
if (r <= enc_get_iv_len()) {
|
||||
// wait for more
|
||||
if (verbose) {
|
||||
#ifdef __MINGW32__
|
||||
LOGI("imcomplete header: %u", r);
|
||||
#else
|
||||
LOGI("imcomplete header: %zu", r);
|
||||
#endif
|
||||
}
|
||||
server->buf_len = r;
|
||||
return;
|
||||
@@ -366,7 +381,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
uint16_t port = 0;
|
||||
struct addrinfo info;
|
||||
struct sockaddr_storage storage;
|
||||
bzero(&storage, sizeof(struct sockaddr_storage));
|
||||
memset(&info, 0, sizeof(struct addrinfo));
|
||||
memset(&storage, 0, sizeof(struct sockaddr_storage));
|
||||
|
||||
// get remote addr and port
|
||||
if (atyp == 1) {
|
||||
@@ -376,8 +392,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
addr->sin_family = AF_INET;
|
||||
if (r > in_addr_len) {
|
||||
addr->sin_addr = *(struct in_addr *)(server->buf + offset);
|
||||
inet_ntop(AF_INET, (const void *)(server->buf + offset),
|
||||
host, INET_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET, (const void *)(server->buf + offset),
|
||||
host, INET_ADDRSTRLEN);
|
||||
offset += in_addr_len;
|
||||
} else {
|
||||
LOGE("invalid header with addr type %d", atyp);
|
||||
@@ -403,7 +419,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
info.ai_protocol = IPPROTO_TCP;
|
||||
if (ip.version == 4) {
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *)&storage;
|
||||
inet_pton(AF_INET, host, &(addr->sin_addr));
|
||||
dns_pton(AF_INET, host, &(addr->sin_addr));
|
||||
addr->sin_port = *(uint16_t *)(server->buf + offset);
|
||||
addr->sin_family = AF_INET;
|
||||
info.ai_family = AF_INET;
|
||||
@@ -411,7 +427,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
info.ai_addr = (struct sockaddr *)addr;
|
||||
} else if (ip.version == 6) {
|
||||
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&storage;
|
||||
inet_pton(AF_INET6, host, &(addr->sin6_addr));
|
||||
dns_pton(AF_INET6, host, &(addr->sin6_addr));
|
||||
addr->sin6_port = *(uint16_t *)(server->buf + offset);
|
||||
addr->sin6_family = AF_INET6;
|
||||
info.ai_family = AF_INET6;
|
||||
@@ -428,8 +444,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
addr->sin6_family = AF_INET6;
|
||||
if (r > in6_addr_len) {
|
||||
addr->sin6_addr = *(struct in6_addr *)(server->buf + offset);
|
||||
inet_ntop(AF_INET6, (const void *)(server->buf + offset),
|
||||
host, INET6_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET6, (const void *)(server->buf + offset),
|
||||
host, INET6_ADDRSTRLEN);
|
||||
offset += in6_addr_len;
|
||||
} else {
|
||||
LOGE("invalid header with addr type %d", atyp);
|
||||
@@ -590,6 +606,7 @@ static void server_resolve_cb(struct sockaddr *addr, void *data)
|
||||
close_and_free_server(EV_A_ server);
|
||||
} else {
|
||||
struct addrinfo info;
|
||||
memset(&info, 0, sizeof(struct addrinfo));
|
||||
info.ai_socktype = SOCK_STREAM;
|
||||
info.ai_protocol = IPPROTO_TCP;
|
||||
info.ai_addr = addr;
|
||||
@@ -976,8 +993,8 @@ int main(int argc, char **argv)
|
||||
int option_index = 0;
|
||||
static struct option long_options[] =
|
||||
{
|
||||
{ "fast-open", no_argument, 0, 0 },
|
||||
{ 0, 0, 0, 0 }
|
||||
{ "fast-open", no_argument, 0, 0 },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
opterr = 0;
|
||||
@@ -1104,10 +1121,14 @@ int main(int argc, char **argv)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __MINGW32__
|
||||
winsock_init();
|
||||
#else
|
||||
// ignore SIGPIPE
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
signal(SIGCHLD, SIG_IGN);
|
||||
signal(SIGABRT, SIG_IGN);
|
||||
#endif
|
||||
|
||||
struct ev_signal sigint_watcher;
|
||||
struct ev_signal sigterm_watcher;
|
||||
@@ -1203,6 +1224,10 @@ int main(int argc, char **argv)
|
||||
|
||||
resolv_shutdown(loop);
|
||||
|
||||
#ifdef __MINGW32__
|
||||
winsock_cleanup();
|
||||
#endif
|
||||
|
||||
ev_signal_stop(EV_DEFAULT, &sigint_watcher);
|
||||
ev_signal_stop(EV_DEFAULT, &sigterm_watcher);
|
||||
|
||||
|
||||
+3
-2
@@ -53,6 +53,7 @@
|
||||
#endif
|
||||
|
||||
#include <libcork/core.h>
|
||||
#include <udns.h>
|
||||
|
||||
#include "utils.h"
|
||||
#include "tunnel.h"
|
||||
@@ -385,7 +386,7 @@ static void remote_send_cb(EV_P_ ev_io *w, int revents)
|
||||
struct in_addr host;
|
||||
int host_len = sizeof(struct in_addr);
|
||||
|
||||
if (inet_pton(AF_INET, sa->host, &host) == -1) {
|
||||
if (dns_pton(AF_INET, sa->host, &host) == -1) {
|
||||
FATAL("IP parser error.");
|
||||
}
|
||||
ss_addr_to_send[addr_len++] = 1;
|
||||
@@ -396,7 +397,7 @@ static void remote_send_cb(EV_P_ ev_io *w, int revents)
|
||||
struct in6_addr host;
|
||||
int host_len = sizeof(struct in6_addr);
|
||||
|
||||
if (inet_pton(AF_INET6, sa->host, &host) == -1) {
|
||||
if (dns_pton(AF_INET6, sa->host, &host) == -1) {
|
||||
FATAL("IP parser error.");
|
||||
}
|
||||
ss_addr_to_send[addr_len++] = 4;
|
||||
|
||||
+15
-14
@@ -54,6 +54,7 @@
|
||||
#endif
|
||||
|
||||
#include <libcork/core.h>
|
||||
#include <udns.h>
|
||||
|
||||
#include "utils.h"
|
||||
#include "udprelay.h"
|
||||
@@ -169,8 +170,8 @@ static int parse_udprealy_header(const char * buf, const int buf_len,
|
||||
addr->sin_port = *(uint16_t *)(buf + offset + in_addr_len);
|
||||
}
|
||||
if (host != NULL) {
|
||||
inet_ntop(AF_INET, (const void *)(buf + offset),
|
||||
host, INET_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET, (const void *)(buf + offset),
|
||||
host, INET_ADDRSTRLEN);
|
||||
}
|
||||
offset += in_addr_len;
|
||||
}
|
||||
@@ -188,12 +189,12 @@ static int parse_udprealy_header(const char * buf, const int buf_len,
|
||||
if (cork_ip_init(&ip, host) != -1) {
|
||||
if (ip.version == 4) {
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *)storage;
|
||||
inet_pton(AF_INET, host, &(addr->sin_addr));
|
||||
dns_pton(AF_INET, host, &(addr->sin_addr));
|
||||
addr->sin_port = *(uint16_t *)(buf + offset);
|
||||
addr->sin_family = AF_INET;
|
||||
} else if (ip.version == 6) {
|
||||
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)storage;
|
||||
inet_pton(AF_INET, host, &(addr->sin6_addr));
|
||||
dns_pton(AF_INET, host, &(addr->sin6_addr));
|
||||
addr->sin6_port = *(uint16_t *)(buf + offset);
|
||||
addr->sin6_family = AF_INET6;
|
||||
}
|
||||
@@ -210,8 +211,8 @@ static int parse_udprealy_header(const char * buf, const int buf_len,
|
||||
addr->sin6_port = *(uint16_t *)(buf + offset + in6_addr_len);
|
||||
}
|
||||
if (host != NULL) {
|
||||
inet_ntop(AF_INET6, (const void *)(buf + offset),
|
||||
host, INET6_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET6, (const void *)(buf + offset),
|
||||
host, INET6_ADDRSTRLEN);
|
||||
}
|
||||
offset += in6_addr_len;
|
||||
}
|
||||
@@ -240,15 +241,15 @@ static char *get_addr_str(const struct sockaddr *sa)
|
||||
|
||||
switch (sa->sa_family) {
|
||||
case AF_INET:
|
||||
inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr),
|
||||
addr, INET_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr),
|
||||
addr, INET_ADDRSTRLEN);
|
||||
p = ntohs(((struct sockaddr_in *)sa)->sin_port);
|
||||
sprintf(port, "%d", p);
|
||||
break;
|
||||
|
||||
case AF_INET6:
|
||||
inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr),
|
||||
addr, INET6_ADDRSTRLEN);
|
||||
dns_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr),
|
||||
addr, INET6_ADDRSTRLEN);
|
||||
p = ntohs(((struct sockaddr_in *)sa)->sin_port);
|
||||
sprintf(port, "%d", p);
|
||||
break;
|
||||
@@ -606,7 +607,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
{
|
||||
struct server_ctx *server_ctx = (struct server_ctx *)w;
|
||||
struct sockaddr_storage src_addr;
|
||||
bzero(&src_addr, sizeof(struct sockaddr_storage));
|
||||
memset(&src_addr, 0, sizeof(struct sockaddr_storage));
|
||||
char *buf = malloc(BUF_SIZE);
|
||||
|
||||
socklen_t src_addr_len = sizeof(struct sockaddr_storage);
|
||||
@@ -700,7 +701,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
struct in_addr host_addr;
|
||||
int host_len = sizeof(struct in_addr);
|
||||
|
||||
if (inet_pton(AF_INET, host, &host_addr) == -1) {
|
||||
if (dns_pton(AF_INET, host, &host_addr) == -1) {
|
||||
FATAL("IP parser error");
|
||||
}
|
||||
addr_header[addr_header_len++] = 1;
|
||||
@@ -711,7 +712,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
struct in6_addr host_addr;
|
||||
int host_len = sizeof(struct in6_addr);
|
||||
|
||||
if (inet_pton(AF_INET6, host, &host_addr) == -1) {
|
||||
if (dns_pton(AF_INET6, host, &host_addr) == -1) {
|
||||
FATAL("IP parser error");
|
||||
}
|
||||
addr_header[addr_header_len++] = 4;
|
||||
@@ -741,7 +742,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
char host[256] = { 0 };
|
||||
char port[64] = { 0 };
|
||||
struct sockaddr_storage storage;
|
||||
bzero(&storage, sizeof(struct sockaddr_storage));
|
||||
memset(&storage, 0, sizeof(struct sockaddr_storage));
|
||||
|
||||
int addr_header_len = parse_udprealy_header(buf + offset,
|
||||
buf_len - offset, host, port,
|
||||
|
||||
Reference in New Issue
Block a user