mirror of
https://github.com/p4gefau1t/trojan-go.git
synced 2026-10-19 16:15:38 +00:00
fix build
This commit is contained in:
+3
-1
@@ -10,6 +10,8 @@ type Config struct {
|
||||
|
||||
func init() {
|
||||
config.RegisterConfigCreator(Name, func() interface{} {
|
||||
return new(Config)
|
||||
return &Config{
|
||||
LogLevel: 1,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// +build linux darwin
|
||||
// +build linux
|
||||
|
||||
package nat
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
// +build !linux
|
||||
|
||||
package nat
|
||||
|
||||
const Name = "NAT"
|
||||
+5
-3
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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")
|
||||
|
||||
@@ -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,4 +1,4 @@
|
||||
// +build linux darwin
|
||||
// +build linux
|
||||
|
||||
package tproxy
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user