DocSpace-client/thirdparty/AppLimit.CloudComputing.SharpBox/Common/Net/HttpUtility.cs

1215 lines
41 KiB
C#
Raw Normal View History

2020-03-13 13:40:58 +00:00
namespace System.Net
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.IO;
using System.Text;
/// <summary>
/// This class is a helper implementation for the Android platform
/// </summary>
internal sealed class HttpUtility
{
private static Hashtable entities;
private static char[] hexChars = "0123456789abcdef".ToCharArray();
private static object lock_ = new object();
private static int GetChar(byte[] bytes, int offset, int length)
{
int num = 0;
int num2 = length + offset;
for (int i = offset; i < num2; i++)
{
int @int = GetInt(bytes[i]);
if (@int == -1)
{
return -1;
}
num = (num << 4) + @int;
}
return num;
}
private static int GetChar(string str, int offset, int length)
{
int num = 0;
int num2 = length + offset;
for (int i = offset; i < num2; i++)
{
char ch = str[i];
if (ch > '\x007f')
{
return -1;
}
int @int = GetInt((byte) ch);
if (@int == -1)
{
return -1;
}
num = (num << 4) + @int;
}
return num;
}
private static char[] GetChars(MemoryStream b, Encoding e)
{
return e.GetChars(b.GetBuffer(), 0, (int) b.Length);
}
private static int GetInt(byte b)
{
char ch = (char) b;
if ((ch >= '0') && (ch <= '9'))
{
return (ch - '0');
}
if ((ch >= 'a') && (ch <= 'f'))
{
return ((ch - 'a') + 10);
}
if ((ch >= 'A') && (ch <= 'F'))
{
return ((ch - 'A') + 10);
}
return -1;
}
public static string HtmlAttributeEncode(string s)
{
if (s == null)
{
return null;
}
bool flag = false;
for (int i = 0; i < s.Length; i++)
{
if (((s[i] == '&') || (s[i] == '"')) || (s[i] == '<'))
{
flag = true;
break;
}
}
if (!flag)
{
return s;
}
StringBuilder builder = new StringBuilder();
int length = s.Length;
for (int j = 0; j < length; j++)
{
switch (s[j])
{
case '"':
builder.Append("&quot;");
break;
case '&':
builder.Append("&amp;");
break;
case '<':
builder.Append("&lt;");
break;
default:
builder.Append(s[j]);
break;
}
}
return builder.ToString();
}
public static void HtmlAttributeEncode(string s, TextWriter output)
{
output.Write(HtmlAttributeEncode(s));
}
public static string HtmlDecode(string s)
{
if (s == null)
{
throw new ArgumentNullException("s");
}
if (s.IndexOf('&') == -1)
{
return s;
}
StringBuilder builder = new StringBuilder();
StringBuilder builder2 = new StringBuilder();
int length = s.Length;
int num2 = 0;
int num3 = 0;
bool flag = false;
for (int i = 0; i < length; i++)
{
char ch = s[i];
if (num2 == 0)
{
if (ch == '&')
{
builder.Append(ch);
num2 = 1;
}
else
{
builder2.Append(ch);
}
}
else if (ch == '&')
{
num2 = 1;
if (flag)
{
builder.Append(num3.ToString(CultureInfo.InvariantCulture));
flag = false;
}
builder2.Append(builder.ToString());
builder.Length = 0;
builder.Append('&');
}
else
{
switch (num2)
{
case 1:
if (ch == ';')
{
num2 = 0;
builder2.Append(builder.ToString());
builder2.Append(ch);
builder.Length = 0;
}
else
{
num3 = 0;
if (ch != '#')
{
num2 = 2;
}
else
{
num2 = 3;
}
builder.Append(ch);
}
break;
case 2:
builder.Append(ch);
if (ch == ';')
{
string str = builder.ToString();
if ((str.Length > 1) && Entities.ContainsKey(str.Substring(1, str.Length - 2)))
{
str = Entities[str.Substring(1, str.Length - 2)].ToString();
}
builder2.Append(str);
num2 = 0;
builder.Length = 0;
}
break;
case 3:
if (ch == ';')
{
if (num3 > 0xffff)
{
builder2.Append("&#");
builder2.Append(num3.ToString(CultureInfo.InvariantCulture));
builder2.Append(";");
}
else
{
builder2.Append((char) num3);
}
num2 = 0;
builder.Length = 0;
flag = false;
}
else if (char.IsDigit(ch))
{
num3 = (num3 * 10) + (ch - '0');
flag = true;
}
else
{
num2 = 2;
if (flag)
{
builder.Append(num3.ToString(CultureInfo.InvariantCulture));
flag = false;
}
builder.Append(ch);
}
break;
}
}
}
if (builder.Length > 0)
{
builder2.Append(builder.ToString());
}
else if (flag)
{
builder2.Append(num3.ToString(CultureInfo.InvariantCulture));
}
return builder2.ToString();
}
public static void HtmlDecode(string s, TextWriter output)
{
if (s != null)
{
output.Write(HtmlDecode(s));
}
}
public static string HtmlEncode(string s)
{
if (s == null)
{
return null;
}
bool flag = false;
for (int i = 0; i < s.Length; i++)
{
char ch = s[i];
if (((ch == '&') || (ch == '"')) || (((ch == '<') || (ch == '>')) || (ch > '\x009f')))
{
flag = true;
break;
}
}
if (!flag)
{
return s;
}
StringBuilder builder = new StringBuilder();
int length = s.Length;
for (int j = 0; j < length; j++)
{
char ch2 = s[j];
switch (ch2)
{
case '<':
{
builder.Append("&lt;");
continue;
}
case '>':
{
builder.Append("&gt;");
continue;
}
default:
{
if (ch2 != '"')
{
if (ch2 != '&')
{
goto Label_00F4;
}
builder.Append("&amp;");
}
else
{
builder.Append("&quot;");
}
continue;
}
}
Label_00F4:
if (s[j] > '\x009f')
{
builder.Append("&#");
builder.Append(((int) s[j]).ToString(CultureInfo.InvariantCulture));
builder.Append(";");
}
else
{
builder.Append(s[j]);
}
}
return builder.ToString();
}
public static void HtmlEncode(string s, TextWriter output)
{
if (s != null)
{
output.Write(HtmlEncode(s));
}
}
private static void InitEntities()
{
entities = new Hashtable();
entities.Add("nbsp", '\x00a0');
entities.Add("iexcl", '\x00a1');
entities.Add("cent", '\x00a2');
entities.Add("pound", '\x00a3');
entities.Add("curren", '\x00a4');
entities.Add("yen", '\x00a5');
entities.Add("brvbar", '\x00a6');
entities.Add("sect", '\x00a7');
entities.Add("uml", '\x00a8');
entities.Add("copy", '\x00a9');
entities.Add("ordf", '\x00aa');
entities.Add("laquo", '\x00ab');
entities.Add("not", '\x00ac');
entities.Add("shy", '\x00ad');
entities.Add("reg", '\x00ae');
entities.Add("macr", '\x00af');
entities.Add("deg", '\x00b0');
entities.Add("plusmn", '\x00b1');
entities.Add("sup2", '\x00b2');
entities.Add("sup3", '\x00b3');
entities.Add("acute", '\x00b4');
entities.Add("micro", '\x00b5');
entities.Add("para", '\x00b6');
entities.Add("middot", '\x00b7');
entities.Add("cedil", '\x00b8');
entities.Add("sup1", '\x00b9');
entities.Add("ordm", '\x00ba');
entities.Add("raquo", '\x00bb');
entities.Add("frac14", '\x00bc');
entities.Add("frac12", '\x00bd');
entities.Add("frac34", '\x00be');
entities.Add("iquest", '\x00bf');
entities.Add("Agrave", '\x00c0');
entities.Add("Aacute", '\x00c1');
entities.Add("Acirc", '\x00c2');
entities.Add("Atilde", '\x00c3');
entities.Add("Auml", '\x00c4');
entities.Add("Aring", '\x00c5');
entities.Add("AElig", '\x00c6');
entities.Add("Ccedil", '\x00c7');
entities.Add("Egrave", '\x00c8');
entities.Add("Eacute", '\x00c9');
entities.Add("Ecirc", '\x00ca');
entities.Add("Euml", '\x00cb');
entities.Add("Igrave", '\x00cc');
entities.Add("Iacute", '\x00cd');
entities.Add("Icirc", '\x00ce');
entities.Add("Iuml", '\x00cf');
entities.Add("ETH", '\x00d0');
entities.Add("Ntilde", '\x00d1');
entities.Add("Ograve", '\x00d2');
entities.Add("Oacute", '\x00d3');
entities.Add("Ocirc", '\x00d4');
entities.Add("Otilde", '\x00d5');
entities.Add("Ouml", '\x00d6');
entities.Add("times", '\x00d7');
entities.Add("Oslash", '\x00d8');
entities.Add("Ugrave", '\x00d9');
entities.Add("Uacute", '\x00da');
entities.Add("Ucirc", '\x00db');
entities.Add("Uuml", '\x00dc');
entities.Add("Yacute", '\x00dd');
entities.Add("THORN", '\x00de');
entities.Add("szlig", '\x00df');
entities.Add("agrave", '\x00e0');
entities.Add("aacute", '\x00e1');
entities.Add("acirc", '\x00e2');
entities.Add("atilde", '\x00e3');
entities.Add("auml", '\x00e4');
entities.Add("aring", '\x00e5');
entities.Add("aelig", '\x00e6');
entities.Add("ccedil", '\x00e7');
entities.Add("egrave", '\x00e8');
entities.Add("eacute", '\x00e9');
entities.Add("ecirc", '\x00ea');
entities.Add("euml", '\x00eb');
entities.Add("igrave", '\x00ec');
entities.Add("iacute", '\x00ed');
entities.Add("icirc", '\x00ee');
entities.Add("iuml", '\x00ef');
entities.Add("eth", '\x00f0');
entities.Add("ntilde", '\x00f1');
entities.Add("ograve", '\x00f2');
entities.Add("oacute", '\x00f3');
entities.Add("ocirc", '\x00f4');
entities.Add("otilde", '\x00f5');
entities.Add("ouml", '\x00f6');
entities.Add("divide", '\x00f7');
entities.Add("oslash", '\x00f8');
entities.Add("ugrave", '\x00f9');
entities.Add("uacute", '\x00fa');
entities.Add("ucirc", '\x00fb');
entities.Add("uuml", '\x00fc');
entities.Add("yacute", '\x00fd');
entities.Add("thorn", '\x00fe');
entities.Add("yuml", '\x00ff');
entities.Add("fnof", 'ƒ');
entities.Add("Alpha", 'Α');
entities.Add("Beta", 'Β');
entities.Add("Gamma", 'Γ');
entities.Add("Delta", 'Δ');
entities.Add("Epsilon", 'Ε');
entities.Add("Zeta", 'Ζ');
entities.Add("Eta", 'Η');
entities.Add("Theta", 'Θ');
entities.Add("Iota", 'Ι');
entities.Add("Kappa", 'Κ');
entities.Add("Lambda", 'Λ');
entities.Add("Mu", 'Μ');
entities.Add("Nu", 'Ν');
entities.Add("Xi", 'Ξ');
entities.Add("Omicron", 'Ο');
entities.Add("Pi", 'Π');
entities.Add("Rho", 'Ρ');
entities.Add("Sigma", 'Σ');
entities.Add("Tau", 'Τ');
entities.Add("Upsilon", 'Υ');
entities.Add("Phi", 'Φ');
entities.Add("Chi", 'Χ');
entities.Add("Psi", 'Ψ');
entities.Add("Omega", 'Ω');
entities.Add("alpha", 'α');
entities.Add("beta", 'β');
entities.Add("gamma", 'γ');
entities.Add("delta", 'δ');
entities.Add("epsilon", 'ε');
entities.Add("zeta", 'ζ');
entities.Add("eta", 'η');
entities.Add("theta", 'θ');
entities.Add("iota", 'ι');
entities.Add("kappa", 'κ');
entities.Add("lambda", 'λ');
entities.Add("mu", 'μ');
entities.Add("nu", 'ν');
entities.Add("xi", 'ξ');
entities.Add("omicron", 'ο');
entities.Add("pi", 'π');
entities.Add("rho", 'ρ');
entities.Add("sigmaf", 'ς');
entities.Add("sigma", 'σ');
entities.Add("tau", 'τ');
entities.Add("upsilon", 'υ');
entities.Add("phi", 'φ');
entities.Add("chi", 'χ');
entities.Add("psi", 'ψ');
entities.Add("omega", 'ω');
entities.Add("thetasym", 'ϑ');
entities.Add("upsih", 'ϒ');
entities.Add("piv", 'ϖ');
entities.Add("bull", '•');
entities.Add("hellip", '…');
entities.Add("prime", '');
entities.Add("Prime", '″');
entities.Add("oline", '‾');
entities.Add("frasl", '');
entities.Add("weierp", '℘');
entities.Add("image", '');
entities.Add("real", '');
entities.Add("trade", '™');
entities.Add("alefsym", 'ℵ');
entities.Add("larr", '←');
entities.Add("uarr", '↑');
entities.Add("rarr", '→');
entities.Add("darr", '↓');
entities.Add("harr", '↔');
entities.Add("crarr", '↵');
entities.Add("lArr", '⇐');
entities.Add("uArr", '⇑');
entities.Add("rArr", '⇒');
entities.Add("dArr", '⇓');
entities.Add("hArr", '⇔');
entities.Add("forall", '∀');
entities.Add("part", '∂');
entities.Add("exist", '∃');
entities.Add("empty", '∅');
entities.Add("nabla", '∇');
entities.Add("isin", '∈');
entities.Add("notin", '∉');
entities.Add("ni", '∋');
entities.Add("prod", '∏');
entities.Add("sum", '∑');
entities.Add("minus", '');
entities.Add("lowast", '');
entities.Add("radic", '√');
entities.Add("prop", '∝');
entities.Add("infin", '∞');
entities.Add("ang", '∠');
entities.Add("and", '∧');
entities.Add("or", '');
entities.Add("cap", '∩');
entities.Add("cup", '');
entities.Add("int", '∫');
entities.Add("there4", '∴');
entities.Add("sim", '');
entities.Add("cong", '≅');
entities.Add("asymp", '≈');
entities.Add("ne", '≠');
entities.Add("equiv", '≡');
entities.Add("le", '≤');
entities.Add("ge", '≥');
entities.Add("sub", '⊂');
entities.Add("sup", '⊃');
entities.Add("nsub", '⊄');
entities.Add("sube", '⊆');
entities.Add("supe", '⊇');
entities.Add("oplus", '⊕');
entities.Add("otimes", '⊗');
entities.Add("perp", '⊥');
entities.Add("sdot", '⋅');
entities.Add("lceil", '⌈');
entities.Add("rceil", '⌉');
entities.Add("lfloor", '⌊');
entities.Add("rfloor", '⌋');
entities.Add("lang", '〈');
entities.Add("rang", '〉');
entities.Add("loz", '◊');
entities.Add("spades", '♠');
entities.Add("clubs", '♣');
entities.Add("hearts", '♥');
entities.Add("diams", '♦');
entities.Add("quot", '"');
entities.Add("amp", '&');
entities.Add("lt", '<');
entities.Add("gt", '>');
entities.Add("OElig", 'Œ');
entities.Add("oelig", 'œ');
entities.Add("Scaron", 'Š');
entities.Add("scaron", 'š');
entities.Add("Yuml", 'Ÿ');
entities.Add("circ", 'ˆ');
entities.Add("tilde", '˜');
entities.Add("ensp", '');
entities.Add("emsp", '');
entities.Add("thinsp", '');
entities.Add("zwnj", '');
entities.Add("zwj", '');
entities.Add("lrm", '');
entities.Add("rlm", '');
entities.Add("ndash", '');
entities.Add("mdash", '—');
entities.Add("lsquo", '');
entities.Add("rsquo", '');
entities.Add("sbquo", '');
entities.Add("ldquo", '“');
entities.Add("rdquo", '”');
entities.Add("bdquo", '„');
entities.Add("dagger", '†');
entities.Add("Dagger", '‡');
entities.Add("permil", '‰');
entities.Add("lsaquo", '');
entities.Add("rsaquo", '');
entities.Add("euro", '€');
}
private static bool NotEncoded(char c)
{
return (((((c == '!') || (c == '\'')) || ((c == '(') || (c == ')'))) || (((c == '*') || (c == '-')) || (c == '.'))) || (c == '_'));
}
public static NameValueCollection ParseQueryString(string query)
{
return ParseQueryString(query, Encoding.UTF8);
}
public static NameValueCollection ParseQueryString(string query, Encoding encoding)
{
if (query == null)
{
throw new ArgumentNullException("query");
}
if (encoding == null)
{
throw new ArgumentNullException("encoding");
}
if ((query.Length == 0) || ((query.Length == 1) && (query[0] == '?')))
{
return new NameValueCollection();
}
if (query[0] == '?')
{
query = query.Substring(1);
}
NameValueCollection result = new HttpQSCollection();
ParseQueryString(query, encoding, result);
return result;
}
internal static void ParseQueryString(string query, Encoding encoding, NameValueCollection result)
{
if (query.Length != 0)
{
string str = HtmlDecode(query);
int length = str.Length;
int startIndex = 0;
bool flag = true;
while (startIndex <= length)
{
string str2;
int num3 = -1;
int num4 = -1;
for (int i = startIndex; i < length; i++)
{
if ((num3 == -1) && (str[i] == '='))
{
num3 = i + 1;
}
else if (str[i] == '&')
{
num4 = i;
break;
}
}
if (flag)
{
flag = false;
if (str[startIndex] == '?')
{
startIndex++;
}
}
if (num3 == -1)
{
str2 = null;
num3 = startIndex;
}
else
{
str2 = UrlDecode(str.Substring(startIndex, (num3 - startIndex) - 1), encoding);
}
if (num4 < 0)
{
startIndex = -1;
num4 = str.Length;
}
else
{
startIndex = num4 + 1;
}
string val = UrlDecode(str.Substring(num3, num4 - num3), encoding);
result.Add(str2, val);
if (startIndex == -1)
{
break;
}
}
}
}
public static string UrlDecode(string str)
{
return UrlDecode(str, Encoding.UTF8);
}
public static string UrlDecode(byte[] bytes, Encoding e)
{
if (bytes == null)
{
return null;
}
return UrlDecode(bytes, 0, bytes.Length, e);
}
public static string UrlDecode(string s, Encoding e)
{
if (s == null)
{
return null;
}
if ((s.IndexOf('%') == -1) && (s.IndexOf('+') == -1))
{
return s;
}
if (e == null)
{
e = Encoding.UTF8;
}
long length = s.Length;
List<byte> buf = new List<byte>();
for (int i = 0; i < length; i++)
{
char ch = s[i];
if (((ch == '%') && ((i + 2) < length)) && (s[i + 1] != '%'))
{
int num2;
if ((s[i + 1] == 'u') && ((i + 5) < length))
{
num2 = GetChar(s, i + 2, 4);
if (num2 != -1)
{
WriteCharBytes(buf, (char) num2, e);
i += 5;
}
else
{
WriteCharBytes(buf, '%', e);
}
}
else
{
num2 = GetChar(s, i + 1, 2);
if (num2 != -1)
{
WriteCharBytes(buf, (char) num2, e);
i += 2;
}
else
{
WriteCharBytes(buf, '%', e);
}
}
}
else if (ch == '+')
{
WriteCharBytes(buf, ' ', e);
}
else
{
WriteCharBytes(buf, ch, e);
}
}
byte[] bytes = buf.ToArray();
buf = null;
return e.GetString(bytes);
}
public static string UrlDecode(byte[] bytes, int offset, int count, Encoding e)
{
if (bytes == null)
{
return null;
}
if (count == 0)
{
return string.Empty;
}
if (bytes == null)
{
throw new ArgumentNullException("bytes");
}
if ((offset < 0) || (offset > bytes.Length))
{
throw new ArgumentOutOfRangeException("offset");
}
if ((count < 0) || ((offset + count) > bytes.Length))
{
throw new ArgumentOutOfRangeException("count");
}
StringBuilder builder = new StringBuilder();
MemoryStream b = new MemoryStream();
int num = count + offset;
for (int i = offset; i < num; i++)
{
if (((bytes[i] == 0x25) && ((i + 2) < count)) && (bytes[i + 1] != 0x25))
{
int num2;
if ((bytes[i + 1] == 0x75) && ((i + 5) < num))
{
if (b.Length > 0L)
{
builder.Append(GetChars(b, e));
b.SetLength(0L);
}
num2 = GetChar(bytes, i + 2, 4);
if (num2 == -1)
{
goto Label_0123;
}
builder.Append((char) num2);
i += 5;
continue;
}
num2 = GetChar(bytes, i + 1, 2);
if (num2 != -1)
{
b.WriteByte((byte) num2);
i += 2;
continue;
}
}
Label_0123:
if (b.Length > 0L)
{
builder.Append(GetChars(b, e));
b.SetLength(0L);
}
if (bytes[i] == 0x2b)
{
builder.Append(' ');
}
else
{
builder.Append((char) bytes[i]);
}
}
if (b.Length > 0L)
{
builder.Append(GetChars(b, e));
}
b = null;
return builder.ToString();
}
public static byte[] UrlDecodeToBytes(byte[] bytes)
{
if (bytes == null)
{
return null;
}
return UrlDecodeToBytes(bytes, 0, bytes.Length);
}
public static byte[] UrlDecodeToBytes(string str)
{
return UrlDecodeToBytes(str, Encoding.UTF8);
}
public static byte[] UrlDecodeToBytes(string str, Encoding e)
{
if (str == null)
{
return null;
}
if (e == null)
{
throw new ArgumentNullException("e");
}
return UrlDecodeToBytes(e.GetBytes(str));
}
public static byte[] UrlDecodeToBytes(byte[] bytes, int offset, int count)
{
if (bytes == null)
{
return null;
}
if (count == 0)
{
return new byte[0];
}
int length = bytes.Length;
if ((offset < 0) || (offset >= length))
{
throw new ArgumentOutOfRangeException("offset");
}
if ((count < 0) || (offset > (length - count)))
{
throw new ArgumentOutOfRangeException("count");
}
MemoryStream stream = new MemoryStream();
int num2 = offset + count;
for (int i = offset; i < num2; i++)
{
char ch = (char) bytes[i];
if (ch == '+')
{
ch = ' ';
}
else if ((ch == '%') && (i < (num2 - 2)))
{
int num4 = GetChar(bytes, i + 1, 2);
if (num4 != -1)
{
ch = (char) num4;
i += 2;
}
}
stream.WriteByte((byte) ch);
}
return stream.ToArray();
}
public static string UrlEncode(string str)
{
return UrlEncode(str, Encoding.UTF8);
}
public static string UrlEncode(byte[] bytes)
{
if (bytes == null)
{
return null;
}
if (bytes.Length == 0)
{
return string.Empty;
}
return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, bytes.Length));
}
public static string UrlEncode(string s, Encoding Enc)
{
if (s == null)
{
return null;
}
if (s == string.Empty)
{
return string.Empty;
}
bool flag = false;
int length = s.Length;
for (int i = 0; i < length; i++)
{
char c = s[i];
if (((((c < '0') || ((c < 'A') && (c > '9'))) || ((c > 'Z') && (c < 'a'))) || (c > 'z')) && !NotEncoded(c))
{
flag = true;
break;
}
}
if (!flag)
{
return s;
}
byte[] bytes = new byte[Enc.GetMaxByteCount(s.Length)];
int count = Enc.GetBytes(s, 0, s.Length, bytes, 0);
return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, count));
}
public static string UrlEncode(byte[] bytes, int offset, int count)
{
if (bytes == null)
{
return null;
}
if (bytes.Length == 0)
{
return string.Empty;
}
return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, offset, count));
}
private static void UrlEncodeChar(char c, Stream result, bool isUnicode)
{
if (c > '\x00ff')
{
int num2 = c;
result.WriteByte(0x25);
result.WriteByte(0x75);
int index = num2 >> 12;
result.WriteByte((byte) hexChars[index]);
index = (num2 >> 8) & 15;
result.WriteByte((byte) hexChars[index]);
index = (num2 >> 4) & 15;
result.WriteByte((byte) hexChars[index]);
index = num2 & 15;
result.WriteByte((byte) hexChars[index]);
}
else if ((c > ' ') && NotEncoded(c))
{
result.WriteByte((byte) c);
}
else if (c == ' ')
{
result.WriteByte(0x2b);
}
else if ((((c < '0') || ((c < 'A') && (c > '9'))) || ((c > 'Z') && (c < 'a'))) || (c > 'z'))
{
if (isUnicode && (c > '\x007f'))
{
result.WriteByte(0x25);
result.WriteByte(0x75);
result.WriteByte(0x30);
result.WriteByte(0x30);
}
else
{
result.WriteByte(0x25);
}
int num3 = c >> 4;
result.WriteByte((byte) hexChars[num3]);
num3 = c & '\x000f';
result.WriteByte((byte) hexChars[num3]);
}
else
{
result.WriteByte((byte) c);
}
}
public static byte[] UrlEncodeToBytes(byte[] bytes)
{
if (bytes == null)
{
return null;
}
if (bytes.Length == 0)
{
return new byte[0];
}
return UrlEncodeToBytes(bytes, 0, bytes.Length);
}
public static byte[] UrlEncodeToBytes(string str)
{
return UrlEncodeToBytes(str, Encoding.UTF8);
}
public static byte[] UrlEncodeToBytes(string str, Encoding e)
{
if (str == null)
{
return null;
}
if (str == string.Empty)
{
return new byte[0];
}
byte[] bytes = e.GetBytes(str);
return UrlEncodeToBytes(bytes, 0, bytes.Length);
}
public static byte[] UrlEncodeToBytes(byte[] bytes, int offset, int count)
{
if (bytes == null)
{
return null;
}
int length = bytes.Length;
if (length == 0)
{
return new byte[0];
}
if ((offset < 0) || (offset >= length))
{
throw new ArgumentOutOfRangeException("offset");
}
if ((count < 0) || (count > (length - offset)))
{
throw new ArgumentOutOfRangeException("count");
}
MemoryStream result = new MemoryStream(count);
int num2 = offset + count;
for (int i = offset; i < num2; i++)
{
UrlEncodeChar((char) bytes[i], result, false);
}
return result.ToArray();
}
public static string UrlEncodeUnicode(string str)
{
if (str == null)
{
return null;
}
return Encoding.ASCII.GetString(UrlEncodeUnicodeToBytes(str));
}
public static byte[] UrlEncodeUnicodeToBytes(string str)
{
if (str == null)
{
return null;
}
if (str == string.Empty)
{
return new byte[0];
}
MemoryStream result = new MemoryStream(str.Length);
foreach (char ch in str)
{
UrlEncodeChar(ch, result, true);
}
return result.ToArray();
}
public static string UrlPathEncode(string s)
{
if ((s == null) || (s.Length == 0))
{
return s;
}
MemoryStream result = new MemoryStream();
int length = s.Length;
for (int i = 0; i < length; i++)
{
UrlPathEncodeChar(s[i], result);
}
return Encoding.ASCII.GetString(result.ToArray());
}
private static void UrlPathEncodeChar(char c, Stream result)
{
if ((c < '!') || (c > '~'))
{
byte[] bytes = Encoding.UTF8.GetBytes(c.ToString());
for (int i = 0; i < bytes.Length; i++)
{
result.WriteByte(0x25);
int index = bytes[i] >> 4;
result.WriteByte((byte) hexChars[index]);
index = bytes[i] & 15;
result.WriteByte((byte) hexChars[index]);
}
}
else if (c == ' ')
{
result.WriteByte(0x25);
result.WriteByte(50);
result.WriteByte(0x30);
}
else
{
result.WriteByte((byte) c);
}
}
private static void WriteCharBytes(IList buf, char ch, Encoding e)
{
if (ch > '\x00ff')
{
char[] chars = new char[] { ch };
foreach (byte num2 in e.GetBytes(chars))
{
buf.Add(num2);
}
}
else
{
buf.Add((byte) ch);
}
}
private static Hashtable Entities
{
get
{
object obj2 = lock_;
lock (obj2)
{
if (entities == null)
{
InitEntities();
}
return entities;
}
}
}
private sealed class HttpQSCollection : NameValueCollection
{
public override string ToString()
{
int count = this.Count;
if (count == 0)
{
return string.Empty;
}
StringBuilder builder = new StringBuilder();
string[] allKeys = this.AllKeys;
for (int i = 0; i < count; i++)
{
builder.AppendFormat("{0}={1}&", allKeys[i], base[allKeys[i]]);
}
if (builder.Length > 0)
{
builder.Length--;
}
return builder.ToString();
}
}
}
}