解决trojan无法兼容trojan-go客户端的问题.

This commit is contained in:
hahahrfool
2022-04-15 15:10:28 +08:00
parent 476c59fd28
commit c39678032b
3 changed files with 21 additions and 6 deletions

View File

@@ -641,7 +641,7 @@ func handshakeInserver(iics *incomingInserverConnState) (wlc io.ReadWriteCloser,
return
}
session := inServer.GetServerInnerMuxSession(mh.ReadWriteCloser)
session := inServer.GetServerInnerMuxSession(mh)
if session == nil {
err = utils.ErrFailed
@@ -660,7 +660,9 @@ func handshakeInserver(iics *incomingInserverConnState) (wlc io.ReadWriteCloser,
stream, err := session.AcceptStream()
if err != nil {
utils.Debug("inServer try accept stream err")
if ce := utils.CanLogDebug("mux inServer try accept stream failed"); ce != nil {
ce.Write(zap.Error(err))
}
session.Close()
return

View File

@@ -37,7 +37,16 @@ func PrintAllClientNames() {
//用于Server返回一个可被识别为innerMux的结构
type MuxConnHaser struct {
io.ReadWriteCloser
IsMux bool
OptionalReader io.Reader
IsMux bool
}
func (mc MuxConnHaser) Read(p []byte) (n int, err error) {
if r := mc.OptionalReader; r != nil {
return r.Read(p)
} else {
return mc.ReadWriteCloser.Read(p)
}
}
// Client 用于向 服务端 拨号.
@@ -282,7 +291,7 @@ func (pcs *ProxyCommonStruct) HasInnerMux() (int, string) {
return 0, ""
}
func (pcs *ProxyCommonStruct) GetServerInnerMuxSession(wlc io.ReadWriteCloser) *smux.Session {
func (*ProxyCommonStruct) GetServerInnerMuxSession(wlc io.ReadWriteCloser) *smux.Session {
smuxConfig := smux.DefaultConfig()
smuxSession, err := smux.Server(wlc, smuxConfig)
if err != nil {

View File

@@ -159,10 +159,14 @@ realPart:
}
if ismux {
return proxy.MuxConnHaser{
mh := proxy.MuxConnHaser{
ReadWriteCloser: underlay,
IsMux: true,
}, nil, targetAddr, nil
}
if readbuf.Len() > 0 {
mh.OptionalReader = io.MultiReader(readbuf, underlay)
}
return mh, nil, targetAddr, nil
}
if isudp {