aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie2010-04-21 19:51:17 +0100
committerMelanie2010-04-21 19:51:17 +0100
commitaf778f09d568ec3c95f6815450f6ab2c073bd830 (patch)
tree60371db96c16836984e44a15791cdf5f005e03ef
parentAvoid duplicate script resumes. Move resume calls to more logical places (diff)
parentMake the detection cone in attachments face in the direction of the avatar, (diff)
downloadopensim-SC-af778f09d568ec3c95f6815450f6ab2c073bd830.zip
opensim-SC-af778f09d568ec3c95f6815450f6ab2c073bd830.tar.gz
opensim-SC-af778f09d568ec3c95f6815450f6ab2c073bd830.tar.bz2
opensim-SC-af778f09d568ec3c95f6815450f6ab2c073bd830.tar.xz
Merge branch 'master' into careminster-presence-refactor
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs105
-rw-r--r--OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs3
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs17
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs9
5 files changed, 113 insertions, 28 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index d41deb0..3262419 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -7078,32 +7078,90 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7078 taskID = new UUID(transfer.TransferInfo.Params, 48); 7078 taskID = new UUID(transfer.TransferInfo.Params, 48);
7079 UUID itemID = new UUID(transfer.TransferInfo.Params, 64); 7079 UUID itemID = new UUID(transfer.TransferInfo.Params, 64);
7080 UUID requestID = new UUID(transfer.TransferInfo.Params, 80); 7080 UUID requestID = new UUID(transfer.TransferInfo.Params, 80);
7081
7082// m_log.DebugFormat(
7083// "[CLIENT]: Got request for asset {0} from item {1} in prim {2} by {3}",
7084// requestID, itemID, taskID, Name);
7085
7081 if (!(((Scene)m_scene).Permissions.BypassPermissions())) 7086 if (!(((Scene)m_scene).Permissions.BypassPermissions()))
7082 { 7087 {
7083 if (taskID != UUID.Zero) // Prim 7088 if (taskID != UUID.Zero) // Prim
7084 { 7089 {
7085 SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); 7090 SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID);
7091
7086 if (part == null) 7092 if (part == null)
7093 {
7094 m_log.WarnFormat(
7095 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but prim does not exist",
7096 Name, requestID, itemID, taskID);
7087 return true; 7097 return true;
7098 }
7088 7099
7089 if (part.OwnerID != AgentId) 7100 TaskInventoryItem tii = part.Inventory.GetInventoryItem(itemID);
7090 return true; 7101 if (tii == null)
7091 7102 {
7092 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) 7103 m_log.WarnFormat(
7093 return true; 7104 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item does not exist",
7094 7105 Name, requestID, itemID, taskID);
7095 TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID);
7096 if (ti == null)
7097 return true;
7098
7099 if (ti.OwnerID != AgentId)
7100 return true;
7101
7102 if ((ti.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer))
7103 return true;
7104
7105 if (ti.AssetID != requestID)
7106 return true; 7106 return true;
7107 }
7108
7109 if (tii.Type == (int)AssetType.LSLText)
7110 {
7111 if (!((Scene)m_scene).Permissions.CanEditScript(itemID, taskID, AgentId))
7112 return true;
7113 }
7114 else if (tii.Type == (int)AssetType.Notecard)
7115 {
7116 if (!((Scene)m_scene).Permissions.CanEditNotecard(itemID, taskID, AgentId))
7117 return true;
7118 }
7119 else
7120 {
7121 // TODO: Change this code to allow items other than notecards and scripts to be successfully
7122 // shared with group. In fact, this whole block of permissions checking should move to an IPermissionsModule
7123 if (part.OwnerID != AgentId)
7124 {
7125 m_log.WarnFormat(
7126 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the prim is owned by {4}",
7127 Name, requestID, itemID, taskID, part.OwnerID);
7128 return true;
7129 }
7130
7131 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
7132 {
7133 m_log.WarnFormat(
7134 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but modify permissions are not set",
7135 Name, requestID, itemID, taskID);
7136 return true;
7137 }
7138
7139 if (tii.OwnerID != AgentId)
7140 {
7141 m_log.WarnFormat(
7142 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the item is owned by {4}",
7143 Name, requestID, itemID, taskID, tii.OwnerID);
7144 return true;
7145 }
7146
7147 if ((
7148 tii.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer))
7149 != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer))
7150 {
7151 m_log.WarnFormat(
7152 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item permissions are not modify/copy/transfer",
7153 Name, requestID, itemID, taskID);
7154 return true;
7155 }
7156
7157 if (tii.AssetID != requestID)
7158 {
7159 m_log.WarnFormat(
7160 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but this does not match item's asset {4}",
7161 Name, requestID, itemID, taskID, tii.AssetID);
7162 return true;
7163 }
7164 }
7107 } 7165 }
7108 else // Agent 7166 else // Agent
7109 { 7167 {
@@ -7123,7 +7181,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7123 // only to notecards and scripts. All 7181 // only to notecards and scripts. All
7124 // other asset types are always available 7182 // other asset types are always available
7125 // 7183 //
7126 if (assetRequestItem.AssetType == 10) 7184 if (assetRequestItem.AssetType == (int)AssetType.LSLText)
7127 { 7185 {
7128 if (!((Scene)m_scene).Permissions.CanViewScript(itemID, UUID.Zero, AgentId)) 7186 if (!((Scene)m_scene).Permissions.CanViewScript(itemID, UUID.Zero, AgentId))
7129 { 7187 {
@@ -7131,7 +7189,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7131 return true; 7189 return true;
7132 } 7190 }
7133 } 7191 }
7134 else if (assetRequestItem.AssetType == 7) 7192 else if (assetRequestItem.AssetType == (int)AssetType.Notecard)
7135 { 7193 {
7136 if (!((Scene)m_scene).Permissions.CanViewNotecard(itemID, UUID.Zero, AgentId)) 7194 if (!((Scene)m_scene).Permissions.CanViewNotecard(itemID, UUID.Zero, AgentId))
7137 { 7195 {
@@ -7141,7 +7199,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7141 } 7199 }
7142 7200
7143 if (assetRequestItem.AssetID != requestID) 7201 if (assetRequestItem.AssetID != requestID)
7202 {
7203 m_log.WarnFormat(
7204 "[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}",
7205 Name, requestID, itemID, assetRequestItem.AssetID);
7144 return true; 7206 return true;
7207 }
7145 } 7208 }
7146 } 7209 }
7147 } 7210 }
@@ -11376,7 +11439,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11376 // } 11439 // }
11377 } 11440 }
11378 11441
11379 //m_log.DebugFormat("[LLCLIENTVIEW]: {0} requesting asset {1}", Name, requestID); 11442// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID);
11380 11443
11381 m_assetService.Get(requestID.ToString(), transferRequest, AssetReceived); 11444 m_assetService.Get(requestID.ToString(), transferRequest, AssetReceived);
11382 } 11445 }
@@ -11744,4 +11807,4 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11744 OutPacket(dialog, ThrottleOutPacketType.Task); 11807 OutPacket(dialog, ThrottleOutPacketType.Task);
11745 } 11808 }
11746 } 11809 }
11747} 11810} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs
index 012d581..d30e954 100644
--- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs
+++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs
@@ -181,7 +181,10 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
181 Manager.MyScene.AssetService.Store(asset); 181 Manager.MyScene.AssetService.Store(asset);
182 182
183 if (part.Inventory.UpdateInventoryItem(item)) 183 if (part.Inventory.UpdateInventoryItem(item))
184 {
185 remoteClient.SendAgentAlertMessage("Notecard saved", false);
184 part.GetProperties(remoteClient); 186 part.GetProperties(remoteClient);
187 }
185 } 188 }
186 } 189 }
187 } 190 }
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index d940564..01359f0 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -1079,7 +1079,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1079 1079
1080 if ((part.GroupMask & (uint)PermissionMask.Modify) == 0) 1080 if ((part.GroupMask & (uint)PermissionMask.Modify) == 0)
1081 return false; 1081 return false;
1082 } else { 1082 }
1083 else
1084 {
1083 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) 1085 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
1084 return false; 1086 return false;
1085 } 1087 }
@@ -1095,7 +1097,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1095 return false; 1097 return false;
1096 1098
1097 if (!IsGroupMember(ti.GroupID, user, 0)) 1099 if (!IsGroupMember(ti.GroupID, user, 0))
1098 return false; 1100 return false;
1099 } 1101 }
1100 1102
1101 // Require full perms 1103 // Require full perms
@@ -1593,14 +1595,16 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1593 if (part.OwnerID != user) 1595 if (part.OwnerID != user)
1594 { 1596 {
1595 if (part.GroupID == UUID.Zero) 1597 if (part.GroupID == UUID.Zero)
1596 return false; 1598 return false;
1597 1599
1598 if (!IsGroupMember(part.GroupID, user, 0)) 1600 if (!IsGroupMember(part.GroupID, user, 0))
1599 return false; 1601 return false;
1600 1602
1601 if ((part.GroupMask & (uint)PermissionMask.Modify) == 0) 1603 if ((part.GroupMask & (uint)PermissionMask.Modify) == 0)
1602 return false; 1604 return false;
1603 } else { 1605 }
1606 else
1607 {
1604 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) 1608 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
1605 return false; 1609 return false;
1606 } 1610 }
@@ -1855,7 +1859,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1855 return GenericObjectPermission(agentID, prim, false); 1859 return GenericObjectPermission(agentID, prim, false);
1856 } 1860 }
1857 1861
1858 private bool CanCompileScript(UUID ownerUUID, int scriptType, Scene scene) { 1862 private bool CanCompileScript(UUID ownerUUID, int scriptType, Scene scene)
1863 {
1859 //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType); 1864 //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType);
1860 switch (scriptType) { 1865 switch (scriptType) {
1861 case 0: 1866 case 0:
@@ -1889,4 +1894,4 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1889 return(false); 1894 return(false);
1890 } 1895 }
1891 } 1896 }
1892} 1897} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 2f1a189..e6e414f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -202,7 +202,9 @@ namespace OpenSim.Region.Framework.Scenes
202 202
203 // Update item with new asset 203 // Update item with new asset
204 item.AssetID = asset.FullID; 204 item.AssetID = asset.FullID;
205 group.UpdateInventoryItem(item); 205 if (group.UpdateInventoryItem(item))
206 remoteClient.SendAgentAlertMessage("Notecard saved", false);
207
206 part.GetProperties(remoteClient); 208 part.GetProperties(remoteClient);
207 209
208 // Trigger rerunning of script (use TriggerRezScript event, see RezScript) 210 // Trigger rerunning of script (use TriggerRezScript event, see RezScript)
@@ -1229,7 +1231,10 @@ namespace OpenSim.Region.Framework.Scenes
1229 remoteClient, part, transactionID, currentItem); 1231 remoteClient, part, transactionID, currentItem);
1230 } 1232 }
1231 if (part.Inventory.UpdateInventoryItem(itemInfo)) 1233 if (part.Inventory.UpdateInventoryItem(itemInfo))
1234 {
1235 remoteClient.SendAgentAlertMessage("Notecard saved", false);
1232 part.GetProperties(remoteClient); 1236 part.GetProperties(remoteClient);
1237 }
1233 } 1238 }
1234 } 1239 }
1235 else 1240 else
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 2296379..4d7ead6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -302,6 +302,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
302 float dz; 302 float dz;
303 303
304 Quaternion q = SensePoint.RotationOffset; 304 Quaternion q = SensePoint.RotationOffset;
305 if (SensePoint.ParentGroup.RootPart.IsAttachment)
306 {
307 // In attachments, the sensor cone always orients with the
308 // avatar rotation. This may include a nonzero elevation if
309 // in mouselook.
310
311 ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.RootPart.AttachedAvatar);
312 q = avatar.Rotation;
313 }
305 LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); 314 LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
306 LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r); 315 LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r);
307 double mag_fwd = LSL_Types.Vector3.Mag(forward_dir); 316 double mag_fwd = LSL_Types.Vector3.Mag(forward_dir);