Refactor(proxy): use proto sub package

This commit is contained in:
xjasonlyu
2021-02-07 18:22:00 +08:00
parent 2fe6caab12
commit cf4ac9b207
7 changed files with 38 additions and 35 deletions

View File

@@ -9,6 +9,7 @@ import (
"github.com/xjasonlyu/tun2socks/device" "github.com/xjasonlyu/tun2socks/device"
"github.com/xjasonlyu/tun2socks/device/tun" "github.com/xjasonlyu/tun2socks/device/tun"
"github.com/xjasonlyu/tun2socks/proxy" "github.com/xjasonlyu/tun2socks/proxy"
"github.com/xjasonlyu/tun2socks/proxy/proto"
) )
func parseDevice(s string, mtu uint32) (device.Device, error) { func parseDevice(s string, mtu uint32) (device.Device, error) {
@@ -34,7 +35,7 @@ func parseDevice(s string, mtu uint32) (device.Device, error) {
func parseProxy(s string) (proxy.Proxy, error) { func parseProxy(s string) (proxy.Proxy, error) {
if !strings.Contains(s, "://") { if !strings.Contains(s, "://") {
s = proxy.Socks5Proto.String() + "://" + s /* default protocol */ s = proto.Socks5.String() + "://" + s /* default protocol */
} }
u, err := url.Parse(s) u, err := url.Parse(s)
@@ -42,17 +43,17 @@ func parseProxy(s string) (proxy.Proxy, error) {
return nil, err return nil, err
} }
proto := strings.ToLower(u.Scheme) protocol := strings.ToLower(u.Scheme)
switch proto { switch protocol {
case proxy.DirectProto.String(): case proto.Direct.String():
return proxy.NewDirect(), nil return proxy.NewDirect(), nil
case proxy.Socks5Proto.String(): case proto.Socks5.String():
return proxy.NewSocks5(parseSocks(u)) return proxy.NewSocks5(parseSocks(u))
case proxy.ShadowsocksProto.String(): case proto.Shadowsocks.String():
return proxy.NewShadowsocks(parseShadowsocks(u)) return proxy.NewShadowsocks(parseShadowsocks(u))
default: default:
return nil, fmt.Errorf("unsupported protocol: %s", proto) return nil, fmt.Errorf("unsupported protocol: %s", protocol)
} }
} }

View File

@@ -6,24 +6,26 @@ import (
"net" "net"
"github.com/xjasonlyu/tun2socks/common/adapter" "github.com/xjasonlyu/tun2socks/common/adapter"
"github.com/xjasonlyu/tun2socks/proxy/proto"
) )
var _ Proxy = (*Base)(nil) var _ Proxy = (*Base)(nil)
type Base struct { type Base struct {
addr string addr string
proto proto.Proto
} }
func NewBase(addr string) *Base { func NewBase(addr string, proto proto.Proto) *Base {
return &Base{addr: addr} return &Base{addr: addr, proto: proto}
} }
func (b *Base) Addr() string { func (b *Base) Addr() string {
return b.addr return b.addr
} }
func (b *Base) Proto() string { func (b *Base) Proto() proto.Proto {
return "" return b.proto
} }
func (b *Base) DialContext(context.Context, *adapter.Metadata) (net.Conn, error) { func (b *Base) DialContext(context.Context, *adapter.Metadata) (net.Conn, error) {

View File

@@ -6,6 +6,7 @@ import (
"github.com/xjasonlyu/tun2socks/common/adapter" "github.com/xjasonlyu/tun2socks/common/adapter"
"github.com/xjasonlyu/tun2socks/component/dialer" "github.com/xjasonlyu/tun2socks/component/dialer"
"github.com/xjasonlyu/tun2socks/proxy/proto"
) )
var _ Proxy = (*Direct)(nil) var _ Proxy = (*Direct)(nil)
@@ -16,14 +17,12 @@ type Direct struct {
func NewDirect() *Direct { func NewDirect() *Direct {
return &Direct{ return &Direct{
Base: &Base{}, Base: &Base{
proto: proto.Direct,
},
} }
} }
func (d *Direct) Proto() string {
return DirectProto.String()
}
func (d *Direct) DialContext(ctx context.Context, metadata *adapter.Metadata) (net.Conn, error) { func (d *Direct) DialContext(ctx context.Context, metadata *adapter.Metadata) (net.Conn, error) {
c, err := dialer.DialContext(ctx, "tcp", metadata.DestinationAddress()) c, err := dialer.DialContext(ctx, "tcp", metadata.DestinationAddress())
if err != nil { if err != nil {

View File

@@ -1,22 +1,22 @@
package proxy package proto
import "fmt" import "fmt"
const ( const (
DirectProto Proto = iota Direct Proto = iota
ShadowsocksProto Shadowsocks
Socks5Proto Socks5
) )
type Proto uint8 type Proto uint8
func (proto Proto) String() string { func (proto Proto) String() string {
switch proto { switch proto {
case DirectProto: case Direct:
return "direct" return "direct"
case ShadowsocksProto: case Shadowsocks:
return "ss" return "ss"
case Socks5Proto: case Socks5:
return "socks5" return "socks5"
default: default:
return fmt.Sprintf("proto(%d)", proto) return fmt.Sprintf("proto(%d)", proto)

View File

@@ -7,6 +7,7 @@ import (
"time" "time"
"github.com/xjasonlyu/tun2socks/common/adapter" "github.com/xjasonlyu/tun2socks/common/adapter"
"github.com/xjasonlyu/tun2socks/proxy/proto"
) )
const ( const (
@@ -25,7 +26,7 @@ type Dialer interface {
type Proxy interface { type Proxy interface {
Dialer Dialer
Addr() string Addr() string
Proto() string Proto() proto.Proto
} }
// SetDialer sets default Dialer. // SetDialer sets default Dialer.

View File

@@ -10,6 +10,7 @@ import (
"github.com/xjasonlyu/tun2socks/component/dialer" "github.com/xjasonlyu/tun2socks/component/dialer"
obfs "github.com/xjasonlyu/tun2socks/component/simple-obfs" obfs "github.com/xjasonlyu/tun2socks/component/simple-obfs"
"github.com/xjasonlyu/tun2socks/component/socks5" "github.com/xjasonlyu/tun2socks/component/socks5"
"github.com/xjasonlyu/tun2socks/proxy/proto"
"github.com/Dreamacro/go-shadowsocks2/core" "github.com/Dreamacro/go-shadowsocks2/core"
) )
@@ -32,17 +33,16 @@ func NewShadowsocks(addr, method, password, obfsMode, obfsHost string) (*Shadows
} }
return &Shadowsocks{ return &Shadowsocks{
Base: NewBase(addr), Base: &Base{
addr: addr,
proto: proto.Shadowsocks,
},
cipher: cipher, cipher: cipher,
obfsMode: obfsMode, obfsMode: obfsMode,
obfsHost: obfsHost, obfsHost: obfsHost,
}, nil }, nil
} }
func (ss *Shadowsocks) Proto() string {
return ShadowsocksProto.String()
}
func (ss *Shadowsocks) DialContext(ctx context.Context, metadata *adapter.Metadata) (c net.Conn, err error) { func (ss *Shadowsocks) DialContext(ctx context.Context, metadata *adapter.Metadata) (c net.Conn, err error) {
c, err = dialer.DialContext(ctx, "tcp", ss.Addr()) c, err = dialer.DialContext(ctx, "tcp", ss.Addr())
if err != nil { if err != nil {

View File

@@ -10,6 +10,7 @@ import (
"github.com/xjasonlyu/tun2socks/common/adapter" "github.com/xjasonlyu/tun2socks/common/adapter"
"github.com/xjasonlyu/tun2socks/component/dialer" "github.com/xjasonlyu/tun2socks/component/dialer"
"github.com/xjasonlyu/tun2socks/component/socks5" "github.com/xjasonlyu/tun2socks/component/socks5"
"github.com/xjasonlyu/tun2socks/proxy/proto"
) )
var _ Proxy = (*Socks5)(nil) var _ Proxy = (*Socks5)(nil)
@@ -23,16 +24,15 @@ type Socks5 struct {
func NewSocks5(addr, user, pass string) (*Socks5, error) { func NewSocks5(addr, user, pass string) (*Socks5, error) {
return &Socks5{ return &Socks5{
Base: NewBase(addr), Base: &Base{
addr: addr,
proto: proto.Socks5,
},
user: user, user: user,
pass: pass, pass: pass,
}, nil }, nil
} }
func (ss *Socks5) Proto() string {
return Socks5Proto.String()
}
func (ss *Socks5) DialContext(ctx context.Context, metadata *adapter.Metadata) (c net.Conn, err error) { func (ss *Socks5) DialContext(ctx context.Context, metadata *adapter.Metadata) (c net.Conn, err error) {
c, err = dialer.DialContext(ctx, "tcp", ss.Addr()) c, err = dialer.DialContext(ctx, "tcp", ss.Addr())
if err != nil { if err != nil {