private static string UrlDecodeInternal(byte[] bytes, int offset, int count, Encoding encoding) { if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } XmlaHttpUtility.UrlDecoder urlDecoder = new XmlaHttpUtility.UrlDecoder(count, encoding); int i = 0; while (i < count) { int num = offset + i; byte b = bytes[num]; if (b == 43) { b = 32; goto IL_E6; } if (b != 37 || i >= count - 2) { goto IL_E6; } if (bytes[num + 1] == 117 && i < count - 5) { int num2 = XmlaHttpUtility.HexToInt((char)bytes[num + 2]); int num3 = XmlaHttpUtility.HexToInt((char)bytes[num + 3]); int num4 = XmlaHttpUtility.HexToInt((char)bytes[num + 4]); int num5 = XmlaHttpUtility.HexToInt((char)bytes[num + 5]); if (num2 < 0 || num3 < 0 || num4 < 0 || num5 < 0) { goto IL_E6; } char ch = (char)(num2 << 12 | num3 << 8 | num4 << 4 | num5); i += 5; urlDecoder.AddChar(ch); } else { int num6 = XmlaHttpUtility.HexToInt((char)bytes[num + 1]); int num7 = XmlaHttpUtility.HexToInt((char)bytes[num + 2]); if (num6 >= 0 && num7 >= 0) { b = (byte)(num6 << 4 | num7); i += 2; goto IL_E6; } goto IL_E6; } IL_ED: i++; continue; IL_E6: urlDecoder.AddByte(b); goto IL_ED; } return(urlDecoder.GetString()); }
private static byte[] UrlEncode(byte[] bytes, int offset, int count) { if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int num = 0; int num2 = 0; for (int i = 0; i < count; i++) { char c = (char)bytes[offset + i]; if (c == ' ') { num++; } else if (!XmlaHttpUtility.IsUrlSafeChar(c)) { num2++; } } if (num == 0 && num2 == 0) { return(bytes); } byte[] array = new byte[count + num2 * 2]; int num3 = 0; for (int j = 0; j < count; j++) { byte b = bytes[offset + j]; char c2 = (char)b; if (XmlaHttpUtility.IsUrlSafeChar(c2)) { array[num3++] = b; } else if (c2 == ' ') { array[num3++] = 43; } else { array[num3++] = 37; array[num3++] = (byte)XmlaHttpUtility.IntToHex(b >> 4 & 15); array[num3++] = (byte)XmlaHttpUtility.IntToHex((int)(b & 15)); } } return(array); }
private static byte[] UrlEncodeNonAscii(byte[] bytes, int offset, int count, bool alwaysCreateNewReturnValue) { if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int num = 0; for (int i = 0; i < count; i++) { if (XmlaHttpUtility.IsNonAsciiByte(bytes[offset + i])) { num++; } } if (!alwaysCreateNewReturnValue && num == 0) { return(bytes); } byte[] array = new byte[count + num * 2]; int num2 = 0; for (int j = 0; j < count; j++) { byte b = bytes[offset + j]; if (XmlaHttpUtility.IsNonAsciiByte(b)) { array[num2++] = 37; array[num2++] = (byte)XmlaHttpUtility.IntToHex(b >> 4 & 15); array[num2++] = (byte)XmlaHttpUtility.IntToHex((int)(b & 15)); } else { array[num2++] = b; } } return(array); }
private static byte[] UrlDecodeInternal(byte[] bytes, int offset, int count) { if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int num = 0; byte[] array = new byte[count]; for (int i = 0; i < count; i++) { int num2 = offset + i; byte b = bytes[num2]; if (b == 43) { b = 32; } else if (b == 37 && i < count - 2) { int num3 = XmlaHttpUtility.HexToInt((char)bytes[num2 + 1]); int num4 = XmlaHttpUtility.HexToInt((char)bytes[num2 + 2]); if (num3 >= 0 && num4 >= 0) { b = (byte)(num3 << 4 | num4); i += 2; } } array[num++] = b; } if (num < array.Length) { byte[] array2 = new byte[num]; Array.Copy(array, array2, num); array = array2; } return(array); }