Skip to content

Commit b92b387

Browse files
committed
chore: update ech handling
1 parent 1cab34d commit b92b387

File tree

4 files changed

+25
-56
lines changed

4 files changed

+25
-56
lines changed

component/tls/reality.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ type RealityConfig struct {
3636
SupportX25519MLKEM768 bool
3737
}
3838

39-
func GetRealityConn(ctx context.Context, conn net.Conn, fingerprint UClientHelloID, tlsConfig *Config, realityConfig *RealityConfig) (net.Conn, error) {
39+
func GetRealityConn(ctx context.Context, conn net.Conn, fingerprint UClientHelloID, serverName string, realityConfig *RealityConfig) (net.Conn, error) {
4040
for retry := 0; ; retry++ {
4141
verifier := &realityVerifier{
42-
serverName: tlsConfig.ServerName,
42+
serverName: serverName,
4343
}
4444
uConfig := &utls.Config{
45-
ServerName: tlsConfig.ServerName,
45+
ServerName: serverName,
4646
InsecureSkipVerify: true,
4747
SessionTicketsDisabled: true,
4848
VerifyPeerCertificate: verifier.VerifyPeerCertificate,

transport/gun/gun.go

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -259,14 +259,13 @@ func NewHTTP2Client(dialFn DialFn, tlsConfig *tls.Config, clientFingerprint stri
259259
}
260260

261261
if clientFingerprint, ok := tlsC.GetFingerprint(clientFingerprint); ok {
262-
tlsConfig := tlsC.UConfig(cfg)
263-
err := echConfig.ClientHandleUTLS(ctx, tlsConfig)
264-
if err != nil {
265-
pconn.Close()
266-
return nil, err
267-
}
268-
269262
if realityConfig == nil {
263+
tlsConfig := tlsC.UConfig(cfg)
264+
err := echConfig.ClientHandleUTLS(ctx, tlsConfig)
265+
if err != nil {
266+
pconn.Close()
267+
return nil, err
268+
}
270269
tlsConn := tlsC.UClient(pconn, tlsConfig, clientFingerprint)
271270
if err := tlsConn.HandshakeContext(ctx); err != nil {
272271
pconn.Close()
@@ -279,7 +278,7 @@ func NewHTTP2Client(dialFn DialFn, tlsConfig *tls.Config, clientFingerprint stri
279278
}
280279
return tlsConn, nil
281280
} else {
282-
realityConn, err := tlsC.GetRealityConn(ctx, pconn, clientFingerprint, tlsConfig, realityConfig)
281+
realityConn, err := tlsC.GetRealityConn(ctx, pconn, clientFingerprint, cfg.ServerName, realityConfig)
283282
if err != nil {
284283
pconn.Close()
285284
return nil, err
@@ -296,25 +295,10 @@ func NewHTTP2Client(dialFn DialFn, tlsConfig *tls.Config, clientFingerprint stri
296295
return nil, errors.New("REALITY is based on uTLS, please set a client-fingerprint")
297296
}
298297

299-
if echConfig != nil {
300-
tlsConfig := tlsC.UConfig(cfg)
301-
err := echConfig.ClientHandleUTLS(ctx, tlsConfig)
302-
if err != nil {
303-
pconn.Close()
304-
return nil, err
305-
}
306-
307-
conn := tlsC.Client(pconn, tlsConfig)
308-
if err := conn.HandshakeContext(ctx); err != nil {
309-
pconn.Close()
310-
return nil, err
311-
}
312-
state := conn.ConnectionState()
313-
if p := state.NegotiatedProtocol; p != http.Http2NextProtoTLS {
314-
conn.Close()
315-
return nil, fmt.Errorf("http2: unexpected ALPN protocol %s, want %s", p, http.Http2NextProtoTLS)
316-
}
317-
return conn, nil
298+
err = echConfig.ClientHandle(ctx, cfg)
299+
if err != nil {
300+
pconn.Close()
301+
return nil, err
318302
}
319303

320304
conn := tls.Client(pconn, cfg)

transport/vmess/tls.go

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,38 +44,29 @@ func StreamTLSConn(ctx context.Context, conn net.Conn, cfg *TLSConfig) (net.Conn
4444
}
4545

4646
if clientFingerprint, ok := tlsC.GetFingerprint(cfg.ClientFingerprint); ok {
47-
tlsConfig := tlsC.UConfig(tlsConfig)
48-
err = cfg.ECH.ClientHandleUTLS(ctx, tlsConfig)
49-
if err != nil {
50-
return nil, err
51-
}
52-
5347
if cfg.Reality == nil {
48+
tlsConfig := tlsC.UConfig(tlsConfig)
49+
err = cfg.ECH.ClientHandleUTLS(ctx, tlsConfig)
50+
if err != nil {
51+
return nil, err
52+
}
5453
tlsConn := tlsC.UClient(conn, tlsConfig, clientFingerprint)
5554
err = tlsConn.HandshakeContext(ctx)
5655
if err != nil {
5756
return nil, err
5857
}
5958
return tlsConn, nil
6059
} else {
61-
return tlsC.GetRealityConn(ctx, conn, clientFingerprint, tlsConfig, cfg.Reality)
60+
return tlsC.GetRealityConn(ctx, conn, clientFingerprint, tlsConfig.ServerName, cfg.Reality)
6261
}
6362
}
6463
if cfg.Reality != nil {
6564
return nil, errors.New("REALITY is based on uTLS, please set a client-fingerprint")
6665
}
6766

68-
if cfg.ECH != nil {
69-
tlsConfig := tlsC.UConfig(tlsConfig)
70-
err = cfg.ECH.ClientHandleUTLS(ctx, tlsConfig)
71-
if err != nil {
72-
return nil, err
73-
}
74-
75-
tlsConn := tlsC.Client(conn, tlsConfig)
76-
77-
err = tlsConn.HandshakeContext(ctx)
78-
return tlsConn, err
67+
err = cfg.ECH.ClientHandle(ctx, tlsConfig)
68+
if err != nil {
69+
return nil, err
7970
}
8071

8172
tlsConn := tls.Client(conn, tlsConfig)

transport/vmess/websocket.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -370,17 +370,11 @@ func streamWebsocketConn(ctx context.Context, conn net.Conn, c *WebsocketConfig,
370370
return nil, err
371371
}
372372
conn = tlsConn
373-
} else if c.ECHConfig != nil {
374-
tlsConfig := tlsC.UConfig(config)
375-
err = c.ECHConfig.ClientHandleUTLS(ctx, tlsConfig)
373+
} else {
374+
err = c.ECHConfig.ClientHandle(ctx, config)
376375
if err != nil {
377376
return nil, err
378377
}
379-
tlsConn := tlsC.Client(conn, tlsConfig)
380-
381-
err = tlsConn.HandshakeContext(ctx)
382-
conn = tlsConn
383-
} else {
384378
tlsConn := tls.Client(conn, config)
385379
err = tlsConn.HandshakeContext(ctx)
386380
if err != nil {

0 commit comments

Comments
 (0)