package meterconn import ( transport "github.com/ipfs/go-libp2p-transport" metrics "github.com/libp2p/go-libp2p/p2p/metrics" ) type MeteredConn struct { mesRecv metrics.MeterCallback mesSent metrics.MeterCallback transport.Conn } func WrapConn(bwc metrics.Reporter, c transport.Conn) transport.Conn { return newMeteredConn(c, bwc.LogRecvMessage, bwc.LogSentMessage) } func newMeteredConn(base transport.Conn, rcb metrics.MeterCallback, scb metrics.MeterCallback) transport.Conn { return &MeteredConn{ Conn: base, mesRecv: rcb, mesSent: scb, } } func (mc *MeteredConn) Read(b []byte) (int, error) { n, err := mc.Conn.Read(b) mc.mesRecv(int64(n)) return n, err } func (mc *MeteredConn) Write(b []byte) (int, error) { n, err := mc.Conn.Write(b) mc.mesSent(int64(n)) return n, err }