Use recent peers for P2P port checking
This commit is contained in:
parent
614a18913e
commit
57c042ef79
1 changed files with 8 additions and 7 deletions
|
@ -101,18 +101,19 @@ class FileServer(ConnectionServer):
|
||||||
res = None
|
res = None
|
||||||
if not site: # First run, has no any peers
|
if not site: # First run, has no any peers
|
||||||
return self.testOpenportPortchecker(port) # Fallback to centralized service
|
return self.testOpenportPortchecker(port) # Fallback to centralized service
|
||||||
for peer in site.peers.values():
|
peers = [peer for peer in site.getRecentPeers(10) if not peer.ip.endswith(".onion")]
|
||||||
if not peer.ip.endswith(".onion"): # Get all non-onion peers
|
|
||||||
peers.append(peer)
|
|
||||||
if len(peers) < 3: # Not enough peers
|
if len(peers) < 3: # Not enough peers
|
||||||
return self.testOpenportPortchecker(port) # Fallback to centralized service
|
return self.testOpenportPortchecker(port) # Fallback to centralized service
|
||||||
for retry in range(0, 3): # Try 3 peers
|
for retry in range(0, 3): # Try 3 peers
|
||||||
random_peer = random.choice(peers)
|
random_peer = random.choice(peers)
|
||||||
with gevent.Timeout(10.0, False): # 10 sec timeout, don't raise exception
|
with gevent.Timeout(10.0, False): # 10 sec timeout, don't raise exception
|
||||||
random_peer.connect()
|
if not random_peer.connection:
|
||||||
res = random_peer.request("checkport", {"port": port})
|
random_peer.connect()
|
||||||
if res is not None:
|
if random_peer.connection and random_peer.connection.handshake.get("rev") >= 2186:
|
||||||
break # All fine, exit from for loop
|
res = random_peer.request("checkport", {"port": port})
|
||||||
|
if res is not None:
|
||||||
|
break # All fine, exit from for loop
|
||||||
|
|
||||||
if res is None: # Nobody answered
|
if res is None: # Nobody answered
|
||||||
return self.testOpenportPortchecker(port) # Fallback to centralized service
|
return self.testOpenportPortchecker(port) # Fallback to centralized service
|
||||||
if res["status"] == "closed":
|
if res["status"] == "closed":
|
||||||
|
|
Loading…
Reference in a new issue