From: Victor Grishchenko Date: Mon, 31 May 2010 12:33:15 +0000 (+0200) Subject: callback granularity X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=commitdiff_plain;h=f398253a6dbbe1b3a029141591fb18f28e3f13a1;p=swift-upb.git callback granularity --- diff --git a/sendrecv.cpp b/sendrecv.cpp index bed623e..045abb3 100644 --- a/sendrecv.cpp +++ b/sendrecv.cpp @@ -325,8 +325,10 @@ bin64_t Channel::OnData (Datagram& dgram) { // TODO: HAVE NONE for corrupted da data_in_ = tintbin(NOW,bin64_t::NONE); if (!ok) return bin64_t::NONE; + bin64_t cover = transfer().ack_out().cover(pos); for(int i=0; i=transfer().callbacks[i].agg) + transfer().callbacks[i].cb(transfer().fd(),pos); // FIXME data_in_.bin = pos; if (pos!=bin64_t::NONE) { if (last_data_in_time_) { diff --git a/swift.h b/swift.h index 8589a89..77f8b6b 100644 --- a/swift.h +++ b/swift.h @@ -123,7 +123,15 @@ namespace swift { class PiecePicker; class CongestionController; class PeerSelector; - typedef void (*TransferProgressCallback) (int transfer, bin64_t bin); + struct TransferProgressCallback { + typedef void (*callback_t) (int transfer, bin64_t bin); + /** The function to invoke. */ + callback_t cb; + /** aggregation level (do not report smaller events). */ + uint8_t agg; + TransferProgressCallback(callback_t callback) : cb(callback), agg(0) {} + TransferProgressCallback() : cb(NULL), agg(0) {} + }; /** A class representing single file transfer. */ diff --git a/transfer.cpp b/transfer.cpp index 2f1cb91..827b2cb 100644 --- a/transfer.cpp +++ b/transfer.cpp @@ -61,7 +61,7 @@ void swift::RemoveProgressCallback (int transfer, TransferProgressCallback cb) { if (!trans) return; for(int i=0; icb_installed; i++) - if (trans->callbacks[i]==cb) + if (trans->callbacks[i].cb==cb.cb) trans->callbacks[i]=trans->callbacks[--trans->cb_installed]; }