2216 {
2218 Flags flags = Flags.Zero;
2220 {
2227 {
2230 {
2231 flags |= Flags.SchemeNotCanonical;
2232 }
2233 else
2234 {
2238 {
2240 {
2241 flags |= Flags.SchemeNotCanonical;
2242 }
2243 }
2245 {
2246 flags |= Flags.SchemeNotCanonical;
2247 }
2248 }
2249 if ((
_flags & Flags.HasUserInfo) != Flags.Zero)
2250 {
2253 if ((check &
Check.DisplayCanonical) == 0)
2254 {
2255 flags |= Flags.UserNotCanonical;
2256 }
2257 if ((check & (
Check.EscapedCanonical |
Check.BackslashInPath)) !=
Check.EscapedCanonical)
2258 {
2259 flags |= Flags.E_UserNotCanonical;
2260 }
2262 {
2263 flags |= Flags.UserIriCanonical;
2264 }
2265 }
2266 }
2269 if (flag)
2270 {
2272 {
2274 {
2276 }
2277 else
2278 {
2280 }
2281 }
2284 }
2286 {
2287 if (flag)
2288 {
2290 }
2293 {
2295 }
2296 else
2297 {
2298 scheme = @
string.IndexOf(
'?');
2300 {
2302 }
2303 }
2307 }
2308 else
2309 {
2310 if (flag)
2311 {
2313 if (
IsImplicitFile || (
flags2 & (UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment)) == 0)
2314 {
2316 }
2317 else
2318 {
2322 }
2325 {
2328 }
2331 {
2333 }
2334 }
2336 {
2339 {
2340 flags |= Flags.FirstSlashAbsent;
2341 }
2342 }
2344 if (
IsDosPath || ((
_flags & Flags.AuthorityFound) != Flags.Zero && ((
flags2 & (UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath)) != 0 ||
_syntax.
InFact(UriSyntaxFlags.UnEscapeDotsAndSlashes))))
2345 {
2346 if ((check &
Check.DotSlashEscaped) != 0 &&
_syntax.
InFact(UriSyntaxFlags.UnEscapeDotsAndSlashes))
2347 {
2350 }
2351 if ((
flags2 & UriSyntaxFlags.ConvertPathSlashes) != 0 && (check &
Check.BackslashInPath) != 0)
2352 {
2355 }
2356 if ((
flags2 & UriSyntaxFlags.CompressPath) != 0 && ((flags & Flags.E_PathNotCanonical) != Flags.Zero || (check &
Check.DotSlashAttn) != 0))
2357 {
2358 flags |= Flags.ShouldBeCompressed;
2359 }
2360 if ((check &
Check.BackslashInPath) != 0)
2361 {
2362 flags |= Flags.BackslashInPath;
2363 }
2364 }
2365 else if ((check &
Check.BackslashInPath) != 0)
2366 {
2367 flags |= Flags.E_PathNotCanonical;
2369 }
2370 if ((check &
Check.DisplayCanonical) == 0 && ((
_flags & Flags.ImplicitFile) == Flags.Zero || (
_flags & Flags.UserEscaped) != Flags.Zero || (check &
Check.ReservedFound) != 0))
2371 {
2372 flags |= Flags.PathNotCanonical;
2374 }
2375 if ((
_flags & Flags.ImplicitFile) != Flags.Zero && (check & (
Check.EscapedCanonical |
Check.ReservedFound)) != 0)
2376 {
2377 check &=
~Check.EscapedCanonical;
2378 }
2379 if ((check &
Check.EscapedCanonical) == 0)
2380 {
2381 flags |= Flags.E_PathNotCanonical;
2382 }
2384 {
2385 flags |= Flags.PathIriCanonical;
2386 }
2387 if (flag)
2388 {
2391 {
2392 if ((
flags2 & UriSyntaxFlags.MayHaveFragment) != 0)
2393 {
2394 num++;
2397 }
2398 else
2399 {
2401 }
2404 {
2407 }
2410 {
2412 }
2413 }
2414 }
2417 {
2419 {
2422 if ((check &
Check.DisplayCanonical) == 0)
2423 {
2424 flags |= Flags.QueryNotCanonical;
2425 }
2426 if ((check & (
Check.EscapedCanonical |
Check.BackslashInPath)) !=
Check.EscapedCanonical)
2427 {
2428 flags |= Flags.E_QueryNotCanonical;
2429 }
2431 {
2432 flags |= Flags.QueryIriCanonical;
2433 }
2434 }
2435 }
2436 if (flag)
2437 {
2440 {
2444 {
2447 }
2450 }
2451 }
2454 {
2456 {
2459 if ((check &
Check.DisplayCanonical) == 0)
2460 {
2461 flags |= Flags.FragmentNotCanonical;
2462 }
2463 if ((check & (
Check.EscapedCanonical |
Check.BackslashInPath)) !=
Check.EscapedCanonical)
2464 {
2465 flags |= Flags.E_FragmentNotCanonical;
2466 }
2468 {
2469 flags |= Flags.FragmentIriCanonical;
2470 }
2471 }
2472 }
2474 }
2475 }
2478 }
bool InFact(UriSyntaxFlags flags)
unsafe string EscapeUnescapeIri(string input, int start, int end, UriComponents component)
void InterlockedSetFlags(Flags flags)
string _originalUnicodeString
bool DisablePathAndQueryCanonicalization
static readonly string SchemeDelimiter
static UriFormatException GetException(ParsingError err)
unsafe Check CheckCanonical(char *str, ref int idx, int end, char delim)
void GetLengthWithoutTrailingSpaces(string str, ref int length, int idx)