From 4a457c279b49894bdedda82e9090ec58b42436ae Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 7 Jul 2016 22:57:42 +0100 Subject: [PATCH] Fix the Wires-X length/block calculations. --- YSFGateway/WiresX.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/YSFGateway/WiresX.cpp b/YSFGateway/WiresX.cpp index 0f01072..5f67c9f 100644 --- a/YSFGateway/WiresX.cpp +++ b/YSFGateway/WiresX.cpp @@ -323,13 +323,22 @@ void CWiresX::createReply(const unsigned char* data, unsigned int length) assert(data != NULL); assert(length > 0U); - unsigned char bt = length / 260U; + unsigned char bt = 0U; - length += bt; + if (length > 260U) { + bt = 1U; + bt += (length - 260U) / 259U; - unsigned int blocks = (length - 10U) / 20U; - if ((length % 20U) > 0U) blocks++; - length = blocks * 20U + 10U; + length += bt; + } + + if (length > 20U) { + unsigned int blocks = (length - 20U) / 40U; + if ((length % 40U) > 0U) blocks++; + length = blocks * 40U + 20U; + } else { + length = 20U; + } unsigned char ft = calculateFT(length, 0U);