commit 1f6646fa256516e72b5840d7fe8c746b9a38e1aa
parent 6a8e5d59549cbc0384686af2cbf416787e6e4494
Author: ThomasV <thomasv@electrum.org>
Date: Tue, 29 May 2018 06:59:22 +0200
lnbase: fix read_message
Diffstat:
1 file changed, 13 insertions(+), 15 deletions(-)
diff --git a/lib/lnbase.py b/lib/lnbase.py
@@ -579,6 +579,7 @@ class Peer(PrintError):
self.network = network
self.channel_db = channel_db
self.path_finder = path_finder
+ self.read_buffer = b''
self.ping_time = 0
self.futures = ["channel_accepted",
"funding_signed",
@@ -623,24 +624,21 @@ class Peer(PrintError):
async def read_message(self):
rn_l, rk_l = self.rn()
rn_m, rk_m = self.rn()
- read_buffer = b''
while True:
- s = await self.reader.read(1)
+ if len(self.read_buffer) >= 18:
+ lc = self.read_buffer[:18]
+ l = aead_decrypt(rk_l, rn_l, b'', lc)
+ length = int.from_bytes(l, 'big')
+ offset = 18 + length + 16
+ if len(self.read_buffer) >= offset:
+ c = self.read_buffer[18:offset]
+ self.read_buffer = self.read_buffer[offset:]
+ msg = aead_decrypt(rk_m, rn_m, b'', c)
+ return msg
+ s = await self.reader.read(2**10)
if not s:
raise LightningPeerConnectionClosed()
- read_buffer += s
- if len(read_buffer) < 18:
- continue
- lc = read_buffer[:18]
- l = aead_decrypt(rk_l, rn_l, b'', lc)
- length = int.from_bytes(l, 'big')
- offset = 18 + length + 16
- if len(read_buffer) < offset:
- continue
- c = read_buffer[18:offset]
- read_buffer = read_buffer[offset:]
- msg = aead_decrypt(rk_m, rn_m, b'', c)
- return msg
+ self.read_buffer += s
async def handshake(self):
hs = HandshakeState(self.pubkey)