public static STUNv2Header ParseSTUNHeader(byte[] buffer)
{
if ((buffer[0] & STUN_INITIAL_BYTE_MASK) != 0)
{
throw new ApplicationException("The STUNv2 header did not begin with 0x00.");
}
if (buffer != null && buffer.Length > 0 && buffer.Length >= STUN_HEADER_LENGTH)
{
STUNv2Header stunHeader = new STUNv2Header();
UInt16 stunTypeValue = BitConverter.ToUInt16(buffer, 0);
UInt16 stunMessageLength = BitConverter.ToUInt16(buffer, 2);
if (BitConverter.IsLittleEndian)
{
stunTypeValue = Utility.ReverseEndian(stunTypeValue);
stunMessageLength = Utility.ReverseEndian(stunMessageLength);
}
stunHeader.MessageType = STUNv2MessageTypes.GetSTUNMessageTypeForId(stunTypeValue);
stunHeader.MessageLength = stunMessageLength;
Buffer.BlockCopy(buffer, 8, stunHeader.TransactionId, 0, TRANSACTION_ID_LENGTH);
return stunHeader;
}
return null;
}