diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 5973847c31..3d59615f25 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -3383,7 +3383,6 @@ namespace OpenSim.Region.Framework.Scenes /// public void RegisterCommsEvents() { - m_sceneGridService.OnExpectUser += HandleNewUserConnection; m_sceneGridService.OnAvatarCrossingIntoRegion += AgentCrossing; m_sceneGridService.OnCloseAgentConnection += IncomingCloseAgent; //m_eventManager.OnRegionUp += OtherRegionUp; @@ -3404,7 +3403,6 @@ namespace OpenSim.Region.Framework.Scenes //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; //m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; //m_eventManager.OnRegionUp -= OtherRegionUp; - m_sceneGridService.OnExpectUser -= HandleNewUserConnection; m_sceneGridService.OnAvatarCrossingIntoRegion -= AgentCrossing; m_sceneGridService.OnCloseAgentConnection -= IncomingCloseAgent; m_sceneGridService.OnGetLandData -= GetLandData; @@ -3416,22 +3414,6 @@ namespace OpenSim.Region.Framework.Scenes m_log.WarnFormat("[SCENE]: Deregister from grid failed for region {0}", m_regInfo.RegionName); } - /// - /// A handler for the SceneCommunicationService event, to match that events return type of void. - /// Use NewUserConnection() directly if possible so the return type can refuse connections. - /// At the moment nothing actually seems to use this event, - /// as everything is switching to calling the NewUserConnection method directly. - /// - /// Now obsoleting this because it doesn't handle teleportFlags propertly - /// - /// - /// - [Obsolete("Please call NewUserConnection directly.")] - public void HandleNewUserConnection(AgentCircuitData agent) - { - string reason; - NewUserConnection(agent, 0, out reason); - } /// /// Do the work necessary to initiate a new user connection for a particular scene. @@ -3493,13 +3475,22 @@ namespace OpenSim.Region.Framework.Scenes ScenePresence sp = GetScenePresence(agent.AgentID); if (sp != null) { - m_log.DebugFormat( - "[SCENE]: Adjusting known seeds for existing agent {0} in {1}", - agent.AgentID, RegionInfo.RegionName); + if (sp.IsChildAgent) + { + m_log.DebugFormat( + "[SCENE]: Adjusting known seeds for existing agent {0} in {1}", + agent.AgentID, RegionInfo.RegionName); - sp.AdjustKnownSeeds(); + sp.AdjustKnownSeeds(); - return true; + return true; + } + else + { + // We have a zombie from a crashed session. Kill it. + m_log.DebugFormat("[SCENE]: Zombie scene presence detected for {0} in {1}", agent.AgentID, RegionInfo.RegionName); + sp.ControllingClient.Close(); + } } CapsModule.AddCapsHandler(agent.AgentID); diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index 4d7103bf73..974caf0d7e 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs @@ -386,7 +386,7 @@ namespace OpenSim.Services.InventoryService XInventoryItem[] items = m_Database.GetActiveGestures(principalID); if (items.Length == 0) - return null; + return new List(); List ret = new List(); diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs index dc5ca518a5..edf41bc8fc 100644 --- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs +++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs @@ -222,12 +222,14 @@ namespace OpenSim.Services.LLLoginService public LLLoginResponse(UserAccount account, AgentCircuitData aCircuit, GridUserInfo pinfo, GridRegion destination, List invSkel, FriendInfo[] friendsList, ILibraryService libService, - string where, string startlocation, Vector3 position, Vector3 lookAt, string message, + string where, string startlocation, Vector3 position, Vector3 lookAt, List gestures, string message, GridRegion home, IPEndPoint clientIP) : this() { FillOutInventoryData(invSkel, libService); + FillOutActiveGestures(gestures); + CircuitCode = (int)aCircuit.circuitcode; Lastname = account.LastName; Firstname = account.FirstName; @@ -288,6 +290,22 @@ namespace OpenSim.Services.LLLoginService } } + private void FillOutActiveGestures(List gestures) + { + ArrayList list = new ArrayList(); + if (gestures != null) + { + foreach (InventoryItemBase gesture in gestures) + { + Hashtable item = new Hashtable(); + item["item_id"] = gesture.ID.ToString(); + item["asset_id"] = gesture.AssetID.ToString(); + list.Add(item); + } + } + ActiveGestures = list; + } + private void FillOutHomeData(GridUserInfo pinfo, GridRegion home) { int x = 1000 * (int)Constants.RegionSize, y = 1000 * (int)Constants.RegionSize; diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index c85d35aece..83f9ade57b 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -278,6 +278,10 @@ namespace OpenSim.Services.LLLoginService return LLFailedLoginResponse.InventoryProblem; } + // Get active gestures + List gestures = m_InventoryService.GetActiveGestures(account.PrincipalID); + m_log.DebugFormat("[LLOGIN SERVICE]: {0} active gestures", gestures.Count); + // // Login the presence // @@ -356,7 +360,7 @@ namespace OpenSim.Services.LLLoginService // Finally, fill out the response and return it // LLLoginResponse response = new LLLoginResponse(account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, - where, startLocation, position, lookAt, m_WelcomeMessage, home, clientIP); + where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP); m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to client."); return response;