///------------------------------------------------------------------------------ /// /// Copyright (c) Microsoft Corporation. All rights reserved. /// /// /// gpaperin ///------------------------------------------------------------------------------ using System.Runtime.Serialization; using System.Security; using System.Security.Permissions; using ZErrorCode = System.IO.Compression.ZLibNative.ErrorCode; namespace System.IO.Compression { /// /// This is the exception that is thrown when a ZLib returns an error code inticating an unrecovarable error. /// #if SILVERLIGHT internal class ZLibException : IOException { #else [Serializable] internal class ZLibException : IOException, ISerializable { #endif private string zlibErrorContext = null; private string zlibErrorMessage = null; private ZErrorCode zlibErrorCode = ZErrorCode.Ok; /// /// This is the preferred constructor to use. /// The other constructors are provided for compliance to Fx design guidelines. /// /// A (localised) human readable error description. /// A description of the context within zlib where the error occured (e.g. the function name). /// The error code returned by a ZLib function that casued this exception. /// The string provided by ZLib as error information (unloicalised). public ZLibException(string message, string zlibErrorContext, int zlibErrorCode, string zlibErrorMessage) : base(message) { Init(zlibErrorContext, (ZErrorCode) zlibErrorCode, zlibErrorMessage); } /// /// This constructor is provided in compliance with common NetFx design patterns; /// developers should prefer using the constructor /// public ZLibException(string message, string zlibErrorContext, ZLibNative.ErrorCode zlibErrorCode, string zlibErrorMessage). /// public ZLibException() : base() { Init(); } /// /// This constructor is provided in compliance with common NetFx design patterns; /// developers should prefer using the constructor /// public ZLibException(string message, string zlibErrorContext, ZLibNative.ErrorCode zlibErrorCode, string zlibErrorMessage). /// /// The error message that explains the reason for the exception. public ZLibException(string message) : base(message) { Init(); } /// /// This constructor is provided in compliance with common NetFx design patterns; /// developers should prefer using the constructor /// public ZLibException(string message, string zlibErrorContext, ZLibNative.ErrorCode zlibErrorCode, string zlibErrorMessage). /// /// The error message that explains the reason for the exception. /// The exception that is the cause of the current exception, or a null. public ZLibException(string message, Exception inner) : base(message, inner) { Init(); } #if !SILVERLIGHT /// /// Initializes a new ZLibException with serialized data. /// /// The SerializationInfo that holds the serialized object data about the exception being thrown. /// The StreamingContext that contains contextual information about the source or destination. [SecurityPermission(SecurityAction.LinkDemand, SerializationFormatter=true)] protected ZLibException(SerializationInfo info, StreamingContext context) : base(info, context) { string errContext = info.GetString("zlibErrorContext"); ZErrorCode errCode = (ZErrorCode) info.GetInt32("zlibErrorCode"); string errMessage = info.GetString("zlibErrorMessage"); Init(errContext, errCode, errMessage); } [SecurityPermission(SecurityAction.LinkDemand, SerializationFormatter=true)] void ISerializable.GetObjectData(SerializationInfo si, StreamingContext context) { base.GetObjectData(si, context); si.AddValue("zlibErrorContext", this.zlibErrorContext); si.AddValue("zlibErrorCode", (Int32) this.zlibErrorCode); si.AddValue("zlibErrorMessage", zlibErrorMessage); } #endif // !SILVERLIGHT private void Init() { Init("", ZErrorCode.Ok, ""); } private void Init(string zlibErrorContext, ZErrorCode zlibErrorCode, string zlibErrorMessage) { this.zlibErrorContext = zlibErrorContext; this.zlibErrorCode = zlibErrorCode; this.zlibErrorMessage = zlibErrorMessage; } public string ZLibContext { #if SILVERLIGHT [SecurityCritical] #else [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)] #endif get { return zlibErrorContext; } } public int ZLibErrorCode { #if SILVERLIGHT [SecurityCritical] #else [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)] #endif get { return (int) zlibErrorCode; } } public string ZLibErrorMessage { #if SILVERLIGHT [SecurityCritical] #else [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)] #endif get { return zlibErrorMessage; } } } // internal class ZLibException } // namespace System.IO.Compression // file ZLibException.cs