Changeset 8609
- Timestamp:
- Jun 4, 2009, 2:59:17 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/peer-msgs.c
r8593 r8609 1722 1722 && tr_cpPieceIsComplete( &msgs->torrent->completion, req.index ) ) 1723 1723 { 1724 /* FIXME(libevent2) : we can eliminate "buf" and an extra memcpy if we create an evbuffer here, add the message header, then use evbuffer_reserve_space() + tr_ioRead() + evbuffer_commit_space() */1724 /* FIXME(libevent2) use evbuffer_reserve_space() + evbuffer_commit_space() */ 1725 1725 int err; 1726 static uint8_t buf[MAX_BLOCK_SIZE]; 1727 1728 /* send a block */ 1729 if(( err = tr_ioRead( msgs->torrent, req.index, req.offset, req.length, buf ))) { 1726 const uint32_t msglen = 4 + 1 + 4 + 4 + req.length; 1727 struct evbuffer * out; 1728 tr_peerIo * io = msgs->peer->io; 1729 1730 out = evbuffer_new( ); 1731 evbuffer_expand( out, msglen ); 1732 1733 tr_peerIoWriteUint32( io, out, sizeof( uint8_t ) + 2 * sizeof( uint32_t ) + req.length ); 1734 tr_peerIoWriteUint8 ( io, out, BT_PIECE ); 1735 tr_peerIoWriteUint32( io, out, req.index ); 1736 tr_peerIoWriteUint32( io, out, req.offset ); 1737 1738 err = tr_ioRead( msgs->torrent, req.index, req.offset, req.length, EVBUFFER_DATA(out)+EVBUFFER_LENGTH(out) ); 1739 if( err ) /* peer needs a reject message */ 1740 { 1741 protocolSendReject( msgs, &req ); 1742 } 1743 else 1744 { 1745 EVBUFFER_LENGTH(out) += req.length; 1746 assert( EVBUFFER_LENGTH( out ) == msglen ); 1747 tr_peerIoWriteBuf( io, out, TRUE ); 1748 bytesWritten += EVBUFFER_LENGTH( out ); 1749 msgs->clientSentAnythingAt = now; 1750 } 1751 1752 evbuffer_free( out ); 1753 1754 if( err ) 1755 { 1730 1756 fireError( msgs, err ); 1731 1757 bytesWritten = 0; 1732 1758 msgs = NULL; 1733 } else {1734 tr_peerIo * io = msgs->peer->io;1735 struct evbuffer * out = tr_getBuffer( );1736 dbgmsg( msgs, "sending block %u:%u->%u", req.index, req.offset, req.length );1737 tr_peerIoWriteUint32( io, out, sizeof( uint8_t ) + 2 * sizeof( uint32_t ) + req.length );1738 tr_peerIoWriteUint8 ( io, out, BT_PIECE );1739 tr_peerIoWriteUint32( io, out, req.index );1740 tr_peerIoWriteUint32( io, out, req.offset );1741 tr_peerIoWriteBytes ( io, out, buf, req.length );1742 tr_peerIoWriteBuf( io, out, TRUE );1743 bytesWritten += EVBUFFER_LENGTH( out );1744 msgs->clientSentAnythingAt = now;1745 tr_releaseBuffer( out );1746 1759 } 1747 1760 }
Note: See TracChangeset
for help on using the changeset viewer.