Asyncore updates
- fix crash in inv thread - more prints changed into logger - minor fixes
This commit is contained in:
parent
c85d52b8e8
commit
65bb6648e7
|
@ -97,7 +97,7 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
||||||
logger.debug("Bad checksum, ignoring")
|
logger.debug("Bad checksum, ignoring")
|
||||||
self.invalid = True
|
self.invalid = True
|
||||||
retval = True
|
retval = True
|
||||||
if not self.fullyEstablished and self.command not in ("version", "verack"):
|
if not self.fullyEstablished and self.command not in ("error", "version", "verack"):
|
||||||
logger.error("Received command %s before connection was fully established, ignoring", self.command)
|
logger.error("Received command %s before connection was fully established, ignoring", self.command)
|
||||||
self.invalid = True
|
self.invalid = True
|
||||||
if not self.invalid:
|
if not self.invalid:
|
||||||
|
|
|
@ -51,18 +51,16 @@ class InvThread(threading.Thread, StoppableThread):
|
||||||
continue
|
continue
|
||||||
if len(hashes) > 0:
|
if len(hashes) > 0:
|
||||||
connection.writeQueue.put(protocol.CreatePacket('inv', addresses.encodeVarint(len(hashes)) + b"".join(hashes)))
|
connection.writeQueue.put(protocol.CreatePacket('inv', addresses.encodeVarint(len(hashes)) + b"".join(hashes)))
|
||||||
self.collectionOfInvs[iterator] = []
|
self.collectionOfInvs[iterator] = {}
|
||||||
iterator += 1
|
iterator += 1
|
||||||
iterator %= InvThread.size
|
iterator %= InvThread.size
|
||||||
self.stop.wait(1)
|
self.stop.wait(1)
|
||||||
|
|
||||||
def holdHash(self, stream, hash):
|
def holdHash(self, stream, hash):
|
||||||
iter = random.randrange(0, InvThread.size)
|
i = random.randrange(0, InvThread.size)
|
||||||
try:
|
if stream not in self.collectionOfInvs[i]:
|
||||||
self.collectionOfInvs[iter][stream].append(hash)
|
self.collectionOfInvs[i][stream] = []
|
||||||
except KeyError, IndexError:
|
self.collectionOfInvs[i][stream].append(hash)
|
||||||
self.collectionOfInvs[iter][stream] = []
|
|
||||||
self.collectionOfInvs[iter][stream].append(hash)
|
|
||||||
|
|
||||||
def hasHash(self, hash):
|
def hasHash(self, hash):
|
||||||
for streamlist in self.collectionOfInvs:
|
for streamlist in self.collectionOfInvs:
|
||||||
|
|
|
@ -19,7 +19,6 @@ class BMNetworkThread(threading.Thread, StoppableThread):
|
||||||
BMConnectionPool().loop()
|
BMConnectionPool().loop()
|
||||||
|
|
||||||
def stopThread(self):
|
def stopThread(self):
|
||||||
super(BMNetworkThread, self).stopThread()
|
|
||||||
for i in BMConnectionPool().listeningSockets:
|
for i in BMConnectionPool().listeningSockets:
|
||||||
try:
|
try:
|
||||||
i.close()
|
i.close()
|
||||||
|
@ -38,3 +37,4 @@ class BMNetworkThread(threading.Thread, StoppableThread):
|
||||||
|
|
||||||
# just in case
|
# just in case
|
||||||
asyncore.close_all()
|
asyncore.close_all()
|
||||||
|
super(BMNetworkThread, self).stopThread()
|
||||||
|
|
|
@ -3,7 +3,6 @@ from binascii import hexlify
|
||||||
import hashlib
|
import hashlib
|
||||||
import math
|
import math
|
||||||
import time
|
import time
|
||||||
from pprint import pprint
|
|
||||||
import socket
|
import socket
|
||||||
import struct
|
import struct
|
||||||
import random
|
import random
|
||||||
|
@ -107,7 +106,7 @@ class UDPSocket(BMProto):
|
||||||
remoteport = port
|
remoteport = port
|
||||||
if remoteport is False:
|
if remoteport is False:
|
||||||
return
|
return
|
||||||
print "received peer discovery from %s:%i (port %i):" % (self.destination.host, self.destination.port, remoteport)
|
logger.debug("received peer discovery from %s:%i (port %i):", self.destination.host, self.destination.port, remoteport)
|
||||||
if self.local:
|
if self.local:
|
||||||
peerDiscoveryQueue.put(state.Peer(self.destination.host, remoteport))
|
peerDiscoveryQueue.put(state.Peer(self.destination.host, remoteport))
|
||||||
return True
|
return True
|
||||||
|
@ -140,7 +139,7 @@ class UDPSocket(BMProto):
|
||||||
try:
|
try:
|
||||||
(recdata, addr) = self.socket.recvfrom(AdvancedDispatcher._buf_len)
|
(recdata, addr) = self.socket.recvfrom(AdvancedDispatcher._buf_len)
|
||||||
except socket.error as e:
|
except socket.error as e:
|
||||||
print "socket error: %s" % (str(e))
|
logger.error("socket error: %s", str(e))
|
||||||
return
|
return
|
||||||
|
|
||||||
self.destination = state.Peer(addr[0], addr[1])
|
self.destination = state.Peer(addr[0], addr[1])
|
||||||
|
@ -149,23 +148,20 @@ class UDPSocket(BMProto):
|
||||||
self.local = True
|
self.local = True
|
||||||
else:
|
else:
|
||||||
self.local = False
|
self.local = False
|
||||||
print "read %ib" % (len(recdata))
|
|
||||||
# overwrite the old buffer to avoid mixing data and so that self.local works correctly
|
# overwrite the old buffer to avoid mixing data and so that self.local works correctly
|
||||||
self.read_buf = recdata
|
self.read_buf = recdata
|
||||||
self.bm_proto_reset()
|
self.bm_proto_reset()
|
||||||
self.process()
|
self.process()
|
||||||
|
|
||||||
def handle_write(self):
|
def handle_write(self):
|
||||||
# print "handling write"
|
|
||||||
try:
|
try:
|
||||||
data = self.writeQueue.get(False)
|
data = self.writeQueue.get(False)
|
||||||
except Queue.Empty:
|
except Queue.Empty:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
retval = self.socket.sendto(data, ('<broadcast>', UDPSocket.port))
|
retval = self.socket.sendto(data, ('<broadcast>', UDPSocket.port))
|
||||||
#print "broadcasted %ib" % (retval)
|
|
||||||
except socket.error as e:
|
except socket.error as e:
|
||||||
print "socket error on sendato: %s" % (e)
|
logger.error("socket error on sendato: %s", str(e))
|
||||||
self.writeQueue.task_done()
|
self.writeQueue.task_done()
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user