]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add ReceivedUsefulData Callback
authorMatt Joiner <anacrolix@gmail.com>
Wed, 20 Jan 2021 03:22:44 +0000 (14:22 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 25 Jan 2021 04:49:48 +0000 (15:49 +1100)
callbacks.go
peerconn.go

index fa9fea5bea3d3c824ee04467da51c1ee781453b8..f78c58545e4d41c75daf3aa8d7cc57e957d858a0 100644 (file)
@@ -18,4 +18,11 @@ type Callbacks struct {
 
        // Provides secret keys to be tried against incoming encrypted connections.
        ReceiveEncryptedHandshakeSkeys mse.SecretKeyIter
+
+       ReceivedUsefulData []func(ReceivedUsefulDataEvent)
+}
+
+type ReceivedUsefulDataEvent struct {
+       Peer    *Peer
+       Message *pp.Message
 }
index 4fcb4f3d772594233336dbd53418274fab7c664d..25d29b340469fefce107d99ef68c46640b615860 100644 (file)
@@ -1378,6 +1378,9 @@ func (c *Peer) receiveChunk(msg *pp.Message) error {
 
        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)