internal CtfTraceDescriptor(CtfPropertyBag bag, ICtfStructDescriptor packetHeader) { Debug.Assert(bag != null); // According to CTF specification 1.8.2 section C.Examples."Minimal Examples", the packetHeader // isn't required if the entire trace consists of a single packet - so no null check here. // According to CTF specification 1.8.2 section C.Examples."Minimal Examples", the fields // "major", "minor", and "byte_order" are required. if (!bag.ContainsKey("major")) { throw new ArgumentException("Trace declaration does not contain 'major' field."); } if (!bag.ContainsKey("minor")) { throw new ArgumentException("Trace declaration does not contain 'major' field."); } if (!bag.ContainsKey("byte_order")) { throw new ArgumentException("Trace declaration does not contains 'byte_order' field."); } this.Major = bag.GetShort("major"); this.Minor = bag.GetShort("minor"); this.ByteOrder = bag.GetString("byte_order").Replace("\"", string.Empty); Guid id = Guid.Empty; if (bag.TryGetString("uuid", out string uuid)) { uuid = uuid.Replace("\"", string.Empty); if (!Guid.TryParse(uuid, out id)) { throw new ArgumentException($"Unable to parse the uuid value: {bag.GetString("uuid")}."); } } this.Uuid = id; this.PacketHeader = packetHeader; }
private static EncodingTypes GetEncoding(CtfPropertyBag bag) { Debug.Assert(bag != null); if (!bag.TryGetString("encoding", out string encoding)) { // strings default to UTF-8 encoding to specification 1.82 section 4.2.5 return(EncodingTypes.Utf8); } if (StringComparer.InvariantCulture.Equals(encoding, "UTF8")) { return(EncodingTypes.Utf8); } if (StringComparer.InvariantCulture.Equals(encoding, "ASCII")) { return(EncodingTypes.Ascii); } return(EncodingTypes.Invalid); }