Changeset 8129


Ignore:
Timestamp:
Apr 3, 2009, 11:21:40 PM (13 years ago)
Author:
charles
Message:

(trunk rpc) add rpc command to tell libtransmission when to update its blocklist

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/rpc-spec.txt

    r8127 r8129  
    432432                              | sessionCount     | number     | tr_session_stats
    433433                              | secondsActive    | number     | tr_session_stats
     434
     4354.3.  Blocklist
     436
     437   Method name: "blocklist-update"
     438   Request arguments: none
     439   Response arguments: "blocklist-size"
    434440   
    435441
     
    484490         |         | yes       | torrent-get    | new ids option "percentDone"
    485491         |         | yes       |                | new method "torrent-reannounce"
     492         |         | yes       |                | new method "blocklist-update"
    486493         |         |        NO | torrent-get    | removed arg "downloadLimitMode"
    487494         |         |        NO | torrent-get    | removed arg "uploadLimitMode"
  • trunk/libtransmission/rpcimpl.c

    r8127 r8129  
    1515#include <stdlib.h> /* strtol */
    1616#include <string.h> /* strcmp */
     17#include <unistd.h> /* unlink */
    1718
    1819#include <event.h> /* evbuffer */
     
    744745
    745746static void
     747gotNewBlocklist( tr_session       * session,
     748                 long               response_code,
     749                 const void       * response,
     750                 size_t             response_byte_count,
     751                 void             * user_data )
     752{
     753    char result[1024];
     754    struct tr_rpc_idle_data * data = user_data;
     755
     756    if( response_code != 200 )
     757    {
     758        tr_snprintf( result, sizeof( result ), "http error %ld: %s",
     759                     response_code, tr_webGetResponseStr( response_code ) );
     760    }
     761    else /* success */
     762    {
     763        int ruleCount;
     764        char * filename = tr_buildPath( tr_sessionGetConfigDir( session ), "blocklist.tmp", NULL );
     765        FILE * fp;
     766
     767        /* download a new blocklist */
     768        fp = fopen( filename, "w+" );
     769        fwrite( response, 1, response_byte_count, fp );
     770        fclose( fp );
     771
     772        /* feed it to the session */
     773        ruleCount = tr_blocklistSetContent( session, filename );
     774
     775        /* give the client a response */
     776        tr_bencDictAddInt( data->args_out, "blocklist-size", ruleCount );
     777        tr_snprintf( result, sizeof( result ), "success" );
     778
     779        /* cleanup */
     780        unlink( filename );
     781        tr_free( filename );
     782    }
     783
     784    tr_idle_function_done( data, result );
     785}
     786
     787static const char*
     788blocklistUpdate( tr_session               * session,
     789                 tr_benc                  * args_in UNUSED,
     790                 tr_benc                  * args_out UNUSED,
     791                 struct tr_rpc_idle_data  * idle_data )
     792{
     793    /* FIXME: use this url after the website's updated */
     794    /* const char * url = "http://update.transmissionbt.com/level1"; */
     795    const char * url = "http://download.m0k.org/transmission/files/level1";
     796    tr_webRun( session, url, NULL, gotNewBlocklist, idle_data );
     797    return NULL;
     798}
     799
     800/***
     801****
     802***/
     803
     804static void
    746805addTorrentImpl( struct tr_rpc_idle_data * data, tr_ctor * ctor )
    747806{
     
    11141173methods[] =
    11151174{
     1175    { "blocklist-update",   FALSE, blocklistUpdate     },
    11161176    { "session-get",        TRUE,  sessionGet          },
    11171177    { "session-set",        TRUE,  sessionSet          },
Note: See TracChangeset for help on using the changeset viewer.