aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs89
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs98
2 files changed, 87 insertions, 100 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
index d9dcee7..3373bd5 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
@@ -172,10 +172,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
172 private void RetrieveInstantMessages(IClientAPI client) 172 private void RetrieveInstantMessages(IClientAPI client)
173 { 173 {
174 if (m_RestURL == String.Empty) 174 if (m_RestURL == String.Empty)
175 { 175 {
176 return; 176 return;
177 } 177 }
178 else 178 else
179 { 179 {
180 m_log.DebugFormat("[OFFLINE MESSAGING]: Retrieving stored messages for {0}", client.AgentId); 180 m_log.DebugFormat("[OFFLINE MESSAGING]: Retrieving stored messages for {0}", client.AgentId);
181 181
@@ -183,64 +183,51 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
183 = SynchronousRestObjectRequester.MakeRequest<UUID, List<GridInstantMessage>>( 183 = SynchronousRestObjectRequester.MakeRequest<UUID, List<GridInstantMessage>>(
184 "POST", m_RestURL + "/RetrieveMessages/", client.AgentId); 184 "POST", m_RestURL + "/RetrieveMessages/", client.AgentId);
185 185
186 if (msglist != null) 186 if (msglist != null)
187 {
188 foreach (GridInstantMessage im in msglist)
189 { 187 {
190 // client.SendInstantMessage(im); 188 foreach (GridInstantMessage im in msglist)
191 189 {
192 // Send through scene event manager so all modules get a chance 190 // client.SendInstantMessage(im);
193 // to look at this message before it gets delivered. 191
194 // 192 // Send through scene event manager so all modules get a chance
195 // Needed for proper state management for stored group 193 // to look at this message before it gets delivered.
196 // invitations 194 //
197 // 195 // Needed for proper state management for stored group
198 196 // invitations
199 im.offline = 1; 197 //
200 198
201 Scene s = FindScene(client.AgentId); 199 im.offline = 1;
202 if (s != null) 200
203 s.EventManager.TriggerIncomingInstantMessage(im); 201 Scene s = FindScene(client.AgentId);
202 if (s != null)
203 s.EventManager.TriggerIncomingInstantMessage(im);
204 }
204 } 205 }
205 } 206 }
206 } 207 }
207 208
208 private void UndeliveredMessage(GridInstantMessage im) 209 private void UndeliveredMessage(GridInstantMessage im)
209 { 210 {
210 if (im.dialog != (byte)InstantMessageDialog.MessageFromObject && 211 if ((im.offline != 0)
211 im.dialog != (byte)InstantMessageDialog.MessageFromAgent && 212 && (!im.fromGroup || (im.fromGroup && m_ForwardOfflineGroupMessages)))
212 im.dialog != (byte)InstantMessageDialog.GroupNotice &&
213 im.dialog != (byte)InstantMessageDialog.GroupInvitation &&
214 im.dialog != (byte)InstantMessageDialog.InventoryOffered)
215 { 213 {
216 bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>( 214 bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>(
217 "POST", m_RestURL+"/SaveMessage/", im); 215 "POST", m_RestURL + "/SaveMessage/", im);
218 return;
219 }
220
221 // It's not delivered. Make sure the scope id is saved
222 // We don't need the imSessionID here anymore, overwrite it
223 Scene scene = FindScene(new UUID(im.fromAgentID));
224 if (scene == null)
225 scene = m_SceneList[0];
226
227 bool success = SynchronousRestObjectPoster.BeginPostObject<GridInstantMessage, bool>(
228 "POST", m_RestURL+"/SaveMessage/?scope=" +
229 scene.RegionInfo.ScopeID.ToString(), im);
230 216
231 if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent) 217 if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
232 { 218 {
233 IClientAPI client = FindClient(new UUID(im.fromAgentID)); 219 IClientAPI client = FindClient(new UUID(im.fromAgentID));
234 if (client == null) 220 if (client == null)
235 return; 221 return;
236 222
237 client.SendInstantMessage(new GridInstantMessage( 223 client.SendInstantMessage(new GridInstantMessage(
238 null, new UUID(im.toAgentID), 224 null, new UUID(im.toAgentID),
239 "System", new UUID(im.fromAgentID), 225 "System", new UUID(im.fromAgentID),
240 (byte)InstantMessageDialog.MessageFromAgent, 226 (byte)InstantMessageDialog.MessageFromAgent,
241 "User is not logged in. "+ 227 "User is not logged in. " +
242 (success ? "Message saved." : "Message not saved"), 228 (success ? "Message saved." : "Message not saved"),
243 false, new Vector3())); 229 false, new Vector3()));
230 }
244 } 231 }
245 } 232 }
246 } 233 }
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 654e202..a4bb40e 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -788,7 +788,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
788 788
789 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment)) 789 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment))
790 return null; 790 return null;
791 791 SceneObjectPart rootPart = group.RootPart;
792 for (int i = 0; i < objlist.Count; i++) 792 for (int i = 0; i < objlist.Count; i++)
793 { 793 {
794 group = objlist[i]; 794 group = objlist[i];
@@ -835,8 +835,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
835 group.AbsolutePosition = pos + veclist[i]; 835 group.AbsolutePosition = pos + veclist[i];
836 } 836 }
837 837
838 SceneObjectPart rootPart = group.RootPart;
839
840 group.SetGroup(remoteClient.ActiveGroupId, remoteClient); 838 group.SetGroup(remoteClient.ActiveGroupId, remoteClient);
841 839
842 if (!attachment) 840 if (!attachment)
@@ -861,13 +859,57 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
861 if (item != null) 859 if (item != null)
862 DoPostRezWhenFromItem(item, attachment); 860 DoPostRezWhenFromItem(item, attachment);
863 861
864 if ((rootPart.OwnerID != item.Owner) || 862 if ((rootPart.OwnerID != item.Owner) ||
865 (item.CurrentPermissions & 16) != 0 || // Magic number 863 (item.CurrentPermissions & 16) != 0 || // Magic number
866 (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0) 864 (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0)
865 {
866 //Need to kill the for sale here
867 rootPart.ObjectSaleType = 0;
868 rootPart.SalePrice = 10;
869
870 if (m_Scene.Permissions.PropagatePermissions())
871 {
872 foreach (SceneObjectPart part in group.Parts)
873 {
874 if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0)
867 { 875 {
868 //Need to kill the for sale here 876 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteEveryone) != 0)
869 rootPart.ObjectSaleType = 0; 877 part.EveryoneMask = item.EveryOnePermissions;
870 rootPart.SalePrice = 10; 878 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteNextOwner) != 0)
879 part.NextOwnerMask = item.NextPermissions;
880 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteGroup) != 0)
881 part.GroupMask = item.GroupPermissions;
882 }
883 }
884
885 foreach (SceneObjectPart part in group.Parts)
886 {
887 part.LastOwnerID = part.OwnerID;
888 part.OwnerID = item.Owner;
889 part.Inventory.ChangeInventoryOwner(item.Owner);
890 }
891
892 group.ApplyNextOwnerPermissions();
893 }
894 }
895 foreach (SceneObjectPart part in group.Parts)
896 {
897 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteEveryone) != 0)
898 part.EveryoneMask = item.EveryOnePermissions;
899 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteNextOwner) != 0)
900 part.NextOwnerMask = item.NextPermissions;
901 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteGroup) != 0)
902 part.GroupMask = item.GroupPermissions;
903 }
904
905 if ((rootPart.OwnerID != item.Owner) ||
906 (item.CurrentPermissions & 16) != 0 || // Magic number
907 (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0)
908 {
909 //Need to kill the for sale here
910 rootPart.ObjectSaleType = 0;
911 rootPart.SalePrice = 10;
912 }
871 913
872 return group; 914 return group;
873 } 915 }
@@ -1015,48 +1057,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
1015 } 1057 }
1016 } 1058 }
1017 } 1059 }
1018 if ((rootPart.OwnerID != item.Owner) ||
1019 (item.CurrentPermissions & 16) != 0 || // Magic number
1020 (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0)
1021 {
1022 //Need to kill the for sale here
1023 rootPart.ObjectSaleType = 0;
1024 rootPart.SalePrice = 10;
1025
1026 if (m_Scene.Permissions.PropagatePermissions())
1027 {
1028 foreach (SceneObjectPart part in group.Parts)
1029 {
1030 if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0)
1031 {
1032 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteEveryone) != 0)
1033 part.EveryoneMask = item.EveryOnePermissions;
1034 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteNextOwner) != 0)
1035 part.NextOwnerMask = item.NextPermissions;
1036 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteGroup) != 0)
1037 part.GroupMask = item.GroupPermissions;
1038 }
1039 }
1040
1041 foreach (SceneObjectPart part in group.Parts)
1042 {
1043 part.LastOwnerID = part.OwnerID;
1044 part.OwnerID = item.Owner;
1045 part.Inventory.ChangeInventoryOwner(item.Owner);
1046 }
1047
1048 group.ApplyNextOwnerPermissions();
1049 }
1050 }
1051 foreach (SceneObjectPart part in group.Parts)
1052 {
1053 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteEveryone) != 0)
1054 part.EveryoneMask = item.EveryOnePermissions;
1055 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteNextOwner) != 0)
1056 part.NextOwnerMask = item.NextPermissions;
1057 if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteGroup) != 0)
1058 part.GroupMask = item.GroupPermissions;
1059 }
1060 } 1060 }
1061 1061
1062 protected void AddUserData(SceneObjectGroup sog) 1062 protected void AddUserData(SceneObjectGroup sog)