Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CheckAuthorityHelper()

unsafe int System.Uri.CheckAuthorityHelper ( char * pString,
int idx,
int length,
ref ParsingError err,
ref Flags flags,
UriParser syntax,
ref string newHost )
inlineprivate

Definition at line 2698 of file Uri.cs.

2699 {
2700 int i = length;
2701 int num = idx;
2702 int j = idx;
2703 newHost = null;
2704 bool justNormalized = false;
2705 bool flag = IriParsingStatic(syntax);
2706 bool flag2 = (flags & Flags.HasUnicode) != 0;
2707 bool flag3 = flag2 && (flags & Flags.HostUnicodeNormalized) == 0;
2708 UriSyntaxFlags flags2 = syntax.Flags;
2709 char c;
2710 if (idx == length || (c = pString[idx]) == '/' || (c == '\\' && StaticIsFile(syntax)) || c == '#' || c == '?')
2711 {
2712 if (syntax.InFact(UriSyntaxFlags.AllowEmptyHost))
2713 {
2714 flags &= ~Flags.UncPath;
2715 if (StaticInFact(flags, Flags.ImplicitFile))
2716 {
2717 err = ParsingError.BadHostName;
2718 }
2719 else
2720 {
2721 flags |= Flags.BasicHostType;
2722 }
2723 }
2724 else
2725 {
2726 err = ParsingError.BadHostName;
2727 }
2728 if (flag3)
2729 {
2730 flags |= Flags.HostUnicodeNormalized;
2731 }
2732 return idx;
2733 }
2734 if (flag3)
2735 {
2736 newHost = _originalUnicodeString.Substring(0, num);
2737 }
2738 string text = null;
2739 if ((flags2 & UriSyntaxFlags.MayHaveUserInfo) != 0)
2740 {
2741 for (; j < i; j++)
2742 {
2743 if (j == i - 1 || pString[j] == '?' || pString[j] == '#' || pString[j] == '\\' || pString[j] == '/')
2744 {
2745 j = idx;
2746 break;
2747 }
2748 if (pString[j] != '@')
2749 {
2750 continue;
2751 }
2752 flags |= Flags.HasUserInfo;
2753 if (flag)
2754 {
2755 if (flag3)
2756 {
2757 text = IriHelper.EscapeUnescapeIri(pString, num, j + 1, UriComponents.UserInfo);
2758 newHost += text;
2759 if (newHost.Length > 65535)
2760 {
2761 err = ParsingError.SizeLimit;
2762 return idx;
2763 }
2764 }
2765 else
2766 {
2767 text = new string(pString, num, j - num + 1);
2768 }
2769 }
2770 j++;
2771 c = pString[j];
2772 break;
2773 }
2774 }
2775 bool notCanonical = (flags2 & UriSyntaxFlags.SimpleUserSyntax) == 0;
2776 if (c == '[' && syntax.InFact(UriSyntaxFlags.AllowIPv6Host) && IPv6AddressHelper.IsValid(pString, j + 1, ref i))
2777 {
2778 flags |= Flags.IPv6HostType;
2779 if (flag3)
2780 {
2781 newHost += new string(pString, j, i - j);
2782 flags |= Flags.HostUnicodeNormalized;
2783 justNormalized = true;
2784 }
2785 }
2786 else if (c <= '9' && c >= '0' && syntax.InFact(UriSyntaxFlags.AllowIPv4Host) && IPv4AddressHelper.IsValid(pString, j, ref i, allowIPv6: false, StaticNotAny(flags, Flags.ImplicitFile), syntax.InFact(UriSyntaxFlags.V1_UnknownUri)))
2787 {
2788 flags |= Flags.IPv4HostType;
2789 if (flag3)
2790 {
2791 newHost += new string(pString, j, i - j);
2792 flags |= Flags.HostUnicodeNormalized;
2793 justNormalized = true;
2794 }
2795 }
2796 else if ((flags2 & UriSyntaxFlags.AllowDnsHost) != 0 && !flag && DomainNameHelper.IsValid(pString, j, ref i, ref notCanonical, StaticNotAny(flags, Flags.ImplicitFile)))
2797 {
2798 flags |= Flags.DnsHostType;
2799 if (!notCanonical)
2800 {
2801 flags |= Flags.CanonicalDnsHost;
2802 }
2803 }
2804 else if ((flags2 & UriSyntaxFlags.AllowDnsHost) != 0 && (flag3 || syntax.InFact(UriSyntaxFlags.AllowIdn)) && DomainNameHelper.IsValidByIri(pString, j, ref i, ref notCanonical, StaticNotAny(flags, Flags.ImplicitFile)))
2805 {
2807 }
2808 else if ((flags2 & UriSyntaxFlags.AllowUncHost) != 0 && UncNameHelper.IsValid(pString, j, ref i, StaticNotAny(flags, Flags.ImplicitFile)) && i - j <= 256)
2809 {
2810 flags |= Flags.UncHostType;
2811 if (flag3)
2812 {
2813 newHost += new string(pString, j, i - j);
2814 flags |= Flags.HostUnicodeNormalized;
2815 justNormalized = true;
2816 }
2817 }
2818 if (i < length && pString[i] == '\\' && (flags & Flags.HostTypeMask) != Flags.Zero && !StaticIsFile(syntax))
2819 {
2820 if (syntax.InFact(UriSyntaxFlags.V1_UnknownUri))
2821 {
2822 err = ParsingError.BadHostName;
2823 flags |= Flags.HostTypeMask;
2824 return i;
2825 }
2826 flags &= ~Flags.HostTypeMask;
2827 }
2828 else if (i < length && pString[i] == ':')
2829 {
2830 if (syntax.InFact(UriSyntaxFlags.MayHavePort))
2831 {
2832 int num2 = 0;
2833 int num3 = i;
2834 for (idx = i + 1; idx < length; idx++)
2835 {
2836 int num4 = pString[idx] - 48;
2837 switch (num4)
2838 {
2839 case 0:
2840 case 1:
2841 case 2:
2842 case 3:
2843 case 4:
2844 case 5:
2845 case 6:
2846 case 7:
2847 case 8:
2848 case 9:
2849 if ((num2 = num2 * 10 + num4) <= 65535)
2850 {
2851 continue;
2852 }
2853 break;
2854 default:
2855 if (syntax.InFact(UriSyntaxFlags.AllowAnyOtherHost) && syntax.NotAny(UriSyntaxFlags.V1_UnknownUri))
2856 {
2857 flags &= ~Flags.HostTypeMask;
2858 break;
2859 }
2860 err = ParsingError.BadPort;
2861 return idx;
2862 case -13:
2863 case -1:
2864 case 15:
2865 break;
2866 }
2867 break;
2868 }
2869 if (num2 > 65535)
2870 {
2871 if (!syntax.InFact(UriSyntaxFlags.AllowAnyOtherHost))
2872 {
2873 err = ParsingError.BadPort;
2874 return idx;
2875 }
2876 flags &= ~Flags.HostTypeMask;
2877 }
2878 if (flag2 && justNormalized)
2879 {
2880 newHost += new string(pString, num3, idx - num3);
2881 }
2882 }
2883 else
2884 {
2885 flags &= ~Flags.HostTypeMask;
2886 }
2887 }
2888 if ((flags & Flags.HostTypeMask) == Flags.Zero)
2889 {
2890 flags &= ~Flags.HasUserInfo;
2891 if (syntax.InFact(UriSyntaxFlags.AllowAnyOtherHost))
2892 {
2893 flags |= Flags.BasicHostType;
2894 for (i = idx; i < length && pString[i] != '/' && pString[i] != '?' && pString[i] != '#'; i++)
2895 {
2896 }
2897 if (flag3)
2898 {
2899 string text2 = new string(pString, num, i - num);
2900 try
2901 {
2902 newHost += text2.Normalize(NormalizationForm.FormC);
2903 }
2904 catch (ArgumentException)
2905 {
2906 err = ParsingError.BadHostName;
2907 }
2908 flags |= Flags.HostUnicodeNormalized;
2909 }
2910 }
2911 else if (syntax.InFact(UriSyntaxFlags.V1_UnknownUri))
2912 {
2913 bool flag4 = false;
2914 int num5 = idx;
2915 for (i = idx; i < length && (!flag4 || (pString[i] != '/' && pString[i] != '?' && pString[i] != '#')); i++)
2916 {
2917 if (i < idx + 2 && pString[i] == '.')
2918 {
2919 flag4 = true;
2920 continue;
2921 }
2922 err = ParsingError.BadHostName;
2923 flags |= Flags.HostTypeMask;
2924 return idx;
2925 }
2926 flags |= Flags.BasicHostType;
2927 if (flag3)
2928 {
2929 string text3 = new string(pString, num5, i - num5);
2930 try
2931 {
2932 newHost += text3.Normalize(NormalizationForm.FormC);
2933 }
2934 catch (ArgumentException)
2935 {
2936 err = ParsingError.BadFormat;
2937 return idx;
2938 }
2939 flags |= Flags.HostUnicodeNormalized;
2940 }
2941 }
2942 else if (syntax.InFact(UriSyntaxFlags.MustHaveAuthority) || syntax.InFact(UriSyntaxFlags.MailToLikeUri))
2943 {
2944 err = ParsingError.BadHostName;
2945 flags |= Flags.HostTypeMask;
2946 return idx;
2947 }
2948 }
2949 return i;
2950 }
unsafe void CheckAuthorityHelperHandleDnsIri(char *pString, int start, int end, bool hasUnicode, ref Flags flags, ref bool justNormalized, ref string newHost, ref ParsingError err)
Definition Uri.cs:2952
string _originalUnicodeString
Definition Uri.cs:191
static bool IriParsingStatic(UriParser syntax)
Definition Uri.cs:601
static bool StaticInFact(Flags allFlags, Flags checkFlags)
Definition Uri.cs:621
static bool StaticIsFile(UriParser syntax)
Definition Uri.cs:894
static bool StaticNotAny(Flags allFlags, Flags checkFlags)
Definition Uri.cs:616
bool InFact(Flags flags)
Definition Uri.cs:611

References System.Uri._originalUnicodeString, System.Uri.CheckAuthorityHelperHandleDnsIri(), System.Runtime.Serialization.Dictionary, System.IriHelper.EscapeUnescapeIri(), System.Uri.IriParsingStatic(), System.DomainNameHelper.IsValid(), System.IPv6AddressHelper.IsValid(), System.IPv4AddressHelper.IsValid(), System.UncNameHelper.IsValid(), System.DomainNameHelper.IsValidByIri(), System.length, System.Uri.StaticInFact(), System.Uri.StaticIsFile(), System.Uri.StaticNotAny(), and System.text.

Referenced by System.Uri.GetHostViaCustomSyntax(), and System.Uri.PrivateParseMinimal().