- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
void PduBuffer::putLen_BER(size_t len)
{
if(len <= 0x00ffff)
{
if(len <= 0x007f)
{
check_room(1);
*position++ = (uint1)len;
}
else if(len <= 0x00ff)
{
check_room(2);
*position++ = 0x81;
*position++ = (uint1)len;
}
else // 0x00ff < len <= 0x00ffff
{
check_room(3);
*position++ = 0x82;
*position++ = (uint1)(len >> 8);
*position++ = (uint1)len;
}
}
else //len > 0x00ffff
{
if(len <= 0x00ffffff)
{
check_room(4);
*position++ = 0x83;
*position++ = (uint1)(len >> 16);
*position++ = (uint1)(len >> 8);
*position++ = (uint1)len;
}
else if(len <= 0xffffffff)
{
check_room(5);
*position++ = 0x84;
*position++ = (uint1)(len >> 24);
*position++ = (uint1)(len >> 16);
*position++ = (uint1)(len >> 8);
*position++ = (uint1)len;
}
else
THROW_INTERNAL("BER length out of range [0, 2^32)");
}
frame_start = NULL;
}
guest 21.05.2009 08:12 # 0
guest 21.05.2009 10:35 # 0
действительно, причом тут TLV?
это совершенно обычный метод кодирования длины согласно ASN.1
говнокод тут только в использовании лишнего ифа