parent
b0690f7942
commit
8188f7e909
@ -47,41 +47,42 @@ class BlockServer(BlockProcessor):
|
|||||||
await self.start_servers()
|
await self.start_servers()
|
||||||
ElectrumX.notify(self.height, self.touched)
|
ElectrumX.notify(self.height, self.touched)
|
||||||
|
|
||||||
|
async def start_server(self, name, protocol, host, port, *, ssl=None):
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
server = loop.create_server(protocol, host, port, ssl=ssl)
|
||||||
|
try:
|
||||||
|
self.servers.append(await server)
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
raise
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error('{} server failed to listen on {}:{:d} :{}'
|
||||||
|
.format(name, host, port, e))
|
||||||
|
else:
|
||||||
|
self.logger.info('{} server listening on {}:{:d}'
|
||||||
|
.format(name, host, port))
|
||||||
|
|
||||||
async def start_servers(self):
|
async def start_servers(self):
|
||||||
'''Start listening on RPC, TCP and SSL ports.
|
'''Start listening on RPC, TCP and SSL ports.
|
||||||
|
|
||||||
Does not start a server if the port wasn't specified.
|
Does not start a server if the port wasn't specified.
|
||||||
'''
|
'''
|
||||||
env = self.env
|
env = self.env
|
||||||
loop = asyncio.get_event_loop()
|
|
||||||
|
|
||||||
JSONRPC.init(self, self.daemon, self.coin)
|
JSONRPC.init(self, self.daemon, self.coin)
|
||||||
|
|
||||||
protocol = LocalRPC
|
protocol = LocalRPC
|
||||||
if env.rpc_port is not None:
|
if env.rpc_port is not None:
|
||||||
host = 'localhost'
|
await self.start_server('RPC', protocol, 'localhost', env.rpc_port)
|
||||||
rpc_server = loop.create_server(protocol, host, env.rpc_port)
|
|
||||||
self.servers.append(await rpc_server)
|
|
||||||
self.logger.info('RPC server listening on {}:{:d}'
|
|
||||||
.format(host, env.rpc_port))
|
|
||||||
|
|
||||||
protocol = partial(ElectrumX, env)
|
protocol = partial(ElectrumX, env)
|
||||||
if env.tcp_port is not None:
|
if env.tcp_port is not None:
|
||||||
tcp_server = loop.create_server(protocol, env.host, env.tcp_port)
|
await self.start_server('TCP', protocol, env.host, env.tcp_port)
|
||||||
self.servers.append(await tcp_server)
|
|
||||||
self.logger.info('TCP server listening on {}:{:d}'
|
|
||||||
.format(env.host, env.tcp_port))
|
|
||||||
|
|
||||||
if env.ssl_port is not None:
|
if env.ssl_port is not None:
|
||||||
# FIXME: update if we want to require Python >= 3.5.3
|
# FIXME: update if we want to require Python >= 3.5.3
|
||||||
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
|
sslc = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
|
||||||
ssl_context.load_cert_chain(env.ssl_certfile,
|
sslc.load_cert_chain(env.ssl_certfile, keyfile=env.ssl_keyfile)
|
||||||
keyfile=env.ssl_keyfile)
|
await self.start_server('SSL', protocol, env.host, env.ssl_port,
|
||||||
ssl_server = loop.create_server(protocol, env.host, env.ssl_port,
|
ssl=sslc)
|
||||||
ssl=ssl_context)
|
|
||||||
self.servers.append(await ssl_server)
|
|
||||||
self.logger.info('SSL server listening on {}:{:d}'
|
|
||||||
.format(env.host, env.ssl_port))
|
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
'''Close the listening servers.'''
|
'''Close the listening servers.'''
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user