//Copyright 2010 Microsoft Corporation // //Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. //You may obtain a copy of the License at // //http://www.apache.org/licenses/LICENSE-2.0 // //Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an //"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and limitations under the License. namespace System.Data.Services.Http { using System; using System.Diagnostics; using System.Globalization; using System.IO; internal sealed class ClientHttpWebResponse : System.Data.Services.Http.HttpWebResponse { private System.Net.HttpWebResponse innerResponse; private ClientWebHeaderCollection headerCollection; private ClientHttpWebRequest request; internal ClientHttpWebResponse(System.Net.HttpWebResponse innerResponse, ClientHttpWebRequest request) { Debug.Assert(innerResponse != null, "innerResponse can't be null."); this.innerResponse = innerResponse; this.request = request; int statusCode = (int)this.innerResponse.StatusCode; if (statusCode > (int)HttpStatusCodeRange.MaxValue || statusCode < (int)HttpStatusCodeRange.MinValue) { throw WebException.CreateInternal("HttpWebResponse.NormalizeResponseStatus"); } } #region Properties. public override long ContentLength { get { return this.innerResponse.ContentLength; } } public override string ContentType { get { return this.innerResponse.ContentType; } } public override System.Data.Services.Http.WebHeaderCollection Headers { get { if (this.headerCollection == null) { this.headerCollection = new ClientWebHeaderCollection(this.innerResponse.Headers); } return this.headerCollection; } } public override System.Data.Services.Http.HttpWebRequest Request { get { return this.request; } } public override System.Data.Services.Http.HttpStatusCode StatusCode { get { return (System.Data.Services.Http.HttpStatusCode)(int)this.innerResponse.StatusCode; } } #endregion Properties. public override void Close() { this.innerResponse.Close(); } public override string GetResponseHeader(string headerName) { return this.innerResponse.Headers[headerName]; } public override Stream GetResponseStream() { return this.innerResponse.GetResponseStream(); } protected override void Dispose(bool disposing) { ((IDisposable)this.innerResponse).Dispose(); } } }