MCPcopy
hub / github.com/HelloZeroNet/ZeroNet / pex

Method pex

src/Peer/Peer.py:261–299  ·  view source on GitHub ↗
(self, site=None, need_num=5)

Source from the content-addressed store, hash-verified

259
260 # Request peer exchange from peer
261 def pex(self, site=None, need_num=5):
262 if not site:
263 site = self.site # If no site defined request peers for this site
264
265 # give back 5 connectible peers
266 packed_peers = helper.packPeers(self.site.getConnectablePeers(5, allow_private=False))
267 request = {"site": site.address, "peers": packed_peers["ipv4"], "need": need_num}
268 if packed_peers["onion"]:
269 request["peers_onion"] = packed_peers["onion"]
270 if packed_peers["ipv6"]:
271 request["peers_ipv6"] = packed_peers["ipv6"]
272 res = self.request("pex", request)
273 if not res or "error" in res:
274 return False
275 added = 0
276
277 # Remove unsupported peer types
278 if "peers_ipv6" in res and self.connection and "ipv6" not in self.connection.server.supported_ip_types:
279 del res["peers_ipv6"]
280
281 if "peers_onion" in res and self.connection and "onion" not in self.connection.server.supported_ip_types:
282 del res["peers_onion"]
283
284 # Add IPv4 + IPv6
285 for peer in itertools.chain(res.get("peers", []), res.get("peers_ipv6", [])):
286 address = helper.unpackAddress(peer)
287 if site.addPeer(*address, source="pex"):
288 added += 1
289
290 # Add Onion
291 for peer in res.get("peers_onion", []):
292 address = helper.unpackOnionAddress(peer)
293 if site.addPeer(*address, source="pex"):
294 added += 1
295
296 if added:
297 self.log("Added peers using pex: %s" % added)
298
299 return added
300
301 # List modified files since the date
302 # Return: {inner_path: modification date,...}

Callers 4

announcePexMethod · 0.80
needConnectionsMethod · 0.80
testPexMethod · 0.80
testPexMethod · 0.80

Calls 5

requestMethod · 0.95
logMethod · 0.95
getConnectablePeersMethod · 0.80
addPeerMethod · 0.80
getMethod · 0.45

Tested by 2

testPexMethod · 0.64
testPexMethod · 0.64