| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- //
- // System.Net.FileWebResponse
- //
- // Author:
- // Lawrence Pit ([email protected])
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using System;
- using System.IO;
- using System.Runtime.Serialization;
- namespace System.Net
- {
- [Serializable]
- public class FileWebResponse : WebResponse, ISerializable, IDisposable
- {
- private Uri responseUri;
- private FileStream fileStream;
- private long contentLength;
- private WebHeaderCollection webHeaders;
- private bool disposed = false;
-
- // Constructors
-
- internal FileWebResponse (Uri responseUri, FileStream fileStream)
- {
- try {
- this.responseUri = responseUri;
- this.fileStream = fileStream;
- this.contentLength = fileStream.Length;
- this.webHeaders = new WebHeaderCollection ();
- this.webHeaders.Add ("Content-Length", Convert.ToString (contentLength));
- this.webHeaders.Add ("Content-Type", "binary/octet-stream");
- } catch (Exception e) {
- throw new WebException (e.Message, e);
- }
- }
-
- protected FileWebResponse (SerializationInfo serializationInfo, StreamingContext streamingContext)
- {
- SerializationInfo info = serializationInfo;
- responseUri = (Uri) info.GetValue ("responseUri", typeof (Uri));
- contentLength = info.GetInt64 ("contentLength");
- webHeaders = (WebHeaderCollection) info.GetValue ("webHeaders", typeof (WebHeaderCollection));
- }
-
- // Properties
-
- public override long ContentLength {
- get {
- CheckDisposed ();
- return this.contentLength;
- }
- }
-
- public override string ContentType {
- get {
- CheckDisposed ();
- return "binary/octet-stream";
- }
- }
-
- public override WebHeaderCollection Headers {
- get {
- CheckDisposed ();
- return this.webHeaders;
- }
- }
-
- public override Uri ResponseUri {
- get {
- CheckDisposed ();
- return this.responseUri;
- }
- }
- // Methods
- void ISerializable.GetObjectData (SerializationInfo serializationInfo, StreamingContext streamingContext)
- {
- SerializationInfo info = serializationInfo;
- info.AddValue ("responseUri", responseUri, typeof (Uri));
- info.AddValue ("contentLength", contentLength);
- info.AddValue ("webHeaders", webHeaders, typeof (WebHeaderCollection));
- }
- public override Stream GetResponseStream()
- {
- CheckDisposed ();
- return this.fileStream;
- }
-
- // Cleaning up stuff
-
- ~FileWebResponse ()
- {
- Dispose (false);
- }
-
- public override void Close()
- {
- ((IDisposable) this).Dispose ();
- }
- void IDisposable.Dispose()
- {
- Dispose (true);
-
- // see spec, suppress finalization of this object.
- GC.SuppressFinalize (this);
- }
-
- protected virtual void Dispose (bool disposing)
- {
- if (this.disposed)
- return;
- this.disposed = true;
-
- if (disposing) {
- // release managed resources
- this.responseUri = null;
- this.webHeaders = null;
- }
-
- // release unmanaged resources
- FileStream stream = fileStream;
- fileStream = null;
- if (stream != null)
- stream.Close (); // also closes webRequest
- }
-
- private void CheckDisposed ()
- {
- if (disposed)
- throw new ObjectDisposedException (GetType ().FullName);
- }
- }
- }
|