Esempio n. 1
0
 public CoreResponseData(StatusLineValues values, HttpResponseHeaders headers,Stream connectStream)
 {
     this.StatusCode = (HttpStatusCode)values.StatusCode;
     this.StatusDescription = values.StatusDescription;
     this.ContentLength = values.ContentLength;
     if (values.MajorVersion == 1 && values.MinorVersion == 1)
     {
         this.HttpVersion = HttpVersion.HTTP11;
     }
     else if (values.MajorVersion == 2 && values.MinorVersion == 0)
     {
         this.HttpVersion = HttpVersion.HTTP20;
     }
     this.ResponseHeaders = headers;
     this.ConnectStream = connectStream;
 }
Esempio n. 2
0
 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);
             }
         }
     }
 }
Esempio n. 3
0
 private DataParseStatus ParseResponseData(ArraySegment<byte> data, ref int bytesScanned, ref bool requestDone)
 {
     var result = DataParseStatus.NeedMoreData;
     requestDone = false;
     switch (_readState)
     {
         case ReadState.Start:
             {                       
                 _readState = ReadState.StatusLine;
                 _statusState = BeforeVersionNumbers;
                 _totalResponseHeadersLength = 0;
                 _statusLineValues = new StatusLineValues()
                 {
                     MajorVersion = 0,
                     MinorVersion = 0,
                     StatusCode = 0,
                     StatusDescription = ""
                 };
                 goto case ReadState.StatusLine;
             }
         case ReadState.StatusLine:
             {
                 var parseStatus = this.ParseStatusLine(data, ref bytesScanned);
                 if (parseStatus == DataParseStatus.Done)
                 {
                     _readState = ReadState.Headers;
                     _responseHeaders = new HttpResponseHeaders();
                     goto case ReadState.Headers;
                 }
                 else if (parseStatus != DataParseStatus.NeedMoreData)
                 {
                     result = parseStatus;
                     break;
                 }
                 break;
             }
         case ReadState.Headers:
             {
                 if (bytesScanned >= data.Count)
                 {
                     //need more data
                     break;
                 }
                 var parseStatus = _responseHeaders.ParseHeaders(data, ref bytesScanned, ref _totalResponseHeadersLength, _maximumResponseHeadersLength);
                 if (parseStatus == DataParseStatus.Invalid || parseStatus == DataParseStatus.DataTooBig)
                 {
                     result = parseStatus;
                     break;
                 }                            
                 else if (parseStatus == DataParseStatus.Done)
                 {
                     //if StatusCode  is BadRequest or Continue                            
                     goto case ReadState.Data;
                 }
                 break;
             }
         case ReadState.Data:
             {
                 requestDone = true;
                 result = DataParseStatus.Done;
                 break;
             }
     }
     return result;
 }