Bug when sending segmented messages
-
if (segmentsRequired > request.getMaxSegmentsAccepted() || segmentsRequired > 128) throw new BACnetException("Response too big to send to device; too many segments required:" + segmentsRequired + ", accepted: " + request.getMaxSegmentsAccepted());
above the code to determine the amount of acceptable segment messages.
the implementation for getMaxSegmentsAccepted is wrong. it is defined as a bitmap.
so we should change that piece of code to:public int getMaxSegmentsAccepted() { switch (maxSegmentsAccepted) { case 0: return 64; case 1: return 2; case 2: return 4; case 3: return 8; case 4: return 16; case 5: return 32; case 6: return 64; case 7: return 128; } // 3 bits - we can't get here return 64; }
this is in the class ConfirmedRequest.
regards
robert