Changeset 5779


Ignore:
Timestamp:
May 8, 2008, 7:34:12 PM (14 years ago)
Author:
charles
Message:

#923: daemon should use tr_initFull()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/torrents.c

    r5755 r5779  
    7070static void         starttimer ( int );
    7171static void         timerfunc  ( int, short, void * );
    72 static int          loadstate  ( void );
    7372static int          savestate  ( void );
    7473
     
    107106torrent_init( const char * configdir, struct event_base * base )
    108107{
    109     assert( NULL == gl_handle && NULL == gl_base );
    110 
    111     gl_base   = base;
    112     gl_handle = tr_init( configdir, "daemon" );
     108    tr_benc state, * torrents;
     109    int have_state;
     110    assert( !gl_handle && !gl_base );
    113111
    114112    confpath( gl_state, sizeof gl_state, configdir, CONF_FILE_STATE, 0 );
     
    116114    absolutify( gl_dir, sizeof gl_dir, "." );
    117115
    118     loadstate();
     116    /* initialize the session variables */
     117    if(( have_state = !tr_bencLoadFile( gl_state, &state )))
     118    {
     119        int64_t i;
     120        const char * str;
     121
     122        if( tr_bencDictFindInt( &state, "autostart", &i ) )
     123            gl_autostart = i != 0;
     124        if( tr_bencDictFindInt( &state, "port", &i ) && ( 0<i ) && ( i<=0xffff ) )
     125            gl_port = i;
     126        if( tr_bencDictFindInt( &state, "default-pex", &i ) )
     127            gl_pex = i != 0;
     128        if( tr_bencDictFindInt( &state, "port-mapping", &i ) )
     129            gl_mapping = i != 0;
     130        if( tr_bencDictFindInt( &state, "upload-limit", &i ) )
     131            gl_uplimit = i;
     132        if( tr_bencDictFindInt( &state, "download-limit", &i ) )
     133            gl_downlimit = i;
     134        if( tr_bencDictFindStr( &state, "default-directory", &str ) )
     135            strlcpy( gl_dir, str, sizeof gl_dir );
     136        if( tr_bencDictFindStr( &state, "encryption-mode", &str ) ) {
     137            if( !strcmp( str, "required" ) )
     138                gl_crypto = TR_ENCRYPTION_REQUIRED;
     139            else
     140                gl_crypto = TR_ENCRYPTION_PREFERRED;
     141        }
     142    }
     143
     144    /* start the session */
     145    gl_base = base;
     146    gl_handle = tr_initFull( configdir, "daemon", gl_pex,
     147                             gl_mapping, gl_port,
     148                             gl_crypto,
     149                             gl_uplimit >= 0, gl_uplimit,
     150                             gl_downlimit >= 0, gl_downlimit,
     151                             TR_DEFAULT_GLOBAL_PEER_LIMIT,
     152                             TR_MSG_INF, 0,
     153                             0, /* is the blocklist enabled? */
     154                             TR_DEFAULT_PEER_SOCKET_TOS );
     155
     156    /* now load the torrents */
     157    if( have_state && tr_bencDictFindList( &state, "torrents", &torrents ) )
     158    {
     159        int i, n;
     160        for( i=0, n=tr_bencListSize(torrents); i<n; ++i )
     161        {
     162            int start;
     163            int64_t paused;
     164            const char * directory = NULL;
     165            const char * hash = NULL;
     166
     167            tr_benc * dict = tr_bencListChild( torrents, i );
     168            if( !tr_bencIsDict( dict ) ||
     169                !tr_bencDictFindStr( dict, "directory", &directory ) ||
     170                !tr_bencDictFindStr( dict, "hash", &hash ) )
     171                continue;
     172
     173            if( tr_bencDictFindInt( dict, "paused", &paused ) )
     174                start = !paused;
     175            else
     176                start = gl_autostart;
     177
     178            opentor( NULL, hash, NULL, 0, directory, start );
     179        }
     180    }
     181
     182    /* cleanup */
     183    if( have_state )
     184        tr_bencFree( &state );
    119185}
    120186
     
    642708
    643709int
    644 loadstate( void )
    645 {
    646     const char * str;
    647     int64_t      tmp;
    648     benc_val_t   top, * list;
    649     int          ii;
    650 
    651     if( tr_bencLoadFile( gl_state, &top ) )
    652     {
    653         errmsg( "failed to load bencoded data from %s", gl_state );
    654         return -1;
    655     }
    656 
    657     if( tr_bencDictFindInt( &top, "autostart", &tmp ) )
    658         gl_autostart = tmp != 0;
    659 
    660     if( tr_bencDictFindInt( &top, "port", &tmp ) && ( 0 < tmp ) && ( tmp <= 0xffff ) )
    661         gl_port = tmp;
    662     tr_setBindPort( gl_handle, gl_port );
    663 
    664     if( tr_bencDictFindInt( &top, "default-pex", &tmp ) )
    665         gl_pex = tmp != 0;
    666 
    667     if( tr_bencDictFindInt( &top, "port-mapping", &tmp ) )
    668         gl_mapping = tmp != 0;
    669     tr_natTraversalEnable( gl_handle, gl_mapping );
    670 
    671     if( tr_bencDictFindInt( &top, "upload-limit", &tmp ) )
    672         gl_uplimit = tmp;
    673     tr_setGlobalSpeedLimit( gl_handle, TR_UP, gl_uplimit );
    674     tr_setUseGlobalSpeedLimit( gl_handle, TR_UP, gl_uplimit > 0 );
    675 
    676     if( tr_bencDictFindInt( &top, "download-limit", &tmp ) )
    677         gl_downlimit = tmp;
    678     tr_setGlobalSpeedLimit( gl_handle, TR_DOWN, gl_downlimit );
    679     tr_setUseGlobalSpeedLimit( gl_handle, TR_DOWN, gl_downlimit > 0 );
    680 
    681     if( tr_bencDictFindStr( &top, "default-directory", &str ) )
    682         strlcpy( gl_dir, str, sizeof gl_dir );
    683 
    684     if( tr_bencDictFindStr( &top, "encryption-mode", &str ) )
    685     {
    686         if(!strcasecmp( str, "preferred"))
    687             gl_crypto = TR_ENCRYPTION_PREFERRED;
    688         else if(!strcasecmp( str, "required"))
    689             gl_crypto = TR_ENCRYPTION_REQUIRED;
    690     }
    691 
    692     tr_setEncryptionMode(gl_handle, gl_crypto);
    693 
    694     list = tr_bencDictFind( &top, "torrents" );
    695     if( !tr_bencIsList( list ) )
    696         return 0;
    697 
    698     for( ii = 0; ii < list->val.l.count; ii++ )
    699     {
    700         int start = 0;
    701         const char * directory = NULL;
    702         const char * hash = NULL;
    703 
    704         tr_benc * dict = &list->val.l.vals[ii];
    705         if( !tr_bencIsDict( dict ) )
    706             continue;
    707 
    708         if( !tr_bencDictFindStr( dict, "directory", &directory ) ||
    709             !tr_bencDictFindStr( dict, "hash", &hash ) )
    710             continue;
    711 
    712         if( tr_bencDictFindInt( dict, "paused", &tmp ) && !tmp )
    713             start = 1;
    714 
    715         opentor( NULL, hash, NULL, 0, directory, start );
    716     }
    717 
    718     return 0;
    719 }
    720 
    721 int
    722710savestate( void )
    723711{
Note: See TracChangeset for help on using the changeset viewer.