Peter Surda
a0bbd21efc
- outbound peers now have a rating - it's also shown in the network status tab - currently it's between -1 to +1, changes by 0.1 steps and uses a hyperbolic function 0.05/(1.0 - rating) to convert rating to probability with which we should connect to that node when randomly chosen - it increases when we successfully establish a full outbound connection to a node, and decreases when we fail to do that - onion nodes have priority when using SOCKS
83 lines
3.3 KiB
Python
83 lines
3.3 KiB
Python
import pickle
|
|
import socket
|
|
from struct import *
|
|
import time
|
|
import random
|
|
import sys
|
|
from time import strftime, localtime
|
|
import state
|
|
|
|
def createDefaultKnownNodes(appdata):
|
|
############## Stream 1 ################
|
|
stream1 = {}
|
|
|
|
#stream1[state.Peer('2604:2000:1380:9f:82e:148b:2746:d0c7', 8080)] = int(time.time())
|
|
stream1[state.Peer('5.45.99.75', 8444)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('75.167.159.54', 8444)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('95.165.168.168', 8444)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('85.180.139.241', 8444)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('158.222.217.190', 8080)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('178.62.12.187', 8448)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('24.188.198.204', 8111)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('109.147.204.113', 1195)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
stream1[state.Peer('178.11.46.221', 8444)] = {"lastseen": int(time.time()), "rating": 0, "self": False}
|
|
|
|
############# Stream 2 #################
|
|
stream2 = {}
|
|
# None yet
|
|
|
|
############# Stream 3 #################
|
|
stream3 = {}
|
|
# None yet
|
|
|
|
allKnownNodes = {}
|
|
allKnownNodes[1] = stream1
|
|
allKnownNodes[2] = stream2
|
|
allKnownNodes[3] = stream3
|
|
|
|
#print stream1
|
|
#print allKnownNodes
|
|
|
|
with open(appdata + 'knownnodes.dat', 'wb') as output:
|
|
# Pickle dictionary using protocol 0.
|
|
pickle.dump(allKnownNodes, output)
|
|
|
|
return allKnownNodes
|
|
|
|
def readDefaultKnownNodes(appdata):
|
|
pickleFile = open(appdata + 'knownnodes.dat', 'rb')
|
|
knownNodes = pickle.load(pickleFile)
|
|
pickleFile.close()
|
|
for stream, storedValue in knownNodes.items():
|
|
for host,value in storedValue.items():
|
|
try:
|
|
# Old knownNodes format.
|
|
port, storedtime = value
|
|
except:
|
|
# New knownNodes format.
|
|
host, port = host
|
|
storedtime = value
|
|
print host, '\t', port, '\t', unicode(strftime('%a, %d %b %Y %I:%M %p',localtime(storedtime)),'utf-8')
|
|
|
|
if __name__ == "__main__":
|
|
|
|
APPNAME = "PyBitmessage"
|
|
from os import path, environ
|
|
if sys.platform == 'darwin':
|
|
from AppKit import NSSearchPathForDirectoriesInDomains # @UnresolvedImport
|
|
# http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSSearchPathForDirectoriesInDomains
|
|
# NSApplicationSupportDirectory = 14
|
|
# NSUserDomainMask = 1
|
|
# True for expanding the tilde into a fully qualified path
|
|
appdata = path.join(NSSearchPathForDirectoriesInDomains(14, 1, True)[0], APPNAME) + '/'
|
|
elif 'win' in sys.platform:
|
|
appdata = path.join(environ['APPDATA'], APPNAME) + '\\'
|
|
else:
|
|
appdata = path.expanduser(path.join("~", "." + APPNAME + "/"))
|
|
|
|
|
|
print 'New list of all known nodes:', createDefaultKnownNodes(appdata)
|
|
readDefaultKnownNodes(appdata)
|
|
|
|
|