Ignore:
Timestamp:
Dec 30, 2008, 10:07:39 PM (12 years ago)
Author:
charles
Message:

(trunk libT) have tr_bencSaveAsJSON() use an evbuffer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/rpc-server.c

    r7550 r7552  
    156156                    if( body )
    157157                    {
    158                         char *  b64, *json, *freeme;
    159                         int     json_len;
     158                        char * b64;
    160159                        size_t  body_len;
    161160                        tr_benc top, *args;
     161                        struct evbuffer * json = tr_getBuffer( );
    162162
    163163                        body += 4; /* walk past the \r\n\r\n */
     
    173173                        tr_bencDictAddStr( args, "metainfo", b64 );
    174174                        tr_bencDictAddInt( args, "paused", paused );
    175                         json = tr_bencSaveAsJSON( &top, &json_len );
    176                         freeme = tr_rpc_request_exec_json( server->session,
    177                                                            json, json_len,
    178                                                            NULL );
    179 
    180                         tr_free( freeme );
    181                         tr_free( json );
     175                        tr_bencSaveAsJSON( &top, json );
     176                        tr_rpc_request_exec_json( server->session,
     177                                                  EVBUFFER_DATA( json ),
     178                                                  EVBUFFER_LENGTH( json ),
     179                                                  NULL );
     180
     181                        tr_releaseBuffer( json );
    182182                        tr_free( b64 );
    183183                        tr_bencFree( &top );
     
    377377static void
    378378handle_rpc( struct evhttp_request * req,
    379             struct tr_rpc_server *  server )
    380 {
    381     int               len = 0;
    382     char *            out = NULL;
    383     struct evbuffer * buf;
     379            struct tr_rpc_server  * server )
     380{
     381    struct evbuffer * response = tr_getBuffer( );
    384382
    385383    if( req->type == EVHTTP_REQ_GET )
     
    387385        const char * q;
    388386        if( ( q = strchr( req->uri, '?' ) ) )
    389             out = tr_rpc_request_exec_uri( server->session,
    390                                            q + 1,
    391                                            strlen( q + 1 ),
    392                                            &len );
     387            tr_rpc_request_exec_uri( server->session, q + 1, strlen( q + 1 ), response );
    393388    }
    394389    else if( req->type == EVHTTP_REQ_POST )
    395390    {
    396         out = tr_rpc_request_exec_json( server->session,
    397                                         EVBUFFER_DATA( req->input_buffer ),
    398                                         EVBUFFER_LENGTH( req->input_buffer ),
    399                                         &len );
    400     }
    401 
    402     buf = tr_getBuffer( );
    403     add_response( req, server, buf, out, len );
    404     evhttp_add_header( req->output_headers, "Content-Type",
    405                        "application/json; charset=UTF-8" );
    406     evhttp_send_reply( req, HTTP_OK, "OK", buf );
     391        tr_rpc_request_exec_json( server->session,
     392                                  EVBUFFER_DATA( req->input_buffer ),
     393                                  EVBUFFER_LENGTH( req->input_buffer ),
     394                                  response );
     395    }
     396
     397    {
     398        struct evbuffer * buf = tr_getBuffer( );
     399        add_response( req, server, buf,
     400                      EVBUFFER_DATA( response ),
     401                      EVBUFFER_LENGTH( response ) );
     402        evhttp_add_header( req->output_headers, "Content-Type",
     403                                                "application/json; charset=UTF-8" );
     404        evhttp_send_reply( req, HTTP_OK, "OK", buf );
     405        tr_releaseBuffer( buf );
     406    }
    407407
    408408    /* cleanup */
    409     tr_releaseBuffer( buf );
    410     tr_free( out );
     409    tr_releaseBuffer( response );
    411410}
    412411
Note: See TracChangeset for help on using the changeset viewer.