fix build

This commit is contained in:
Page Fault
2020-06-10 14:21:58 +00:00
parent a0318cbf1c
commit 24764f2122
13 changed files with 50 additions and 43 deletions
+3 -1
View File
@@ -10,6 +10,8 @@ type Config struct {
func init() {
config.RegisterConfigCreator(Name, func() interface{} {
return new(Config)
return &Config{
LogLevel: 1,
}
})
}
+1 -1
View File
@@ -1,4 +1,4 @@
// +build linux darwin
// +build linux
package nat
+5
View File
@@ -0,0 +1,5 @@
// +build !linux
package nat
const Name = "NAT"
+5 -3
View File
@@ -64,7 +64,6 @@ func (p *Proxy) relayConnLoop() {
return
}
defer outbound.Close()
log.Debug("relaying connection")
errChan := make(chan error, 2)
copyConn := func(a, b net.Conn) {
_, err := io.Copy(a, b)
@@ -77,7 +76,7 @@ func (p *Proxy) relayConnLoop() {
if err != nil {
log.Error(err)
}
log.Debug("connection relay ends")
log.Debug("conn relay ends")
}(inbound)
}
}(source)
@@ -107,7 +106,6 @@ func (p *Proxy) relayPacketLoop() {
return
}
defer outbound.Close()
log.Debug("relaying packets")
errChan := make(chan error, 2)
copyPacket := func(a, b tunnel.PacketConn) {
buf := make([]byte, MaxPacketSize)
@@ -172,6 +170,10 @@ func NewProxyFromConfigData(data []byte, isJSON bool) (*Proxy, error) {
create, ok := creators[strings.ToUpper(cfg.RunType)]
if !ok {
return nil, common.NewError("unknown proxy type: " + cfg.RunType)
}
log.SetLogLevel(log.LogLevel(cfg.LogLevel))
if cfg.LogFile != "" {
}
return create(ctx)
}
+3
View File
@@ -23,6 +23,9 @@ func (n *Node) BuildNext(name string) *Node {
log.Fatal(err)
}
s, err := t.NewServer(n.Context, n.Server)
if err != nil {
log.Fatal(err)
}
newNode := &Node{
Name: name,
Next: make(map[string]*Node),
+1 -1
View File
@@ -39,7 +39,7 @@ func NewClient(ctx context.Context, underlay tunnel.Client) (*Client, error) {
if err != nil {
return nil, common.NewError("invalid shadowsocks cipher").Base(err)
}
log.Info("shadowsocks client created")
log.Debug("shadowsocks client created")
return &Client{
underlay: underlay,
Cipher: cipher,
+1 -1
View File
@@ -39,7 +39,7 @@ func NewServer(ctx context.Context, underlay tunnel.Server) (*Server, error) {
if err != nil {
return nil, common.NewError("invalid shadowsocks cipher").Base(err)
}
log.Info("shadowsocks client created")
log.Debug("shadowsocks client created")
return &Server{
underlay: underlay,
Cipher: cipher,
+19 -29
View File
@@ -27,18 +27,15 @@ const (
type Server struct {
connChan chan tunnel.Conn
packetChan chan tunnel.PacketConn
errChan chan error
listenAddr net.Addr
tcpListener net.Listener
ctx context.Context
localHost string
}
func (s *Server) AcceptConn(tunnel.Tunnel) (tunnel.Conn, error) {
select {
case conn := <-s.connChan:
return conn, nil
case err := <-s.errChan:
return nil, err
case <-s.ctx.Done():
return nil, common.NewError("socks server closed")
}
@@ -48,8 +45,6 @@ func (s *Server) AcceptPacket(tunnel.Tunnel) (tunnel.PacketConn, error) {
select {
case conn := <-s.packetChan:
return conn, nil
case err := <-s.errChan:
return nil, err
case <-s.ctx.Done():
return nil, common.NewError("socks server closed")
}
@@ -110,30 +105,23 @@ func (s *Server) associate(conn net.Conn, addr *tunnel.Address) error {
}
func (s *Server) acceptLoop() {
l, err := net.Listen("tcp", s.listenAddr.String())
if err != nil {
s.errChan <- common.NewError("socks5 failed to listen").Base(err)
return
}
s.tcpListener = l
for {
conn, err := l.Accept()
conn, err := s.tcpListener.Accept()
if err != nil {
s.errChan <- common.NewError("socks5 accept err").Base(err)
log.Error(common.NewError("socks5 accept err").Base(err))
return
}
go func(conn net.Conn) {
newConn, err := s.handshake(conn)
if err != nil {
s.errChan <- common.NewError("socks5 failed to handshake with client").Base(err)
log.Error(common.NewError("socks5 failed to handshake with client").Base(err))
return
}
log.Info("socks5 connection from", conn.RemoteAddr(), "metadata", newConn.metadata.String())
switch newConn.metadata.Command {
case Connect:
if err := s.connect(newConn); err != nil {
s.errChan <- common.NewError("socks5 failed to respond CONNECT").Base(err)
log.Error(common.NewError("socks5 failed to respond CONNECT").Base(err))
newConn.Close()
return
}
@@ -141,26 +129,24 @@ func (s *Server) acceptLoop() {
return
case Associate:
defer newConn.Close()
host, _, err := net.SplitHostPort(s.listenAddr.String())
common.Must(err)
port := common.PickPort("udp", host)
associateAddr := tunnel.NewAddressFromHostPort("udp", host, port)
port := common.PickPort("udp", s.localHost)
associateAddr := tunnel.NewAddressFromHostPort("udp", s.localHost, port)
l, err := net.ListenPacket("udp", associateAddr.String())
if err != nil {
s.errChan <- common.NewError("socks5 failed to bind udp").Base(err)
log.Error(common.NewError("socks5 failed to bind udp").Base(err))
return
}
s.packetChan <- NewPacketConn(l)
log.Info("socks5 udp session")
if err := s.associate(newConn, associateAddr); err != nil {
s.errChan <- common.NewError("socks5 failed to respond to ASSOCIATE").Base(err)
log.Error(common.NewError("socks5 failed to respond to associate request").Base(err))
return
}
buf := [1]byte{}
newConn.Read(buf[:])
log.Debug("socks5 udp session ends")
default:
s.errChan <- common.NewError(fmt.Sprintf("unknown socks5 command %d", newConn.metadata.Command))
log.Error(common.NewError(fmt.Sprintf("unknown socks5 command %d", newConn.metadata.Command)))
newConn.Close()
}
}(conn)
@@ -171,12 +157,16 @@ func (s *Server) acceptLoop() {
func NewServer(ctx context.Context, underlay tunnel.Server) (tunnel.Server, error) {
cfg := config.FromContext(ctx, Name).(*Config)
listenAddr := tunnel.NewAddressFromHostPort("tcp", cfg.LocalHost, cfg.LocalPort)
l, err := net.Listen("tcp", listenAddr.String())
if err != nil {
return nil, common.NewError("socks5 failed to listen").Base(err)
}
log.Info("socks5 server is listening on tcp:", l.Addr().String())
server := &Server{
listenAddr: listenAddr,
ctx: ctx,
connChan: make(chan tunnel.Conn, 32),
packetChan: make(chan tunnel.PacketConn, 32),
errChan: make(chan error, 32),
tcpListener: l,
ctx: ctx,
connChan: make(chan tunnel.Conn, 32),
packetChan: make(chan tunnel.PacketConn, 32),
}
go server.acceptLoop()
log.Debug("socks server created")
+1 -1
View File
@@ -143,7 +143,7 @@ func NewServer(ctx context.Context, _ tunnel.Server) (*Server, error) {
Port: cfg.LocalPort,
})
if err != nil {
return nil, common.NewError("tproxy failed to listen tcp").Base(err)
return nil, common.NewError("tproxy failed to listen udp").Base(err)
}
server := &Server{
+1 -1
View File
@@ -1,4 +1,4 @@
// +build linux darwin
// +build linux
package tproxy
+2
View File
@@ -322,6 +322,8 @@ func NewServer(ctx context.Context, _ tunnel.Server) (*Server, error) {
}
}
go server.acceptLoop()
log.Info("transport server is listening on tcp:", tcpListener.Addr().String())
log.Debug("transport server created")
return server, nil
}
+2 -1
View File
@@ -82,7 +82,8 @@ func TestTLS(t *testing.T) {
RemoteHost: "127.0.0.1",
RemotePort: serverCfg.LocalPort,
TLS: TLSConfig{
Verify: false,
Verify: false,
Fingerprint: "firefox",
},
}
sctx := config.WithConfig(context.Background(), Name, serverCfg)
+6 -4
View File
@@ -208,11 +208,13 @@ func NewServer(ctx context.Context, underlay tunnel.Server) (tunnel.Server, erro
packetChan: make(chan tunnel.PacketConn, 32),
}
redirConn, err := net.Dial("tcp", redirAddr.String())
if err != nil {
return nil, common.NewError("invalid redirect address").Base(err)
if !cfg.DisableHTTPCheck {
redirConn, err := net.Dial("tcp", redirAddr.String())
if err != nil {
return nil, common.NewError("invalid redirect address. check your http server: " + redirAddr.String()).Base(err)
}
redirConn.Close()
}
redirConn.Close()
go s.acceptLoop()
log.Debug("trojan server created")