mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-02-02 10:14:31 +00:00
[qa] mininode: Catch exceptions in got_data
This commit is contained in:
parent
fa2cea163b
commit
faaa3c9b65
@ -1252,43 +1252,46 @@ class NodeConn(asyncore.dispatcher):
|
|||||||
self.sendbuf = self.sendbuf[sent:]
|
self.sendbuf = self.sendbuf[sent:]
|
||||||
|
|
||||||
def got_data(self):
|
def got_data(self):
|
||||||
while True:
|
try:
|
||||||
if len(self.recvbuf) < 4:
|
while True:
|
||||||
return
|
if len(self.recvbuf) < 4:
|
||||||
if self.recvbuf[:4] != self.MAGIC_BYTES[self.network]:
|
|
||||||
raise ValueError("got garbage %s" % repr(self.recvbuf))
|
|
||||||
if self.ver_recv < 209:
|
|
||||||
if len(self.recvbuf) < 4 + 12 + 4:
|
|
||||||
return
|
return
|
||||||
command = self.recvbuf[4:4+12].split("\x00", 1)[0]
|
if self.recvbuf[:4] != self.MAGIC_BYTES[self.network]:
|
||||||
msglen = struct.unpack("<i", self.recvbuf[4+12:4+12+4])[0]
|
raise ValueError("got garbage %s" % repr(self.recvbuf))
|
||||||
checksum = None
|
if self.ver_recv < 209:
|
||||||
if len(self.recvbuf) < 4 + 12 + 4 + msglen:
|
if len(self.recvbuf) < 4 + 12 + 4:
|
||||||
return
|
return
|
||||||
msg = self.recvbuf[4+12+4:4+12+4+msglen]
|
command = self.recvbuf[4:4+12].split("\x00", 1)[0]
|
||||||
self.recvbuf = self.recvbuf[4+12+4+msglen:]
|
msglen = struct.unpack("<i", self.recvbuf[4+12:4+12+4])[0]
|
||||||
else:
|
checksum = None
|
||||||
if len(self.recvbuf) < 4 + 12 + 4 + 4:
|
if len(self.recvbuf) < 4 + 12 + 4 + msglen:
|
||||||
return
|
return
|
||||||
command = self.recvbuf[4:4+12].split("\x00", 1)[0]
|
msg = self.recvbuf[4+12+4:4+12+4+msglen]
|
||||||
msglen = struct.unpack("<i", self.recvbuf[4+12:4+12+4])[0]
|
self.recvbuf = self.recvbuf[4+12+4+msglen:]
|
||||||
checksum = self.recvbuf[4+12+4:4+12+4+4]
|
else:
|
||||||
if len(self.recvbuf) < 4 + 12 + 4 + 4 + msglen:
|
if len(self.recvbuf) < 4 + 12 + 4 + 4:
|
||||||
return
|
return
|
||||||
msg = self.recvbuf[4+12+4+4:4+12+4+4+msglen]
|
command = self.recvbuf[4:4+12].split("\x00", 1)[0]
|
||||||
th = sha256(msg)
|
msglen = struct.unpack("<i", self.recvbuf[4+12:4+12+4])[0]
|
||||||
h = sha256(th)
|
checksum = self.recvbuf[4+12+4:4+12+4+4]
|
||||||
if checksum != h[:4]:
|
if len(self.recvbuf) < 4 + 12 + 4 + 4 + msglen:
|
||||||
raise ValueError("got bad checksum " + repr(self.recvbuf))
|
return
|
||||||
self.recvbuf = self.recvbuf[4+12+4+4+msglen:]
|
msg = self.recvbuf[4+12+4+4:4+12+4+4+msglen]
|
||||||
if command in self.messagemap:
|
th = sha256(msg)
|
||||||
f = BytesIO(msg)
|
h = sha256(th)
|
||||||
t = self.messagemap[command]()
|
if checksum != h[:4]:
|
||||||
t.deserialize(f)
|
raise ValueError("got bad checksum " + repr(self.recvbuf))
|
||||||
self.got_message(t)
|
self.recvbuf = self.recvbuf[4+12+4+4+msglen:]
|
||||||
else:
|
if command in self.messagemap:
|
||||||
self.show_debug_msg("Unknown command: '" + command + "' " +
|
f = BytesIO(msg)
|
||||||
repr(msg))
|
t = self.messagemap[command]()
|
||||||
|
t.deserialize(f)
|
||||||
|
self.got_message(t)
|
||||||
|
else:
|
||||||
|
self.show_debug_msg("Unknown command: '" + command + "' " +
|
||||||
|
repr(msg))
|
||||||
|
except Exception as e:
|
||||||
|
print 'got_data:', repr(e)
|
||||||
|
|
||||||
def send_message(self, message, pushbuf=False):
|
def send_message(self, message, pushbuf=False):
|
||||||
if self.state != "connected" and not pushbuf:
|
if self.state != "connected" and not pushbuf:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user