fix merge
commit
0259019431
|
@ -572,9 +572,35 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
// EstateBans are special
|
// EstateBans are special
|
||||||
if (map.ContainsKey("EstateBans"))
|
if (map.ContainsKey("EstateBans"))
|
||||||
|
{
|
||||||
|
if(map["EstateBans"] is string)
|
||||||
|
{
|
||||||
|
// JSON encoded bans map
|
||||||
|
Dictionary<string, EstateBan> bdata = new Dictionary<string, EstateBan>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// bypass libovm, we dont need even more useless high level maps
|
||||||
|
// this should only be called once.. but no problem, i hope
|
||||||
|
// (other uses may need more..)
|
||||||
|
LitJson.JsonMapper.RegisterImporter<string, UUID>((input) => new UUID(input));
|
||||||
|
bdata = LitJson.JsonMapper.ToObject<Dictionary<string,EstateBan>>((string)map["EstateBans"]);
|
||||||
|
}
|
||||||
|
// catch(Exception e)
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
EstateBan[] jbans = new EstateBan[bdata.Count];
|
||||||
|
bdata.Values.CopyTo(jbans,0);
|
||||||
|
|
||||||
|
PropertyInfo jbansProperty = this.GetType().GetProperty("EstateBans", BindingFlags.Public | BindingFlags.Instance);
|
||||||
|
jbansProperty.SetValue(this, jbans, null);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
var banData = ((Dictionary<string, object>)map["EstateBans"]).Values;
|
var banData = ((Dictionary<string, object>)map["EstateBans"]).Values;
|
||||||
EstateBan[] bans = new EstateBan[banData.Count];
|
EstateBan[] bans = new EstateBan[banData.Count];
|
||||||
|
|
||||||
int b = 0;
|
int b = 0;
|
||||||
foreach (Dictionary<string, object> ban in banData)
|
foreach (Dictionary<string, object> ban in banData)
|
||||||
bans[b++] = new EstateBan(ban);
|
bans[b++] = new EstateBan(ban);
|
||||||
|
@ -583,4 +609,5 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ using OpenMetaverse;
|
||||||
using Mono.Addins;
|
using Mono.Addins;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
|
using OpenMetaverse.StructuredData; // LitJson is hidden on this
|
||||||
|
|
||||||
[assembly:AddinRoot("Robust", OpenSim.VersionInfo.VersionNumber)]
|
[assembly:AddinRoot("Robust", OpenSim.VersionInfo.VersionNumber)]
|
||||||
namespace OpenSim.Server.Base
|
namespace OpenSim.Server.Base
|
||||||
|
@ -327,49 +327,62 @@ namespace OpenSim.Server.Base
|
||||||
|
|
||||||
public static Dictionary<string, object> ParseQueryString(string query)
|
public static Dictionary<string, object> ParseQueryString(string query)
|
||||||
{
|
{
|
||||||
Dictionary<string, object> result = new Dictionary<string, object>();
|
|
||||||
string[] terms = query.Split(new char[] {'&'});
|
string[] terms = query.Split(new char[] {'&'});
|
||||||
|
|
||||||
if (terms.Length == 0)
|
int nterms = terms.Length;
|
||||||
return result;
|
if (nterms == 0)
|
||||||
|
return new Dictionary<string, object>();
|
||||||
|
|
||||||
foreach (string t in terms)
|
Dictionary<string, object> result = new Dictionary<string, object>(nterms);
|
||||||
|
string name;
|
||||||
|
|
||||||
|
for(int i = 0; i < nterms; ++i)
|
||||||
{
|
{
|
||||||
string[] elems = t.Split(new char[] {'='});
|
string[] elems = terms[i].Split(new char[] {'='});
|
||||||
|
|
||||||
if (elems.Length == 0)
|
if (elems.Length == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
string name = System.Web.HttpUtility.UrlDecode(elems[0]);
|
if(String.IsNullOrWhiteSpace(elems[0]))
|
||||||
string value = String.Empty;
|
continue;
|
||||||
|
|
||||||
if (elems.Length > 1)
|
name = System.Web.HttpUtility.UrlDecode(elems[0]);
|
||||||
value = System.Web.HttpUtility.UrlDecode(elems[1]);
|
|
||||||
|
|
||||||
if (name.EndsWith("[]"))
|
if (name.EndsWith("[]"))
|
||||||
{
|
{
|
||||||
string cleanName = name.Substring(0, name.Length - 2);
|
name = name.Substring(0, name.Length - 2);
|
||||||
if (result.ContainsKey(cleanName))
|
if(String.IsNullOrWhiteSpace(name))
|
||||||
|
continue;
|
||||||
|
if (result.ContainsKey(name))
|
||||||
{
|
{
|
||||||
if (!(result[cleanName] is List<string>))
|
if (!(result[name] is List<string>))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
List<string> l = (List<string>)result[cleanName];
|
List<string> l = (List<string>)result[name];
|
||||||
|
if (elems.Length > 1 && !String.IsNullOrWhiteSpace(elems[1]))
|
||||||
l.Add(value);
|
l.Add(System.Web.HttpUtility.UrlDecode(elems[1]));
|
||||||
|
else
|
||||||
|
l.Add(String.Empty);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<string> newList = new List<string>();
|
List<string> newList = new List<string>();
|
||||||
|
if (elems.Length > 1 && !String.IsNullOrWhiteSpace(elems[1]))
|
||||||
newList.Add(value);
|
newList.Add(System.Web.HttpUtility.UrlDecode(elems[1]));
|
||||||
|
else
|
||||||
result[cleanName] = newList;
|
newList.Add(String.Empty);
|
||||||
|
result[name] = newList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!result.ContainsKey(name))
|
if (!result.ContainsKey(name))
|
||||||
result[name] = value;
|
{
|
||||||
|
if (elems.Length > 1 && !String.IsNullOrWhiteSpace(elems[1]))
|
||||||
|
result[name] = System.Web.HttpUtility.UrlDecode(elems[1]);
|
||||||
|
else
|
||||||
|
result[name] = String.Empty;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,47 +391,70 @@ namespace OpenSim.Server.Base
|
||||||
|
|
||||||
public static string BuildQueryString(Dictionary<string, object> data)
|
public static string BuildQueryString(Dictionary<string, object> data)
|
||||||
{
|
{
|
||||||
string qstring = String.Empty;
|
// this is not conform to html url encoding
|
||||||
|
// can only be used on Body of POST or PUT
|
||||||
|
StringBuilder sb = new StringBuilder(4096);
|
||||||
|
|
||||||
string part;
|
string pvalue;
|
||||||
|
|
||||||
foreach (KeyValuePair<string, object> kvp in data)
|
foreach (KeyValuePair<string, object> kvp in data)
|
||||||
{
|
{
|
||||||
if (kvp.Value is List<string>)
|
if (kvp.Value is List<string>)
|
||||||
{
|
{
|
||||||
List<string> l = (List<String>)kvp.Value;
|
List<string> l = (List<String>)kvp.Value;
|
||||||
|
int llen = l.Count;
|
||||||
foreach (string s in l)
|
string nkey = System.Web.HttpUtility.UrlEncode(kvp.Key);
|
||||||
|
for(int i = 0; i < llen; ++i)
|
||||||
{
|
{
|
||||||
part = System.Web.HttpUtility.UrlEncode(kvp.Key) +
|
if (sb.Length != 0)
|
||||||
"[]=" + System.Web.HttpUtility.UrlEncode(s);
|
sb.Append("&");
|
||||||
|
sb.Append(nkey);
|
||||||
if (qstring != String.Empty)
|
sb.Append("[]=");
|
||||||
qstring += "&";
|
sb.Append(System.Web.HttpUtility.UrlEncode(l[i]));
|
||||||
|
|
||||||
qstring += part;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(kvp.Value is Dictionary<string, object>)
|
||||||
|
{
|
||||||
|
// encode complex structures as JSON
|
||||||
|
// needed for estate bans with the encoding used on xml
|
||||||
|
// encode can be here because object does contain the structure information
|
||||||
|
// but decode needs to be on estateSettings (or other user)
|
||||||
|
string js;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// bypass libovm, we dont need even more useless high level maps
|
||||||
|
// this should only be called once.. but no problem, i hope
|
||||||
|
// (other uses may need more..)
|
||||||
|
LitJson.JsonMapper.RegisterExporter<UUID>((uuid, writer) => writer.Write(uuid.ToString()) );
|
||||||
|
js = LitJson.JsonMapper.ToJson(kvp.Value);
|
||||||
|
}
|
||||||
|
// catch(Exception e)
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (sb.Length != 0)
|
||||||
|
sb.Append("&");
|
||||||
|
sb.Append(System.Web.HttpUtility.UrlEncode(kvp.Key));
|
||||||
|
sb.Append("=");
|
||||||
|
sb.Append(System.Web.HttpUtility.UrlEncode(js));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (kvp.Value.ToString() != String.Empty)
|
if (sb.Length != 0)
|
||||||
|
sb.Append("&");
|
||||||
|
sb.Append(System.Web.HttpUtility.UrlEncode(kvp.Key));
|
||||||
|
|
||||||
|
pvalue = kvp.Value.ToString();
|
||||||
|
if (!String.IsNullOrEmpty(pvalue))
|
||||||
{
|
{
|
||||||
part = System.Web.HttpUtility.UrlEncode(kvp.Key) +
|
sb.Append("=");
|
||||||
"=" + System.Web.HttpUtility.UrlEncode(kvp.Value.ToString());
|
sb.Append(System.Web.HttpUtility.UrlEncode(pvalue));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
part = System.Web.HttpUtility.UrlEncode(kvp.Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qstring != String.Empty)
|
|
||||||
qstring += "&";
|
|
||||||
|
|
||||||
qstring += part;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return qstring;
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string BuildXmlResponse(Dictionary<string, object> data)
|
public static string BuildXmlResponse(Dictionary<string, object> data)
|
||||||
|
|
34
prebuild.xml
34
prebuild.xml
|
@ -1163,6 +1163,38 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
<Project frameworkVersion="v4_5" name="OpenSim.Services.MuteListService" path="OpenSim/Services/MuteListService" type="Library">
|
||||||
|
<Configuration name="Debug">
|
||||||
|
<Options>
|
||||||
|
<OutputPath>../../../bin/</OutputPath>
|
||||||
|
</Options>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration name="Release">
|
||||||
|
<Options>
|
||||||
|
<OutputPath>../../../bin/</OutputPath>
|
||||||
|
</Options>
|
||||||
|
</Configuration>
|
||||||
|
|
||||||
|
<ReferencePath>../../../bin/</ReferencePath>
|
||||||
|
<Reference name="System"/>
|
||||||
|
<Reference name="System.Core"/>
|
||||||
|
<Reference name="OpenSim.Framework"/>
|
||||||
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
<Reference name="OpenSim.Services.Interfaces"/>
|
||||||
|
<Reference name="OpenSim.Services.Connectors"/>
|
||||||
|
<Reference name="OpenSim.Services.Base"/>
|
||||||
|
<Reference name="OpenSim.Data"/>
|
||||||
|
<Reference name="OpenMetaverseTypes" path="../../../bin/"/>
|
||||||
|
<Reference name="OpenMetaverse" path="../../../bin/"/>
|
||||||
|
<Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
|
||||||
|
<Reference name="Nini" path="../../../bin/"/>
|
||||||
|
<Reference name="log4net" path="../../../bin/"/>
|
||||||
|
|
||||||
|
<Files>
|
||||||
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
|
</Files>
|
||||||
|
</Project>
|
||||||
|
|
||||||
<Project frameworkVersion="v4_5" name="OpenSim.Server.Handlers" path="OpenSim/Server/Handlers" type="Library">
|
<Project frameworkVersion="v4_5" name="OpenSim.Server.Handlers" path="OpenSim/Server/Handlers" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
@ -1487,7 +1519,7 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
<Project frameworkVersion="v4_0" name="OpenSim.Data.SQLite" path="OpenSim/Data/SQLite" type="Library">
|
<Project frameworkVersion="v4_5" name="OpenSim.Data.SQLite" path="OpenSim/Data/SQLite" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
<OutputPath>../../../bin/</OutputPath>
|
<OutputPath>../../../bin/</OutputPath>
|
||||||
|
|
Loading…
Reference in New Issue