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
}
}