From 679d64657164aad1df7aebae4d4bb5aef62ab1a0 Mon Sep 17 00:00:00 2001 From: v2ray Date: Sun, 12 Jun 2016 01:35:40 +0200 Subject: [PATCH] only build for linux --- proxy/dokodemo/dokodemo.go | 20 -------------------- proxy/dokodemo/sockopt_linux.go | 30 ++++++++++++++++++++++++++++++ proxy/dokodemo/sockopt_other.go | 12 ++++++++++++ 3 files changed, 42 insertions(+), 20 deletions(-) create mode 100644 proxy/dokodemo/sockopt_linux.go create mode 100644 proxy/dokodemo/sockopt_other.go diff --git a/proxy/dokodemo/dokodemo.go b/proxy/dokodemo/dokodemo.go index ac2387a5b..9848b0c93 100644 --- a/proxy/dokodemo/dokodemo.go +++ b/proxy/dokodemo/dokodemo.go @@ -2,7 +2,6 @@ package dokodemo import ( "sync" - "syscall" "github.com/v2ray/v2ray-core/app" "github.com/v2ray/v2ray-core/app/dispatcher" @@ -15,8 +14,6 @@ import ( "github.com/v2ray/v2ray-core/transport/hub" ) -const SO_ORIGINAL_DST = 80 - type DokodemoDoor struct { tcpMutex sync.RWMutex udpMutex sync.RWMutex @@ -172,23 +169,6 @@ func (this *DokodemoDoor) HandleTCPConnection(conn *hub.Connection) { inputFinish.Lock() } -func GetOriginalDestination(conn *hub.Connection) v2net.Destination { - fd, err := conn.SysFd() - if err != nil { - log.Info("Dokodemo: Failed to get original destination: ", err) - return nil - } - - addr, err := syscall.GetsockoptIPv6Mreq(fd, syscall.IPPROTO_IP, SO_ORIGINAL_DST) - if err != nil { - log.Info("Dokodemo: Failed to call getsockopt: ", err) - return nil - } - ip := v2net.IPAddress(addr.Multiaddr[4:8]) - port := uint16(addr.Multiaddr[2])<<8 + uint16(addr.Multiaddr[3]) - return v2net.TCPDestination(ip, v2net.Port(port)) -} - func init() { internal.MustRegisterInboundHandlerCreator("dokodemo-door", func(space app.Space, rawConfig interface{}, meta *proxy.InboundHandlerMeta) (proxy.InboundHandler, error) { diff --git a/proxy/dokodemo/sockopt_linux.go b/proxy/dokodemo/sockopt_linux.go new file mode 100644 index 000000000..6c329be2f --- /dev/null +++ b/proxy/dokodemo/sockopt_linux.go @@ -0,0 +1,30 @@ +// +build linux + +package dokodemo + +import ( + "syscall" + + "github.com/v2ray/v2ray-core/common/log" + v2net "github.com/v2ray/v2ray-core/common/net" + "github.com/v2ray/v2ray-core/transport/hub" +) + +const SO_ORIGINAL_DST = 80 + +func GetOriginalDestination(conn *hub.Connection) v2net.Destination { + fd, err := conn.SysFd() + if err != nil { + log.Info("Dokodemo: Failed to get original destination: ", err) + return nil + } + + addr, err := syscall.GetsockoptIPv6Mreq(fd, syscall.IPPROTO_IP, SO_ORIGINAL_DST) + if err != nil { + log.Info("Dokodemo: Failed to call getsockopt: ", err) + return nil + } + ip := v2net.IPAddress(addr.Multiaddr[4:8]) + port := uint16(addr.Multiaddr[2])<<8 + uint16(addr.Multiaddr[3]) + return v2net.TCPDestination(ip, v2net.Port(port)) +} diff --git a/proxy/dokodemo/sockopt_other.go b/proxy/dokodemo/sockopt_other.go new file mode 100644 index 000000000..04dedd3d0 --- /dev/null +++ b/proxy/dokodemo/sockopt_other.go @@ -0,0 +1,12 @@ +// +build !linux + +package dokodemo + +import ( + v2net "github.com/v2ray/v2ray-core/common/net" + "github.com/v2ray/v2ray-core/transport/hub" +) + +func GetOriginalDestination(conn *hub.Connection) v2net.Destination { + return nil +}