~ubuntu-branches/ubuntu/trusty/bittornado/trusty

« back to all changes in this revision

Viewing changes to BitTornado/BT1/Rerequester.py

  • Committer: Bazaar Package Importer
  • Author(s): Cameron Dale
  • Date: 2008-07-19 16:08:44 UTC
  • mfrom: (0.1.14 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080719160844-nnmp02ar9pri55v1
Tags: 0.3.18-7
* Refresh all the quilt patches (Closes: #485320)
* Update standards version to 3.8.0
  - Add a README.source file pointing to the quilt documentation
* medium urgency to get it into lenny

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
        return self.state
53
53
 
54
54
class Rerequester:
55
 
    def __init__(self, trackerlist, interval, sched, howmany, minpeers, 
56
 
            connect, externalsched, amount_left, up, down,
57
 
            port, ip, myid, infohash, timeout, errorfunc, excfunc,
58
 
            maxpeers, doneflag, upratefunc, downratefunc,
59
 
            unpauseflag = fakeflag(True),
60
 
            seed_id = '', seededfunc = None, force_rapid_update = False ):
 
55
    def __init__( self, port, myid, infohash, trackerlist, config,
 
56
                  sched, externalsched, errorfunc, excfunc, connect,
 
57
                  howmany, amount_left, up, down, upratefunc, downratefunc,
 
58
                  doneflag, unpauseflag = fakeflag(True),
 
59
                  seededfunc = None, force_rapid_update = False ):
61
60
 
 
61
        self.sched = sched
 
62
        self.externalsched = externalsched
 
63
        self.errorfunc = errorfunc
62
64
        self.excfunc = excfunc
 
65
        self.connect = connect
 
66
        self.howmany = howmany
 
67
        self.amount_left = amount_left
 
68
        self.up = up
 
69
        self.down = down
 
70
        self.upratefunc = upratefunc
 
71
        self.downratefunc = downratefunc
 
72
        self.doneflag = doneflag
 
73
        self.unpauseflag = unpauseflag
 
74
        self.seededfunc = seededfunc
 
75
        self.force_rapid_update = force_rapid_update
 
76
 
 
77
        self.ip = config.get('ip','')
 
78
        self.minpeers = config['min_peers']
 
79
        self.maxpeers = config['max_initiate']
 
80
        self.interval = config['rerequest_interval']
 
81
        self.timeout = config['http_timeout']
 
82
 
63
83
        newtrackerlist = []        
64
84
        for tier in trackerlist:
65
85
            if len(tier)>1:
66
86
                shuffle(tier)
67
87
            newtrackerlist += [tier]
68
88
        self.trackerlist = newtrackerlist
 
89
 
69
90
        self.lastsuccessful = ''
70
91
        self.rejectedmessage = 'rejected by tracker - '
71
 
        
72
 
        self.url = ('?info_hash=%s&peer_id=%s&port=%s' %
73
 
            (quote(infohash), quote(myid), str(port)))
74
 
        self.ip = ip
75
 
        self.interval = interval
 
92
 
 
93
        self.url = ('info_hash=%s&peer_id=%s' %
 
94
            (quote(infohash), quote(myid)))
 
95
        if not config.get('crypto_allowed'):
 
96
            self.url += "&port="
 
97
        else:
 
98
            self.url += "&supportcrypto=1"
 
99
            if not config.get('crypto_only'):
 
100
                    self.url += "&port="
 
101
            else:
 
102
                self.url += "&requirecrypto=1"            
 
103
                if not config.get('crypto_stealth'):
 
104
                    self.url += "&port="
 
105
                else:
 
106
                    self.url += "&port=0&cryptoport="
 
107
        self.url += str(port)
 
108
 
 
109
        seed_id = config.get('dedicated_seed_id')
 
110
        if seed_id:
 
111
            self.url += '&seed_id='+quote(seed_id)
 
112
        if self.seededfunc:
 
113
            self.url += '&check_seeded=1'
 
114
 
76
115
        self.last = None
77
116
        self.trackerid = None
78
117
        self.announce_interval = 30 * 60
79
 
        self.sched = sched
80
 
        self.howmany = howmany
81
 
        self.minpeers = minpeers
82
 
        self.connect = connect
83
 
        self.externalsched = externalsched
84
 
        self.amount_left = amount_left
85
 
        self.up = up
86
 
        self.down = down
87
 
        self.timeout = timeout
88
 
        self.errorfunc = errorfunc
89
 
        self.maxpeers = maxpeers
90
 
        self.doneflag = doneflag
91
 
        self.upratefunc = upratefunc
92
 
        self.downratefunc = downratefunc
93
 
        self.unpauseflag = unpauseflag
94
 
        if seed_id:
95
 
            self.url += '&seed_id='+quote(seed_id)
96
 
        self.seededfunc = seededfunc
97
 
        if seededfunc:
98
 
            self.url += '&check_seeded=1'
99
 
        self.force_rapid_update = force_rapid_update
100
118
        self.last_failed = True
101
119
        self.never_succeeded = True
102
120
        self.errorcodes = {}
275
293
 
276
294
            err = None
277
295
            try:
278
 
                h = urlopen(t+s)
 
296
                url,q = t.split('?',1)
 
297
                q += '&'+s
 
298
            except:
 
299
                url = t
 
300
                q = s
 
301
            try:
 
302
                h = urlopen(url+'?'+q)
279
303
                closer[0] = h.close
280
304
                data = h.read()
281
305
            except (IOError, error), e:
337
361
        p = r['peers']
338
362
        peers = []
339
363
        if type(p) == type(''):
 
364
            lenpeers = len(p)/6
 
365
        else:
 
366
            lenpeers = len(p)
 
367
        cflags = r.get('crypto_flags')
 
368
        if type(cflags) != type('') or len(cflags) != lenpeers:
 
369
            cflags = None
 
370
        if cflags is None:
 
371
            cflags = [None for i in xrange(lenpeers)]
 
372
        else:
 
373
            cflags = [ord(x) for x in cflags]
 
374
        if type(p) == type(''):
340
375
            for x in xrange(0, len(p), 6):
341
376
                ip = '.'.join([str(ord(i)) for i in p[x:x+4]])
342
377
                port = (ord(p[x+4]) << 8) | ord(p[x+5])
343
 
                peers.append(((ip, port), 0))
 
378
                peers.append(((ip, port), 0, cflags[int(x/6)]))
344
379
        else:
345
 
            for x in p:
346
 
                peers.append(((x['ip'].strip(), x['port']), x.get('peer id',0)))
 
380
            for i in xrange(len(p)):
 
381
                x = p[i]
 
382
                peers.append(((x['ip'].strip(), x['port']),
 
383
                              x.get('peer id',0), cflags[i]))
347
384
        ps = len(peers) + self.howmany()
348
385
        if ps < self.maxpeers:
349
386
            if self.doneflag.isSet():