(self)
| 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() |
no test coverage detected