From 9b7c99f0cfd8fbcd3ce31e0be6fa68f5bedef78b Mon Sep 17 00:00:00 2001
From: John Hurliman
Date: Wed, 29 Sep 2010 14:24:32 -0700
Subject: Made IGridUserService.SetLastPosition() more flexible to allow
 different possible implementations. This doesn't change any behavior or any
 Robust code, but it simplifies the SimianGrid connector by using the standard
 OpenSim interface for setting last position now

---
 .../ServiceConnectorsOut/GridUser/ActivityDetector.cs      |  9 +++++++--
 .../GridUser/LocalGridUserServiceConnector.cs              |  4 ++--
 .../GridUser/RemoteGridUserServiceConnector.cs             |  4 ++--
 .../Server/Handlers/GridUser/GridUserServerPostHandler.cs  |  2 +-
 .../Connectors/GridUser/GridUserServiceConnector.cs        |  2 +-
 .../Connectors/SimianGrid/SimianActivityDetector.cs        |  8 ++++----
 .../SimianGrid/SimianPresenceServiceConnector.cs           |  6 ------
 OpenSim/Services/Interfaces/IGridUserService.cs            | 14 ++++++++++++--
 OpenSim/Services/UserAccountService/GridUserService.cs     |  2 +-
 9 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
index 83c8eac..116a1dc 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
@@ -69,9 +69,14 @@ 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);
+            UUID sessionID = UUID.Zero;
+
+            IClientAPI client;
+            if (m_aScene.TryGetClient(sp.UUID, out client))
+                sessionID = client.SessionId;
 
-            m_GridUserService.SetLastPosition(sp.UUID.ToString(), sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
+            m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
+            m_GridUserService.SetLastPosition(sp.UUID.ToString(), sessionID, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
         }
 
         public void OnNewClient(IClientAPI client)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
index d914a57..76e030f 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
@@ -162,9 +162,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
             return m_GridUserService.SetHome(userID, homeID, homePosition, homeLookAt);
         }
 
-        public bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+        public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
         {
-            return m_GridUserService.SetLastPosition(userID, regionID, lastPosition, lastLookAt);
+            return m_GridUserService.SetLastPosition(userID, sessionID, regionID, lastPosition, lastLookAt);
         }
 
         public GridUserInfo GetGridUserInfo(string userID)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
index e3e2e61..fb11e9a 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
@@ -137,9 +137,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
             return m_RemoteConnector.SetHome(userID, regionID, position, lookAt);
         }
 
-        public bool SetLastPosition(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
+        public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt)
         {
-            return m_RemoteConnector.SetLastPosition(userID, regionID, position, lookAt);
+            return m_RemoteConnector.SetLastPosition(userID, sessionID, regionID, position, lookAt);
         }
 
         public GridUserInfo GetGridUserInfo(string userID)
diff --git a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
index f8fa429..6b14a52 100644
--- a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
+++ b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
@@ -166,7 +166,7 @@ namespace OpenSim.Server.Handlers.GridUser
             if (!UnpackArgs(request, out user, out region, out position, out look))
                 return FailureResult();
 
-            if (m_GridUserService.SetLastPosition(user, region, position, look))
+            if (m_GridUserService.SetLastPosition(user, UUID.Zero, region, position, look))
                 return SuccessResult();
 
             return FailureResult();
diff --git a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
index 935ebb1..48d2939 100644
--- a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
+++ b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
@@ -123,7 +123,7 @@ namespace OpenSim.Services.Connectors
             return Set(sendData, userID, regionID, position, lookAt);
         }
 
