callbacks.go | 5 +++-- peerconn.go | 3 +++ diff --git a/callbacks.go b/callbacks.go index e6039971521c07a8298297bc29c457561f58b5ee..0e73d80993e0d207a52a43769358ac1bc7971084 100644 --- a/callbacks.go +++ b/callbacks.go @@ -7,6 +7,7 @@ // These are called synchronously, and do not pass ownership. The Client and other locks may still // be held. nil functions are not called. type Callbacks struct { - CompletedHandshake func(_ *PeerConn, infoHash InfoHash) - ReadMessage func(*PeerConn, *pp.Message) + CompletedHandshake func(_ *PeerConn, infoHash InfoHash) + ReadMessage func(*PeerConn, *pp.Message) + ReadExtendedHandshake func(*PeerConn, *pp.ExtendedHandshakeMessage) } diff --git a/peerconn.go b/peerconn.go index 85443ee2711643d4d32b6488eaee47efd317a0d0..d344556c1c4c021cba75f2166e4f37380e63a921 100644 --- a/peerconn.go +++ b/peerconn.go @@ -1195,6 +1195,9 @@ if err := bencode.Unmarshal(payload, &d); err != nil { c.logger.Printf("error parsing extended handshake message %q: %s", payload, err) return errors.Wrap(err, "unmarshalling extended handshake payload") } + if cb := cl.config.Callbacks.ReadExtendedHandshake; cb != nil { + cb(c, &d) + } //c.logger.WithDefaultLevel(log.Debug).Printf("received extended handshake message:\n%s", spew.Sdump(d)) if d.Reqq != 0 { c.PeerMaxRequests = d.Reqq