File: net\System\UriEnumTypes.cs
Project: ndp\fx\src\System.csproj (System)
/*++
Copyright (c) 2003 Microsoft Corporation
 
Module Name:
 
    UriEnumTypes.cs
 
Abstract:
 
    Defines enum types used by System.Uri class
 
Author:
    Alexei Vopilov    Nov 21 2003
 
Revision History:
 
--*/
namespace System
{
 
    // Used to control whether absolu
    public enum UriKind {
        RelativeOrAbsolute  = 0,
        Absolute            = 1,
        Relative            = 2
    }
 
    [Flags]
    public enum UriComponents
    {
        // Generic parts.
        // ATTN: The values must stay in sync with Uri.Flags.xxxNotCanonical
        Scheme      = 0x1,
        UserInfo    = 0x2,
        Host        = 0x4,
        Port        = 0x8,
        Path        = 0x10,
        Query       = 0x20,
        Fragment    = 0x40,
 
        StrongPort  = 0x80,
        NormalizedHost = 0x100,
 
        // This will also return respective delimiters for scheme, userinfo or port
        // Valid only for a single componet requests.
        KeepDelimiter = 0x40000000,
 
        // This is used by GetObjectData and can also be used directly.
        // Works for both absolute and relaitve Uris
        SerializationInfoString = unchecked((int)0x80000000),
 
        // Shortcuts for general cases
        AbsoluteUri = Scheme | UserInfo | Host | Port | Path | Query | Fragment,
        HostAndPort = Host | StrongPort,                //includes port even if default
        StrongAuthority = UserInfo | Host | StrongPort, //includes port even if default
        SchemeAndServer = Scheme | Host | Port,
        HttpRequestUrl = Scheme | Host | Port | Path | Query,
        PathAndQuery = Path | Query,
    }
    public enum UriFormat
    {
        UriEscaped = 1,
        Unescaped = 2,      // Completely unescaped.
        SafeUnescaped = 3   // Canonical unescaped.  Allows same uri to be reconstructed from the output.
        // If the unescaped sequence results in a new escaped sequence, it will revert to the original sequence.
 
        // This value is reserved for the default ToString() format that is historically none of the above.
        // If VsWhidbey#353711 gets approved the usage has to be replaced with UriFormat.SafeUnescape
        // V1ToStringUnescape = 0x7FFF  
    }
 
    // This is used to control when host names are converted to idn names and
    // vice versa
    public enum UriIdnScope
    {
        None,                   // Never use Idn
        AllExceptIntranet,      // Use Idn in Internet and not intranet
        All                     // Internet and intranet
    }
    
    internal enum ParsingError
    {
        // looks good
        None = 0,
 
        // These first errors indicate that the Uri cannot be absolute, but may be relative.
        BadFormat = 1,
        BadScheme = 2,
        BadAuthority = 3,
        EmptyUriString = 4,
        LastRelativeUriOkErrIndex = 4,
 
        // All higher error values are fatal, indicating that neither an absolute or relative
        // Uri could be generated.
        SchemeLimit = 5,
        SizeLimit = 6,
        MustRootedPath = 7,
 
        // derived class controlled
        BadHostName = 8,
        NonEmptyHost = 9, // unix only
        BadPort = 10,
        BadAuthorityTerminator = 11,
 
        // The user requested only a relative Uri, but an absolute Uri was parsed.
        CannotCreateRelative = 12
    }
 
    [Flags]
    internal enum UnescapeMode
    {
        CopyOnly = 0x0,                          // used for V1.0 ToString() compatibility mode only
        Escape = 0x1,                            // Only used by ImplicitFile, the string is already fully unescaped
        Unescape = 0x2,                          // Only used as V1.0 UserEscaped compatibility mode
        EscapeUnescape = Unescape | Escape,      // does both escaping control+reserved and unescaping of safe characters
        V1ToStringFlag = 0x4,                    // Only used as V1.0 ToString() compatibility mode, assumes DontEscape level also
        UnescapeAll = 0x8,                       // just unescape everything, leave bad escaped sequences as is
        UnescapeAllOrThrow = 0x10 | UnescapeAll, // just unescape everything plus throw on bad escaped sequences
    }
}