Disassembled CarotDav v1.14.7 with dotPeek 2017.2
This commit is contained in:
507
Rei.Fs/JsonObject.cs
Normal file
507
Rei.Fs/JsonObject.cs
Normal file
@@ -0,0 +1,507 @@
|
||||
// Decompiled with JetBrains decompiler
|
||||
// Type: Rei.Fs.JsonObject
|
||||
// Assembly: Rei.Fs, Version=1.13.2.8796, Culture=neutral, PublicKeyToken=null
|
||||
// MVID: D8B08A8B-697C-4439-9CFF-1BE4EE46F7B0
|
||||
// Assembly location: F:\Eigene Dateien\Dropbox\portable Collection\Progs\CarotDAV\Rei.Fs.dll
|
||||
|
||||
using Microsoft.VisualBasic.CompilerServices;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace Rei.Fs
|
||||
{
|
||||
public class JsonObject
|
||||
{
|
||||
private const string JSONIgnoreChars = " \t\r\n\0";
|
||||
private JsonObject.JsonType pType;
|
||||
private string pString;
|
||||
private long pInteger;
|
||||
private double pDouble;
|
||||
private bool pBoolean;
|
||||
private Dictionary<string, JsonObject> pHash;
|
||||
private List<JsonObject> pArray;
|
||||
|
||||
public static JsonObject ReadJson(string str)
|
||||
{
|
||||
JsonObject jsonObject = (JsonObject) null;
|
||||
JsonObject.InnerReadJson(0, str, ref jsonObject);
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
private static string GetSubStrArround(string str, int index)
|
||||
{
|
||||
if (string.IsNullOrEmpty(str))
|
||||
return "";
|
||||
checked { index -= 30; }
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
int length = 60;
|
||||
if (str.Length < checked (index + length))
|
||||
length = checked (str.Length - index);
|
||||
return str.Substring(index, length);
|
||||
}
|
||||
|
||||
private static int InnerReadJson(int index, string str, ref JsonObject value)
|
||||
{
|
||||
try
|
||||
{
|
||||
while (" \t\r\n\0".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 123)
|
||||
{
|
||||
Dictionary<string, JsonObject> hash = new Dictionary<string, JsonObject>();
|
||||
JsonObject jsonObject = (JsonObject) null;
|
||||
checked { ++index; }
|
||||
while (" \t\r\n\0".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 125)
|
||||
{
|
||||
value = new JsonObject(hash);
|
||||
return checked (index + 1);
|
||||
}
|
||||
while (true)
|
||||
{
|
||||
string key = (string) null;
|
||||
index = JsonObject.InnreReadJSON_String(index, str, ref key);
|
||||
while (" \t\r\n\0".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 58)
|
||||
{
|
||||
checked { ++index; }
|
||||
index = JsonObject.InnerReadJson(index, str, ref jsonObject);
|
||||
hash.Add(key, jsonObject);
|
||||
while (" \t\r\n\0".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 44)
|
||||
checked { ++index; }
|
||||
else
|
||||
goto label_19;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
throw new Exception();
|
||||
label_19:
|
||||
if ((int) str[index] != 125)
|
||||
throw new Exception();
|
||||
checked { ++index; }
|
||||
value = new JsonObject(hash);
|
||||
return index;
|
||||
}
|
||||
if ((int) str[index] == 91)
|
||||
{
|
||||
List<JsonObject> array = new List<JsonObject>();
|
||||
JsonObject jsonObject = (JsonObject) null;
|
||||
checked { ++index; }
|
||||
while (" \t\r\n\0".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 93)
|
||||
{
|
||||
value = new JsonObject(array);
|
||||
return checked (index + 1);
|
||||
}
|
||||
while (true)
|
||||
{
|
||||
index = JsonObject.InnerReadJson(index, str, ref jsonObject);
|
||||
array.Add(jsonObject);
|
||||
while (" \t\r\n\0".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 44)
|
||||
checked { ++index; }
|
||||
else
|
||||
break;
|
||||
}
|
||||
if ((int) str[index] != 93)
|
||||
throw new Exception();
|
||||
checked { ++index; }
|
||||
value = new JsonObject(array);
|
||||
return index;
|
||||
}
|
||||
if ((int) str[index] == 34)
|
||||
{
|
||||
string str1 = (string) null;
|
||||
index = JsonObject.InnreReadJSON_String(index, str, ref str1);
|
||||
value = new JsonObject(str1);
|
||||
return index;
|
||||
}
|
||||
if (checked (str.Length - index) > 4 && Operators.CompareString(str.Substring(index, 4).ToLowerInvariant(), "true", false) == 0)
|
||||
{
|
||||
value = new JsonObject(true);
|
||||
return checked (index + 4);
|
||||
}
|
||||
if (checked (str.Length - index) > 5 && Operators.CompareString(str.Substring(index, 5).ToLowerInvariant(), "false", false) == 0)
|
||||
{
|
||||
value = new JsonObject(false);
|
||||
return checked (index + 5);
|
||||
}
|
||||
if (checked (str.Length - index) > 4 && Operators.CompareString(str.Substring(index, 4).ToLowerInvariant(), "null", false) == 0)
|
||||
{
|
||||
value = new JsonObject();
|
||||
return checked (index + 4);
|
||||
}
|
||||
int startIndex = index;
|
||||
while ("+-0123456789".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 101 || (int) str[index] == 69 || (int) str[index] == 46)
|
||||
{
|
||||
while ("+-0123456789.eE".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
double result;
|
||||
if (double.TryParse(str.Substring(startIndex, checked (index - startIndex)), NumberStyles.Any, (IFormatProvider) CultureInfo.InvariantCulture, out result))
|
||||
{
|
||||
value = new JsonObject(result);
|
||||
return index;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
long result;
|
||||
if (long.TryParse(str.Substring(startIndex, checked (index - startIndex)), out result))
|
||||
{
|
||||
value = new JsonObject(result);
|
||||
return index;
|
||||
}
|
||||
}
|
||||
throw new Exception();
|
||||
}
|
||||
catch (Exception ex) when (
|
||||
{
|
||||
// ISSUE: unable to correctly present filter
|
||||
ProjectData.SetProjectError(ex);
|
||||
if (!(ex is InvalidServerResponseException))
|
||||
{
|
||||
SuccessfulFiltering;
|
||||
}
|
||||
else
|
||||
throw;
|
||||
}
|
||||
)
|
||||
{
|
||||
throw new InvalidServerResponseException("Cannot parse server response. index:" + index.ToString() + " arround: \"" + JsonObject.GetSubStrArround(str, index) + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
private static int InnreReadJSON_String(int index, string str, ref string value)
|
||||
{
|
||||
try
|
||||
{
|
||||
while (" \t\r\n\0".Contains(Conversions.ToString(str[index])))
|
||||
checked { ++index; }
|
||||
if ((int) str[index] != 34)
|
||||
throw new Exception();
|
||||
checked { ++index; }
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
while (true)
|
||||
{
|
||||
while ((int) str[index] != 92)
|
||||
{
|
||||
if ((int) str[index] != 34)
|
||||
{
|
||||
stringBuilder.Append(str[index]);
|
||||
checked { ++index; }
|
||||
}
|
||||
else
|
||||
{
|
||||
value = stringBuilder.ToString();
|
||||
return checked (index + 1);
|
||||
}
|
||||
}
|
||||
checked { ++index; }
|
||||
if ((int) str[index] == 98)
|
||||
stringBuilder.Append("\b");
|
||||
else if ((int) str[index] == 102)
|
||||
stringBuilder.Append("\f");
|
||||
else if ((int) str[index] == 110)
|
||||
stringBuilder.Append("\n");
|
||||
else if ((int) str[index] == 114)
|
||||
stringBuilder.Append("\r");
|
||||
else if ((int) str[index] == 116)
|
||||
stringBuilder.Append("\t");
|
||||
else if ((int) str[index] == 117)
|
||||
{
|
||||
stringBuilder.Append(Convert.ToChar(Convert.ToUInt32(str.Substring(checked (index + 1), 4), 16)));
|
||||
checked { index += 4; }
|
||||
}
|
||||
else
|
||||
stringBuilder.Append(str[index]);
|
||||
checked { ++index; }
|
||||
}
|
||||
}
|
||||
catch (Exception ex) when (
|
||||
{
|
||||
// ISSUE: unable to correctly present filter
|
||||
ProjectData.SetProjectError(ex);
|
||||
if (!(ex is InvalidServerResponseException))
|
||||
{
|
||||
SuccessfulFiltering;
|
||||
}
|
||||
else
|
||||
throw;
|
||||
}
|
||||
)
|
||||
{
|
||||
throw new InvalidServerResponseException("Cannot parse server response. index:" + index.ToString() + " arround: \"" + JsonObject.GetSubStrArround(str, index) + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
public static string EscapeString(string str)
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder(checked (str.Length * 2));
|
||||
stringBuilder.Append("\"");
|
||||
int num1 = 0;
|
||||
int num2 = checked (str.Length - 1);
|
||||
int index = num1;
|
||||
while (index <= num2)
|
||||
{
|
||||
char ch = str[index];
|
||||
if (Operators.CompareString(Conversions.ToString(ch), "\b", false) == 0)
|
||||
stringBuilder.Append("\\b");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\f", false) == 0)
|
||||
stringBuilder.Append("\\f");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\n", false) == 0)
|
||||
stringBuilder.Append("\\n");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\r", false) == 0)
|
||||
stringBuilder.Append("\\r");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\t", false) == 0)
|
||||
stringBuilder.Append("\\t");
|
||||
else if (Convert.ToInt32(ch) < 32)
|
||||
stringBuilder.Append("\\u" + Convert.ToInt32(ch).ToString("X4"));
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\"", false) == 0)
|
||||
{
|
||||
stringBuilder.Append("\\u0022");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((int) ch == 34 || (int) ch == 92)
|
||||
stringBuilder.Append("\\");
|
||||
stringBuilder.Append(ch);
|
||||
}
|
||||
checked { ++index; }
|
||||
}
|
||||
stringBuilder.Append("\"");
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
|
||||
public static string EscapeStringAscii(string str)
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder(checked (str.Length * 2));
|
||||
stringBuilder.Append("\"");
|
||||
int num1 = 0;
|
||||
int num2 = checked (str.Length - 1);
|
||||
int index = num1;
|
||||
while (index <= num2)
|
||||
{
|
||||
char ch = str[index];
|
||||
if (Operators.CompareString(Conversions.ToString(ch), "\b", false) == 0)
|
||||
stringBuilder.Append("\\b");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\f", false) == 0)
|
||||
stringBuilder.Append("\\f");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\n", false) == 0)
|
||||
stringBuilder.Append("\\n");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\r", false) == 0)
|
||||
stringBuilder.Append("\\r");
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\t", false) == 0)
|
||||
stringBuilder.Append("\\t");
|
||||
else if (Convert.ToInt32(ch) < 32 || Convert.ToInt32(ch) >= (int) sbyte.MaxValue)
|
||||
stringBuilder.Append("\\u" + Convert.ToInt32(ch).ToString("X4"));
|
||||
else if (Operators.CompareString(Conversions.ToString(ch), "\"", false) == 0)
|
||||
{
|
||||
stringBuilder.Append("\\u0022");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((int) ch == 34 || (int) ch == 92)
|
||||
stringBuilder.Append("\\");
|
||||
stringBuilder.Append(ch);
|
||||
}
|
||||
checked { ++index; }
|
||||
}
|
||||
stringBuilder.Append("\"");
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
|
||||
public JsonObject()
|
||||
{
|
||||
this.pType = JsonObject.JsonType.Nothing;
|
||||
}
|
||||
|
||||
public JsonObject(string str)
|
||||
{
|
||||
this.pType = JsonObject.JsonType.String;
|
||||
this.pString = str;
|
||||
}
|
||||
|
||||
public JsonObject(long number)
|
||||
{
|
||||
this.pType = JsonObject.JsonType.Integer;
|
||||
this.pInteger = number;
|
||||
}
|
||||
|
||||
public JsonObject(double number)
|
||||
{
|
||||
this.pType = JsonObject.JsonType.Double;
|
||||
this.pDouble = number;
|
||||
}
|
||||
|
||||
public JsonObject(bool @bool)
|
||||
{
|
||||
this.pType = JsonObject.JsonType.Boolean;
|
||||
this.pBoolean = @bool;
|
||||
}
|
||||
|
||||
public JsonObject(Dictionary<string, JsonObject> hash)
|
||||
{
|
||||
this.pType = JsonObject.JsonType.Hash;
|
||||
this.pHash = hash;
|
||||
}
|
||||
|
||||
public JsonObject(List<JsonObject> array)
|
||||
{
|
||||
this.pType = JsonObject.JsonType.Array;
|
||||
this.pArray = array;
|
||||
}
|
||||
|
||||
public JsonObject.JsonType Type
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pType;
|
||||
}
|
||||
}
|
||||
|
||||
public string String
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pString;
|
||||
}
|
||||
}
|
||||
|
||||
public long Integer
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pInteger;
|
||||
}
|
||||
}
|
||||
|
||||
public double Double
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pDouble;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Boolean
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pBoolean;
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, JsonObject> Hash
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pHash;
|
||||
}
|
||||
}
|
||||
|
||||
public List<JsonObject> Array
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pArray;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsNothing
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Type == JsonObject.JsonType.Nothing;
|
||||
}
|
||||
}
|
||||
|
||||
public JsonObject this[string name]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.Type != JsonObject.JsonType.Hash)
|
||||
return new JsonObject();
|
||||
if (!this.Hash.ContainsKey(name))
|
||||
return new JsonObject();
|
||||
return this.Hash[name];
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.Type != JsonObject.JsonType.Hash)
|
||||
throw new InvalidOperationException();
|
||||
this.Hash.Add(name, value);
|
||||
}
|
||||
}
|
||||
|
||||
public JsonObject this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.Type != JsonObject.JsonType.Array)
|
||||
return new JsonObject();
|
||||
if (index < 0)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
if (index >= this.Array.Count)
|
||||
return new JsonObject();
|
||||
return this.Array[index];
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.Type != JsonObject.JsonType.Array)
|
||||
throw new InvalidOperationException();
|
||||
if (index < 0)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
if (index > this.Array.Count)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
if (index == this.Array.Count)
|
||||
this.Array.Add(value);
|
||||
else
|
||||
this.Array[index] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime GetAsDateTime()
|
||||
{
|
||||
if (this.Type == JsonObject.JsonType.Nothing)
|
||||
return DateTime.MinValue;
|
||||
return DateTime.Parse(this.String, (IFormatProvider) CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
public long IntegerWithDefault(long @default)
|
||||
{
|
||||
if (this.Type == JsonObject.JsonType.Integer)
|
||||
return this.Integer;
|
||||
return @default;
|
||||
}
|
||||
|
||||
public string StringWithDefault(string @default)
|
||||
{
|
||||
if (this.Type == JsonObject.JsonType.String)
|
||||
return this.String;
|
||||
return @default;
|
||||
}
|
||||
|
||||
public enum JsonType
|
||||
{
|
||||
String,
|
||||
Integer,
|
||||
Double,
|
||||
Boolean,
|
||||
Nothing,
|
||||
Hash,
|
||||
Array,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user