System.Net.Http.CurlResponseHeaderReader.ReadStatusLine C# (CSharp) Method

ReadStatusLine() public method

public ReadStatusLine ( HttpResponseMessage response ) : bool
response HttpResponseMessage
return bool
        public bool ReadStatusLine(HttpResponseMessage response)
        {
            if (!_span.StartsWithHttpPrefix())
            {
                return false;
            }

            int index = HttpPrefix.Length;
            int majorVersion = _span.ReadInt(ref index);
            CheckResponseMsgFormat(majorVersion != 0);

            CheckResponseMsgFormat(index < _span.Length && _span[index] == '.');
            index++;

            // Need minor version.
            CheckResponseMsgFormat(index < _span.Length && _span[index] >= '0' && _span[index] <= '9');
            int minorVersion = _span.ReadInt(ref index);

            CheckResponseMsgFormat(_span.SkipSpace(ref index));

            // Parse status code.
            int statusCode = _span.ReadInt(ref index);
            CheckResponseMsgFormat(statusCode >= 100 && statusCode < 1000);

            bool foundSpace = _span.SkipSpace(ref index);
            CheckResponseMsgFormat(index <= _span.Length);
            CheckResponseMsgFormat(foundSpace || index == _span.Length);

            // Set the response HttpVersion.
            response.Version =
                (majorVersion == 1 && minorVersion == 1) ? HttpVersionInternal.Version11 :
                (majorVersion == 1 && minorVersion == 0) ? HttpVersionInternal.Version10 :
                (majorVersion == 2 && minorVersion == 0) ? HttpVersionInternal.Version20 :
                HttpVersionInternal.Unknown;

            response.StatusCode = (HttpStatusCode)statusCode;

            // Try to use a known reason phrase instead of allocating a new string.
            HeaderBufferSpan reasonPhraseSpan = _span.Substring(index);
            string knownReasonPhrase = HttpStatusDescription.Get(response.StatusCode);
            response.ReasonPhrase = reasonPhraseSpan.EqualsOrdinal(knownReasonPhrase) ?
                knownReasonPhrase :
                reasonPhraseSpan.ToString();

            return true;
        }