private void ResponseStatus(PipeStream pipeStream) { if (Status == RequestStatus.Responding) { var indexof = pipeStream.IndexOf(HeaderTypeFactory.LINE_BYTES); if (indexof.EofData != null) { pipeStream.Read(mBuffer, 0, indexof.Length); GetRequestStream().Write(mBuffer, 0, indexof.Length); var result = HttpParse.AnalyzeResponseLine(new ReadOnlySpan <byte>(mBuffer, 0, indexof.Length - 2)); Code = result.Item2; Status = RequestStatus.RespondingHeader; } } }
public LoadedState Load(PipeStream stream) { string line; if (mState == LoadedState.None) { if (stream.TryReadWith(HeaderTypeFactory.LINE_BYTES, out line)) { HttpParse.AnalyzeResponseLine(line, this); mState = LoadedState.Method; } } if (mState == LoadedState.Method) { if (Header.Read(stream, Cookies)) { mState = LoadedState.Header; } } if (mState == LoadedState.Header) { if (string.Compare(Header[HeaderTypeFactory.CONNECTION], "close", true) == 0) { this.KeepAlive = false; } if (string.Compare(Header[HeaderTypeFactory.TRANSFER_ENCODING], "chunked", true) == 0) { Chunked = true; } else { string lenstr = Header[HeaderTypeFactory.CONTENT_LENGTH]; int length = 0; if (lenstr != null) { int.TryParse(lenstr, out length); } Length = length; } mState = LoadedState.Completed; } return(mState); }
public bool Read(PipeStream stream) { while (stream.TryReadLine(out string line)) { if (string.IsNullOrEmpty(line)) { return(true); } if (Code == null) { var result = HttpParse.AnalyzeResponseLine(line.AsSpan()); Code = result.Item2; HttpVersion = result.Item1; Message = result.Item3; } else { var header = HttpParse.AnalyzeHeader(line.AsSpan()); Headers[header.Item1] = header.Item2; } } return(false); }