tr_cpCreatePieceBitfield( const tr_completion * cp, size_t * byte_count )
{
void * ret;
+ tr_piece_index_t n;
tr_bitfield pieces;
- const tr_piece_index_t n = cp->tor->info.pieceCount;
+
+ assert( tr_torrentHasMetadata( cp->tor ) );
+
+ n = cp->tor->info.pieceCount;
tr_bitfieldConstruct( &pieces, n );
if( tr_cpHasAll( cp ) )
static void
sendBitfield( tr_peermsgs * msgs )
{
+ void * bytes;
size_t byte_count = 0;
struct evbuffer * out = msgs->outMessages;
- void * bytes = tr_cpCreatePieceBitfield( &msgs->torrent->completion, &byte_count );
+ assert( tr_torrentHasMetadata( msgs->torrent ) );
+
+ bytes = tr_cpCreatePieceBitfield( &msgs->torrent->completion, &byte_count );
evbuffer_add_uint32( out, sizeof( uint8_t ) + byte_count );
evbuffer_add_uint8 ( out, BT_BITFIELD );
evbuffer_add ( out, bytes, byte_count );
else if( tr_streq( key, keylen, "peersSendingToUs" ) )
tr_bencDictAddInt( d, key, st->peersSendingToUs );
else if( tr_streq( key, keylen, "pieces" ) ) {
- size_t byte_count = 0;
- void * bytes = tr_cpCreatePieceBitfield( &tor->completion, &byte_count );
- char * str = tr_base64_encode( bytes, byte_count, NULL );
- tr_bencDictAddStr( d, key, str!=NULL ? str : "" );
- tr_free( str );
- tr_free( bytes );
+ if (tr_torrentHasMetadata( tor ) ) {
+ size_t byte_count = 0;
+ void * bytes = tr_cpCreatePieceBitfield( &tor->completion, &byte_count );
+ char * str = tr_base64_encode( bytes, byte_count, NULL );
+ tr_bencDictAddStr( d, key, str!=NULL ? str : "" );
+ tr_free( str );
+ tr_free( bytes );
+ } else {
+ tr_bencDictAddStr( d, key, "" );
+ }
}
else if( tr_streq( key, keylen, "pieceCount" ) )
tr_bencDictAddInt( d, key, inf->pieceCount );