Changeset View
Changeset View
Standalone View
Standalone View
test/functional/abc-invalid-message.py
Show All 17 Lines | from test_framework.mininode import ( | ||||
network_thread_start, | network_thread_start, | ||||
P2PInterface, | P2PInterface, | ||||
) | ) | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.util import wait_until | from test_framework.util import wait_until | ||||
def msg_bad_checksum(connection, original_message): | def msg_bad_checksum(connection, original_message): | ||||
message_data = bytearray(connection.format_message(original_message)) | message_data = bytearray(connection._build_message(original_message)) | ||||
data = original_message.serialize() | data = original_message.serialize() | ||||
i = 0 | i = 0 | ||||
i += len(MAGIC_BYTES[connection.network]) | i += len(MAGIC_BYTES[connection.network]) | ||||
i += 12 | i += 12 | ||||
i += len(struct.pack("<I", len(data))) | i += len(struct.pack("<I", len(data))) | ||||
# Make the checksum invalid | # Make the checksum invalid | ||||
message_data[i] = message_data[i] ^ 0xAA | message_data[i] = message_data[i] ^ 0xAA | ||||
return message_data | return message_data | ||||
class BadVersionP2PInterface(P2PInterface): | class BadVersionP2PInterface(P2PInterface): | ||||
def peer_connect(self, *args, services=NODE_NETWORK, send_version=False, **kwargs): | def peer_connect(self, *args, services=NODE_NETWORK, send_version=False, **kwargs): | ||||
super().peer_connect(*args, send_version=send_version, **kwargs) | super().peer_connect(*args, send_version=send_version, **kwargs) | ||||
# Send version message with invalid checksum | # Send version message with invalid checksum | ||||
vt = msg_version() | vt = msg_version() | ||||
vt.nServices = services | vt.nServices = services | ||||
vt.addrTo.ip = self.dstaddr | vt.addrTo.ip = self.dstaddr | ||||
vt.addrTo.port = self.dstport | vt.addrTo.port = self.dstport | ||||
vt.addrFrom.ip = "0.0.0.0" | vt.addrFrom.ip = "0.0.0.0" | ||||
vt.addrFrom.port = 0 | vt.addrFrom.port = 0 | ||||
invalid_vt = msg_bad_checksum(self, vt) | invalid_vt = msg_bad_checksum(self, vt) | ||||
self.send_raw_message(invalid_vt, True) | # Will be sent right after handle_connect | ||||
self.sendbuf = invalid_vt | |||||
class InvalidMessageTest(BitcoinTestFramework): | class InvalidMessageTest(BitcoinTestFramework): | ||||
def set_test_params(self): | def set_test_params(self): | ||||
self.setup_clean_chain = False | self.setup_clean_chain = False | ||||
self.num_nodes = 2 | self.num_nodes = 2 | ||||
def run_test(self): | def run_test(self): | ||||
▲ Show 20 Lines • Show All 43 Lines • Show Last 20 Lines |