From cb5b2e64af91ed0b08e6be606ea312d32933e6e2 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Wed, 22 Feb 2023 17:23:11 +0100 Subject: [PATCH] change chunking to work with actual byte-sizes --- owrx/reporting/pskreporter.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/owrx/reporting/pskreporter.py b/owrx/reporting/pskreporter.py index 7e9f2f3..ecadd9f 100644 --- a/owrx/reporting/pskreporter.py +++ b/owrx/reporting/pskreporter.py @@ -105,18 +105,25 @@ class Uploader(object): # filter out any erroneous encodes encoded = [e for e in encoded if e is not None] - def chunks(l, n): - """Yield successive n-sized chunks from l.""" - for i in range(0, len(l), n): - yield l[i : i + n] + def chunks(block, max_size): + size = 0 + current = [] + for r in block: + if size + len(r) > max_size: + yield current + current = [] + size = 0 + size += len(r) + current.append(r) + yield current rHeader = self.getReceiverInformationHeader() rInfo = self.getReceiverInformation() sHeader = self.getSenderInformationHeader() packets = [] - # 50 seems to be a safe bet - for chunk in chunks(encoded, 50): + # 1200 bytes of sender data should keep the packet size below MTU for most cases + for chunk in chunks(encoded, 1200): sInfo = self.getSenderInformation(chunk) length = 16 + len(rHeader) + len(sHeader) + len(rInfo) + len(sInfo) header = self.getHeader(length)