1
0

network: tighten checks of server responses for type/sanity

This commit is contained in:
SomberNight
2020-10-16 19:30:42 +02:00
parent c70484455c
commit c5da22a9dd
5 changed files with 174 additions and 54 deletions

View File

@@ -418,20 +418,15 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
def is_connecting(self):
return self.connection_status == 'connecting'
async def _request_server_info(self, interface):
async def _request_server_info(self, interface: 'Interface'):
await interface.ready
session = interface.session
async def get_banner():
self.banner = await session.send_request('server.banner')
self.banner = await interface.get_server_banner()
self.notify('banner')
async def get_donation_address():
addr = await session.send_request('server.donation_address')
if not bitcoin.is_address(addr):
if addr: # ignore empty string
self.logger.info(f"invalid donation address from server: {repr(addr)}")
addr = ''
self.donation_address = addr
self.donation_address = await interface.get_donation_address()
async def get_server_peers():
server_peers = await session.send_request('server.peers.subscribe')
random.shuffle(server_peers)
@@ -441,12 +436,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
self.server_peers = parse_servers(server_peers)
self.notify('servers')
async def get_relay_fee():
relayfee = await session.send_request('blockchain.relayfee')
if relayfee is None:
self.relay_fee = None
else:
relayfee = int(relayfee * COIN)
self.relay_fee = max(0, relayfee)
self.relay_fee = await interface.get_relay_fee()
async with TaskGroup() as group:
await group.spawn(get_banner)
@@ -456,9 +446,8 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
await group.spawn(self._request_fee_estimates(interface))
async def _request_fee_estimates(self, interface):
session = interface.session
self.config.requested_fee_estimates()
histogram = await session.send_request('mempool.get_fee_histogram')
histogram = await interface.get_fee_histogram()
self.config.mempool_fees = histogram
self.logger.info(f'fee_histogram {histogram}')
self.notify('fee_histogram')