fix type assert

This commit is contained in:
ginuerzh 2020-02-28 19:28:33 +08:00
parent e203d7760e
commit ee8b5d572c
3 changed files with 31 additions and 2 deletions

View File

@ -271,16 +271,20 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
resp := new(relay.Response)
_, err = resp.ReadFrom(c.Conn)
if err != nil {
log.Log("[relay] read:", err)
return
}
if resp.Version != relay.Version1 {
err = relay.ErrBadVersion
log.Log("[relay] read:", err)
return
}
if resp.Status != relay.StatusOK {
err = fmt.Errorf("status %d", resp.Status)
log.Log("[relay] read:", err)
return
}
log.Log("[relay] read response OK")
})
if !c.udp {
@ -292,6 +296,7 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
return
}
dlen := int(binary.BigEndian.Uint16(bb[:]))
log.Log("[relay] read udp", dlen)
if len(b) >= dlen {
return io.ReadFull(c.Conn, b[:dlen])
}
@ -301,6 +306,12 @@ func (c *relayConn) Read(b []byte) (n int, err error) {
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) {
if len(b) > 0xFFFF {
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(b) // append the data to the cached header
log.Log("[relay] write wbuf", len(b))
// _, err = c.Conn.Write(c.wbuf.Bytes())
// c.wbuf.Reset()
_, 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)))
n = copy(buf[2:], b)
_, err = c.Conn.Write(buf)
log.Log("[relay] write", n)
return
}
func (c *relayConn) WriteTo(b []byte, addr net.Addr) (n int, err error) {
return c.Write(b)
}

8
ss.go
View File

@ -302,7 +302,13 @@ func (h *shadowUDPHandler) Handle(conn net.Conn) {
log.Logf("[ssu] %s: %s", conn.LocalAddr(), err)
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()
pc, ok := conn.(net.PacketConn)

View File

@ -173,7 +173,13 @@ func (h *tunHandler) Handle(conn net.Conn) {
if err != nil {
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 {
if h.options.TCPMode {
if raddr != nil {