-        public bool SetLastPosition(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
+        public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt)
         {
             Dictionary<string, object> sendData = new Dictionary<string, object>();
             //sendData["SCOPEID"] = scopeID.ToString();
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
index 67a06f3..c89c81a 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
@@ -29,6 +29,7 @@ using System;
 using System.Reflection;
 using OpenSim.Framework;
 using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
 using OpenMetaverse;
 using log4net;
 
@@ -38,12 +39,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
     {
         private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 
-        private SimianPresenceServiceConnector m_GridUserService;
+        private IGridUserService m_GridUserService;
         private Scene m_aScene;
 
-        public SimianActivityDetector(SimianPresenceServiceConnector guservice)
+        public SimianActivityDetector(IGridUserService guService)
         {
-            m_GridUserService = guservice;
+            m_GridUserService = guService;
             m_log.DebugFormat("[SIMIAN ACTIVITY DETECTOR]: Started");
         }
 
@@ -103,7 +104,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
                 m_log.DebugFormat("[SIMIAN ACTIVITY DETECTOR]: Detected client logout {0} in {1}", client.AgentId, client.Scene.RegionInfo.RegionName);
                 m_GridUserService.LoggedOut(client.AgentId.ToString(), client.Scene.RegionInfo.RegionID, position, lookat);
             }
-
         }
 
         void OnEnteringNewParcel(ScenePresence sp, int localLandID, UUID regionID)
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
index a344594..fa51c9a 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
@@ -304,12 +304,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
             return UpdateSession(sessionID, regionID, lastPosition, lastLookAt);
         }
 
-        public bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
-        {
-            // Never called
-            return false;
-        }
-
         public GridUserInfo GetGridUserInfo(string user)
         {
             m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user);
diff --git a/OpenSim/Services/Interfaces/IGridUserService.cs b/OpenSim/Services/Interfaces/IGridUserService.cs
index 95ce5e8..dfb79a4 100644
--- a/OpenSim/Services/Interfaces/IGridUserService.cs
+++ b/OpenSim/Services/Interfaces/IGridUserService.cs
@@ -108,8 +108,18 @@ namespace OpenSim.Services.Interfaces
         bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
         
         bool SetHome(string userID, UUID homeID, Vector3 homePosition, Vector3 homeLookAt);
-        bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
-    
+
+        /// <summary>
+        /// Stores the last known user position at the grid level
+        /// </summary>
+        /// <param name="userID">Ignore if your connector does not use userID for position updates</param>
+        /// <param name="sessionID">Ignore if your connector does not use sessionID for position updates</param>
+        /// <param name="regionID">RegionID where the user is currently located</param>
+        /// <param name="lastPosition">Region-relative position</param>
+        /// <param name="lastLookAt">Normalized look direction</param>
+        /// <returns>True if the user's last position was successfully updated, otherwise false</returns>
+        bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
+        
         GridUserInfo GetGridUserInfo(string userID);
     }
 }
\ No newline at end of file
diff --git a/OpenSim/Services/UserAccountService/GridUserService.cs b/OpenSim/Services/UserAccountService/GridUserService.cs
index 697ba63..00a1ae2 100644
--- a/OpenSim/Services/UserAccountService/GridUserService.cs
+++ b/OpenSim/Services/UserAccountService/GridUserService.cs
@@ -139,7 +139,7 @@ namespace OpenSim.Services.UserAccountService
             return m_Database.Store(d);
         }
 
-        public bool SetLastPosition(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+        public bool SetLastPosition(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
         {
             //m_log.DebugFormat("[Grid User Service]: SetLastPosition for {0}", userID);
             GridUserData d = m_Database.Get(userID);
-- 
cgit v1.1


From b6e0563ad7ad7f6fc396229823d7e76cd31dced7 Mon Sep 17 00:00:00 2001
From: John Hurliman
Date: Wed, 29 Sep 2010 14:34:02 -0700
Subject: Part two of the previous commit, making IGridUserService.LoggedOut()
 more flexible without changing current behavior

---
 .../ServiceConnectorsOut/GridUser/ActivityDetector.cs        |  2 +-
 .../GridUser/LocalGridUserServiceConnector.cs                |  4 ++--
 .../GridUser/RemoteGridUserServiceConnector.cs               |  4 ++--
 .../Server/Handlers/GridUser/GridUserServerPostHandler.cs    |  2 +-
 .../Services/Connectors/GridUser/GridUserServiceConnector.cs |  2 +-
 .../Services/Connectors/SimianGrid/SimianActivityDetector.cs |  6 +-----
 .../Connectors/SimianGrid/SimianPresenceServiceConnector.cs  |  2 +-
 OpenSim/Services/HypergridService/UserAgentService.cs        |  2 +-
 OpenSim/Services/Interfaces/IGridUserService.cs              | 12 +++++++++++-
 OpenSim/Services/UserAccountService/GridUserService.cs       |  2 +-
 10 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
index 116a1dc..f523c73 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
@@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
                     }
                 }
                 m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected client logout {0} in {1}", client.AgentId, client.Scene.RegionInfo.RegionName);
-                m_GridUserService.LoggedOut(client.AgentId.ToString(), client.Scene.RegionInfo.RegionID, position, lookat);
+                m_GridUserService.LoggedOut(client.AgentId.ToString(), client.SessionId, client.Scene.RegionInfo.RegionID, position, lookat);
             }
 
         }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
