Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
CookieParser.cs
Go to the documentation of this file.
3
4namespace System.Net;
5
6internal struct CookieParser
7{
9
10 private Cookie _savedCookie;
11
12 private static FieldInfo s_isQuotedDomainField;
13
15
16 private static FieldInfo IsQuotedDomainField
17 {
18 get
19 {
20 if (s_isQuotedDomainField == null)
21 {
22 FieldInfo field = typeof(Cookie).GetField("IsQuotedDomain", BindingFlags.Instance | BindingFlags.NonPublic);
24 }
26 }
27 }
28
30 {
31 get
32 {
33 if (s_isQuotedVersionField == null)
34 {
35 FieldInfo field = typeof(Cookie).GetField("IsQuotedVersion", BindingFlags.Instance | BindingFlags.NonPublic);
37 }
39 }
40 }
41
42 internal CookieParser(string cookieString)
43 {
44 _tokenizer = new CookieTokenizer(cookieString);
45 _savedCookie = null;
46 }
47
48 private static bool InternalSetNameMethod(Cookie cookie, string value)
49 {
50 return cookie.InternalSetName(value);
51 }
52
53 internal Cookie Get()
54 {
55 Cookie cookie = null;
56 bool flag = false;
57 bool flag2 = false;
58 bool flag3 = false;
59 bool flag4 = false;
60 bool flag5 = false;
61 bool flag6 = false;
62 bool flag7 = false;
63 bool flag8 = false;
64 bool flag9 = false;
65 do
66 {
67 CookieToken cookieToken = _tokenizer.Next(cookie == null, parseResponseCookies: true);
68 if (cookie == null && (cookieToken == CookieToken.NameValuePair || cookieToken == CookieToken.Attribute))
69 {
70 cookie = new Cookie();
72 cookie.Value = _tokenizer.Value;
73 continue;
74 }
75 switch (cookieToken)
76 {
77 case CookieToken.NameValuePair:
78 switch (_tokenizer.Token)
79 {
80 case CookieToken.Comment:
81 if (!flag)
82 {
83 flag = true;
84 cookie.Comment = _tokenizer.Value;
85 }
86 break;
87 case CookieToken.CommentUrl:
88 if (!flag2)
89 {
90 flag2 = true;
91 if (Uri.TryCreate(CheckQuoted(_tokenizer.Value), UriKind.Absolute, out Uri result3))
92 {
93 cookie.CommentUri = result3;
94 }
95 }
96 break;
97 case CookieToken.Domain:
98 if (!flag3)
99 {
100 flag3 = true;
101 cookie.Domain = CheckQuoted(_tokenizer.Value);
102 IsQuotedDomainField.SetValue(cookie, _tokenizer.Quoted);
103 }
104 break;
105 case CookieToken.Expires:
106 if (!flag4)
107 {
108 flag4 = true;
109 if (DateTime.TryParse(CheckQuoted(_tokenizer.Value), CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AdjustToUniversal, out var result4))
110 {
111 cookie.Expires = result4;
112 }
113 else
114 {
115 InternalSetNameMethod(cookie, string.Empty);
116 }
117 }
118 break;
119 case CookieToken.MaxAge:
120 if (!flag4)
121 {
122 flag4 = true;
123 if (int.TryParse(CheckQuoted(_tokenizer.Value), out var result2))
124 {
125 cookie.Expires = DateTime.Now.AddSeconds(result2);
126 }
127 else
128 {
129 InternalSetNameMethod(cookie, string.Empty);
130 }
131 }
132 break;
133 case CookieToken.Path:
134 if (!flag5)
135 {
136 flag5 = true;
137 cookie.Path = _tokenizer.Value;
138 }
139 break;
140 case CookieToken.Port:
141 if (!flag6)
142 {
143 flag6 = true;
144 try
145 {
146 cookie.Port = _tokenizer.Value;
147 }
148 catch
149 {
150 InternalSetNameMethod(cookie, string.Empty);
151 }
152 }
153 break;
154 case CookieToken.Version:
155 if (!flag7)
156 {
157 flag7 = true;
158 if (int.TryParse(CheckQuoted(_tokenizer.Value), out var result))
159 {
160 cookie.Version = result;
161 IsQuotedVersionField.SetValue(cookie, _tokenizer.Quoted);
162 }
163 else
164 {
165 InternalSetNameMethod(cookie, string.Empty);
166 }
167 }
168 break;
169 }
170 break;
171 case CookieToken.Attribute:
172 switch (_tokenizer.Token)
173 {
174 case CookieToken.Discard:
175 if (!flag9)
176 {
177 flag9 = true;
178 cookie.Discard = true;
179 }
180 break;
181 case CookieToken.Secure:
182 if (!flag8)
183 {
184 flag8 = true;
185 cookie.Secure = true;
186 }
187 break;
188 case CookieToken.HttpOnly:
189 cookie.HttpOnly = true;
190 break;
191 case CookieToken.Port:
192 if (!flag6)
193 {
194 flag6 = true;
195 cookie.Port = string.Empty;
196 }
197 break;
198 }
199 break;
200 }
201 }
202 while (!_tokenizer.Eof && !_tokenizer.EndOfCookie);
203 return cookie;
204 }
205
206 internal static string CheckQuoted(string value)
207 {
208 if (value.Length < 2 || value[0] != '"' || value[value.Length - 1] != '"')
209 {
210 return value;
211 }
212 if (value.Length != 2)
213 {
214 return value.Substring(1, value.Length - 2);
215 }
216 return string.Empty;
217 }
218
219 internal bool EndofHeader()
220 {
221 return _tokenizer.Eof;
222 }
223}
static CultureInfo InvariantCulture
bool InternalSetName(string value)
Definition Cookie.cs:331
static bool TryCreate([NotNullWhen(true)] string? uriString, UriKind uriKind, [NotNullWhen(true)] out Uri? result)
Definition Uri.cs:3793
UriKind
Definition UriKind.cs:4
static DateTime Now
Definition DateTime.cs:103
static bool TryParse([NotNullWhen(true)] string? s, out DateTime result)
Definition DateTime.cs:1139
CookieTokenizer _tokenizer
System.Net.CookieTokenizer _tokenizer
CookieParser(string cookieString)
static FieldInfo IsQuotedDomainField
static string CheckQuoted(string value)
static FieldInfo s_isQuotedDomainField
static FieldInfo s_isQuotedVersionField
static FieldInfo IsQuotedVersionField
static bool InternalSetNameMethod(Cookie cookie, string value)
static Func< Cookie, string, bool > InternalSetNameMethod