aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/World')
-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
3 files changed, 51 insertions, 23 deletions
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");