36 {
37 if (
string.IsNullOrEmpty(
value))
38 {
39 return null;
40 }
42 {
44 }
46 string text2 = null;
47 ushort result = 80;
48 int num =
value.LastIndexOf(
'@');
49 if (num != -1)
50 {
51 string text3 =
value.Substring(0, num);
52 try
53 {
54 text3 = Uri.UnescapeDataString(text3);
55 }
56 catch
57 {
58 }
60 num = text3.IndexOf(':');
61 if (num == -1)
62 {
64 }
65 else
66 {
67 text = text3.Substring(0, num);
68 text2 = text3.Substring(num + 1);
69 }
70 }
71 int num2 =
value.IndexOf(
']');
72 num =
value.LastIndexOf(
':');
73 string host;
74 if (num == -1 || (num2 != -1 && num < num2))
75 {
77 }
78 else
79 {
80 host =
value.Substring(0, num);
82 for (i = num + 1;
i < value.Length &&
char.IsDigit(
value[i]);
i++)
83 {
84 }
85 if (!ushort.TryParse(
value.AsSpan(num + 1, i - num - 1), out result))
86 {
87 return null;
88 }
89 }
90 try
91 {
92 UriBuilder uriBuilder = new UriBuilder("http", host, result);
94 {
95 uriBuilder.UserName = Uri.EscapeDataString(
text);
96 }
97 if (text2 != null)
98 {
99 uriBuilder.Password = Uri.EscapeDataString(text2);
100 }
101 return uriBuilder.Uri;
102 }
103 catch
104 {
105 }
106 return null;
107 }