Skip to content

Commit 349e408

Browse files
committed
Crazy sekai overturns the small pond
1 parent d59ac57 commit 349e408

File tree

15 files changed

+563
-130
lines changed

15 files changed

+563
-130
lines changed

common/bufio/addr_conn.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,20 @@ import (
99

1010
type AddrConn struct {
1111
net.Conn
12-
M.Metadata
12+
Source M.Socksaddr
13+
Destination M.Socksaddr
1314
}
1415

1516
func (c *AddrConn) LocalAddr() net.Addr {
16-
if c.Metadata.Destination.IsValid() {
17-
return c.Metadata.Destination.TCPAddr()
17+
if c.Destination.IsValid() {
18+
return c.Destination.TCPAddr()
1819
}
1920
return c.Conn.LocalAddr()
2021
}
2122

2223
func (c *AddrConn) RemoteAddr() net.Addr {
23-
if c.Metadata.Source.IsValid() {
24-
return c.Metadata.Source.TCPAddr()
24+
if c.Source.IsValid() {
25+
return c.Source.TCPAddr()
2526
}
2627
return c.Conn.RemoteAddr()
2728
}

common/bufio/vectorised_unix.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ func (w *SyscallVectorisedWriter) WriteVectorised(buffers []*buf.Buffer) error {
3838
var innerErr unix.Errno
3939
err := w.rawConn.Write(func(fd uintptr) (done bool) {
4040
//nolint:staticcheck
41-
//goland:noinspection GoDeprecation
4241
_, _, innerErr = unix.Syscall(unix.SYS_WRITEV, fd, uintptr(unsafe.Pointer(&iovecList[0])), uintptr(len(iovecList)))
4342
return innerErr != unix.EAGAIN && innerErr != unix.EWOULDBLOCK
4443
})

common/exceptions/error.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
F "github.com/sagernet/sing/common/format"
1313
)
1414

15+
// Deprecated: wtf is this?
1516
type Handler interface {
1617
NewError(ctx context.Context, err error)
1718
}

common/exceptions/timeout.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ type TimeoutError interface {
1212
func IsTimeout(err error) bool {
1313
var netErr net.Error
1414
if errors.As(err, &netErr) {
15-
//goland:noinspection GoDeprecation
1615
//nolint:staticcheck
1716
return netErr.Temporary() && netErr.Timeout()
1817
}

common/metadata/metadata.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package metadata
22

3+
// Deprecated: wtf is this?
34
type Metadata struct {
45
Protocol string
56
Source Socksaddr

common/network/conn.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,29 @@ type ExtendedConn interface {
7070
net.Conn
7171
}
7272

73+
type CloseHandler = func(it error)
74+
75+
func AppendCloseHandler(parent CloseHandler, child CloseHandler) CloseHandler {
76+
if parent == nil {
77+
return parent
78+
} else if child == nil {
79+
return child
80+
}
81+
return func(it error) {
82+
child(it)
83+
parent(it)
84+
}
85+
}
86+
87+
// Deprecated: Use TCPConnectionHandlerEx instead.
7388
type TCPConnectionHandler interface {
74-
NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error
89+
NewConnection(ctx context.Context, conn net.Conn,
90+
//nolint:staticcheck
91+
metadata M.Metadata) error
92+
}
93+
94+
type TCPConnectionHandlerEx interface {
95+
NewConnectionEx(ctx context.Context, conn net.Conn, source M.Socksaddr, destination M.Socksaddr, onClose CloseHandler)
7596
}
7697

7798
type NetPacketConn interface {
@@ -85,12 +106,26 @@ type BindPacketConn interface {
85106
net.Conn
86107
}
87108

109+
// Deprecated: Use UDPHandlerEx instead.
88110
type UDPHandler interface {
89-
NewPacket(ctx context.Context, conn PacketConn, buffer *buf.Buffer, metadata M.Metadata) error
111+
NewPacket(ctx context.Context, conn PacketConn, buffer *buf.Buffer,
112+
//nolint:staticcheck
113+
metadata M.Metadata) error
114+
}
115+
116+
type UDPHandlerEx interface {
117+
NewPacket(ctx context.Context, conn PacketConn, buffer *buf.Buffer, source M.Socksaddr, destination M.Socksaddr) error
90118
}
91119

120+
// Deprecated: Use UDPConnectionHandlerEx instead.
92121
type UDPConnectionHandler interface {
93-
NewPacketConnection(ctx context.Context, conn PacketConn, metadata M.Metadata) error
122+
NewPacketConnection(ctx context.Context, conn PacketConn,
123+
//nolint:staticcheck
124+
metadata M.Metadata) error
125+
}
126+
127+
type UDPConnectionHandlerEx interface {
128+
NewPacketConnectionEx(ctx context.Context, conn PacketConn, source M.Socksaddr, destination M.Socksaddr, onClose CloseHandler)
94129
}
95130

96131
type CachedReader interface {

common/network/handshake.go

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package network
22

33
import (
4+
"net"
5+
46
"github.com/sagernet/sing/common"
57
E "github.com/sagernet/sing/common/exceptions"
68
)
@@ -13,17 +15,65 @@ type HandshakeSuccess interface {
1315
HandshakeSuccess() error
1416
}
1517

16-
func ReportHandshakeFailure(conn any, err error) error {
17-
if handshakeConn, isHandshakeConn := common.Cast[HandshakeFailure](conn); isHandshakeConn {
18+
type ConnHandshakeSuccess interface {
19+
ConnHandshakeSuccess(conn net.Conn) error
20+
}
21+
22+
type PacketConnHandshakeSuccess interface {
23+
PacketConnHandshakeSuccess(conn net.PacketConn) error
24+
}
25+
26+
func ReportHandshakeFailure(reporter any, err error) error {
27+
if handshakeConn, isHandshakeConn := common.Cast[HandshakeFailure](reporter); isHandshakeConn {
1828
return E.Append(err, handshakeConn.HandshakeFailure(err), func(err error) error {
1929
return E.Cause(err, "write handshake failure")
2030
})
2131
}
2232
return err
2333
}
2434

25-
func ReportHandshakeSuccess(conn any) error {
26-
if handshakeConn, isHandshakeConn := common.Cast[HandshakeSuccess](conn); isHandshakeConn {
35+
func CloseOnHandshakeFailure(reporter any, onClose CloseHandler, err error) error {
36+
if handshakeConn, isHandshakeConn := common.Cast[HandshakeFailure](reporter); isHandshakeConn {
37+
err = E.Append(err, handshakeConn.HandshakeFailure(err), func(err error) error {
38+
return E.Cause(err, "write handshake failure")
39+
})
40+
} else {
41+
if tcpConn, isTCPConn := common.Cast[interface {
42+
SetLinger(sec int) error
43+
}](reporter); isTCPConn {
44+
tcpConn.SetLinger(0)
45+
}
46+
common.Close(reporter)
47+
}
48+
if onClose != nil {
49+
onClose(err)
50+
}
51+
return err
52+
}
53+
54+
// Deprecated: use ReportConnHandshakeSuccess/ReportPacketConnHandshakeSuccess instead
55+
func ReportHandshakeSuccess(reporter any) error {
56+
if handshakeConn, isHandshakeConn := common.Cast[HandshakeSuccess](reporter); isHandshakeConn {
57+
return handshakeConn.HandshakeSuccess()
58+
}
59+
return nil
60+
}
61+
62+
func ReportConnHandshakeSuccess(reporter any, conn net.Conn) error {
63+
if handshakeConn, isHandshakeConn := common.Cast[ConnHandshakeSuccess](reporter); isHandshakeConn {
64+
return handshakeConn.ConnHandshakeSuccess(conn)
65+
}
66+
if handshakeConn, isHandshakeConn := common.Cast[HandshakeSuccess](reporter); isHandshakeConn {
67+
return handshakeConn.HandshakeSuccess()
68+
}
69+
return nil
70+
}
71+
72+
func ReportPacketConnHandshakeSuccess(reporter any, conn net.PacketConn) error {
73+
if handshakeConn, isHandshakeConn := common.Cast[PacketConnHandshakeSuccess](reporter); isHandshakeConn {
74+
return handshakeConn.PacketConnHandshakeSuccess(conn)
75+
}
76+
if handshakeConn, isHandshakeConn := common.Cast[HandshakeSuccess](reporter); isHandshakeConn {
2777
return handshakeConn.HandshakeSuccess()
2878
}
2979
return nil

common/network/thread.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ type ThreadUnsafeWriter interface {
1111
}
1212

1313
// Deprecated: Use ReadWaiter interface instead.
14+
1415
type ThreadSafeReader interface {
1516
// Deprecated: Use ReadWaiter interface instead.
1617
ReadBufferThreadSafe() (buffer *buf.Buffer, err error)
1718
}
1819

1920
// Deprecated: Use ReadWaiter interface instead.
2021
type ThreadSafePacketReader interface {
21-
// Deprecated: Use ReadWaiter interface instead.
2222
ReadPacketThreadSafe() (buffer *buf.Buffer, addr M.Socksaddr, err error)
2323
}
2424

common/random/seed_go119.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,5 @@ func InitializeSeed() {
2020
func initializeSeed() {
2121
var seed int64
2222
common.Must(binary.Read(rand.Reader, binary.LittleEndian, &seed))
23-
//goland:noinspection GoDeprecation
2423
mRand.Seed(seed)
2524
}

common/rw/varint.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ func ToByteReader(reader io.Reader) io.ByteReader {
2727

2828
// Deprecated: Use binary.ReadUvarint instead.
2929
func ReadUVariant(reader io.Reader) (uint64, error) {
30-
//goland:noinspection GoDeprecation
3130
return binary.ReadUvarint(ToByteReader(reader))
3231
}
3332

0 commit comments

Comments
 (0)