Previously, the very first packet to be received after the ENCRYPT call
was not properly decrypted; the getPacket function was using the old
encryption state.
brk <- true
return
default:
- b, err := getPacket(a.conn, a.ecb)
+ b, err := a.getPacket()
pkt <- packet{b: b, err: err}
}
}
a.routerLock.RLock()
if ch, ok := a.tagRouter[r.Tag()]; ok {
-
log.Println("<<<", string(b))
ch <- r
} else {
"compress/zlib"
"io"
"io/ioutil"
- "net"
)
type packet struct {
sent chan bool
}
-func getPacket(conn *net.UDPConn, ecb *ecbState) (buf []byte, err error) {
+func (a *AniDBUDP) getPacket() (buf []byte, err error) {
buf = make([]byte, 1500)
- n, err := conn.Read(buf)
+ n, err := a.conn.Read(buf)
- buf = ecb.Decrypt(buf[:n])
+ buf = a.ecb.Decrypt(buf[:n])
if buf[0] == 0 && buf[1] == 0 {
def, _ := zlib.NewReader(bytes.NewReader(buf[2:]))
err = e
}
}
+
return buf, err
}