2 // System.Net.FileWebResponse
\r
5 // Lawrence Pit (loz@cable.a2000.nl)
\r
10 using System.Runtime.Serialization;
\r
12 namespace System.Net
\r
15 public class FileWebResponse : WebResponse, ISerializable, IDisposable
\r
17 private Uri responseUri;
\r
18 private FileStream fileStream;
\r
19 private long contentLength;
\r
20 private WebHeaderCollection webHeaders;
\r
21 private bool disposed = false;
\r
25 internal FileWebResponse (Uri responseUri, FileStream fileStream)
\r
28 this.responseUri = responseUri;
\r
29 this.fileStream = fileStream;
\r
30 this.contentLength = fileStream.Length;
\r
31 this.webHeaders = new WebHeaderCollection ();
\r
32 this.webHeaders.Add ("Content-Length", Convert.ToString (contentLength));
\r
33 this.webHeaders.Add ("Content-Type", "binary/octet-stream");
\r
34 } catch (Exception e) {
\r
35 throw new WebException (e.Message, e);
\r
39 protected FileWebResponse (SerializationInfo serializationInfo, StreamingContext streamingContext)
\r
41 SerializationInfo info = serializationInfo;
\r
43 responseUri = (Uri) info.GetValue ("responseUri", typeof (Uri));
\r
44 contentLength = info.GetInt64 ("contentLength");
\r
45 webHeaders = (WebHeaderCollection) info.GetValue ("webHeaders", typeof (WebHeaderCollection));
\r
50 public override long ContentLength {
\r
53 return this.contentLength;
\r
57 public override string ContentType {
\r
60 return "binary/octet-stream";
\r
64 public override WebHeaderCollection Headers {
\r
67 return this.webHeaders;
\r
71 public override Uri ResponseUri {
\r
74 return this.responseUri;
\r
80 void ISerializable.GetObjectData (SerializationInfo serializationInfo, StreamingContext streamingContext)
\r
82 SerializationInfo info = serializationInfo;
\r
84 info.AddValue ("responseUri", responseUri, typeof (Uri));
\r
85 info.AddValue ("contentLength", contentLength);
\r
86 info.AddValue ("webHeaders", webHeaders, typeof (WebHeaderCollection));
\r
89 public override Stream GetResponseStream()
\r
92 return this.fileStream;
\r
95 // Cleaning up stuff
\r
102 public override void Close()
\r
104 ((IDisposable) this).Dispose ();
\r
107 void IDisposable.Dispose()
\r
111 // see spec, suppress finalization of this object.
\r
112 GC.SuppressFinalize (this);
\r
115 protected virtual void Dispose (bool disposing)
\r
119 this.disposed = true;
\r
122 // release managed resources
\r
123 this.responseUri = null;
\r
124 this.webHeaders = null;
\r
127 // release unmanaged resources
\r
128 FileStream stream = fileStream;
\r
130 if (stream != null)
\r
131 stream.Close (); // also closes webRequest
\r
134 private void CheckDisposed ()
\r
137 throw new ObjectDisposedException (GetType ().FullName);
\r