[Feat]
support trojan xtls change geodataloader mode as memconservative
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
xtls "github.com/xtls/go"
|
||||
"net"
|
||||
"net/http"
|
||||
"strconv"
|
||||
@@ -33,6 +34,7 @@ type TrojanOption struct {
|
||||
Server string `proxy:"server"`
|
||||
Port int `proxy:"port"`
|
||||
Password string `proxy:"password"`
|
||||
Flow string `proxy:"flow,omitempty"`
|
||||
ALPN []string `proxy:"alpn,omitempty"`
|
||||
SNI string `proxy:"sni,omitempty"`
|
||||
SkipCertVerify bool `proxy:"skip-cert-verify,omitempty"`
|
||||
@@ -81,8 +83,19 @@ func (t *Trojan) StreamConn(c net.Conn, metadata *C.Metadata) (net.Conn, error)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("%s connect error: %w", t.addr, err)
|
||||
}
|
||||
|
||||
err = t.instance.WriteHeader(c, trojan.CommandTCP, serializesSocksAddr(metadata))
|
||||
var tc trojan.Command
|
||||
if xtlsConn, ok := c.(*xtls.Conn); ok {
|
||||
xtlsConn.RPRX = true
|
||||
if t.instance.GetFlow() == trojan.XRD {
|
||||
xtlsConn.DirectMode = true
|
||||
tc = trojan.CommandXRD
|
||||
} else {
|
||||
tc = trojan.CommandXRO
|
||||
}
|
||||
} else {
|
||||
tc = trojan.CommandTCP
|
||||
}
|
||||
err = t.instance.WriteHeader(c, tc, serializesSocksAddr(metadata))
|
||||
return c, err
|
||||
}
|
||||
|
||||
@@ -156,10 +169,13 @@ func NewTrojan(option TrojanOption) (*Trojan, error) {
|
||||
addr := net.JoinHostPort(option.Server, strconv.Itoa(option.Port))
|
||||
|
||||
tOption := &trojan.Option{
|
||||
Password: option.Password,
|
||||
ALPN: option.ALPN,
|
||||
ServerName: option.Server,
|
||||
SkipCertVerify: option.SkipCertVerify,
|
||||
Password: option.Password,
|
||||
Flow: option.Flow,
|
||||
ALPN: option.ALPN,
|
||||
ServerName: option.Server,
|
||||
SkipCertVerify: option.SkipCertVerify,
|
||||
ClientSessionCache: getClientSessionCache(),
|
||||
ClientXSessionCache: getClientXSessionCache(),
|
||||
}
|
||||
|
||||
if option.SNI != "" {
|
||||
|
||||
Reference in New Issue
Block a user