コード例 #1
0
ファイル: CoapOption.cs プロジェクト: lulzzz/piraeus-1
        public static CoapOption Decode(byte[] buffer, int index, int previousDelta, out int newIndex)
        {
            int deltaPart           = buffer[index] >> 0x04;
            int deltaExtendedLength = deltaPart <= 12 ? 0 : deltaPart == 13 ? 1 : 2;
            int valuePart           = buffer[index] & 0x0F;
            int valueExtendedLength = valuePart <= 12 ? 0 : valuePart == 13 ? 1 : 2;

            index++;

            int        optionTypeValue = deltaExtendedLength == 0 ? deltaPart + previousDelta : deltaExtendedLength == 1 ? (deltaPart + previousDelta) + (int)buffer[index++] : (deltaPart + 255 + previousDelta) + (int)(buffer[index++] | buffer[index++]);
            OptionType option          = (OptionType)optionTypeValue;

            int valueLength = valueExtendedLength == 0 ? valuePart : valueExtendedLength == 1 ? valuePart + (int)buffer[index++] : (valuePart + 255) + (int)(buffer[index++] | buffer[index++]);

            byte[] encodedValue = new byte[valueLength];
            Buffer.BlockCopy(buffer, index, encodedValue, 0, valueLength);

            newIndex = index + valueLength;

            object value = option.DecodeOptionValue(encodedValue);

            return(new CoapOption(option, value));
        }