mirror of
https://github.com/yzernik/squeaknode.git
synced 2026-08-13 12:33:25 +02:00
Refactor handle get data msg (#1895)
* Refactor handle get squeaks in connection * Refactor handle get data in connection * Remove old commented code * Handle notfound response when not able to find squeak or secret key
This commit is contained in:
parent
0ecb73fac3
commit
47ebb3c49f
1 changed files with 24 additions and 51 deletions
|
|
@ -32,7 +32,6 @@ from squeak.messages import msg_pong
|
|||
from squeak.messages import MSG_SECRET_KEY
|
||||
from squeak.messages import MSG_SQUEAK
|
||||
from squeak.messages import msg_squeak
|
||||
from squeak.messages import MsgSerializable
|
||||
|
||||
from squeaknode.core.crypto import generate_ping_nonce
|
||||
from squeaknode.core.offer import Offer
|
||||
|
|
@ -43,7 +42,6 @@ from squeaknode.node.network_handler import NetworkHandler
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
EMPTY_HASH = b'\x00' * 32
|
||||
HANDSHAKE_TIMEOUT = 30
|
||||
PING_TIMEOUT = 60
|
||||
PONG_TIMEOUT = 30
|
||||
|
|
@ -145,8 +143,6 @@ class Connection(object):
|
|||
self.handle_getdata(msg)
|
||||
elif msg.command == b'notfound':
|
||||
self.handle_notfound(msg)
|
||||
# elif msg.command == b'offer':
|
||||
# self.handle_offer(msg)
|
||||
elif msg.command == b'secretkey':
|
||||
self.handle_secret_key(msg)
|
||||
elif msg.command == b'subscribe':
|
||||
|
|
@ -187,14 +183,35 @@ class Connection(object):
|
|||
def handle_getdata(self, msg):
|
||||
invs = msg.inv
|
||||
for inv in invs:
|
||||
reply_msg = self._get_inv_reply(inv)
|
||||
self.peer.send_msg(reply_msg)
|
||||
if inv.type == MSG_SQUEAK:
|
||||
squeak = self.network_handler.get_squeak(inv.hash)
|
||||
if squeak is None:
|
||||
reply_msg = msg_notfound(inv=[inv])
|
||||
self.peer.send_msg(reply_msg)
|
||||
else:
|
||||
reply_msg = msg_squeak(squeak=squeak)
|
||||
self.peer.send_msg(reply_msg)
|
||||
if inv.type == MSG_SECRET_KEY:
|
||||
reply = self.network_handler.get_secret_key_reply(
|
||||
inv.hash,
|
||||
self.peer.remote_address,
|
||||
)
|
||||
if reply is None:
|
||||
reply_msg = msg_notfound(inv=[inv])
|
||||
self.peer.send_msg(reply_msg)
|
||||
else:
|
||||
reply_msg = reply.get_msg()
|
||||
self.peer.send_msg(reply_msg)
|
||||
|
||||
def handle_notfound(self, msg):
|
||||
pass
|
||||
|
||||
def handle_getsqueaks(self, msg):
|
||||
self._send_reply_invs(msg.locator)
|
||||
locator = msg.locator
|
||||
for interest in locator.vInterested:
|
||||
reply_invs = self.network_handler.get_reply_invs(interest)
|
||||
inv_msg = msg_inv(inv=reply_invs)
|
||||
self.peer.send_msg(inv_msg)
|
||||
|
||||
def handle_squeak(self, msg):
|
||||
squeak = msg.squeak
|
||||
|
|
@ -202,19 +219,6 @@ class Connection(object):
|
|||
if saved_squeak_hash is not None:
|
||||
self.network_handler.request_offers(saved_squeak_hash)
|
||||
|
||||
# def handle_offer(self, msg):
|
||||
# offer = Offer(
|
||||
# squeak_hash=msg.hashSqk,
|
||||
# nonce=msg.nonce,
|
||||
# payment_request=msg.strPaymentInfo.decode('utf-8'),
|
||||
# host=msg.host.decode('utf-8'),
|
||||
# port=msg.port,
|
||||
# )
|
||||
# self.network_handler.save_received_offer(
|
||||
# offer,
|
||||
# self.peer.remote_address,
|
||||
# )
|
||||
|
||||
def handle_secret_key(self, msg):
|
||||
if msg.has_secret_key():
|
||||
self.network_handler.unlock_squeak(
|
||||
|
|
@ -235,39 +239,8 @@ class Connection(object):
|
|||
)
|
||||
|
||||
def handle_subscribe(self, msg):
|
||||
if msg.protover < 60003:
|
||||
self._send_reply_invs(msg.locator)
|
||||
self.peer.set_remote_subscription(msg.locator)
|
||||
|
||||
def _send_reply_invs(self, locator):
|
||||
for interest in locator.vInterested:
|
||||
reply_invs = self.network_handler.get_reply_invs(interest)
|
||||
inv_msg = msg_inv(inv=reply_invs)
|
||||
self.peer.send_msg(inv_msg)
|
||||
|
||||
def _get_inv_reply(self, inv) -> MsgSerializable:
|
||||
if inv.type == MSG_SQUEAK:
|
||||
return self._get_inv_reply_for_squeak(inv)
|
||||
if inv.type == MSG_SECRET_KEY:
|
||||
return self._get_inv_reply_for_secret_key(inv)
|
||||
raise Exception("Uknown inv type.")
|
||||
|
||||
def _get_inv_reply_for_squeak(self, inv) -> MsgSerializable:
|
||||
squeak = self.network_handler.get_squeak(inv.hash)
|
||||
if squeak is not None:
|
||||
return msg_squeak(squeak=squeak)
|
||||
else:
|
||||
return msg_notfound(inv=[inv])
|
||||
|
||||
def _get_inv_reply_for_secret_key(self, inv) -> MsgSerializable:
|
||||
resp = self.network_handler.get_secret_key_reply(
|
||||
inv.hash,
|
||||
self.peer.remote_address,
|
||||
)
|
||||
if resp is None:
|
||||
return msg_notfound(inv=[inv])
|
||||
return resp.get_msg()
|
||||
|
||||
|
||||
class HandshakeTimer:
|
||||
"""Stop the peer if handshake is not complete before timeout.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue