private static byte CreateHeaderByte(ElementTypeDescriptor etd, SizeIndex sizeIndex) { System.Diagnostics.Debug.Assert((int)etd < 32); byte headerByte = (byte)((int)etd << ServiceRecordParser.ElementTypeDescriptorOffset); System.Diagnostics.Debug.Assert((int)sizeIndex < 8); headerByte |= (byte)sizeIndex; return(headerByte); }
private int WriteHeaderFixedLength(ElementTypeDescriptor elementTypeDescriptor, int contentLength, byte[] buf, int offset, out int totalLength) { SizeIndex sizeIndex = FixedLengthToSizeIndex(contentLength); int len = WriteHeaderFixedLength_(elementTypeDescriptor, contentLength, sizeIndex, buf, offset, out totalLength); return(len); }
internal HeaderWriteState(ElementTypeDescriptor elementTypeDescriptor, byte[] buf, int offset, SizeIndex sizeIndex, int headerLength) { this.Etd = elementTypeDescriptor; this.HeaderOffset = offset; this.SizeIndex = sizeIndex; this.HeaderLength = headerLength; // VerifyWriteSpaceRemaining(HeaderLength, buf, offset); ServiceRecordParser.VerifyAllowedSizeIndex(Etd, SizeIndex, false); }
//---- static int FromSizeIndex(SizeIndex sizeIndex) { int len; switch (sizeIndex) { case SizeIndex.LengthOneByteOrNil: len = 1; break; case SizeIndex.LengthTwoBytes: len = 2; break; case SizeIndex.LengthFourBytes: len = 4; break; case SizeIndex.LengthEightBytes: len = 8; break; case SizeIndex.LengthSixteenBytes: len = 16; break; case SizeIndex.AdditionalUInt8: len = 1; break; case SizeIndex.AdditionalUInt16: len = 1; break; case SizeIndex.AdditionalUInt32: len = 1; break; default: len = 1; break; } return(len); }
private void DoTest(ElementTypeDescriptor expectedEtd, SizeIndex expectedSizeIndex, byte headerByte) { ServiceRecordParser parser = new ServiceRecordParser(); // // Test the (original) individual methods. ElementTypeDescriptor resultEtd = ServiceRecordParser.GetElementTypeDescriptor(headerByte); Assert.AreEqual(expectedEtd, resultEtd); // SizeIndex resultSI = ServiceRecordParser.GetSizeIndex(headerByte); Assert.AreEqual(expectedSizeIndex, resultSI); // // Test the single method (which calls each of the individual methods). ElementTypeDescriptor resultEtd2; SizeIndex resultSI2; ServiceRecordParser.SplitHeaderByte(headerByte, out resultEtd2, out resultSI2); Assert.AreEqual(expectedEtd, resultEtd2); Assert.AreEqual(expectedSizeIndex, resultSI2); }
private static void Map(StackConsts.SdpType_uint8_t sdpDataElementType, out ElementTypeDescriptor etd, out SizeIndex sizeIndex) { const SizeIndex NotUsed = SizeIndex.LengthOneByteOrNil; switch (sdpDataElementType) { // Signed/Unsigned Integer case StackConsts.SdpType_uint8_t.UINT8: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthOneByteOrNil; break; case StackConsts.SdpType_uint8_t.INT8: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthOneByteOrNil; break; case StackConsts.SdpType_uint8_t.UINT16: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthTwoBytes; break; case StackConsts.SdpType_uint8_t.INT16: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthTwoBytes; break; case StackConsts.SdpType_uint8_t.UINT32: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthFourBytes; break; case StackConsts.SdpType_uint8_t.INT32: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthFourBytes; break; case StackConsts.SdpType_uint8_t.UINT64: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthEightBytes; break; case StackConsts.SdpType_uint8_t.INT64: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthEightBytes; break; case StackConsts.SdpType_uint8_t.UINT128: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthSixteenBytes; break; case StackConsts.SdpType_uint8_t.INT128: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthSixteenBytes; break; // Strings case StackConsts.SdpType_uint8_t.TEXT_STR_UNSPEC: case StackConsts.SdpType_uint8_t.TEXT_STR8: case StackConsts.SdpType_uint8_t.TEXT_STR16: case StackConsts.SdpType_uint8_t.TEXT_STR32: etd = ElementTypeDescriptor.TextString; sizeIndex = NotUsed; break; case StackConsts.SdpType_uint8_t.URL_STR_UNSPEC: case StackConsts.SdpType_uint8_t.URL_STR8: case StackConsts.SdpType_uint8_t.URL_STR16: case StackConsts.SdpType_uint8_t.URL_STR32: etd = ElementTypeDescriptor.Url; sizeIndex = NotUsed; break; // UUID case StackConsts.SdpType_uint8_t.UUID16: etd = ElementTypeDescriptor.Uuid; sizeIndex = SizeIndex.LengthTwoBytes; break; case StackConsts.SdpType_uint8_t.UUID32: etd = ElementTypeDescriptor.Uuid; sizeIndex = SizeIndex.LengthFourBytes; break; case StackConsts.SdpType_uint8_t.UUID128: etd = ElementTypeDescriptor.Uuid; sizeIndex = SizeIndex.LengthSixteenBytes; break; case StackConsts.SdpType_uint8_t.UUID_UNSPEC: throw new NotSupportedException("UUID_UNSPEC"); // Seq/Alt case StackConsts.SdpType_uint8_t.SEQ_UNSPEC: case StackConsts.SdpType_uint8_t.SEQ8: case StackConsts.SdpType_uint8_t.SEQ16: case StackConsts.SdpType_uint8_t.SEQ32: etd = ElementTypeDescriptor.ElementSequence; sizeIndex = NotUsed; break; case StackConsts.SdpType_uint8_t.ALT_UNSPEC: case StackConsts.SdpType_uint8_t.ALT8: case StackConsts.SdpType_uint8_t.ALT16: case StackConsts.SdpType_uint8_t.ALT32: etd = ElementTypeDescriptor.ElementAlternative; sizeIndex = NotUsed; break; // Nil/Boolean/etc. case StackConsts.SdpType_uint8_t.BOOL: etd = ElementTypeDescriptor.Boolean; sizeIndex = SizeIndex.LengthOneByteOrNil; break; case StackConsts.SdpType_uint8_t.DATA_NIL: etd = ElementTypeDescriptor.Nil; sizeIndex = SizeIndex.LengthOneByteOrNil; break; // default: Debug.Fail("Unexpected SdpType_uint8_t: 0x" + ((int)sdpDataElementType).ToString("X")); etd = ElementTypeDescriptor.Unknown; sizeIndex = SizeIndex.AdditionalUInt32; break; } }
private static void Map(StackConsts.SDP_Data_Element_Type sdpDataElementType, out ElementTypeDescriptor etd, out SizeIndex sizeIndex) { const SizeIndex NotUsed = SizeIndex.LengthOneByteOrNil; switch (sdpDataElementType) { // Signed/Unsigned Integer case StackConsts.SDP_Data_Element_Type.UnsignedInteger1Byte: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthOneByteOrNil; break; case StackConsts.SDP_Data_Element_Type.SignedInteger1Byte: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthOneByteOrNil; break; case StackConsts.SDP_Data_Element_Type.UnsignedInteger2Bytes: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthTwoBytes; break; case StackConsts.SDP_Data_Element_Type.SignedInteger2Bytes: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthTwoBytes; break; case StackConsts.SDP_Data_Element_Type.UnsignedInteger4Bytes: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthFourBytes; break; case StackConsts.SDP_Data_Element_Type.SignedInteger4Bytes: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthFourBytes; break; case StackConsts.SDP_Data_Element_Type.UnsignedInteger8Bytes: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthEightBytes; break; case StackConsts.SDP_Data_Element_Type.SignedInteger8Bytes: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthEightBytes; break; case StackConsts.SDP_Data_Element_Type.UnsignedInteger16Bytes: etd = ElementTypeDescriptor.UnsignedInteger; sizeIndex = SizeIndex.LengthSixteenBytes; break; case StackConsts.SDP_Data_Element_Type.SignedInteger16Bytes: etd = ElementTypeDescriptor.TwosComplementInteger; sizeIndex = SizeIndex.LengthSixteenBytes; break; // Strings case StackConsts.SDP_Data_Element_Type.TextString: etd = ElementTypeDescriptor.TextString; sizeIndex = NotUsed; break; case StackConsts.SDP_Data_Element_Type.URL: etd = ElementTypeDescriptor.Url; sizeIndex = NotUsed; break; // UUID case StackConsts.SDP_Data_Element_Type.UUID_16: etd = ElementTypeDescriptor.Uuid; sizeIndex = SizeIndex.LengthTwoBytes; break; case StackConsts.SDP_Data_Element_Type.UUID_32: etd = ElementTypeDescriptor.Uuid; sizeIndex = SizeIndex.LengthTwoBytes; break; case StackConsts.SDP_Data_Element_Type.UUID_128: etd = ElementTypeDescriptor.Uuid; sizeIndex = SizeIndex.LengthFourBytes; break; // Seq/Alt case StackConsts.SDP_Data_Element_Type.Sequence: etd = ElementTypeDescriptor.ElementSequence; sizeIndex = NotUsed; break; case StackConsts.SDP_Data_Element_Type.Alternative: etd = ElementTypeDescriptor.ElementAlternative; sizeIndex = NotUsed; break; // Nil/Boolean/etc. case StackConsts.SDP_Data_Element_Type.Boolean: etd = ElementTypeDescriptor.Boolean; sizeIndex = SizeIndex.LengthOneByteOrNil; break; case StackConsts.SDP_Data_Element_Type.NIL: etd = ElementTypeDescriptor.Nil; sizeIndex = SizeIndex.LengthOneByteOrNil; break; case StackConsts.SDP_Data_Element_Type.NULL: Debug.Fail("SDP_Data_Element_Type.deNULL"); etd = ElementTypeDescriptor.Unknown; sizeIndex = SizeIndex.LengthOneByteOrNil; break; // default: Debug.Fail("Unexpected SDP_Data_Element_Type: 0x" + ((int)sdpDataElementType).ToString("X")); etd = ElementTypeDescriptor.Unknown; sizeIndex = SizeIndex.AdditionalUInt32; break; } }
private int WriteHeaderFixedLength_(ElementTypeDescriptor elementTypeDescriptor, int contentLength, SizeIndex sizeIndex, byte[] buf, int offset, out int totalLength) { System.Diagnostics.Debug.Assert( sizeIndex == SizeIndex.LengthOneByteOrNil || sizeIndex == SizeIndex.LengthTwoBytes || sizeIndex == SizeIndex.LengthFourBytes || sizeIndex == SizeIndex.LengthEightBytes || sizeIndex == SizeIndex.LengthSixteenBytes); ServiceRecordParser.VerifyAllowedSizeIndex(elementTypeDescriptor, sizeIndex, false); HeaderWriteState headerState = new HeaderWriteState(elementTypeDescriptor, buf, offset, sizeIndex, 1); CompleteHeaderWrite(headerState, buf, offset + contentLength + headerState.HeaderLength, out totalLength); return(headerState.HeaderLength); }
private static byte CreateHeaderByte(ElementTypeDescriptor etd, SizeIndex sizeIndex) { System.Diagnostics.Debug.Assert((int)etd < 32); byte headerByte = (byte)((int)etd << ServiceRecordParser.ElementTypeDescriptorOffset); System.Diagnostics.Debug.Assert((int)sizeIndex < 8); headerByte |= (byte)sizeIndex; return headerByte; }
private int WriteHeaderFixedLength_(ElementTypeDescriptor elementTypeDescriptor, int contentLength, SizeIndex sizeIndex, byte[] buf, int offset, out int totalLength) { System.Diagnostics.Debug.Assert( sizeIndex == SizeIndex.LengthOneByteOrNil || sizeIndex == SizeIndex.LengthTwoBytes || sizeIndex == SizeIndex.LengthFourBytes || sizeIndex == SizeIndex.LengthEightBytes || sizeIndex == SizeIndex.LengthSixteenBytes); ServiceRecordParser.VerifyAllowedSizeIndex(elementTypeDescriptor, sizeIndex, false); HeaderWriteState headerState = new HeaderWriteState(elementTypeDescriptor, buf, offset, sizeIndex, 1); CompleteHeaderWrite(headerState, buf, offset + contentLength + headerState.HeaderLength, out totalLength); return headerState.HeaderLength; }