Skip to content

Commit 0457413

Browse files
committed
Add UoT read waiter support
1 parent 256fafc commit 0457413

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

common/bufio/copy_direct_posix.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ func (w *syscallPacketReadWaiter) InitializeReadWaiter(newBuffer func() *buf.Buf
212212
buffer.Truncate(readN)
213213
} else {
214214
buffer.Release()
215-
buffer = nil
216215
}
217216
if w.readErr == syscall.EAGAIN {
218217
return false

common/uot/conn.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,17 @@ import (
1313
N "github.com/sagernet/sing/common/network"
1414
)
1515

16+
var (
17+
_ N.NetPacketConn = (*Conn)(nil)
18+
_ N.PacketReadWaiter = (*Conn)(nil)
19+
)
20+
1621
type Conn struct {
1722
net.Conn
1823
isConnect bool
1924
destination M.Socksaddr
2025
writer N.VectorisedWriter
26+
newBuffer func() *buf.Buffer
2127
}
2228

2329
func NewConn(conn net.Conn, request Request) *Conn {
@@ -141,6 +147,33 @@ func (c *Conn) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error {
141147
return c.writer.WriteVectorised([]*buf.Buffer{header, buffer})
142148
}
143149

150+
func (c *Conn) InitializeReadWaiter(newBuffer func() *buf.Buffer) {
151+
c.newBuffer = newBuffer
152+
}
153+
154+
func (c *Conn) WaitReadPacket() (destination M.Socksaddr, err error) {
155+
if c.isConnect {
156+
destination = c.destination
157+
} else {
158+
destination, err = AddrParser.ReadAddrPort(c.Conn)
159+
if err != nil {
160+
return
161+
}
162+
}
163+
var length uint16
164+
err = binary.Read(c.Conn, binary.BigEndian, &length)
165+
if err != nil {
166+
return
167+
}
168+
buffer := c.newBuffer()
169+
_, err = buffer.ReadFullFrom(c.Conn, int(length))
170+
if err != nil {
171+
buffer.Release()
172+
return M.Socksaddr{}, E.Cause(err, "UoT read")
173+
}
174+
return
175+
}
176+
144177
func (c *Conn) NeedAdditionalReadDeadline() bool {
145178
return true
146179
}

0 commit comments

Comments
 (0)