add a low level LLSDxml encoder for cases where it makes no sense to use more heavy things like OSD, and use it on displaynames

This commit is contained in:
UbitUmarov
2018-01-25 06:50:49 +00:00
parent 3aff72e403
commit 266eabcad4
2 changed files with 490 additions and 34 deletions

View File

@@ -1824,52 +1824,51 @@ namespace OpenSim.Region.ClientStack.Linden
Dictionary<UUID,string> names = m_UserManager.GetUsersNames(ids);
OSDMap osdReply = new OSDMap();
OSDArray agents = new OSDArray();
osdReply["agents"] = agents;
foreach (KeyValuePair<UUID,string> kvp in names)
StringBuilder lsl = new StringBuilder(names.Count * 256 + 256);
LLSDxmlEncode.AddStartHeader(lsl);
LLSDxmlEncode.AddStartMap(lsl);
if(names.Count == 0)
LLSDxmlEncode.AddEmpyArray("agents", lsl);
else
{
if (string.IsNullOrEmpty(kvp.Value))
continue;
if(kvp.Key == UUID.Zero)
continue;
LLSDxmlEncode.AddStartArray("agents", lsl);
string[] parts = kvp.Value.Split(new char[] {' '});
OSDMap osdname = new OSDMap();
foreach (KeyValuePair<UUID,string> kvp in names)
{
if (string.IsNullOrEmpty(kvp.Value))
continue;
if(kvp.Key == UUID.Zero)
continue;
string[] parts = kvp.Value.Split(new char[] {' '});
// dont tell about unknown users, we can't send them back on Bad either
if(parts[0] == "Unknown")
continue;
/*
if(parts[0] == "Unknown")
{
osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddHours(1));
osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddHours(2));
}
else
*/
{
osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddDays(8));
osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddMonths(1));
}
osdname["display_name"] = OSD.FromString(kvp.Value);
osdname["legacy_first_name"] = parts[0];
osdname["legacy_last_name"] = parts[1];
osdname["username"] = OSD.FromString(kvp.Value);
osdname["id"] = OSD.FromUUID(kvp.Key);
osdname["is_display_name_default"] = OSD.FromBoolean(true);
if(parts[0] == "Unknown")
continue;
agents.Add(osdname);
LLSDxmlEncode.AddStartMap(lsl);
LLSDxmlEncode.AddElem("display_name_next_update", DateTime.UtcNow.AddDays(8), lsl);
LLSDxmlEncode.AddElem("display_name_expires", DateTime.UtcNow.AddMonths(1), lsl);
LLSDxmlEncode.AddElem("display_name", kvp.Value, lsl);
LLSDxmlEncode.AddElem("legacy_first_name", parts[0], lsl);
LLSDxmlEncode.AddElem("legacy_last_name", parts[1], lsl);
LLSDxmlEncode.AddElem("username", kvp.Value, lsl);
LLSDxmlEncode.AddElem("id", kvp.Key, lsl);
LLSDxmlEncode.AddElem("is_display_name_default", true, lsl);
LLSDxmlEncode.AddEndMap(lsl);
}
LLSDxmlEncode.AddEndArray(lsl);
}
LLSDxmlEncode.AddEndMap(lsl);
LLSDxmlEncode.AddEndHeader(lsl);
// Full content request
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.OK;
//httpResponse.ContentLength = ??;
httpResponse.ContentType = "application/llsd+xml";
string reply = OSDParser.SerializeLLSDXmlString(osdReply);
return reply;
return lsl.ToString();
}
}