コード例 #1
0
ファイル: HttpResponse.cs プロジェクト: llenroc/HttpClient
 internal HttpResponse(Uri responseUri, HttpMethod method, CoreResponseData coreData, DecompressionMethods decompressionMethod)
 {
     _uri = responseUri;
     _method = method;
     _coreResponseData = coreData;
     _connectStream = coreData.ConnectStream;
     _headers = coreData.ResponseHeaders;            
     _statusCode = coreData.StatusCode;
     _contentLength = coreData.ContentLength;
     _statusDescription = coreData.StatusDescription;
     _version = coreData.HttpVersion;
     //if (this.m_ContentLength == 0L && this.m_ConnectStream is ConnectStream)
     //{
     //    ((ConnectStream)this.m_ConnectStream).CallDone();
     //}
     var text = _headers[HttpHeaderNames.ContentLocation];
     if (text != null)
     {
         try
         {
             Uri uri;
             if (Uri.TryCreate(_uri, text, out uri))
             {
                 _uri = uri;
             }
         }
         catch { }
     }
     if (decompressionMethod != DecompressionMethods.None)
     {
         if ((text = _headers[HttpHeaderNames.ContentEncoding]) != null)
         {
             if ((decompressionMethod & DecompressionMethods.GZip) == DecompressionMethods.GZip && text.IndexOf(HttpRequest.GZipHeader, 0, StringComparison.OrdinalIgnoreCase) >= 0)
             {
                 _connectStream = new GZipStream(_connectStream, CompressionMode.Decompress);
                 _contentLength = -1L;
                 _headers.SetInternal(HttpHeaderNames.TransferEncoding, null);
             }
             else if ((decompressionMethod & DecompressionMethods.Deflate) == DecompressionMethods.Deflate && text.IndexOf(HttpRequest.DeflateHeader, 0, StringComparison.OrdinalIgnoreCase) >= 0)
             {
                 _connectStream = new DeflateStream(_connectStream, CompressionMode.Decompress);
                 _contentLength = -1L;
                 _headers.SetInternal(HttpHeaderNames.TransferEncoding, null);
             }
         }
     }
 }
コード例 #2
0
        internal HttpWebResponse(Uri responseUri, KnownHttpVerb verb, CoreResponseData coreData, string mediaType, bool usesProxySemantics, DecompressionMethods decompressionMethod)
        {
            m_Uri                = responseUri;
            m_Verb               = verb;
            m_MediaType          = mediaType;
            m_UsesProxySemantics = usesProxySemantics;

            m_ConnectStream       = coreData.m_ConnectStream;
            m_HttpResponseHeaders = coreData.m_ResponseHeaders;
            m_ContentLength       = coreData.m_ContentLength;
            m_StatusCode          = coreData.m_StatusCode;
            m_StatusDescription   = coreData.m_StatusDescription;
            m_IsVersionHttp11     = coreData.m_IsVersionHttp11;


            //if the returned contentlength is zero, preemptively invoke calldone on the stream.
            //this will wake up any pending reads.
            if (m_ContentLength == 0 && m_ConnectStream is ConnectStream)
            {
                ((ConnectStream)m_ConnectStream).CallDone();
            }

            // handle Content-Location header, by combining it with the orginal request.
            string contentLocation = m_HttpResponseHeaders[HttpKnownHeaderNames.ContentLocation];

            if (contentLocation != null)
            {
                try
                {
                    m_Uri = new Uri(m_Uri, contentLocation);
                }
                catch (UriFormatException e)
                {
                    GlobalLog.Assert("Exception on response Uri parsing.", e.ToString());
                }
            }
            // decompress responses by hooking up a final response Stream - only if user required it
            if (decompressionMethod != DecompressionMethods.None)
            {
                string contentEncoding = m_HttpResponseHeaders[HttpKnownHeaderNames.ContentEncoding];
                if (contentEncoding != null)
                {
                    if (((decompressionMethod & DecompressionMethods.GZip) != 0) && contentEncoding.IndexOf(HttpWebRequest.GZipHeader) != -1)
                    {
                        m_ConnectStream = new GZipWrapperStream(m_ConnectStream, CompressionMode.Decompress);
                        m_ContentLength = -1; // unknown on compressed streams

                        // Setting a response header after parsing will ruin the Common Header optimization.
                        // This seems like a corner case.  ContentEncoding could be added as a common header, with a special
                        // property allowing it to be nulled.
                        m_HttpResponseHeaders[HttpKnownHeaderNames.ContentEncoding] = null;
                    }
                    else if (((decompressionMethod & DecompressionMethods.Deflate) != 0) && contentEncoding.IndexOf(HttpWebRequest.DeflateHeader) != -1)
                    {
                        m_ConnectStream = new DeflateWrapperStream(m_ConnectStream, CompressionMode.Decompress);
                        m_ContentLength = -1; // unknown on compressed streams

                        // Setting a response header after parsing will ruin the Common Header optimization.
                        // This seems like a corner case.  ContentEncoding could be added as a common header, with a special
                        // property allowing it to be nulled.
                        m_HttpResponseHeaders[HttpKnownHeaderNames.ContentEncoding] = null;
                    }
                }
            }
        }
