recv: remove re-buffering from decoded data.

This commit is contained in:
Roman Zeyde
2015-02-19 18:21:56 +02:00
parent 1aa41db6cb
commit 03a600ddd2
3 changed files with 11 additions and 14 deletions

View File

@@ -115,8 +115,7 @@ def _to_bytes(bits):
yield [converter.to_byte[chunk]]
@chain_wrapper
def decode(bits, framer=None):
def decode_frames(bits, framer=None):
framer = framer or Framer()
for frame in framer.decode(_to_bytes(bits)):
yield frame
yield bytes(frame)

View File

@@ -163,11 +163,9 @@ class Receiver(object):
bitstream = self._demodulate(sampler, symbols)
bitstream = itertools.chain.from_iterable(bitstream)
data = framing.decode(bitstream)
chunks = common.iterate(data, size=16, truncate=False, func=bytearray)
for chunk in chunks:
output.write(bytes(chunk))
self.output_size += len(chunk)
for frame in framing.decode_frames(bitstream):
output.write(frame)
self.output_size += len(frame)
def report(self):
if self.stats:

View File

@@ -31,22 +31,22 @@ def test_framer(data):
def test_main(data):
encoded = framing.encode(data)
decoded = framing.decode(encoded)
assert bytearray(decoded) == data
decoded = framing.decode_frames(encoded)
assert concat(decoded) == data
def test_fail():
encoded = list(framing.encode(''))
encoded[-1] = not encoded[-1]
with pytest.raises(ValueError):
list(framing.decode(encoded))
concat(framing.decode_frames(encoded))
def test_missing():
f = framing.Framer()
with pytest.raises(ValueError):
list(f.decode(b''))
concat(f.decode(b''))
with pytest.raises(ValueError):
list(f.decode(b'\x01'))
concat(f.decode(b'\x01'))
with pytest.raises(ValueError):
list(f.decode(b'\xff'))
concat(f.decode(b'\xff'))