aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs9
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs12
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs74
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs47
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateTerrainXferHandler.cs6
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs21
6 files changed, 80 insertions, 89 deletions
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs
index da1ff2e..1e14f45 100644
--- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs
+++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs
@@ -33,6 +33,7 @@ using OpenSim.Framework;
33 33
34using OpenSim.Region.Framework.Scenes; 34using OpenSim.Region.Framework.Scenes;
35using OpenSim.Services.Interfaces; 35using OpenSim.Services.Interfaces;
36using OpenSim.Region.Framework.Interfaces;
36 37
37namespace OpenSim.Region.CoreModules.Agent.AssetTransaction 38namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
38{ 39{
@@ -119,6 +120,14 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
119 } 120 }
120 else 121 else
121 { 122 {
123 // Check if the xfer is a terrain xfer
124 IEstateModule estateModule = m_Scene.RequestModuleInterface<IEstateModule>();
125 if (estateModule != null)
126 {
127 if (estateModule.IsTerrainXfer(xferID))
128 return;
129 }
130
122 m_log.ErrorFormat( 131 m_log.ErrorFormat(
123 "[AGENT ASSET TRANSACTIONS]: Could not find uploader for xfer id {0}, packet id {1}, data length {2}", 132 "[AGENT ASSET TRANSACTIONS]: Could not find uploader for xfer id {0}, packet id {1}, data length {2}",
124 xferID, packetID, data.Length); 133 xferID, packetID, data.Length);
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
index 2116605..ff87ece 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
@@ -42,14 +42,22 @@ using log4net;
42 42
43namespace OpenSim.Region.CoreModules.Avatar.Friends 43namespace OpenSim.Region.CoreModules.Avatar.Friends
44{ 44{
45 public class FriendsRequestHandler : BaseStreamHandler 45 public class FriendsRequestHandler : BaseStreamHandlerBasicDOSProtector
46 { 46 {
47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 48
49 private FriendsModule m_FriendsModule; 49 private FriendsModule m_FriendsModule;
50 50
51 public FriendsRequestHandler(FriendsModule fmodule) 51 public FriendsRequestHandler(FriendsModule fmodule)
52 : base("POST", "/friends") 52 : base("POST", "/friends", new BasicDosProtectorOptions()
53 {
54 AllowXForwardedFor = true,
55 ForgetTimeSpan = TimeSpan.FromMinutes(2),
56 MaxRequestsInTimeframe = 20,
57 ReportingName = "FRIENDSDOSPROTECTOR",
58 RequestTimeSpan = TimeSpan.FromSeconds(5),
59 ThrottledAction = BasicDOSProtector.ThrottleAction.DoThrottledMethod
60 })
53 { 61 {
54 m_FriendsModule = fmodule; 62 m_FriendsModule = fmodule;
55 } 63 }
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index ac4203f..6251266 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -789,83 +789,29 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
789 789
790 SceneObjectGroup group = null; 790 SceneObjectGroup group = null;
791 791
792 string xmlData = Utils.BytesToString(rezAsset.Data); 792 List<SceneObjectGroup> objlist;
793 List<SceneObjectGroup> objlist = new List<SceneObjectGroup>(); 793 List<Vector3> veclist;
794 List<Vector3> veclist = new List<Vector3>(); 794 Vector3 bbox;
795 float offsetHeight;
795 byte bRayEndIsIntersection = (byte)(RayEndIsIntersection ? 1 : 0); 796 byte bRayEndIsIntersection = (byte)(RayEndIsIntersection ? 1 : 0);
796 Vector3 pos; 797 Vector3 pos;
797 798
798 XmlDocument doc = new XmlDocument(); 799 bool single = m_Scene.GetObjectsToRez(rezAsset.Data, attachment, out objlist, out veclist, out bbox, out offsetHeight);
799 doc.LoadXml(xmlData);
800 XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject");
801 Vector3 rez_pos;
802 if (e == null || attachment) // Single
803 {
804 SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData);
805 if (!attachment)
806 {
807 g.RootPart.AttachPoint = g.RootPart.Shape.State;
808 g.RootPart.AttachOffset = g.AbsolutePosition;
809 g.RootPart.AttachRotation = g.GroupRotation;
810 if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
811 g.RootPart.Shape.PCode != (byte)PCode.Tree)
812 g.RootPart.Shape.State = 0;
813 }
814
815 objlist.Add(g);
816 veclist.Add(Vector3.Zero);
817 800
818 float offsetHeight = 0; 801 if (single)
802 {
819 pos = m_Scene.GetNewRezLocation( 803 pos = m_Scene.GetNewRezLocation(
820 RayStart, RayEnd, RayTargetID, Quaternion.Identity, 804 RayStart, RayEnd, RayTargetID, Quaternion.Identity,
821 BypassRayCast, bRayEndIsIntersection, true, g.GetAxisAlignedBoundingBox(out offsetHeight), false); 805 BypassRayCast, bRayEndIsIntersection, true, bbox, false);
822 pos.Z += offsetHeight; 806 pos.Z += offsetHeight;
823 rez_pos = pos;
824 } 807 }
825 else 808 else
826 { 809 {
827 XmlElement coll = (XmlElement)e;
828 float bx = Convert.ToSingle(coll.GetAttribute("x"));
829 float by = Convert.ToSingle(coll.GetAttribute("y"));
830 float bz = Convert.ToSingle(coll.GetAttribute("z"));
831 Vector3 bbox = new Vector3(bx, by, bz);
832
833 pos = m_Scene.GetNewRezLocation(RayStart, RayEnd, 810 pos = m_Scene.GetNewRezLocation(RayStart, RayEnd,
834 RayTargetID, Quaternion.Identity, 811 RayTargetID, Quaternion.Identity,
835 BypassRayCast, bRayEndIsIntersection, true, 812 BypassRayCast, bRayEndIsIntersection, true,
836 bbox, false); 813 bbox, false);
837
838 rez_pos = pos;
839
840 pos -= bbox / 2; 814 pos -= bbox / 2;
841
842 XmlNodeList groups = e.SelectNodes("SceneObjectGroup");
843 foreach (XmlNode n in groups)
844 {
845 SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(n.OuterXml);
846 g.RootPart.AttachPoint = g.RootPart.Shape.State;
847 g.RootPart.AttachOffset = g.AbsolutePosition;
848 g.RootPart.AttachRotation = g.GroupRotation;
849 if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
850 g.RootPart.Shape.PCode != (byte)PCode.Tree)
851 g.RootPart.Shape.State = 0;
852
853 objlist.Add(g);
854 XmlElement el = (XmlElement)n;
855
856 string rawX = el.GetAttribute("offsetx");
857 string rawY = el.GetAttribute("offsety");
858 string rawZ = el.GetAttribute("offsetz");
859//
860// m_log.DebugFormat(
861// "[INVENTORY ACCESS MODULE]: Converting coalesced object {0} offset <{1}, {2}, {3}>",
862// g.Name, rawX, rawY, rawZ);
863
864 float x = Convert.ToSingle(rawX);
865 float y = Convert.ToSingle(rawY);
866 float z = Convert.ToSingle(rawZ);
867 veclist.Add(new Vector3(x, y, z));
868 }
869 } 815 }
870 816
871 int primcount = 0; 817 int primcount = 0;
@@ -873,7 +819,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
873 primcount += g.PrimCount; 819 primcount += g.PrimCount;
874 820
875 if (!m_Scene.Permissions.CanRezObject( 821 if (!m_Scene.Permissions.CanRezObject(
876 primcount, remoteClient.AgentId, rez_pos) 822 primcount, remoteClient.AgentId, pos)
877 && !attachment) 823 && !attachment)
878 { 824 {
879 // The client operates in no fail mode. It will 825 // The client operates in no fail mode. It will
@@ -890,7 +836,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
890 return null; 836 return null;
891 } 837 }
892 838
893 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, rez_pos, veclist, attachment)) 839 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, veclist, attachment))
894 return null; 840 return null;
895 841
896 for (int i = 0; i < objlist.Count; i++) 842 for (int i = 0; i < objlist.Count; i++)
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index 487aa09..4750b46 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -839,26 +839,23 @@ namespace OpenSim.Region.CoreModules.World.Estate
839 839
840 private void AbortTerrainXferHandler(IClientAPI remoteClient, ulong XferID) 840 private void AbortTerrainXferHandler(IClientAPI remoteClient, ulong XferID)
841 { 841 {
842 if (TerrainUploader != null) 842 lock (this)
843 { 843 {
844 lock (TerrainUploader) 844 if ((TerrainUploader != null) && (XferID == TerrainUploader.XferID))
845 { 845 {
846 if (XferID == TerrainUploader.XferID) 846 remoteClient.OnXferReceive -= TerrainUploader.XferReceive;
847 { 847 remoteClient.OnAbortXfer -= AbortTerrainXferHandler;
848 remoteClient.OnXferReceive -= TerrainUploader.XferReceive; 848 TerrainUploader.TerrainUploadDone -= HandleTerrainApplication;
849 remoteClient.OnAbortXfer -= AbortTerrainXferHandler;
850 TerrainUploader.TerrainUploadDone -= HandleTerrainApplication;
851 849
852 TerrainUploader = null; 850 TerrainUploader = null;
853 remoteClient.SendAlertMessage("Terrain Upload aborted by the client"); 851 remoteClient.SendAlertMessage("Terrain Upload aborted by the client");
854 }
855 } 852 }
856 } 853 }
857
858 } 854 }
855
859 private void HandleTerrainApplication(string filename, byte[] terrainData, IClientAPI remoteClient) 856 private void HandleTerrainApplication(string filename, byte[] terrainData, IClientAPI remoteClient)
860 { 857 {
861 lock (TerrainUploader) 858 lock (this)
862 { 859 {
863 remoteClient.OnXferReceive -= TerrainUploader.XferReceive; 860 remoteClient.OnXferReceive -= TerrainUploader.XferReceive;
864 remoteClient.OnAbortXfer -= AbortTerrainXferHandler; 861 remoteClient.OnAbortXfer -= AbortTerrainXferHandler;
@@ -917,22 +914,32 @@ namespace OpenSim.Region.CoreModules.World.Estate
917 914
918 private void handleUploadTerrain(IClientAPI remote_client, string clientFileName) 915 private void handleUploadTerrain(IClientAPI remote_client, string clientFileName)
919 { 916 {
920 if (TerrainUploader == null) 917 lock (this)
921 { 918 {
922 919 if (TerrainUploader == null)
923 TerrainUploader = new EstateTerrainXferHandler(remote_client, clientFileName);
924 lock (TerrainUploader)
925 { 920 {
921 m_log.DebugFormat("Starting to receive uploaded terrain");
922 TerrainUploader = new EstateTerrainXferHandler(remote_client, clientFileName);
926 remote_client.OnXferReceive += TerrainUploader.XferReceive; 923 remote_client.OnXferReceive += TerrainUploader.XferReceive;
927 remote_client.OnAbortXfer += AbortTerrainXferHandler; 924 remote_client.OnAbortXfer += AbortTerrainXferHandler;
928 TerrainUploader.TerrainUploadDone += HandleTerrainApplication; 925 TerrainUploader.TerrainUploadDone += HandleTerrainApplication;
926 TerrainUploader.RequestStartXfer(remote_client);
927 }
928 else
929 {
930 remote_client.SendAlertMessage("Another Terrain Upload is in progress. Please wait your turn!");
929 } 931 }
930 TerrainUploader.RequestStartXfer(remote_client);
931
932 } 932 }
933 else 933 }
934
935 public bool IsTerrainXfer(ulong xferID)
936 {
937 lock (this)
934 { 938 {
935 remote_client.SendAlertMessage("Another Terrain Upload is in progress. Please wait your turn!"); 939 if (TerrainUploader == null)
940 return false;
941 else
942 return TerrainUploader.XferID == xferID;
936 } 943 }
937 } 944 }
938 945
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateTerrainXferHandler.cs b/OpenSim/Region/CoreModules/World/Estate/EstateTerrainXferHandler.cs
index b8d8b10..2d74eaf 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateTerrainXferHandler.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateTerrainXferHandler.cs
@@ -78,7 +78,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
78 /// <param name="data"></param> 78 /// <param name="data"></param>
79 public void XferReceive(IClientAPI remoteClient, ulong xferID, uint packetID, byte[] data) 79 public void XferReceive(IClientAPI remoteClient, ulong xferID, uint packetID, byte[] data)
80 { 80 {
81 if (mXferID == xferID) 81 if (mXferID != xferID)
82 return;
83
84 lock (this)
82 { 85 {
83 if (m_asset.Data.Length > 1) 86 if (m_asset.Data.Length > 1)
84 { 87 {
@@ -99,7 +102,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
99 if ((packetID & 0x80000000) != 0) 102 if ((packetID & 0x80000000) != 0)
100 { 103 {
101 SendCompleteMessage(remoteClient); 104 SendCompleteMessage(remoteClient);
102
103 } 105 }
104 } 106 }
105 } 107 }
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index bf18616..98fa763 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -162,7 +162,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
162 regionimage = regionimage.Replace("-", ""); 162 regionimage = regionimage.Replace("-", "");
163 m_log.Info("[WORLD MAP]: JPEG Map location: " + m_scene.RegionInfo.ServerURI + "index.php?method=" + regionimage); 163 m_log.Info("[WORLD MAP]: JPEG Map location: " + m_scene.RegionInfo.ServerURI + "index.php?method=" + regionimage);
164 164
165 MainServer.Instance.AddHTTPHandler(regionimage, OnHTTPGetMapImage); 165 MainServer.Instance.AddHTTPHandler(regionimage,
166 new GenericHTTPDOSProtector(OnHTTPGetMapImage, OnHTTPThrottled, new BasicDosProtectorOptions()
167 {
168 AllowXForwardedFor = false,
169 ForgetTimeSpan = TimeSpan.FromMinutes(2),
170 MaxRequestsInTimeframe = 4,
171 ReportingName = "MAPDOSPROTECTOR",
172 RequestTimeSpan = TimeSpan.FromSeconds(10),
173 ThrottledAction = BasicDOSProtector.ThrottleAction.DoThrottledMethod
174 }).Process);
166 MainServer.Instance.AddLLSDHandler( 175 MainServer.Instance.AddLLSDHandler(
167 "/MAP/MapItems/" + m_scene.RegionInfo.RegionHandle.ToString(), HandleRemoteMapItemRequest); 176 "/MAP/MapItems/" + m_scene.RegionInfo.RegionHandle.ToString(), HandleRemoteMapItemRequest);
168 177
@@ -1131,6 +1140,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1131 block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); 1140 block.Y = (ushort)(r.RegionLocY / Constants.RegionSize);
1132 } 1141 }
1133 1142
1143 public Hashtable OnHTTPThrottled(Hashtable keysvals)
1144 {
1145 Hashtable reply = new Hashtable();
1146 int statuscode = 500;
1147 reply["str_response_string"] = "";
1148 reply["int_response_code"] = statuscode;
1149 reply["content_type"] = "text/plain";
1150 return reply;
1151 }
1152
1134 public Hashtable OnHTTPGetMapImage(Hashtable keysvals) 1153 public Hashtable OnHTTPGetMapImage(Hashtable keysvals)
1135 { 1154 {
1136 m_log.Debug("[WORLD MAP]: Sending map image jpeg"); 1155 m_log.Debug("[WORLD MAP]: Sending map image jpeg");