|
|
@ -3,6 +3,7 @@ Manipulations with knownNodes dictionary. |
|
|
|
""" |
|
|
|
|
|
|
|
import json |
|
|
|
import logging |
|
|
|
import os |
|
|
|
import pickle |
|
|
|
import threading |
|
|
@ -10,28 +11,33 @@ import time |
|
|
|
|
|
|
|
import state |
|
|
|
from bmconfigparser import BMConfigParser |
|
|
|
from debug import logger |
|
|
|
from network.node import Peer |
|
|
|
|
|
|
|
knownNodesLock = threading.Lock() |
|
|
|
"""Thread lock for knownnodes modification""" |
|
|
|
knownNodes = {stream: {} for stream in range(1, 4)} |
|
|
|
"""The dict of known nodes for each stream""" |
|
|
|
|
|
|
|
knownNodesTrimAmount = 2000 |
|
|
|
"""trim stream knownnodes dict to this length""" |
|
|
|
|
|
|
|
# forget a node after rating is this low |
|
|
|
knownNodesForgetRating = -0.5 |
|
|
|
"""forget a node after rating is this low""" |
|
|
|
|
|
|
|
knownNodesActual = False |
|
|
|
|
|
|
|
logger = logging.getLogger('default') |
|
|
|
|
|
|
|
DEFAULT_NODES = ( |
|
|
|
state.Peer('5.45.99.75', 8444), |
|
|
|
state.Peer('75.167.159.54', 8444), |
|
|
|
state.Peer('95.165.168.168', 8444), |
|
|
|
state.Peer('85.180.139.241', 8444), |
|
|
|
state.Peer('158.222.217.190', 8080), |
|
|
|
state.Peer('178.62.12.187', 8448), |
|
|
|
state.Peer('24.188.198.204', 8111), |
|
|
|
state.Peer('109.147.204.113', 1195), |
|
|
|
state.Peer('178.11.46.221', 8444) |
|
|
|
Peer('5.45.99.75', 8444), |
|
|
|
Peer('75.167.159.54', 8444), |
|
|
|
Peer('95.165.168.168', 8444), |
|
|
|
Peer('85.180.139.241', 8444), |
|
|
|
Peer('158.222.217.190', 8080), |
|
|
|
Peer('178.62.12.187', 8448), |
|
|
|
Peer('24.188.198.204', 8111), |
|
|
|
Peer('109.147.204.113', 1195), |
|
|
|
Peer('178.11.46.221', 8444) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
@ -57,19 +63,17 @@ def json_deserialize_knownnodes(source): |
|
|
|
for node in json.load(source): |
|
|
|
peer = node['peer'] |
|
|
|
info = node['info'] |
|
|
|
peer = state.Peer(str(peer['host']), peer.get('port', 8444)) |
|
|
|
peer = Peer(str(peer['host']), peer.get('port', 8444)) |
|
|
|
knownNodes[node['stream']][peer] = info |
|
|
|
|
|
|
|
if ( |
|
|
|
not (knownNodesActual or info.get('self')) and |
|
|
|
peer not in DEFAULT_NODES |
|
|
|
): |
|
|
|
if not (knownNodesActual |
|
|
|
or info.get('self')) and peer not in DEFAULT_NODES: |
|
|
|
knownNodesActual = True |
|
|
|
|
|
|
|
|
|
|
|
def pickle_deserialize_old_knownnodes(source): |
|
|
|
""" |
|
|
|
Unpickle source and reorganize knownnodes dict if it's in old format |
|
|
|
Unpickle source and reorganize knownnodes dict if it has old format |
|
|
|
the old format was {Peer:lastseen, ...} |
|
|
|
the new format is {Peer:{"lastseen":i, "rating":f}} |
|
|
|
""" |
|
|
@ -129,7 +133,7 @@ def readKnownNodes(): |
|
|
|
if onionhostname and ".onion" in onionhostname: |
|
|
|
onionport = config.safeGetInt('bitmessagesettings', 'onionport') |
|
|
|
if onionport: |
|
|
|
self_peer = state.Peer(onionhostname, onionport) |
|
|
|
self_peer = Peer(onionhostname, onionport) |
|
|
|
addKnownNode(1, self_peer, is_self=True) |
|
|
|
state.ownAddresses[self_peer] = True |
|
|
|
|
|
|
@ -182,7 +186,7 @@ def dns(): |
|
|
|
"""Add DNS names to knownnodes""" |
|
|
|
for port in [8080, 8444]: |
|
|
|
addKnownNode( |
|
|
|
1, state.Peer('bootstrap%s.bitmessage.org' % port, port)) |
|
|
|
1, Peer('bootstrap%s.bitmessage.org' % port, port)) |
|
|
|
|
|
|
|
|
|
|
|
def cleanupKnownNodes(): |
|
|
@ -208,8 +212,8 @@ def cleanupKnownNodes(): |
|
|
|
del knownNodes[stream][node] |
|
|
|
continue |
|
|
|
# scrap old nodes (age > 3 hours) with low rating |
|
|
|
if (age > 10800 and knownNodes[stream][node]["rating"] <= |
|
|
|
knownNodesForgetRating): |
|
|
|
if (age > 10800 and knownNodes[stream][node]["rating"] |
|
|
|
<= knownNodesForgetRating): |
|
|
|
needToWriteKnownNodesToDisk = True |
|
|
|
del knownNodes[stream][node] |
|
|
|
continue |
|
|
|