Changeset View
Changeset View
Standalone View
Standalone View
test/functional/test_framework/mininode.py
Show First 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | def on_inv(self, conn, message): | ||||
want.inv.append(i) | want.inv.append(i) | ||||
if len(want.inv): | if len(want.inv): | ||||
conn.send_message(want) | conn.send_message(want) | ||||
def on_ping(self, conn, message): | def on_ping(self, conn, message): | ||||
conn.send_message(msg_pong(message.nonce)) | conn.send_message(msg_pong(message.nonce)) | ||||
def on_verack(self, conn, message): | def on_verack(self, conn, message): | ||||
conn.ver_recv = conn.ver_send | |||||
self.verack_received = True | self.verack_received = True | ||||
def on_version(self, conn, message): | def on_version(self, conn, message): | ||||
assert message.nVersion >= MIN_VERSION_SUPPORTED, "Version {} received. Test framework only supports versions greater than {}".format( | assert message.nVersion >= MIN_VERSION_SUPPORTED, "Version {} received. Test framework only supports versions greater than {}".format( | ||||
message.nVersion, MIN_VERSION_SUPPORTED) | message.nVersion, MIN_VERSION_SUPPORTED) | ||||
conn.send_message(msg_verack()) | conn.send_message(msg_verack()) | ||||
conn.nServices = message.nServices | conn.nServices = message.nServices | ||||
▲ Show 20 Lines • Show All 60 Lines • ▼ Show 20 Lines | def sync_with_ping(self, timeout=60): | ||||
self.ping_counter += 1 | self.ping_counter += 1 | ||||
class NodeConn(asyncore.dispatcher): | class NodeConn(asyncore.dispatcher): | ||||
"""The actual NodeConn class | """The actual NodeConn class | ||||
This class provides an interface for a p2p connection to a specified node.""" | This class provides an interface for a p2p connection to a specified node.""" | ||||
def __init__(self, dstaddr, dstport, rpc, callback, net="regtest", services=NODE_NETWORK, send_version=True): | def __init__(self, dstaddr, dstport, callback, net="regtest", services=NODE_NETWORK, send_version=True): | ||||
asyncore.dispatcher.__init__(self, map=mininode_socket_map) | asyncore.dispatcher.__init__(self, map=mininode_socket_map) | ||||
self.dstaddr = dstaddr | self.dstaddr = dstaddr | ||||
self.dstport = dstport | self.dstport = dstport | ||||
self.create_socket(socket.AF_INET, socket.SOCK_STREAM) | self.create_socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) | self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) | ||||
self.sendbuf = b"" | self.sendbuf = b"" | ||||
self.recvbuf = b"" | self.recvbuf = b"" | ||||
self.ver_send = 209 | |||||
self.ver_recv = 209 | |||||
self.last_sent = 0 | self.last_sent = 0 | ||||
self.state = "connecting" | self.state = "connecting" | ||||
self.network = net | self.network = net | ||||
self.cb = callback | self.cb = callback | ||||
self.disconnect = False | self.disconnect = False | ||||
self.nServices = 0 | self.nServices = 0 | ||||
if send_version: | if send_version: | ||||
# stuff version msg into sendbuf | # stuff version msg into sendbuf | ||||
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 | ||||
self.send_message(vt, True) | self.send_message(vt, True) | ||||
logger.info('Connecting to Bitcoin Node: %s:%d' % | logger.info('Connecting to Bitcoin Node: %s:%d' % | ||||
(self.dstaddr, self.dstport)) | (self.dstaddr, self.dstport)) | ||||
try: | try: | ||||
self.connect((dstaddr, dstport)) | self.connect((dstaddr, dstport)) | ||||
except: | except: | ||||
self.handle_close() | self.handle_close() | ||||
self.rpc = rpc | |||||
# Connection and disconnection methods | # Connection and disconnection methods | ||||
def handle_connect(self): | def handle_connect(self): | ||||
if self.state != "connected": | if self.state != "connected": | ||||
logger.debug("Connected & Listening: %s:%d" % | logger.debug("Connected & Listening: %s:%d" % | ||||
(self.dstaddr, self.dstport)) | (self.dstaddr, self.dstport)) | ||||
self.state = "connected" | self.state = "connected" | ||||
▲ Show 20 Lines • Show All 166 Lines • Show Last 20 Lines |