Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
HttpHeaders.cs
Go to the documentation of this file.
6using System.Text;
7
9
10public abstract class HttpHeaders : IEnumerable<KeyValuePair<string, IEnumerable<string>>>, IEnumerable
11{
12 internal sealed class HeaderStoreItemInfo
13 {
14 internal object RawValue;
15
16 internal object InvalidValue;
17
18 internal object ParsedValue;
19
20 internal bool IsEmpty
21 {
22 get
23 {
24 if (RawValue == null && InvalidValue == null)
25 {
26 return ParsedValue == null;
27 }
28 return false;
29 }
30 }
31
33 {
34 }
35
37 {
38 if (!parser.SupportsMultipleValues)
39 {
40 if (InvalidValue == null)
41 {
42 return ParsedValue == null;
43 }
44 return false;
45 }
46 return true;
47 }
48 }
49
51
53
55
57
59
60 protected HttpHeaders()
62 {
63 }
64
70
71 public void Add(string name, string? value)
72 {
74 }
75
76 internal void Add(HeaderDescriptor descriptor, string value)
77 {
79 ParseAndAddValue(descriptor, info, value);
80 if (addToStore && info.ParsedValue != null)
81 {
82 AddHeaderToStore(descriptor, info);
83 }
84 }
85
86 public void Add(string name, IEnumerable<string?> values)
87 {
89 }
90
92 {
93 if (values == null)
94 {
95 throw new ArgumentNullException("values");
96 }
98 try
99 {
100 foreach (string value in values)
101 {
102 ParseAndAddValue(descriptor, info, value);
103 }
104 }
105 finally
106 {
107 if (addToStore && info.ParsedValue != null)
108 {
109 AddHeaderToStore(descriptor, info);
110 }
111 }
112 }
113
114 public bool TryAddWithoutValidation(string name, string? value)
115 {
116 if (TryGetHeaderDescriptor(name, out var descriptor))
117 {
118 return TryAddWithoutValidation(descriptor, value);
119 }
120 return false;
121 }
122
123 internal bool TryAddWithoutValidation(HeaderDescriptor descriptor, string value)
124 {
125 if (value == null)
126 {
127 value = string.Empty;
128 }
129 if (_headerStore == null)
130 {
132 }
133 if (_headerStore.TryGetValue(descriptor, out var value2))
134 {
136 {
138 }
139 else
140 {
143 {
144 RawValue = value2
145 };
147 headerStore[descriptor] = obj;
149 }
150 }
151 else
152 {
153 _headerStore.Add(descriptor, value);
154 }
155 return true;
156 }
157
159 {
160 if (TryGetHeaderDescriptor(name, out var descriptor))
161 {
162 return TryAddWithoutValidation(descriptor, values);
163 }
164 return false;
165 }
166
168 {
169 if (values == null)
170 {
171 throw new ArgumentNullException("values");
172 }
174 {
175 if (enumerator.MoveNext())
176 {
177 TryAddWithoutValidation(descriptor, enumerator.Current);
178 if (enumerator.MoveNext())
179 {
181 do
182 {
183 AddRawValue(orCreateHeaderInfo, enumerator.Current ?? string.Empty);
184 }
185 while (enumerator.MoveNext());
186 }
187 }
188 }
189 return true;
190 }
191
192 public void Clear()
193 {
195 }
196
197 public IEnumerable<string> GetValues(string name)
198 {
199 return GetValues(GetHeaderDescriptor(name));
200 }
201
203 {
204 if (TryGetValues(descriptor, out var values))
205 {
206 return values;
207 }
209 }
210
211 public bool TryGetValues(string name, [NotNullWhen(true)] out IEnumerable<string>? values)
212 {
213 if (TryGetHeaderDescriptor(name, out var descriptor))
214 {
215 return TryGetValues(descriptor, out values);
216 }
217 values = null;
218 return false;
219 }
220
222 {
223 if (_headerStore != null && TryGetAndParseHeaderInfo(descriptor, out var info))
224 {
226 return true;
227 }
228 values = null;
229 return false;
230 }
231
232 public bool Contains(string name)
233 {
234 return Contains(GetHeaderDescriptor(name));
235 }
236
237 internal bool Contains(HeaderDescriptor descriptor)
238 {
240 if (_headerStore != null)
241 {
242 return TryGetAndParseHeaderInfo(descriptor, out info);
243 }
244 return false;
245 }
246
247 public override string ToString()
248 {
252 if (headerStore != null)
253 {
255 {
256 valueStringBuilder.Append(item.Key.Name);
257 valueStringBuilder.Append(": ");
259 if (singleValue != null)
260 {
262 }
263 else
264 {
265 HttpHeaderParser parser = item.Key.Parser;
266 string s = ((parser != null && parser.SupportsMultipleValues) ? parser.Separator : ", ");
267 for (int i = 0; i < multiValue.Length; i++)
268 {
269 if (i != 0)
270 {
271 valueStringBuilder.Append(s);
272 }
274 }
275 }
277 }
278 }
279 return valueStringBuilder.ToString();
280 }
281
282 internal string GetHeaderString(HeaderDescriptor descriptor)
283 {
284 if (TryGetHeaderValue(descriptor, out var value))
285 {
287 if (singleValue != null)
288 {
289 return singleValue;
290 }
291 string separator = ((descriptor.Parser != null && descriptor.Parser.SupportsMultipleValues) ? descriptor.Parser.Separator : ", ");
292 return string.Join(separator, multiValue);
293 }
294 return string.Empty;
295 }
296
305
333
338
344
345 internal void SetParsedValue(HeaderDescriptor descriptor, object value)
346 {
348 orCreateHeaderInfo.InvalidValue = null;
349 orCreateHeaderInfo.ParsedValue = null;
350 orCreateHeaderInfo.RawValue = null;
352 }
353
354 internal void SetOrRemoveParsedValue(HeaderDescriptor descriptor, object value)
355 {
356 if (value == null)
357 {
358 Remove(descriptor);
359 }
360 else
361 {
362 SetParsedValue(descriptor, value);
363 }
364 }
365
366 public bool Remove(string name)
367 {
368 return Remove(GetHeaderDescriptor(name));
369 }
370
371 internal bool Remove(HeaderDescriptor descriptor)
372 {
373 if (_headerStore != null)
374 {
375 return _headerStore.Remove(descriptor);
376 }
377 return false;
378 }
379
380 internal bool RemoveParsedValue(HeaderDescriptor descriptor, object value)
381 {
382 if (_headerStore == null)
383 {
384 return false;
385 }
386 if (TryGetAndParseHeaderInfo(descriptor, out var info))
387 {
388 if (info.ParsedValue == null)
389 {
390 return false;
391 }
392 bool result = false;
394 if (!(info.ParsedValue is List<object> list))
395 {
396 if (AreEqual(value, info.ParsedValue, comparer))
397 {
398 info.ParsedValue = null;
399 result = true;
400 }
401 }
402 else
403 {
404 foreach (object item in list)
405 {
407 {
408 result = list.Remove(item);
409 break;
410 }
411 }
412 if (list.Count == 0)
413 {
414 info.ParsedValue = null;
415 }
416 }
417 if (info.IsEmpty)
418 {
419 bool flag = Remove(descriptor);
420 }
421 return result;
422 }
423 return false;
424 }
425
426 internal bool ContainsParsedValue(HeaderDescriptor descriptor, object value)
427 {
428 if (_headerStore == null)
429 {
430 return false;
431 }
432 if (TryGetAndParseHeaderInfo(descriptor, out var info))
433 {
434 if (info.ParsedValue == null)
435 {
436 return false;
437 }
438 List<object> list = info.ParsedValue as List<object>;
440 if (list == null)
441 {
442 return AreEqual(value, info.ParsedValue, comparer);
443 }
444 foreach (object item in list)
445 {
447 {
448 return true;
449 }
450 }
451 return false;
452 }
453 return false;
454 }
455
456 internal virtual void AddHeaders(HttpHeaders sourceHeaders)
457 {
459 if (headerStore == null || headerStore.Count == 0)
460 {
461 return;
462 }
463 if (_headerStore == null)
464 {
466 }
468 {
469 if (!_headerStore.ContainsKey(item.Key))
470 {
471 object value = item.Value;
473 {
475 }
476 else
477 {
479 }
480 }
481 }
482 }
483
485 {
487 headerStoreItemInfo.RawValue = CloneStringHeaderInfoValues(sourceInfo.RawValue);
488 if (descriptor.Parser == null)
489 {
490 headerStoreItemInfo.ParsedValue = CloneStringHeaderInfoValues(sourceInfo.ParsedValue);
491 return;
492 }
493 headerStoreItemInfo.InvalidValue = CloneStringHeaderInfoValues(sourceInfo.InvalidValue);
494 if (sourceInfo.ParsedValue == null)
495 {
496 return;
497 }
498 if (!(sourceInfo.ParsedValue is List<object> list))
499 {
501 return;
502 }
503 foreach (object item in list)
504 {
506 }
507 }
508
510 {
512 {
514 }
515 else
516 {
518 }
519 }
520
521 [return: NotNullIfNotNull("source")]
522 private static object CloneStringHeaderInfoValues(object source)
523 {
524 if (source == null)
525 {
526 return null;
527 }
529 {
530 return source;
531 }
532 return new List<object>(collection);
533 }
534
536 {
538 bool flag;
539 if (parseRawValues)
540 {
541 flag = TryGetAndParseHeaderInfo(descriptor, out info);
542 }
543 else
544 {
545 flag = TryGetHeaderValue(descriptor, out var value);
546 if (flag)
547 {
549 {
551 }
552 else
553 {
556 {
557 RawValue = value
558 };
559 info = obj;
560 headerStore[descriptor] = obj;
561 }
562 }
563 }
564 if (!flag)
565 {
566 info = CreateAndAddHeaderToStore(descriptor);
567 }
568 return info;
569 }
570
577
578 private void AddHeaderToStore(HeaderDescriptor descriptor, object value)
579 {
581 }
582
583 internal bool TryGetHeaderValue(HeaderDescriptor descriptor, [NotNullWhen(true)] out object value)
584 {
585 if (_headerStore == null)
586 {
587 value = null;
588 return false;
589 }
590 return _headerStore.TryGetValue(descriptor, out value);
591 }
592
594 {
596 {
598 {
600 }
601 else
602 {
605 {
606 RawValue = value
607 };
609 info = obj;
611 }
613 }
614 info = null;
615 return false;
616 }
617
619 {
620 if (info.RawValue != null)
621 {
622 if (!(info.RawValue is List<string> rawValues))
623 {
624 ParseSingleRawHeaderValue(descriptor, info);
625 }
626 else
627 {
629 }
630 info.RawValue = null;
631 if (info.InvalidValue == null && info.ParsedValue == null)
632 {
634 {
635 _headerStore.Remove(descriptor);
636 }
637 return false;
638 }
639 }
640 return true;
641 }
642
644 {
645 if (descriptor.Parser == null)
646 {
647 foreach (string rawValue in rawValues)
648 {
649 if (!ContainsNewLine(rawValue, descriptor.Name))
650 {
652 }
653 }
654 return;
655 }
656 foreach (string rawValue2 in rawValues)
657 {
658 if (!TryParseAndAddRawHeaderValue(descriptor, info, rawValue2, addWhenInvalid: true) && System.Net.NetEventSource.Log.IsEnabled())
659 {
660 System.Net.NetEventSource.Log.HeadersInvalidValue(descriptor.Name, rawValue2);
661 }
662 }
663 }
664
666 {
667 string text = info.RawValue as string;
668 if (descriptor.Parser == null)
669 {
670 if (!ContainsNewLine(text, descriptor.Name))
671 {
673 }
674 }
675 else if (!TryParseAndAddRawHeaderValue(descriptor, info, text, addWhenInvalid: true) && System.Net.NetEventSource.Log.IsEnabled())
676 {
677 System.Net.NetEventSource.Log.HeadersInvalidValue(descriptor.Name, text);
678 }
679 }
680
681 internal bool TryParseAndAddValue(HeaderDescriptor descriptor, string value)
682 {
684 bool flag = TryParseAndAddRawHeaderValue(descriptor, info, value, addWhenInvalid: false);
685 if (flag && addToStore && info.ParsedValue != null)
686 {
687 AddHeaderToStore(descriptor, info);
688 }
689 return flag;
690 }
691
693 {
694 if (!info.CanAddParsedValue(descriptor.Parser))
695 {
696 if (addWhenInvalid)
697 {
698 AddInvalidValue(info, value ?? string.Empty);
699 }
700 return false;
701 }
702 int index = 0;
703 if (descriptor.Parser.TryParseValue(value, info.ParsedValue, ref index, out var parsedValue))
704 {
705 if (value == null || index == value.Length)
706 {
707 if (parsedValue != null)
708 {
710 }
711 return true;
712 }
714 if (parsedValue != null)
715 {
716 list.Add(parsedValue);
717 }
718 while (index < value.Length)
719 {
720 if (descriptor.Parser.TryParseValue(value, info.ParsedValue, ref index, out parsedValue))
721 {
722 if (parsedValue != null)
723 {
724 list.Add(parsedValue);
725 }
726 continue;
727 }
728 if (!ContainsNewLine(value, descriptor.Name) && addWhenInvalid)
729 {
731 }
732 return false;
733 }
734 foreach (object item in list)
735 {
737 }
738 return true;
739 }
740 if (!ContainsNewLine(value, descriptor.Name) && addWhenInvalid)
741 {
742 AddInvalidValue(info, value ?? string.Empty);
743 }
744 return false;
745 }
746
747 private static void AddParsedValue(HeaderStoreItemInfo info, object value)
748 {
749 AddValueToStoreValue(value, ref info.ParsedValue);
750 }
751
752 private static void AddInvalidValue(HeaderStoreItemInfo info, string value)
753 {
754 AddValueToStoreValue(value, ref info.InvalidValue);
755 }
756
757 private static void AddRawValue(HeaderStoreItemInfo info, string value)
758 {
760 }
761
762 private static void AddValueToStoreValue<T>(T value, ref object currentStoreValue) where T : class
763 {
764 if (currentStoreValue == null)
765 {
767 return;
768 }
770 if (list == null)
771 {
772 list = new List<T>(2);
773 list.Add((T)currentStoreValue);
775 }
776 list.Add(value);
777 }
778
779 internal object GetParsedValues(HeaderDescriptor descriptor)
780 {
781 if (!TryGetAndParseHeaderInfo(descriptor, out var info))
782 {
783 return null;
784 }
785 return info.ParsedValue;
786 }
787
788 internal virtual bool IsAllowedHeaderName(HeaderDescriptor descriptor)
789 {
790 return true;
791 }
792
794 {
795 if (!IsAllowedHeaderName(descriptor))
796 {
798 }
799 addToStore = false;
800 if (!TryGetAndParseHeaderInfo(descriptor, out info))
801 {
803 addToStore = true;
804 }
805 }
806
808 {
809 if (descriptor.Parser == null)
810 {
812 AddParsedValue(info, value ?? string.Empty);
813 return;
814 }
815 if (!info.CanAddParsedValue(descriptor.Parser))
816 {
818 }
819 int index = 0;
820 object obj = descriptor.Parser.ParseValue(value, info.ParsedValue, ref index);
821 if (value == null || index == value.Length)
822 {
823 if (obj != null)
824 {
826 }
827 return;
828 }
830 if (obj != null)
831 {
832 list.Add(obj);
833 }
834 while (index < value.Length)
835 {
836 obj = descriptor.Parser.ParseValue(value, info.ParsedValue, ref index);
837 if (obj != null)
838 {
839 list.Add(obj);
840 }
841 }
842 foreach (object item in list)
843 {
845 }
846 }
847
849 {
850 if (string.IsNullOrEmpty(name))
851 {
853 }
854 if (!HeaderDescriptor.TryGet(name, out var descriptor))
855 {
857 }
858 if ((descriptor.HeaderType & _allowedHeaderTypes) != 0)
859 {
860 return descriptor;
861 }
862 if ((descriptor.HeaderType & _treatAsCustomHeaderTypes) != 0)
863 {
864 return descriptor.AsCustomHeader();
865 }
867 }
868
869 private bool TryGetHeaderDescriptor(string name, out HeaderDescriptor descriptor)
870 {
871 if (string.IsNullOrEmpty(name))
872 {
873 descriptor = default(HeaderDescriptor);
874 return false;
875 }
876 if (HeaderDescriptor.TryGet(name, out descriptor))
877 {
878 if ((descriptor.HeaderType & _allowedHeaderTypes) != 0)
879 {
880 return true;
881 }
882 if ((descriptor.HeaderType & _treatAsCustomHeaderTypes) != 0)
883 {
884 descriptor = descriptor.AsCustomHeader();
885 return true;
886 }
887 }
888 return false;
889 }
890
891 internal static void CheckContainsNewLine(string value)
892 {
893 if (value == null || !HttpRuleParser.ContainsNewLine(value))
894 {
895 return;
896 }
898 }
899
900 private static bool ContainsNewLine(string value, string name)
901 {
903 {
904 if (System.Net.NetEventSource.Log.IsEnabled())
905 {
907 }
908 return true;
909 }
910 return false;
911 }
912
914 {
916 return multiValue ?? new string[1] { singleValue };
917 }
918
919 internal static void GetStoreValuesAsStringOrStringArray(HeaderDescriptor descriptor, object sourceValues, out string singleValue, out string[] multiValue)
920 {
922 {
924 multiValue = null;
925 return;
926 }
928 singleValue = null;
930 if (valueCount == 1)
931 {
932 multiValue = null;
933 values = MemoryMarshal.CreateSpan(ref singleValue, 1);
934 }
935 else
936 {
937 values = (multiValue = ((valueCount != 0) ? new string[valueCount] : Array.Empty<string>()));
938 }
939 int currentIndex = 0;
940 ReadStoreValues<string>(values, headerStoreItemInfo.RawValue, null, ref currentIndex);
941 ReadStoreValues<object>(values, headerStoreItemInfo.ParsedValue, descriptor.Parser, ref currentIndex);
942 ReadStoreValues<string>(values, headerStoreItemInfo.InvalidValue, null, ref currentIndex);
943 }
944
945 internal static int GetStoreValuesIntoStringArray(HeaderDescriptor descriptor, object sourceValues, [NotNull] ref string[] values)
946 {
947 if (values == null)
948 {
949 values = Array.Empty<string>();
950 }
952 {
953 if (values.Length == 0)
954 {
955 values = new string[1];
956 }
958 return 1;
959 }
961 if (valueCount > 0)
962 {
963 if (values.Length < valueCount)
964 {
965 values = new string[valueCount];
966 }
967 int currentIndex = 0;
968 ReadStoreValues<string>(values, headerStoreItemInfo.RawValue, null, ref currentIndex);
969 ReadStoreValues<object>(values, headerStoreItemInfo.ParsedValue, descriptor.Parser, ref currentIndex);
970 ReadStoreValues<string>(values, headerStoreItemInfo.InvalidValue, null, ref currentIndex);
971 }
972 return valueCount;
973 }
974
976 {
977 int num = Count<string>(info.RawValue);
978 num += Count<string>(info.InvalidValue);
979 return num + Count<object>(info.ParsedValue);
980 static int Count<T>(object valueStore)
981 {
982 if (valueStore != null)
983 {
984 if (!(valueStore is List<T> list))
985 {
986 return 1;
987 }
988 return list.Count;
989 }
990 return 0;
991 }
992 }
993
994 private static void ReadStoreValues<T>(Span<string> values, object storeValue, HttpHeaderParser parser, ref int currentIndex)
995 {
996 if (storeValue == null)
997 {
998 return;
999 }
1000 if (!(storeValue is List<T> list))
1001 {
1002 values[currentIndex] = ((parser == null) ? storeValue.ToString() : parser.ToString(storeValue));
1003 currentIndex++;
1004 return;
1005 }
1006 foreach (T item in list)
1007 {
1008 object obj = item;
1009 values[currentIndex] = ((parser == null) ? obj.ToString() : parser.ToString(obj));
1010 currentIndex++;
1011 }
1012 }
1013
1015 {
1016 return comparer?.Equals(value, storeValue) ?? value.Equals(storeValue);
1017 }
1018}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
static string NewLine
static CultureInfo InvariantCulture
bool TryParseValue(string value, object storeValue, ref int index, [NotNullWhen(true)] out object parsedValue)
object ParseValue(string value, object storeValue, ref int index)
static void AddValueToStoreValue< T >(T value, ref object currentStoreValue)
HeaderStoreItemInfo CreateAndAddHeaderToStore(HeaderDescriptor descriptor)
bool TryGetAndParseHeaderInfo(HeaderDescriptor key, [NotNullWhen(true)] out HeaderStoreItemInfo info)
bool Remove(HeaderDescriptor descriptor)
static void ParseMultipleRawHeaderValues(HeaderDescriptor descriptor, HeaderStoreItemInfo info, List< string > rawValues)
IEnumerable< string > GetValues(HeaderDescriptor descriptor)
static void AddParsedValue(HeaderStoreItemInfo info, object value)
bool ParseRawHeaderValues(HeaderDescriptor descriptor, HeaderStoreItemInfo info, bool removeEmptyHeader)
bool TryParseAndAddValue(HeaderDescriptor descriptor, string value)
IEnumerable< string > GetValues(string name)
string GetHeaderString(HeaderDescriptor descriptor)
static int GetValueCount(HeaderStoreItemInfo info)
IEnumerator< KeyValuePair< string, IEnumerable< string > > > GetEnumerator()
static void CheckContainsNewLine(string value)
void SetParsedValue(HeaderDescriptor descriptor, object value)
static void CloneAndAddValue(HeaderStoreItemInfo destinationInfo, object source)
bool TryAddWithoutValidation(HeaderDescriptor descriptor, IEnumerable< string > values)
static bool ContainsNewLine(string value, string name)
void Add(HeaderDescriptor descriptor, string value)
bool RemoveParsedValue(HeaderDescriptor descriptor, object value)
bool TryGetValues(string name, [NotNullWhen(true)] out IEnumerable< string >? values)
bool ContainsParsedValue(HeaderDescriptor descriptor, object value)
bool TryGetHeaderDescriptor(string name, out HeaderDescriptor descriptor)
Dictionary< HeaderDescriptor, object >? HeaderStore
static object CloneStringHeaderInfoValues(object source)
static void ReadStoreValues< T >(Span< string > values, object storeValue, HttpHeaderParser parser, ref int currentIndex)
readonly HttpHeaderType _allowedHeaderTypes
bool TryAddWithoutValidation(HeaderDescriptor descriptor, string value)
static void AddRawValue(HeaderStoreItemInfo info, string value)
virtual void AddHeaders(HttpHeaders sourceHeaders)
static string[] GetStoreValuesAsStringArray(HeaderDescriptor descriptor, HeaderStoreItemInfo info)
HeaderStoreItemInfo GetOrCreateHeaderInfo(HeaderDescriptor descriptor, bool parseRawValues)
void AddHeaderToStore(HeaderDescriptor descriptor, object value)
static void AddInvalidValue(HeaderStoreItemInfo info, string value)
void Add(HeaderDescriptor descriptor, IEnumerable< string > values)
void PrepareHeaderInfoForAdd(HeaderDescriptor descriptor, out HeaderStoreItemInfo info, out bool addToStore)
static bool TryParseAndAddRawHeaderValue(HeaderDescriptor descriptor, HeaderStoreItemInfo info, string value, bool addWhenInvalid)
IEnumerator< KeyValuePair< string, IEnumerable< string > > > GetEnumeratorCore()
HttpHeadersNonValidated NonValidated
bool TryAddWithoutValidation(string name, string? value)
bool AreEqual(object value, object storeValue, IEqualityComparer comparer)
bool Contains(HeaderDescriptor descriptor)
void AddParsedValue(HeaderDescriptor descriptor, object value)
static void GetStoreValuesAsStringOrStringArray(HeaderDescriptor descriptor, object sourceValues, out string singleValue, out string[] multiValue)
void SetOrRemoveParsedValue(HeaderDescriptor descriptor, object value)
bool TryGetValues(HeaderDescriptor descriptor, [NotNullWhen(true)] out IEnumerable< string > values)
virtual bool IsAllowedHeaderName(HeaderDescriptor descriptor)
Dictionary< HeaderDescriptor, object > _headerStore
static int GetStoreValuesIntoStringArray(HeaderDescriptor descriptor, object sourceValues, [NotNull] ref string[] values)
static void ParseSingleRawHeaderValue(HeaderDescriptor descriptor, HeaderStoreItemInfo info)
readonly HttpHeaderType _treatAsCustomHeaderTypes
bool TryGetHeaderValue(HeaderDescriptor descriptor, [NotNullWhen(true)] out object value)
void Add(string name, string? value)
object GetParsedValues(HeaderDescriptor descriptor)
void Add(string name, IEnumerable< string?> values)
bool TryAddWithoutValidation(string name, IEnumerable< string?> values)
HttpHeaders(HttpHeaderType allowedHeaderTypes, HttpHeaderType treatAsCustomHeaderTypes)
void ParseAndAddValue(HeaderDescriptor descriptor, HeaderStoreItemInfo info, string value)
HeaderDescriptor GetHeaderDescriptor(string name)
void AddHeaderInfo(HeaderDescriptor descriptor, HeaderStoreItemInfo sourceInfo)
static bool ContainsNewLine(string value, int startIndex=0)
static readonly System.Net.NetEventSource Log
static void Error(object thisOrContextObject, FormattableString formattableString, [CallerMemberName] string memberName=null)
static string net_http_headers_invalid_header_name
Definition SR.cs:24
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_http_argument_empty_string
Definition SR.cs:52
static string net_http_headers_no_newlines
Definition SR.cs:36
static string net_http_headers_not_found
Definition SR.cs:20
static string net_http_headers_single_value_header
Definition SR.cs:22
static string net_http_log_headers_no_newlines
Definition SR.cs:76
static string net_http_headers_not_allowed_header_name
Definition SR.cs:28
Definition SR.cs:7
new IEnumerator< T > GetEnumerator()
static bool TryGet(string headerName, out HeaderDescriptor descriptor)