public int GetMaxApdu()
{
int max_apdu;
switch (m_client.MaxAdpuLength)
{
case BacnetMaxAdpu.MAX_APDU1476:
max_apdu = 1476;
break;
case BacnetMaxAdpu.MAX_APDU1024:
max_apdu = 1024;
break;
case BacnetMaxAdpu.MAX_APDU480:
max_apdu = 480;
break;
case BacnetMaxAdpu.MAX_APDU206:
max_apdu = 206;
break;
case BacnetMaxAdpu.MAX_APDU128:
max_apdu = 128;
break;
case BacnetMaxAdpu.MAX_APDU50:
max_apdu = 50;
break;
default:
throw new NotImplementedException();
}
//max udp payload IRL seems to differ from the expectations in BACnet
//so we have to adjust it. (In order to fulfill the standard)
const int max_npdu_header_length = 4; //usually it's '2', but it can also be more than '4'. Beware!
return Math.Min(max_apdu, m_client.MaxBufferLength - m_client.HeaderLength - max_npdu_header_length);
}