mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-09-15 21:00:27 +00:00
tls: Fix read wait buffer sizing
This commit is contained in:
@@ -520,10 +520,6 @@ func (w *appleTLSReadWaiter) WaitReadBuffer() (*buf.Buffer, error) {
|
||||
if c.readEOF {
|
||||
return nil, io.EOF
|
||||
}
|
||||
maximumLen := readWaitFreeLen(w.options)
|
||||
if maximumLen <= 0 {
|
||||
return nil, io.ErrShortBuffer
|
||||
}
|
||||
timeoutMs, err := c.prepareReadTimeout()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -533,11 +529,18 @@ func (w *appleTLSReadWaiter) WaitReadBuffer() (*buf.Buffer, error) {
|
||||
return nil, err
|
||||
}
|
||||
defer c.releaseClient()
|
||||
buffer := w.options.NewBuffer()
|
||||
if buffer.IsFull() {
|
||||
buffer.Release()
|
||||
return nil, io.ErrShortBuffer
|
||||
}
|
||||
maximumLen := buffer.FreeLen()
|
||||
|
||||
handle := cgo.NewHandle(w)
|
||||
defer handle.Delete()
|
||||
var errorPtr *C.char
|
||||
if !bool(C.box_apple_tls_client_read_async(client, C.size_t(maximumLen), C.uintptr_t(handle), &errorPtr)) {
|
||||
buffer.Release()
|
||||
return nil, c.errorFromPointer(errorPtr)
|
||||
}
|
||||
|
||||
@@ -553,22 +556,18 @@ func (w *appleTLSReadWaiter) WaitReadBuffer() (*buf.Buffer, error) {
|
||||
if result != nil {
|
||||
C.box_apple_tls_read_result_free(result)
|
||||
}
|
||||
buffer.Release()
|
||||
c.markReadTimedOut()
|
||||
return nil, os.ErrDeadlineExceeded
|
||||
}
|
||||
} else {
|
||||
result = <-w.results
|
||||
}
|
||||
return c.readWaitResultToBuffer(result, w.options)
|
||||
return c.readWaitResultToBuffer(result, buffer, w.options)
|
||||
}
|
||||
|
||||
func (c *appleTLSConn) readWaitResultToBuffer(result *C.box_apple_tls_read_result_t, options N.ReadWaitOptions) (*buf.Buffer, error) {
|
||||
func (c *appleTLSConn) readWaitResultToBuffer(result *C.box_apple_tls_read_result_t, buffer *buf.Buffer, options N.ReadWaitOptions) (*buf.Buffer, error) {
|
||||
defer C.box_apple_tls_read_result_free(result)
|
||||
buffer := options.NewBuffer()
|
||||
if buffer.IsFull() {
|
||||
buffer.Release()
|
||||
return nil, io.ErrShortBuffer
|
||||
}
|
||||
startLen := buffer.Len()
|
||||
var eof C.bool
|
||||
var errorPtr *C.char
|
||||
@@ -593,16 +592,6 @@ func (c *appleTLSConn) readWaitResultToBuffer(result *C.box_apple_tls_read_resul
|
||||
return buffer, nil
|
||||
}
|
||||
|
||||
func readWaitFreeLen(options N.ReadWaitOptions) int {
|
||||
if options.IncreaseBuffer {
|
||||
return 65535 - options.FrontHeadroom - options.RearHeadroom
|
||||
}
|
||||
if options.MTU > 0 {
|
||||
return options.MTU
|
||||
}
|
||||
return buf.BufferSize - options.FrontHeadroom - options.RearHeadroom
|
||||
}
|
||||
|
||||
//export box_apple_tls_read_callback
|
||||
func box_apple_tls_read_callback(callbackHandle C.uintptr_t, result *C.box_apple_tls_read_result_t) {
|
||||
handle := cgo.Handle(callbackHandle)
|
||||
|
||||
Reference in New Issue
Block a user