Changeset View
Changeset View
Standalone View
Standalone View
test/functional/test_framework/mininode.py
Show First 20 Lines • Show All 187 Lines • ▼ Show 20 Lines | def _on_data(self): | ||||
with mininode_lock: | with mininode_lock: | ||||
if len(self.recvbuf) < 4: | if len(self.recvbuf) < 4: | ||||
return None | return None | ||||
if self.recvbuf[:4] != MAGIC_BYTES[self.network]: | if self.recvbuf[:4] != MAGIC_BYTES[self.network]: | ||||
raise ValueError( | raise ValueError( | ||||
"got garbage {}".format(repr(self.recvbuf))) | "got garbage {}".format(repr(self.recvbuf))) | ||||
if len(self.recvbuf) < 4 + 12 + 4 + 4: | if len(self.recvbuf) < 4 + 12 + 4 + 4: | ||||
return None | return None | ||||
command = self.recvbuf[4:4+12].split(b"\x00", 1)[0] | command = self.recvbuf[4:4 + 12].split(b"\x00", 1)[0] | ||||
msglen = struct.unpack("<i", self.recvbuf[4+12:4+12+4])[0] | msglen = struct.unpack( | ||||
"<i", self.recvbuf[4 + 12:4 + 12 + 4])[0] | |||||
checksum = self.recvbuf[4+12+4:4+12+4+4] | checksum = self.recvbuf[4 + 12 + 4:4 + 12 + 4 + 4] | ||||
if len(self.recvbuf) < 4 + 12 + 4 + 4 + msglen: | if len(self.recvbuf) < 4 + 12 + 4 + 4 + msglen: | ||||
return None | return None | ||||
msg = self.recvbuf[4+12+4+4:4+12+4+4+msglen] | msg = self.recvbuf[4 + 12 + 4 + 4:4 + 12 + 4 + 4 + msglen] | ||||
h = sha256(sha256(msg)) | h = sha256(sha256(msg)) | ||||
if checksum != h[:4]: | if checksum != h[:4]: | ||||
raise ValueError("got bad checksum " + repr(self.recvbuf)) | raise ValueError("got bad checksum " + repr(self.recvbuf)) | ||||
self.recvbuf = self.recvbuf[4+12+4+4+msglen:] | self.recvbuf = self.recvbuf[4 + 12 + 4 + 4 + msglen:] | ||||
if command not in MESSAGEMAP: | if command not in MESSAGEMAP: | ||||
raise ValueError("Received unknown command from {}:{}: '{}' {}".format( | raise ValueError("Received unknown command from {}:{}: '{}' {}".format( | ||||
self.dstaddr, self.dstport, command, repr(msg))) | self.dstaddr, self.dstport, command, repr(msg))) | ||||
f = BytesIO(msg) | f = BytesIO(msg) | ||||
m = MESSAGEMAP[command]() | m = MESSAGEMAP[command]() | ||||
m.deserialize(f) | m.deserialize(f) | ||||
self._log_message("receive", m) | self._log_message("receive", m) | ||||
return m | return m | ||||
▲ Show 20 Lines • Show All 426 Lines • Show Last 20 Lines |