using System; using System.Xml; namespace blowery.Web.HttpModules { /// /// This class encapsulates the settings for an HttpCompressionModule /// internal class HttpCompressionModuleSettings { /// /// Create an HttpCompressionModuleSettings from an XmlNode /// /// The XmlNode to configure from public HttpCompressionModuleSettings(XmlNode node) : this() { if(node == null) { return; } XmlAttribute preferredAlgorithm = node.Attributes["preferredAlgorithm"]; if(preferredAlgorithm != null) { switch(preferredAlgorithm.Value.ToLower()) { case "gzip": _preferredAlgorithm = CompressionTypes.GZip; break; case "deflate": default: _preferredAlgorithm = CompressionTypes.Deflate; break; } } XmlAttribute compressionLevel = node.Attributes["compressionLevel"]; if(compressionLevel != null) { switch(compressionLevel.Value.ToLower()) { case "high": _compressionLevel = CompressionLevels.High; break; case "low": _compressionLevel = CompressionLevels.Low; break; case "normal": default: _compressionLevel = CompressionLevels.Normal; break; } } } private HttpCompressionModuleSettings() { _preferredAlgorithm = CompressionTypes.Deflate; _compressionLevel = CompressionLevels.Normal; } /// /// Get the current settings from the xml config file /// public static HttpCompressionModuleSettings GetSettings() { HttpCompressionModuleSettings settings = (HttpCompressionModuleSettings)System.Configuration.ConfigurationSettings.GetConfig("blowery.web/httpCompressionModule"); if(settings == null) return HttpCompressionModuleSettings.DEFAULT; else return settings; } /// /// The default settings. Deflate + normal. /// public static readonly HttpCompressionModuleSettings DEFAULT = new HttpCompressionModuleSettings(); /// /// The preferred algorithm to use for compression /// public CompressionTypes PreferredAlgorithm { get { return _preferredAlgorithm; } } private CompressionTypes _preferredAlgorithm; /// /// The preferred compression level /// public CompressionLevels CompressionLevel { get { return _compressionLevel; } } private CompressionLevels _compressionLevel; } /// /// The available types of compression to use with the HttpCompressionModule /// public enum CompressionTypes { /// /// Use the deflate algorithm /// Deflate, /// /// Use the gzip algorithm /// GZip } /// /// The level of compression to use with some algorithms /// public enum CompressionLevels { /// /// Use a normal level of compression. Compromises between speed and size /// Normal, /// /// Use a high level of compression. Sacrifices speed for size. /// High, /// /// Use a low level of compression. Sacrifices size for speed. /// Low } }