public void ToXmlRpc(XmlWriter writer)
{
writer.WriteStartElement("methodResponse");
{
writer.WriteStartElement("params");
writer.WriteStartElement("param");
writer.WriteStartElement("value");
writer.WriteStartElement("struct");
{
if (Success)
{
// session_id
WriteXmlRpcStringMember(writer, false, "session_id", SessionID.ToString());
// ui-config
WriteXmlRpcArrayStart(writer, "ui-config");
WriteXmlRpcStringMember(writer, true, "allow_first_life", "Y");
WriteXmlRpcArrayEnd(writer);
// inventory-lib-owner
WriteXmlRpcArrayStart(writer, "inventory-lib-owner");
WriteXmlRpcStringMember(writer, true, "agent_id", LibraryOwner.ToString());
WriteXmlRpcArrayEnd(writer);
// start_location
WriteXmlRpcStringMember(writer, false, "start_location", StartLocation);
// seconds_since_epoch
WriteXmlRpcIntMember(writer, false, "seconds_since_epoch", Utils.DateTimeToUnixTime(SecondsSinceEpoch));
// event_categories (TODO)
WriteXmlRpcArrayStart(writer, "event_categories");
WriteXmlRpcCategory(writer, "Default Event Category", 20);
WriteXmlRpcArrayEnd(writer);
// tutorial_setting (TODO)
WriteXmlRpcArrayStart(writer, "tutorial_setting");
WriteXmlRpcTutorialSetting(writer, "http://127.0.0.1/tutorial/");
WriteXmlRpcArrayEnd(writer);
// classified_categories (TODO)
WriteXmlRpcArrayStart(writer, "classified_categories");
WriteXmlRpcCategory(writer, "Default Classified Category", 1);
WriteXmlRpcArrayEnd(writer);
// inventory-root
WriteXmlRpcArrayStart(writer, "inventory-root");
WriteXmlRpcStringMember(writer, true, "folder_id", InventoryRoot.ToString());
WriteXmlRpcArrayEnd(writer);
// sim_port
WriteXmlRpcIntMember(writer, false, "sim_port", SimPort);
// agent_id
WriteXmlRpcStringMember(writer, false, "agent_id", AgentID.ToString());
// agent_access
WriteXmlRpcStringMember(writer, false, "agent_access", AgentAccess);
// inventory-skeleton
WriteXmlRpcArrayStart(writer, "inventory-skeleton");
if (InventorySkeleton != null)
{
foreach (InventoryFolder folder in InventorySkeleton)
WriteXmlRpcInventoryItem(writer, folder.Name, folder.ParentUUID, (uint)folder.Version, (uint)folder.PreferredType, folder.UUID);
}
else
{
WriteXmlRpcInventoryItem(writer, "Inventory", UUID.Zero, 1, (uint)AssetType.Folder, InventoryRoot);
}
WriteXmlRpcArrayEnd(writer);
// buddy-list
WriteXmlRpcArrayStart(writer, "buddy-list");
if (BuddyList != null)
{
foreach (FriendInfo friend in BuddyList)
WriteXmlRpcBuddy(writer, (uint)friend.MyFriendRights, (uint)friend.TheirFriendRights, friend.UUID);
}
else
{
//WriteXmlRpcBuddy(writer, 0, 0, UUID.Random());
}
WriteXmlRpcArrayEnd(writer);
// first_name
WriteXmlRpcStringMember(writer, false, "first_name", FirstName);
// global-textures
WriteXmlRpcArrayStart(writer, "global-textures");
writer.WriteStartElement("value");
writer.WriteStartElement("struct");
{
WriteXmlRpcStringMember(writer, false, "sun_texture_id", "cce0f112-878f-4586-a2e2-a8f104bba271");
WriteXmlRpcStringMember(writer, false, "cloud_texture_id", "fc4b9f0b-d008-45c6-96a4-01dd947ac621");
WriteXmlRpcStringMember(writer, false, "moon_texture_id", "d07f6eed-b96a-47cd-b51d-400ad4a1c428");
}
writer.WriteEndElement();
writer.WriteEndElement();
WriteXmlRpcArrayEnd(writer);
// inventory-skel-lib
WriteXmlRpcArrayStart(writer, "inventory-skel-lib");
if (LibrarySkeleton != null)
{
foreach (InventoryFolder folder in LibrarySkeleton)
WriteXmlRpcInventoryItem(writer, folder.Name, folder.ParentUUID, (uint)folder.Version, (uint)folder.PreferredType, folder.UUID);
}
else
{
WriteXmlRpcInventoryItem(writer, "Library", UUID.Zero, 1, (uint)AssetType.Folder, LibraryRoot);
}
WriteXmlRpcArrayEnd(writer);
// seed_capability
WriteXmlRpcStringMember(writer, false, "seed_capability", SeedCapability);
// gestures
WriteXmlRpcArrayStart(writer, "gestures");
WriteXmlRpcGesture(writer, UUID.Random(), UUID.Random());
WriteXmlRpcArrayEnd(writer);
// sim_ip
WriteXmlRpcStringMember(writer, false, "sim_ip", SimIP.ToString());
// inventory-lib-root
WriteXmlRpcArrayStart(writer, "inventory-lib-root");
WriteXmlRpcStringMember(writer, true, "folder_id", LibraryRoot.ToString());
WriteXmlRpcArrayEnd(writer);
// login-flags
WriteXmlRpcArrayStart(writer, "login-flags");
writer.WriteStartElement("value");
writer.WriteStartElement("struct");
{
WriteXmlRpcStringMember(writer, false, "gendered", "Y");
WriteXmlRpcStringMember(writer, false, "stipend_since_login", "N");
WriteXmlRpcStringMember(writer, false, "ever_logged_in", "Y");
if (DateTime.Now.IsDaylightSavingTime())
WriteXmlRpcStringMember(writer, false, "daylight_savings", "Y");
else
WriteXmlRpcStringMember(writer, false, "daylight_savings", "N");
}
writer.WriteEndElement();
writer.WriteEndElement();
WriteXmlRpcArrayEnd(writer);
// inventory_host
WriteXmlRpcStringMember(writer, false, "inventory_host", IPAddress.Loopback.ToString());
// home
OSDArray homeRegionHandle = new OSDArray(2);
uint homeRegionX, homeRegionY;
Utils.LongToUInts(HomeRegion, out homeRegionX, out homeRegionY);
homeRegionHandle.Add(OSD.FromReal((double)homeRegionX));
homeRegionHandle.Add(OSD.FromReal((double)homeRegionY));
OSDMap home = new OSDMap(3);
home["region_handle"] = homeRegionHandle;
home["position"] = OSD.FromVector3(HomePosition);
home["look_at"] = OSD.FromVector3(HomeLookAt);
WriteXmlRpcStringMember(writer, false, "home", OSDParser.SerializeLLSDNotation(home));
// message
WriteXmlRpcStringMember(writer, false, "message", Message);
// look_at
WriteXmlRpcStringMember(writer, false, "look_at", OSDParser.SerializeLLSDNotation(OSD.FromVector3(LookAt)));
// login
WriteXmlRpcStringMember(writer, false, "login", "true");
// event_notifications
WriteXmlRpcArrayStart(writer, "event_notifications");
WriteXmlRpcArrayEnd(writer);
// secure_session_id
WriteXmlRpcStringMember(writer, false, "secure_session_id", SecureSessionID.ToString());
// region_x
WriteXmlRpcIntMember(writer, false, "region_x", RegionX);
// last_name
WriteXmlRpcStringMember(writer, false, "last_name", LastName);
// region_y
WriteXmlRpcIntMember(writer, false, "region_y", RegionY);
// circuit_code
WriteXmlRpcIntMember(writer, false, "circuit_code", CircuitCode);
// initial-outfit
WriteXmlRpcArrayStart(writer, "initial-outfit");
WriteXmlRpcArrayEnd(writer);
}
else
{
// Login failure
}
}
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Close();
}