Changeset 11922


Ignore:
Timestamp:
Feb 18, 2011, 12:33:11 AM (11 years ago)
Author:
jordan
Message:

(trunk libT) add C and RPC API for getting/setting uTP enabled flag

Location:
trunk
Files:
8 edited

Legend:

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

    r11771 r11922  
    444444   "trash-original-torrent-files"   | boolean    | true means the .torrent file of added torrents will be deleted
    445445   "units"                          | object     | see below
     446   "utp-enabled"                    | boolean    | true means allow utp
    446447   "version"                        | string     | long version string "$version ($revision)"
    447448   ---------------------------------+------------+-----------------------------+
  • trunk/libtransmission/rpcimpl.c

    r11896 r11922  
    14731473    if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_DHT_ENABLED, &boolVal ) )
    14741474        tr_sessionSetDHTEnabled( session, boolVal );
     1475    if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_UTP_ENABLED, &boolVal ) )
     1476        tr_sessionSetUTPEnabled( session, boolVal );
    14751477    if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_LPD_ENABLED, &boolVal ) )
    14761478        tr_sessionSetLPDEnabled( session, boolVal );
     
    15971599    tr_bencDictAddBool( d, TR_PREFS_KEY_INCOMPLETE_DIR_ENABLED, tr_sessionIsIncompleteDirEnabled( s ) );
    15981600    tr_bencDictAddBool( d, TR_PREFS_KEY_PEX_ENABLED, tr_sessionIsPexEnabled( s ) );
     1601    tr_bencDictAddBool( d, TR_PREFS_KEY_UTP_ENABLED, tr_sessionIsUTPEnabled( s ) );
    15991602    tr_bencDictAddBool( d, TR_PREFS_KEY_DHT_ENABLED, tr_sessionIsDHTEnabled( s ) );
    16001603    tr_bencDictAddBool( d, TR_PREFS_KEY_LPD_ENABLED, tr_sessionIsLPDEnabled( s ) );
  • trunk/libtransmission/session.c

    r11903 r11922  
    4545#include "torrent.h"
    4646#include "tr-udp.h"
     47#include "tr-utp.h"
    4748#include "tr-lpd.h"
    4849#include "trevent.h"
     
    315316    tr_bencDictAddInt ( d, TR_PREFS_KEY_MAX_CACHE_SIZE_MB,        DEFAULT_CACHE_SIZE_MB );
    316317    tr_bencDictAddBool( d, TR_PREFS_KEY_DHT_ENABLED,              TRUE );
     318    tr_bencDictAddBool( d, TR_PREFS_KEY_UTP_ENABLED,              FALSE );
    317319    tr_bencDictAddBool( d, TR_PREFS_KEY_LPD_ENABLED,              FALSE );
    318320    tr_bencDictAddStr ( d, TR_PREFS_KEY_DOWNLOAD_DIR,             tr_getDefaultDownloadDir( ) );
     
    379381    tr_bencDictAddInt ( d, TR_PREFS_KEY_MAX_CACHE_SIZE_MB,        tr_sessionGetCacheLimit_MB( s ) );
    380382    tr_bencDictAddBool( d, TR_PREFS_KEY_DHT_ENABLED,              s->isDHTEnabled );
     383    tr_bencDictAddBool( d, TR_PREFS_KEY_UTP_ENABLED,              s->isUTPEnabled );
    381384    tr_bencDictAddBool( d, TR_PREFS_KEY_LPD_ENABLED,              s->isLPDEnabled );
    382385    tr_bencDictAddStr ( d, TR_PREFS_KEY_DOWNLOAD_DIR,             s->downloadDir );
     
    764767    if( tr_bencDictFindBool( settings, TR_PREFS_KEY_DHT_ENABLED, &boolVal ) )
    765768        tr_sessionSetDHTEnabled( session, boolVal );
     769    if( tr_bencDictFindBool( settings, TR_PREFS_KEY_UTP_ENABLED, &boolVal ) )
     770        tr_sessionSetUTPEnabled( session, boolVal );
    766771    if( tr_bencDictFindBool( settings, TR_PREFS_KEY_LPD_ENABLED, &boolVal ) )
    767772        tr_sessionSetLPDEnabled( session, boolVal );
     
    17351740        tr_lpdUninit( session );
    17361741
     1742    tr_utpClose( session );
    17371743    tr_udpUninit( session );
    17381744
     
    19641970        tr_runInEventThread( session, toggleDHTImpl, session );
    19651971}
     1972
     1973/***
     1974****
     1975***/
     1976
     1977tr_bool
     1978tr_sessionIsUTPEnabled( const tr_session * session )
     1979{
     1980    assert( tr_isSession( session ) );
     1981
     1982    return session->isUTPEnabled;
     1983}
     1984
     1985static void
     1986toggle_utp(  void * data )
     1987{
     1988    tr_session * session = data;
     1989    assert( tr_isSession( session ) );
     1990
     1991    session->isUTPEnabled = !session->isUTPEnabled;
     1992
     1993    if( !session->isUTPEnabled )
     1994        tr_utpClose( session );
     1995}
     1996
     1997void
     1998tr_sessionSetUTPEnabled( tr_session * session, tr_bool enabled )
     1999{
     2000    assert( tr_isSession( session ) );
     2001    assert( tr_isBool( enabled ) );
     2002
     2003    if( ( enabled != 0 ) != ( session->isUTPEnabled != 0 ) )
     2004        tr_runInEventThread( session, toggle_utp, session );
     2005}
     2006
     2007/***
     2008****
     2009***/
    19662010
    19672011static void
  • trunk/libtransmission/session.h

    r11800 r11922  
    9090    tr_bool                      isPexEnabled;
    9191    tr_bool                      isDHTEnabled;
     92    tr_bool                      isUTPEnabled;
    9293    tr_bool                      isLPDEnabled;
    9394    tr_bool                      isBlocklistEnabled;
  • trunk/libtransmission/tr-udp.c

    r11901 r11922  
    136136        return;
    137137
    138     if(buf[0] == 'd') {
     138    if((buf[0] == 'd') && tr_sessionIsDHTEnabled(ss)) {
    139139        /* DHT packet. */
    140140        buf[rc] = '\0';
    141141        tr_dhtCallback(buf, rc, (struct sockaddr*)&from, fromlen, sv);
    142     } else {
     142    } else if(tr_sessionIsDHTEnabled(ss)){
    143143        rc = tr_utpPacket(buf, rc, (struct sockaddr*)&from, fromlen, ss);
    144144        if(!rc)
  • trunk/libtransmission/tr-utp.c

    r11920 r11922  
    8484
    8585static void
     86reset_timer( void )
     87{
     88    int sec = 0;
     89    int usec = UTP_INTERVAL_US / 2 + tr_cryptoWeakRandInt(UTP_INTERVAL_US);
     90    tr_timerAdd( utp_timer, sec, usec );
     91}
     92
     93static void
    8694timer_callback(int s UNUSED, short type UNUSED, void *closure UNUSED)
    8795{
    8896    UTP_CheckTimeouts();
    89     tr_timerAdd(utp_timer, 0,
    90                 UTP_INTERVAL_US / 2 + tr_cryptoWeakRandInt(UTP_INTERVAL_US));
     97    reset_timer();
    9198}
    9299
     
    96103             tr_session *ss)
    97104{
    98     if(utp_timer == NULL) {
    99         utp_timer = evtimer_new( ss->event_base, timer_callback, NULL);
     105    if(utp_timer == NULL)
     106    {
     107        utp_timer = evtimer_new( ss->event_base, timer_callback, NULL );
    100108        if(utp_timer == NULL)
    101109            return -1;
    102         tr_timerAdd(utp_timer, 0,
    103                     UTP_INTERVAL_US / 2 +
    104                     tr_cryptoWeakRandInt(UTP_INTERVAL_US));
     110        reset_timer();
    105111    }
    106112
     
    109115}
    110116
    111    
     117void
     118tr_utpClose( tr_session * session )
     119{
     120    if( utp_timer )
     121    {
     122        evtimer_del( utp_timer );
     123        utp_timer = NULL;
     124    }
     125}
  • trunk/libtransmission/tr-utp.h

    r11901 r11922  
    2525                 const struct sockaddr *from, socklen_t fromlen,
    2626                 tr_session *ss);
     27
     28void tr_utpClose( tr_session * );
  • trunk/libtransmission/transmission.h

    r11890 r11922  
    162162#define TR_PREFS_KEY_MAX_CACHE_SIZE_MB             "cache-size-mb"
    163163#define TR_PREFS_KEY_DHT_ENABLED                   "dht-enabled"
     164#define TR_PREFS_KEY_UTP_ENABLED                   "utp-enabled"
    164165#define TR_PREFS_KEY_LPD_ENABLED                   "lpd-enabled"
    165166#define TR_PREFS_KEY_PREFETCH_ENABLED              "prefetch-enabled"
     
    573574void     tr_sessionSetDHTEnabled( tr_session * session, tr_bool );
    574575
     576tr_bool  tr_sessionIsUTPEnabled( const tr_session * session );
     577void     tr_sessionSetUTPEnabled( tr_session * session, tr_bool );
     578
    575579tr_bool  tr_sessionIsLPDEnabled( const tr_session * session );
    576580void     tr_sessionSetLPDEnabled( tr_session * session, tr_bool enabled );
Note: See TracChangeset for help on using the changeset viewer.