github.com/sagernet/sing@v0.2.6/common/bufio/deadline/conn.go (about) 1 package deadline 2 3 import ( 4 "net" 5 "time" 6 7 "github.com/sagernet/sing/common/buf" 8 "github.com/sagernet/sing/common/bufio" 9 N "github.com/sagernet/sing/common/network" 10 ) 11 12 type Conn struct { 13 N.ExtendedConn 14 reader Reader 15 } 16 17 func NewConn(conn net.Conn) *Conn { 18 if deadlineConn, isDeadline := conn.(*Conn); isDeadline { 19 return deadlineConn 20 } 21 return &Conn{ExtendedConn: bufio.NewExtendedConn(conn), reader: NewReader(conn)} 22 } 23 24 func NewFallbackConn(conn net.Conn) *Conn { 25 if deadlineConn, isDeadline := conn.(*Conn); isDeadline { 26 return deadlineConn 27 } 28 return &Conn{ExtendedConn: bufio.NewExtendedConn(conn), reader: NewFallbackReader(conn)} 29 } 30 31 func (c *Conn) Read(p []byte) (n int, err error) { 32 return c.reader.Read(p) 33 } 34 35 func (c *Conn) ReadBuffer(buffer *buf.Buffer) error { 36 return c.reader.ReadBuffer(buffer) 37 } 38 39 func (c *Conn) SetReadDeadline(t time.Time) error { 40 return c.reader.SetReadDeadline(t) 41 } 42 43 func (c *Conn) ReaderReplaceable() bool { 44 return c.reader.ReaderReplaceable() 45 } 46 47 func (c *Conn) UpstreamReader() any { 48 return c.reader.UpstreamReader() 49 } 50 51 func (c *Conn) WriterReplaceable() bool { 52 return true 53 } 54 55 func (c *Conn) Upstream() any { 56 return c.ExtendedConn 57 } 58 59 func (c *Conn) NeedAdditionalReadDeadline() bool { 60 return false 61 }