MCPcopy Create free account
hub / github.com/Bitmessage/PyBitmessage / _getPeer

Method _getPeer

src/class_outgoingSynSender.py:34–68  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

32 self.selfInitiatedConnections = selfInitiatedConnections
33
34 def _getPeer(self):
35 # If the user has specified a trusted peer then we'll only
36 # ever connect to that. Otherwise we'll pick a random one from
37 # the known nodes
38 if state.trustedPeer:
39 with knownnodes.knownNodesLock:
40 peer = state.trustedPeer
41 knownnodes.knownNodes[self.streamNumber][peer] = time.time()
42 else:
43 while not self._stopped:
44 try:
45 with knownnodes.knownNodesLock:
46 peer, = random.sample(knownnodes.knownNodes[self.streamNumber], 1)
47 priority = (183600 - (time.time() - knownnodes.knownNodes[self.streamNumber][peer])) / 183600 # 2 days and 3 hours
48 except ValueError: # no known nodes
49 self.stop.wait(1)
50 continue
51 if BMConfigParser().get('bitmessagesettings', 'socksproxytype') != 'none':
52 if peer.host.find(".onion") == -1:
53 priority /= 10 # hidden services have 10x priority over plain net
54 else:
55 # don't connect to self
56 if peer.host == BMConfigParser().get('bitmessagesettings', 'onionhostname') and peer.port == BMConfigParser().getint("bitmessagesettings", "onionport"):
57 continue
58 elif peer.host.find(".onion") != -1: # onion address and so proxy
59 continue
60 if priority <= 0.001: # everyone has at least this much priority
61 priority = 0.001
62 if (random.random() <= priority):
63 break
64 self.stop.wait(0.01) # prevent CPU hogging if something is broken
65 try:
66 return peer
67 except NameError:
68 return state.Peer('127.0.0.1', 8444)
69
70 def stopThread(self):
71 super(outgoingSynSender, self).stopThread()

Callers 1

runMethod · 0.95

Calls 3

BMConfigParserClass · 0.90
waitMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected