1355 {
1356 int num = (int)(
_flags & Flags.IndexMask);
1361 {
1363 {
1365 while (
num2 != num && UriHelper.IsLWS(
ptr[--
num2]))
1366 {
1367 }
1369 }
1370 if (
_syntax.
IsAllSet(UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowDOSPath) &&
NotAny(Flags.ImplicitFile) && num + 1 <
num2)
1371 {
1373 for (i = num;
i <
num2;
i++)
1374 {
1375 char c;
1376 if ((c =
ptr[i]) !=
'\\' && c !=
'/')
1377 {
1378 break;
1379 }
1380 }
1381 if (
_syntax.
InFact(UriSyntaxFlags.FileLikeUri) || i - num <= 3)
1382 {
1383 if (i - num >= 2)
1384 {
1385 _flags |= Flags.AuthorityFound;
1386 }
1387 char c;
1388 if (i + 1 <
num2 && ((c =
ptr[i + 1]) ==
':' || c ==
'|') && UriHelper.IsAsciiLetter(
ptr[i]))
1389 {
1390 if (i + 2 >=
num2 || ((c =
ptr[i + 2]) !=
'\\' && c !=
'/'))
1391 {
1393 {
1395 }
1396 }
1397 else
1398 {
1401 {
1402 _flags |= Flags.AuthorityFound;
1403 }
1404 num = ((
i == num ||
i - num == 2) ? i : (
i - 1));
1405 }
1406 }
1407 else if (
_syntax.
InFact(UriSyntaxFlags.FileLikeUri) && i - num >= 2 && i - num != 3 && i <
num2 &&
ptr[i] !=
'?' &&
ptr[i] !=
'#')
1408 {
1411 }
1412 }
1413 }
1414 if ((
_flags & (Flags.DosPath | Flags.UncPath | Flags.UnixPath)) == Flags.Zero)
1415 {
1416 if (num + 2 <=
num2)
1417 {
1419 char c3 =
ptr[num + 1];
1421 {
1422 if ((
c2 !=
'/' &&
c2 !=
'\\') || (
c3 !=
'/' &&
c3 !=
'\\'))
1423 {
1425 }
1426 _flags |= Flags.AuthorityFound;
1427 num += 2;
1428 }
1429 else if (
_syntax.
InFact(UriSyntaxFlags.OptionalAuthority) && (
InFact(Flags.AuthorityFound) || (
c2 ==
'/' &&
c3 ==
'/')))
1430 {
1431 _flags |= Flags.AuthorityFound;
1432 num += 2;
1433 }
1435 {
1436 if ((
_flags & (Flags.HasUnicode | Flags.HostUnicodeNormalized)) == Flags.HasUnicode)
1437 {
1439 }
1442 }
1443 }
1444 else
1445 {
1447 {
1449 }
1451 {
1452 if ((
_flags & (Flags.HasUnicode | Flags.HostUnicodeNormalized)) == Flags.HasUnicode)
1453 {
1455 }
1458 }
1459 }
1460 }
1461 if (
InFact(Flags.DosPath))
1462 {
1463 _flags |= (
Flags)(((
_flags & Flags.AuthorityFound) != Flags.Zero) ? 327680 : 458752);
1466 }
1470 {
1472 }
1474 {
1477 {
1479 }
1480 }
1482 }
1484 {
1486 }
1488 }
bool IsAllSet(UriSyntaxFlags flags)
bool NotAny(UriSyntaxFlags flags)
bool InFact(UriSyntaxFlags flags)
unsafe int CheckAuthorityHelper(char *pString, int idx, int length, ref ParsingError err, ref Flags flags, UriParser syntax, ref string newHost)