I2P tweaks
This commit is contained in:
parent
244d076cab
commit
918a926c88
|
@ -185,15 +185,15 @@ class Connection(threading.Thread):
|
||||||
if len(shared.objects) > 0:
|
if len(shared.objects) > 0:
|
||||||
to_send = {vector for vector in shared.objects.keys() if shared.objects[vector].expires_time > time.time()}
|
to_send = {vector for vector in shared.objects.keys() if shared.objects[vector].expires_time > time.time()}
|
||||||
while len(to_send) > 0:
|
while len(to_send) > 0:
|
||||||
if len(to_send) > 50000:
|
if len(to_send) > 10000:
|
||||||
pack = random.sample(to_send, 50000)
|
# We limit size of inv messaged to 10000 entries because they might time out in very slow networks (I2P)
|
||||||
|
pack = random.sample(to_send, 10000)
|
||||||
self.send_queue.put(message.Inv(pack))
|
self.send_queue.put(message.Inv(pack))
|
||||||
to_send.difference_update(pack)
|
to_send.difference_update(pack)
|
||||||
else:
|
else:
|
||||||
self.send_queue.put(message.Inv(to_send))
|
self.send_queue.put(message.Inv(to_send))
|
||||||
to_send.clear()
|
to_send.clear()
|
||||||
addr = {structure.NetAddr(c.remote_version.services, c.host, c.port) for c in shared.connections.copy() if c.network != 'i2p' and not c.server and c.status == 'fully_established'}
|
addr = {structure.NetAddr(c.remote_version.services, c.host, c.port) for c in shared.connections.copy() if c.network != 'i2p' and not c.server and c.status == 'fully_established'}
|
||||||
addr = set()
|
|
||||||
if len(shared.node_pool) > 10:
|
if len(shared.node_pool) > 10:
|
||||||
addr.update({structure.NetAddr(1, a[0], a[1]) for a in random.sample(shared.node_pool, 10) if a[1] != 'i2p'})
|
addr.update({structure.NetAddr(1, a[0], a[1]) for a in random.sample(shared.node_pool, 10) if a[1] != 'i2p'})
|
||||||
if len(shared.unchecked_node_pool) > 10:
|
if len(shared.unchecked_node_pool) > 10:
|
||||||
|
@ -307,8 +307,8 @@ class Connection(threading.Thread):
|
||||||
if self.vectors_to_get:
|
if self.vectors_to_get:
|
||||||
self.vectors_to_get.difference_update(shared.objects.keys())
|
self.vectors_to_get.difference_update(shared.objects.keys())
|
||||||
if self.vectors_to_get:
|
if self.vectors_to_get:
|
||||||
if len(self.vectors_to_get) > 16:
|
if len(self.vectors_to_get) > 64:
|
||||||
pack = random.sample(self.vectors_to_get, 16)
|
pack = random.sample(self.vectors_to_get, 64)
|
||||||
self.send_queue.put(message.GetData(pack))
|
self.send_queue.put(message.GetData(pack))
|
||||||
self.vectors_to_get.difference_update(pack)
|
self.vectors_to_get.difference_update(pack)
|
||||||
else:
|
else:
|
||||||
|
@ -317,8 +317,8 @@ class Connection(threading.Thread):
|
||||||
|
|
||||||
def _send_objects(self):
|
def _send_objects(self):
|
||||||
if self.vectors_to_send:
|
if self.vectors_to_send:
|
||||||
if len(self.vectors_to_send) > 16:
|
if len(self.vectors_to_send) > 32:
|
||||||
to_send = random.sample(self.vectors_to_send, 16)
|
to_send = random.sample(self.vectors_to_send, 32)
|
||||||
self.vectors_to_send.difference_update(to_send)
|
self.vectors_to_send.difference_update(to_send)
|
||||||
else:
|
else:
|
||||||
to_send = self.vectors_to_send.copy()
|
to_send = self.vectors_to_send.copy()
|
||||||
|
|
|
@ -4,6 +4,7 @@ import logging
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
from i2p.util import receive_line, pub_from_priv
|
from i2p.util import receive_line, pub_from_priv
|
||||||
import shared
|
import shared
|
||||||
|
@ -63,9 +64,16 @@ class I2PController(threading.Thread):
|
||||||
assert self.dest_priv
|
assert self.dest_priv
|
||||||
|
|
||||||
def create_session(self):
|
def create_session(self):
|
||||||
self._send(b'SESSION CREATE STYLE=STREAM ID=' + self.nick + b' DESTINATION=' + self.dest_priv + b'\n')
|
self._send(b'SESSION CREATE STYLE=STREAM ID=' + self.nick +
|
||||||
|
b' inbound.length=' + str(shared.i2p_tunnel_length).encode() +
|
||||||
|
b' outbound.length=' + str(shared.i2p_tunnel_length).encode() +
|
||||||
|
b' DESTINATION=' + self.dest_priv + b'\n')
|
||||||
reply = self._receive_line().split()
|
reply = self._receive_line().split()
|
||||||
assert b'RESULT=OK' in reply
|
if b'RESULT=OK' not in reply:
|
||||||
|
logging.warning(reply)
|
||||||
|
logging.warning('We could not create I2P session, retrying in 5 seconds.')
|
||||||
|
time.sleep(5)
|
||||||
|
self.create_session()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.s.settimeout(1)
|
self.s.settimeout(1)
|
||||||
|
|
|
@ -47,8 +47,7 @@ class I2PListener(threading.Thread):
|
||||||
while not shared.shutting_down:
|
while not shared.shutting_down:
|
||||||
try:
|
try:
|
||||||
destination = self._receive_line().split()[0]
|
destination = self._receive_line().split()[0]
|
||||||
print(destination)
|
logging.info('Incoming I2P connection from: {}'.format(destination.decode()))
|
||||||
logging.info('Incoming I2P connection from: {}'.format(destination))
|
|
||||||
c = Connection(destination, 'i2p', self.s, 'i2p', True, destination)
|
c = Connection(destination, 'i2p', self.s, 'i2p', True, destination)
|
||||||
c.start()
|
c.start()
|
||||||
shared.connections.add(c)
|
shared.connections.add(c)
|
||||||
|
|
|
@ -30,6 +30,9 @@ def parse_arguments():
|
||||||
parser.add_argument('--trusted-peer', help='Specify a trusted peer we should connect to')
|
parser.add_argument('--trusted-peer', help='Specify a trusted peer we should connect to')
|
||||||
parser.add_argument('--connection-limit', help='Maximum number of connections', type=int)
|
parser.add_argument('--connection-limit', help='Maximum number of connections', type=int)
|
||||||
parser.add_argument('--i2p', help='Enable I2P support (uses SAMv3)', action='store_true')
|
parser.add_argument('--i2p', help='Enable I2P support (uses SAMv3)', action='store_true')
|
||||||
|
parser.add_argument('--i2p-tunnel-length', help='Length of I2P tunnels', type=int)
|
||||||
|
parser.add_argument('--i2p-sam-host', help='Host of I2P SAMv3 bridge')
|
||||||
|
parser.add_argument('--i2p-sam-port', help='Port of I2P SAMv3 bridge', type=int)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
if args.port:
|
if args.port:
|
||||||
|
@ -65,6 +68,12 @@ def parse_arguments():
|
||||||
shared.connection_limit = args.connection_limit
|
shared.connection_limit = args.connection_limit
|
||||||
if args.i2p:
|
if args.i2p:
|
||||||
shared.i2p_enabled = True
|
shared.i2p_enabled = True
|
||||||
|
if args.i2p_tunnel_length:
|
||||||
|
shared.i2p_tunnel_length = args.i2p_tunnel_length
|
||||||
|
if args.i2p_sam_host:
|
||||||
|
shared.i2p_sam_host = args.i2p_sam_host
|
||||||
|
if args.i2p_sam_port:
|
||||||
|
shared.i2p_sam_port = args.i2p_sam_port
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
@ -80,8 +80,11 @@ class Manager(threading.Thread):
|
||||||
continue
|
continue
|
||||||
if addr[1] == 'i2p' and shared.i2p_enabled:
|
if addr[1] == 'i2p' and shared.i2p_enabled:
|
||||||
if shared.i2p_session_nick:
|
if shared.i2p_session_nick:
|
||||||
|
try:
|
||||||
c = I2PDialer(addr[0], shared.i2p_session_nick, shared.i2p_sam_host, shared.i2p_sam_port).get_connection()
|
c = I2PDialer(addr[0], shared.i2p_session_nick, shared.i2p_sam_host, shared.i2p_sam_port).get_connection()
|
||||||
c.start()
|
c.start()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
logging.debug('We were going to connect to an I2P peer but our tunnels are not ready')
|
logging.debug('We were going to connect to an I2P peer but our tunnels are not ready')
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -26,6 +26,7 @@ header_length = 24
|
||||||
i2p_enabled = False
|
i2p_enabled = False
|
||||||
i2p_sam_host = '127.0.0.1'
|
i2p_sam_host = '127.0.0.1'
|
||||||
i2p_sam_port = 7656
|
i2p_sam_port = 7656
|
||||||
|
i2p_tunnel_length = 3
|
||||||
i2p_session_nick = b''
|
i2p_session_nick = b''
|
||||||
i2p_dest_pub = b''
|
i2p_dest_pub = b''
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user