diff options
Diffstat (limited to 'OpenSim/Region/ClientStack')
9 files changed, 191 insertions, 135 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index 8241e07..98ab433 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | |||
@@ -282,13 +282,19 @@ namespace OpenSim.Region.ClientStack.Linden | |||
282 | m_HostCapsObj.RegisterHandler("UpdateNotecardAgentInventory", req); | 282 | m_HostCapsObj.RegisterHandler("UpdateNotecardAgentInventory", req); |
283 | m_HostCapsObj.RegisterHandler("UpdateScriptAgentInventory", req); | 283 | m_HostCapsObj.RegisterHandler("UpdateScriptAgentInventory", req); |
284 | m_HostCapsObj.RegisterHandler("UpdateScriptAgent", req); | 284 | m_HostCapsObj.RegisterHandler("UpdateScriptAgent", req); |
285 | IRequestHandler getObjectPhysicsDataHandler = new RestStreamHandler("POST", capsBase + m_getObjectPhysicsDataPath, GetObjectPhysicsData); | 285 | |
286 | IRequestHandler getObjectPhysicsDataHandler | ||
287 | = new RestStreamHandler( | ||
288 | "POST", capsBase + m_getObjectPhysicsDataPath, GetObjectPhysicsData, "GetObjectPhysicsData", null); | ||
286 | m_HostCapsObj.RegisterHandler("GetObjectPhysicsData", getObjectPhysicsDataHandler); | 289 | m_HostCapsObj.RegisterHandler("GetObjectPhysicsData", getObjectPhysicsDataHandler); |
287 | IRequestHandler getObjectCostHandler = new RestStreamHandler("POST", capsBase + m_getObjectCostPath, GetObjectCost); | 290 | IRequestHandler getObjectCostHandler = new RestStreamHandler("POST", capsBase + m_getObjectCostPath, GetObjectCost); |
288 | m_HostCapsObj.RegisterHandler("GetObjectCost", getObjectCostHandler); | 291 | m_HostCapsObj.RegisterHandler("GetObjectCost", getObjectCostHandler); |
289 | IRequestHandler ResourceCostSelectedHandler = new RestStreamHandler("POST", capsBase + m_ResourceCostSelectedPath, ResourceCostSelected); | 292 | IRequestHandler ResourceCostSelectedHandler = new RestStreamHandler("POST", capsBase + m_ResourceCostSelectedPath, ResourceCostSelected); |
290 | m_HostCapsObj.RegisterHandler("ResourceCostSelected", ResourceCostSelectedHandler); | 293 | m_HostCapsObj.RegisterHandler("ResourceCostSelected", ResourceCostSelectedHandler); |
291 | IRequestHandler UpdateAgentInformationHandler = new RestStreamHandler("POST", capsBase + m_UpdateAgentInformationPath, UpdateAgentInformation); | 294 | |
295 | IRequestHandler UpdateAgentInformationHandler | ||
296 | = new RestStreamHandler( | ||
297 | "POST", capsBase + m_UpdateAgentInformationPath, UpdateAgentInformation, "UpdateAgentInformation", null); | ||
292 | m_HostCapsObj.RegisterHandler("UpdateAgentInformation", UpdateAgentInformationHandler); | 298 | m_HostCapsObj.RegisterHandler("UpdateAgentInformation", UpdateAgentInformationHandler); |
293 | 299 | ||
294 | m_HostCapsObj.RegisterHandler( | 300 | m_HostCapsObj.RegisterHandler( |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index eb40eb1..d6689d4 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs | |||
@@ -366,7 +366,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
366 | // EventQueueGet when it receive capability information, but then we replace the rest handler immediately | 366 | // EventQueueGet when it receive capability information, but then we replace the rest handler immediately |
367 | // afterwards with the poll service. So for now, we'll pass a null instead to simplify code reading, but | 367 | // afterwards with the poll service. So for now, we'll pass a null instead to simplify code reading, but |
368 | // really it should be possible to directly register the poll handler as a capability. | 368 | // really it should be possible to directly register the poll handler as a capability. |
369 | caps.RegisterHandler("EventQueueGet", new RestHTTPHandler("POST", eventQueueGetPath, null)); | 369 | caps.RegisterHandler( |
370 | "EventQueueGet", new RestHTTPHandler("POST", eventQueueGetPath, null, "EventQueueGet", null)); | ||
370 | // delegate(Hashtable m_dhttpMethod) | 371 | // delegate(Hashtable m_dhttpMethod) |
371 | // { | 372 | // { |
372 | // return ProcessQueue(m_dhttpMethod, agentID, caps); | 373 | // return ProcessQueue(m_dhttpMethod, agentID, caps); |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs index 79d56c4..5196368 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs | |||
@@ -183,7 +183,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
183 | m_isGod = m_scene.Permissions.IsGod(agentID); | 183 | m_isGod = m_scene.Permissions.IsGod(agentID); |
184 | } | 184 | } |
185 | 185 | ||
186 | public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 186 | protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
187 | { | 187 | { |
188 | StreamReader reader = new StreamReader(request); | 188 | StreamReader reader = new StreamReader(request); |
189 | string message = reader.ReadToEnd(); | 189 | string message = reader.ReadToEnd(); |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs index eca576d..674b451 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs | |||
@@ -64,11 +64,18 @@ namespace OpenSim.Region.ClientStack.Linden | |||
64 | 64 | ||
65 | private Scene m_scene; | 65 | private Scene m_scene; |
66 | private bool m_persistBakedTextures; | 66 | private bool m_persistBakedTextures; |
67 | private string m_URL; | ||
67 | 68 | ||
68 | private IBakedTextureModule m_BakedTextureModule; | 69 | private IBakedTextureModule m_BakedTextureModule; |
69 | 70 | ||
70 | public void Initialise(IConfigSource source) | 71 | public void Initialise(IConfigSource source) |
71 | { | 72 | { |
73 | IConfig config = source.Configs["ClientStack.LindenCaps"]; | ||
74 | if (config == null) | ||
75 | return; | ||
76 | |||
77 | m_URL = config.GetString("Cap_UploadBakedTexture", string.Empty); | ||
78 | |||
72 | IConfig appearanceConfig = source.Configs["Appearance"]; | 79 | IConfig appearanceConfig = source.Configs["Appearance"]; |
73 | if (appearanceConfig != null) | 80 | if (appearanceConfig != null) |
74 | m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); | 81 | m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); |
@@ -283,20 +290,26 @@ namespace OpenSim.Region.ClientStack.Linden | |||
283 | UploadBakedTextureHandler avatarhandler = new UploadBakedTextureHandler( | 290 | UploadBakedTextureHandler avatarhandler = new UploadBakedTextureHandler( |
284 | caps, m_scene.AssetService, m_persistBakedTextures); | 291 | caps, m_scene.AssetService, m_persistBakedTextures); |
285 | 292 | ||
286 | 293 | UUID capID = UUID.Random(); | |
287 | |||
288 | caps.RegisterHandler( | ||
289 | "UploadBakedTexture", | ||
290 | new RestStreamHandler( | ||
291 | "POST", | ||
292 | "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath, | ||
293 | avatarhandler.UploadBakedTexture, | ||
294 | "UploadBakedTexture", | ||
295 | agentID.ToString())); | ||
296 | 294 | ||
297 | 295 | //caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture)); | |
298 | 296 | if (m_URL == "localhost") | |
297 | { | ||
298 | caps.RegisterHandler( | ||
299 | "UploadBakedTexture", | ||
300 | new RestStreamHandler( | ||
301 | "POST", | ||
302 | "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath, | ||
303 | avatarhandler.UploadBakedTexture, | ||
304 | "UploadBakedTexture", | ||
305 | agentID.ToString())); | ||
306 | |||
307 | } | ||
308 | else | ||
309 | { | ||
310 | caps.RegisterHandler("UploadBakedTexture", m_URL); | ||
311 | } | ||
299 | 312 | ||
300 | } | 313 | } |
301 | } | 314 | } |
302 | } \ No newline at end of file | 315 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs index bba8ff1..27b09a6 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs | |||
@@ -349,6 +349,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
349 | { | 349 | { |
350 | while (true) | 350 | while (true) |
351 | { | 351 | { |
352 | Watchdog.UpdateThread(); | ||
353 | |||
352 | aPollRequest poolreq = m_queue.Dequeue(); | 354 | aPollRequest poolreq = m_queue.Dequeue(); |
353 | 355 | ||
354 | poolreq.thepoll.Process(poolreq); | 356 | poolreq.thepoll.Process(poolreq); |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 45c901e..dfad485 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -710,12 +710,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
710 | //there is a local handler for this packet type | 710 | //there is a local handler for this packet type |
711 | if (pprocessor.Async) | 711 | if (pprocessor.Async) |
712 | { | 712 | { |
713 | ClientInfo cinfo = UDPClient.GetClientInfo(); | ||
714 | if (!cinfo.AsyncRequests.ContainsKey(packet.Type.ToString())) | ||
715 | cinfo.AsyncRequests[packet.Type.ToString()] = 0; | ||
716 | cinfo.AsyncRequests[packet.Type.ToString()]++; | ||
717 | |||
713 | object obj = new AsyncPacketProcess(this, pprocessor.method, packet); | 718 | object obj = new AsyncPacketProcess(this, pprocessor.method, packet); |
714 | Util.FireAndForget(ProcessSpecificPacketAsync, obj); | 719 | Util.FireAndForget(ProcessSpecificPacketAsync, obj); |
715 | result = true; | 720 | result = true; |
716 | } | 721 | } |
717 | else | 722 | else |
718 | { | 723 | { |
724 | ClientInfo cinfo = UDPClient.GetClientInfo(); | ||
725 | if (!cinfo.SyncRequests.ContainsKey(packet.Type.ToString())) | ||
726 | cinfo.SyncRequests[packet.Type.ToString()] = 0; | ||
727 | cinfo.SyncRequests[packet.Type.ToString()]++; | ||
728 | |||
719 | result = pprocessor.method(this, packet); | 729 | result = pprocessor.method(this, packet); |
720 | } | 730 | } |
721 | } | 731 | } |
@@ -730,6 +740,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
730 | } | 740 | } |
731 | if (found) | 741 | if (found) |
732 | { | 742 | { |
743 | ClientInfo cinfo = UDPClient.GetClientInfo(); | ||
744 | if (!cinfo.GenericRequests.ContainsKey(packet.Type.ToString())) | ||
745 | cinfo.GenericRequests[packet.Type.ToString()] = 0; | ||
746 | cinfo.GenericRequests[packet.Type.ToString()]++; | ||
747 | |||
733 | result = method(this, packet); | 748 | result = method(this, packet); |
734 | } | 749 | } |
735 | } | 750 | } |
@@ -5376,7 +5391,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5376 | AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject); | 5391 | AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject); |
5377 | AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject); | 5392 | AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject); |
5378 | AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand); | 5393 | AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand); |
5379 | AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply); | 5394 | AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false); |
5380 | AddLocalPacketHandler(PacketType.AgentWearablesRequest, HandlerAgentWearablesRequest); | 5395 | AddLocalPacketHandler(PacketType.AgentWearablesRequest, HandlerAgentWearablesRequest); |
5381 | AddLocalPacketHandler(PacketType.AgentSetAppearance, HandlerAgentSetAppearance); | 5396 | AddLocalPacketHandler(PacketType.AgentSetAppearance, HandlerAgentSetAppearance); |
5382 | AddLocalPacketHandler(PacketType.AgentIsNowWearing, HandlerAgentIsNowWearing); | 5397 | AddLocalPacketHandler(PacketType.AgentIsNowWearing, HandlerAgentIsNowWearing); |
@@ -5437,8 +5452,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5437 | AddLocalPacketHandler(PacketType.ScriptAnswerYes, HandleScriptAnswerYes, false); | 5452 | AddLocalPacketHandler(PacketType.ScriptAnswerYes, HandleScriptAnswerYes, false); |
5438 | AddLocalPacketHandler(PacketType.ObjectClickAction, HandleObjectClickAction, false); | 5453 | AddLocalPacketHandler(PacketType.ObjectClickAction, HandleObjectClickAction, false); |
5439 | AddLocalPacketHandler(PacketType.ObjectMaterial, HandleObjectMaterial, false); | 5454 | AddLocalPacketHandler(PacketType.ObjectMaterial, HandleObjectMaterial, false); |
5440 | AddLocalPacketHandler(PacketType.RequestImage, HandleRequestImage); | 5455 | AddLocalPacketHandler(PacketType.RequestImage, HandleRequestImage, false); |
5441 | AddLocalPacketHandler(PacketType.TransferRequest, HandleTransferRequest); | 5456 | AddLocalPacketHandler(PacketType.TransferRequest, HandleTransferRequest, false); |
5442 | AddLocalPacketHandler(PacketType.AssetUploadRequest, HandleAssetUploadRequest); | 5457 | AddLocalPacketHandler(PacketType.AssetUploadRequest, HandleAssetUploadRequest); |
5443 | AddLocalPacketHandler(PacketType.RequestXfer, HandleRequestXfer); | 5458 | AddLocalPacketHandler(PacketType.RequestXfer, HandleRequestXfer); |
5444 | AddLocalPacketHandler(PacketType.SendXferPacket, HandleSendXferPacket); | 5459 | AddLocalPacketHandler(PacketType.SendXferPacket, HandleSendXferPacket); |
@@ -5470,7 +5485,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5470 | AddLocalPacketHandler(PacketType.TeleportCancel, HandleTeleportCancel); | 5485 | AddLocalPacketHandler(PacketType.TeleportCancel, HandleTeleportCancel); |
5471 | AddLocalPacketHandler(PacketType.TeleportLocationRequest, HandleTeleportLocationRequest); | 5486 | AddLocalPacketHandler(PacketType.TeleportLocationRequest, HandleTeleportLocationRequest); |
5472 | AddLocalPacketHandler(PacketType.UUIDNameRequest, HandleUUIDNameRequest, false); | 5487 | AddLocalPacketHandler(PacketType.UUIDNameRequest, HandleUUIDNameRequest, false); |
5473 | AddLocalPacketHandler(PacketType.RegionHandleRequest, HandleRegionHandleRequest); | 5488 | AddLocalPacketHandler(PacketType.RegionHandleRequest, HandleRegionHandleRequest, false); |
5474 | AddLocalPacketHandler(PacketType.ParcelInfoRequest, HandleParcelInfoRequest); | 5489 | AddLocalPacketHandler(PacketType.ParcelInfoRequest, HandleParcelInfoRequest); |
5475 | AddLocalPacketHandler(PacketType.ParcelAccessListRequest, HandleParcelAccessListRequest, false); | 5490 | AddLocalPacketHandler(PacketType.ParcelAccessListRequest, HandleParcelAccessListRequest, false); |
5476 | AddLocalPacketHandler(PacketType.ParcelAccessListUpdate, HandleParcelAccessListUpdate, false); | 5491 | AddLocalPacketHandler(PacketType.ParcelAccessListUpdate, HandleParcelAccessListUpdate, false); |
@@ -7868,129 +7883,145 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7868 | //m_log.Debug("ClientView.ProcessPackets.cs:ProcessInPacket() - Got transfer request"); | 7883 | //m_log.Debug("ClientView.ProcessPackets.cs:ProcessInPacket() - Got transfer request"); |
7869 | 7884 | ||
7870 | TransferRequestPacket transfer = (TransferRequestPacket)Pack; | 7885 | TransferRequestPacket transfer = (TransferRequestPacket)Pack; |
7871 | //m_log.Debug("Transfer Request: " + transfer.ToString()); | ||
7872 | // Validate inventory transfers | ||
7873 | // Has to be done here, because AssetCache can't do it | ||
7874 | // | ||
7875 | UUID taskID = UUID.Zero; | 7886 | UUID taskID = UUID.Zero; |
7876 | if (transfer.TransferInfo.SourceType == (int)SourceType.SimInventoryItem) | 7887 | if (transfer.TransferInfo.SourceType == (int)SourceType.SimInventoryItem) |
7877 | { | 7888 | { |
7878 | taskID = new UUID(transfer.TransferInfo.Params, 48); | ||
7879 | UUID itemID = new UUID(transfer.TransferInfo.Params, 64); | ||
7880 | UUID requestID = new UUID(transfer.TransferInfo.Params, 80); | ||
7881 | |||
7882 | // m_log.DebugFormat( | ||
7883 | // "[CLIENT]: Got request for asset {0} from item {1} in prim {2} by {3}", | ||
7884 | // requestID, itemID, taskID, Name); | ||
7885 | |||
7886 | if (!(((Scene)m_scene).Permissions.BypassPermissions())) | 7889 | if (!(((Scene)m_scene).Permissions.BypassPermissions())) |
7887 | { | 7890 | { |
7888 | if (taskID != UUID.Zero) // Prim | 7891 | // We're spawning a thread because the permissions check can block this thread |
7892 | Util.FireAndForget(delegate | ||
7889 | { | 7893 | { |
7890 | SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); | 7894 | // This requests the asset if needed |
7895 | HandleSimInventoryTransferRequestWithPermsCheck(sender, transfer); | ||
7896 | }); | ||
7897 | return true; | ||
7898 | } | ||
7899 | } | ||
7900 | else if (transfer.TransferInfo.SourceType == (int)SourceType.SimEstate) | ||
7901 | { | ||
7902 | //TransferRequestPacket does not include covenant uuid? | ||
7903 | //get scene covenant uuid | ||
7904 | taskID = m_scene.RegionInfo.RegionSettings.Covenant; | ||
7905 | } | ||
7891 | 7906 | ||
7892 | if (part == null) | 7907 | // This is non-blocking |
7893 | { | 7908 | MakeAssetRequest(transfer, taskID); |
7894 | m_log.WarnFormat( | ||
7895 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but prim does not exist", | ||
7896 | Name, requestID, itemID, taskID); | ||
7897 | return true; | ||
7898 | } | ||
7899 | 7909 | ||
7900 | TaskInventoryItem tii = part.Inventory.GetInventoryItem(itemID); | 7910 | return true; |
7901 | if (tii == null) | 7911 | } |
7902 | { | ||
7903 | m_log.WarnFormat( | ||
7904 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item does not exist", | ||
7905 | Name, requestID, itemID, taskID); | ||
7906 | return true; | ||
7907 | } | ||
7908 | 7912 | ||
7909 | if (tii.Type == (int)AssetType.LSLText) | 7913 | private void HandleSimInventoryTransferRequestWithPermsCheck(IClientAPI sender, TransferRequestPacket transfer) |
7910 | { | 7914 | { |
7911 | if (!((Scene)m_scene).Permissions.CanEditScript(itemID, taskID, AgentId)) | 7915 | UUID taskID = new UUID(transfer.TransferInfo.Params, 48); |
7912 | return true; | 7916 | UUID itemID = new UUID(transfer.TransferInfo.Params, 64); |
7913 | } | 7917 | UUID requestID = new UUID(transfer.TransferInfo.Params, 80); |
7914 | else if (tii.Type == (int)AssetType.Notecard) | ||
7915 | { | ||
7916 | if (!((Scene)m_scene).Permissions.CanEditNotecard(itemID, taskID, AgentId)) | ||
7917 | return true; | ||
7918 | } | ||
7919 | else | ||
7920 | { | ||
7921 | // TODO: Change this code to allow items other than notecards and scripts to be successfully | ||
7922 | // shared with group. In fact, this whole block of permissions checking should move to an IPermissionsModule | ||
7923 | if (part.OwnerID != AgentId) | ||
7924 | { | ||
7925 | m_log.WarnFormat( | ||
7926 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the prim is owned by {4}", | ||
7927 | Name, requestID, itemID, taskID, part.OwnerID); | ||
7928 | return true; | ||
7929 | } | ||
7930 | 7918 | ||
7931 | if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) | 7919 | //m_log.DebugFormat( |
7932 | { | 7920 | // "[CLIENT]: Got request for asset {0} from item {1} in prim {2} by {3}", |
7933 | m_log.WarnFormat( | 7921 | // requestID, itemID, taskID, Name); |
7934 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but modify permissions are not set", | ||
7935 | Name, requestID, itemID, taskID); | ||
7936 | return true; | ||
7937 | } | ||
7938 | 7922 | ||
7939 | if (tii.OwnerID != AgentId) | 7923 | //m_log.Debug("Transfer Request: " + transfer.ToString()); |
7940 | { | 7924 | // Validate inventory transfers |
7941 | m_log.WarnFormat( | 7925 | // Has to be done here, because AssetCache can't do it |
7942 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the item is owned by {4}", | 7926 | // |
7943 | Name, requestID, itemID, taskID, tii.OwnerID); | 7927 | if (taskID != UUID.Zero) // Prim |
7944 | return true; | 7928 | { |
7945 | } | 7929 | SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); |
7946 | 7930 | ||
7947 | if (( | 7931 | if (part == null) |
7948 | tii.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) | 7932 | { |
7949 | != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) | 7933 | m_log.WarnFormat( |
7950 | { | 7934 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but prim does not exist", |
7951 | m_log.WarnFormat( | 7935 | Name, requestID, itemID, taskID); |
7952 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item permissions are not modify/copy/transfer", | 7936 | return; |
7953 | Name, requestID, itemID, taskID); | 7937 | } |
7954 | return true; | ||
7955 | } | ||
7956 | 7938 | ||
7957 | if (tii.AssetID != requestID) | 7939 | TaskInventoryItem tii = part.Inventory.GetInventoryItem(itemID); |
7958 | { | 7940 | if (tii == null) |
7959 | m_log.WarnFormat( | 7941 | { |
7960 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but this does not match item's asset {4}", | 7942 | m_log.WarnFormat( |
7961 | Name, requestID, itemID, taskID, tii.AssetID); | 7943 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item does not exist", |
7962 | return true; | 7944 | Name, requestID, itemID, taskID); |
7963 | } | 7945 | return; |
7964 | } | 7946 | } |
7947 | |||
7948 | if (tii.Type == (int)AssetType.LSLText) | ||
7949 | { | ||
7950 | if (!((Scene)m_scene).Permissions.CanEditScript(itemID, taskID, AgentId)) | ||
7951 | return; | ||
7952 | } | ||
7953 | else if (tii.Type == (int)AssetType.Notecard) | ||
7954 | { | ||
7955 | if (!((Scene)m_scene).Permissions.CanEditNotecard(itemID, taskID, AgentId)) | ||
7956 | return; | ||
7957 | } | ||
7958 | else | ||
7959 | { | ||
7960 | // TODO: Change this code to allow items other than notecards and scripts to be successfully | ||
7961 | // shared with group. In fact, this whole block of permissions checking should move to an IPermissionsModule | ||
7962 | if (part.OwnerID != AgentId) | ||
7963 | { | ||
7964 | m_log.WarnFormat( | ||
7965 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the prim is owned by {4}", | ||
7966 | Name, requestID, itemID, taskID, part.OwnerID); | ||
7967 | return; | ||
7965 | } | 7968 | } |
7966 | else // Agent | 7969 | |
7970 | if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) | ||
7967 | { | 7971 | { |
7968 | IInventoryAccessModule invAccess = m_scene.RequestModuleInterface<IInventoryAccessModule>(); | 7972 | m_log.WarnFormat( |
7969 | if (invAccess != null) | 7973 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but modify permissions are not set", |
7970 | { | 7974 | Name, requestID, itemID, taskID); |
7971 | if (!invAccess.CanGetAgentInventoryItem(this, itemID, requestID)) | 7975 | return; |
7972 | return false; | 7976 | } |
7973 | } | 7977 | |
7974 | else | 7978 | if (tii.OwnerID != AgentId) |
7975 | { | 7979 | { |
7976 | return false; | 7980 | m_log.WarnFormat( |
7977 | } | 7981 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the item is owned by {4}", |
7982 | Name, requestID, itemID, taskID, tii.OwnerID); | ||
7983 | return; | ||
7984 | } | ||
7985 | |||
7986 | if (( | ||
7987 | tii.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) | ||
7988 | != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) | ||
7989 | { | ||
7990 | m_log.WarnFormat( | ||
7991 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item permissions are not modify/copy/transfer", | ||
7992 | Name, requestID, itemID, taskID); | ||
7993 | return; | ||
7994 | } | ||
7995 | |||
7996 | if (tii.AssetID != requestID) | ||
7997 | { | ||
7998 | m_log.WarnFormat( | ||
7999 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but this does not match item's asset {4}", | ||
8000 | Name, requestID, itemID, taskID, tii.AssetID); | ||
8001 | return; | ||
7978 | } | 8002 | } |
7979 | } | 8003 | } |
7980 | } | 8004 | } |
7981 | else | 8005 | else // Agent |
7982 | if (transfer.TransferInfo.SourceType == (int)SourceType.SimEstate) | 8006 | { |
8007 | IInventoryAccessModule invAccess = m_scene.RequestModuleInterface<IInventoryAccessModule>(); | ||
8008 | if (invAccess != null) | ||
8009 | { | ||
8010 | if (!invAccess.CanGetAgentInventoryItem(this, itemID, requestID)) | ||
8011 | return; | ||
8012 | } | ||
8013 | else | ||
7983 | { | 8014 | { |
7984 | //TransferRequestPacket does not include covenant uuid? | 8015 | return; |
7985 | //get scene covenant uuid | ||
7986 | taskID = m_scene.RegionInfo.RegionSettings.Covenant; | ||
7987 | } | 8016 | } |
8017 | } | ||
7988 | 8018 | ||
8019 | // Permissions out of the way, let's request the asset | ||
7989 | MakeAssetRequest(transfer, taskID); | 8020 | MakeAssetRequest(transfer, taskID); |
7990 | 8021 | ||
7991 | return true; | ||
7992 | } | 8022 | } |
7993 | 8023 | ||
8024 | |||
7994 | private bool HandleAssetUploadRequest(IClientAPI sender, Packet Pack) | 8025 | private bool HandleAssetUploadRequest(IClientAPI sender, Packet Pack) |
7995 | { | 8026 | { |
7996 | AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; | 8027 | AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; |
@@ -12378,7 +12409,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12378 | ClientInfo info = m_udpClient.GetClientInfo(); | 12409 | ClientInfo info = m_udpClient.GetClientInfo(); |
12379 | 12410 | ||
12380 | info.proxyEP = null; | 12411 | info.proxyEP = null; |
12381 | info.agentcircuit = RequestClientInfo(); | 12412 | if (info.agentcircuit == null) |
12413 | info.agentcircuit = RequestClientInfo(); | ||
12382 | 12414 | ||
12383 | return info; | 12415 | return info; |
12384 | } | 12416 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs index e52ac37..f7ed14d 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs | |||
@@ -160,6 +160,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
160 | private int m_maxRTO = 60000; | 160 | private int m_maxRTO = 60000; |
161 | public bool m_deliverPackets = true; | 161 | public bool m_deliverPackets = true; |
162 | 162 | ||
163 | private ClientInfo m_info = new ClientInfo(); | ||
164 | |||
163 | /// <summary> | 165 | /// <summary> |
164 | /// Default constructor | 166 | /// Default constructor |
165 | /// </summary> | 167 | /// </summary> |
@@ -241,20 +243,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
241 | // TODO: This data structure is wrong in so many ways. Locking and copying the entire lists | 243 | // TODO: This data structure is wrong in so many ways. Locking and copying the entire lists |
242 | // of pending and needed ACKs for every client every time some method wants information about | 244 | // of pending and needed ACKs for every client every time some method wants information about |
243 | // this connection is a recipe for poor performance | 245 | // this connection is a recipe for poor performance |
244 | ClientInfo info = new ClientInfo(); | 246 | |
245 | info.pendingAcks = new Dictionary<uint, uint>(); | 247 | m_info.resendThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Resend].DripRate; |
246 | info.needAck = new Dictionary<uint, byte[]>(); | 248 | m_info.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate; |
247 | 249 | m_info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate; | |
248 | info.resendThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Resend].DripRate; | 250 | m_info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate; |
249 | info.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate; | 251 | m_info.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate; |
250 | info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate; | 252 | m_info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate; |
251 | info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate; | 253 | m_info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate; |
252 | info.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate; | 254 | m_info.totalThrottle = (int)m_throttleCategory.DripRate; |
253 | info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate; | 255 | |
254 | info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate; | 256 | return m_info; |
255 | info.totalThrottle = (int)m_throttleCategory.DripRate; | ||
256 | |||
257 | return info; | ||
258 | } | 257 | } |
259 | 258 | ||
260 | /// <summary> | 259 | /// <summary> |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 7f14371..77b07ed 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -1512,6 +1512,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1512 | { | 1512 | { |
1513 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code); | 1513 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code); |
1514 | bool tp = (aCircuit.teleportFlags > 0); | 1514 | bool tp = (aCircuit.teleportFlags > 0); |
1515 | // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from | ||
1515 | if (!tp) | 1516 | if (!tp) |
1516 | client.SceneAgent.SendInitialDataToMe(); | 1517 | client.SceneAgent.SendInitialDataToMe(); |
1517 | } | 1518 | } |
@@ -1686,6 +1687,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1686 | { | 1687 | { |
1687 | IncomingPacket incomingPacket = null; | 1688 | IncomingPacket incomingPacket = null; |
1688 | 1689 | ||
1690 | /* | ||
1689 | // HACK: This is a test to try and rate limit packet handling on Mono. | 1691 | // HACK: This is a test to try and rate limit packet handling on Mono. |
1690 | // If it works, a more elegant solution can be devised | 1692 | // If it works, a more elegant solution can be devised |
1691 | if (Util.FireAndForgetCount() < 2) | 1693 | if (Util.FireAndForgetCount() < 2) |
@@ -1693,6 +1695,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1693 | //m_log.Debug("[LLUDPSERVER]: Incoming packet handler is sleeping"); | 1695 | //m_log.Debug("[LLUDPSERVER]: Incoming packet handler is sleeping"); |
1694 | Thread.Sleep(30); | 1696 | Thread.Sleep(30); |
1695 | } | 1697 | } |
1698 | */ | ||
1696 | 1699 | ||
1697 | if (packetInbox.Dequeue(100, ref incomingPacket)) | 1700 | if (packetInbox.Dequeue(100, ref incomingPacket)) |
1698 | { | 1701 | { |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs b/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs index a0e0078..83144e3 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs | |||
@@ -73,7 +73,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests | |||
73 | } | 73 | } |
74 | 74 | ||
75 | [SetUp] | 75 | [SetUp] |
76 | public void SetUp() | 76 | public override void SetUp() |
77 | { | 77 | { |
78 | base.SetUp(); | 78 | base.SetUp(); |
79 | 79 | ||