Refactor parent package dependency in network module #2255
|
@ -1,9 +1,18 @@
|
|||
"""
|
||||
Network subsystem package
|
||||
"""
|
||||
try:
|
||||
import networkdepsinterface
|
||||
except ImportError:
|
||||
from pybitmessage import networkdepsinterface
|
||||
|
||||
from .dandelion import Dandelion
|
||||
from .threads import StoppableThread
|
||||
|
||||
(
|
||||
state, queues, config, protocol,
|
||||
randomtrackingdict, addresses, paths) = networkdepsinterface.importParentPackageDepsToNetwork()
|
||||
|
||||
dandelion_ins = Dandelion()
|
||||
|
||||
__all__ = ["StoppableThread"]
|
||||
|
@ -11,7 +20,6 @@ __all__ = ["StoppableThread"]
|
|||
|
||||
def start(config, state):
|
||||
"""Start network threads"""
|
||||
import state
|
||||
from .announcethread import AnnounceThread
|
||||
import connectionpool # pylint: disable=relative-import
|
||||
from .addrthread import AddrThread
|
||||
|
|
|
@ -7,7 +7,7 @@ from six.moves import queue
|
|||
import connectionpool
|
||||
from helper_random import randomshuffle
|
||||
from protocol import assembleAddrMessage
|
||||
from queues import addrQueue # FIXME: init with queue
|
||||
from network import queues # FIXME: init with queue
|
||||
|
||||
from threads import StoppableThread
|
||||
|
||||
|
@ -21,7 +21,7 @@ class AddrThread(StoppableThread):
|
|||
chunk = []
|
||||
while True:
|
||||
try:
|
||||
data = addrQueue.get(False)
|
||||
data = queues.addrQueue.get(False)
|
||||
chunk.append(data)
|
||||
except queue.Empty:
|
||||
break
|
||||
|
@ -43,7 +43,7 @@ class AddrThread(StoppableThread):
|
|||
if filtered:
|
||||
i.append_write_buf(assembleAddrMessage(filtered))
|
||||
|
||||
addrQueue.iterate()
|
||||
queues.addrQueue.iterate()
|
||||
for i in range(len(chunk)):
|
||||
addrQueue.task_done()
|
||||
queues.addrQueue.task_done()
|
||||
self.stop.wait(1)
|
||||
|
|
|
@ -6,7 +6,7 @@ import threading
|
|||
import time
|
||||
|
||||
import network.asyncore_pollchoose as asyncore
|
||||
import state
|
||||
from network import state
|
||||
from threads import BusyError, nonBlocking
|
||||
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import time
|
|||
|
||||
# magic imports!
|
||||
import connectionpool
|
||||
from bmconfigparser import config
|
||||
from network import config
|
||||
from protocol import assembleAddrMessage
|
||||
|
||||
from node import Peer
|
||||
|
|
|
@ -4,8 +4,7 @@ BMObject and it's exceptions.
|
|||
import logging
|
||||
import time
|
||||
|
||||
import protocol
|
||||
import state
|
||||
from network import state, protocol
|
||||
import connectionpool
|
||||
from network import dandelion_ins
|
||||
from highlevelcrypto import calculateInventoryHash
|
||||
|
|
|
@ -11,13 +11,9 @@ import struct
|
|||
import time
|
||||
|
||||
# magic imports!
|
||||
import addresses
|
||||
import knownnodes
|
||||
import protocol
|
||||
import state
|
||||
from network import protocol, state, config, queues, addresses, dandelion_ins
|
||||
import connectionpool
|
||||
from bmconfigparser import config
|
||||
from queues import invQueue, objectProcessorQueue, portCheckerQueue
|
||||
from randomtrackingdict import RandomTrackingDict
|
||||
from network.advanceddispatcher import AdvancedDispatcher
|
||||
from network.bmobject import (
|
||||
|
@ -26,7 +22,6 @@ from network.bmobject import (
|
|||
BMObjectUnwantedStreamError
|
||||
)
|
||||
from network.proxy import ProxyError
|
||||
from network import dandelion_ins
|
||||
from node import Node, Peer
|
||||
from objectracker import ObjectTracker, missingObjects
|
||||
|
||||
|
@ -409,7 +404,7 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
|||
|
||||
try:
|
||||
self.object.checkObjectByType()
|
||||
objectProcessorQueue.put((
|
||||
queues.objectProcessorQueue.put((
|
||||
self.object.objectType, buffer(self.object.data))) # noqa: F821
|
||||
except BMObjectInvalidError:
|
||||
BMProto.stopDownloadingObject(self.object.inventoryHash, True)
|
||||
|
@ -431,7 +426,7 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
|||
)
|
||||
self.handleReceivedObject(
|
||||
self.object.streamNumber, self.object.inventoryHash)
|
||||
invQueue.put((
|
||||
queues.invQueue.put((
|
||||
self.object.streamNumber, self.object.inventoryHash,
|
||||
self.destination))
|
||||
return True
|
||||
|
@ -472,7 +467,7 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
|||
|
||||
def bm_command_portcheck(self):
|
||||
"""Incoming port check request, queue it."""
|
||||
portCheckerQueue.put(Peer(self.destination, self.peerNode.port))
|
||||
queues.portCheckerQueue.put(Peer(self.destination, self.peerNode.port))
|
||||
return True
|
||||
|
||||
def bm_command_ping(self):
|
||||
|
|
|
@ -6,10 +6,7 @@ import logging
|
|||
import random
|
||||
|
||||
import knownnodes
|
||||
import protocol
|
||||
import state
|
||||
from bmconfigparser import config
|
||||
from queues import queue, portCheckerQueue
|
||||
from network import protocol, state, config, queues
|
||||
|
||||
logger = logging.getLogger('default')
|
||||
|
||||
|
@ -34,10 +31,10 @@ def chooseConnection(stream):
|
|||
onionOnly = config.safeGetBoolean(
|
||||
"bitmessagesettings", "onionservicesonly")
|
||||
try:
|
||||
retval = portCheckerQueue.get(False)
|
||||
portCheckerQueue.task_done()
|
||||
retval = queues.portCheckerQueue.get(False)
|
||||
queues.portCheckerQueue.task_done()
|
||||
return retval
|
||||
except queue.Empty:
|
||||
except queues.queue.Empty:
|
||||
pass
|
||||
# with a probability of 0.5, connect to a discovered peer
|
||||
if random.choice((False, True)) and not haveOnion: # nosec B311
|
||||
|
|
|
@ -11,9 +11,7 @@ import time
|
|||
import asyncore_pollchoose as asyncore
|
||||
import helper_random
|
||||
import knownnodes
|
||||
import protocol
|
||||
import state
|
||||
from bmconfigparser import config
|
||||
from network import protocol, state, config
|
||||
from connectionchooser import chooseConnection
|
||||
from node import Peer
|
||||
from proxy import Proxy
|
||||
|
|
|
@ -2,12 +2,9 @@
|
|||
`DownloadThread` class definition
|
||||
"""
|
||||
import time
|
||||
import state
|
||||
import addresses
|
||||
from network import state, protocol, addresses, dandelion_ins
|
||||
import helper_random
|
||||
import protocol
|
||||
import connectionpool
|
||||
from network import dandelion_ins
|
||||
from objectracker import missingObjects
|
||||
from threads import StoppableThread
|
||||
|
||||
|
|
|
@ -5,12 +5,9 @@ import Queue
|
|||
import random
|
||||
from time import time
|
||||
|
||||
import addresses
|
||||
import protocol
|
||||
import state
|
||||
from network import protocol, state, queues, addresses
|
||||
import connectionpool
|
||||
from network import dandelion_ins
|
||||
from queues import invQueue
|
||||
from threads import StoppableThread
|
||||
|
||||
|
||||
|
@ -52,9 +49,9 @@ class InvThread(StoppableThread):
|
|||
chunk = []
|
||||
while True:
|
||||
# Dandelion fluff trigger by expiration
|
||||
handleExpiredDandelion(dandelion_ins.expire(invQueue))
|
||||
handleExpiredDandelion(dandelion_ins.expire(queues.invQueue))
|
||||
try:
|
||||
data = invQueue.get(False)
|
||||
data = queues.invQueue.get(False)
|
||||
chunk.append((data[0], data[1]))
|
||||
# locally generated
|
||||
if len(data) == 2 or data[2] is None:
|
||||
|
@ -101,9 +98,9 @@ class InvThread(StoppableThread):
|
|||
addresses.encodeVarint(
|
||||
len(stems)) + ''.join(stems)))
|
||||
|
||||
invQueue.iterate()
|
||||
queues.invQueue.iterate()
|
||||
for _ in range(len(chunk)):
|
||||
invQueue.task_done()
|
||||
queues.invQueue.task_done()
|
||||
|
||||
dandelion_ins.reRandomiseStems()
|
||||
|
||||
|
|
|
@ -15,8 +15,7 @@ try:
|
|||
except ImportError:
|
||||
from collections import Iterable
|
||||
|
||||
import state
|
||||
from bmconfigparser import config
|
||||
from network import state, config
|
||||
from network.node import Peer
|
||||
|
||||
state.Peer = Peer
|
||||
|
|
|
@ -3,7 +3,7 @@ A thread to handle network concerns
|
|||
"""
|
||||
import network.asyncore_pollchoose as asyncore
|
||||
import connectionpool
|
||||
from queues import excQueue
|
||||
from network import queues
|
||||
from threads import StoppableThread
|
||||
|
||||
|
||||
|
@ -16,7 +16,7 @@ class BMNetworkThread(StoppableThread):
|
|||
while not self._stopped:
|
||||
connectionpool.pool.loop()
|
||||
except Exception as e:
|
||||
excQueue.put((self.name, e))
|
||||
queues.excQueue.put((self.name, e))
|
||||
raise
|
||||
|
||||
def stopThread(self):
|
||||
|
|
|
@ -8,7 +8,7 @@ import time
|
|||
|
||||
import asyncore_pollchoose as asyncore
|
||||
from advanceddispatcher import AdvancedDispatcher
|
||||
from bmconfigparser import config
|
||||
from network import config
|
||||
from node import Peer
|
||||
|
||||
logger = logging.getLogger('default')
|
||||
|
|
|
@ -7,7 +7,7 @@ import socket
|
|||
|
||||
import connectionpool
|
||||
from network.advanceddispatcher import UnknownStateError
|
||||
from queues import receiveDataQueue
|
||||
from network import queues
|
||||
from threads import StoppableThread
|
||||
|
||||
|
||||
|
@ -20,7 +20,7 @@ class ReceiveQueueThread(StoppableThread):
|
|||
def run(self):
|
||||
while not self._stopped:
|
||||
try:
|
||||
dest = receiveDataQueue.get(block=True, timeout=1)
|
||||
dest = queues.receiveDataQueue.get(block=True, timeout=1)
|
||||
except Queue.Empty:
|
||||
continue
|
||||
|
||||
|
@ -38,7 +38,7 @@ class ReceiveQueueThread(StoppableThread):
|
|||
connection = connectionpool.pool.getConnectionByAddr(dest)
|
||||
# connection object not found
|
||||
except KeyError:
|
||||
receiveDataQueue.task_done()
|
||||
queues.receiveDataQueue.task_done()
|
||||
continue
|
||||
try:
|
||||
connection.process()
|
||||
|
@ -52,4 +52,4 @@ class ReceiveQueueThread(StoppableThread):
|
|||
self.logger.error('Socket error: %s', err)
|
||||
except: # noqa:E722
|
||||
self.logger.error('Error processing', exc_info=True)
|
||||
receiveDataQueue.task_done()
|
||||
queues.receiveDataQueue.task_done()
|
||||
|
|
|
@ -10,16 +10,11 @@ import socket
|
|||
import time
|
||||
|
||||
# magic imports!
|
||||
import addresses
|
||||
import helper_random
|
||||
import l10n
|
||||
import protocol
|
||||
import state
|
||||
from network import protocol, state, config, queues, addresses, dandelion_ins
|
||||
import connectionpool
|
||||
from bmconfigparser import config
|
||||
from highlevelcrypto import randomBytes
|
||||
from network import dandelion_ins
|
||||
from queues import invQueue, receiveDataQueue, UISignalQueue
|
||||
from tr import _translate
|
||||
|
||||
import asyncore_pollchoose as asyncore
|
||||
|
@ -109,7 +104,7 @@ class TCPConnection(BMProto, TLSDispatcher):
|
|||
max_known_nodes = max(
|
||||
len(knownnodes.knownNodes[x]) for x in knownnodes.knownNodes)
|
||||
delay = math.ceil(math.log(max_known_nodes + 2, 20)) * (
|
||||
0.2 + invQueue.queueCount / 2.0)
|
||||
0.2 + queues.invQueue.queueCount / 2.0)
|
||||
# take the stream with maximum amount of nodes
|
||||
# +2 is to avoid problems with log(0) and log(1)
|
||||
# 20 is avg connected nodes count
|
||||
|
@ -135,7 +130,7 @@ class TCPConnection(BMProto, TLSDispatcher):
|
|||
if BMProto.timeOffsetWrongCount > \
|
||||
maximumTimeOffsetWrongCount and \
|
||||
not self.fullyEstablished:
|
||||
UISignalQueue.put((
|
||||
queues.UISignalQueue.put((
|
||||
'updateStatusBar',
|
||||
_translate(
|
||||
"MainWindow",
|
||||
|
@ -158,8 +153,8 @@ class TCPConnection(BMProto, TLSDispatcher):
|
|||
"""Initiate inventory synchronisation."""
|
||||
if not self.isOutbound and not self.local:
|
||||
state.clientHasReceivedIncomingConnections = True
|
||||
UISignalQueue.put(('setStatusIcon', 'green'))
|
||||
UISignalQueue.put((
|
||||
queues.UISignalQueue.put(('setStatusIcon', 'green'))
|
||||
queues.UISignalQueue.put((
|
||||
'updateNetworkStatusTab', (self.isOutbound, True, self.destination)
|
||||
))
|
||||
self.antiIntersectionDelay(True)
|
||||
|
@ -169,7 +164,7 @@ class TCPConnection(BMProto, TLSDispatcher):
|
|||
knownnodes.increaseRating(self.destination)
|
||||
knownnodes.addKnownNode(
|
||||
self.streams, self.destination, time.time())
|
||||
dandelion_ins.maybeAddStem(self, invQueue)
|
||||
dandelion_ins.maybeAddStem(self, queues.invQueue)
|
||||
self.sendAddr()
|
||||
self.sendBigInv()
|
||||
|
||||
|
@ -271,12 +266,12 @@ class TCPConnection(BMProto, TLSDispatcher):
|
|||
connectionpool.pool.streams, dandelion_ins.enabled,
|
||||
False, nodeid=self.nodeid))
|
||||
self.connectedAt = time.time()
|
||||
receiveDataQueue.put(self.destination)
|
||||
queues.receiveDataQueue.put(self.destination)
|
||||
|
||||
def handle_read(self):
|
||||
"""Callback for reading from a socket"""
|
||||
TLSDispatcher.handle_read(self)
|
||||
receiveDataQueue.put(self.destination)
|
||||
queues.receiveDataQueue.put(self.destination)
|
||||
|
||||
def handle_write(self):
|
||||
"""Callback for writing to a socket"""
|
||||
|
@ -286,7 +281,7 @@ class TCPConnection(BMProto, TLSDispatcher):
|
|||
"""Callback for connection being closed."""
|
||||
host_is_global = self.isOutbound or not self.local and not state.socksIP
|
||||
if self.fullyEstablished:
|
||||
UISignalQueue.put((
|
||||
queues.UISignalQueue.put((
|
||||
'updateNetworkStatusTab',
|
||||
(self.isOutbound, False, self.destination)
|
||||
))
|
||||
|
|
|
@ -10,7 +10,7 @@ import sys
|
|||
import network.asyncore_pollchoose as asyncore
|
||||
import paths
|
||||
from network.advanceddispatcher import AdvancedDispatcher
|
||||
from queues import receiveDataQueue
|
||||
from network import queues
|
||||
|
||||
logger = logging.getLogger('default')
|
||||
|
||||
|
@ -216,5 +216,5 @@ class TLSDispatcher(AdvancedDispatcher):
|
|||
|
||||
self.bm_proto_reset()
|
||||
self.set_state("connection_fully_established")
|
||||
receiveDataQueue.put(self.destination)
|
||||
queues.receiveDataQueue.put(self.destination)
|
||||
return False
|
||||
|
|
|
@ -6,10 +6,8 @@ import socket
|
|||
import time
|
||||
|
||||
# magic imports!
|
||||
import protocol
|
||||
import state
|
||||
from network import protocol, state, queues
|
||||
import connectionpool
|
||||
from queues import receiveDataQueue
|
||||
|
||||
from bmproto import BMProto
|
||||
from node import Peer
|
||||
|
@ -138,7 +136,7 @@ class UDPSocket(BMProto): # pylint: disable=too-many-instance-attributes
|
|||
# self.local works correctly
|
||||
self.read_buf[0:] = recdata
|
||||
self.bm_proto_reset()
|
||||
receiveDataQueue.put(self.listening)
|
||||
queues.receiveDataQueue.put(self.listening)
|
||||
|
||||
def handle_write(self):
|
||||
try:
|
||||
|
|
|
@ -4,8 +4,7 @@
|
|||
import time
|
||||
|
||||
import helper_random
|
||||
import protocol
|
||||
import state
|
||||
from network import protocol, state
|
||||
import connectionpool
|
||||
from randomtrackingdict import RandomTrackingDict
|
||||
from network import dandelion_ins
|
||||
|
|
15
src/networkdepsinterface.py
Normal file
15
src/networkdepsinterface.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
|
||||
import state
|
||||
import queues
|
||||
import protocol
|
||||
import paths
|
||||
import randomtrackingdict
|
||||
import addresses
|
||||
from bmconfigparser import config
|
||||
|
||||
|
||||
def importParentPackageDepsToNetwork():
|
||||
"""
|
||||
Exports parent package dependencies to the network.
|
||||
"""
|
||||
return (state, queues, config, protocol, randomtrackingdict, addresses, paths)
|
Reference in New Issue
Block a user