Skip to content

Commit dcd98da

Browse files
committed
Improve early conn interface
1 parent bd4508a commit dcd98da

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

common/network/early.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,38 @@
11
package network
22

3+
import (
4+
"io"
5+
6+
"github.com/sagernet/sing/common"
7+
)
8+
9+
// Deprecated: use EarlyReader and EarlyWriter instead.
310
type EarlyConn interface {
411
NeedHandshake() bool
512
}
13+
14+
type EarlyReader interface {
15+
NeedHandshakeForRead() bool
16+
}
17+
18+
func NeedHandshakeForRead(reader io.Reader) bool {
19+
if earlyReader, isEarlyReader := common.Cast[EarlyReader](reader); isEarlyReader && earlyReader.NeedHandshakeForRead() {
20+
return true
21+
}
22+
return false
23+
}
24+
25+
type EarlyWriter interface {
26+
NeedHandshakeForWrite() bool
27+
}
28+
29+
func NeedHandshakeForWrite(writer io.Writer) bool {
30+
if //goland:noinspection GoDeprecation
31+
earlyConn, isEarlyConn := writer.(EarlyConn); isEarlyConn {
32+
return earlyConn.NeedHandshake()
33+
}
34+
if earlyWriter, isEarlyWriter := common.Cast[EarlyWriter](writer); isEarlyWriter && earlyWriter.NeedHandshakeForWrite() {
35+
return true
36+
}
37+
return false
38+
}

0 commit comments

Comments
 (0)