Show
Ignore:
Timestamp:
02/15/2008 03:04:41 PM (8 months ago)
Author:
dave
Message:

Fix in example python that causes incorrect results when returned peer
list wraps end of tracker peer list.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • dotorg/trunk/html/beps/bep_0008.rst

    r10836 r10851  
    432432    response['iv'] = iv 
    433433    numwant = min(numwant, MAX_PEERS) 
    434     if numwant > num_peers: 
     434    if numwant >= num_peers: 
    435435      response['peers'] = obfuscated_tracker_peer_list 
    436436      return response 
    437     i = randint(0,num_peers) 
    438     response['i'] = xor(i,x)  
     437   
     438    i = randint(0,num_peers-numwant) 
     439    response['i'] = xor(i,x) 
    439440    response['n'] = n_xor_y 
     441    # peers at end of tracker peer list have lower probability of being picked, 
     442    # but this requires only one copy. 
    440443    response['peers'] = obfuscated_tracker_peer_list[i*6:(i+numwant)*6] 
    441     if len(response['peers']) < numwant * 6: 
    442       r = numwant - len(response['peers']) / 6 
    443       response['peers'] = response['peers'] + obfuscated_tracker_peer_list[:r]  
    444     return response  
     444    return response 
    445445   
    446446  init()