diff options
4 files changed, 73 insertions, 48 deletions
diff --git a/OpenSim/Framework/Client/IClientInventory.cs b/OpenSim/Framework/Client/IClientInventory.cs index 00651e0..d59f8b7 100644 --- a/OpenSim/Framework/Client/IClientInventory.cs +++ b/OpenSim/Framework/Client/IClientInventory.cs | |||
@@ -33,5 +33,6 @@ namespace OpenSim.Framework.Client | |||
33 | public interface IClientInventory | 33 | public interface IClientInventory |
34 | { | 34 | { |
35 | void SendRemoveInventoryFolders(UUID[] folders); | 35 | void SendRemoveInventoryFolders(UUID[] folders); |
36 | void SendRemoveInventoryItems(UUID[] folders); | ||
36 | } | 37 | } |
37 | } | 38 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 557ab30..dd18b16 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -12423,6 +12423,44 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12423 | OutPacket(reply, ThrottleOutPacketType.Task); | 12423 | OutPacket(reply, ThrottleOutPacketType.Task); |
12424 | } | 12424 | } |
12425 | 12425 | ||
12426 | public void SendRemoveInventoryItems(UUID[] items) | ||
12427 | { | ||
12428 | IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>(); | ||
12429 | |||
12430 | if (eq == null) | ||
12431 | { | ||
12432 | m_log.DebugFormat("[LLCLIENT]: Null event queue"); | ||
12433 | return; | ||
12434 | } | ||
12435 | |||
12436 | OSDMap llsd = new OSDMap(3); | ||
12437 | |||
12438 | OSDMap AgentDataMap = new OSDMap(1); | ||
12439 | AgentDataMap.Add("AgentID", OSD.FromUUID(AgentId)); | ||
12440 | AgentDataMap.Add("SessionID", OSD.FromUUID(SessionId)); | ||
12441 | |||
12442 | OSDArray AgentData = new OSDArray(1); | ||
12443 | AgentData.Add(AgentDataMap); | ||
12444 | |||
12445 | llsd.Add("AgentData", AgentData); | ||
12446 | |||
12447 | OSDArray ItemData = new OSDArray(); | ||
12448 | |||
12449 | foreach (UUID item in items) | ||
12450 | { | ||
12451 | OSDMap ItemDataMap = new OSDMap(2); | ||
12452 | ItemDataMap.Add("ItemID", OSD.FromUUID(item)); | ||
12453 | ItemDataMap.Add("AgentID", OSD.FromUUID(AgentId)); | ||
12454 | |||
12455 | ItemData.Add(ItemDataMap); | ||
12456 | } | ||
12457 | |||
12458 | llsd.Add("ItemData", ItemData); | ||
12459 | |||
12460 | eq.Enqueue(BuildEvent("RemoveInventoryItem", | ||
12461 | llsd), AgentId); | ||
12462 | } | ||
12463 | |||
12426 | public void SendRemoveInventoryFolders(UUID[] folders) | 12464 | public void SendRemoveInventoryFolders(UUID[] folders) |
12427 | { | 12465 | { |
12428 | IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>(); | 12466 | IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>(); |
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 853491b..470ce2e 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -72,9 +72,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
72 | public delegate void OnNewClientDelegate(IClientAPI client); | 72 | public delegate void OnNewClientDelegate(IClientAPI client); |
73 | 73 | ||
74 | /// <summary> | 74 | /// <summary> |
75 | /// Deprecated in favour of OnClientConnect. | 75 | /// Triggered when a new client is added to the scene. |
76 | /// Will be marked Obsolete after IClientCore has 100% of IClientAPI interfaces. | ||
77 | /// </summary> | 76 | /// </summary> |
77 | /// <remarks> | ||
78 | /// Triggered before OnClientLogin. | ||
79 | /// </remarks> | ||
78 | public event OnNewClientDelegate OnNewClient; | 80 | public event OnNewClientDelegate OnNewClient; |
79 | 81 | ||
80 | /// <summary> | 82 | /// <summary> |
@@ -192,6 +194,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
192 | 194 | ||
193 | public delegate void ClientClosed(UUID clientID, Scene scene); | 195 | public delegate void ClientClosed(UUID clientID, Scene scene); |
194 | 196 | ||
197 | /// <summary> | ||
198 | /// Fired when a client is removed from a scene. | ||
199 | /// </summary> | ||
200 | /// <remarks> | ||
201 | /// At the point of firing, the scene still contains the client's scene presence. | ||
202 | /// </remarks> | ||
195 | public event ClientClosed OnClientClosed; | 203 | public event ClientClosed OnClientClosed; |
196 | 204 | ||
197 | public delegate void NewScript(UUID clientID, SceneObjectPart part, UUID itemID); | 205 | public delegate void NewScript(UUID clientID, SceneObjectPart part, UUID itemID); |
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; |