index 76e030f..985acec 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/LocalGridUserServiceConnector.cs
@@ -152,9 +152,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
             return m_GridUserService.LoggedIn(userID);
         }
 
-        public bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+        public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
         {
-            return m_GridUserService.LoggedOut(userID, regionID, lastPosition, lastLookAt);
+            return m_GridUserService.LoggedOut(userID, sessionID, regionID, lastPosition, lastLookAt);
         }
 
         public bool SetHome(string userID, UUID homeID, Vector3 homePosition, Vector3 homeLookAt)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
index fb11e9a..95b3591 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/RemoteGridUserServiceConnector.cs
@@ -126,9 +126,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
             return null;
         }
 
-        public bool LoggedOut(string userID, UUID region, Vector3 position, Vector3 lookat)
+        public bool LoggedOut(string userID, UUID sessionID, UUID region, Vector3 position, Vector3 lookat)
         {
-            return m_RemoteConnector.LoggedOut(userID, region, position, lookat);
+            return m_RemoteConnector.LoggedOut(userID, sessionID, region, position, lookat);
         }
 
 
diff --git a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
index 6b14a52..485bc3e 100644
--- a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
+++ b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs
@@ -131,7 +131,7 @@ namespace OpenSim.Server.Handlers.GridUser
             if (!UnpackArgs(request, out userID, out regionID, out position, out lookat))
                 return FailureResult();
 
-            if (m_GridUserService.LoggedOut(userID, regionID, position, lookat))
+            if (m_GridUserService.LoggedOut(userID, UUID.Zero, regionID, position, lookat))
                 return SuccessResult();
 
             return FailureResult();
diff --git a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
index 48d2939..b3ea865 100644
--- a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
+++ b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
@@ -101,7 +101,7 @@ namespace OpenSim.Services.Connectors
 
         }
 
-        public bool LoggedOut(string userID, UUID region, Vector3 position, Vector3 lookat)
+        public bool LoggedOut(string userID, UUID sessionID, UUID region, Vector3 position, Vector3 lookat)
         {
             Dictionary<string, object> sendData = new Dictionary<string, object>();
             //sendData["SCOPEID"] = scopeID.ToString();
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
index c89c81a..b8703c6 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
@@ -40,7 +40,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
         private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 
         private IGridUserService m_GridUserService;
-        private Scene m_aScene;
 
         public SimianActivityDetector(IGridUserService guService)
         {
@@ -55,9 +54,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
             scene.EventManager.OnMakeRootAgent += OnMakeRootAgent;
             scene.EventManager.OnNewClient += OnNewClient;
             scene.EventManager.OnAvatarEnteringNewParcel += OnEnteringNewParcel;
-
-            if (m_aScene == null)
-                m_aScene = scene;
         }
 
         public void RemoveRegion(Scene scene)
@@ -102,7 +98,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
                 }
 
                 m_log.DebugFormat("[SIMIAN ACTIVITY DETECTOR]: Detected client logout {0} in {1}", client.AgentId, client.Scene.RegionInfo.RegionName);
-                m_GridUserService.LoggedOut(client.AgentId.ToString(), client.Scene.RegionInfo.RegionID, position, lookat);
+                m_GridUserService.LoggedOut(client.AgentId.ToString(), client.SessionId, client.Scene.RegionInfo.RegionID, position, lookat);
             }
         }
 
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
index fa51c9a..a41c6ad 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
@@ -260,7 +260,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
             return null;
         }
 
-        public bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+        public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
         {
             // Save our last position as user data
             NameValueCollection requestArgs = new NameValueCollection
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs
index 8c3be70..8acd618 100644
--- a/OpenSim/Services/HypergridService/UserAgentService.cs
+++ b/OpenSim/Services/HypergridService/UserAgentService.cs
@@ -232,7 +232,7 @@ namespace OpenSim.Services.HypergridService
 
             GridUserInfo guinfo = m_GridUserService.GetGridUserInfo(userID.ToString());
             if (guinfo != null)
-                m_GridUserService.LoggedOut(userID.ToString(), guinfo.LastRegionID, guinfo.LastPosition, guinfo.LastLookAt);
+                m_GridUserService.LoggedOut(userID.ToString(), sessionID, guinfo.LastRegionID, guinfo.LastPosition, guinfo.LastLookAt);
         }
 
         // We need to prevent foreign users with the same UUID as a local user
diff --git a/OpenSim/Services/Interfaces/IGridUserService.cs b/OpenSim/Services/Interfaces/IGridUserService.cs
index dfb79a4..6613ae7 100644
--- a/OpenSim/Services/Interfaces/IGridUserService.cs
+++ b/OpenSim/Services/Interfaces/IGridUserService.cs
@@ -105,7 +105,17 @@ namespace OpenSim.Services.Interfaces
     public interface IGridUserService
     {
         GridUserInfo LoggedIn(string userID);
-        bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
+
+        /// <summary>
+        /// Informs the grid that a user is logged out and to remove any session data for them
+        /// </summary>
+        /// <param name="userID">Ignore if your connector does not use userID for logouts</param>
+        /// <param name="sessionID">Ignore if your connector does not use sessionID for logouts</param>
+        /// <param name="regionID">RegionID where the user was last located</param>
+        /// <param name="lastPosition">Last region-relative position of the user</param>
+        /// <param name="lastLookAt">Last normalized look direction for the user</param>
+        /// <returns>True if the logout request was successfully processed, otherwise false</returns>
+        bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt);
         
         bool SetHome(string userID, UUID homeID, Vector3 homePosition, Vector3 homeLookAt);
 
diff --git a/OpenSim/Services/UserAccountService/GridUserService.cs b/OpenSim/Services/UserAccountService/GridUserService.cs
index 00a1ae2..9b18915 100644
--- a/OpenSim/Services/UserAccountService/GridUserService.cs
+++ b/OpenSim/Services/UserAccountService/GridUserService.cs
@@ -92,7 +92,7 @@ namespace OpenSim.Services.UserAccountService
             return GetGridUserInfo(userID);
         }
 
-        public bool LoggedOut(string userID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
+        public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
         {
             m_log.DebugFormat("[GRID USER SERVICE]: User {0} is offline", userID);
             GridUserData d = m_Database.Get(userID);
-- 
cgit v1.1


From 1255c7ceb6e7450b7e2b496e0ad0b0d7cd9dc295 Mon Sep 17 00:00:00 2001
From: John Hurliman
Date: Wed, 29 Sep 2010 14:39:13 -0700
Subject: Cleanup: Removed an unreferenced variable from ActivityDetector.cs

---
 .../ServiceConnectorsOut/GridUser/ActivityDetector.cs        | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
index f523c73..a64f785 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/GridUser/ActivityDetector.cs
@@ -42,7 +42,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
         private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 
         private IGridUserService m_GridUserService;
-        private Scene m_aScene;
 
         public ActivityDetector(IGridUserService guservice)
         {
@@ -56,9 +55,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
             // But we could trigger the position update more often
             scene.EventManager.OnMakeRootAgent += OnMakeRootAgent;
             scene.EventManager.OnNewClient += OnNewClient;
-
-            if (m_aScene == null)
-                m_aScene = scene;
         }
 
         public void RemoveRegion(Scene scene)
@@ -69,14 +65,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser
 
         public void OnMakeRootAgent(ScenePresence sp)
         {
-            UUID sessionID = UUID.Zero;
-
-            IClientAPI client;
-            if (m_aScene.TryGetClient(sp.UUID, out client))
-                sessionID = client.SessionId;
-
             m_log.DebugFormat("[ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
-            m_GridUserService.SetLastPosition(sp.UUID.ToString(), sessionID, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
+            m_GridUserService.SetLastPosition(sp.UUID.ToString(), UUID.Zero, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
         }
 
         public void OnNewClient(IClientAPI client)
-- 
cgit v1.1


From 08ee7a0e51a86e0a65c821e28eceaedaae9f009d Mon Sep 17 00:00:00 2001
From: John Hurliman
Date: Wed, 29 Sep 2010 15:14:13 -0700
Subject: Actually log users out (call LogoutAgent) in the
 SimianPresenceServiceConnector when LoggedOut() is called

---
 .../Connectors/SimianGrid/SimianPresenceServiceConnector.cs         | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
index a41c6ad..8141420 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
@@ -262,6 +262,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
 
         public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
         {
+            m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID);
+
+            // Remove the session to mark this user offline
+            if (!LogoutAgent(sessionID))
+                return false;
+
             // Save our last position as user data
             NameValueCollection requestArgs = new NameValueCollection
             {
-- 
cgit v1.1


From 29646bcf6773c55e7e0ddc1bb86160ca5b5cf4f2 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 30 Sep 2010 02:47:07 +0200
Subject: Fix an inventory fetch issue

---
 OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 4d97db7..21c36d3 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -515,6 +515,9 @@ namespace OpenSim.Region.Framework.Scenes
         public void HandleFetchInventoryDescendents(IClientAPI remoteClient, UUID folderID, UUID ownerID,
                                                     bool fetchFolders, bool fetchItems, int sortOrder)
         {
+            if (folderID == UUID.Zero)
+                return;
+
             // FIXME MAYBE: We're not handling sortOrder!
 
             // TODO: This code for looking in the folder for the library should be folded somewhere else
-- 
cgit v1.1


From 90b51dc7d67507e27c4baa529e979de19dce8de1 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 30 Sep 2010 15:52:33 +0100
Subject: Forward-port 0.6 fix

---
 .../CoreModules/World/Objects/BuySell/BuySellModule.cs     | 14 +++++++++++++-
 OpenSim/Region/Framework/Interfaces/IBuySellModule.cs      |  4 ++--
 .../OptionalModules/World/MoneyModule/SampleMoneyModule.cs |  4 ++--
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
index c8fb9da..a674d60 100644
--- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
@@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
             part.GetProperties(client);
         }
 
-        public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType)
+        public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType, int salePrice)
         {
             SceneObjectPart part = m_scene.GetSceneObjectPart(localID);
 
@@ -114,6 +114,18 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
             if (part.ParentGroup == null)
                 return false;
 
+            if (part.ObjectSaleType != saleType)
+            {
+                m_dialogModule.SendAlertToUser(remoteClient, "This item is not available for the type of sale specified");
+                return false;
+            }
+            
+            if (part.SalePrice != salePrice)
+            {
+                m_dialogModule.SendAlertToUser(remoteClient, "This item is not available for the price specified");
+                return false;
+            }
+
             SceneObjectGroup group = part.ParentGroup;
 
             switch (saleType)
diff --git a/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs b/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs
index 0132bae..d1ce4c0 100644
--- a/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IBuySellModule.cs
@@ -42,6 +42,6 @@ namespace OpenSim.Region.Framework.Interfaces
         /// <returns>
         /// True on a successful purchase, false on failure
         /// </returns>
-        bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType);
+        bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType, int salePrice);
     }
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
index cc51c3b..d364df6 100644
--- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
+++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
@@ -814,7 +814,7 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
             
             IBuySellModule module = s.RequestModuleInterface<IBuySellModule>();
             if (module != null)
-                module.BuyObject(remoteClient, categoryID, localID, saleType);
+                module.BuyObject(remoteClient, categoryID, localID, saleType, salePrice);
         }
     }
 
@@ -825,4 +825,4 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
         Gift = 2,
         Purchase = 3
     }
-}
\ No newline at end of file
+}
-- 
cgit v1.1


From eb58d910987ad34ffbd27bdee670925c1a11884e Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 30 Sep 2010 15:57:52 +0100
Subject: Prevent dropping someone else's attachments

---
 OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index cb39e46..28c50ab 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -409,6 +409,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
             if (part == null || part.ParentGroup == null)
                 return;
 
+            if (part.ParentGroup.RootPart.AttachedAvatar != remoteClient.AgentId)
+                return;
+
             UUID inventoryID = part.ParentGroup.GetFromItemID();
 
             ScenePresence presence;
-- 
cgit v1.1