aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs39
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs11
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs30
3 files changed, 44 insertions, 36 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index fd179ba..bf2e775 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -154,6 +154,45 @@ namespace OpenSim.Region.Framework.Scenes
154 } 154 }
155 155
156 /// <summary> 156 /// <summary>
157 /// Handle the update of an object's user group.
158 /// </summary>
159 /// <param name="remoteClient"></param>
160 /// <param name="groupID"></param>
161 /// <param name="objectLocalID"></param>
162 /// <param name="Garbage"></param>
163 private void HandleObjectGroupUpdate(
164 IClientAPI remoteClient, UUID groupID, uint objectLocalID, UUID Garbage)
165 {
166 if (m_groupsModule == null)
167 return;
168
169 // XXX: Might be better to get rid of this special casing and have GetMembershipData return something
170 // reasonable for a UUID.Zero group.
171 if (groupID != UUID.Zero)
172 {
173 GroupMembershipData gmd = m_groupsModule.GetMembershipData(groupID, remoteClient.AgentId);
174
175 if (gmd == null)
176 {
177// m_log.WarnFormat(
178// "[GROUPS]: User {0} is not a member of group {1} so they can't update {2} to this group",
179// remoteClient.Name, GroupID, objectLocalID);
180
181 return;
182 }
183 }
184
185 SceneObjectGroup so = ((Scene)remoteClient.Scene).GetGroupByPrim(objectLocalID);
186 if (so != null)
187 {
188 if (so.OwnerID == remoteClient.AgentId)
189 {
190 so.SetGroup(groupID, remoteClient);
191 }
192 }
193 }
194
195 /// <summary>
157 /// Handle the deselection of a prim from the client. 196 /// Handle the deselection of a prim from the client.
158 /// </summary> 197 /// </summary>
159 /// <param name="primLocalID"></param> 198 /// <param name="primLocalID"></param>
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index f8487e7..c2ba893 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -142,6 +142,7 @@ namespace OpenSim.Region.Framework.Scenes
142 protected IDialogModule m_dialogModule; 142 protected IDialogModule m_dialogModule;
143 protected IEntityTransferModule m_teleportModule; 143 protected IEntityTransferModule m_teleportModule;
144 protected ICapabilitiesModule m_capsModule; 144 protected ICapabilitiesModule m_capsModule;
145 protected IGroupsModule m_groupsModule;
145 146
146 /// <summary> 147 /// <summary>
147 /// Current scene frame number 148 /// Current scene frame number
@@ -1206,6 +1207,7 @@ namespace OpenSim.Region.Framework.Scenes
1206 m_dialogModule = RequestModuleInterface<IDialogModule>(); 1207 m_dialogModule = RequestModuleInterface<IDialogModule>();
1207 m_capsModule = RequestModuleInterface<ICapabilitiesModule>(); 1208 m_capsModule = RequestModuleInterface<ICapabilitiesModule>();
1208 m_teleportModule = RequestModuleInterface<IEntityTransferModule>(); 1209 m_teleportModule = RequestModuleInterface<IEntityTransferModule>();
1210 m_groupsModule = RequestModuleInterface<IGroupsModule>();
1209 } 1211 }
1210 1212
1211 #endregion 1213 #endregion
@@ -2856,6 +2858,7 @@ namespace OpenSim.Region.Framework.Scenes
2856 client.OnObjectDescription += m_sceneGraph.PrimDescription; 2858 client.OnObjectDescription += m_sceneGraph.PrimDescription;
2857 client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; 2859 client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable;
2858 client.OnObjectOwner += ObjectOwner; 2860 client.OnObjectOwner += ObjectOwner;
2861 client.OnObjectGroupRequest += HandleObjectGroupUpdate;
2859 } 2862 }
2860 2863
2861 public virtual void SubscribeToClientPrimRezEvents(IClientAPI client) 2864 public virtual void SubscribeToClientPrimRezEvents(IClientAPI client)
@@ -3675,15 +3678,11 @@ namespace OpenSim.Region.Framework.Scenes
3675 m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!"); 3678 m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!");
3676 } 3679 }
3677 3680
3678 IGroupsModule groupsModule =
3679 RequestModuleInterface<IGroupsModule>();
3680
3681 List<UUID> agentGroups = new List<UUID>(); 3681 List<UUID> agentGroups = new List<UUID>();
3682 3682
3683 if (groupsModule != null) 3683 if (m_groupsModule != null)
3684 { 3684 {
3685 GroupMembershipData[] GroupMembership = 3685 GroupMembershipData[] GroupMembership = m_groupsModule.GetMembershipData(agent.AgentID);
3686 groupsModule.GetMembershipData(agent.AgentID);
3687 3686
3688 if (GroupMembership != null) 3687 if (GroupMembership != null)
3689 { 3688 {
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 8002cb6..4e214d9 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -218,7 +218,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
218 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); 218 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
219 219
220 client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; 220 client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest;
221 client.OnObjectGroupRequest += HandleObjectGroupUpdate;
222 client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; 221 client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest;
223 client.OnDirFindQuery += OnDirFindQuery; 222 client.OnDirFindQuery += OnDirFindQuery;
224 client.OnRequestAvatarProperties += OnRequestAvatarProperties; 223 client.OnRequestAvatarProperties += OnRequestAvatarProperties;
@@ -329,35 +328,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
329 remoteClient.SendGroupNameReply(GroupID, GroupName); 328 remoteClient.SendGroupNameReply(GroupID, GroupName);
330 } 329 }
331 330
332 private void HandleObjectGroupUpdate(
333 IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage)
334 {
335 // XXX: Might be better to get rid of this special casing and have GetMembershipData return something
336 // reasonable for a UUID.Zero group.
337 if (GroupID != UUID.Zero)
338 {
339 GroupMembershipData gmd = GetMembershipData(GroupID, remoteClient.AgentId);
340
341 if (gmd == null)
342 {
343// m_log.WarnFormat(
344// "[GROUPS]: User {0} is not a member of group {1} so they can't update {2} to this group",
345// remoteClient.Name, GroupID, objectLocalID);
346
347 return;
348 }
349 }
350
351 SceneObjectGroup so = ((Scene)remoteClient.Scene).GetGroupByPrim(objectLocalID);
352 if (so != null)
353 {
354 if (so.OwnerID == remoteClient.AgentId)
355 {
356 so.SetGroup(GroupID, remoteClient);
357 }
358 }
359 }
360
361 private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) 331 private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im)
362 { 332 {
363 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); 333 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);