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

◆ OnHeader() [1/2]

void System.Net.Http.Http3RequestStream.OnHeader ( int? staticIndex,
HeaderDescriptor descriptor,
string staticValue,
ReadOnlySpan< byte > literalValue )
inlineprivate

Definition at line 834 of file Http3RequestStream.cs.

835 {
836 if (descriptor.Name[0] == ':')
837 {
838 if (descriptor.KnownHeader != KnownHeaders.PseudoStatus)
839 {
840 if (System.Net.NetEventSource.Log.IsEnabled())
841 {
842 Trace("Received unknown pseudo-header '" + descriptor.Name + "'.", "OnHeader");
843 }
844 throw new Http3ConnectionException(Http3ErrorCode.ProtocolError);
845 }
846 if (_headerState != 0)
847 {
848 if (System.Net.NetEventSource.Log.IsEnabled())
849 {
850 Trace("Received extra status header.", "OnHeader");
851 }
852 throw new Http3ConnectionException(Http3ErrorCode.ProtocolError);
853 }
854 int num = ((staticValue == null) ? HttpConnectionBase.ParseStatusCode(literalValue) : (staticIndex switch
855 {
856 24 => 103,
857 25 => 200,
858 26 => 304,
859 27 => 404,
860 28 => 503,
861 63 => 100,
862 64 => 204,
863 65 => 206,
864 66 => 302,
865 67 => 400,
866 68 => 403,
867 69 => 421,
868 70 => 425,
869 71 => 500,
870 _ => ParseStatusCode(staticIndex, staticValue),
871 }));
872 _response = new HttpResponseMessage
873 {
874 Version = HttpVersion.Version30,
875 RequestMessage = _request,
876 Content = new HttpConnectionResponseContent(),
877 StatusCode = (HttpStatusCode)num
878 };
879 if (num < 200)
880 {
881 _headerState = HeaderState.SkipExpect100Headers;
882 if (_response.StatusCode == HttpStatusCode.Continue && _expect100ContinueCompletionSource != null)
883 {
885 }
886 return;
887 }
888 _headerState = HeaderState.ResponseHeaders;
890 {
891 bool result = num < 300;
892 if (System.Net.NetEventSource.Log.IsEnabled())
893 {
894 Trace($"Expecting 100 Continue but received final status {num}.", "OnHeader");
895 }
897 }
898 }
899 else
900 {
901 if (_headerState == HeaderState.SkipExpect100Headers)
902 {
903 return;
904 }
905 string text = staticValue;
906 if (text == null)
907 {
910 }
911 switch (_headerState)
912 {
913 case HeaderState.StatusHeader:
914 if (System.Net.NetEventSource.Log.IsEnabled())
915 {
916 Trace("Received headers without :status.", "OnHeader");
917 }
918 throw new Http3ConnectionException(Http3ErrorCode.ProtocolError);
919 case HeaderState.ResponseHeaders:
920 if (descriptor.HeaderType.HasFlag(HttpHeaderType.Content))
921 {
923 }
924 else
925 {
926 _response.Headers.TryAddWithoutValidation(descriptor.HeaderType.HasFlag(HttpHeaderType.Request) ? descriptor.AsCustomHeader() : descriptor, text);
927 }
928 break;
929 case HeaderState.TrailingHeaders:
930 _trailingHeaders.Add((descriptor.HeaderType.HasFlag(HttpHeaderType.Request) ? descriptor.AsCustomHeader() : descriptor, text));
931 break;
932 case HeaderState.SkipExpect100Headers:
933 break;
934 }
935 }
936 int ParseStatusCode(int? index, string value)
937 {
938 string message = $"Unexpected QPACK table reference for Status code: index={index} value='{value}'";
939 if (System.Net.NetEventSource.Log.IsEnabled())
940 {
941 Trace(message, "OnHeader");
942 }
943 return HttpConnectionBase.ParseStatusCode(Encoding.ASCII.GetBytes(value));
944 }
945 }
bool TryAddWithoutValidation(string name, string? value)
static readonly KnownHeader PseudoStatus
void Trace(string message, [CallerMemberName] string memberName=null)
List<(HeaderDescriptor name, string value)> _trailingHeaders
readonly HttpRequestMessage _request
TaskCompletionSource< bool > _expect100ContinueCompletionSource
string GetResponseHeaderValueWithCaching(HeaderDescriptor descriptor, ReadOnlySpan< byte > value, Encoding valueEncoding)
HeaderEncodingSelector< HttpRequestMessage > _responseHeaderEncodingSelector
HttpContentHeaders Headers
static readonly System.Net.NetEventSource Log
static Encoding ASCII
Definition Encoding.cs:511

References System.Net.Http.Http3RequestStream._connection, System.Net.Http.Http3RequestStream._expect100ContinueCompletionSource, System.Net.Http.Http3RequestStream._headerState, System.Net.Http.Http3RequestStream._request, System.Net.Http.Http3RequestStream._response, System.Net.Http.HttpConnectionSettings._responseHeaderEncodingSelector, System.Net.Http.Http3RequestStream._trailingHeaders, System.Collections.Generic.List< T >.Add(), System.Text.Encoding.ASCII, System.Net.Http.Headers.HeaderDescriptor.AsCustomHeader(), System.Net.Http.HttpResponseMessage.Content, System.Net.Http.HttpConnectionBase.GetResponseHeaderValueWithCaching(), System.Net.Http.HttpContent.Headers, System.Net.Http.HttpResponseMessage.Headers, System.Net.Http.Headers.HeaderDescriptor.HeaderType, System.index, System.Net.Http.Headers.HeaderDescriptor.KnownHeader, System.Net.NetEventSource.Log, System.Net.Http.Headers.HeaderDescriptor.Name, System.Net.Http.HttpConnectionBase.ParseStatusCode(), System.Net.Http.Http3Connection.Pool, System.Net.Http.Headers.KnownHeaders.PseudoStatus, System.Net.Http.HttpConnectionPool.Settings, System.Net.Http.HttpResponseMessage.StatusCode, System.text, System.Net.Http.Http3RequestStream.Trace(), System.Net.Http.Headers.HttpHeaders.TryAddWithoutValidation(), System.Threading.Tasks.TaskCompletionSource< TResult >.TrySetResult(), System.value, and System.Net.HttpVersion.Version30.