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

◆ ParseHeaderNameValue()

static void System.Net.Http.HttpConnection.ParseHeaderNameValue ( HttpConnection connection,
ReadOnlySpan< byte > line,
HttpResponseMessage response,
bool isFromTrailer )
inlinestaticprivate

Definition at line 1834 of file HttpConnection.cs.

1835 {
1836 int i = 0;
1837 while (line[i] != 58 && line[i] != 32)
1838 {
1839 i++;
1840 if (i == line.Length)
1841 {
1842 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_header_line, Encoding.ASCII.GetString(line)));
1843 }
1844 }
1845 if (i == 0)
1846 {
1847 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_header_name, ""));
1848 }
1849 if (!HeaderDescriptor.TryGet(line.Slice(0, i), out var descriptor))
1850 {
1851 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_header_name, Encoding.ASCII.GetString(line.Slice(0, i))));
1852 }
1853 if (isFromTrailer && descriptor.KnownHeader != null && (descriptor.KnownHeader.HeaderType & HttpHeaderType.NonTrailing) == HttpHeaderType.NonTrailing)
1854 {
1855 if (System.Net.NetEventSource.Log.IsEnabled())
1856 {
1857 connection.Trace("Stripping forbidden " + descriptor.Name + " from trailer headers.", "ParseHeaderNameValue");
1858 }
1859 return;
1860 }
1861 while (line[i] == 32)
1862 {
1863 i++;
1864 if (i == line.Length)
1865 {
1866 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_header_line, Encoding.ASCII.GetString(line)));
1867 }
1868 }
1869 if (line[i++] != 58)
1870 {
1871 throw new HttpRequestException(System.SR.Format(System.SR.net_http_invalid_response_header_line, Encoding.ASCII.GetString(line)));
1872 }
1873 for (; i < line.Length && (line[i] == 32 || line[i] == 9); i++)
1874 {
1875 }
1876 Encoding valueEncoding = connection._pool.Settings._responseHeaderEncodingSelector?.Invoke(descriptor.Name, response.RequestMessage);
1878 if (isFromTrailer)
1879 {
1880 string headerValue = descriptor.GetHeaderValue(readOnlySpan, valueEncoding);
1881 response.TrailingHeaders.TryAddWithoutValidation(((descriptor.HeaderType & HttpHeaderType.Request) == HttpHeaderType.Request) ? descriptor.AsCustomHeader() : descriptor, headerValue);
1882 }
1883 else if ((descriptor.HeaderType & HttpHeaderType.Content) == HttpHeaderType.Content)
1884 {
1885 string headerValue2 = descriptor.GetHeaderValue(readOnlySpan, valueEncoding);
1886 response.Content.Headers.TryAddWithoutValidation(descriptor, headerValue2);
1887 }
1888 else
1889 {
1890 string responseHeaderValueWithCaching = connection.GetResponseHeaderValueWithCaching(descriptor, readOnlySpan, valueEncoding);
1891 response.Headers.TryAddWithoutValidation(((descriptor.HeaderType & HttpHeaderType.Request) == HttpHeaderType.Request) ? descriptor.AsCustomHeader() : descriptor, responseHeaderValueWithCaching);
1892 }
1893 }
static readonly System.Net.NetEventSource Log
static string net_http_invalid_response_header_line
Definition SR.cs:116
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_http_invalid_response_header_name
Definition SR.cs:118
Definition SR.cs:7
static Encoding ASCII
Definition Encoding.cs:511
static bool TryGet(string headerName, out HeaderDescriptor descriptor)

References System.Net.Http.HttpConnection._pool, System.Net.Http.HttpConnectionSettings._responseHeaderEncodingSelector, System.Text.Encoding.ASCII, System.SR.Format(), System.Net.Http.HttpConnectionBase.GetResponseHeaderValueWithCaching(), System.Net.NetEventSource.Log, System.SR.net_http_invalid_response_header_line, System.SR.net_http_invalid_response_header_name, System.Net.Http.HttpConnectionPool.Settings, System.Net.Http.HttpConnection.Trace(), and System.Net.Http.Headers.HeaderDescriptor.TryGet().

Referenced by System.Net.Http.HttpConnection.ChunkedEncodingReadStream.ReadChunkFromConnectionBuffer(), and System.Net.Http.HttpConnection.SendAsyncCore().