diff options
author | UbitUmarov | 2012-03-28 17:51:56 +0100 |
---|---|---|
committer | UbitUmarov | 2012-03-28 17:51:56 +0100 |
commit | 1888e174cd9407003d544a8a3fad21ae53e8dcb4 (patch) | |
tree | 80df2ea53b4824e196ddbba835dc8b420f5e99bf /OpenSim/Region/OptionalModules | |
parent | Merge branch 'master' of ssh://3dhosting.de/var/git/careminster into ubitwork (diff) | |
parent | Merge branch 'master' into careminster (diff) | |
download | opensim-SC_OLD-1888e174cd9407003d544a8a3fad21ae53e8dcb4.zip opensim-SC_OLD-1888e174cd9407003d544a8a3fad21ae53e8dcb4.tar.gz opensim-SC_OLD-1888e174cd9407003d544a8a3fad21ae53e8dcb4.tar.bz2 opensim-SC_OLD-1888e174cd9407003d544a8a3fad21ae53e8dcb4.tar.xz |
Merge branch 'master' of ssh://3dhosting.de/var/git/careminster into ubitwork
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs | 70 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs | 144 |
2 files changed, 143 insertions, 71 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs index 0be0a19..4dbac1d 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs | |||
@@ -221,15 +221,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
221 | } | 221 | } |
222 | } | 222 | } |
223 | 223 | ||
224 | // Called to indicate that the module has been added to the region | ||
225 | public void AddRegion(Scene scene) | 224 | public void AddRegion(Scene scene) |
226 | { | 225 | { |
227 | |||
228 | if (m_pluginEnabled) | 226 | if (m_pluginEnabled) |
229 | { | 227 | { |
230 | lock (vlock) | 228 | lock (vlock) |
231 | { | 229 | { |
232 | |||
233 | string channelId; | 230 | string channelId; |
234 | 231 | ||
235 | string sceneUUID = scene.RegionInfo.RegionID.ToString(); | 232 | string sceneUUID = scene.RegionInfo.RegionID.ToString(); |
@@ -273,23 +270,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
273 | } | 270 | } |
274 | } | 271 | } |
275 | 272 | ||
276 | |||
277 | // Create a dictionary entry unconditionally. This eliminates the | 273 | // Create a dictionary entry unconditionally. This eliminates the |
278 | // need to check for a parent in the core code. The end result is | 274 | // need to check for a parent in the core code. The end result is |
279 | // the same, if the parent table entry is an empty string, then | 275 | // the same, if the parent table entry is an empty string, then |
280 | // region channels will be created as first-level channels. | 276 | // region channels will be created as first-level channels. |
281 | 277 | lock (m_parents) | |
282 | lock (m_parents) | 278 | { |
283 | if (m_parents.ContainsKey(sceneUUID)) | 279 | if (m_parents.ContainsKey(sceneUUID)) |
284 | { | 280 | { |
285 | RemoveRegion(scene); | 281 | RemoveRegion(scene); |
286 | m_parents.Add(sceneUUID, channelId); | 282 | m_parents.Add(sceneUUID, channelId); |
287 | } | 283 | } |
288 | else | 284 | else |
289 | { | 285 | { |
290 | m_parents.Add(sceneUUID, channelId); | 286 | m_parents.Add(sceneUUID, channelId); |
291 | } | 287 | } |
292 | 288 | } | |
293 | } | 289 | } |
294 | 290 | ||
295 | // we need to capture scene in an anonymous method | 291 | // we need to capture scene in an anonymous method |
@@ -298,26 +294,20 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
298 | { | 294 | { |
299 | OnRegisterCaps(scene, agentID, caps); | 295 | OnRegisterCaps(scene, agentID, caps); |
300 | }; | 296 | }; |
301 | |||
302 | } | 297 | } |
303 | |||
304 | } | 298 | } |
305 | 299 | ||
306 | // Called to indicate that all loadable modules have now been added | ||
307 | public void RegionLoaded(Scene scene) | 300 | public void RegionLoaded(Scene scene) |
308 | { | 301 | { |
309 | // Do nothing. | 302 | // Do nothing. |
310 | } | 303 | } |
311 | 304 | ||
312 | // Called to indicate that the region is going away. | ||
313 | public void RemoveRegion(Scene scene) | 305 | public void RemoveRegion(Scene scene) |
314 | { | 306 | { |
315 | |||
316 | if (m_pluginEnabled) | 307 | if (m_pluginEnabled) |
317 | { | 308 | { |
318 | lock (vlock) | 309 | lock (vlock) |
319 | { | 310 | { |
320 | |||
321 | string channelId; | 311 | string channelId; |
322 | 312 | ||
323 | string sceneUUID = scene.RegionInfo.RegionID.ToString(); | 313 | string sceneUUID = scene.RegionInfo.RegionID.ToString(); |
@@ -328,10 +318,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
328 | // iteration over the set of chidren identified. | 318 | // iteration over the set of chidren identified. |
329 | // This assumes that there is just one directory per | 319 | // This assumes that there is just one directory per |
330 | // region. | 320 | // region. |
331 | |||
332 | if (VivoxTryGetDirectory(sceneUUID + "D", out channelId)) | 321 | if (VivoxTryGetDirectory(sceneUUID + "D", out channelId)) |
333 | { | 322 | { |
334 | |||
335 | m_log.DebugFormat("[VivoxVoice]: region {0}: uuid {1}: located directory id {2}", | 323 | m_log.DebugFormat("[VivoxVoice]: region {0}: uuid {1}: located directory id {2}", |
336 | sceneName, sceneUUID, channelId); | 324 | sceneName, sceneUUID, channelId); |
337 | 325 | ||
@@ -360,7 +348,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
360 | 348 | ||
361 | lock (m_parents) | 349 | lock (m_parents) |
362 | { | 350 | { |
363 | if (m_parents.ContainsKey(sceneUUID)) | 351 | if (m_parents.ContainsKey(sceneUUID)) |
364 | { | 352 | { |
365 | m_parents.Remove(sceneUUID); | 353 | m_parents.Remove(sceneUUID); |
366 | } | 354 | } |
@@ -459,11 +447,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
459 | { | 447 | { |
460 | try | 448 | try |
461 | { | 449 | { |
462 | |||
463 | ScenePresence avatar = null; | 450 | ScenePresence avatar = null; |
464 | string avatarName = null; | 451 | string avatarName = null; |
465 | 452 | ||
466 | if (scene == null) throw new Exception("[VivoxVoice][PROVISIONVOICE] Invalid scene"); | 453 | if (scene == null) |
454 | throw new Exception("[VivoxVoice][PROVISIONVOICE]: Invalid scene"); | ||
467 | 455 | ||
468 | avatar = scene.GetScenePresence(agentID); | 456 | avatar = scene.GetScenePresence(agentID); |
469 | while (avatar == null) | 457 | while (avatar == null) |
@@ -566,7 +554,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
566 | } | 554 | } |
567 | } | 555 | } |
568 | } | 556 | } |
569 | } while (retry); | 557 | } |
558 | while (retry); | ||
570 | 559 | ||
571 | if (code != "OK") | 560 | if (code != "OK") |
572 | { | 561 | { |
@@ -676,7 +665,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
676 | } | 665 | } |
677 | } | 666 | } |
678 | 667 | ||
679 | |||
680 | /// <summary> | 668 | /// <summary> |
681 | /// Callback for a client request for a private chat channel | 669 | /// Callback for a client request for a private chat channel |
682 | /// </summary> | 670 | /// </summary> |
@@ -698,10 +686,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
698 | return "<llsd>true</llsd>"; | 686 | return "<llsd>true</llsd>"; |
699 | } | 687 | } |
700 | 688 | ||
701 | |||
702 | private string RegionGetOrCreateChannel(Scene scene, LandData land) | 689 | private string RegionGetOrCreateChannel(Scene scene, LandData land) |
703 | { | 690 | { |
704 | |||
705 | string channelUri = null; | 691 | string channelUri = null; |
706 | string channelId = null; | 692 | string channelId = null; |
707 | 693 | ||
@@ -709,11 +695,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
709 | string landName; | 695 | string landName; |
710 | string parentId; | 696 | string parentId; |
711 | 697 | ||
712 | lock (m_parents) parentId = m_parents[scene.RegionInfo.RegionID.ToString()]; | 698 | lock (m_parents) |
699 | parentId = m_parents[scene.RegionInfo.RegionID.ToString()]; | ||
713 | 700 | ||
714 | // Create parcel voice channel. If no parcel exists, then the voice channel ID is the same | 701 | // Create parcel voice channel. If no parcel exists, then the voice channel ID is the same |
715 | // as the directory ID. Otherwise, it reflects the parcel's ID. | 702 | // as the directory ID. Otherwise, it reflects the parcel's ID. |
716 | |||
717 | if (land.LocalID != 1 && (land.Flags & (uint)ParcelFlags.UseEstateVoiceChan) == 0) | 703 | if (land.LocalID != 1 && (land.Flags & (uint)ParcelFlags.UseEstateVoiceChan) == 0) |
718 | { | 704 | { |
719 | landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, land.Name); | 705 | landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, land.Name); |
@@ -741,8 +727,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
741 | 727 | ||
742 | m_log.DebugFormat("[VivoxVoice]: Region:Parcel \"{0}\": parent channel id {1}: retrieved parcel channel_uri {2} ", | 728 | m_log.DebugFormat("[VivoxVoice]: Region:Parcel \"{0}\": parent channel id {1}: retrieved parcel channel_uri {2} ", |
743 | landName, parentId, channelUri); | 729 | landName, parentId, channelUri); |
744 | |||
745 | |||
746 | } | 730 | } |
747 | 731 | ||
748 | return channelUri; | 732 | return channelUri; |
@@ -761,7 +745,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
761 | return VivoxCall(requrl, false); | 745 | return VivoxCall(requrl, false); |
762 | } | 746 | } |
763 | 747 | ||
764 | |||
765 | private static readonly string m_vivoxLogoutPath = "https://{0}/api2/viv_signout.php?auth_token={1}"; | 748 | private static readonly string m_vivoxLogoutPath = "https://{0}/api2/viv_signout.php?auth_token={1}"; |
766 | 749 | ||
767 | /// <summary> | 750 | /// <summary> |
@@ -828,7 +811,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
828 | /// | 811 | /// |
829 | /// In this case the call handles parent and description as optional values. | 812 | /// In this case the call handles parent and description as optional values. |
830 | /// </summary> | 813 | /// </summary> |
831 | |||
832 | private bool VivoxTryCreateChannel(string parent, string channelId, string description, out string channelUri) | 814 | private bool VivoxTryCreateChannel(string parent, string channelId, string description, out string channelUri) |
833 | { | 815 | { |
834 | string requrl = String.Format(m_vivoxChannelPath, m_vivoxServer, "create", channelId, m_authToken); | 816 | string requrl = String.Format(m_vivoxChannelPath, m_vivoxServer, "create", channelId, m_authToken); |
@@ -864,7 +846,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
864 | /// channel name space. | 846 | /// channel name space. |
865 | /// The parent and description are optional values. | 847 | /// The parent and description are optional values. |
866 | /// </summary> | 848 | /// </summary> |
867 | |||
868 | private bool VivoxTryCreateDirectory(string dirId, string description, out string channelId) | 849 | private bool VivoxTryCreateDirectory(string dirId, string description, out string channelId) |
869 | { | 850 | { |
870 | string requrl = String.Format(m_vivoxChannelPath, m_vivoxServer, "create", dirId, m_authToken); | 851 | string requrl = String.Format(m_vivoxChannelPath, m_vivoxServer, "create", dirId, m_authToken); |
@@ -901,7 +882,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
901 | /// are required in a later phase. | 882 | /// are required in a later phase. |
902 | /// In this case the call handles parent and description as optional values. | 883 | /// In this case the call handles parent and description as optional values. |
903 | /// </summary> | 884 | /// </summary> |
904 | |||
905 | private bool VivoxTryGetChannel(string channelParent, string channelName, | 885 | private bool VivoxTryGetChannel(string channelParent, string channelName, |
906 | out string channelId, out string channelUri) | 886 | out string channelId, out string channelUri) |
907 | { | 887 | { |
@@ -1044,6 +1024,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1044 | // return VivoxCall(requrl, true); | 1024 | // return VivoxCall(requrl, true); |
1045 | // } | 1025 | // } |
1046 | 1026 | ||
1027 | private static readonly string m_vivoxChannelDel = "https://{0}/api2/viv_chan_mod.php?mode={1}&chan_id={2}&auth_token={3}"; | ||
1028 | |||
1047 | /// <summary> | 1029 | /// <summary> |
1048 | /// Delete a channel. | 1030 | /// Delete a channel. |
1049 | /// Once again, there a multitude of options possible. In the simplest case | 1031 | /// Once again, there a multitude of options possible. In the simplest case |
@@ -1056,8 +1038,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1056 | /// In this case the call handles parent and description as optional values. | 1038 | /// In this case the call handles parent and description as optional values. |
1057 | /// </summary> | 1039 | /// </summary> |
1058 | 1040 | ||
1059 | private static readonly string m_vivoxChannelDel = "https://{0}/api2/viv_chan_mod.php?mode={1}&chan_id={2}&auth_token={3}"; | ||
1060 | |||
1061 | private XmlElement VivoxDeleteChannel(string parent, string channelid) | 1041 | private XmlElement VivoxDeleteChannel(string parent, string channelid) |
1062 | { | 1042 | { |
1063 | string requrl = String.Format(m_vivoxChannelDel, m_vivoxServer, "delete", channelid, m_authToken); | 1043 | string requrl = String.Format(m_vivoxChannelDel, m_vivoxServer, "delete", channelid, m_authToken); |
@@ -1068,12 +1048,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1068 | return VivoxCall(requrl, true); | 1048 | return VivoxCall(requrl, true); |
1069 | } | 1049 | } |
1070 | 1050 | ||
1051 | private static readonly string m_vivoxChannelSearch = "https://{0}/api2/viv_chan_search.php?&cond_chanparent={1}&auth_token={2}"; | ||
1052 | |||
1071 | /// <summary> | 1053 | /// <summary> |
1072 | /// Return information on channels in the given directory | 1054 | /// Return information on channels in the given directory |
1073 | /// </summary> | 1055 | /// </summary> |
1074 | 1056 | ||
1075 | private static readonly string m_vivoxChannelSearch = "https://{0}/api2/viv_chan_search.php?&cond_chanparent={1}&auth_token={2}"; | ||
1076 | |||
1077 | private XmlElement VivoxListChildren(string channelid) | 1057 | private XmlElement VivoxListChildren(string channelid) |
1078 | { | 1058 | { |
1079 | string requrl = String.Format(m_vivoxChannelSearch, m_vivoxServer, channelid, m_authToken); | 1059 | string requrl = String.Format(m_vivoxChannelSearch, m_vivoxServer, channelid, m_authToken); |
@@ -1118,7 +1098,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1118 | /// The outcome of the call can be determined by examining the | 1098 | /// The outcome of the call can be determined by examining the |
1119 | /// status value in the hash table. | 1099 | /// status value in the hash table. |
1120 | /// </summary> | 1100 | /// </summary> |
1121 | |||
1122 | private XmlElement VivoxCall(string requrl, bool admin) | 1101 | private XmlElement VivoxCall(string requrl, bool admin) |
1123 | { | 1102 | { |
1124 | 1103 | ||
@@ -1164,7 +1143,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1164 | /// <summary> | 1143 | /// <summary> |
1165 | /// Just say if it worked. | 1144 | /// Just say if it worked. |
1166 | /// </summary> | 1145 | /// </summary> |
1167 | |||
1168 | private bool IsOK(XmlElement resp) | 1146 | private bool IsOK(XmlElement resp) |
1169 | { | 1147 | { |
1170 | string status; | 1148 | string status; |
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index d39b847..9ff3652 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs | |||
@@ -84,6 +84,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
84 | private bool m_groupsEnabled = false; | 84 | private bool m_groupsEnabled = false; |
85 | private bool m_groupNoticesEnabled = true; | 85 | private bool m_groupNoticesEnabled = true; |
86 | private bool m_debugEnabled = false; | 86 | private bool m_debugEnabled = false; |
87 | private int m_levelGroupCreate = 0; | ||
87 | 88 | ||
88 | #region IRegionModuleBase Members | 89 | #region IRegionModuleBase Members |
89 | 90 | ||
@@ -115,6 +116,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
115 | 116 | ||
116 | m_groupNoticesEnabled = groupsConfig.GetBoolean("NoticesEnabled", true); | 117 | m_groupNoticesEnabled = groupsConfig.GetBoolean("NoticesEnabled", true); |
117 | m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", false); | 118 | m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", false); |
119 | m_levelGroupCreate = groupsConfig.GetInt("LevelGroupCreate", 0); | ||
118 | } | 120 | } |
119 | } | 121 | } |
120 | 122 | ||
@@ -708,13 +710,29 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
708 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists."); | 710 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists."); |
709 | return UUID.Zero; | 711 | return UUID.Zero; |
710 | } | 712 | } |
713 | |||
714 | // check user level | ||
715 | ScenePresence avatar = null; | ||
716 | Scene scene = (Scene)remoteClient.Scene; | ||
717 | scene.TryGetScenePresence(remoteClient.AgentId, out avatar); | ||
718 | |||
719 | if (avatar != null) | ||
720 | { | ||
721 | if (avatar.UserLevel < m_levelGroupCreate) | ||
722 | { | ||
723 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "You have got insufficient permissions to create a group."); | ||
724 | return UUID.Zero; | ||
725 | } | ||
726 | } | ||
727 | |||
728 | // check funds | ||
711 | // is there is a money module present ? | 729 | // is there is a money module present ? |
712 | IMoneyModule money = remoteClient.Scene.RequestModuleInterface<IMoneyModule>(); | 730 | IMoneyModule money = scene.RequestModuleInterface<IMoneyModule>(); |
713 | if (money != null) | 731 | if (money != null) |
714 | { | 732 | { |
715 | // do the transaction, that is if the agent has got sufficient funds | 733 | // do the transaction, that is if the agent has got sufficient funds |
716 | if (!money.AmountCovered(remoteClient.AgentId, money.GroupCreationCharge)) { | 734 | if (!money.AmountCovered(remoteClient.AgentId, money.GroupCreationCharge)) { |
717 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "You have got issuficient funds to create a group."); | 735 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "You have got insufficient funds to create a group."); |
718 | return UUID.Zero; | 736 | return UUID.Zero; |
719 | } | 737 | } |
720 | money.ApplyCharge(GetRequestingAgentID(remoteClient), money.GroupCreationCharge, "Group Creation"); | 738 | money.ApplyCharge(GetRequestingAgentID(remoteClient), money.GroupCreationCharge, "Group Creation"); |
@@ -939,17 +957,55 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
939 | 957 | ||
940 | public void EjectGroupMemberRequest(IClientAPI remoteClient, UUID groupID, UUID ejecteeID) | 958 | public void EjectGroupMemberRequest(IClientAPI remoteClient, UUID groupID, UUID ejecteeID) |
941 | { | 959 | { |
942 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 960 | EjectGroupMember(remoteClient, GetRequestingAgentID(remoteClient), groupID, ejecteeID); |
961 | } | ||
943 | 962 | ||
963 | public void EjectGroupMember(IClientAPI remoteClient, UUID agentID, UUID groupID, UUID ejecteeID) | ||
964 | { | ||
965 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | ||
944 | 966 | ||
945 | // Todo: Security check? | 967 | // Todo: Security check? |
946 | m_groupData.RemoveAgentFromGroup(GetRequestingAgentID(remoteClient), ejecteeID, groupID); | 968 | m_groupData.RemoveAgentFromGroup(agentID, ejecteeID, groupID); |
947 | 969 | ||
948 | remoteClient.SendEjectGroupMemberReply(GetRequestingAgentID(remoteClient), groupID, true); | 970 | string agentName; |
971 | RegionInfo regionInfo; | ||
949 | 972 | ||
950 | GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), groupID, null); | 973 | // remoteClient provided or just agentID? |
974 | if (remoteClient != null) | ||
975 | { | ||
976 | agentName = remoteClient.Name; | ||
977 | regionInfo = remoteClient.Scene.RegionInfo; | ||
978 | remoteClient.SendEjectGroupMemberReply(agentID, groupID, true); | ||
979 | } | ||
980 | else | ||
981 | { | ||
982 | IClientAPI client = GetActiveClient(agentID); | ||
983 | |||
984 | if (client != null) | ||
985 | { | ||
986 | agentName = client.Name; | ||
987 | regionInfo = client.Scene.RegionInfo; | ||
988 | client.SendEjectGroupMemberReply(agentID, groupID, true); | ||
989 | } | ||
990 | else | ||
991 | { | ||
992 | regionInfo = m_sceneList[0].RegionInfo; | ||
993 | UserAccount acc = m_sceneList[0].UserAccountService.GetUserAccount(regionInfo.ScopeID, agentID); | ||
951 | 994 | ||
952 | UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(remoteClient.Scene.RegionInfo.ScopeID, ejecteeID); | 995 | if (acc != null) |
996 | { | ||
997 | agentName = acc.FirstName + " " + acc.LastName; | ||
998 | } | ||
999 | else | ||
1000 | { | ||
1001 | agentName = "Unknown member"; | ||
1002 | } | ||
1003 | } | ||
1004 | } | ||
1005 | |||
1006 | GroupRecord groupInfo = m_groupData.GetGroupRecord(agentID, groupID, null); | ||
1007 | |||
1008 | UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(regionInfo.ScopeID, ejecteeID); | ||
953 | if ((groupInfo == null) || (account == null)) | 1009 | if ((groupInfo == null) || (account == null)) |
954 | { | 1010 | { |
955 | return; | 1011 | return; |
@@ -959,23 +1015,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
959 | GridInstantMessage msg = new GridInstantMessage(); | 1015 | GridInstantMessage msg = new GridInstantMessage(); |
960 | 1016 | ||
961 | msg.imSessionID = UUID.Zero.Guid; | 1017 | msg.imSessionID = UUID.Zero.Guid; |
962 | msg.fromAgentID = GetRequestingAgentID(remoteClient).Guid; | 1018 | msg.fromAgentID = agentID.Guid; |
963 | // msg.fromAgentID = info.GroupID; | 1019 | // msg.fromAgentID = info.GroupID; |
964 | msg.toAgentID = ejecteeID.Guid; | 1020 | msg.toAgentID = ejecteeID.Guid; |
965 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 1021 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
966 | msg.timestamp = 0; | 1022 | msg.timestamp = 0; |
967 | msg.fromAgentName = remoteClient.Name; | 1023 | msg.fromAgentName = agentName; |
968 | msg.message = string.Format("You have been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName); | 1024 | msg.message = string.Format("You have been ejected from '{1}' by {0}.", agentName, groupInfo.GroupName); |
969 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageFromAgent; | 1025 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageFromAgent; |
970 | msg.fromGroup = false; | 1026 | msg.fromGroup = false; |
971 | msg.offline = (byte)0; | 1027 | msg.offline = (byte)0; |
972 | msg.ParentEstateID = 0; | 1028 | msg.ParentEstateID = 0; |
973 | msg.Position = Vector3.Zero; | 1029 | msg.Position = Vector3.Zero; |
974 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; | 1030 | msg.RegionID = regionInfo.RegionID.Guid; |
975 | msg.binaryBucket = new byte[0]; | 1031 | msg.binaryBucket = new byte[0]; |
976 | OutgoingInstantMessage(msg, ejecteeID); | 1032 | OutgoingInstantMessage(msg, ejecteeID); |
977 | 1033 | ||
978 | |||
979 | // Message to ejector | 1034 | // Message to ejector |
980 | // Interop, received special 210 code for ejecting a group member | 1035 | // Interop, received special 210 code for ejecting a group member |
981 | // this only works within the comms servers domain, and won't work hypergrid | 1036 | // this only works within the comms servers domain, and won't work hypergrid |
@@ -985,26 +1040,26 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
985 | 1040 | ||
986 | msg = new GridInstantMessage(); | 1041 | msg = new GridInstantMessage(); |
987 | msg.imSessionID = UUID.Zero.Guid; | 1042 | msg.imSessionID = UUID.Zero.Guid; |
988 | msg.fromAgentID = GetRequestingAgentID(remoteClient).Guid; | 1043 | msg.fromAgentID = agentID.Guid; |
989 | msg.toAgentID = GetRequestingAgentID(remoteClient).Guid; | 1044 | msg.toAgentID = agentID.Guid; |
990 | msg.timestamp = 0; | 1045 | msg.timestamp = 0; |
991 | msg.fromAgentName = remoteClient.Name; | 1046 | msg.fromAgentName = agentName; |
992 | if (account != null) | 1047 | if (account != null) |
993 | { | 1048 | { |
994 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName, account.FirstName + " " + account.LastName); | 1049 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", agentName, groupInfo.GroupName, account.FirstName + " " + account.LastName); |
995 | } | 1050 | } |
996 | else | 1051 | else |
997 | { | 1052 | { |
998 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName, "Unknown member"); | 1053 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", agentName, groupInfo.GroupName, "Unknown member"); |
999 | } | 1054 | } |
1000 | msg.dialog = (byte)210; //interop | 1055 | msg.dialog = (byte)210; //interop |
1001 | msg.fromGroup = false; | 1056 | msg.fromGroup = false; |
1002 | msg.offline = (byte)0; | 1057 | msg.offline = (byte)0; |
1003 | msg.ParentEstateID = 0; | 1058 | msg.ParentEstateID = 0; |
1004 | msg.Position = Vector3.Zero; | 1059 | msg.Position = Vector3.Zero; |
1005 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; | 1060 | msg.RegionID = regionInfo.RegionID.Guid; |
1006 | msg.binaryBucket = new byte[0]; | 1061 | msg.binaryBucket = new byte[0]; |
1007 | OutgoingInstantMessage(msg, GetRequestingAgentID(remoteClient)); | 1062 | OutgoingInstantMessage(msg, agentID); |
1008 | 1063 | ||
1009 | 1064 | ||
1010 | // SL sends out messages to everyone in the group | 1065 | // SL sends out messages to everyone in the group |
@@ -1014,16 +1069,55 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1014 | 1069 | ||
1015 | public void InviteGroupRequest(IClientAPI remoteClient, UUID groupID, UUID invitedAgentID, UUID roleID) | 1070 | public void InviteGroupRequest(IClientAPI remoteClient, UUID groupID, UUID invitedAgentID, UUID roleID) |
1016 | { | 1071 | { |
1072 | InviteGroup(remoteClient, GetRequestingAgentID(remoteClient), groupID, invitedAgentID, roleID); | ||
1073 | } | ||
1074 | |||
1075 | public void InviteGroup(IClientAPI remoteClient, UUID agentID, UUID groupID, UUID invitedAgentID, UUID roleID) | ||
1076 | { | ||
1017 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 1077 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
1018 | 1078 | ||
1079 | string agentName; | ||
1080 | RegionInfo regionInfo; | ||
1081 | |||
1082 | // remoteClient provided or just agentID? | ||
1083 | if (remoteClient != null) | ||
1084 | { | ||
1085 | agentName = remoteClient.Name; | ||
1086 | regionInfo = remoteClient.Scene.RegionInfo; | ||
1087 | } | ||
1088 | else | ||
1089 | { | ||
1090 | IClientAPI client = GetActiveClient(agentID); | ||
1091 | |||
1092 | if (client != null) | ||
1093 | { | ||
1094 | agentName = client.Name; | ||
1095 | regionInfo = client.Scene.RegionInfo; | ||
1096 | } | ||
1097 | else | ||
1098 | { | ||
1099 | regionInfo = m_sceneList[0].RegionInfo; | ||
1100 | UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(regionInfo.ScopeID, agentID); | ||
1101 | |||
1102 | if (account != null) | ||
1103 | { | ||
1104 | agentName = account.FirstName + " " + account.LastName; | ||
1105 | } | ||
1106 | else | ||
1107 | { | ||
1108 | agentName = "Unknown member"; | ||
1109 | } | ||
1110 | } | ||
1111 | } | ||
1112 | |||
1019 | // Todo: Security check, probably also want to send some kind of notification | 1113 | // Todo: Security check, probably also want to send some kind of notification |
1020 | UUID InviteID = UUID.Random(); | 1114 | UUID InviteID = UUID.Random(); |
1021 | 1115 | ||
1022 | m_groupData.AddAgentToGroupInvite(GetRequestingAgentID(remoteClient), InviteID, groupID, roleID, invitedAgentID); | 1116 | m_groupData.AddAgentToGroupInvite(agentID, InviteID, groupID, roleID, invitedAgentID); |
1023 | 1117 | ||
1024 | // Check to see if the invite went through, if it did not then it's possible | 1118 | // Check to see if the invite went through, if it did not then it's possible |
1025 | // the remoteClient did not validate or did not have permission to invite. | 1119 | // the remoteClient did not validate or did not have permission to invite. |
1026 | GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(GetRequestingAgentID(remoteClient), InviteID); | 1120 | GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(agentID, InviteID); |
1027 | 1121 | ||
1028 | if (inviteInfo != null) | 1122 | if (inviteInfo != null) |
1029 | { | 1123 | { |
@@ -1035,19 +1129,19 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1035 | 1129 | ||
1036 | msg.imSessionID = inviteUUID; | 1130 | msg.imSessionID = inviteUUID; |
1037 | 1131 | ||
1038 | // msg.fromAgentID = GetRequestingAgentID(remoteClient).Guid; | 1132 | // msg.fromAgentID = agentID.Guid; |
1039 | msg.fromAgentID = groupID.Guid; | 1133 | msg.fromAgentID = groupID.Guid; |
1040 | msg.toAgentID = invitedAgentID.Guid; | 1134 | msg.toAgentID = invitedAgentID.Guid; |
1041 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 1135 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
1042 | msg.timestamp = 0; | 1136 | msg.timestamp = 0; |
1043 | msg.fromAgentName = remoteClient.Name; | 1137 | msg.fromAgentName = agentName; |
1044 | msg.message = string.Format("{0} has invited you to join a group. There is no cost to join this group.", remoteClient.Name); | 1138 | msg.message = string.Format("{0} has invited you to join a group. There is no cost to join this group.", agentName); |
1045 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupInvitation; | 1139 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupInvitation; |
1046 | msg.fromGroup = true; | 1140 | msg.fromGroup = true; |
1047 | msg.offline = (byte)0; | 1141 | msg.offline = (byte)0; |
1048 | msg.ParentEstateID = 0; | 1142 | msg.ParentEstateID = 0; |
1049 | msg.Position = Vector3.Zero; | 1143 | msg.Position = Vector3.Zero; |
1050 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; | 1144 | msg.RegionID = regionInfo.RegionID.Guid; |
1051 | msg.binaryBucket = new byte[20]; | 1145 | msg.binaryBucket = new byte[20]; |
1052 | 1146 | ||
1053 | OutgoingInstantMessage(msg, invitedAgentID); | 1147 | OutgoingInstantMessage(msg, invitedAgentID); |