1. C++ / Говнокод #1072

    +38

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 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;
    }

    Добавление байтов длины TLV-объекта в буфер.

    Запостил: guest, 20 Мая 2009

    Комментарии (2) RSS

    • Это нихера не TLV
      Ответить
    • Smoke:
      действительно, причом тут TLV?
      это совершенно обычный метод кодирования длины согласно ASN.1
      говнокод тут только в использовании лишнего ифа
      Ответить

    Добавить комментарий