Implement I2P peers
This commit is contained in:
parent
a0cb3a430c
commit
5e57411c58
5 changed files with 125 additions and 6 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue