/// <summary> /// Helper function to return a property id while making sure it's valid (+ trace) /// </summary> public static PropertyID GetPropertyID(IHeaderParser parser, Stream headerStream) { Byte propertyID = headerStream.ReadByteThrow(); if (propertyID > (Byte)PropertyID.kDummy) { throw new SevenZipException(parser.GetType().Name + $": Unknown property ID = {propertyID}."); } Trace.TraceInformation(parser.GetType().Name + $": Property ID = {(PropertyID)propertyID}"); return((PropertyID)propertyID); }
/// <summary> /// Helper function to read and ensure a specific PropertyID is next in header stream /// </summary> public static void ExpectPropertyID(IHeaderParser parser, Stream headerStream, PropertyID propertyID) { if (GetPropertyID(parser, headerStream) != propertyID) { throw new SevenZipException(parser.GetType().Name + $": Expected property ID = {propertyID}."); } }
/// <summary> /// Add a header parser. /// </summary> /// <param name="parser">Parser to use</param> /// <param name="name">Header name</param> /// <param name="shortName">Compact header name; or <see cref="char.MinValue"/> if not specified.</param> public void AddParser(IHeaderParser parser, string name, char shortName) { if (string.IsNullOrEmpty(name)) throw new ArgumentException("name may not be null or empty.", "name"); name = name.ToLower(); shortName = char.ToLower(shortName); lock (_headerParsers) { if (_headerParsers.ContainsKey(name)) _logger.Info("Changing parser '" + name + "' from " + _headerParsers[name].GetType().FullName + " to " + parser.GetType().FullName); _headerParsers[name] = parser; } lock (_shortNameParsers) _shortNameParsers[shortName] = parser; }
/// <summary> /// Add a header parser. /// </summary> /// <param name="parser">Parser to use</param> /// <param name="name">Header name</param> /// <param name="shortName">Compact header name; or <see cref="char.MinValue"/> if not specified.</param> public void AddParser(IHeaderParser parser, string name, char shortName) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException("name may not be null or empty.", "name"); } name = name.ToLower(); shortName = char.ToLower(shortName); lock (_headerParsers) { if (_headerParsers.ContainsKey(name)) { _logger.Info("Changing parser '" + name + "' from " + _headerParsers[name].GetType().FullName + " to " + parser.GetType().FullName); } _headerParsers[name] = parser; } lock (_shortNameParsers) _shortNameParsers[shortName] = parser; }