diff options
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs | 89 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | 98 |
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) |