mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-02-26 16:57:08 +00:00
chore: remove internal crypto/tls fork in reality server
This commit is contained in:
@@ -10,12 +10,13 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/metacubex/mihomo/listener/inner"
|
||||
"github.com/metacubex/mihomo/log"
|
||||
"github.com/metacubex/mihomo/ntp"
|
||||
|
||||
"github.com/metacubex/reality"
|
||||
utls "github.com/metacubex/utls"
|
||||
)
|
||||
|
||||
type Conn = reality.Conn
|
||||
type Conn = utls.Conn
|
||||
|
||||
type Config struct {
|
||||
Dest string
|
||||
@@ -27,12 +28,13 @@ type Config struct {
|
||||
}
|
||||
|
||||
func (c Config) Build() (*Builder, error) {
|
||||
realityConfig := &reality.Config{}
|
||||
realityConfig := &utls.RealityConfig{}
|
||||
realityConfig.SessionTicketsDisabled = true
|
||||
realityConfig.Type = "tcp"
|
||||
realityConfig.Dest = c.Dest
|
||||
realityConfig.Time = ntp.Now
|
||||
realityConfig.ServerNames = make(map[string]bool)
|
||||
realityConfig.Log = log.Debugln
|
||||
for _, it := range c.ServerNames {
|
||||
realityConfig.ServerNames[it] = true
|
||||
}
|
||||
@@ -72,11 +74,11 @@ func (c Config) Build() (*Builder, error) {
|
||||
}
|
||||
|
||||
type Builder struct {
|
||||
realityConfig *reality.Config
|
||||
realityConfig *utls.RealityConfig
|
||||
}
|
||||
|
||||
func (b Builder) NewListener(l net.Listener) net.Listener {
|
||||
l = reality.NewListener(l, b.realityConfig)
|
||||
l = utls.NewRealityListener(l, b.realityConfig)
|
||||
// Due to low implementation quality, the reality server intercepted half close and caused memory leaks.
|
||||
// We fixed it by calling Close() directly.
|
||||
l = realityListenerWrapper{l}
|
||||
@@ -84,7 +86,7 @@ func (b Builder) NewListener(l net.Listener) net.Listener {
|
||||
}
|
||||
|
||||
type realityConnWrapper struct {
|
||||
*reality.Conn
|
||||
*utls.Conn
|
||||
}
|
||||
|
||||
func (c realityConnWrapper) Upstream() any {
|
||||
@@ -104,5 +106,5 @@ func (l realityListenerWrapper) Accept() (net.Conn, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return realityConnWrapper{c.(*reality.Conn)}, nil
|
||||
return realityConnWrapper{c.(*utls.Conn)}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user