peers = (struct tr_peerIo**) tr_ptrArrayBase( &tmp );
peerCount = tr_ptrArraySize( &tmp );
- for( i=0; i<peerCount; ++i ) {
- tr_peerIoRef( peers[i] );
- switch( peers[i]->priority ) {
- case TR_PRI_HIGH: tr_ptrArrayAppend( &high, peers[i] ); break;
- case TR_PRI_LOW: tr_ptrArrayAppend( &low, peers[i] ); break;
- default: tr_ptrArrayAppend( &normal, peers[i] ); break;
+ for( i=0; i<peerCount; ++i )
+ {
+ tr_peerIo * io = peers[i];
+ tr_peerIoRef( io );
+
+ tr_peerIoFlushOutgoingProtocolMsgs( io );
+
+ switch( io->priority ) {
+ case TR_PRI_HIGH: tr_ptrArrayAppend( &high, io ); break;
+ case TR_PRI_LOW: tr_ptrArrayAppend( &low, io ); break;
+ default: tr_ptrArrayAppend( &normal, io ); break;
}
}
#define MAGIC_NUMBER 206745
static size_t
-getPacketOverhead( size_t d )
+guessPacketOverhead( size_t d )
{
/**
* http://sd.wareonearth.com/~phil/net/overhead/
{
struct tr_datatype * next = __tr_list_entry( io->outbuf_datatypes.next, struct tr_datatype, head );
const size_t payload = MIN( next->length, bytes_transferred );
- const size_t overhead = getPacketOverhead( payload );
+ const size_t overhead = guessPacketOverhead( payload );
tr_bandwidthUsed( &io->bandwidth, TR_UP, payload, next->isPieceData );
return bytesUsed;
}
+int
+tr_peerIoFlushOutgoingProtocolMsgs( tr_peerIo * io )
+{
+ size_t byteCount = 0;
+ struct __tr_list * walk;
+ struct __tr_list * fencepost = &io->outbuf_datatypes;
+
+ /* count up how many bytes are used by non-piece-data messages
+ at the front of our outbound queue */
+ for( walk=fencepost->next; walk!=fencepost; walk=walk->next ) {
+ struct tr_datatype * d = __tr_list_entry( walk, struct tr_datatype, head );
+ if( d->isPieceData )
+ break;
+ byteCount += d->length;
+ }
+
+ return tr_peerIoFlush( io, TR_UP, byteCount );
+}
+
+
/***
****
****/