Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ParseStatusLine()

static void System.Net.Http.HttpConnection.ParseStatusLine ( ReadOnlySpan< byte > line,
HttpResponseMessage response )
inlinestaticprivate

Definition at line 1775 of file HttpConnection.cs.

1776 {
1777 if (line.Length < 12 || line[8] != 32)
1778 {
1779 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_status_line, Encoding.ASCII.GetString(line)));
1780 }
1781 ulong num = BitConverter.ToUInt64(line);
1782 if (num == s_http11Bytes)
1783 {
1784 response.SetVersionWithoutValidation(HttpVersion.Version11);
1785 }
1786 else if (num == s_http10Bytes)
1787 {
1788 response.SetVersionWithoutValidation(HttpVersion.Version10);
1789 }
1790 else
1791 {
1792 byte b = line[7];
1793 if (!HttpConnectionBase.IsDigit(b) || !line.Slice(0, 7).SequenceEqual(s_http1DotBytes))
1794 {
1795 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_status_line, Encoding.ASCII.GetString(line)));
1796 }
1797 response.SetVersionWithoutValidation(new Version(1, b - 48));
1798 }
1799 byte b2 = line[9];
1800 byte b3 = line[10];
1801 byte b4 = line[11];
1802 if (!HttpConnectionBase.IsDigit(b2) || !HttpConnectionBase.IsDigit(b3) || !HttpConnectionBase.IsDigit(b4))
1803 {
1804 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_status_code, Encoding.ASCII.GetString(line.Slice(9, 3))));
1805 }
1806 response.SetStatusCodeWithoutValidation((HttpStatusCode)(100 * (b2 - 48) + 10 * (b3 - 48) + (b4 - 48)));
1807 if (line.Length == 12)
1808 {
1809 response.SetReasonPhraseWithoutValidation(string.Empty);
1810 return;
1811 }
1812 if (line[12] == 32)
1813 {
1815 string text = HttpStatusDescription.Get(response.StatusCode);
1816 if (text != null && EqualsOrdinal(text, readOnlySpan))
1817 {
1818 response.SetReasonPhraseWithoutValidation(text);
1819 return;
1820 }
1821 try
1822 {
1823 response.ReasonPhrase = HttpRuleParser.DefaultHttpEncoding.GetString(readOnlySpan);
1824 return;
1825 }
1826 catch (FormatException inner)
1827 {
1828 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_status_reason, Encoding.ASCII.GetString(readOnlySpan.ToArray())), inner);
1829 }
1830 }
1831 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_status_line, Encoding.ASCII.GetString(line)));
1832 }
static readonly byte[] s_http1DotBytes
static bool EqualsOrdinal(string left, ReadOnlySpan< byte > right)
static readonly ulong s_http10Bytes
static readonly ulong s_http11Bytes
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_http_invalid_response_status_reason
Definition SR.cs:110
static string net_http_invalid_response_status_code
Definition SR.cs:108
static string net_http_invalid_response_status_line
Definition SR.cs:106
Definition SR.cs:7
static Encoding ASCII
Definition Encoding.cs:511

References System.Text.Encoding.ASCII, System.Net.Http.HttpRuleParser.DefaultHttpEncoding, System.Net.Http.HttpConnection.EqualsOrdinal(), System.SR.Format(), System.Net.HttpStatusDescription.Get(), System.Net.Http.HttpConnectionBase.IsDigit(), System.SR.net_http_invalid_response_status_code, System.SR.net_http_invalid_response_status_line, System.SR.net_http_invalid_response_status_reason, System.Net.Http.HttpConnection.s_http10Bytes, System.Net.Http.HttpConnection.s_http11Bytes, System.Net.Http.HttpConnection.s_http1DotBytes, System.text, System.BitConverter.ToUInt64(), System.Net.Version, System.Net.HttpVersion.Version10, and System.Net.HttpVersion.Version11.

Referenced by System.Net.Http.HttpConnection.SendAsyncCore().