diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
index a7bcc07b7d..104f2d5656 100644
--- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
+++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
@@ -612,6 +612,7 @@ namespace OpenSim.Client.MXP.ClientStack
public event SpinStop OnSpinStop;
public event UpdateShape OnUpdatePrimShape;
public event ObjectExtraParams OnUpdateExtraParams;
+ public event ObjectRequest OnObjectRequest;
public event ObjectSelect OnObjectSelect;
public event ObjectDeselect OnObjectDeselect;
public event GenericCall7 OnObjectDescription;
diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
index 324b5af140..bfca954818 100644
--- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
+++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
@@ -259,6 +259,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
public event SpinStop OnSpinStop = delegate { };
public event UpdateShape OnUpdatePrimShape = delegate { };
public event ObjectExtraParams OnUpdateExtraParams = delegate { };
+ public event ObjectRequest OnObjectRequest = delegate { };
public event ObjectSelect OnObjectSelect = delegate { };
public event ObjectDeselect OnObjectDeselect = delegate { };
public event GenericCall7 OnObjectDescription = delegate { };
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 1594c446da..e451dd8874 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -111,6 +111,8 @@ namespace OpenSim.Framework
public delegate void ObjectSelect(uint localID, IClientAPI remoteClient);
+ public delegate void ObjectRequest(uint localID, IClientAPI remoteClient);
+
public delegate void RequestObjectPropertiesFamily(
IClientAPI remoteClient, UUID AgentID, uint RequestFlags, UUID TaskID);
@@ -622,6 +624,7 @@ namespace OpenSim.Framework
event UpdateShape OnUpdatePrimShape;
event ObjectExtraParams OnUpdateExtraParams;
+ event ObjectRequest OnObjectRequest;
event ObjectSelect OnObjectSelect;
event ObjectDeselect OnObjectDeselect;
event GenericCall7 OnObjectDescription;
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 7633b7bf00..12c2d86293 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -197,6 +197,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private ObjectExtraParams handlerUpdateExtraParams; //OnUpdateExtraParams;
private ObjectDuplicate handlerObjectDuplicate;
private ObjectDuplicateOnRay handlerObjectDuplicateOnRay;
+ private ObjectRequest handlerObjectRequest;
private ObjectSelect handlerObjectSelect;
private ObjectDeselect handlerObjectDeselect;
private ObjectIncludeInSearch handlerObjectIncludeInSearch;
@@ -1083,6 +1084,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public event GodKickUser OnGodKickUser;
public event ObjectExtraParams OnUpdateExtraParams;
public event UpdateShape OnUpdatePrimShape;
+ public event ObjectRequest OnObjectRequest;
public event ObjectSelect OnObjectSelect;
public event ObjectDeselect OnObjectDeselect;
public event GenericCall7 OnObjectDescription;
@@ -5937,6 +5939,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP
break;
+ case PacketType.RequestMultipleObjects:
+ RequestMultipleObjectsPacket incomingRequest = (RequestMultipleObjectsPacket)Pack;
+
+ #region Packet Session and User Check
+ if (m_checkPackets)
+ {
+ if (incomingRequest.AgentData.SessionID != SessionId ||
+ incomingRequest.AgentData.AgentID != AgentId)
+ break;
+ }
+ #endregion
+
+ handlerObjectRequest = null;
+
+ for (int i = 0; i < incomingRequest.ObjectData.Length; i++)
+ {
+ handlerObjectRequest = OnObjectRequest;
+ if (handlerObjectRequest != null)
+ {
+ handlerObjectRequest(incomingRequest.ObjectData[i].ID, this);
+ }
+ }
+ break;
case PacketType.ObjectSelect:
ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack;
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index 62779e7347..e9c35e9fca 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -107,6 +107,7 @@ namespace OpenSim.Region.Examples.SimpleModule
public event UpdateShape OnUpdatePrimShape;
public event ObjectExtraParams OnUpdateExtraParams;
public event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily;
+ public event ObjectRequest OnObjectRequest;
public event ObjectSelect OnObjectSelect;
public event GenericCall7 OnObjectDescription;
public event GenericCall7 OnObjectName;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 113918dbf3..1a7f8f8f16 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -108,6 +108,29 @@ namespace OpenSim.Region.Framework.Scenes
SimChat(message, type, channel, fromPos, fromName, fromID, fromAgent, true);
}
+ ///
+ /// Invoked when the client requests a prim.
+ ///
+ ///
+ ///
+ public void RequestPrim(uint primLocalID, IClientAPI remoteClient)
+ {
+ PacketType i = PacketType.ObjectUpdate;
+ List EntityList = GetEntities();
+
+ foreach (EntityBase ent in EntityList)
+ {
+ if (ent is SceneObjectGroup)
+ {
+ if (((SceneObjectGroup)ent).LocalId == primLocalID)
+ {
+ ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient);
+ return;
+ }
+ }
+ }
+ }
+
///
/// Invoked when the client selects a prim.
///
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 18d7badbc1..a2275f81d6 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2076,6 +2076,7 @@ namespace OpenSim.Region.Framework.Scenes
client.OnUpdatePrimTexture += m_sceneGraph.UpdatePrimTexture;
client.OnTeleportLocationRequest += RequestTeleportLocation;
client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
+ client.OnObjectRequest += RequestPrim;
client.OnObjectSelect += SelectPrim;
client.OnObjectDeselect += DeselectPrim;
client.OnGrabUpdate += m_sceneGraph.MoveObject;
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index 08fc61f510..a3be18164a 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -686,6 +686,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
public event SpinStop OnSpinStop;
public event UpdateShape OnUpdatePrimShape;
public event ObjectExtraParams OnUpdateExtraParams;
+ public event ObjectRequest OnObjectRequest;
public event ObjectSelect OnObjectSelect;
public event ObjectDeselect OnObjectDeselect;
public event GenericCall7 OnObjectDescription;
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 4a8ba8c958..f0bdf3bb7e 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -213,6 +213,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public event UpdateShape OnUpdatePrimShape;
public event ObjectExtraParams OnUpdateExtraParams;
public event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily;
+ public event ObjectRequest OnObjectRequest;
public event ObjectSelect OnObjectSelect;
public event GenericCall7 OnObjectDescription;
public event GenericCall7 OnObjectName;
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index bf4ddf0cbc..fe31729fe2 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -120,6 +120,7 @@ namespace OpenSim.Tests.Common.Mock
public event ObjectExtraParams OnUpdateExtraParams;
public event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily;
public event ObjectSelect OnObjectSelect;
+ public event ObjectRequest OnObjectRequest;
public event GenericCall7 OnObjectDescription;
public event GenericCall7 OnObjectName;
public event GenericCall7 OnObjectClickAction;