fix type assert
This commit is contained in:
parent
e203d7760e
commit
ee8b5d572c
17
relay.go
17
relay.go
@ -271,16 +271,20 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
|
|||||||
resp := new(relay.Response)
|
resp := new(relay.Response)
|
||||||
_, err = resp.ReadFrom(c.Conn)
|
_, err = resp.ReadFrom(c.Conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Log("[relay] read:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if resp.Version != relay.Version1 {
|
if resp.Version != relay.Version1 {
|
||||||
err = relay.ErrBadVersion
|
err = relay.ErrBadVersion
|
||||||
|
log.Log("[relay] read:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if resp.Status != relay.StatusOK {
|
if resp.Status != relay.StatusOK {
|
||||||
err = fmt.Errorf("status %d", resp.Status)
|
err = fmt.Errorf("status %d", resp.Status)
|
||||||
|
log.Log("[relay] read:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
log.Log("[relay] read response OK")
|
||||||
})
|
})
|
||||||
|
|
||||||
if !c.udp {
|
if !c.udp {
|
||||||
@ -292,6 +296,7 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
dlen := int(binary.BigEndian.Uint16(bb[:]))
|
dlen := int(binary.BigEndian.Uint16(bb[:]))
|
||||||
|
log.Log("[relay] read udp", dlen)
|
||||||
if len(b) >= dlen {
|
if len(b) >= dlen {
|
||||||
return io.ReadFull(c.Conn, b[:dlen])
|
return io.ReadFull(c.Conn, b[:dlen])
|
||||||
}
|
}
|
||||||
@ -301,6 +306,12 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *relayConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
||||||
|
n, err = c.Read(b)
|
||||||
|
addr = c.Conn.RemoteAddr()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (c *relayConn) Write(b []byte) (n int, err error) {
|
func (c *relayConn) Write(b []byte) (n int, err error) {
|
||||||
if len(b) > 0xFFFF {
|
if len(b) > 0xFFFF {
|
||||||
err = errors.New("write: data maximum exceeded")
|
err = errors.New("write: data maximum exceeded")
|
||||||
@ -314,6 +325,7 @@ func (c *relayConn) Write(b []byte) (n int, err error) {
|
|||||||
c.wbuf.Write(bb[:])
|
c.wbuf.Write(bb[:])
|
||||||
}
|
}
|
||||||
c.wbuf.Write(b) // append the data to the cached header
|
c.wbuf.Write(b) // append the data to the cached header
|
||||||
|
log.Log("[relay] write wbuf", len(b))
|
||||||
// _, err = c.Conn.Write(c.wbuf.Bytes())
|
// _, err = c.Conn.Write(c.wbuf.Bytes())
|
||||||
// c.wbuf.Reset()
|
// c.wbuf.Reset()
|
||||||
_, err = c.wbuf.WriteTo(c.Conn)
|
_, err = c.wbuf.WriteTo(c.Conn)
|
||||||
@ -327,5 +339,10 @@ func (c *relayConn) Write(b []byte) (n int, err error) {
|
|||||||
binary.BigEndian.PutUint16(buf[:2], uint16(len(b)))
|
binary.BigEndian.PutUint16(buf[:2], uint16(len(b)))
|
||||||
n = copy(buf[2:], b)
|
n = copy(buf[2:], b)
|
||||||
_, err = c.Conn.Write(buf)
|
_, err = c.Conn.Write(buf)
|
||||||
|
log.Log("[relay] write", n)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *relayConn) WriteTo(b []byte, addr net.Addr) (n int, err error) {
|
||||||
|
return c.Write(b)
|
||||||
|
}
|
||||||
|
8
ss.go
8
ss.go
@ -302,7 +302,13 @@ func (h *shadowUDPHandler) Handle(conn net.Conn) {
|
|||||||
log.Logf("[ssu] %s: %s", conn.LocalAddr(), err)
|
log.Logf("[ssu] %s: %s", conn.LocalAddr(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cc = c.(net.PacketConn)
|
var ok bool
|
||||||
|
cc, ok = c.(net.PacketConn)
|
||||||
|
if !ok {
|
||||||
|
log.Logf("[ssu] %s: not a packet connection", conn.LocalAddr())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
defer cc.Close()
|
defer cc.Close()
|
||||||
|
|
||||||
pc, ok := conn.(net.PacketConn)
|
pc, ok := conn.(net.PacketConn)
|
||||||
|
@ -173,7 +173,13 @@ func (h *tunHandler) Handle(conn net.Conn) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
pc = cc.(net.PacketConn)
|
var ok bool
|
||||||
|
pc, ok = cc.(net.PacketConn)
|
||||||
|
if !ok {
|
||||||
|
err = errors.New("not a packet connection")
|
||||||
|
log.Logf("[tun] %s - %s: %s", conn.LocalAddr(), raddr, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if h.options.TCPMode {
|
if h.options.TCPMode {
|
||||||
if raddr != nil {
|
if raddr != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user