From 42495a9914fbfbf2146a04c4f5983ae08f77bda9 Mon Sep 17 00:00:00 2001 From: shortcutme Date: Sun, 20 Jan 2019 16:22:32 +0100 Subject: [PATCH] Support ipv6 in Pex request --- src/File/FileRequest.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/File/FileRequest.py b/src/File/FileRequest.py index d3c28fcf..97dae29b 100644 --- a/src/File/FileRequest.py +++ b/src/File/FileRequest.py @@ -2,6 +2,7 @@ import os import time import json +import collections import itertools import socket @@ -284,13 +285,13 @@ class FileRequest(object): connected_peer.connect(self.connection) # Assign current connection to peer # Add sent peers to site - for packed_address in params.get("peers", []): + for packed_address in itertools.chain(params.get("peers", []), params.get("peers_ipv6", [])): address = helper.unpackAddress(packed_address) got_peer_keys.append("%s:%s" % address) if site.addPeer(*address, source="pex"): added += 1 - # Add sent peers to site + # Add sent onion peers to site for packed_address in params.get("peers_onion", []): address = helper.unpackOnionAddress(packed_address) got_peer_keys.append("%s:%s" % address) @@ -298,21 +299,21 @@ class FileRequest(object): added += 1 # Send back peers that is not in the sent list and connectable (not port 0) - packed_peers = helper.packPeers(site.getConnectablePeers(params["need"], got_peer_keys, allow_private=False)) + packed_peers = helper.packPeers(site.getConnectablePeers(params["need"], ignore=got_peer_keys, allow_private=False)) if added: site.worker_manager.onPeers() if config.verbose: self.log.debug( "Added %s peers to %s using pex, sending back %s" % - (added, site, len(packed_peers["ip4"]) + len(packed_peers["onion"])) + (added, site, {key: len(val) for key, val in packed_peers.iteritems()}) ) - back = {} - if packed_peers["ip4"]: - back["peers"] = packed_peers["ip4"] - if packed_peers["onion"]: - back["peers_onion"] = packed_peers["onion"] + back = { + "peers": packed_peers["ipv4"], + "peers_ipv6": packed_peers["ipv6"], + "peers_onion": packed_peers["onion"] + } self.response(back)