Changeset 1148


Ignore:
Timestamp:
Dec 2, 2006, 1:29:04 AM (15 years ago)
Author:
joshe
Message:

Revert the 'many peer' thresholds and times.
Fix trackerid (still untested).
Misc cleanups.

Location:
branches/scrape/libtransmission
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/scrape/libtransmission/internal.h

    r1134 r1148  
    155155
    156156    char            * id;
    157     char            * trackerid;
    158157    char            * key;
    159158    int             * bindPort;
  • branches/scrape/libtransmission/tracker.c

    r1147 r1148  
    3030
    3131    char         * id;
     32    char         * trackerid;
    3233
    3334    char           started;
     
    4142    int            leechers;
    4243    int            hasManyPeers;
    43     int            downloaded;
     44    int            complete;
    4445
    4546    uint64_t       dateTry;
     
    6162};
    6263
    63 static tr_http_t * getQuery ( tr_tracker_t * tc );
    64 static tr_http_t * getScrapeQuery ( tr_tracker_t * tc );
    65 static void        readAnswer ( tr_tracker_t * tc, const char *, int );
    66 static void        readScrapeAnswer( tr_tracker_t * tc, const char * data, int len );
     64static tr_http_t * getQuery         ( tr_tracker_t * tc );
     65static tr_http_t * getScrapeQuery   ( tr_tracker_t * tc );
     66static void        readAnswer       ( tr_tracker_t * tc, const char *, int );
     67static void        readScrapeAnswer ( tr_tracker_t * tc, const char *, int );
     68static void        killHttp         ( tr_http_t ** http, tr_fd_t * fdlimit );
    6769
    6870tr_tracker_t * tr_trackerInit( tr_torrent_t * tor )
     
    8082    tc->seeders        = -1;
    8183    tc->leechers       = -1;
    82     tc->downloaded     = -1;
     84    tc->complete       = -1;
    8385
    8486    tc->lastAttempt    = TC_ATTEMPT_NOREACH;
     
    9294static int shouldConnect( tr_tracker_t * tc )
    9395{
    94     uint64_t now = tr_date();
     96    tr_torrent_t * tor = tc->tor;
     97    uint64_t       now;
     98
     99    now = tr_date();
    95100
    96101    /* Unreachable tracker, try 10 seconds before trying again */
     
    124129    /* If there is quite a lot of people on this torrent, stress
    125130       the tracker a bit until we get a decent number of peers */
    126     if( tc->hasManyPeers && !tc->tor->finished )
    127     {
    128         if( tc->tor->peerCount < 5 )
    129         {
    130             if( now > tc->dateOk + 1000 * MAX( 30, tc->minInterval ) )
     131    if( tc->hasManyPeers && !tr_cpIsSeeding( tor->completion ) )
     132    {
     133        /* reannounce in 10 seconds if we have less than 5 peers */
     134        if( tor->peerCount < 5 )
     135        {
     136            if( now > tc->dateOk + 1000 * MAX( 10, tc->minInterval ) )
    131137            {
    132138                return 1;
    133139            }
    134140        }
    135         else if( tc->tor->peerCount < 10 )
    136         {
    137             if( now > tc->dateOk + 1000 * MAX( 60, tc->minInterval ) )
     141        /* reannounce in 20 seconds if we have less than 10 peers */
     142        else if( tor->peerCount < 10 )
     143        {
     144            if( now > tc->dateOk + 1000 * MAX( 20, tc->minInterval ) )
    138145            {
    139146                return 1;
    140147            }
    141148        }
    142         else if( tc->tor->peerCount < 20 )
    143         {
    144             if( now > tc->dateOk + 1000 * MAX( 90, tc->minInterval ) )
     149        /* reannounce in 30 seconds if we have less than 15 peers */
     150        else if( tor->peerCount < 15 )
     151        {
     152            if( now > tc->dateOk + 1000 * MAX( 30, tc->minInterval ) )
    145153            {
    146154                return 1;
     
    212220
    213221            case TR_ERROR:
    214                 tr_httpClose( tc->http );
    215                 tr_fdSocketClosed( tor->fdlimit, 1 );
    216                 tc->http    = NULL;
     222                killHttp( &tc->http, tor->fdlimit );
    217223                tc->dateTry = tr_date();
    218224                break;
     
    220226            case TR_OK:
    221227                readAnswer( tc, data, len );
    222                 tr_httpClose( tc->http );
    223                 tc->http = NULL;
    224                 tr_fdSocketClosed( tor->fdlimit, 1 );
     228                killHttp( &tc->http, tor->fdlimit );
    225229                break;
    226230        }
     
    244248        {
    245249            case TR_WAIT:
    246                 return 0;
     250                break;
    247251
    248252            case TR_ERROR:
    249                 tr_httpClose( tc->httpScrape );
    250                 tr_fdSocketClosed( tor->fdlimit, 1 );
    251                 tc->httpScrape       = NULL;
     253                killHttp( &tc->httpScrape, tor->fdlimit );
    252254                tc->lastScrapeFailed = 1;
    253                 return 0;
     255                break;
    254256
    255257            case TR_OK:
    256258                readScrapeAnswer( tc, data, len );
    257                 tr_httpClose( tc->httpScrape );
    258                 tc->httpScrape = NULL;
    259                 tr_fdSocketClosed( tor->fdlimit, 1 );
     259                killHttp( &tc->httpScrape, tor->fdlimit );
    260260                break;
    261261        }
     
    276276    tr_torrent_t * tor = tc->tor;
    277277
    278     if( NULL != tc->http )
    279     {
    280         /* If we are already sending a query at the moment, we need to
    281            reconnect */
    282         tr_httpClose( tc->http );
    283         tc->http = NULL;
    284         tr_fdSocketClosed( tor->fdlimit, 1 );
    285     }
     278    /* If we are already sending a query at the moment, we need to
     279       reconnect */
     280    killHttp( &tc->http, tor->fdlimit );
    286281
    287282    tc->started   = 0;
     
    297292    tr_torrent_t * tor = tc->tor;
    298293
    299     if( NULL != tc->http )
    300     {
    301         tr_httpClose( tc->http );
    302         tr_fdSocketClosed( tor->fdlimit, 1 );
    303     }
    304     if( NULL != tc->httpScrape )
    305     {
    306         tr_httpClose( tc->httpScrape );
    307         tr_fdSocketClosed( tor->fdlimit, 1 );
    308     }
    309    
    310     if( tor->trackerid )
    311         free( tor->trackerid );
    312    
     294    killHttp( &tc->http, tor->fdlimit );
     295    killHttp( &tc->httpScrape, tor->fdlimit );
     296    free( tc->trackerid );
    313297    free( tc );
    314298}
     
    319303    tr_info_t    * inf = &tor->info;
    320304
    321     char         * event;
    322     char         * trackerid;
     305    char         * event, * trackerid, * idparam;
    323306    uint64_t       left;
    324307    uint64_t       down;
     
    355338    }
    356339
    357     start     = ( strchr( inf->trackerAnnounce, '?' ) ? '&' : '?' );
    358     left      = tr_cpLeftBytes( tor->completion );
    359     trackerid = tor->trackerid ? ( "&trackerid=%s", tor->trackerid ) : "";
     340    if( NULL == tc->trackerid )
     341    {
     342        trackerid = "";
     343        idparam   = "";
     344    }
     345    else
     346    {
     347        trackerid = tc->trackerid;
     348        idparam   = "&trackerid=";
     349    }
     350
     351    start = ( strchr( inf->trackerAnnounce, '?' ) ? '&' : '?' );
     352    left  = tr_cpLeftBytes( tor->completion );
    360353
    361354    return tr_httpClient( TR_HTTP_GET, inf->trackerAddress, inf->trackerPort,
     
    370363                          "numwant=%d&"
    371364                          "key=%s"
    372                           "%s"
     365                          "%s%s"
    373366                          "%s",
    374367                          inf->trackerAnnounce, start, tor->escapedHashString,
    375368                          tc->id, tc->bindPort, up, down, left, numwant,
    376                           tor->key, trackerid, event );
     369                          tor->key, idparam, trackerid, event );
    377370}
    378371
     
    537530    if( beFoo )
    538531    {
    539         free( tor->trackerid );
    540         tor->trackerid = strdup( beFoo->val.s.s );
    541         tr_inf( "Tracker: tracker id = %s", tor->trackerid );
     532        free( tc->trackerid );
     533        tc->trackerid = strdup( beFoo->val.s.s );
     534        tr_inf( "Tracker: tracker id = %s", tc->trackerid );
    542535    }
    543536
     
    668661    bodylen = len - ( body - (const uint8_t*)data );
    669662
    670     for( ii = 0; ii < bodylen - 8; ii++ )
    671     {
    672         if( !memcmp( body + ii, "d5:files", 8 ) )
     663    for( ii = 0; ii < bodylen; ii++ )
     664    {
     665        if( !tr_bencLoad( body + ii, bodylen - ii, &scrape, NULL ) )
    673666        {
    674667            break;
    675668        }
    676669    }
    677     if( ii >= bodylen - 8 )
    678     {
    679         return;
    680     }
    681     if( tr_bencLoad( body + ii, bodylen - ii, &scrape, NULL ) )
     670    if( ii >= bodylen )
    682671    {
    683672        return;
     
    719708        return;
    720709    }
    721     tc->downloaded = val2->val.i;
     710    tc->complete = val2->val.i;
    722711   
    723712    val2 = tr_bencDictFind( val1, "flags" );
     
    760749        return -1;
    761750    }
    762     return tc->downloaded;
     751    return tc->complete;
    763752}
    764753
     
    800789
    801790    ret = 1;
    802     if( tc->seeders > -1 && tc->leechers > -1 && tc->downloaded > -1 )
     791    if( tc->seeders > -1 && tc->leechers > -1 && tc->complete > -1 )
    803792    {
    804793        *s = tc->seeders;
    805794        *l = tc->leechers;
    806         *d = tc->downloaded;
     795        *d = tc->complete;
    807796        ret = 0;
    808797    }
     
    811800    return ret;
    812801}
     802
     803static void killHttp( tr_http_t ** http, tr_fd_t * fdlimit )
     804{
     805    if( NULL != *http )
     806    {
     807        tr_httpClose( *http );
     808        tr_fdSocketClosed( fdlimit, 1 );
     809        *http = NULL;
     810    }
     811}
Note: See TracChangeset for help on using the changeset viewer.