diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 105 |
1 files changed, 9 insertions, 96 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 8a9d295..3a0bbc3 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -113,11 +113,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
113 | get { return m_sceneGridService; } | 113 | get { return m_sceneGridService; } |
114 | } | 114 | } |
115 | 115 | ||
116 | /// <summary> | ||
117 | /// Each agent has its own capabilities handler. | ||
118 | /// </summary> | ||
119 | protected Dictionary<UUID, Caps> m_capsHandlers = new Dictionary<UUID, Caps>(); | ||
120 | |||
121 | /// <value> | 116 | /// <value> |
122 | /// All the region modules attached to this scene. | 117 | /// All the region modules attached to this scene. |
123 | /// </value> | 118 | /// </value> |
@@ -147,7 +142,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
147 | protected IInterregionCommsOut m_interregionCommsOut; | 142 | protected IInterregionCommsOut m_interregionCommsOut; |
148 | protected IInterregionCommsIn m_interregionCommsIn; | 143 | protected IInterregionCommsIn m_interregionCommsIn; |
149 | protected IDialogModule m_dialogModule; | 144 | protected IDialogModule m_dialogModule; |
150 | 145 | protected internal ICapabilitiesModule CapsModule; | |
146 | |||
151 | // Central Update Loop | 147 | // Central Update Loop |
152 | 148 | ||
153 | protected int m_fps = 10; | 149 | protected int m_fps = 10; |
@@ -342,7 +338,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
342 | 338 | ||
343 | RegisterDefaultSceneEvents(); | 339 | RegisterDefaultSceneEvents(); |
344 | 340 | ||
345 | m_dumpAssetsToFile = dumpAssetsToFile; | 341 | DumpAssetsToFile = dumpAssetsToFile; |
346 | 342 | ||
347 | m_scripts_enabled = !RegionInfo.RegionSettings.DisableScripts; | 343 | m_scripts_enabled = !RegionInfo.RegionSettings.DisableScripts; |
348 | 344 | ||
@@ -780,6 +776,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
780 | m_interregionCommsOut = RequestModuleInterface<IInterregionCommsOut>(); | 776 | m_interregionCommsOut = RequestModuleInterface<IInterregionCommsOut>(); |
781 | m_interregionCommsIn = RequestModuleInterface<IInterregionCommsIn>(); | 777 | m_interregionCommsIn = RequestModuleInterface<IInterregionCommsIn>(); |
782 | m_dialogModule = RequestModuleInterface<IDialogModule>(); | 778 | m_dialogModule = RequestModuleInterface<IDialogModule>(); |
779 | CapsModule = RequestModuleInterface<ICapabilitiesModule>(); | ||
783 | } | 780 | } |
784 | 781 | ||
785 | #endregion | 782 | #endregion |
@@ -2578,7 +2575,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
2578 | (childagentYN ? "child" : "root"), agentID, RegionInfo.RegionName); | 2575 | (childagentYN ? "child" : "root"), agentID, RegionInfo.RegionName); |
2579 | 2576 | ||
2580 | m_sceneGraph.removeUserCount(!childagentYN); | 2577 | m_sceneGraph.removeUserCount(!childagentYN); |
2581 | RemoveCapsHandler(agentID); | 2578 | CapsModule.RemoveCapsHandler(agentID); |
2582 | 2579 | ||
2583 | if (avatar.Scene.NeedSceneCacheClear(avatar.UUID)) | 2580 | if (avatar.Scene.NeedSceneCacheClear(avatar.UUID)) |
2584 | { | 2581 | { |
@@ -2759,9 +2756,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
2759 | /// <param name="agent"></param> | 2756 | /// <param name="agent"></param> |
2760 | public void NewUserConnection(AgentCircuitData agent) | 2757 | public void NewUserConnection(AgentCircuitData agent) |
2761 | { | 2758 | { |
2762 | /// Diva: Horrible stuff! | 2759 | CapsModule.NewUserConnection(agent); |
2763 | capsPaths[agent.AgentID] = agent.CapsPath; | ||
2764 | childrenSeeds[agent.AgentID] = ((agent.ChildrenCapSeeds == null) ? new Dictionary<ulong, string>() : agent.ChildrenCapSeeds); | ||
2765 | 2760 | ||
2766 | ScenePresence sp = m_sceneGraph.GetScenePresence(agent.AgentID); | 2761 | ScenePresence sp = m_sceneGraph.GetScenePresence(agent.AgentID); |
2767 | if (sp != null) | 2762 | if (sp != null) |
@@ -2786,8 +2781,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
2786 | "[CONNECTION BEGIN]: Denied access to: {0} at {1} because the user is on the region banlist", | 2781 | "[CONNECTION BEGIN]: Denied access to: {0} at {1} because the user is on the region banlist", |
2787 | agent.AgentID, RegionInfo.RegionName); | 2782 | agent.AgentID, RegionInfo.RegionName); |
2788 | } | 2783 | } |
2789 | 2784 | ||
2790 | AddCapsHandler(agent.AgentID); | 2785 | CapsModule.AddCapsHandler(agent.AgentID); |
2791 | 2786 | ||
2792 | if (!agent.child) | 2787 | if (!agent.child) |
2793 | { | 2788 | { |
@@ -2860,88 +2855,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
2860 | } | 2855 | } |
2861 | 2856 | ||
2862 | /// <summary> | 2857 | /// <summary> |
2863 | /// Add a caps handler for the given agent. If the CAPS handler already exists for this agent, | ||
2864 | /// then it is replaced by a new CAPS handler. | ||
2865 | /// | ||
2866 | /// FIXME: On login this is called twice, once for the login and once when the connection is made. | ||
2867 | /// This is somewhat innefficient and should be fixed. The initial login creation is necessary | ||
2868 | /// since the client asks for capabilities immediately after being informed of the seed. | ||
2869 | /// </summary> | ||
2870 | /// <param name="agentId"></param> | ||
2871 | /// <param name="capsObjectPath"></param> | ||
2872 | public void AddCapsHandler(UUID agentId) | ||
2873 | { | ||
2874 | if (RegionInfo.EstateSettings.IsBanned(agentId)) | ||
2875 | return; | ||
2876 | |||
2877 | String capsObjectPath = GetCapsPath(agentId); | ||
2878 | |||
2879 | Caps cap = null; | ||
2880 | if (m_capsHandlers.TryGetValue(agentId, out cap)) | ||
2881 | { | ||
2882 | m_log.DebugFormat("[CAPS] Attempt at registering twice for the same agent {0}. {1}. Ignoring.", agentId, capsObjectPath); | ||
2883 | //return; | ||
2884 | } | ||
2885 | |||
2886 | cap | ||
2887 | = new Caps( | ||
2888 | AssetCache, CommsManager.HttpServer, m_regInfo.ExternalHostName, CommsManager.HttpServer.Port, | ||
2889 | capsObjectPath, agentId, m_dumpAssetsToFile, RegionInfo.RegionName); | ||
2890 | |||
2891 | cap.RegisterHandlers(); | ||
2892 | |||
2893 | EventManager.TriggerOnRegisterCaps(agentId, cap); | ||
2894 | |||
2895 | cap.AddNewInventoryItem = AddUploadedInventoryItem; | ||
2896 | cap.ItemUpdatedCall = CapsUpdateInventoryItemAsset; | ||
2897 | cap.TaskScriptUpdatedCall = CapsUpdateTaskInventoryScriptAsset; | ||
2898 | cap.CAPSFetchInventoryDescendents = HandleFetchInventoryDescendentsCAPS; | ||
2899 | cap.GetClient = m_sceneGraph.GetControllingClient; | ||
2900 | m_capsHandlers[agentId] = cap; | ||
2901 | } | ||
2902 | |||
2903 | public Caps GetCapsHandlerForUser(UUID agentId) | ||
2904 | { | ||
2905 | lock (m_capsHandlers) | ||
2906 | { | ||
2907 | if (m_capsHandlers.ContainsKey(agentId)) | ||
2908 | { | ||
2909 | return m_capsHandlers[agentId]; | ||
2910 | } | ||
2911 | } | ||
2912 | return null; | ||
2913 | } | ||
2914 | |||
2915 | /// <summary> | ||
2916 | /// Remove the caps handler for a given agent. | ||
2917 | /// </summary> | ||
2918 | /// <param name="agentId"></param> | ||
2919 | public void RemoveCapsHandler(UUID agentId) | ||
2920 | { | ||
2921 | if (childrenSeeds.ContainsKey(agentId)) | ||
2922 | { | ||
2923 | childrenSeeds.Remove(agentId); | ||
2924 | } | ||
2925 | |||
2926 | lock (m_capsHandlers) | ||
2927 | { | ||
2928 | if (m_capsHandlers.ContainsKey(agentId)) | ||
2929 | { | ||
2930 | m_capsHandlers[agentId].DeregisterHandlers(); | ||
2931 | EventManager.TriggerOnDeregisterCaps(agentId, m_capsHandlers[agentId]); | ||
2932 | |||
2933 | m_capsHandlers.Remove(agentId); | ||
2934 | } | ||
2935 | else | ||
2936 | { | ||
2937 | m_log.WarnFormat( | ||
2938 | "[CAPS]: Received request to remove CAPS handler for root agent {0} in {1}, but no such CAPS handler found!", | ||
2939 | agentId, RegionInfo.RegionName); | ||
2940 | } | ||
2941 | } | ||
2942 | } | ||
2943 | |||
2944 | /// <summary> | ||
2945 | /// Triggered when an agent crosses into this sim. Also happens on initial login. | 2858 | /// Triggered when an agent crosses into this sim. Also happens on initial login. |
2946 | /// </summary> | 2859 | /// </summary> |
2947 | /// <param name="agentID"></param> | 2860 | /// <param name="agentID"></param> |
@@ -3740,7 +3653,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
3740 | #region Script Engine | 3653 | #region Script Engine |
3741 | 3654 | ||
3742 | private List<ScriptEngineInterface> ScriptEngines = new List<ScriptEngineInterface>(); | 3655 | private List<ScriptEngineInterface> ScriptEngines = new List<ScriptEngineInterface>(); |
3743 | private bool m_dumpAssetsToFile; | 3656 | public bool DumpAssetsToFile; |
3744 | 3657 | ||
3745 | /// <summary> | 3658 | /// <summary> |
3746 | /// | 3659 | /// |