github.com/xxf098/lite-proxy@v0.15.1-0.20230422081941-12c69f323218/proxy/trojan/trojan.go (about) 1 package trojan 2 3 import ( 4 "context" 5 "fmt" 6 "net" 7 8 C "github.com/xxf098/lite-proxy/constant" 9 "github.com/xxf098/lite-proxy/outbound" 10 "github.com/xxf098/lite-proxy/tunnel" 11 ) 12 13 type Client struct { 14 ctx context.Context 15 trojan *outbound.Trojan 16 } 17 18 func (c Client) DialConn(addr *tunnel.Address, _ tunnel.Tunnel) (net.Conn, error) { 19 meta := &C.Metadata{ 20 NetWork: 0, 21 Type: 0, 22 SrcPort: "", 23 DstPort: fmt.Sprintf("%d", addr.Port), 24 } 25 switch addr.AddressType { 26 case tunnel.IPv4: 27 case tunnel.IPv6: 28 meta.DstIP = addr.IP 29 case tunnel.DomainName: 30 meta.Host = addr.DomainName 31 } 32 return c.trojan.DialContext(c.ctx, meta) 33 } 34 35 func (c Client) Close() error { 36 return nil 37 } 38 39 func NewClient(ctx context.Context, trojan *outbound.Trojan) Client { 40 return Client{ 41 ctx: ctx, 42 trojan: trojan, 43 } 44 }