const char * expected )
{
tr_benc top;
- struct evbuffer * buf = tr_getBuffer( );
+ struct evbuffer * buf = evbuffer_new( );
char * serialized;
tr_bencLoad( benc_str, strlen( benc_str ), &top, NULL );
#endif
check( !strcmp( serialized, expected ) );
tr_bencFree( &top );
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
return 0;
}
{
int len;
const uint8_t * public_key;
- struct evbuffer * outbuf = tr_getBuffer( );
+ struct evbuffer * outbuf = evbuffer_new( );
uint8_t pad_a[PadA_MAXLEN];
/* add our public key (Ya) */
tr_peerIoWriteBuf( handshake->io, outbuf, FALSE );
/* cleanup */
- tr_releaseBuffer( outbuf );
+ evbuffer_free( outbuf );
}
static uint32_t
/* now send these: HASH('req1', S), HASH('req2', SKEY) xor HASH('req3', S),
* ENCRYPT(VC, crypto_provide, len(PadC), PadC, len(IA)), ENCRYPT(IA) */
- outbuf = tr_getBuffer( );
+ outbuf = evbuffer_new( );
/* HASH('req1', S) */
{
tr_peerIoWriteBuf( handshake->io, outbuf, FALSE );
/* cleanup */
- tr_releaseBuffer( outbuf );
+ evbuffer_free( outbuf );
return READ_LATER;
}
**/
tr_cryptoEncryptInit( handshake->crypto );
- outbuf = tr_getBuffer( );
+ outbuf = evbuffer_new( );
dbgmsg( handshake, "sending vc" );
/* send VC */
else
{
dbgmsg( handshake, "peer didn't offer an encryption mode we like." );
- tr_releaseBuffer( outbuf );
+ evbuffer_free( outbuf );
return tr_handshakeDone( handshake, FALSE );
}
/* send it out */
tr_peerIoWriteBuf( handshake->io, outbuf, FALSE );
- tr_releaseBuffer( outbuf );
+ evbuffer_free( outbuf );
/* now await the handshake */
setState( handshake, AWAITING_PAYLOAD_STREAM );
const tr_info * inf )
{
char * ret;
- struct evbuffer * buf = tr_getBuffer( );
+ struct evbuffer * buf = evbuffer_new( );
evbuffer_add_printf( buf, "%s%c%s", tr_getTorrentDir( session ),
TR_PATH_DELIMITER,
evbuffer_add_printf( buf, "-%s", session->tag );
ret = tr_strndup( EVBUFFER_DATA( buf ), EVBUFFER_LENGTH( buf ) );
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
return ret;
}
}
else
{
- struct evbuffer * buf = tr_getBuffer( );
+ struct evbuffer * buf = evbuffer_new( );
int n = tr_bencListSize( path );
int i;
*setme = tr_utf8clean( (char*)EVBUFFER_DATA( buf ), EVBUFFER_LENGTH( buf ), NULL );
/* fprintf( stderr, "[%s]\n", *setme ); */
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
err = 0;
}
if( ( ( s =
strrchr( announce, '/' ) ) ) && !strncmp( ++s, "announce", 8 ) )
{
- struct evbuffer * buf = tr_getBuffer( );
+ struct evbuffer * buf = evbuffer_new( );
evbuffer_add( buf, announce, s - announce );
evbuffer_add( buf, "scrape", 6 );
evbuffer_add_printf( buf, "%s", s + 8 );
scrape = tr_strdup( EVBUFFER_DATA( buf ) );
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
}
return scrape;
{
va_list args;
char timestr[64];
- struct evbuffer * buf = tr_getBuffer( );
+ struct evbuffer * buf = evbuffer_new( );
char * base = tr_basename( file );
evbuffer_add_printf( buf, "[%s] %s - %s [%s]: ",
fwrite( EVBUFFER_DATA( buf ), 1, EVBUFFER_LENGTH( buf ), fp );
tr_free( base );
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
}
}
const char * text )
{
const char * code_text = tr_webGetResponseStr( code );
- struct evbuffer * body = tr_getBuffer( );
+ struct evbuffer * body = evbuffer_new( );
evbuffer_add_printf( body, "<h1>%d: %s</h1>", code, code_text );
if( text )
evbuffer_add_printf( body, "%s", text );
evhttp_send_reply( req, code, code_text, body );
- tr_releaseBuffer( body );
+ evbuffer_free( body );
}
struct tr_mimepart
const time_t now = time( NULL );
errno = error;
- out = tr_getBuffer( );
+ out = evbuffer_new( );
evhttp_add_header( req->output_headers, "Content-Type", mimetype_guess( filename ) );
add_time_header( req->output_headers, "Date", now );
add_time_header( req->output_headers, "Expires", now+(24*60*60) );
add_response( req, server, out, content, content_len );
evhttp_send_reply( req, HTTP_OK, "OK", out );
- tr_releaseBuffer( out );
+ evbuffer_free( out );
tr_free( content );
}
}
void * user_data )
{
struct rpc_response_data * data = user_data;
- struct evbuffer * buf = tr_getBuffer( );
+ struct evbuffer * buf = evbuffer_new( );
add_response( data->req, data->server, buf, response, response_len );
evhttp_add_header( data->req->output_headers,
"Content-Type", "application/json; charset=UTF-8" );
evhttp_send_reply( data->req, HTTP_OK, "OK", buf );
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
tr_free( data );
}
{
va_list args;
char timestr[64];
- struct evbuffer * buf = tr_getBuffer( );
+ struct evbuffer * buf = evbuffer_new( );
char * base = tr_basename( file );
evbuffer_add_printf( buf, "[%s] ",
(void) fwrite( EVBUFFER_DATA( buf ), 1, EVBUFFER_LENGTH( buf ), fp );
tr_free( base );
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
}
}
struct evbuffer * buf;
va_list ap;
- buf = tr_getBuffer( );
+ buf = evbuffer_new( );
va_start( ap, fmt );
if( evbuffer_add_vprintf( buf, fmt, ap ) != -1 )
ret = tr_strdup( EVBUFFER_DATA( buf ) );
va_end( ap );
- tr_releaseBuffer( buf );
+ evbuffer_free( buf );
return ret;
}
****
***/
-static tr_list * _bufferList = NULL;
-
-static tr_lock *
-getBufferLock( void )
-{
- static tr_lock * lock = NULL;
- if( lock == NULL )
- lock = tr_lockNew( );
- return lock;
-}
-
-struct evbuffer*
-tr_getBuffer( void )
-{
- struct evbuffer * buf;
- tr_lock * l = getBufferLock( );
- tr_lockLock( l );
-
- buf = tr_list_pop_front( &_bufferList );
- if( buf == NULL )
- buf = evbuffer_new( );
-
- tr_lockUnlock( l );
- return buf;
-}
-
-void
-tr_releaseBuffer( struct evbuffer * buf )
-{
- tr_lock * l = getBufferLock( );
- tr_lockLock( l );
-
- evbuffer_drain( buf, EVBUFFER_LENGTH( buf ) );
- assert( EVBUFFER_LENGTH( buf ) == 0 );
- tr_list_prepend( &_bufferList, buf );
-
- tr_lockUnlock( l );
-}
-
-/***
-****
-***/
-
int
tr_lowerBound( const void * key,
const void * base,
char* tr_utf8clean( const char * str, int len, tr_bool * err ) TR_GNUC_MALLOC;
-/***
-****
-***/
-
-struct evbuffer;
-
-/** @brief pool of reusable buffers
- @see tr_releaseBuffer() */
-struct evbuffer * tr_getBuffer( void );
-
-/** @brief return a buffer to the pool
- @see tr_getBuffer() */
-void tr_releaseBuffer( struct evbuffer * buf );
-
-
/***
****
***/
const tr_file * file )
{
char * ret;
- struct evbuffer * out = tr_getBuffer( );
+ struct evbuffer * out = evbuffer_new( );
const char * url = w->url;
const size_t url_len = strlen( url );
}
ret = tr_strndup( EVBUFFER_DATA( out ), EVBUFFER_LENGTH( out ) );
- tr_releaseBuffer( out );
+ evbuffer_free( out );
return ret;
}