418 references to Flags
System.Private.Uri (418)
System\Uri.cs (327)
55internal Flags _flags;
141_flags |= Flags.Debug_LeftConstructor;
149Debug.Assert(InFact(Flags.MinimalUriInfoSet) == (_info is not null));
163if (InFact(Flags.AllUriInfoSet))
175if (!InFact(Flags.HasUnicode))
196Debug.Assert((_flags & Flags.Debug_LeftConstructor) == 0);
247private void InterlockedSetFlags(Flags flags)
254Debug.Assert(sizeof(Flags) == sizeof(ulong));
255Interlocked.Or(ref Unsafe.As<Flags, ulong>(ref _flags), (ulong)flags);
270get { return (_flags & Flags.ImplicitFile) != 0; }
275get { return (_flags & (Flags.UncPath | Flags.DosPath)) != 0; }
280get { return (_flags & Flags.DosPath) != 0; }
285get { return (_flags & Flags.UncPath) != 0; }
290get { return (_flags & Flags.UnixPath) != 0; }
293private Flags HostType
295get { return _flags & Flags.HostTypeMask; }
321internal bool DisablePathAndQueryCanonicalization => (_flags & Flags.DisablePathAndQueryCanonicalization) != 0;
327return (_flags & Flags.UserDrivenParsing) != 0;
346private bool NotAny(Flags flags)
351private bool InFact(Flags flags)
356private static bool StaticNotAny(Flags allFlags, Flags checkFlags)
361private static bool StaticInFact(Flags allFlags, Flags checkFlags)
369Flags cF = _flags;
370if ((cF & Flags.MinimalUriInfoSet) == 0)
375Debug.Assert(_info != null && (_flags & Flags.MinimalUriInfoSet) != 0);
381if ((_flags & Flags.AllUriInfoSet) == 0)
395if (allowDnsOptimization && InFact(Flags.CanonicalDnsHost))
578_flags = Flags.Zero;
604dontEscape = InFact(Flags.UserEscaped);
624_flags = Flags.Zero;
840case Flags.DnsHostType: return UriHostNameType.Dns;
841case Flags.IPv4HostType: return UriHostNameType.IPv4;
842case Flags.IPv6HostType: return UriHostNameType.IPv6;
843case Flags.BasicHostType: return UriHostNameType.Basic;
844case Flags.UncHostType: return UriHostNameType.Basic;
845case Flags.UnknownHostType: return UriHostNameType.Unknown;
869return NotAny(Flags.NotDefaultPort);
897return InFact(Flags.LoopbackHost);
1020if (NotAny(Flags.HostNotCanonical | Flags.PathNotCanonical | Flags.ShouldBeCompressed))
1074UnescapeMode mode = (InFact(Flags.PathNotCanonical) && !IsImplicitFile)
1083if (InFact(Flags.ShouldBeCompressed))
1123if (InFact(Flags.NotDefaultPort))
1202Flags hostType = HostType;
1203if (hostType == Flags.IPv6HostType || (hostType == Flags.BasicHostType && InFact(Flags.HostNotCanonical | Flags.E_HostNotCanonical)))
1230Flags hostType = HostType;
1231if (hostType == Flags.DnsHostType)
1235else if (hostType == Flags.IPv6HostType)
1244else if (hostType == Flags.BasicHostType && InFact(Flags.HostNotCanonical | Flags.E_HostNotCanonical))
1282return InFact(Flags.UserEscaped);
1400if (NotAny(Flags.AuthorityFound) || IsDosPath)
1664ushort nonCanonical = (ushort)((ushort)_flags & (ushort)Flags.CannotDisplayCanonical);
1665if (((_flags & (Flags.ShouldBeCompressed | Flags.FirstSlashAbsent | Flags.BackslashInPath)) != 0) ||
1668nonCanonical |= (ushort)Flags.PathNotCanonical;
1794if (NotAny(Flags.AllUriInfoSet) || other.NotAny(Flags.AllUriInfoSet))
1812if (InFact(Flags.CanonicalDnsHost) && other.InFact(Flags.CanonicalDnsHost))
1956private static ParsingError ParseScheme(string uriString, ref Flags flags, ref UriParser? syntax)
1958Debug.Assert((flags & Flags.Debug_LeftConstructor) == 0);
1968flags |= (Flags)6;
1973flags |= (Flags)5;
1985flags |= (Flags)idx;
1999Debug.Assert((_flags & Flags.CustomParser_ParseMinimalAlreadyCalled) != 0);
2007_flags |= Flags.ErrorOrParsingRecursion;
2028int idx = (int)(_flags & Flags.IndexMask);
2032_flags &= ~(Flags.IndexMask | Flags.UserDrivenParsing);
2050if (!OperatingSystem.IsWindows() && InFact(Flags.UnixPath))
2052_flags |= Flags.BasicHostType;
2053_flags |= (Flags)idx;
2064&& NotAny(Flags.ImplicitFile) && (idx + 1 < length))
2082_flags |= Flags.AuthorityFound;
2097_flags |= Flags.DosPath;
2102_flags |= Flags.AuthorityFound;
2121_flags |= Flags.UncPath;
2127_flags |= Flags.UnixPath | Flags.AuthorityFound;
2135if ((_flags & (Flags.UncPath | Flags.DosPath | Flags.UnixPath)) != 0)
2148_flags |= Flags.AuthorityFound;
2156else if (_syntax.InFact(UriSyntaxFlags.OptionalAuthority) && (InFact(Flags.AuthorityFound) ||
2159_flags |= Flags.AuthorityFound;
2167if (InFact(Flags.HasUnicode))
2172_flags |= ((Flags)idx | Flags.UnknownHostType);
2185if (InFact(Flags.HasUnicode))
2190_flags |= ((Flags)idx | Flags.UnknownHostType);
2197if (InFact(Flags.DosPath))
2199_flags |= (((_flags & Flags.AuthorityFound) != 0) ? Flags.BasicHostType : Flags.UnknownHostType);
2200_flags |= (Flags)idx;
2224if (hostTerminator == '\\' && NotAny(Flags.ImplicitFile) && _syntax.NotAny(UriSyntaxFlags.AllowDOSPath))
2229else if (!OperatingSystem.IsWindows() && hostTerminator == '/' && NotAny(Flags.ImplicitFile) && InFact(Flags.UncPath) && _syntax == UriParser.FileUri)
2242_flags |= (Flags)idx;
2258private unsafe void CreateUriInfo(Flags cF)
2273if ((cF & Flags.ImplicitFile) != 0)
2282if (StaticInFact(cF, Flags.UncPath))
2287int end = (int)(cF & Flags.IndexMask);
2304if ((cF & Flags.AuthorityFound) != 0)
2310if ((cF & (Flags.UncPath | Flags.DosPath)) != 0)
2314int end = (int)(cF & Flags.IndexMask);
2329if ((cF & Flags.HostTypeMask) == Flags.UnknownHostType
2330|| StaticInFact(cF, Flags.DosPath)
2334info.Offset.User = (int)(cF & Flags.IndexMask);
2337cF &= ~Flags.IndexMask;
2340cF |= Flags.SchemeNotCanonical;
2348if (HostType == Flags.BasicHostType)
2351info.Offset.Path = (int)(cF & Flags.IndexMask);
2352cF &= ~Flags.IndexMask;
2356if ((cF & Flags.HasUserInfo) != 0)
2372idx = (int)(cF & Flags.IndexMask);
2376cF &= ~Flags.IndexMask;
2381cF |= Flags.SchemeNotCanonical;
2394if ((cF & Flags.HasUnicode) != 0)
2414cF |= (Flags.PortNotCanonical | Flags.E_PortNotCanonical);
2430cF |= Flags.NotDefaultPort;
2436cF |= (Flags.PortNotCanonical | Flags.E_PortNotCanonical);
2444cF |= Flags.MinimalUriInfoSet;
2448Flags current = _flags;
2449while ((current & Flags.MinimalUriInfoSet) == 0)
2451Flags oldValue = Interlocked.CompareExchange(ref _flags, (current & ~Flags.IndexMask) | cF, current);
2456current = (Flags)oldValue;
2472if (NotAny(Flags.ErrorOrParsingRecursion))
2474_flags |= Flags.ErrorOrParsingRecursion;
2477_flags &= ~Flags.ErrorOrParsingRecursion;
2483Flags flags = _flags;
2490if (HostType == Flags.BasicHostType)
2503if (NotAny(Flags.ImplicitFile) || (result & Check.ReservedFound) != 0)
2505flags |= Flags.HostNotCanonical;
2509if (InFact(Flags.ImplicitFile) && (result & (Check.ReservedFound | Check.EscapedCanonical)) != 0)
2518flags |= Flags.E_HostNotCanonical;
2519if (NotAny(Flags.UserEscaped))
2529else if (NotAny(Flags.CanonicalDnsHost))
2535flags |= (Flags.HostNotCanonical | Flags.E_HostNotCanonical);
2544flags |= (Flags.HostNotCanonical | Flags.E_HostNotCanonical);
2556private static string CreateHostStringHelper(string str, int idx, int end, ref Flags flags, UriInfo info)
2560switch (flags & Flags.HostTypeMask)
2562case Flags.DnsHostType:
2566case Flags.IPv6HostType:
2576case Flags.IPv4HostType:
2580case Flags.UncHostType:
2584case Flags.BasicHostType:
2585if (StaticInFact(flags, Flags.DosPath))
2602case Flags.UnknownHostType:
2613flags |= Flags.LoopbackHost;
2633Flags flags = _flags & ~Flags.HostTypeMask;
2642flags &= ~Flags.HostTypeMask;
2643flags |= Flags.UnknownHostType;
2647if (err != ParsingError.None || (flags & Flags.HostTypeMask) == Flags.UnknownHostType)
2650_flags = (_flags & ~Flags.HostTypeMask) | Flags.BasicHostType;
2660_flags |= (Flags.HostNotCanonical | Flags.E_HostNotCanonical);
2664_flags = (_flags & ~Flags.HostTypeMask) | (flags & Flags.HostTypeMask);
2675_flags &= ~Flags.NotDefaultPort;
2676_flags |= (Flags.PortNotCanonical | Flags.E_PortNotCanonical);
2690_flags &= ~Flags.NotDefaultPort;
2692_flags |= Flags.NotDefaultPort;
2694_flags |= (Flags.PortNotCanonical | Flags.E_PortNotCanonical);
2712Debug.Assert(_info != null && (_flags & Flags.MinimalUriInfoSet) != 0);
2717ushort nonCanonical = unchecked((ushort)(((ushort)_flags & ((ushort)Flags.CannotDisplayCanonical << 7)) >> 6));
2718if (InFact(Flags.SchemeNotCanonical))
2720nonCanonical |= (ushort)Flags.SchemeNotCanonical;
2726if (InFact(Flags.ShouldBeCompressed | Flags.FirstSlashAbsent | Flags.BackslashInPath))
2728nonCanonical |= (ushort)Flags.PathNotCanonical;
2733nonCanonical |= (ushort)Flags.PathNotCanonical;
2751Debug.Assert(_info != null && (_flags & Flags.MinimalUriInfoSet) != 0);
2756ushort nonCanonical = unchecked((ushort)((ushort)_flags & (ushort)Flags.CannotDisplayCanonical));
2761if ((_flags & (Flags.ShouldBeCompressed | Flags.FirstSlashAbsent | Flags.BackslashInPath)) != 0)
2763nonCanonical |= (ushort)Flags.PathNotCanonical;
2768nonCanonical |= (ushort)Flags.PathNotCanonical;
2821Debug.Assert(InFact(Flags.AllUriInfoSet));
2830if (InFact(Flags.AuthorityFound))
2839if ((parts & UriComponents.UserInfo) != 0 && InFact(Flags.HasUserInfo))
2848if (NotAny(Flags.UserEscaped))
2862InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape,
2899if (formatAs != UriFormat.UriEscaped && HostType == Flags.BasicHostType
2905(InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape);
2934if ((parts & UriComponents.SerializationInfoString) != 0 && HostType == Flags.IPv6HostType && _info._moreInfo?.ScopeId is string scopeId)
2945(InFact(Flags.NotDefaultPort) || ((parts & UriComponents.StrongPort) != 0 && _syntax.DefaultPort != UriParser.NoDefaultPort)))
2964if (InFact(Flags.AuthorityFound) && dest.Length != 0 && dest[0] == '/')
2990if (NotAny(Flags.UserEscaped))
3003V1ToStringUnescape => (InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape) | UnescapeMode.V1ToStringFlag,
3005_ => InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape
3029if (NotAny(Flags.UserEscaped))
3042V1ToStringUnescape => (InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape) | UnescapeMode.V1ToStringFlag,
3044_ => InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape
3070if (!InFact(Flags.HasUserInfo))
3080if (!InFact(Flags.HasUserInfo))
3083if (InFact(Flags.NotDefaultPort) || _syntax.DefaultPort == UriParser.NoDefaultPort)
3098if (InFact(Flags.HasUserInfo))
3131if (InFact(Flags.NotDefaultPort | Flags.PortNotCanonical))
3143if (uriParts == UriComponents.Path && InFact(Flags.AuthorityFound) &&
3184if (InFact(Flags.NotDefaultPort) || _syntax.DefaultPort == UriParser.NoDefaultPort)
3194if (InFact(Flags.HasUserInfo))
3211if (NotAny(Flags.HasUserInfo))
3252Flags cF = Flags.Zero;
3258bool buildIriStringFromPath = InFact(Flags.HasUnicode);
3274cF |= Flags.SchemeNotCanonical;
3283cF |= Flags.SchemeNotCanonical;
3287if (((_flags & Flags.AuthorityFound) != 0) && (idx + i + 3 >= length || str[idx + i + 1] != '/' ||
3290cF |= Flags.SchemeNotCanonical;
3296if ((_flags & Flags.HasUserInfo) != 0)
3302cF |= Flags.UserNotCanonical;
3306cF |= Flags.E_UserNotCanonical;
3312cF |= Flags.UserIriCanonical;
3459if (((_flags & Flags.AuthorityFound) != 0) && ((syntaxFlags & UriSyntaxFlags.PathIsRooted) != 0)
3462cF |= Flags.FirstSlashAbsent;
3469if (IsDosPath || (((_flags & Flags.AuthorityFound) != 0) &&
3475cF |= (Flags.E_PathNotCanonical | Flags.PathNotCanonical);
3481cF |= (Flags.E_PathNotCanonical | Flags.PathNotCanonical);
3485if (((syntaxFlags & (UriSyntaxFlags.CompressPath)) != 0) && ((cF & Flags.E_PathNotCanonical) != 0 ||
3488cF |= Flags.ShouldBeCompressed;
3492cF |= Flags.BackslashInPath;
3497cF |= Flags.E_PathNotCanonical;
3507if (((_flags & Flags.ImplicitFile) == 0) || ((_flags & Flags.UserEscaped) != 0) ||
3511cF |= Flags.PathNotCanonical;
3516if (((_flags & Flags.ImplicitFile) != 0) && (result & (Check.ReservedFound | Check.EscapedCanonical)) != 0)
3525cF |= Flags.E_PathNotCanonical;
3532cF |= Flags.PathIriCanonical;
3579cF |= Flags.QueryNotCanonical;
3584cF |= Flags.E_QueryNotCanonical;
3591cF |= Flags.QueryIriCanonical;
3627cF |= Flags.FragmentNotCanonical;
3632cF |= Flags.E_FragmentNotCanonical;
3639cF |= Flags.FragmentIriCanonical;
3646cF |= Flags.AllUriInfoSet;
3653private static int ParseSchemeCheckImplicitFile(string uriString, ref ParsingError err, ref Flags flags, ref UriParser? syntax)
3656Debug.Assert((flags & Flags.Debug_LeftConstructor) == 0);
3672flags |= (Flags.UnixPath | Flags.ImplicitFile | Flags.AuthorityFound);
3701flags |= (Flags.DosPath | Flags.ImplicitFile | Flags.AuthorityFound);
3718flags |= (Flags.UncPath | Flags.ImplicitFile | Flags.AuthorityFound);
3822ref ParsingError err, ref Flags flags, UriParser syntax, ref string? newHost)
3824Debug.Assert((_flags & Flags.Debug_LeftConstructor) == 0 || (!_syntax.IsSimple && Monitor.IsEntered(_info)));
3831bool hasUnicode = ((flags & Flags.HasUnicode) != 0);
3834Debug.Assert((_flags & Flags.HasUserInfo) == 0 && (_flags & Flags.HostTypeMask) == 0);
3847flags &= ~Flags.UncPath; //UNC cannot have an empty hostname
3848if (StaticInFact(flags, Flags.ImplicitFile))
3851flags |= Flags.BasicHostType;
3873flags |= Flags.HasUserInfo;
3891flags |= Flags.IPv6HostType;
3899IPv4AddressHelper.IsValid(pString, start, ref end, false, StaticNotAny(flags, Flags.ImplicitFile), syntax.InFact(UriSyntaxFlags.V1_UnknownUri)))
3901flags |= Flags.IPv4HostType;
3909DomainNameHelper.IsValid(new ReadOnlySpan<char>(pString + start, end - start), iri: false, StaticNotAny(flags, Flags.ImplicitFile), out int domainNameLength))
3916flags |= Flags.DnsHostType;
3921flags |= Flags.CanonicalDnsHost;
3926DomainNameHelper.IsValid(new ReadOnlySpan<char>(pString + start, end - start), iri: true, StaticNotAny(flags, Flags.ImplicitFile), out domainNameLength))
3938if (UncNameHelper.IsValid(pString, start, ref end, StaticNotAny(flags, Flags.ImplicitFile)))
3942flags |= Flags.UncHostType;
3953if (end < length && pString[end] == '\\' && (flags & Flags.HostTypeMask) != Flags.HostNotParsed
3959flags |= Flags.UnknownHostType;
3962flags &= ~Flags.HostTypeMask;
3991flags &= ~Flags.HostTypeMask;
4006flags &= ~Flags.HostTypeMask;
4022flags &= ~Flags.HostTypeMask;
4027if ((flags & Flags.HostTypeMask) == Flags.HostNotParsed)
4030flags &= ~Flags.HasUserInfo;
4035flags |= Flags.BasicHostType;
4081flags |= Flags.UnknownHostType;
4086flags |= Flags.BasicHostType;
4106flags |= Flags.UnknownHostType;
4115bool hasUnicode, ref Flags flags,
4120flags |= Flags.DnsHostType;
4276if ((_flags & Flags.HasUnicode) != 0)
4332if (InFact(Flags.FirstSlashAbsent))
4347if (InFact(Flags.ShouldBeCompressed))
4354if (_syntax.InFact(UriSyntaxFlags.UnEscapeDotsAndSlashes) && InFact(Flags.PathNotCanonical)
4369if (InFact(Flags.E_PathNotCanonical) && NotAny(Flags.UserEscaped))
4392if (!OperatingSystem.IsWindows() && InFact(Flags.BackslashInPath) && _syntax.NotAny(UriSyntaxFlags.ConvertPathSlashes) && _syntax.InFact(UriSyntaxFlags.FileLikeUri) && !IsImplicitFile)
4410if (InFact(Flags.ShouldBeCompressed))
4415if (_syntax.InFact(UriSyntaxFlags.UnEscapeDotsAndSlashes) && InFact(Flags.PathNotCanonical)
4441if (InFact(Flags.ShouldBeCompressed) && dest.Length - offset > 0)
4453if (formatAs == UriFormat.UriEscaped && NotAny(Flags.UserEscaped) && InFact(Flags.E_PathNotCanonical))
4470if (formatAs != UriFormat.UriEscaped && InFact(Flags.PathNotCanonical))
4477mode = (InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape)
4490mode = InFact(Flags.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape;
4690if (basePart.HostType == Flags.IPv6HostType)
4764if (basePart.HostType == Flags.IPv6HostType)
5082return InFact(Flags.AuthorityFound);