コード例 #3
0
        internal HttpWebResponse(Uri responseUri, KnownHttpVerb verb, CoreResponseData coreData, string mediaType, bool usesProxySemantics, DecompressionMethods decompressionMethod)
        {
            m_Uri = responseUri;
            m_Verb = verb;
            m_MediaType = mediaType;
            m_UsesProxySemantics = usesProxySemantics;

            m_ConnectStream = coreData.m_ConnectStream;
            m_HttpResponseHeaders = coreData.m_ResponseHeaders;
            m_ContentLength = coreData.m_ContentLength;
            m_StatusCode = coreData.m_StatusCode;
            m_StatusDescription = coreData.m_StatusDescription;
            m_IsVersionHttp11 = coreData.m_IsVersionHttp11;

            //if the returned contentlength is zero, preemptively invoke calldone on the stream.
            //this will wake up any pending reads.
            if (m_ContentLength == 0 && m_ConnectStream is ConnectStream)
            {
                ((ConnectStream)m_ConnectStream).CallDone();
            }

            // handle Content-Location header, by combining it with the orginal request.
            string contentLocation = m_HttpResponseHeaders[HttpKnownHeaderNames.ContentLocation];

            if (contentLocation != null)
            {
                try
                {
                    m_Uri = new Uri(m_Uri, contentLocation);
                }
                catch (UriFormatException e)
                {
                    GlobalLog.Assert("Exception on response Uri parsing.", e.ToString());
                }
            }
            // decompress responses by hooking up a final response Stream - only if user required it
            if (decompressionMethod != DecompressionMethods.None)
            {
                string contentEncoding = m_HttpResponseHeaders[HttpKnownHeaderNames.ContentEncoding];
                if (contentEncoding != null)
                {
                    if (((decompressionMethod & DecompressionMethods.GZip) != 0) && contentEncoding.IndexOf(HttpWebRequest.GZipHeader) != -1)
                    {
                        m_ConnectStream = new GZipWrapperStream(m_ConnectStream, CompressionMode.Decompress);
                        m_ContentLength = -1; // unknown on compressed streams

                        // Setting a response header after parsing will ruin the Common Header optimization.
                        // This seems like a corner case.  ContentEncoding could be added as a common header, with a special
                        // property allowing it to be nulled.
                        m_HttpResponseHeaders[HttpKnownHeaderNames.ContentEncoding] = null;
                    }
                    else if (((decompressionMethod & DecompressionMethods.Deflate) != 0) && contentEncoding.IndexOf(HttpWebRequest.DeflateHeader) != -1)
                    {
                        m_ConnectStream = new DeflateWrapperStream(m_ConnectStream, CompressionMode.Decompress);
                        m_ContentLength = -1; // unknown on compressed streams

                        // Setting a response header after parsing will ruin the Common Header optimization.
                        // This seems like a corner case.  ContentEncoding could be added as a common header, with a special
                        // property allowing it to be nulled.
                        m_HttpResponseHeaders[HttpKnownHeaderNames.ContentEncoding] = null;
                    }
                }
            }
        }
コード例 #4
0
ファイル: Internal.cs プロジェクト: Alister742/ParseKit
 internal CoreResponseData Clone()
 {
     CoreResponseData cloneResponseData = new CoreResponseData();
     cloneResponseData.m_StatusCode        = m_StatusCode;
     cloneResponseData.m_StatusDescription = m_StatusDescription;
     cloneResponseData.m_IsVersionHttp11   = m_IsVersionHttp11;
     cloneResponseData.m_ContentLength     = m_ContentLength;
     cloneResponseData.m_ResponseHeaders   = m_ResponseHeaders;
     cloneResponseData.m_ConnectStream     = m_ConnectStream;
     return cloneResponseData;
 }