Beispiel #1
0
        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);
        }