public static STUNHeader ParseSTUNHeader(byte[] buffer) { if (buffer != null && buffer.Length > 0 && buffer.Length >= STUN_HEADER_LENGTH) { STUNHeader stunHeader = new STUNHeader(); 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 = STUNMessageTypes.GetSTUNMessageTypeForId(stunTypeValue); stunHeader.MessageLength = stunMessageLength; //stunHeader.TransactionId = BitConverter.ToString(buffer, 4, TRANSACTION_ID_LENGTH); Buffer.BlockCopy(buffer, 4, stunHeader.TransactionId, 0, TRANSACTION_ID_LENGTH); return(stunHeader); } return(null); }
public static STUNMessage ParseSTUNMessage(byte[] buffer, int bufferLength) { if (buffer != null && buffer.Length > 0 && buffer.Length >= bufferLength) { STUNMessage stunMessage = new STUNMessage(); stunMessage.Header = STUNHeader.ParseSTUNHeader(buffer); if (stunMessage.Header.MessageLength > 0) { stunMessage.Attributes = STUNAttribute.ParseMessageAttributes(buffer, STUNHeader.STUN_HEADER_LENGTH, bufferLength); } return(stunMessage); } return(null); }
public STUNMessage(STUNMessageTypesEnum stunMessageType) { Header = new STUNHeader(stunMessageType); }