Changeset 8090


Ignore:
Timestamp:
Mar 26, 2009, 6:06:54 PM (13 years ago)
Author:
charles
Message:

(trunk) rpc changes:

  1. new field "blocklist-size" to session-info, so RPC clients can know how big the blocklist is
  2. new method "torrent-reannounce" so RPC clients can ask the tracker for more peers
Location:
trunk
Files:
6 edited

Legend:

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

    r8088 r8090  
    74743.1.  Torrent Action Requests
    7575
    76    Method name         | libtransmission function
    77    --------------------+-------------------------------------------------
    78    "torrent-start"     | tr_torrentStart
    79    "torrent-stop"      | tr_torrentStop
    80    "torrent-verify"    | tr_torrentVerify
     76   Method name          | libtransmission function
     77   ---------------------+-------------------------------------------------
     78   "torrent-start"      | tr_torrentStart
     79   "torrent-stop"       | tr_torrentStop
     80   "torrent-verify"     | tr_torrentVerify
     81   "torrent-reannounce" | tr_torrentManualUpdate ("ask tracker for more peers")
    8182
    8283   Request arguments: "ids", which specifies which torrents to use.
     
    343344   "alt-speed-limit-end"      | number     minutes after midnight. (ex: 300 means ending at 5 am)
    344345   "blocklist-enabled"        | 'boolean'  true means enabled
     346   "blocklist-size"           | number     number of rules in the blocklist
    345347   "encryption"               | string     "required", "preferred", "tolerated"
    346348   "download-dir"             | string     default path to download torrents
     
    350352   "peer-port"                | number     port number
    351353   "port-forwarding-enabled"  | 'boolean'  true means enabled
     354   "rpc-version"              | number     the current RPC API version
     355   "rpc-version-minimum"      | number     the minimum RPC API version supported
    352356   "speed-limit-down"         | number     max global download speed (in K/s)
    353357   "speed-limit-down-enabled" | 'boolean'  true means enabled
     
    355359   "speed-limit-up-enabled"   | 'boolean'  true means enabled
    356360   "version"                  | string     long version string "$version ($revision)"
    357    "rpc-version"              | number     the current RPC API version
    358    "rpc-version-minimum"      | number     the minimum RPC API version supported
    359361
    360362   "rpc-version" indicates the RPC interface version supported by the RPC server.
     
    369371
    370372   Method name: "session-set"
    371    Request arguments: one or more of 4.1's arguments, except "version"
     373   Request arguments: one or more of 4.1's arguments, except: "blocklist-size",
     374                      "rpc-version", "rpc-version-minimum", and "version"
    372375   Response arguments: none
    373376
     
    449452         |         | yes       | session-get    | new arg "alt-speed-limit-end"
    450453         |         | yes       | session-get    | new arg "blocklist-enabled"
     454         |         | yes       | session-get    | new arg "blocklist-size"
    451455         |         | yes       | session-get    | new arg "peer-limit-per-torrent"
     456         |         | yes       |                | new method "torrent-reannounce"
    452457         |         |        NO | torrent-get    | removed arg "downloadLimit"
    453458         |         |        NO | torrent-get    | removed arg "downloadLimitMode"
  • trunk/libtransmission/rpcimpl.c

    r8088 r8090  
    148148            tr_torrent * tor = NULL;
    149149            const time_t now = time( NULL );
    150             const time_t window = 120;
     150            const time_t window = 60;
    151151            const int n = tr_sessionCountTorrents( session );
    152152            torrents = tr_new0( tr_torrent *, n );
    153             while( ( tor = tr_torrentNext( session, tor ) ) ) {
    154                 time_t a = tor->activityDate;
    155                 a = MAX( a, tor->addedDate );
    156                 a = MAX( a, tor->doneDate );
    157                 a = MAX( a, tor->startDate );
    158                 if( a >= now - window )
     153            while( ( tor = tr_torrentNext( session, tor ) ) )
     154                if( tor->anyDate >= now - window )
    159155                    torrents[torrentCount++] = tor;
    160             }
    161156        }
    162157    }
     
    237232        if( !( status & TR_RPC_NOREMOVE ) )
    238233            tr_torrentRemove( tor );
     234    }
     235
     236    tr_free( torrents );
     237    return NULL;
     238}
     239
     240static const char*
     241torrentReannounce( tr_session               * session,
     242                   tr_benc                  * args_in,
     243                   tr_benc                  * args_out UNUSED,
     244                   struct tr_rpc_idle_data  * idle_data )
     245{
     246    int i, torrentCount;
     247    tr_torrent ** torrents = getTorrents( session, args_in, &torrentCount );
     248
     249    assert( idle_data == NULL );
     250
     251    for( i=0; i<torrentCount; ++i )
     252    {
     253        tr_torrent * tor = torrents[i];
     254        if( tr_torrentCanManualUpdate( tor ) )
     255        {
     256            tr_torrentManualUpdate( tor );
     257            notify( session, TR_RPC_TORRENT_CHANGED, tor );
     258        }
    239259    }
    240260
     
    957977    tr_bencDictAddInt( d, TR_PREFS_KEY_ALT_END, tr_sessionGetAltSpeedLimitEnd( s ) );
    958978    tr_bencDictAddInt( d, TR_PREFS_KEY_BLOCKLIST_ENABLED, tr_blocklistIsEnabled( s ) );
     979    tr_bencDictAddInt( d, "blocklist-size", tr_blocklistGetRuleCount( s ) );
    959980    tr_bencDictAddStr( d, TR_PREFS_KEY_DOWNLOAD_DIR, tr_sessionGetDownloadDir( s ) );
    960981    tr_bencDictAddInt( d, TR_PREFS_KEY_PEER_LIMIT_GLOBAL, tr_sessionGetPeerLimit( s ) );
     
    9961017methods[] =
    9971018{
    998     { "session-get",    TRUE,  sessionGet          },
    999     { "session-set",    TRUE,  sessionSet          },
    1000     { "session-stats",  TRUE,  sessionStats        },
    1001     { "torrent-add",    FALSE, torrentAdd          },
    1002     { "torrent-get",    TRUE,  torrentGet          },
    1003     { "torrent-remove", TRUE,  torrentRemove       },
    1004     { "torrent-set",    TRUE,  torrentSet          },
    1005     { "torrent-start",  TRUE,  torrentStart        },
    1006     { "torrent-stop",   TRUE,  torrentStop         },
    1007     { "torrent-verify", TRUE,  torrentVerify       }
     1019    { "session-get",        TRUE,  sessionGet          },
     1020    { "session-set",        TRUE,  sessionSet          },
     1021    { "session-stats",      TRUE,  sessionStats        },
     1022    { "torrent-add",        FALSE, torrentAdd          },
     1023    { "torrent-get",        TRUE,  torrentGet          },
     1024    { "torrent-remove",     TRUE,  torrentRemove       },
     1025    { "torrent-set",        TRUE,  torrentSet          },
     1026    { "torrent-start",      TRUE,  torrentStart        },
     1027    { "torrent-stop",       TRUE,  torrentStop         },
     1028    { "torrent-verify",     TRUE,  torrentVerify       },
     1029    { "torrent-reannounce", TRUE,  torrentReannounce   }
    10081030};
    10091031
  • trunk/libtransmission/torrent.c

    r8021 r8090  
    758758}
    759759
    760 int
     760tr_bool
    761761tr_torrentCanManualUpdate( const tr_torrent * tor )
    762762{
     
    780780         ? &tor->stats
    781781         : tr_torrentStat( tor );
     782}
     783
     784void
     785tr_torrentSetVerifyState( tr_torrent * tor, tr_verify_state state )
     786{
     787    assert( tr_isTorrent( tor ) );
     788    assert( state==TR_VERIFY_NONE || state==TR_VERIFY_WAIT || state==TR_VERIFY_NOW );
     789
     790    tor->verifyState = state;
     791    tor->anyDate = time( NULL );
    782792}
    783793
     
    11811191    tor->completeness = tr_cpGetStatus( &tor->completion );
    11821192    tr_torrentSaveResume( tor );
    1183     tor->startDate = time( NULL );
     1193    tor->startDate = tor->anyDate = time( NULL );
    11841194    tr_trackerStart( tor->tracker );
    11851195    tr_peerMgrStartTorrent( tor );
     
    14561466            tr_trackerCompleted( tor->tracker );
    14571467
    1458             tor->doneDate = time( NULL );
     1468            tor->doneDate = tor->anyDate = time( NULL );
    14591469        }
    14601470
     
    19181928
    19191929    tor->activityDate = t;
     1930
     1931    if( tor->anyDate < tor->activityDate )
     1932        tor->anyDate = tor->activityDate;
    19201933}
    19211934
     
    19281941
    19291942    tor->doneDate = t;
     1943
     1944    if( tor->anyDate < tor->doneDate )
     1945        tor->anyDate = tor->doneDate;
    19301946}
    19311947
  • trunk/libtransmission/torrent.h

    r8021 r8090  
    128128tr_verify_state;
    129129
     130void             tr_torrentSetVerifyState( tr_torrent      * tor,
     131                                           tr_verify_state   state );
     132
    130133struct tr_torrent
    131134{
     
    183186    time_t                     doneDate;
    184187    time_t                     startDate;
     188    time_t                     anyDate;
    185189
    186190    tr_torrent_completeness_func *   completeness_func;
  • trunk/libtransmission/transmission.h

    r8088 r8090  
    11361136void tr_torrentManualUpdate( tr_torrent * torrent );
    11371137
    1138 int tr_torrentCanManualUpdate( const tr_torrent * torrent );
     1138tr_bool tr_torrentCanManualUpdate( const tr_torrent * torrent );
    11391139
    11401140/***********************************************************************
  • trunk/libtransmission/verify.c

    r7816 r8090  
    143143
    144144        tr_torinf( tor, _( "Verifying torrent" ) );
    145         assert( tr_isTorrent( tor ) );
    146         tor->verifyState = TR_VERIFY_NOW;
     145        tr_torrentSetVerifyState( tor, TR_VERIFY_NOW );
    147146        buffer = tr_new( uint8_t, tor->info.pieceSize );
    148147        for( i = 0; i < tor->info.fileCount && !stopCurrent; ++i )
    149148            changed |= checkFile( tor, buffer, tor->info.pieceSize, i, &stopCurrent );
    150149        tr_free( buffer );
    151         tor->verifyState = TR_VERIFY_NONE;
     150        tr_torrentSetVerifyState( tor, TR_VERIFY_NONE );
    152151        assert( tr_isTorrent( tor ) );
    153152
     
    188187
    189188        tr_lockLock( getVerifyLock( ) );
    190         tor->verifyState = verifyList ? TR_VERIFY_WAIT : TR_VERIFY_NOW;
     189        tr_torrentSetVerifyState( tor, verifyList ? TR_VERIFY_WAIT : TR_VERIFY_NOW );
    191190        tr_list_append( &verifyList, node );
    192191        if( verifyThread == NULL )
Note: See TracChangeset for help on using the changeset viewer.