callbacks.go | 7 +++++++ peerconn.go | 3 +++ diff --git a/callbacks.go b/callbacks.go index fa9fea5bea3d3c824ee04467da51c1ee781453b8..f78c58545e4d41c75daf3aa8d7cc57e957d858a0 100644 --- a/callbacks.go +++ b/callbacks.go @@ -18,4 +18,11 @@ PeerConnClosed func(*PeerConn) // Provides secret keys to be tried against incoming encrypted connections. ReceiveEncryptedHandshakeSkeys mse.SecretKeyIter + + ReceivedUsefulData []func(ReceivedUsefulDataEvent) +} + +type ReceivedUsefulDataEvent struct { + Peer *Peer + Message *pp.Message } diff --git a/peerconn.go b/peerconn.go index 4fcb4f3d772594233336dbd53418274fab7c664d..25d29b340469fefce107d99ef68c46640b615860 100644 --- a/peerconn.go +++ b/peerconn.go @@ -1378,6 +1378,9 @@ piece := &t.pieces[req.Index] c.allStats(add(1, func(cs *ConnStats) *Count { return &cs.ChunksReadUseful })) c.allStats(add(int64(len(msg.Piece)), func(cs *ConnStats) *Count { return &cs.BytesReadUsefulData })) + for _, f := range c.t.cl.config.Callbacks.ReceivedUsefulData { + f(ReceivedUsefulDataEvent{c, msg}) + } c.lastUsefulChunkReceived = time.Now() // if t.fastestPeer != c { // log.Printf("setting fastest connection %p", c)