Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
NameValueHeaderValue.cs
Go to the documentation of this file.
3using System.Text;
4
6
8{
9 private static readonly Func<NameValueHeaderValue> s_defaultNameValueCreator = CreateNameValue;
10
11 private string _name;
12
13 private string _value;
14
15 public string Name => _name;
16
17 public string? Value
18 {
19 get
20 {
21 return _value;
22 }
23 set
24 {
26 _value = value;
27 }
28 }
29
31 {
32 }
33
34 public NameValueHeaderValue(string name)
35 : this(name, null)
36 {
37 }
38
39 public NameValueHeaderValue(string name, string? value)
40 {
42 _name = name;
43 _value = value;
44 }
45
47 {
48 _name = source._name;
49 _value = source._value;
50 }
51
52 public override int GetHashCode()
53 {
54 int hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(_name);
55 if (!string.IsNullOrEmpty(_value))
56 {
57 if (_value[0] == '"')
58 {
59 return hashCode ^ _value.GetHashCode();
60 }
61 return hashCode ^ StringComparer.OrdinalIgnoreCase.GetHashCode(_value);
62 }
63 return hashCode;
64 }
65
66 public override bool Equals([NotNullWhen(true)] object? obj)
67 {
68 if (!(obj is NameValueHeaderValue nameValueHeaderValue))
69 {
70 return false;
71 }
72 if (!string.Equals(_name, nameValueHeaderValue._name, StringComparison.OrdinalIgnoreCase))
73 {
74 return false;
75 }
76 if (string.IsNullOrEmpty(_value))
77 {
78 return string.IsNullOrEmpty(nameValueHeaderValue._value);
79 }
80 if (_value[0] == '"')
81 {
82 return string.Equals(_value, nameValueHeaderValue._value, StringComparison.Ordinal);
83 }
84 return string.Equals(_value, nameValueHeaderValue._value, StringComparison.OrdinalIgnoreCase);
85 }
86
87 public static NameValueHeaderValue Parse(string? input)
88 {
89 int index = 0;
91 }
92
93 public static bool TryParse([NotNullWhen(true)] string? input, [NotNullWhen(true)] out NameValueHeaderValue? parsedValue)
94 {
95 int index = 0;
96 parsedValue = null;
97 if (GenericHeaderParser.SingleValueNameValueParser.TryParseValue(input, null, ref index, out var parsedValue2))
98 {
99 parsedValue = (NameValueHeaderValue)parsedValue2;
100 return true;
101 }
102 return false;
103 }
104
105 public override string ToString()
106 {
107 if (!string.IsNullOrEmpty(_value))
108 {
109 return _name + "=" + _value;
110 }
111 return _name;
112 }
113
115 {
116 if (GetType() != typeof(NameValueHeaderValue))
117 {
118 sb.Append(ToString());
119 return;
120 }
121 sb.Append(_name);
122 if (!string.IsNullOrEmpty(_value))
123 {
124 sb.Append('=');
125 sb.Append(_value);
126 }
127 }
128
129 internal static void ToString(ObjectCollection<NameValueHeaderValue> values, char separator, bool leadingSeparator, StringBuilder destination)
130 {
131 if (values == null || values.Count == 0)
132 {
133 return;
134 }
136 {
137 if (leadingSeparator || destination.Length > 0)
138 {
139 destination.Append(separator);
140 destination.Append(' ');
141 }
142 value.AddToStringBuilder(destination);
143 }
144 }
145
147 {
148 if (values == null || values.Count == 0)
149 {
150 return 0;
151 }
152 int num = 0;
154 {
155 num ^= value.GetHashCode();
156 }
157 return num;
158 }
159
160 internal static int GetNameValueLength(string input, int startIndex, out NameValueHeaderValue parsedValue)
161 {
163 }
164
165 internal static int GetNameValueLength(string input, int startIndex, Func<NameValueHeaderValue> nameValueCreator, out NameValueHeaderValue parsedValue)
166 {
167 parsedValue = null;
168 if (string.IsNullOrEmpty(input) || startIndex >= input.Length)
169 {
170 return 0;
171 }
172 int tokenLength = HttpRuleParser.GetTokenLength(input, startIndex);
173 if (tokenLength == 0)
174 {
175 return 0;
176 }
177 string name = input.Substring(startIndex, tokenLength);
178 int num = startIndex + tokenLength;
180 if (num == input.Length || input[num] != '=')
181 {
182 parsedValue = nameValueCreator();
183 parsedValue._name = name;
185 return num - startIndex;
186 }
187 num++;
189 int valueLength = GetValueLength(input, num);
190 if (valueLength == 0)
191 {
192 return 0;
193 }
194 parsedValue = nameValueCreator();
195 parsedValue._name = name;
196 parsedValue._value = input.Substring(num, valueLength);
197 num += valueLength;
199 return num - startIndex;
200 }
201
202 internal static int GetNameValueListLength(string input, int startIndex, char delimiter, ObjectCollection<NameValueHeaderValue> nameValueCollection)
203 {
204 if (string.IsNullOrEmpty(input) || startIndex >= input.Length)
205 {
206 return 0;
207 }
209 while (true)
210 {
211 NameValueHeaderValue parsedValue;
212 int nameValueLength = GetNameValueLength(input, num, s_defaultNameValueCreator, out parsedValue);
213 if (nameValueLength == 0)
214 {
215 return 0;
216 }
217 nameValueCollection.Add(parsedValue);
218 num += nameValueLength;
220 if (num == input.Length || input[num] != delimiter)
221 {
222 break;
223 }
224 num++;
226 }
227 return num - startIndex;
228 }
229
231 {
232 if (values == null || values.Count == 0)
233 {
234 return null;
235 }
237 {
238 if (string.Equals(value.Name, name, StringComparison.OrdinalIgnoreCase))
239 {
240 return value;
241 }
242 }
243 return null;
244 }
245
246 internal static int GetValueLength(string input, int startIndex)
247 {
248 if (startIndex >= input.Length)
249 {
250 return 0;
251 }
254 {
255 return 0;
256 }
257 return length;
258 }
259
260 private static void CheckNameValueFormat(string name, string value)
261 {
262 HeaderUtilities.CheckValidToken(name, "name");
264 }
265
266 private static void CheckValueFormat(string value)
267 {
268 if (string.IsNullOrEmpty(value))
269 {
270 return;
271 }
272 if (value[0] == ' ' || value[0] == '\t' || value[^1] == ' ' || value[^1] == '\t')
273 {
274 ThrowFormatException(value);
275 }
276 if (value[0] == '"')
277 {
278 if (HttpRuleParser.GetQuotedStringLength(value, 0, out var length) != 0 || length != value.Length)
279 {
280 ThrowFormatException(value);
281 }
282 }
284 {
285 ThrowFormatException(value);
286 }
287 static void ThrowFormatException(string value)
288 {
290 }
291 }
292
294 {
295 return new NameValueHeaderValue();
296 }
297
299 {
300 return new NameValueHeaderValue(this);
301 }
302}
static CultureInfo InvariantCulture
static readonly GenericHeaderParser SingleValueNameValueParser
static void CheckValidToken(string value, string parameterName)
static int GetNameValueListLength(string input, int startIndex, char delimiter, ObjectCollection< NameValueHeaderValue > nameValueCollection)
static int GetNameValueLength(string input, int startIndex, Func< NameValueHeaderValue > nameValueCreator, out NameValueHeaderValue parsedValue)
static NameValueHeaderValue Find(ObjectCollection< NameValueHeaderValue > values, string name)
static void CheckNameValueFormat(string name, string value)
static int GetHashCode(ObjectCollection< NameValueHeaderValue > values)
static void ToString(ObjectCollection< NameValueHeaderValue > values, char separator, bool leadingSeparator, StringBuilder destination)
static int GetNameValueLength(string input, int startIndex, out NameValueHeaderValue parsedValue)
override bool Equals([NotNullWhen(true)] object? obj)
static bool TryParse([NotNullWhen(true)] string? input, [NotNullWhen(true)] out NameValueHeaderValue? parsedValue)
static int GetValueLength(string input, int startIndex)
static NameValueHeaderValue Parse(string? input)
static readonly Func< NameValueHeaderValue > s_defaultNameValueCreator
static bool ContainsNewLine(string value, int startIndex=0)
static HttpParseResult GetQuotedStringLength(string input, int startIndex, out int length)
static int GetTokenLength(string input, int startIndex)
static int GetWhitespaceLength(string input, int startIndex)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_http_headers_invalid_value
Definition SR.cs:26
Definition SR.cs:7
static StringComparer OrdinalIgnoreCase
StringBuilder Append(char value, int repeatCount)