From: Victor Grishchenko Date: Fri, 4 Jun 2010 12:00:48 +0000 (+0200) Subject: make AddProgressCallback signature plain X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=commitdiff_plain;h=4d4229e1589f7cc35e5d074b25d2c85fe1e532ef;p=swift-upb.git make AddProgressCallback signature plain --- diff --git a/httpgw.cpp b/httpgw.cpp index 103ac4b..6ad86e2 100644 --- a/httpgw.cpp +++ b/httpgw.cpp @@ -103,7 +103,7 @@ void HttpGwFirstProgressCallback (int transfer, bin64_t bin) { if (bin!=bin64_t(0,0)) // need the first packet return; swift::RemoveProgressCallback(transfer,&HttpGwFirstProgressCallback); - swift::AddProgressCallback(transfer,&HttpGwSwiftProgressCallback); + swift::AddProgressCallback(transfer,&HttpGwSwiftProgressCallback,0); for (int httpc=0; httpctransfer==transfer && req->tosend==0) { // FIXME states @@ -181,7 +181,7 @@ void HttpGwNewRequestCallback (SOCKET http_conn){ if (swift::Size(file)) { HttpGwFirstProgressCallback(file,bin64_t(0,0)); } else { - swift::AddProgressCallback(file,&HttpGwFirstProgressCallback); + swift::AddProgressCallback(file,&HttpGwFirstProgressCallback,0); sckrwecb_t install (http_conn,NULL,NULL,HttpGwCloseConnection); swift::Datagram::Listen3rdPartySocket(install); } diff --git a/sendrecv.cpp b/sendrecv.cpp index 045abb3..1aaa5de 100644 --- a/sendrecv.cpp +++ b/sendrecv.cpp @@ -327,8 +327,8 @@ bin64_t Channel::OnData (Datagram& dgram) { // TODO: HAVE NONE for corrupted da 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 + if (cover.layer()>=transfer().cb_agg[i]) + transfer().callbacks[i](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 e87332e..5472a94 100644 --- a/swift.h +++ b/swift.h @@ -123,16 +123,7 @@ namespace swift { class PiecePicker; class CongestionController; class PeerSelector; - 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, uint8_t aggregate=0) - : cb(callback), agg(aggregate) {} - TransferProgressCallback() : cb(NULL), agg(0) {} - }; + typedef void (*ProgressCallback) (int transfer, bin64_t bin); /** A class representing single file transfer. */ @@ -197,7 +188,8 @@ namespace swift { tint init_time_; #define SWFT_MAX_TRANSFER_CB 8 - TransferProgressCallback callbacks[SWFT_MAX_TRANSFER_CB]; + ProgressCallback callbacks[SWFT_MAX_TRANSFER_CB]; + uint8_t cb_agg[SWFT_MAX_TRANSFER_CB]; int cb_installed; public: @@ -211,8 +203,8 @@ namespace swift { friend uint64_t SeqComplete (int fdes); friend int Open (const char* filename, const Sha1Hash& hash) ; friend void Close (int fd) ; - friend void AddProgressCallback (int transfer,TransferProgressCallback cb); - friend void RemoveProgressCallback (int transfer,TransferProgressCallback cb); + friend void AddProgressCallback (int transfer,ProgressCallback cb,uint8_t agg); + friend void RemoveProgressCallback (int transfer,ProgressCallback cb); friend void ExternallyRetrieved (int transfer,bin64_t piece); }; @@ -465,8 +457,8 @@ namespace swift { /***/ int Find (Sha1Hash hash); - void AddProgressCallback (int transfer,TransferProgressCallback cb); - void RemoveProgressCallback (int transfer,TransferProgressCallback cb); + void AddProgressCallback (int transfer,ProgressCallback cb,uint8_t agg); + void RemoveProgressCallback (int transfer,ProgressCallback cb); void ExternallyRetrieved (int transfer,bin64_t piece); //uint32_t Width (const tbinvec& v); diff --git a/tests/binstest2.cpp b/tests/binstest2.cpp index db5da55..1906406 100644 --- a/tests/binstest2.cpp +++ b/tests/binstest2.cpp @@ -447,6 +447,13 @@ TEST(BinsTest,CoarseBitmap) { i32 = 0; bin.to_coarse_bitmap(i16,bin64_t(2,0),1); EXPECT_EQ(3,i32&3); + + uint64_t bigint; + bigint = 0; + binmap_t bm; + bm.set(bin64_t(6,0)); + bm.to_coarse_bitmap((uint16_t*)&bigint,bin64_t(6,0),0); + EXPECT_EQ( 0xffffffffffffffffULL, bigint ); } diff --git a/transfer.cpp b/transfer.cpp index 827b2cb..34e51ec 100644 --- a/transfer.cpp +++ b/transfer.cpp @@ -40,10 +40,11 @@ void Channel::CloseTransfer (FileTransfer* trans) { } -void swift::AddProgressCallback (int transfer, TransferProgressCallback cb) { +void swift::AddProgressCallback (int transfer,ProgressCallback cb,uint8_t agg) { FileTransfer* trans = FileTransfer::file(transfer); if (!trans) return; + trans->cb_agg[trans->cb_installed] = agg; trans->callbacks[trans->cb_installed++] = cb; } @@ -56,12 +57,12 @@ void swift::ExternallyRetrieved (int transfer,bin64_t piece) { } -void swift::RemoveProgressCallback (int transfer, TransferProgressCallback cb) { +void swift::RemoveProgressCallback (int transfer, ProgressCallback cb) { FileTransfer* trans = FileTransfer::file(transfer); if (!trans) return; for(int i=0; icb_installed; i++) - if (trans->callbacks[i].cb==cb.cb) + if (trans->callbacks[i]==cb) trans->callbacks[i]=trans->callbacks[--trans->cb_installed]; }