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