2 // Mono.Http.GZipHttpWebResponse
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
7 // (c) 2003 Ximian, Inc. (http://www.ximian.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Runtime.Serialization;
34 using ICSharpCode.SharpZipLib.GZip;
39 public class GZipWebResponse : WebResponse, ISerializable, IDisposable
43 [NonSerialized] Stream stream;
44 [NonSerialized] long gzipLength;
46 internal GZipWebResponse (WebResponse response, bool compressed)
48 this.response = response;
49 this.compressed = compressed;
52 protected GZipWebResponse (SerializationInfo info, StreamingContext context)
54 response = (WebResponse) info.GetValue ("response", typeof (WebResponse));
55 compressed = info.GetBoolean ("compressed");
58 public override long ContentLength {
64 return response.ContentLength;
68 public override string ContentType {
69 get { return response.ContentType; }
72 public override WebHeaderCollection Headers {
73 get { return response.Headers; }
76 public override Uri ResponseUri {
77 get { return response.ResponseUri; }
80 public WebResponse RealResponse {
81 get { return response; }
84 public bool IsCompressed {
85 get { return compressed; }
88 public override Stream GetResponseStream ()
100 Stream st = response.GetResponseStream ();
104 stream = new GZipInputStream (st);
105 gzipLength = stream.Length;
110 void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context)
112 info.AddValue ("response", response);
113 info.AddValue ("compressed", compressed);
116 public override void Close ()
118 ((IDisposable) this).Dispose ();
121 void IDisposable.Dispose ()
123 if (stream != null) {
128 if (response != null) {