From f19816aeb91a5d31cb07fc7fb0f4419e2aad90be Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 29 Oct 2010 21:38:26 +0100
Subject: Add number of ms it takes to complete UseCircuitCode packet handling
to log for diagnostics
---
OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index cb298fd..161e8c2 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -615,8 +615,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// UseCircuitCode handling
if (packet.Type == PacketType.UseCircuitCode)
- {
- m_log.Debug("[LLUDPSERVER]: Handling UseCircuitCode packet from " + buffer.RemoteEndPoint);
+ {
object[] array = new object[] { buffer, packet };
if (m_asyncPacketHandling)
@@ -827,9 +826,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private void HandleUseCircuitCode(object o)
{
+ DateTime startTime = DateTime.Now;
object[] array = (object[])o;
UDPPacketBuffer buffer = (UDPPacketBuffer)array[0];
UseCircuitCodePacket packet = (UseCircuitCodePacket)array[1];
+
+ m_log.DebugFormat("[LLUDPSERVER]: Handling UseCircuitCode request from {0}", buffer.RemoteEndPoint);
IPEndPoint remoteEndPoint = (IPEndPoint)buffer.RemoteEndPoint;
@@ -838,6 +840,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Acknowledge the UseCircuitCode packet
SendAckImmediate(remoteEndPoint, packet.Header.Sequence);
+
+ m_log.DebugFormat(
+ "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
+ buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
}
private void SendAckImmediate(IPEndPoint remoteEndpoint, uint sequenceNumber)
--
cgit v1.1
From bcd784b3167d3be18ad803e89ae0e4afa74da068 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 29 Oct 2010 21:49:26 +0100
Subject: for now, comment out some older or redundant log debug lines to make
diagnostics easier
---
.../CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs | 4 ++--
.../CoreModules/ServiceConnectorsOut/Presence/PresenceDetector.cs | 4 ++--
OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | 2 +-
OpenSim/Services/PresenceService/PresenceService.cs | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
index a64f785..6543845 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
@@ -65,7 +65,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
public void OnMakeRootAgent(ScenePresence sp)
{
- m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
+// m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
m_GridUserService.SetLastPosition(sp.UUID.ToString(), UUID.Zero, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/PresenceDetector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/PresenceDetector.cs
index 62b8278..fa5b873 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/PresenceDetector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/PresenceDetector.cs
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
@@ -71,7 +71,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence
public void OnMakeRootAgent(ScenePresence sp)
{
- m_log.DebugFormat("[PRESENCE DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
+// m_log.DebugFormat("[PRESENCE DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
m_PresenceService.ReportAgent(sp.ControllingClient.SessionId, sp.Scene.RegionInfo.RegionID);
}
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index a182eea..3e478b0 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -324,7 +324,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
if (threadrunning) return;
threadrunning = true;
- m_log.Debug("[WORLD MAP]: Starting remote MapItem request thread");
+// m_log.Debug("[WORLD MAP]: Starting remote MapItem request thread");
Watchdog.StartThread(process, "MapItemRequestThread", ThreadPriority.BelowNormal, true);
}
diff --git a/OpenSim/Services/PresenceService/PresenceService.cs b/OpenSim/Services/PresenceService/PresenceService.cs
index 976153f..09c31c3 100644
--- a/OpenSim/Services/PresenceService/PresenceService.cs
+++ b/OpenSim/Services/PresenceService/PresenceService.cs
@@ -88,7 +88,7 @@ namespace OpenSim.Services.PresenceService
public bool ReportAgent(UUID sessionID, UUID regionID)
{
- m_log.DebugFormat("[PRESENCE SERVICE]: ReportAgent with session {0} in region {1}", sessionID, regionID);
+// m_log.DebugFormat("[PRESENCE SERVICE]: ReportAgent with session {0} in region {1}", sessionID, regionID);
try
{
PresenceData pdata = m_Database.Get(sessionID);
--
cgit v1.1
From 25e19ba7e9ff4a080728178babe4fb1ef33b8d5d Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 29 Oct 2010 23:03:11 +0100
Subject: add timing report to CompleteScenePresence for diagnostic purposes
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 13d9964..03aa8cf 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1085,7 +1085,11 @@ namespace OpenSim.Region.Framework.Scenes
///
public void CompleteMovement(IClientAPI client)
{
- //m_log.Debug("[SCENE PRESENCE]: CompleteMovement");
+ DateTime startTime = DateTime.Now;
+
+ m_log.DebugFormat(
+ "[SCENE PRESENCE]: Completing movement of {0} into region {1}",
+ client.Name, Scene.RegionInfo.RegionName);
Vector3 look = Velocity;
if ((look.X == 0) && (look.Y == 0) && (look.Z == 0))
@@ -1134,6 +1138,9 @@ namespace OpenSim.Region.Framework.Scenes
friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
}
+ m_log.DebugFormat(
+ "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms",
+ client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds);
}
///
--
cgit v1.1
From e66ec432afccb90ae400041e2428b26ad108d373 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 29 Oct 2010 23:45:10 +0100
Subject: Rationalize the logging messages from the merged appearance branch,
commenting out most of them as per Mic
---
OpenSim/Framework/AvatarAppearance.cs | 35 +++++++---------
OpenSim/Framework/Capabilities/Caps.cs | 4 +-
.../Avatar/AvatarFactory/AvatarFactoryModule.cs | 47 +++++++++-------------
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 10 ++---
4 files changed, 39 insertions(+), 57 deletions(-)
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index a4bb765..9494410 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -329,9 +329,8 @@ namespace OpenSim.Framework
public AvatarAppearance(UUID owner)
{
-// DEBUG ON
- m_log.WarnFormat("[AVATAR APPEARANCE] create empty appearance for {0}",owner);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR APPEARANCE]: create empty appearance for {0}",owner);
+
m_serial = 1;
m_owner = owner;
@@ -345,9 +344,8 @@ namespace OpenSim.Framework
public AvatarAppearance(UUID avatarID, OSDMap map)
{
-// DEBUG ON
- m_log.WarnFormat("[AVATAR APPEARANCE] create appearance for {0} from OSDMap",avatarID);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR APPEARANCE]: create appearance for {0} from OSDMap",avatarID);
+
m_owner = avatarID;
Unpack(map);
SetHeight();
@@ -355,9 +353,8 @@ namespace OpenSim.Framework
public AvatarAppearance(UUID avatarID, AvatarWearable[] wearables, Primitive.TextureEntry textureEntry, byte[] visualParams)
{
-// DEBUG ON
- m_log.WarnFormat("[AVATAR APPEARANCE] create initialized appearance for {0}",avatarID);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR APPEARANCE] create initialized appearance for {0}",avatarID);
+
m_serial = 1;
m_owner = avatarID;
@@ -383,9 +380,8 @@ namespace OpenSim.Framework
public AvatarAppearance(AvatarAppearance appearance)
{
-// DEBUG ON
- m_log.WarnFormat("[AVATAR APPEARANCE] create from an existing appearance");
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR APPEARANCE] create from an existing appearance");
+
if (appearance == null)
{
m_serial = 1;
@@ -479,10 +475,9 @@ namespace OpenSim.Framework
}
changed = true;
-// DEBUG ON
- if (newface != null)
- m_log.WarnFormat("[AVATAR APPEARANCE] index {0}, new texture id {1}",i,newface.TextureID);
-// DEBUG OFF
+
+// if (newface != null)
+// m_log.WarnFormat("[AVATAR APPEARANCE]: index {0}, new texture id {1}",i,newface.TextureID);
}
m_texture = textureEntry;
@@ -742,7 +737,7 @@ namespace OpenSim.Framework
}
else
{
- m_log.Warn("[AVATARAPPEARANCE] failed to unpack wearables");
+ m_log.Warn("[AVATAR APPEARANCE]: failed to unpack wearables");
}
// Avatar Textures
@@ -760,7 +755,7 @@ namespace OpenSim.Framework
}
else
{
- m_log.Warn("[AVATARAPPEARANCE] failed to unpack textures");
+ m_log.Warn("[AVATAR APPEARANCE]: failed to unpack textures");
}
// Visual Parameters
@@ -772,7 +767,7 @@ namespace OpenSim.Framework
}
else
{
- m_log.Warn("[AVATARAPPEARANCE] failed to unpack visual parameters");
+ m_log.Warn("[AVATAR APPEARANCE]: failed to unpack visual parameters");
}
// Attachments
@@ -786,7 +781,7 @@ namespace OpenSim.Framework
}
catch (Exception e)
{
- m_log.ErrorFormat("[AVATARAPPEARANCE] unpack failed badly: {0}",e.Message);
+ m_log.ErrorFormat("[AVATAR APPEARANCE]: unpack failed badly: {0}{1}", e.Message, e.StackTrace);
}
}
diff --git a/OpenSim/Framework/Capabilities/Caps.cs b/OpenSim/Framework/Capabilities/Caps.cs
index 872de9a..7b0e053 100644
--- a/OpenSim/Framework/Capabilities/Caps.cs
+++ b/OpenSim/Framework/Capabilities/Caps.cs
@@ -988,9 +988,7 @@ namespace OpenSim.Framework.Capabilities
public void BakedTextureUploaded(UUID assetID, byte[] data)
{
-// DEBUG ON
- m_log.WarnFormat("[CAPS]: Received baked texture {0}", assetID.ToString());
-// DEBUG OFF
+// m_log.WarnFormat("[CAPS]: Received baked texture {0}", assetID.ToString());
AssetBase asset;
asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_agentID.ToString());
asset.Data = data;
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index bfbbcf8..e2755c8 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -117,7 +117,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
if (sp == null)
{
- m_log.WarnFormat("[AVFACTORY] SetAppearance unable to find presence for {0}",client.AgentId);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: SetAppearance unable to find presence for {0}", client.AgentId);
return false;
}
@@ -147,14 +147,12 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
///
public void SetAppearance(IClientAPI client, Primitive.TextureEntry textureEntry, byte[] visualParams)
{
-// DEBUG ON
- m_log.WarnFormat("[AVFACTORY] SetAppearance for {0}",client.AgentId);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR FACTORY MODULE]: SetAppearance for {0}",client.AgentId);
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
if (sp == null)
{
- m_log.WarnFormat("[AVFACTORY] SetAppearance unable to find presence for {0}",client.AgentId);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: SetAppearance unable to find presence for {0}",client.AgentId);
return;
}
@@ -212,8 +210,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
{
if (m_scene.AssetService.Get(textureID.ToString()) == null)
{
- m_log.WarnFormat("[AVFACTORY]: Missing baked texture {0} ({1}) for avatar {2}",
- textureID,idx,client.Name);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: Missing baked texture {0} ({1}) for avatar {2}",
+ textureID, idx, client.Name);
return false;
}
return true;
@@ -223,9 +221,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
public void QueueAppearanceSend(UUID agentid)
{
-// DEBUG ON
- m_log.WarnFormat("[AVFACTORY] Queue appearance send for {0}",agentid);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Queue appearance send for {0}",agentid);
// 100 nanoseconds (ticks) we should wait
long timestamp = DateTime.Now.Ticks + Convert.ToInt64(m_sendtime * 10000000);
@@ -238,9 +234,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
public void QueueAppearanceSave(UUID agentid)
{
-// DEBUG ON
- m_log.WarnFormat("[AVFACTORY] Queue appearance save for {0}",agentid);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Queue appearance save for {0}",agentid);
// 100 nanoseconds (ticks) we should wait
long timestamp = DateTime.Now.Ticks + Convert.ToInt64(m_savetime * 10000000);
@@ -256,13 +250,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
ScenePresence sp = m_scene.GetScenePresence(agentid);
if (sp == null)
{
- m_log.WarnFormat("[AVFACTORY] Agent {0} no longer in the scene",agentid);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: Agent {0} no longer in the scene", agentid);
return;
}
-// DEBUG ON
- m_log.WarnFormat("[AVFACTORY] Handle appearance send for {0}",agentid);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Handle appearance send for {0}", agentid);
// Send the appearance to everyone in the scene
sp.SendAppearanceToAllOtherAgents();
@@ -288,7 +280,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
ScenePresence sp = m_scene.GetScenePresence(agentid);
if (sp == null)
{
- m_log.WarnFormat("[AVFACTORY] Agent {0} no longer in the scene",agentid);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: Agent {0} no longer in the scene", agentid);
return;
}
@@ -339,13 +331,12 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
if (sp == null)
{
- m_log.WarnFormat("[AVFACTORY] SendWearables unable to find presence for {0}",client.AgentId);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: SendWearables unable to find presence for {0}", client.AgentId);
return;
}
-
-// DEBUG ON
- m_log.WarnFormat("[AVFACTORY]: Received request for wearables of {0}", client.AgentId);
-// DEBUG OFF
+
+// m_log.WarnFormat("[AVATAR FACTORY MODULE]: Received request for wearables of {0}", client.AgentId);
+
client.SendWearables(sp.Appearance.Wearables,sp.Appearance.Serial++);
}
@@ -359,13 +350,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
if (sp == null)
{
- m_log.WarnFormat("[AVFACTORY] AvatarIsWearing unable to find presence for {0}",client.AgentId);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: AvatarIsWearing unable to find presence for {0}", client.AgentId);
return;
}
-// DEBUG ON
- m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}",client.AgentId);
-// DEBUG OFF
+// m_log.WarnFormat("[AVATAR FACTORY MODULE]: AvatarIsWearing called for {0}",client.AgentId);
AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance);
@@ -409,7 +398,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
else
{
m_log.ErrorFormat(
- "[AVFACTORY]: Can't find inventory item {0} for {1}, setting to default",
+ "[AVATAR FACTORY MODULE]: Can't find inventory item {0} for {1}, setting to default",
appearance.Wearables[i].ItemID, (WearableType)i);
appearance.Wearables[i].ItemID = UUID.Zero;
@@ -420,7 +409,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
}
else
{
- m_log.WarnFormat("[AVFACTORY]: user {0} has no inventory, appearance isn't going to work", userID);
+ m_log.WarnFormat("[AVATAR FACTORY MODULE]: user {0} has no inventory, appearance isn't going to work", userID);
}
}
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 1fc3ed6..29cf0e5 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2393,13 +2393,13 @@ namespace OpenSim.Region.Framework.Scenes
if (LocalId == remoteAvatar.LocalId)
{
- m_log.WarnFormat("[SP] An agent is attempting to send data to itself; {0}",UUID);
+ m_log.WarnFormat("[SCENEPRESENCE]: An agent is attempting to send data to itself; {0}", UUID);
return;
}
if (IsChildAgent)
{
- m_log.WarnFormat("[SCENEPRESENCE] A child agent is attempting to send out avatar data");
+ m_log.WarnFormat("[SCENEPRESENCE]: A child agent is attempting to send out avatar data; {0}", UUID);
return;
}
@@ -2482,14 +2482,14 @@ namespace OpenSim.Region.Framework.Scenes
{
if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient))
{
- m_log.WarnFormat("[SP] baked textures are in the ache for {0}",Name);
+// m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name);
m_controllingClient.SendAppearance(
m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes());
}
}
else
{
- m_log.WarnFormat("[SP] AvatarFactory not set");
+ m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name);
}
SendInitialFullUpdateToAllClients();
@@ -2501,7 +2501,7 @@ namespace OpenSim.Region.Framework.Scenes
public void SendAppearanceToAllOtherAgents()
{
// DEBUG ON
- m_log.WarnFormat("[SP] Send appearance from {0} to all other agents",m_uuid);
+// m_log.WarnFormat("[SCENEPRESENCE]: Send appearance from {0} to all other agents", m_uuid);
// DEBUG OFF
m_perfMonMS = Util.EnvironmentTickCount();
--
cgit v1.1
From 09705514ff7068f1c1b32a979cde1ae3654d9065 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 29 Oct 2010 23:52:25 +0100
Subject: tweak a few more scene presence logging messages for consistency
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 29cf0e5..52e7462 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2384,7 +2384,7 @@ namespace OpenSim.Region.Framework.Scenes
if (remoteAvatar == null)
return;
- IClientAPI cl=remoteAvatar.ControllingClient;
+ IClientAPI cl = remoteAvatar.ControllingClient;
if (cl == null)
return;
@@ -2393,7 +2393,7 @@ namespace OpenSim.Region.Framework.Scenes
if (LocalId == remoteAvatar.LocalId)
{
- m_log.WarnFormat("[SCENEPRESENCE]: An agent is attempting to send data to itself; {0}", UUID);
+ m_log.WarnFormat("[SCENEPRESENCE]: An agent is attempting to send avatar data to itself; {0}", UUID);
return;
}
@@ -2524,7 +2524,7 @@ namespace OpenSim.Region.Framework.Scenes
{
if (LocalId == avatar.LocalId)
{
- m_log.WarnFormat("[SP] An agent is attempting to send data to itself; {0}",UUID);
+ m_log.WarnFormat("[SCENE PRESENCE]: An agent is attempting to send appearance data to itself; {0}", UUID);
return;
}
--
cgit v1.1
From 818ed2032aa4e6c0a9ede3598d64f0c7960135c4 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sat, 30 Oct 2010 00:41:36 +0100
Subject: READ CAREFULLY!!! This is a BROKEN commit. It is UNTESTED and
INCOMPLETE. It contains a major interface version bump and will NOT work with
earlier grid services. This is preliminary work that will lead to layers
support. Rest appearance services are commented out completely, they will
have to be adapted by someone who actually uses them. Remote admin is
working, but has no layers support. There is no layers support in the
database. Login likely won't work. You have been warned.
---
.../RemoteController/RemoteAdminPlugin.cs | 18 +-
.../Rest/Inventory/RestAppearanceServices.cs | 5 +-
OpenSim/Framework/AgentCircuitData.cs | 51 -----
OpenSim/Framework/AvatarAppearance.cs | 241 +--------------------
OpenSim/Framework/AvatarWearable.cs | 157 +++++++++++---
OpenSim/Framework/ChildAgentDataUpdate.cs | 10 +-
OpenSim/Framework/Servers/VersionInfo.cs | 2 +-
.../Region/ClientStack/LindenUDP/LLClientView.cs | 21 +-
.../Avatar/AvatarFactory/AvatarFactoryModule.cs | 15 +-
.../SimianGrid/SimianAvatarServiceConnector.cs | 53 ++---
OpenSim/Services/Interfaces/IAvatarService.cs | 132 ++++++-----
11 files changed, 282 insertions(+), 423 deletions(-)
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 1829c8d..72ac303 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -1510,11 +1510,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
for (int i=0; i 0))
- {
- OSDArray wears = new OSDArray(Appearance.Wearables.Length * 2);
- foreach (AvatarWearable awear in Appearance.Wearables)
- {
- wears.Add(OSD.FromUUID(awear.ItemID));
- wears.Add(OSD.FromUUID(awear.AssetID));
- //System.Console.WriteLine("XXX ItemID=" + awear.ItemID + " assetID=" + awear.AssetID);
- }
- args["wearables"] = wears;
- }
-
- //System.Console.WriteLine("XXX Before packing Attachments");
- List attachments = Appearance.GetAttachments();
- if ((attachments != null) && (attachments.Count > 0))
- {
- OSDArray attachs = new OSDArray(attachments.Count);
- foreach (AvatarAttachment attach in attachments)
- {
- attachs.Add(attach.Pack());
- //System.Console.WriteLine("XXX att.pt=" + kvp.Key + "; itemID=" + kvp.Value[0] + "; assetID=" + kvp.Value[1]);
- }
- args["attachments"] = attachs;
- }
- }
-
- if (Appearance != null)
- {
OSDMap appmap = Appearance.Pack();
args["packed_appearance"] = appmap;
}
@@ -346,28 +317,6 @@ namespace OpenSim.Framework
if (args["appearance_serial"] != null)
Appearance.Serial = args["appearance_serial"].AsInteger();
- if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
- {
- OSDArray wears = (OSDArray)(args["wearables"]);
- for (int i = 0; i < wears.Count / 2; i++)
- {
- AvatarWearable awear = new AvatarWearable(wears[i*2].AsUUID(),wears[(i*2)+1].AsUUID());
- Appearance.SetWearable(i,awear);
- }
- }
-
- if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
- {
- OSDArray attachs = (OSDArray)(args["attachments"]);
- foreach (OSD o in attachs)
- {
- if (o.Type == OSDType.Map)
- {
- Appearance.AppendAttachment(new AvatarAttachment((OSDMap)o));
- }
- }
- }
-
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map))
{
Appearance.Unpack((OSDMap)args["packed_appearance"]);
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index a4bb765..f378e96 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -35,104 +35,6 @@ using log4net;
namespace OpenSim.Framework
{
- // A special dictionary for avatar appearance
- public struct LayerItem
- {
- public UUID ItemID;
- public UUID AssetID;
-
- public LayerItem(UUID itemID, UUID assetID)
- {
- ItemID = itemID;
- AssetID = assetID;
- }
- }
-
- public class Layer
- {
- protected int m_layerType;
- protected Dictionary m_items = new Dictionary();
- protected List m_ids = new List();
-
- public Layer(int type)
- {
- m_layerType = type;
- }
-
- public int LayerType
- {
- get { return m_layerType; }
- }
-
- public int Count
- {
- get { return m_ids.Count; }
- }
-
- public void Add(UUID itemID, UUID assetID)
- {
- if (m_items.ContainsKey(itemID))
- return;
- if (m_ids.Count >= 5)
- return;
-
- m_ids.Add(itemID);
- m_items[itemID] = assetID;
- }
-
- public void Wear(UUID itemID, UUID assetID)
- {
- Clear();
- Add(itemID, assetID);
- }
-
- public void Clear()
- {
- m_ids.Clear();
- m_items.Clear();
- }
-
- public void RemoveItem(UUID itemID)
- {
- if (m_items.ContainsKey(itemID))
- {
- m_ids.Remove(itemID);
- m_items.Remove(itemID);
- }
- }
-
- public void RemoveAsset(UUID assetID)
- {
- UUID itemID = UUID.Zero;
-
- foreach (KeyValuePair kvp in m_items)
- {
- if (kvp.Value == assetID)
- {
- itemID = kvp.Key;
- break;
- }
- }
-
- if (itemID != UUID.Zero)
- {
- m_ids.Remove(itemID);
- m_items.Remove(itemID);
- }
- }
-
- public LayerItem this [int idx]
- {
- get
- {
- if (idx >= m_ids.Count || idx < 0)
- return new LayerItem(UUID.Zero, UUID.Zero);
-
- return new LayerItem(m_ids[idx], m_items[m_ids[idx]]);
- }
- }
- }
-
///
/// Contains the Avatar's Appearance and methods to manipulate the appearance.
///
@@ -184,136 +86,6 @@ namespace OpenSim.Framework
set { m_wearables = value; }
}
- public virtual UUID BodyItem {
- get { return m_wearables[AvatarWearable.BODY].ItemID; }
- set { m_wearables[AvatarWearable.BODY].ItemID = value; }
- }
-
- public virtual UUID BodyAsset {
- get { return m_wearables[AvatarWearable.BODY].AssetID; }
- set { m_wearables[AvatarWearable.BODY].AssetID = value; }
- }
-
- public virtual UUID SkinItem {
- get { return m_wearables[AvatarWearable.SKIN].ItemID; }
- set { m_wearables[AvatarWearable.SKIN].ItemID = value; }
- }
-
- public virtual UUID SkinAsset {
- get { return m_wearables[AvatarWearable.SKIN].AssetID; }
- set { m_wearables[AvatarWearable.SKIN].AssetID = value; }
- }
-
- public virtual UUID HairItem {
- get { return m_wearables[AvatarWearable.HAIR].ItemID; }
- set { m_wearables[AvatarWearable.HAIR].ItemID = value; }
- }
-
- public virtual UUID HairAsset {
- get { return m_wearables[AvatarWearable.HAIR].AssetID; }
- set { m_wearables[AvatarWearable.HAIR].AssetID = value; }
- }
-
- public virtual UUID EyesItem {
- get { return m_wearables[AvatarWearable.EYES].ItemID; }
- set { m_wearables[AvatarWearable.EYES].ItemID = value; }
- }
-
- public virtual UUID EyesAsset {
- get { return m_wearables[AvatarWearable.EYES].AssetID; }
- set { m_wearables[AvatarWearable.EYES].AssetID = value; }
- }
-
- public virtual UUID ShirtItem {
- get { return m_wearables[AvatarWearable.SHIRT].ItemID; }
- set { m_wearables[AvatarWearable.SHIRT].ItemID = value; }
- }
-
- public virtual UUID ShirtAsset {
- get { return m_wearables[AvatarWearable.SHIRT].AssetID; }
- set { m_wearables[AvatarWearable.SHIRT].AssetID = value; }
- }
-
- public virtual UUID PantsItem {
- get { return m_wearables[AvatarWearable.PANTS].ItemID; }
- set { m_wearables[AvatarWearable.PANTS].ItemID = value; }
- }
-
- public virtual UUID PantsAsset {
- get { return m_wearables[AvatarWearable.PANTS].AssetID; }
- set { m_wearables[AvatarWearable.PANTS].AssetID = value; }
- }
-
- public virtual UUID ShoesItem {
- get { return m_wearables[AvatarWearable.SHOES].ItemID; }
- set { m_wearables[AvatarWearable.SHOES].ItemID = value; }
- }
-
- public virtual UUID ShoesAsset {
- get { return m_wearables[AvatarWearable.SHOES].AssetID; }
- set { m_wearables[AvatarWearable.SHOES].AssetID = value; }
- }
-
- public virtual UUID SocksItem {
- get { return m_wearables[AvatarWearable.SOCKS].ItemID; }
- set { m_wearables[AvatarWearable.SOCKS].ItemID = value; }
- }
-
- public virtual UUID SocksAsset {
- get { return m_wearables[AvatarWearable.SOCKS].AssetID; }
- set { m_wearables[AvatarWearable.SOCKS].AssetID = value; }
- }
-
- public virtual UUID JacketItem {
- get { return m_wearables[AvatarWearable.JACKET].ItemID; }
- set { m_wearables[AvatarWearable.JACKET].ItemID = value; }
- }
-
- public virtual UUID JacketAsset {
- get { return m_wearables[AvatarWearable.JACKET].AssetID; }
- set { m_wearables[AvatarWearable.JACKET].AssetID = value; }
- }
-
- public virtual UUID GlovesItem {
- get { return m_wearables[AvatarWearable.GLOVES].ItemID; }
- set { m_wearables[AvatarWearable.GLOVES].ItemID = value; }
- }
-
- public virtual UUID GlovesAsset {
- get { return m_wearables[AvatarWearable.GLOVES].AssetID; }
- set { m_wearables[AvatarWearable.GLOVES].AssetID = value; }
- }
-
- public virtual UUID UnderShirtItem {
- get { return m_wearables[AvatarWearable.UNDERSHIRT].ItemID; }
- set { m_wearables[AvatarWearable.UNDERSHIRT].ItemID = value; }
- }
-
- public virtual UUID UnderShirtAsset {
- get { return m_wearables[AvatarWearable.UNDERSHIRT].AssetID; }
- set { m_wearables[AvatarWearable.UNDERSHIRT].AssetID = value; }
- }
-
- public virtual UUID UnderPantsItem {
- get { return m_wearables[AvatarWearable.UNDERPANTS].ItemID; }
- set { m_wearables[AvatarWearable.UNDERPANTS].ItemID = value; }
- }
-
- public virtual UUID UnderPantsAsset {
- get { return m_wearables[AvatarWearable.UNDERPANTS].AssetID; }
- set { m_wearables[AvatarWearable.UNDERPANTS].AssetID = value; }
- }
-
- public virtual UUID SkirtItem {
- get { return m_wearables[AvatarWearable.SKIRT].ItemID; }
- set { m_wearables[AvatarWearable.SKIRT].ItemID = value; }
- }
-
- public virtual UUID SkirtAsset {
- get { return m_wearables[AvatarWearable.SKIRT].AssetID; }
- set { m_wearables[AvatarWearable.SKIRT].AssetID = value; }
- }
-
public virtual float AvatarHeight
{
get { return m_avatarHeight; }
@@ -407,7 +179,7 @@ namespace OpenSim.Framework
m_wearables = null;
if (appearance.Wearables != null)
{
- m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; //should be 13 of these
+ m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; //should be 15 of these
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
SetWearable(i,appearance.Wearables[i]);
}
@@ -552,7 +324,9 @@ namespace OpenSim.Framework
// DEBUG ON
// m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID);
// DEBUG OFF
- m_wearables[wearableId] = new AvatarWearable(wearable.ItemID,wearable.AssetID);
+ m_wearables[wearableId].Clear();
+ for (int i = 0 ; i < wearable.Count ; i++)
+ m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID);
}
@@ -568,7 +342,10 @@ namespace OpenSim.Framework
s += String.Format("Texture: {0} --> {1}\n",i,m_texture.FaceTextures[i].TextureID);
foreach (AvatarWearable awear in m_wearables)
- s += String.Format("Wearable: item={0}, asset={1}\n",awear.ItemID,awear.AssetID);
+ {
+ for ( int i = 0 ; i < awear.Count ; i++ )
+ s += String.Format("Wearable: item={0}, asset={1}\n",awear[i].ItemID,awear[i].AssetID);
+ }
s += "Visual Params: ";
for (uint j = 0; j < AvatarAppearance.VISUALPARAM_COUNT; j++)
@@ -738,7 +515,7 @@ namespace OpenSim.Framework
{
OSDArray wears = (OSDArray)(data["wearables"]);
for (int i = 0; i < wears.Count; i++)
- m_wearables[i] = new AvatarWearable((OSDMap)wears[i]);
+ m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
}
else
{
diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs
index 87098bf..631971f 100644
--- a/OpenSim/Framework/AvatarWearable.cs
+++ b/OpenSim/Framework/AvatarWearable.cs
@@ -26,11 +26,24 @@
*/
using System;
+using System.Collections.Generic;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
namespace OpenSim.Framework
{
+ public struct WearableItem
+ {
+ public UUID ItemID;
+ public UUID AssetID;
+
+ public WearableItem(UUID itemID, UUID assetID)
+ {
+ ItemID = itemID;
+ AssetID = assetID;
+ }
+ }
+
public class AvatarWearable
{
// these are guessed at by the list here -
@@ -49,8 +62,10 @@ namespace OpenSim.Framework
public static readonly int UNDERSHIRT = 10;
public static readonly int UNDERPANTS = 11;
public static readonly int SKIRT = 12;
+ public static readonly int ALPHA = 13;
+ public static readonly int TATTOO = 15;
- public static readonly int MAX_WEARABLES = 13;
+ public static readonly int MAX_WEARABLES = 15;
public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9");
public static readonly UUID DEFAULT_BODY_ASSET = new UUID("66c41e39-38f9-f75a-024e-585989bfab73");
@@ -67,68 +82,158 @@ namespace OpenSim.Framework
public static readonly UUID DEFAULT_PANTS_ITEM = new UUID("77c41e39-38f9-f75a-0000-5859892f1111");
public static readonly UUID DEFAULT_PANTS_ASSET = new UUID("00000000-38f9-1111-024e-222222111120");
- public UUID AssetID;
- public UUID ItemID;
+ public static readonly UUID DEFAULT_ALPHA_ITEM = new UUID("bfb9923c-4838-4d2d-bf07-608c5b1165c8");
+ public static readonly UUID DEFAULT_ALPHA_ASSET = new UUID("1578a2b1-5179-4b53-b618-fe00ca5a5594");
+
+ public static readonly UUID DEFAULT_TATTOO_ITEM = new UUID("c47e22bd-3021-4ba4-82aa-2b5cb34d35e1");
+ public static readonly UUID DEFAULT_TATTOO_ASSET = new UUID("00000000-0000-2222-3333-100000001007");
+
+
+ protected Dictionary m_items = new Dictionary();
+ protected List m_ids = new List();
public AvatarWearable()
{
}
- public AvatarWearable(UUID itemId, UUID assetId)
+ public AvatarWearable(UUID itemID, UUID assetID)
{
- AssetID = assetId;
- ItemID = itemId;
+ Wear(itemID, assetID);
}
- public AvatarWearable(OSDMap args)
+ public AvatarWearable(OSDArray args)
{
Unpack(args);
}
- public OSDMap Pack()
+ public OSD Pack()
+ {
+ OSDArray wearlist = new OSDArray();
+
+ foreach (UUID id in m_ids)
+ {
+ OSDMap weardata = new OSDMap();
+ weardata["item"] = OSD.FromUUID(id);
+ weardata["asset"] = OSD.FromUUID(m_items[id]);
+ wearlist.Add(weardata);
+ }
+
+ return wearlist;
+ }
+
+ public void Unpack(OSDArray args)
+ {
+ Clear();
+
+ foreach (OSDMap weardata in args)
+ {
+ Add(weardata["item"].AsUUID(), weardata["asset"].AsUUID());
+ }
+ }
+
+ public int Count
+ {
+ get { return m_ids.Count; }
+ }
+
+ public void Add(UUID itemID, UUID assetID)
+ {
+ if (itemID == UUID.Zero)
+ return;
+ if (m_items.ContainsKey(itemID))
+ {
+ m_items[itemID] = assetID;
+ return;
+ }
+ if (m_ids.Count >= 5)
+ return;
+
+ m_ids.Add(itemID);
+ m_items[itemID] = assetID;
+ }
+
+ public void Wear(UUID itemID, UUID assetID)
{
- OSDMap weardata = new OSDMap();
- weardata["item"] = OSD.FromUUID(ItemID);
- weardata["asset"] = OSD.FromUUID(AssetID);
+ Clear();
+ Add(itemID, assetID);
+ }
- return weardata;
+ public void Clear()
+ {
+ m_ids.Clear();
+ m_items.Clear();
}
- public void Unpack(OSDMap args)
+ public void RemoveItem(UUID itemID)
{
- ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero;
- AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero;
+ if (m_items.ContainsKey(itemID))
+ {
+ m_ids.Remove(itemID);
+ m_items.Remove(itemID);
+ }
+ }
+
+ public void RemoveAsset(UUID assetID)
+ {
+ UUID itemID = UUID.Zero;
+
+ foreach (KeyValuePair kvp in m_items)
+ {
+ if (kvp.Value == assetID)
+ {
+ itemID = kvp.Key;
+ break;
+ }
+ }
+
+ if (itemID != UUID.Zero)
+ {
+ m_ids.Remove(itemID);
+ m_items.Remove(itemID);
+ }
+ }
+
+ public WearableItem this [int idx]
+ {
+ get
+ {
+ if (idx >= m_ids.Count || idx < 0)
+ return new WearableItem(UUID.Zero, UUID.Zero);
+
+ return new WearableItem(m_ids[idx], m_items[m_ids[idx]]);
+ }
}
public static AvatarWearable[] DefaultWearables
{
get
{
- AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; //should be 13 of these
+ AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; //should be 15 of these
for (int i = 0; i < MAX_WEARABLES; i++)
{
defaultWearables[i] = new AvatarWearable();
}
// Body
- defaultWearables[0].ItemID = DEFAULT_BODY_ITEM;
- defaultWearables[0].AssetID = DEFAULT_BODY_ASSET;
+ defaultWearables[BODY].Add(DEFAULT_BODY_ITEM, DEFAULT_BODY_ASSET);
// Hair
- defaultWearables[2].ItemID = DEFAULT_HAIR_ITEM;
- defaultWearables[2].AssetID = DEFAULT_HAIR_ASSET;
+ defaultWearables[HAIR].Add(DEFAULT_HAIR_ITEM, DEFAULT_HAIR_ASSET);
// Skin
- defaultWearables[1].ItemID = DEFAULT_SKIN_ITEM;
- defaultWearables[1].AssetID = DEFAULT_SKIN_ASSET;
+ defaultWearables[SKIN].Add(DEFAULT_SKIN_ITEM, DEFAULT_SKIN_ASSET);
// Shirt
- defaultWearables[4].ItemID = DEFAULT_SHIRT_ITEM;
- defaultWearables[4].AssetID = DEFAULT_SHIRT_ASSET;
+ defaultWearables[SHIRT].Add(DEFAULT_SHIRT_ITEM, DEFAULT_SHIRT_ASSET);
// Pants
- defaultWearables[5].ItemID = DEFAULT_PANTS_ITEM;
- defaultWearables[5].AssetID = DEFAULT_PANTS_ASSET;
+ defaultWearables[PANTS].Add(DEFAULT_PANTS_ITEM, DEFAULT_PANTS_ASSET);
+
+ // Alpha
+ defaultWearables[ALPHA].Add(DEFAULT_ALPHA_ITEM, DEFAULT_ALPHA_ASSET);
+
+ // Tattoo
+ defaultWearables[TATTOO].Add(DEFAULT_TATTOO_ITEM, DEFAULT_TATTOO_ASSET);
return defaultWearables;
}
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs
index 66487f7..ddfaaed 100644
--- a/OpenSim/Framework/ChildAgentDataUpdate.cs
+++ b/OpenSim/Framework/ChildAgentDataUpdate.cs
@@ -414,12 +414,10 @@ namespace OpenSim.Framework
// We might not pass this in all cases...
if ((Appearance.Wearables != null) && (Appearance.Wearables.Length > 0))
{
- OSDArray wears = new OSDArray(Appearance.Wearables.Length * 2);
+ OSDArray wears = new OSDArray(Appearance.Wearables.Length);
foreach (AvatarWearable awear in Appearance.Wearables)
- {
- wears.Add(OSD.FromUUID(awear.ItemID));
- wears.Add(OSD.FromUUID(awear.AssetID));
- }
+ wears.Add(awear.Pack());
+
args["wearables"] = wears;
}
@@ -592,7 +590,7 @@ namespace OpenSim.Framework
OSDArray wears = (OSDArray)(args["wearables"]);
for (int i = 0; i < wears.Count / 2; i++)
{
- AvatarWearable awear = new AvatarWearable(wears[i*2].AsUUID(),wears[(i*2)+1].AsUUID());
+ AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]);
Appearance.SetWearable(i,awear);
}
}
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs
index c88e0d1..c9d4c93 100644
--- a/OpenSim/Framework/Servers/VersionInfo.cs
+++ b/OpenSim/Framework/Servers/VersionInfo.cs
@@ -69,6 +69,6 @@ namespace OpenSim
/// of the code that is too old.
///
///
- public readonly static int MajorInterfaceVersion = 6;
+ public readonly static int MajorInterfaceVersion = 7;
}
}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 14f923d..d7458b7 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -3387,20 +3387,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP
aw.AgentData.SerialNum = (uint)serial;
aw.AgentData.SessionID = m_sessionId;
+ int count = 0;
+ for (int i = 0; i < wearables.Length; i++)
+ count += wearables[i].Count;
+
// TODO: don't create new blocks if recycling an old packet
- aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
+ aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[count];
AgentWearablesUpdatePacket.WearableDataBlock awb;
+ int idx = 0;
for (int i = 0; i < wearables.Length; i++)
{
- awb = new AgentWearablesUpdatePacket.WearableDataBlock();
- awb.WearableType = (byte)i;
- awb.AssetID = wearables[i].AssetID;
- awb.ItemID = wearables[i].ItemID;
- aw.WearableData[i] = awb;
+ for (int j = 0; j < wearables[i].Count; j++)
+ {
+ awb = new AgentWearablesUpdatePacket.WearableDataBlock();
+ awb.WearableType = (byte)i;
+ awb.AssetID = wearables[i][j].AssetID;
+ awb.ItemID = wearables[i][j].ItemID;
+ aw.WearableData[idx] = awb;
+ idx++;
// m_log.DebugFormat(
// "[APPEARANCE]: Sending wearable item/asset {0} {1} (index {2}) for {3}",
// awb.ItemID, awb.AssetID, i, Name);
+ }
}
OutPacket(aw, ThrottleOutPacketType.Task);
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index bfbbcf8..4d27ea4 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -393,27 +393,22 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
{
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
{
- if (appearance.Wearables[i].ItemID == UUID.Zero)
+ for (int j = 0 ; j < appearance.Wearables[j].Count ; j ++ )
{
- appearance.Wearables[i].AssetID = UUID.Zero;
- }
- else
- {
- InventoryItemBase baseItem = new InventoryItemBase(appearance.Wearables[i].ItemID, userID);
+ InventoryItemBase baseItem = new InventoryItemBase(appearance.Wearables[i][j].ItemID, userID);
baseItem = invService.GetItem(baseItem);
if (baseItem != null)
{
- appearance.Wearables[i].AssetID = baseItem.AssetID;
+ appearance.Wearables[i].Add(appearance.Wearables[i][j].ItemID, baseItem.AssetID);
}
else
{
m_log.ErrorFormat(
"[AVFACTORY]: Can't find inventory item {0} for {1}, setting to default",
- appearance.Wearables[i].ItemID, (WearableType)i);
+ appearance.Wearables[i][j].ItemID, (WearableType)i);
- appearance.Wearables[i].ItemID = UUID.Zero;
- appearance.Wearables[i].AssetID = UUID.Zero;
+ appearance.Wearables[i].RemoveItem(appearance.Wearables[i][j].ItemID);
}
}
}
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
index ea9b4b4..7a28c2b 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
@@ -265,32 +265,33 @@ namespace OpenSim.Services.Connectors.SimianGrid
map["Height"] = OSD.FromReal(appearance.AvatarHeight);
- map["ShapeItem"] = OSD.FromUUID(appearance.BodyItem);
- map["ShapeAsset"] = OSD.FromUUID(appearance.BodyAsset);
- map["SkinItem"] = OSD.FromUUID(appearance.SkinItem);
- map["SkinAsset"] = OSD.FromUUID(appearance.SkinAsset);
- map["HairItem"] = OSD.FromUUID(appearance.HairItem);
- map["HairAsset"] = OSD.FromUUID(appearance.HairAsset);
- map["EyesItem"] = OSD.FromUUID(appearance.EyesItem);
- map["EyesAsset"] = OSD.FromUUID(appearance.EyesAsset);
- map["ShirtItem"] = OSD.FromUUID(appearance.ShirtItem);
- map["ShirtAsset"] = OSD.FromUUID(appearance.ShirtAsset);
- map["PantsItem"] = OSD.FromUUID(appearance.PantsItem);
- map["PantsAsset"] = OSD.FromUUID(appearance.PantsAsset);
- map["ShoesItem"] = OSD.FromUUID(appearance.ShoesItem);
- map["ShoesAsset"] = OSD.FromUUID(appearance.ShoesAsset);
- map["SocksItem"] = OSD.FromUUID(appearance.SocksItem);
- map["SocksAsset"] = OSD.FromUUID(appearance.SocksAsset);
- map["JacketItem"] = OSD.FromUUID(appearance.JacketItem);
- map["JacketAsset"] = OSD.FromUUID(appearance.JacketAsset);
- map["GlovesItem"] = OSD.FromUUID(appearance.GlovesItem);
- map["GlovesAsset"] = OSD.FromUUID(appearance.GlovesAsset);
- map["UndershirtItem"] = OSD.FromUUID(appearance.UnderShirtItem);
- map["UndershirtAsset"] = OSD.FromUUID(appearance.UnderShirtAsset);
- map["UnderpantsItem"] = OSD.FromUUID(appearance.UnderPantsItem);
- map["UnderpantsAsset"] = OSD.FromUUID(appearance.UnderPantsAsset);
- map["SkirtItem"] = OSD.FromUUID(appearance.SkirtItem);
- map["SkirtAsset"] = OSD.FromUUID(appearance.SkirtAsset);
+ map["BodyItem"] = appearance.Wearables[AvatarWearable.BODY][0].ItemID.ToString();
+ map["EyesItem"] = appearance.Wearables[AvatarWearable.EYES][0].ItemID.ToString();
+ map["GlovesItem"] = appearance.Wearables[AvatarWearable.GLOVES][0].ItemID.ToString();
+ map["HairItem"] = appearance.Wearables[AvatarWearable.HAIR][0].ItemID.ToString();
+ map["JacketItem"] = appearance.Wearables[AvatarWearable.JACKET][0].ItemID.ToString();
+ map["PantsItem"] = appearance.Wearables[AvatarWearable.PANTS][0].ItemID.ToString();
+ map["ShirtItem"] = appearance.Wearables[AvatarWearable.SHIRT][0].ItemID.ToString();
+ map["ShoesItem"] = appearance.Wearables[AvatarWearable.SHOES][0].ItemID.ToString();
+ map["SkinItem"] = appearance.Wearables[AvatarWearable.SKIN][0].ItemID.ToString();
+ map["SkirtItem"] = appearance.Wearables[AvatarWearable.SKIRT][0].ItemID.ToString();
+ map["SocksItem"] = appearance.Wearables[AvatarWearable.SOCKS][0].ItemID.ToString();
+ map["UnderPantsItem"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].ItemID.ToString();
+ map["UnderShirtItem"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].ItemID.ToString();
+ map["BodyAsset"] = appearance.Wearables[AvatarWearable.BODY][0].AssetID.ToString();
+ map["EyesAsset"] = appearance.Wearables[AvatarWearable.EYES][0].AssetID.ToString();
+ map["GlovesAsset"] = appearance.Wearables[AvatarWearable.GLOVES][0].AssetID.ToString();
+ map["HairAsset"] = appearance.Wearables[AvatarWearable.HAIR][0].AssetID.ToString();
+ map["JacketAsset"] = appearance.Wearables[AvatarWearable.JACKET][0].AssetID.ToString();
+ map["PantsAsset"] = appearance.Wearables[AvatarWearable.PANTS][0].AssetID.ToString();
+ map["ShirtAsset"] = appearance.Wearables[AvatarWearable.SHIRT][0].AssetID.ToString();
+ map["ShoesAsset"] = appearance.Wearables[AvatarWearable.SHOES][0].AssetID.ToString();
+ map["SkinAsset"] = appearance.Wearables[AvatarWearable.SKIN][0].AssetID.ToString();
+ map["SkirtAsset"] = appearance.Wearables[AvatarWearable.SKIRT][0].AssetID.ToString();
+ map["SocksAsset"] = appearance.Wearables[AvatarWearable.SOCKS][0].AssetID.ToString();
+ map["UnderPantsAsset"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].AssetID.ToString();
+ map["UnderShirtAsset"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].AssetID.ToString();
+
OSDMap items = new OSDMap();
foreach (KeyValuePair kvp in avatar.Data)
diff --git a/OpenSim/Services/Interfaces/IAvatarService.cs b/OpenSim/Services/Interfaces/IAvatarService.cs
index eaa6534..a029fbc 100644
--- a/OpenSim/Services/Interfaces/IAvatarService.cs
+++ b/OpenSim/Services/Interfaces/IAvatarService.cs
@@ -149,33 +149,33 @@ namespace OpenSim.Services.Interfaces
Data["Serial"] = appearance.Serial.ToString();
// Wearables
Data["AvatarHeight"] = appearance.AvatarHeight.ToString();
- Data["BodyItem"] = appearance.BodyItem.ToString();
- Data["EyesItem"] = appearance.EyesItem.ToString();
- Data["GlovesItem"] = appearance.GlovesItem.ToString();
- Data["HairItem"] = appearance.HairItem.ToString();
- Data["JacketItem"] = appearance.JacketItem.ToString();
- Data["PantsItem"] = appearance.PantsItem.ToString();
- Data["ShirtItem"] = appearance.ShirtItem.ToString();
- Data["ShoesItem"] = appearance.ShoesItem.ToString();
- Data["SkinItem"] = appearance.SkinItem.ToString();
- Data["SkirtItem"] = appearance.SkirtItem.ToString();
- Data["SocksItem"] = appearance.SocksItem.ToString();
- Data["UnderPantsItem"] = appearance.UnderPantsItem.ToString();
- Data["UnderShirtItem"] = appearance.UnderShirtItem.ToString();
-
- Data["BodyAsset"] = appearance.BodyAsset.ToString();
- Data["EyesAsset"] = appearance.EyesAsset.ToString();
- Data["GlovesAsset"] = appearance.GlovesAsset.ToString();
- Data["HairAsset"] = appearance.HairAsset.ToString();
- Data["JacketAsset"] = appearance.JacketAsset.ToString();
- Data["PantsAsset"] = appearance.PantsAsset.ToString();
- Data["ShirtAsset"] = appearance.ShirtAsset.ToString();
- Data["ShoesAsset"] = appearance.ShoesAsset.ToString();
- Data["SkinAsset"] = appearance.SkinAsset.ToString();
- Data["SkirtAsset"] = appearance.SkirtAsset.ToString();
- Data["SocksAsset"] = appearance.SocksAsset.ToString();
- Data["UnderPantsAsset"] = appearance.UnderPantsAsset.ToString();
- Data["UnderShirtAsset"] = appearance.UnderShirtAsset.ToString();
+ Data["BodyItem"] = appearance.Wearables[AvatarWearable.BODY][0].ItemID.ToString();
+ Data["EyesItem"] = appearance.Wearables[AvatarWearable.EYES][0].ItemID.ToString();
+ Data["GlovesItem"] = appearance.Wearables[AvatarWearable.GLOVES][0].ItemID.ToString();
+ Data["HairItem"] = appearance.Wearables[AvatarWearable.HAIR][0].ItemID.ToString();
+ Data["JacketItem"] = appearance.Wearables[AvatarWearable.JACKET][0].ItemID.ToString();
+ Data["PantsItem"] = appearance.Wearables[AvatarWearable.PANTS][0].ItemID.ToString();
+ Data["ShirtItem"] = appearance.Wearables[AvatarWearable.SHIRT][0].ItemID.ToString();
+ Data["ShoesItem"] = appearance.Wearables[AvatarWearable.SHOES][0].ItemID.ToString();
+ Data["SkinItem"] = appearance.Wearables[AvatarWearable.SKIN][0].ItemID.ToString();
+ Data["SkirtItem"] = appearance.Wearables[AvatarWearable.SKIRT][0].ItemID.ToString();
+ Data["SocksItem"] = appearance.Wearables[AvatarWearable.SOCKS][0].ItemID.ToString();
+ Data["UnderPantsItem"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].ItemID.ToString();
+ Data["UnderShirtItem"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].ItemID.ToString();
+
+ Data["BodyAsset"] = appearance.Wearables[AvatarWearable.BODY][0].AssetID.ToString();
+ Data["EyesAsset"] = appearance.Wearables[AvatarWearable.EYES][0].AssetID.ToString();
+ Data["GlovesAsset"] = appearance.Wearables[AvatarWearable.GLOVES][0].AssetID.ToString();
+ Data["HairAsset"] = appearance.Wearables[AvatarWearable.HAIR][0].AssetID.ToString();
+ Data["JacketAsset"] = appearance.Wearables[AvatarWearable.JACKET][0].AssetID.ToString();
+ Data["PantsAsset"] = appearance.Wearables[AvatarWearable.PANTS][0].AssetID.ToString();
+ Data["ShirtAsset"] = appearance.Wearables[AvatarWearable.SHIRT][0].AssetID.ToString();
+ Data["ShoesAsset"] = appearance.Wearables[AvatarWearable.SHOES][0].AssetID.ToString();
+ Data["SkinAsset"] = appearance.Wearables[AvatarWearable.SKIN][0].AssetID.ToString();
+ Data["SkirtAsset"] = appearance.Wearables[AvatarWearable.SKIRT][0].AssetID.ToString();
+ Data["SocksAsset"] = appearance.Wearables[AvatarWearable.SOCKS][0].AssetID.ToString();
+ Data["UnderPantsAsset"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].AssetID.ToString();
+ Data["UnderShirtAsset"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].AssetID.ToString();
// Attachments
List attachments = appearance.GetAttachments();
@@ -193,33 +193,57 @@ namespace OpenSim.Services.Interfaces
appearance.Serial = Int32.Parse(Data["Serial"]);
// Wearables
- appearance.BodyItem = UUID.Parse(Data["BodyItem"]);
- appearance.EyesItem = UUID.Parse(Data["EyesItem"]);
- appearance.GlovesItem = UUID.Parse(Data["GlovesItem"]);
- appearance.HairItem = UUID.Parse(Data["HairItem"]);
- appearance.JacketItem = UUID.Parse(Data["JacketItem"]);
- appearance.PantsItem = UUID.Parse(Data["PantsItem"]);
- appearance.ShirtItem = UUID.Parse(Data["ShirtItem"]);
- appearance.ShoesItem = UUID.Parse(Data["ShoesItem"]);
- appearance.SkinItem = UUID.Parse(Data["SkinItem"]);
- appearance.SkirtItem = UUID.Parse(Data["SkirtItem"]);
- appearance.SocksItem = UUID.Parse(Data["SocksItem"]);
- appearance.UnderPantsItem = UUID.Parse(Data["UnderPantsItem"]);
- appearance.UnderShirtItem = UUID.Parse(Data["UnderShirtItem"]);
-
- appearance.BodyAsset = UUID.Parse(Data["BodyAsset"]);
- appearance.EyesAsset = UUID.Parse(Data["EyesAsset"]);
- appearance.GlovesAsset = UUID.Parse(Data["GlovesAsset"]);
- appearance.HairAsset = UUID.Parse(Data["HairAsset"]);
- appearance.JacketAsset = UUID.Parse(Data["JacketAsset"]);
- appearance.PantsAsset = UUID.Parse(Data["PantsAsset"]);
- appearance.ShirtAsset = UUID.Parse(Data["ShirtAsset"]);
- appearance.ShoesAsset = UUID.Parse(Data["ShoesAsset"]);
- appearance.SkinAsset = UUID.Parse(Data["SkinAsset"]);
- appearance.SkirtAsset = UUID.Parse(Data["SkirtAsset"]);
- appearance.SocksAsset = UUID.Parse(Data["SocksAsset"]);
- appearance.UnderPantsAsset = UUID.Parse(Data["UnderPantsAsset"]);
- appearance.UnderShirtAsset = UUID.Parse(Data["UnderShirtAsset"]);
+ appearance.Wearables[AvatarWearable.BODY].Wear(
+ UUID.Parse(Data["BodyItem"]),
+ UUID.Parse(Data["BodyAsset"]));
+
+ appearance.Wearables[AvatarWearable.SKIN].Wear(
+ UUID.Parse(Data["SkinItem"]),
+ UUID.Parse(Data["SkinAsset"]));
+
+ appearance.Wearables[AvatarWearable.HAIR].Wear(
+ UUID.Parse(Data["HairItem"]),
+ UUID.Parse(Data["HairAsset"]));
+
+ appearance.Wearables[AvatarWearable.EYES].Wear(
+ UUID.Parse(Data["EyesItem"]),
+ UUID.Parse(Data["EyesAsset"]));
+
+ appearance.Wearables[AvatarWearable.SHIRT].Wear(
+ UUID.Parse(Data["ShirtItem"]),
+ UUID.Parse(Data["ShirtAsset"]));
+
+ appearance.Wearables[AvatarWearable.PANTS].Wear(
+ UUID.Parse(Data["PantsItem"]),
+ UUID.Parse(Data["PantsAsset"]));
+
+ appearance.Wearables[AvatarWearable.SHOES].Wear(
+ UUID.Parse(Data["ShoesItem"]),
+ UUID.Parse(Data["ShoesAsset"]));
+
+ appearance.Wearables[AvatarWearable.SOCKS].Wear(
+ UUID.Parse(Data["SocksItem"]),
+ UUID.Parse(Data["SocksAsset"]));
+
+ appearance.Wearables[AvatarWearable.JACKET].Wear(
+ UUID.Parse(Data["JacketItem"]),
+ UUID.Parse(Data["JacketAsset"]));
+
+ appearance.Wearables[AvatarWearable.GLOVES].Wear(
+ UUID.Parse(Data["GlovesItem"]),
+ UUID.Parse(Data["GlovesAsset"]));
+
+ appearance.Wearables[AvatarWearable.UNDERSHIRT].Wear(
+ UUID.Parse(Data["UnderShirtItem"]),
+ UUID.Parse(Data["UnderShirtAsset"]));
+
+ appearance.Wearables[AvatarWearable.UNDERPANTS].Wear(
+ UUID.Parse(Data["UnderPantsItem"]),
+ UUID.Parse(Data["UnderPantsAsset"]));
+
+ appearance.Wearables[AvatarWearable.SKIRT].Wear(
+ UUID.Parse(Data["SkirtItem"]),
+ UUID.Parse(Data["SkirtAsset"]));
// Attachments
Dictionary attchs = new Dictionary();
--
cgit v1.1
From ade71c9ed7ce45b4acb1456df457fe94ad46bd23 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 30 Oct 2010 01:32:56 +0100
Subject: Change level of some logging messages, turning some info into
arguably more appropriate debug to reduce console spam when log level is info
---
.../EntityTransfer/EntityTransferModule.cs | 11 +++--
.../Simulation/SimulationServiceConnector.cs | 56 +++++++++++-----------
2 files changed, 34 insertions(+), 33 deletions(-)
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 38fff1c..485e05a 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -193,10 +193,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
GridRegion finalDestination = GetFinalDestination(reg);
if (finalDestination == null)
{
- m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Final destination is having problems. Unable to teleport agent.");
+ m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Final destination is having problems. Unable to teleport agent.");
sp.ControllingClient.SendTeleportFailed("Problem at destination");
return;
}
+
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Final destination is x={0} y={1} uuid={2}",
finalDestination.RegionLocX / Constants.RegionSize, finalDestination.RegionLocY / Constants.RegionSize, finalDestination.RegionID);
@@ -240,7 +241,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
}
catch (Exception e)
{
- m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Exception on teleport: {0}\n{1}", e.Message, e.StackTrace);
+ m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Exception on teleport: {0}\n{1}", e.Message, e.StackTrace);
sp.ControllingClient.SendTeleportFailed("Internal error");
}
}
@@ -421,7 +422,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID);
-
if (eq != null)
{
eq.TeleportFinishEvent(destinationHandle, 13, endPoint,
@@ -581,6 +581,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
client.SendTeleportFailed("Your home region could not be found.");
return;
}
+
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: User's home region is {0} {1} ({2}-{3})",
regionInfo.RegionName, regionInfo.RegionID, regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize);
@@ -1188,7 +1189,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
Utils.LongToUInts(reg.RegionHandle, out x, out y);
x = x / Constants.RegionSize;
y = y / Constants.RegionSize;
- m_log.Info("[ENTITY TRANSFER MODULE]: Starting to inform client about neighbour " + x + ", " + y + "(" + endPoint.ToString() + ")");
+ m_log.Debug("[ENTITY TRANSFER MODULE]: Starting to inform client about neighbour " + x + ", " + y + "(" + endPoint.ToString() + ")");
string capsPath = "http://" + reg.ExternalHostName + ":" + reg.HttpPort
+ "/CAPS/" + a.CapsPath + "0000/";
@@ -1224,7 +1225,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// TODO: make Event Queue disablable!
}
- m_log.Info("[ENTITY TRANSFER MODULE]: Completed inform client about neighbour " + endPoint.ToString());
+ m_log.Debug("[ENTITY TRANSFER MODULE]: Completed inform client about neighbour " + endPoint.ToString());
}
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
index a5f748f..502fc82 100644
--- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
@@ -117,7 +117,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (Exception e)
{
- m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent create. Reason: " + e.Message);
+ m_log.Error("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent create. Reason: " + e.Message);
reason = e.Message;
return false;
}
@@ -158,13 +158,13 @@ namespace OpenSim.Services.Connectors.Simulation
AgentCreateRequest.ContentLength = buffer.Length; //Count bytes to send
os = AgentCreateRequest.GetRequestStream();
os.Write(buffer, 0, strBuffer.Length); //Send it
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateAgent request to remote sim {0}, region {1}, x={2} y={3}",
+ m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateAgent request to remote sim {0}, region {1}, x={2} y={3}",
uri, destination.RegionName, destination.RegionLocX, destination.RegionLocY);
}
//catch (WebException ex)
catch
{
- //m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Bad send on ChildAgentUpdate {0}", ex.Message);
+ //m_log.ErrorFormat("[REMOTE SIMULATION CONNECTOR]: Bad send on ChildAgentUpdate {0}", ex.Message);
reason = "cannot contact remote region";
return false;
}
@@ -191,19 +191,19 @@ namespace OpenSim.Services.Connectors.Simulation
webResponse = AgentCreateRequest.GetResponse();
if (webResponse == null)
{
- m_log.Info("[REMOTE SIMULATION CONNECTOR]: Null reply on DoCreateChildAgentCall post");
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Null reply on DoCreateChildAgentCall post");
}
else
{
sr = new StreamReader(webResponse.GetResponseStream());
response = sr.ReadToEnd().Trim();
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: DoCreateChildAgentCall reply was {0} ", response);
+ m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: DoCreateChildAgentCall reply was {0} ", response);
}
}
catch (WebException ex)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message);
reason = "Destination did not reply";
return string.Empty;
}
@@ -231,7 +231,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (NullReferenceException e)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", e.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", e.Message);
// check for old style response
if (response.ToLower().StartsWith("true"))
@@ -251,7 +251,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (Exception e)
{
- m_log.Debug("[REMOTE SIMULATION CONNECTOR]: PackAgentCircuitData failed with exception: " + e.Message);
+ m_log.Warn("[REMOTE SIMULATION CONNECTOR]: PackAgentCircuitData failed with exception: " + e.Message);
return null;
}
// Add the input arguments
@@ -284,7 +284,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (Exception e)
{
- m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent update. Reason: " + e.Message);
+ m_log.Warn("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent update. Reason: " + e.Message);
return false;
}
//Console.WriteLine(" >>> DoAgentUpdateCall <<< " + uri);
@@ -303,7 +303,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (Exception e)
{
- m_log.Debug("[REMOTE SIMULATION CONNECTOR]: PackUpdateMessage failed with exception: " + e.Message);
+ m_log.Warn("[REMOTE SIMULATION CONNECTOR]: PackUpdateMessage failed with exception: " + e.Message);
}
// Add the input arguments
args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString());
@@ -332,12 +332,12 @@ namespace OpenSim.Services.Connectors.Simulation
ChildUpdateRequest.ContentLength = buffer.Length; //Count bytes to send
os = ChildUpdateRequest.GetRequestStream();
os.Write(buffer, 0, strBuffer.Length); //Send it
- //m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Posted AgentUpdate request to remote sim {0}", uri);
+ //m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Posted AgentUpdate request to remote sim {0}", uri);
}
catch (WebException ex)
//catch
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Bad send on AgentUpdate {0}", ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: Bad send on AgentUpdate {0}", ex.Message);
return false;
}
@@ -348,7 +348,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
// Let's wait for the response
- //m_log.Info("[REMOTE SIMULATION CONNECTOR]: Waiting for a reply after ChildAgentUpdate");
+ //m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Waiting for a reply after ChildAgentUpdate");
WebResponse webResponse = null;
StreamReader sr = null;
@@ -357,19 +357,19 @@ namespace OpenSim.Services.Connectors.Simulation
webResponse = ChildUpdateRequest.GetResponse();
if (webResponse == null)
{
- m_log.Info("[REMOTE SIMULATION CONNECTOR]: Null reply on ChilAgentUpdate post");
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Null reply on ChilAgentUpdate post");
}
sr = new StreamReader(webResponse.GetResponseStream());
//reply = sr.ReadToEnd().Trim();
sr.ReadToEnd().Trim();
sr.Close();
- //m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: ChilAgentUpdate reply was {0} ", reply);
+ //m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: ChilAgentUpdate reply was {0} ", reply);
}
catch (WebException ex)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of ChilAgentUpdate from {0}: {1}", uri, ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of ChilAgentUpdate from {0}: {1}", uri, ex.Message);
// ignore, really
}
finally
@@ -401,7 +401,7 @@ namespace OpenSim.Services.Connectors.Simulation
webResponse = (HttpWebResponse)request.GetResponse();
if (webResponse == null)
{
- m_log.Info("[REMOTE SIMULATION CONNECTOR]: Null reply on agent get ");
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Null reply on agent get ");
}
sr = new StreamReader(webResponse.GetResponseStream());
@@ -412,7 +412,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (WebException ex)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of agent get {0}", ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of agent get {0}", ex.Message);
// ignore, really
return false;
}
@@ -453,7 +453,7 @@ namespace OpenSim.Services.Connectors.Simulation
WebResponse webResponse = request.GetResponse();
if (webResponse == null)
{
- m_log.Info("[REMOTE SIMULATION CONNECTOR]: Null reply on ReleaseAgent");
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Null reply on ReleaseAgent");
}
sr = new StreamReader(webResponse.GetResponseStream());
@@ -465,7 +465,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (WebException ex)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of ReleaseAgent {0}", ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of ReleaseAgent {0}", ex.Message);
return false;
}
finally
@@ -486,7 +486,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (Exception e)
{
- m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent close. Reason: " + e.Message);
+ m_log.Warn("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent close. Reason: " + e.Message);
return false;
}
@@ -502,7 +502,7 @@ namespace OpenSim.Services.Connectors.Simulation
WebResponse webResponse = request.GetResponse();
if (webResponse == null)
{
- m_log.Info("[REMOTE SIMULATION CONNECTOR]: Null reply on agent delete ");
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Null reply on agent delete ");
}
sr = new StreamReader(webResponse.GetResponseStream());
@@ -514,7 +514,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (WebException ex)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of agent delete from {0}: {1}", destination.RegionName, ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of agent delete from {0}: {1}", destination.RegionName, ex.Message);
return false;
}
finally
@@ -579,11 +579,11 @@ namespace OpenSim.Services.Connectors.Simulation
ObjectCreateRequest.ContentLength = buffer.Length; //Count bytes to send
os = ObjectCreateRequest.GetRequestStream();
os.Write(buffer, 0, strBuffer.Length); //Send it
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateObject request to remote sim {0}", uri);
+ m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateObject request to remote sim {0}", uri);
}
catch (WebException ex)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Bad send on CreateObject {0}", ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: Bad send on CreateObject {0}", ex.Message);
return false;
}
finally
@@ -601,7 +601,7 @@ namespace OpenSim.Services.Connectors.Simulation
WebResponse webResponse = ObjectCreateRequest.GetResponse();
if (webResponse == null)
{
- m_log.Info("[REMOTE SIMULATION CONNECTOR]: Null reply on CreateObject post");
+ m_log.Warn("[REMOTE SIMULATION CONNECTOR]: Null reply on CreateObject post");
return false;
}
@@ -613,7 +613,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
catch (WebException ex)
{
- m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of CreateObject {0}", ex.Message);
+ m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of CreateObject {0}", ex.Message);
return false;
}
finally
--
cgit v1.1
From 343c89465891234be94da33719dcbdd903993a42 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 30 Oct 2010 01:35:12 +0100
Subject: Set async_packet_handling = true by default
Setting this to true avoids a 500ms or so client freeze when the LLUDP server thread is taken up with processing a UseCircuitCode packet synchronously.
Extensive testing on Wright Plaza appeared to show no bad effects and this seems to reduce login lag considerably.
Of course, a lot of login lag is still coming from other sources.
---
OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 2 +-
bin/OpenSimDefaults.ini | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 161e8c2..821f679 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -183,7 +183,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
IConfig config = configSource.Configs["ClientStack.LindenUDP"];
if (config != null)
{
- m_asyncPacketHandling = config.GetBoolean("async_packet_handling", false);
+ m_asyncPacketHandling = config.GetBoolean("async_packet_handling", true);
m_recvBufferSize = config.GetInt("client_socket_rcvbuf_size", 0);
sceneThrottleBps = config.GetInt("scene_throttle_max_bps", 0);
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 5ced7d5..de7c44c 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -328,8 +328,9 @@
; already separated from packet handling with a queue, so this will only
; affect whether networking internals such as packet decoding and
; acknowledgement accounting are done synchronously or asynchronously
+ ; Default is true.
;
- ;async_packet_handling = false
+ ;async_packet_handling = true
; The client socket receive buffer size determines how many
; incoming requests we can process; the default on .NET is 8192
--
cgit v1.1
From ff7da2082d4d44b34c3ef312d5ec5e88c94931e1 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sat, 30 Oct 2010 02:25:25 +0100
Subject: This commit fixes all the appearance related null refs. Still can't
log in, client displays a blank error box.
---
OpenSim/Framework/AvatarAppearance.cs | 9 +-
OpenSim/Framework/AvatarWearable.cs | 2 +-
OpenSim/Services/AvatarService/AvatarService.cs | 11 ++-
OpenSim/Services/Interfaces/IAvatarService.cs | 117 +++++++++++++-----------
4 files changed, 80 insertions(+), 59 deletions(-)
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index ee60622..1e003f7 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -111,6 +111,10 @@ namespace OpenSim.Framework
SetDefaultParams();
SetHeight();
+ m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
+ for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++ )
+ m_wearables[i] = new AvatarWearable();
+
m_attachments = new Dictionary>();
}
@@ -172,10 +176,11 @@ namespace OpenSim.Framework
m_serial = appearance.Serial;
m_owner = appearance.Owner;
- m_wearables = null;
+ m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
+ for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++ )
+ m_wearables[i] = new AvatarWearable();
if (appearance.Wearables != null)
{
- m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; //should be 15 of these
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
SetWearable(i,appearance.Wearables[i]);
}
diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs
index 631971f..0a02dcf 100644
--- a/OpenSim/Framework/AvatarWearable.cs
+++ b/OpenSim/Framework/AvatarWearable.cs
@@ -63,7 +63,7 @@ namespace OpenSim.Framework
public static readonly int UNDERPANTS = 11;
public static readonly int SKIRT = 12;
public static readonly int ALPHA = 13;
- public static readonly int TATTOO = 15;
+ public static readonly int TATTOO = 14;
public static readonly int MAX_WEARABLES = 15;
diff --git a/OpenSim/Services/AvatarService/AvatarService.cs b/OpenSim/Services/AvatarService/AvatarService.cs
index a8ad413..53ca7c8 100644
--- a/OpenSim/Services/AvatarService/AvatarService.cs
+++ b/OpenSim/Services/AvatarService/AvatarService.cs
@@ -51,8 +51,6 @@ namespace OpenSim.Services.AvatarService
m_log.Debug("[AVATAR SERVICE]: Starting avatar service");
}
- // Get|SetAppearance should preserve existing semantics
- // until AvatarData can be removed completely
public AvatarAppearance GetAppearance(UUID principalID)
{
AvatarData avatar = GetAvatar(principalID);
@@ -68,12 +66,15 @@ namespace OpenSim.Services.AvatarService
public AvatarData GetAvatar(UUID principalID)
{
AvatarBaseData[] av = m_Database.Get("PrincipalID", principalID.ToString());
- if (av.Length == 0)
- return null;
-
AvatarData ret = new AvatarData();
ret.Data = new Dictionary();
+ if (av.Length == 0)
+ {
+ ret.AvatarType = 1; // SL avatar
+ return ret;
+ }
+
foreach (AvatarBaseData b in av)
{
if (b.Data["Name"] == "AvatarType")
diff --git a/OpenSim/Services/Interfaces/IAvatarService.cs b/OpenSim/Services/Interfaces/IAvatarService.cs
index a029fbc..186871a 100644
--- a/OpenSim/Services/Interfaces/IAvatarService.cs
+++ b/OpenSim/Services/Interfaces/IAvatarService.cs
@@ -190,60 +190,75 @@ namespace OpenSim.Services.Interfaces
AvatarAppearance appearance = new AvatarAppearance(owner);
try
{
- appearance.Serial = Int32.Parse(Data["Serial"]);
+ if (Data.ContainsKey("Serial"))
+ appearance.Serial = Int32.Parse(Data["Serial"]);
// Wearables
- appearance.Wearables[AvatarWearable.BODY].Wear(
- UUID.Parse(Data["BodyItem"]),
- UUID.Parse(Data["BodyAsset"]));
+ if (Data.ContainsKey("BodyItem"))
+ appearance.Wearables[AvatarWearable.BODY].Wear(
+ UUID.Parse(Data["BodyItem"]),
+ UUID.Parse(Data["BodyAsset"]));
+
+ if (Data.ContainsKey("SkinItem"))
+ appearance.Wearables[AvatarWearable.SKIN].Wear(
+ UUID.Parse(Data["SkinItem"]),
+ UUID.Parse(Data["SkinAsset"]));
+
+ if (Data.ContainsKey("HairItem"))
+ appearance.Wearables[AvatarWearable.HAIR].Wear(
+ UUID.Parse(Data["HairItem"]),
+ UUID.Parse(Data["HairAsset"]));
+
+ if (Data.ContainsKey("EyesItem"))
+ appearance.Wearables[AvatarWearable.EYES].Wear(
+ UUID.Parse(Data["EyesItem"]),
+ UUID.Parse(Data["EyesAsset"]));
+
+ if (Data.ContainsKey("ShirtItem"))
+ appearance.Wearables[AvatarWearable.SHIRT].Wear(
+ UUID.Parse(Data["ShirtItem"]),
+ UUID.Parse(Data["ShirtAsset"]));
+
+ if (Data.ContainsKey("PantsItem"))
+ appearance.Wearables[AvatarWearable.PANTS].Wear(
+ UUID.Parse(Data["PantsItem"]),
+ UUID.Parse(Data["PantsAsset"]));
+
+ if (Data.ContainsKey("ShoesItem"))
+ appearance.Wearables[AvatarWearable.SHOES].Wear(
+ UUID.Parse(Data["ShoesItem"]),
+ UUID.Parse(Data["ShoesAsset"]));
+
+ if (Data.ContainsKey("SocksItem"))
+ appearance.Wearables[AvatarWearable.SOCKS].Wear(
+ UUID.Parse(Data["SocksItem"]),
+ UUID.Parse(Data["SocksAsset"]));
+
+ if (Data.ContainsKey("JacketItem"))
+ appearance.Wearables[AvatarWearable.JACKET].Wear(
+ UUID.Parse(Data["JacketItem"]),
+ UUID.Parse(Data["JacketAsset"]));
+
+ if (Data.ContainsKey("GlovesItem"))
+ appearance.Wearables[AvatarWearable.GLOVES].Wear(
+ UUID.Parse(Data["GlovesItem"]),
+ UUID.Parse(Data["GlovesAsset"]));
+
+ if (Data.ContainsKey("UnderShirtItem"))
+ appearance.Wearables[AvatarWearable.UNDERSHIRT].Wear(
+ UUID.Parse(Data["UnderShirtItem"]),
+ UUID.Parse(Data["UnderShirtAsset"]));
+
+ if (Data.ContainsKey("UnderPantsItem"))
+ appearance.Wearables[AvatarWearable.UNDERPANTS].Wear(
+ UUID.Parse(Data["UnderPantsItem"]),
+ UUID.Parse(Data["UnderPantsAsset"]));
+
+ if (Data.ContainsKey("SkirtItem"))
+ appearance.Wearables[AvatarWearable.SKIRT].Wear(
+ UUID.Parse(Data["SkirtItem"]),
+ UUID.Parse(Data["SkirtAsset"]));
- appearance.Wearables[AvatarWearable.SKIN].Wear(
- UUID.Parse(Data["SkinItem"]),
- UUID.Parse(Data["SkinAsset"]));
-
- appearance.Wearables[AvatarWearable.HAIR].Wear(
- UUID.Parse(Data["HairItem"]),
- UUID.Parse(Data["HairAsset"]));
-
- appearance.Wearables[AvatarWearable.EYES].Wear(
- UUID.Parse(Data["EyesItem"]),
- UUID.Parse(Data["EyesAsset"]));
-
- appearance.Wearables[AvatarWearable.SHIRT].Wear(
- UUID.Parse(Data["ShirtItem"]),
- UUID.Parse(Data["ShirtAsset"]));
-
- appearance.Wearables[AvatarWearable.PANTS].Wear(
- UUID.Parse(Data["PantsItem"]),
- UUID.Parse(Data["PantsAsset"]));
-
- appearance.Wearables[AvatarWearable.SHOES].Wear(
- UUID.Parse(Data["ShoesItem"]),
- UUID.Parse(Data["ShoesAsset"]));
-
- appearance.Wearables[AvatarWearable.SOCKS].Wear(
- UUID.Parse(Data["SocksItem"]),
- UUID.Parse(Data["SocksAsset"]));
-
- appearance.Wearables[AvatarWearable.JACKET].Wear(
- UUID.Parse(Data["JacketItem"]),
- UUID.Parse(Data["JacketAsset"]));
-
- appearance.Wearables[AvatarWearable.GLOVES].Wear(
- UUID.Parse(Data["GlovesItem"]),
- UUID.Parse(Data["GlovesAsset"]));
-
- appearance.Wearables[AvatarWearable.UNDERSHIRT].Wear(
- UUID.Parse(Data["UnderShirtItem"]),
- UUID.Parse(Data["UnderShirtAsset"]));
-
- appearance.Wearables[AvatarWearable.UNDERPANTS].Wear(
- UUID.Parse(Data["UnderPantsItem"]),
- UUID.Parse(Data["UnderPantsAsset"]));
-
- appearance.Wearables[AvatarWearable.SKIRT].Wear(
- UUID.Parse(Data["SkirtItem"]),
- UUID.Parse(Data["SkirtAsset"]));
// Attachments
Dictionary attchs = new Dictionary();
--
cgit v1.1
From 63bdfb1e28a9cc13cd94b98f598320e7da25d24f Mon Sep 17 00:00:00 2001
From: Marck
Date: Fri, 29 Oct 2010 11:01:50 +0200
Subject: Clarify comment for configuration option Check4096 and show the
default value.
---
bin/Robust.HG.ini.example | 4 +++-
bin/config-include/StandaloneCommon.ini.example | 4 ++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example
index b81642a..e1627c0 100644
--- a/bin/Robust.HG.ini.example
+++ b/bin/Robust.HG.ini.example
@@ -64,7 +64,9 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
; Realm = "regions"
; AllowDuplicateNames = "True"
- ; Check4096 = "False"
+
+ ;; Perform distance check for the creation of a linked region
+ ; Check4096 = "True"
;; Next, we can specify properties of regions, including default and fallback regions
;; The syntax is: Region_ = ""
diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example
index 2f021d5..1fcf043 100644
--- a/bin/config-include/StandaloneCommon.ini.example
+++ b/bin/config-include/StandaloneCommon.ini.example
@@ -53,8 +53,8 @@
;;--- For MySql region storage (alternative)
;StorageProvider = "OpenSim.Data.MySQL.dll:MySqlRegionData"
- ; If HG, do you want this check on the distance to be performed?
- ; Check4096 = "False"
+ ;; With hypergrid, perform distance check for the creation of a linked region
+ ; Check4096 = true
;; Next, we can specify properties of regions, including default and fallback regions
;; The syntax is: Region_ = ""
--
cgit v1.1
From 45220a6954129a5cb7e162761008b51cb8cc01e4 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 30 Oct 2010 03:01:40 +0100
Subject: minor: remove some old commented out code
---
.../Archiver/InventoryArchiveWriteRequest.cs | 22 ----------------------
1 file changed, 22 deletions(-)
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index 9080e1c..d81703a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -173,28 +173,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
InventoryCollection contents
= m_scene.InventoryService.GetFolderContent(inventoryFolder.Owner, inventoryFolder.ID);
- //List childFolders = inventoryFolder.RequestListOfFolderImpls();
- //List items = inventoryFolder.RequestListOfItems();
-
- /*
- Dictionary identicalFolderNames = new Dictionary();
-
- foreach (InventoryFolderImpl folder in inventories)
- {
- if (!identicalFolderNames.ContainsKey(folder.Name))
- identicalFolderNames[folder.Name] = 0;
- else
- identicalFolderNames[folder.Name] = identicalFolderNames[folder.Name]++;
-
- int folderNameNumber = identicalFolderName[folder.Name];
-
- SaveInvDir(
- folder,
- string.Format(
- "{0}{1}{2}/",
- path, ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, folderNameNumber));
- }
- */
foreach (InventoryFolderBase childFolder in contents.Folders)
{
--
cgit v1.1
From adef6b04cb3e333df66bf2393eec9d25b2380dfd Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sat, 30 Oct 2010 02:52:59 +0100
Subject: Logins work now, but avatars are green ugly gnomes.
---
OpenSim/Framework/AgentCircuitData.cs | 2 --
1 file changed, 2 deletions(-)
diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs
index cd30c3d..7b14ac7 100644
--- a/OpenSim/Framework/AgentCircuitData.cs
+++ b/OpenSim/Framework/AgentCircuitData.cs
@@ -212,8 +212,6 @@ namespace OpenSim.Framework
args["mac"] = OSD.FromString(Mac);
args["id0"] = OSD.FromString(Id0);
- // Eventually this code should be deprecated, use full appearance
- // packing in packed_appearance
if (Appearance != null)
{
args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
--
cgit v1.1
From d0895a4a3ae8a60764db4ada43c194fddc90ddf4 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sat, 30 Oct 2010 03:28:59 +0100
Subject: On first login, Ruth is back now. Strangely, inventory items are
created for tattoo and alpha layers. Any change of appearance in the sim
makes the green gnome reappear on next login. Progress of sorts.
---
OpenSim/Framework/AvatarAppearance.cs | 4 ----
1 file changed, 4 deletions(-)
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 1e003f7..f0d8335 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -111,10 +111,6 @@ namespace OpenSim.Framework
SetDefaultParams();
SetHeight();
- m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
- for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++ )
- m_wearables[i] = new AvatarWearable();
-
m_attachments = new Dictionary>();
}
--
cgit v1.1
From 4a24bf74d93924b688fcd5246218083108c93c01 Mon Sep 17 00:00:00 2001
From: Teravus Ovares (Dan Olivares)
Date: Sat, 30 Oct 2010 02:06:43 -0400
Subject: * Thank you lkalif for fixing the {array[array[]]} json OSD
serialization issue. * This is libOMV SVN revision 3463.
---
bin/OpenMetaverse.Rendering.Meshmerizer.dll | Bin 20480 -> 20480 bytes
bin/OpenMetaverse.StructuredData.XML | 148 +-
bin/OpenMetaverse.StructuredData.dll | Bin 102400 -> 102400 bytes
bin/OpenMetaverse.XML | 35764 +++++++++++++-------------
bin/OpenMetaverse.dll | Bin 1716224 -> 1716224 bytes
bin/OpenMetaverseTypes.XML | 3578 +--
bin/OpenMetaverseTypes.dll | Bin 114688 -> 114688 bytes
7 files changed, 19745 insertions(+), 19745 deletions(-)
diff --git a/bin/OpenMetaverse.Rendering.Meshmerizer.dll b/bin/OpenMetaverse.Rendering.Meshmerizer.dll
index f89ac5a..6139a9d 100755
Binary files a/bin/OpenMetaverse.Rendering.Meshmerizer.dll and b/bin/OpenMetaverse.Rendering.Meshmerizer.dll differ
diff --git a/bin/OpenMetaverse.StructuredData.XML b/bin/OpenMetaverse.StructuredData.XML
index f5842c8..897a330 100644
--- a/bin/OpenMetaverse.StructuredData.XML
+++ b/bin/OpenMetaverse.StructuredData.XML
@@ -15,202 +15,202 @@
-
+
-
+ Deserializes binary LLSD
-
-
+ Serialized data
+ OSD containting deserialized data
-
+
-
+ Deserializes binary LLSD
-
-
+ Stream to read the data from
+ OSD containting deserialized data
-
+
-
+
-
+
-
+
-
-
+
-
+
-
-
+
+
+
-
+
-
-
+
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
+
-
+
-
-
-
+
-
+
-
-
+
-
+
-
-
+
-
+
- Deserializes binary LLSD
+
- Serialized data
- OSD containting deserialized data
+
+
-
+
- Deserializes binary LLSD
+
- Stream to read the data from
- OSD containting deserialized data
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
-
+
-
+
-
-
+
-
+
-
-
+
+
-
+
-
+
+
+
-
+
-
+
+
-
+
-
-
+
+
+
diff --git a/bin/OpenMetaverse.StructuredData.dll b/bin/OpenMetaverse.StructuredData.dll
index 33b19ca..e3b729c 100644
Binary files a/bin/OpenMetaverse.StructuredData.dll and b/bin/OpenMetaverse.StructuredData.dll differ
diff --git a/bin/OpenMetaverse.XML b/bin/OpenMetaverse.XML
index f5bda4b..6e57fed 100644
--- a/bin/OpenMetaverse.XML
+++ b/bin/OpenMetaverse.XML
@@ -4,3609 +4,3275 @@
OpenMetaverse
-
-
- Singleton logging class for the entire library
-
+
+ =
-
- log4net logging engine
+
+ Number of times we've received an unknown CAPS exception in series.
-
-
- Default constructor
-
+
+ For exponential backoff on error.
-
+
- Send a log message to the logging engine
+ Add a custom decoder callback
- The log message
- The severity of the log entry
+ The key of the field to decode
+ The custom decode handler
-
+
- Send a log message to the logging engine
+ Remove a custom decoder callback
- The log message
- The severity of the log entry
- Instance of the client
+ The key of the field to decode
+ The custom decode handler
-
+
- Send a log message to the logging engine
+ Creates a formatted string containing the values of a Packet
- The log message
- The severity of the log entry
- Exception that was raised
+ The Packet
+ A formatted string of values of the nested items in the Packet object
-
+
- Send a log message to the logging engine
+ Decode an IMessage object into a beautifully formatted string
- The log message
- The severity of the log entry
- Instance of the client
- Exception that was raised
+ The IMessage object
+ Recursion level (used for indenting)
+ A formatted string containing the names and values of the source object
-
+
- If the library is compiled with DEBUG defined, an event will be
- fired if an OnLogMessage
handler is registered and the
- message will be sent to the logging engine
+ A custom decoder callback
- The message to log at the DEBUG level to the
- current logging engine
+ The key of the object
+ the data to decode
+ A string represending the fieldData
-
+
- If the library is compiled with DEBUG defined and
- GridClient.Settings.DEBUG
is true, an event will be
- fired if an OnLogMessage
handler is registered and the
- message will be sent to the logging engine
+ Access to the data server which allows searching for land, events, people, etc
- The message to log at the DEBUG level to the
- current logging engine
- Instance of the client
-
- Triggered whenever a message is logged. If this is left
- null, log messages will go to the console
+
+ The event subscribers. null if no subcribers
-
-
- Callback used for client apps to receive log messages from
- the library
-
- Data being logged
- The severity of the log entry from
+
+ Raises the EventInfoReply event
+ An EventInfoReplyEventArgs object containing the
+ data returned from the data server
-
-
- This is used to get a list of audio devices that can be used for capture (input) of voice.
-
-
+
+ Thread sync lock object
-
-
- This is used to get a list of audio devices that can be used for render (playback) of voice.
-
+
+ The event subscribers. null if no subcribers
-
-
- This command is used to select the render device.
-
- The name of the device as returned by the Aux.GetRenderDevices command.
+
+ Raises the DirEventsReply event
+ An DirEventsReplyEventArgs object containing the
+ data returned from the data server
-
-
- This command is used to select the capture device.
-
- The name of the device as returned by the Aux.GetCaptureDevices command.
+
+ Thread sync lock object
-
-
- This command is used to start the audio capture process which will cause
- AuxAudioProperty Events to be raised. These events can be used to display a
- microphone VU meter for the currently selected capture device. This command
- should not be issued if the user is on a call.
-
- (unused but required)
-
+
+ The event subscribers. null if no subcribers
-
-
- This command is used to stop the audio capture process.
-
-
+
+ Raises the PlacesReply event
+ A PlacesReplyEventArgs object containing the
+ data returned from the data server
-
-
- This command is used to set the mic volume while in the audio tuning process.
- Once an acceptable mic level is attained, the application must issue a
- connector set mic volume command to have that level be used while on voice
- calls.
-
- the microphone volume (-100 to 100 inclusive)
-
+
+ Thread sync lock object
-
-
- This command is used to set the speaker volume while in the audio tuning
- process. Once an acceptable speaker level is attained, the application must
- issue a connector set speaker volume command to have that level be used while
- on voice calls.
-
- the speaker volume (-100 to 100 inclusive)
-
+
+ The event subscribers. null if no subcribers
-
-
- This is used to initialize and stop the Connector as a whole. The Connector
- Create call must be completed successfully before any other requests are made
- (typically during application initialization). The shutdown should be called
- when the application is shutting down to gracefully release resources
-
- A string value indicting the Application name
- URL for the management server
- LoggingSettings
-
-
+
+ Raises the DirPlacesReply event
+ A DirPlacesReplyEventArgs object containing the
+ data returned from the data server
-
-
- Shutdown Connector -- Should be called when the application is shutting down
- to gracefully release resources
-
- Handle returned from successful Connector ‘create’ request
+
+ Thread sync lock object
-
-
- Mute or unmute the microphone
-
- Handle returned from successful Connector ‘create’ request
- true (mute) or false (unmute)
+
+ The event subscribers. null if no subcribers
-
-
- Mute or unmute the speaker
-
- Handle returned from successful Connector ‘create’ request
- true (mute) or false (unmute)
+
+ Raises the DirClassifiedsReply event
+ A DirClassifiedsReplyEventArgs object containing the
+ data returned from the data server
-
-
- Set microphone volume
-
- Handle returned from successful Connector ‘create’ request
- The level of the audio, a number between -100 and 100 where
- 0 represents ‘normal’ speaking volume
+
+ Thread sync lock object
-
-
- Set local speaker volume
-
- Handle returned from successful Connector ‘create’ request
- The level of the audio, a number between -100 and 100 where
- 0 represents ‘normal’ speaking volume
+
+ The event subscribers. null if no subcribers
-
-
- Starts a thread that keeps the daemon running
-
-
-
+
+ Raises the DirGroupsReply event
+ A DirGroupsReplyEventArgs object containing the
+ data returned from the data server
-
-
- Stops the daemon and the thread keeping it running
-
+
+ Thread sync lock object
-
-
-
-
-
-
-
+
+ The event subscribers. null if no subcribers
-
-
- Create a Session
- Sessions typically represent a connection to a media session with one or more
- participants. This is used to generate an ‘outbound’ call to another user or
- channel. The specifics depend on the media types involved. A session handle is
- required to control the local user functions within the session (or remote
- users if the current account has rights to do so). Currently creating a
- session automatically connects to the audio media, there is no need to call
- Session.Connect at this time, this is reserved for future use.
-
- Handle returned from successful Connector ‘create’ request
- This is the URI of the terminating point of the session (ie who/what is being called)
- This is the display name of the entity being called (user or channel)
- Only needs to be supplied when the target URI is password protected
- This indicates the format of the password as passed in. This can either be
- “ClearText” or “SHA1UserName”. If this element does not exist, it is assumed to be “ClearText”. If it is
- “SHA1UserName”, the password as passed in is the SHA1 hash of the password and username concatenated together,
- then base64 encoded, with the final “=” character stripped off.
-
-
-
+
+ Raises the DirPeopleReply event
+ A DirPeopleReplyEventArgs object containing the
+ data returned from the data server
-
-
- Used to accept a call
-
- SessionHandle such as received from SessionNewEvent
- "default"
-
+
+ Thread sync lock object
-
-
- This command is used to start the audio render process, which will then play
- the passed in file through the selected audio render device. This command
- should not be issued if the user is on a call.
-
- The fully qualified path to the sound file.
- True if the file is to be played continuously and false if it is should be played once.
-
+
+ The event subscribers. null if no subcribers
-
+
+ Raises the DirLandReply event
+ A DirLandReplyEventArgs object containing the
+ data returned from the data server
+
+
+ Thread sync lock object
+
+
- This command is used to stop the audio render process.
+ Constructs a new instance of the DirectoryManager class
- The fully qualified path to the sound file issued in the start render command.
-
+ An instance of GridClient
-
+
- This is used to ‘end’ an established session (i.e. hang-up or disconnect).
+ Query the data server for a list of classified ads containing the specified string.
+ Defaults to searching for classified placed in any category, and includes PG, Adult and Mature
+ results.
+
+ Responses are sent 16 per response packet, there is no way to know how many results a query reply will contain however assuming
+ the reply packets arrived ordered, a response with less than 16 entries would indicate all results have been received
+
+ The event is raised when a response is received from the simulator
- Handle returned from successful Session ‘create’ request or a SessionNewEvent
-
+ A string containing a list of keywords to search for
+ A UUID to correlate the results when the event is raised
-
+
- Set the combined speaking and listening position in 3D space.
+ Query the data server for a list of classified ads which contain specified keywords (Overload)
+
+ The event is raised when a response is received from the simulator
- Handle returned from successful Session ‘create’ request or a SessionNewEvent
- Speaking position
- Listening position
-
+ A string containing a list of keywords to search for
+ The category to search
+ A set of flags which can be ORed to modify query options
+ such as classified maturity rating.
+ A UUID to correlate the results when the event is raised
+
+ Search classified ads containing the key words "foo" and "bar" in the "Any" category that are either PG or Mature
+
+ UUID searchID = StartClassifiedSearch("foo bar", ClassifiedCategories.Any, ClassifiedQueryFlags.PG | ClassifiedQueryFlags.Mature);
+
+
+
+ Responses are sent 16 at a time, there is no way to know how many results a query reply will contain however assuming
+ the reply packets arrived ordered, a response with less than 16 entries would indicate all results have been received
+
-
+
- Set User Volume for a particular user. Does not affect how other users hear that user.
+ Starts search for places (Overloaded)
+
+ The event is raised when a response is received from the simulator
- Handle returned from successful Session ‘create’ request or a SessionNewEvent
-
- The level of the audio, a number between -100 and 100 where 0 represents ‘normal’ speaking volume
-
+ Search text
+ Each request is limited to 100 places
+ being returned. To get the first 100 result entries of a request use 0,
+ from 100-199 use 1, 200-299 use 2, etc.
+ A UUID to correlate the results when the event is raised
-
+
- Start up the Voice service.
+ Queries the dataserver for parcels of land which are flagged to be shown in search
+
+ The event is raised when a response is received from the simulator
+ A string containing a list of keywords to search for separated by a space character
+ A set of flags which can be ORed to modify query options
+ such as classified maturity rating.
+ The category to search
+ Each request is limited to 100 places
+ being returned. To get the first 100 result entries of a request use 0,
+ from 100-199 use 1, 200-299 use 2, etc.
+ A UUID to correlate the results when the event is raised
+
+ Search places containing the key words "foo" and "bar" in the "Any" category that are either PG or Adult
+
+ UUID searchID = StartDirPlacesSearch("foo bar", DirFindFlags.DwellSort | DirFindFlags.IncludePG | DirFindFlags.IncludeAdult, ParcelCategory.Any, 0);
+
+
+
+ Additional information on the results can be obtained by using the ParcelManager.InfoRequest method
+
-
+
- Handle miscellaneous request status
+ Starts a search for land sales using the directory
+
+ The event is raised when a response is received from the simulator
-
-
- ///If something goes wrong, we log it.
+ What type of land to search for. Auction,
+ estate, mainland, "first land", etc
+ The OnDirLandReply event handler must be registered before
+ calling this function. There is no way to determine how many
+ results will be returned, or how many times the callback will be
+ fired other than you won't get more than 100 total parcels from
+ each query.
-
+
- Cleanup oject resources
+ Starts a search for land sales using the directory
+
+ The event is raised when a response is received from the simulator
+ What type of land to search for. Auction,
+ estate, mainland, "first land", etc
+ Maximum price to search for
+ Maximum area to search for
+ Each request is limited to 100 parcels
+ being returned. To get the first 100 parcels of a request use 0,
+ from 100-199 use 1, 200-299 use 2, etc.
+ The OnDirLandReply event handler must be registered before
+ calling this function. There is no way to determine how many
+ results will be returned, or how many times the callback will be
+ fired other than you won't get more than 100 total parcels from
+ each query.
-
+
- Request voice cap when changing regions
+ Send a request to the data server for land sales listings
+
+ Flags sent to specify query options
+
+ Available flags:
+ Specify the parcel rating with one or more of the following:
+ IncludePG IncludeMature IncludeAdult
+
+ Specify the field to pre sort the results with ONLY ONE of the following:
+ PerMeterSort NameSort AreaSort PricesSort
+
+ Specify the order the results are returned in, if not specified the results are pre sorted in a Descending Order
+ SortAsc
+
+ Specify additional filters to limit the results with one or both of the following:
+ LimitByPrice LimitByArea
+
+ Flags can be combined by separating them with the | (pipe) character
+
+ Additional details can be found in
+
+ What type of land to search for. Auction,
+ Estate or Mainland
+ Maximum price to search for when the
+ DirFindFlags.LimitByPrice flag is specified in findFlags
+ Maximum area to search for when the
+ DirFindFlags.LimitByArea flag is specified in findFlags
+ Each request is limited to 100 parcels
+ being returned. To get the first 100 parcels of a request use 0,
+ from 100-199 use 100, 200-299 use 200, etc.
+ The event will be raised with the response from the simulator
+
+ There is no way to determine how many results will be returned, or how many times the callback will be
+ fired other than you won't get more than 100 total parcels from
+ each reply.
+
+ Any land set for sale to either anybody or specific to the connected agent will be included in the
+ results if the land is included in the query
+
+
+ // request all mainland, any maturity rating that is larger than 512 sq.m
+ StartLandSearch(DirFindFlags.SortAsc | DirFindFlags.PerMeterSort | DirFindFlags.LimitByArea | DirFindFlags.IncludePG | DirFindFlags.IncludeMature | DirFindFlags.IncludeAdult, SearchTypeFlags.Mainland, 0, 512, 0);
+
-
+
- Handle a change in session state
+ Search for Groups
+ The name or portion of the name of the group you wish to search for
+ Start from the match number
+
-
+
- Close a voice session
+ Search for Groups
-
+ The name or portion of the name of the group you wish to search for
+ Start from the match number
+ Search flags
+
-
+
- Locate a Session context from its handle
+ Search the People directory for other avatars
- Creates the session context if it does not exist.
+ The name or portion of the name of the avatar you wish to search for
+
+
-
+
- Handle completion of main voice cap request.
+ Search Places for parcels of land you personally own
-
-
-
-
+
- Daemon has started so connect to it.
+ Searches Places for land owned by the specified group
+ ID of the group you want to recieve land list for (You must be a member of the group)
+ Transaction (Query) ID which can be associated with results from your request.
-
+
- The daemon TCP connection is open.
+ Search the Places directory for parcels that are listed in search and contain the specified keywords
+ A string containing the keywords to search for
+ Transaction (Query) ID which can be associated with results from your request.
-
+
- Handle creation of the Connector.
+ Search Places - All Options
+ One of the Values from the DirFindFlags struct, ie: AgentOwned, GroupOwned, etc.
+ One of the values from the SearchCategory Struct, ie: Any, Linden, Newcomer
+ A string containing a list of keywords to search for separated by a space character
+ String Simulator Name to search in
+ LLUID of group you want to recieve results for
+ Transaction (Query) ID which can be associated with results from your request.
+ Transaction (Query) ID which can be associated with results from your request.
-
+
- Handle response to audio output device query
+ Search All Events with specifid searchText in all categories, includes PG, Mature and Adult
+ A string containing a list of keywords to search for separated by a space character
+ Each request is limited to 100 entries
+ being returned. To get the first group of entries of a request use 0,
+ from 100-199 use 100, 200-299 use 200, etc.
+ UUID of query to correlate results in callback.
-
+
- Handle response to audio input device query
+ Search Events
-
-
-
- Set voice channel for new parcel
-
+ A string containing a list of keywords to search for separated by a space character
+ One or more of the following flags: DateEvents, IncludePG, IncludeMature, IncludeAdult
+ from the Enum
+ Multiple flags can be combined by separating the flags with the | (pipe) character
+ "u" for in-progress and upcoming events, -or- number of days since/until event is scheduled
+ For example "0" = Today, "1" = tomorrow, "2" = following day, "-1" = yesterday, etc.
+ Each request is limited to 100 entries
+ being returned. To get the first group of entries of a request use 0,
+ from 100-199 use 100, 200-299 use 200, etc.
+ EventCategory event is listed under.
+ UUID of query to correlate results in callback.
-
-
- Request info from a parcel capability Uri.
-
-
-
-
-
- Receive parcel voice cap
-
-
-
-
-
-
-
- Tell Vivox where we are standing
-
- This has to be called when we move or turn.
-
-
-
- Start and stop updating out position.
-
-
-
-
-
- This is used to login a specific user account(s). It may only be called after
- Connector initialization has completed successfully
-
- Handle returned from successful Connector ‘create’ request
- User's account name
- User's account password
- Values may be “AutoAnswer” or “VerifyAnswer”
- ""
- This is an integer that specifies how often
- the daemon will send participant property events while in a channel. If this is not set
- the default will be “on state change”, which means that the events will be sent when
- the participant starts talking, stops talking, is muted, is unmuted.
- The valid values are:
- 0 – Never
- 5 – 10 times per second
- 10 – 5 times per second
- 50 – 1 time per second
- 100 – on participant state change (this is the default)
- false
-
-
-
-
- This is used to logout a user session. It should only be called with a valid AccountHandle.
-
- Handle returned from successful Connector ‘login’ request
-
-
-
-
- Event for most mundane request reposnses.
-
+
+ Requests Event Details
+ ID of Event returned from the method
-
- Response to Connector.Create request
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
- Response to Aux.GetCaptureDevices request
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
- Response to Aux.GetRenderDevices request
+
+ Process an incoming event message
+ The Unique Capabilities Key
+ The event message containing the data
+ The simulator the message originated from
-
- Audio Properties Events are sent after audio capture is started.
- These events are used to display a microphone VU meter
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
- Response to Account.Login request
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
- This event message is sent whenever the login state of the
- particular Account has transitioned from one value to another
+
+ Process an incoming event message
+ The Unique Capabilities Key
+ The event message containing the data
+ The simulator the message originated from
-
-
- List of audio input devices
-
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
-
- List of audio output devices
-
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
-
- Set audio test mode
-
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
- Enable logging
+
+ Process an incoming packet and raise the appropriate events
+ The sender
+ The EventArgs object containing the packet data
-
- The folder where any logs will be created
+
+ Raised when the data server responds to a request.
-
- This will be prepended to beginning of each log file
+
+ Raised when the data server responds to a request.
-
- The suffix or extension to be appended to each log file
+
+ Raised when the data server responds to a request.
-
-
- 0: NONE - No logging
- 1: ERROR - Log errors only
- 2: WARNING - Log errors and warnings
- 3: INFO - Log errors, warnings and info
- 4: DEBUG - Log errors, warnings, info and debug
-
+
+ Raised when the data server responds to a request.
-
-
- Constructor for default logging settings
-
+
+ Raised when the data server responds to a request.
-
- Audio Properties Events are sent after audio capture is started. These events are used to display a microphone VU meter
+
+ Raised when the data server responds to a request.
-
- Positional vector of the users position
+
+ Raised when the data server responds to a request.
-
- Velocity vector of the position
+
+ Raised when the data server responds to a request.
-
- At Orientation (X axis) of the position
+
+ Classified Ad categories
-
- Up Orientation (Y axis) of the position
+
+ Classified is listed in the Any category
-
- Left Orientation (Z axis) of the position
+
+ Classified is shopping related
-
-
- The type of bump-mapping applied to a face
-
+
+ Classified is
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+ Event Categories
+
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
- The level of shininess applied to a face
-
-
-
+
-
+
-
+
-
+
-
+
- The texture mapping style used for a face
+ Query Flags used in many of the DirectoryManager methods to specify which query to execute and how to return the results.
+
+ Flags can be combined using the | (pipe) character, not all flags are available in all queries
-
-
+
+ Query the People database
-
+
-
+
-
-
+
+ Query the Groups database
-
-
- Flags in the TextureEntry block that describe which properties are
- set
-
+
+ Query the Events database
-
-
+
+ Query the land holdings database for land owned by the currently connected agent
-
+
-
-
+
+ Query the land holdings database for land which is owned by a Group
-
-
+
+ Specifies the query should pre sort the results based upon traffic
+ when searching the Places database
-
+
-
+
-
+
-
+
-
-
+
+ Specifies the query should pre sort the results in an ascending order when searching the land sales database.
+ This flag is only used when searching the land sales database
-
-
+
+ Specifies the query should pre sort the results using the SalePrice field when searching the land sales database.
+ This flag is only used when searching the land sales database
-
-
+
+ Specifies the query should pre sort the results by calculating the average price/sq.m (SalePrice / Area) when searching the land sales database.
+ This flag is only used when searching the land sales database
-
-
+
+ Specifies the query should pre sort the results using the ParcelSize field when searching the land sales database.
+ This flag is only used when searching the land sales database
-
-
- Particle system specific enumerators, flags and methods.
-
+
+ Specifies the query should pre sort the results using the Name field when searching the land sales database.
+ This flag is only used when searching the land sales database
-
-
+
+ When set, only parcels less than the specified Price will be included when searching the land sales database.
+ This flag is only used when searching the land sales database
-
-
+
+ When set, only parcels greater than the specified Size will be included when searching the land sales database.
+ This flag is only used when searching the land sales database
-
+
-
+
-
-
+
+ Include PG land in results. This flag is used when searching both the Groups, Events and Land sales databases
-
-
+
+ Include Mature land in results. This flag is used when searching both the Groups, Events and Land sales databases
-
-
+
+ Include Adult land in results. This flag is used when searching both the Groups, Events and Land sales databases
-
+
-
-
+
+
+ Land types to search dataserver for
+
-
- Foliage type for this primitive. Only applicable if this
- primitive is foliage
+
+ Search Auction, Mainland and Estate
-
- Unknown
+
+ Land which is currently up for auction
-
-
+
+ Parcels which are on the mainland (Linden owned) continents
-
-
+
+ Parcels which are on privately owned simulators
-
-
+
+
+ The content rating of the event
+
-
-
+
+ Event is PG
-
-
+
+ Event is Mature
-
-
+
+ Event is Adult
-
-
+
+
+ Classified Ad Options
+
+ There appear to be two formats the flags are packed in.
+ This set of flags is for the newer style
-
+
-
+
-
+
-
+
-
+
-
- Identifies the owner if audio or a particle system is
- active
+
+
+ Classified ad query options
+
-
-
+
+ Include all ads in results
-
-
+
+ Include PG ads in results
-
-
+
+ Include Mature ads in results
-
-
+
+ Include Adult ads in results
-
-
+
+
+ The For Sale flag in PlacesReplyData
+
-
-
+
+ Parcel is not listed for sale
-
-
+
+ Parcel is For Sale
-
-
+
+
+ A classified ad on the grid
+
-
-
+
+ UUID for this ad, useful for looking up detailed
+ information about it
-
-
+
+ The title of this classified ad
-
-
+
+ Flags that show certain options applied to the classified
-
-
+
+ Creation date of the ad
-
-
- Default constructor
-
+
+ Expiration date of the ad
-
-
- Packs PathTwist, PathTwistBegin, PathRadiusOffset, and PathSkew
- parameters in to signed eight bit values
-
- Floating point parameter to pack
- Signed eight bit value containing the packed parameter
+
+ Price that was paid for this ad
-
-
- Unpacks PathTwist, PathTwistBegin, PathRadiusOffset, and PathSkew
- parameters from signed eight bit integers to floating point values
-
- Signed eight bit value to unpack
- Unpacked floating point value
+
+ Print the struct data as a string
+ A string containing the field name, and field value
-
+
- Current version of the media data for the prim
+ A parcel retrieved from the dataserver such as results from the
+ "For-Sale" listings or "Places" Search
-
-
- Array of media entries indexed by face number
-
+
+ The unique dataserver parcel ID
+ This id is used to obtain additional information from the entry
+ by using the method
-
- Uses basic heuristics to estimate the primitive shape
+
+ A string containing the name of the parcel
-
-
- Texture animation mode
-
+
+ The size of the parcel
+ This field is not returned for Places searches
-
- Disable texture animation
+
+ The price of the parcel
+ This field is not returned for Places searches
-
- Enable texture animation
+
+ If True, this parcel is flagged to be auctioned
-
- Loop when animating textures
+
+ If true, this parcel is currently set for sale
-
- Animate in reverse direction
+
+ Parcel traffic
-
- Animate forward then reverse
+
+ Print the struct data as a string
+ A string containing the field name, and field value
-
- Slide texture smoothly instead of frame-stepping
+
+
+ An Avatar returned from the dataserver
+
-
- Rotate texture instead of using frames
+
+ Online status of agent
+ This field appears to be obsolete and always returns false
-
- Scale texture instead of using frames
+
+ The agents first name
-
-
- A single textured face. Don't instantiate this class yourself, use the
- methods in TextureEntry
-
+
+ The agents last name
-
-
- Contains the definition for individual faces
-
-
+
+ The agents
-
+
+ Print the struct data as a string
+ A string containing the field name, and field value
+
+
-
+ Response to a "Groups" Search
-
-
-
+
+ The Group ID
-
-
+
+ The name of the group
-
-
+
+ The current number of members
-
-
+
+ Print the struct data as a string
+ A string containing the field name, and field value
-
-
+
+
+ Parcel information returned from a request
+
+ Represents one of the following:
+ A parcel of land on the grid that has its Show In Search flag set
+ A parcel of land owned by the agent making the request
+ A parcel of land owned by a group the agent making the request is a member of
+
+
+ In a request for Group Land, the First record will contain an empty record
+
+ Note: This is not the same as searching the land for sale data source
+
-
-
+
+ The ID of the Agent of Group that owns the parcel
-
-
+
+ The name
-
-
+
+ The description
-
-
+
+ The Size of the parcel
-
-
+
+ The billable Size of the parcel, for mainland
+ parcels this will match the ActualArea field. For Group owned land this will be 10 percent smaller
+ than the ActualArea. For Estate land this will always be 0
-
- In the future this will specify whether a webpage is
- attached to this face
+
+ Indicates the ForSale status of the parcel
-
-
+
+ The Gridwide X position
-
-
- Represents all of the texturable faces for an object
-
- Grid objects have infinite faces, with each face
- using the properties of the default face unless set otherwise. So if
- you have a TextureEntry with a default texture uuid of X, and face 18
- has a texture UUID of Y, every face would be textured with X except for
- face 18 that uses Y. In practice however, primitives utilize a maximum
- of nine faces
+
+ The Gridwide Y position
-
-
+
+ The Z position of the parcel, or 0 if no landing point set
-
-
+
+ The name of the Region the parcel is located in
-
-
- Constructor that takes a default texture UUID
-
- Texture UUID to use as the default texture
+
+ The Asset ID of the parcels Snapshot texture
-
-
- Constructor that takes a TextureEntryFace
for the
- default face
-
- Face to use as the default face
+
+ The calculated visitor traffic
-
-
- Constructor that creates the TextureEntry class from a byte array
-
- Byte array containing the TextureEntry field
- Starting position of the TextureEntry field in
- the byte array
- Length of the TextureEntry field, in bytes
+
+ The billing product SKU
+ Known values are:
+
+ - 023Mainland / Full Region
+ - 024Estate / Full Region
+ - 027Estate / Openspace
+ - 029Estate / Homestead
+ - 129Mainland / Homestead (Linden Owned)
+
+
-
-
- This will either create a new face if a custom face for the given
- index is not defined, or return the custom face for that index if
- it already exists
-
- The index number of the face to create or
- retrieve
- A TextureEntryFace containing all the properties for that
- face
+
+ No longer used, will always be 0
-
-
-
-
-
-
+
+ Get a SL URL for the parcel
+ A string, containing a standard SLURL
-
-
-
-
-
+
+ Print the struct data as a string
+ A string containing the field name, and field value
-
+
-
+ An "Event" Listing summary
-
-
-
-
-
-
-
-
-
- Controls the texture animation of a particular prim
-
-
-
-
+
+ The ID of the event creator
-
-
+
+ The name of the event
-
-
+
+ The events ID
-
-
+
+ A string containing the short date/time the event will begin
-
-
+
+ The event start time in Unixtime (seconds since epoch)
-
-
+
+ The events maturity rating
-
-
+
+ Print the struct data as a string
+ A string containing the field name, and field value
-
+
-
+ The details of an "Event"
-
-
-
-
-
-
-
+
+ The events ID
-
-
- Complete structure for the particle system
-
+
+ The ID of the event creator
-
- Particle Flags
- There appears to be more data packed in to this area
- for many particle systems. It doesn't appear to be flag values
- and serialization breaks unless there is a flag for every
- possible bit so it is left as an unsigned integer
+
+ The name of the event
-
- pattern of particles
+
+ The category
-
- A representing the maximimum age (in seconds) particle will be displayed
- Maximum value is 30 seconds
+
+ The events description
-
- A representing the number of seconds,
- from when the particle source comes into view,
- or the particle system's creation, that the object will emits particles;
- after this time period no more particles are emitted
+
+ The short date/time the event will begin
-
- A in radians that specifies where particles will not be created
+
+ The event start time in Unixtime (seconds since epoch) UTC adjusted
-
- A in radians that specifies where particles will be created
+
+ The length of the event in minutes
-
- A representing the number of seconds between burts.
+
+ 0 if no cover charge applies
-
- A representing the number of meters
- around the center of the source where particles will be created.
+
+ The cover charge amount in L$ if applicable
-
- A representing in seconds, the minimum speed between bursts of new particles
- being emitted
+
+ The name of the region where the event is being held
-
- A representing in seconds the maximum speed of new particles being emitted.
+
+ The gridwide location of the event
-
- A representing the maximum number of particles emitted per burst
+
+ The maturity rating
-
- A which represents the velocity (speed) from the source which particles are emitted
+
+ Get a SL URL for the parcel where the event is hosted
+ A string, containing a standard SLURL
-
- A which represents the Acceleration from the source which particles are emitted
+
+ Print the struct data as a string
+ A string containing the field name, and field value
-
- The Key of the texture displayed on the particle
+
+ Contains the Event data returned from the data server from an EventInfoRequest
-
- The Key of the specified target object or avatar particles will follow
+
+ Construct a new instance of the EventInfoReplyEventArgs class
+ A single EventInfo object containing the details of an event
-
- Flags of particle from
+
+
+ A single EventInfo object containing the details of an event
+
-
- Max Age particle system will emit particles for
+
+ Contains the "Event" detail data returned from the data server
-
- The the particle has at the beginning of its lifecycle
+
+ Construct a new instance of the DirEventsReplyEventArgs class
+ The ID of the query returned by the data server.
+ This will correlate to the ID returned by the method
+ A list containing the "Events" returned by the search query
-
- The the particle has at the ending of its lifecycle
+
+ The ID returned by
-
- A that represents the starting X size of the particle
- Minimum value is 0, maximum value is 4
+
+ A list of "Events" returned by the data server
-
- A that represents the starting Y size of the particle
- Minimum value is 0, maximum value is 4
+
+ Contains the "Event" list data returned from the data server
-
- A that represents the ending X size of the particle
- Minimum value is 0, maximum value is 4
+
+ Construct a new instance of PlacesReplyEventArgs class
+ The ID of the query returned by the data server.
+ This will correlate to the ID returned by the method
+ A list containing the "Places" returned by the data server query
-
- A that represents the ending Y size of the particle
- Minimum value is 0, maximum value is 4
+
+ The ID returned by
-
-
- Decodes a byte[] array into a ParticleSystem Object
-
- ParticleSystem object
- Start position for BitPacker
+
+ A list of "Places" returned by the data server
-
-
- Generate byte[] array from particle data
-
- Byte array
+
+ Contains the places data returned from the data server
-
-
- Particle source pattern
-
+
+ Construct a new instance of the DirPlacesReplyEventArgs class
+ The ID of the query returned by the data server.
+ This will correlate to the ID returned by the method
+ A list containing land data returned by the data server
-
- None
+
+ The ID returned by