• Robert Schmidt's avatar
    NGAP: Correct encoding of AMF Set ID and Pointer · 0fb0b055
    Robert Schmidt authored
    Taking the example of the AMF Set ID, the previous version of the macro
    used another macro to encode the number, then marked the last 6 bits in
    the bit string (of length 16/2 bytes) as unused. This is wrong, because,
    assuming AMF Set ID=3, it basically truncates the number by encoding all
    16 bits and cutting off the last 6, like this:
    
      ------------------- encode 16 bits
      0000 0000 0000 0011
      ------------        take these 10 bits
    
    So what remains is these bit positions of the number:
    (16,15,14,13,12,11,10,9,8,7) -- the last 6 bits are cut (and the first 6
    are either 0 or garbage, because they don't exist).
    
    Instead, manually encode bits (10,9,8,7,6,5,4,3) in the first byte, and
    (2,1) in the second byte of the bit string, like so:
    
      ------------        encode 10 bits
      0000 0000 1100 0000
      ------------        take these 10 bits
    
    Do the same with the pointer.
    
    The AMF Region ID above is correct, as it is exactly 8 bits.
    0fb0b055
conversions.h 25.7 KB