Implement I2P peers

This commit is contained in:
str4d 2016-07-31 14:56:42 +12:00
parent a0cb3a430c
commit 5e57411c58
5 changed files with 125 additions and 6 deletions

View file

@ -105,6 +105,8 @@ class Peer(object):
def packMyAddress(self):
if self.ip.endswith(".onion"):
return helper.packOnionAddress(self.ip, self.port)
elif self.ip.endswith(".i2p"):
return helper.packI2PAddress(self.ip, self.port)
else:
return helper.packAddress(self.ip, self.port)
@ -241,6 +243,8 @@ class Peer(object):
request = {"site": site.address, "peers": packed_peers["ip4"], "need": need_num}
if packed_peers["onion"]:
request["peers_onion"] = packed_peers["onion"]
if packed_peers["i2p"]:
request["peers_i2p"] = packed_peers["i2p"]
res = self.request("pex", request)
if not res or "error" in res:
return False
@ -255,6 +259,11 @@ class Peer(object):
address = helper.unpackOnionAddress(peer)
if site.addPeer(*address):
added += 1
# I2P
for peer in res.get("peers_i2p", []):
address = helper.unpackI2PAddress(peer)
if site.addPeer(*address):
added += 1
if added:
self.log("Added peers using pex: %s" % added)
@ -292,6 +301,11 @@ class Peer(object):
if not hash in back:
back[hash] = []
back[hash] += map(helper.unpackOnionAddress, onion_peers)
# Unpack I2P dest
for hash, i2p_peers in res.get("peers_i2p", {}).items()[0:30]:
if not hash in back:
back[hash] = []
back[hash] += map(helper.unpackI2PAddress, i2p_peers)
return back