Fix trojan fallback

This commit is contained in:
世界 2022-10-01 11:41:15 +08:00
parent 29d08e63b5
commit 1445bdba37
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
2 changed files with 8 additions and 1 deletions

View file

@ -202,5 +202,9 @@ func (c *Conn) WriterMTU() int {
} }
func (c *Conn) Upstream() any { func (c *Conn) Upstream() any {
return c.Conn
}
func (c *Conn) UpstreamWriter() any {
return c.NetConn() return c.NetConn()
} }

View file

@ -182,7 +182,7 @@ func (h *Trojan) newConnection(ctx context.Context, conn net.Conn, metadata adap
func (h *Trojan) fallbackConnection(ctx context.Context, conn net.Conn, metadata adapter.InboundContext) error { func (h *Trojan) fallbackConnection(ctx context.Context, conn net.Conn, metadata adapter.InboundContext) error {
var fallbackAddr M.Socksaddr var fallbackAddr M.Socksaddr
if len(h.fallbackAddrTLSNextProto) > 0 { if len(h.fallbackAddrTLSNextProto) > 0 {
if tlsConn, loaded := common.Cast[*tls.STDConn](conn); loaded { if tlsConn, loaded := common.Cast[tls.Conn](conn); loaded {
connectionState := tlsConn.ConnectionState() connectionState := tlsConn.ConnectionState()
if connectionState.NegotiatedProtocol != "" { if connectionState.NegotiatedProtocol != "" {
if fallbackAddr, loaded = h.fallbackAddrTLSNextProto[connectionState.NegotiatedProtocol]; !loaded { if fallbackAddr, loaded = h.fallbackAddrTLSNextProto[connectionState.NegotiatedProtocol]; !loaded {
@ -192,6 +192,9 @@ func (h *Trojan) fallbackConnection(ctx context.Context, conn net.Conn, metadata
} }
} }
if !fallbackAddr.IsValid() { if !fallbackAddr.IsValid() {
if !h.fallbackAddr.IsValid() {
return E.New("fallback disabled by default")
}
fallbackAddr = h.fallbackAddr fallbackAddr = h.fallbackAddr
} }
h.logger.InfoContext(ctx, "fallback connection to ", fallbackAddr) h.logger.InfoContext(ctx, "fallback connection to ", fallbackAddr)