diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 7a3931fb41..2be647f376 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -340,6 +340,8 @@ namespace OpenSim.Framework
public delegate void EstateChangeInfo(IClientAPI client, UUID invoice, UUID senderID, UInt32 param1, UInt32 param2);
+ public delegate void RequestTerrain(IClientAPI remoteClient, string clientFileName);
+
public delegate void BakeTerrain(IClientAPI remoteClient);
public delegate void EstateRestartSimRequest(IClientAPI remoteClient, int secondsTilReboot);
@@ -651,6 +653,8 @@ namespace OpenSim.Framework
event ObjectBuy OnObjectBuy;
event BuyObjectInventory OnBuyObjectInventory;
+ event RequestTerrain OnRequestTerrain;
+
event ObjectIncludeInSearch OnObjectIncludeInSearch;
event UUIDNameRequest OnTeleportHomeRequest;
@@ -906,6 +910,8 @@ namespace OpenSim.Framework
void SendConfirmXfer(ulong xferID, uint PacketID);
void SendXferRequest(ulong XferID, short AssetType, UUID vFileID, byte FilePath, byte[] FileName);
+ void SendInitiateDownload(string simFileName, string clientFileName);
+
///
/// Send the first part of a texture. For sufficiently small textures, this may be the only packet.
///
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 188ce4b52d..a835e43eac 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -205,6 +205,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private ParcelAbandonRequest handlerParcelAbandonRequest;
private ParcelGodForceOwner handlerParcelGodForceOwner;
private ParcelReclaim handlerParcelReclaim;
+ private RequestTerrain handlerRequestTerrain;
private ParcelReturnObjectsRequest handlerParcelReturnObjectsRequest;
private RegionInfoRequest handlerRegionInfoRequest; //OnRegionInfoRequest;
private EstateCovenantRequest handlerEstateCovenantRequest; //OnEstateCovenantRequest;
@@ -895,6 +896,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public event XferReceive OnXferReceive;
public event RequestXfer OnRequestXfer;
public event ConfirmXfer OnConfirmXfer;
+ public event RequestTerrain OnRequestTerrain;
public event RezScript OnRezScript;
public event UpdateTaskInventory OnUpdateTaskInventory;
public event MoveTaskInventory OnMoveTaskItem;
@@ -2527,7 +2529,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
newPack.Header.Zerocoded = true;
OutPacket(newPack, ThrottleOutPacketType.Asset);
}
-
+ public void SendInitiateDownload(string simFileName, string clientFileName)
+ {
+ InitiateDownloadPacket newPack = new InitiateDownloadPacket();
+ newPack.AgentData.AgentID = AgentId;
+ newPack.FileData.SimFilename = Utils.StringToBytes(simFileName);
+ newPack.FileData.ViewerFilename = Utils.StringToBytes(clientFileName);
+ OutPacket(newPack, ThrottleOutPacketType.Asset);
+ }
public void SendImageFirstPart(
ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec)
{
@@ -5756,7 +5765,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
case PacketType.EstateOwnerMessage:
EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack;
-
+
switch (Utils.BytesToString(messagePacket.MethodData.Method))
{
case "getinfo":
@@ -5975,11 +5984,30 @@ namespace OpenSim.Region.ClientStack.LindenUDP
case "terrain":
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(AgentId, false))
{
- handlerBakeTerrain = OnBakeTerrain;
- if (handlerBakeTerrain != null)
+ if (messagePacket.ParamList.Length > 0)
{
- handlerBakeTerrain(this);
+ if (Utils.BytesToString(messagePacket.ParamList[0].Parameter) == "bake")
+ {
+ handlerBakeTerrain = OnBakeTerrain;
+ if (handlerBakeTerrain != null)
+ {
+ handlerBakeTerrain(this);
+ }
+ }
+ if (Utils.BytesToString(messagePacket.ParamList[0].Parameter) == "download filename")
+ {
+ if (messagePacket.ParamList.Length > 1)
+ {
+ handlerRequestTerrain = OnRequestTerrain;
+ if (handlerRequestTerrain != null)
+ {
+ handlerRequestTerrain(this, Utils.BytesToString(messagePacket.ParamList[1].Parameter));
+ }
+ }
+ }
}
+
+
}
break;
diff --git a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs
index 3c69621ab6..2f9a69103a 100644
--- a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs
@@ -105,6 +105,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
///
public void RequestXfer(IClientAPI remoteClient, ulong xferID, string fileName)
{
+
lock (NewFiles)
{
if (NewFiles.ContainsKey(fileName))
diff --git a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs
index 041bba5d41..c38d5026ea 100644
--- a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs
@@ -421,6 +421,31 @@ namespace OpenSim.Region.Environment.Modules.World.Estate
}
}
+ private void handleTerrainRequest(IClientAPI remote_client, string clientFileName)
+ {
+ // Save terrain here
+ OpenSim.Region.Environment.Modules.World.Terrain.ITerrainModule terr = m_scene.RequestModuleInterface();
+
+ if (terr != null)
+ {
+ m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + m_scene.RegionInfo.RegionName);
+ if (System.IO.File.Exists(Util.dataDir() + "/terrain.raw"))
+ {
+ System.IO.File.Delete(Util.dataDir() + "/terrain.raw");
+ }
+ terr.SaveToFile(Util.dataDir() + "/terrain.raw");
+
+ System.IO.FileStream input = new System.IO.FileStream(Util.dataDir() + "/terrain.raw", System.IO.FileMode.Open);
+ byte[] bdata = new byte[input.Length];
+ input.Read(bdata, 0, (int)input.Length);
+ remote_client.SendAlertMessage("Terrain file written, starting download...");
+ m_scene.XferManager.AddNewFile("terrain.raw", bdata);
+ // Tell client about it
+ m_log.Warn("[CLIENT]: Sending Terrain to " + remote_client.Name);
+ remote_client.SendInitiateDownload("terrain.raw", clientFileName);
+ }
+ }
+
private void HandleRegionInfoRequest(IClientAPI remote_client)
{
@@ -767,6 +792,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate
client.OnEstateDebugRegionRequest += handleEstateDebugRegionRequest;
client.OnEstateTeleportOneUserHomeRequest += handleEstateTeleportOneUserHomeRequest;
client.OnEstateTeleportAllUsersHomeRequest += handleEstateTeleportAllUsersHomeRequest;
+ client.OnRequestTerrain += handleTerrainRequest;
client.OnRegionInfoRequest += HandleRegionInfoRequest;
client.OnEstateCovenantRequest += HandleEstateCovenantRequest;
diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
index cf8ba94f7b..7b077ece39 100644
--- a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
@@ -268,7 +268,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
public event ObjectDeselect OnObjectDeselect;
public event RegionInfoRequest OnRegionInfoRequest;
public event EstateCovenantRequest OnEstateCovenantRequest;
-
+ public event RequestTerrain OnRequestTerrain;
public event ObjectDuplicateOnRay OnObjectDuplicateOnRay;
public event FriendActionDelegate OnApproveFriendRequest;
@@ -698,6 +698,10 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
{
}
+ public void SendInitiateDownload(string simFileName, string clientFileName)
+ {
+ }
+
public void SendImageFirstPart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec)
{
}
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index 789d24b3fc..66fb6d8a5f 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -136,6 +136,7 @@ namespace OpenSim.Region.Examples.SimpleModule
public event CopyInventoryItem OnCopyInventoryItem;
public event MoveInventoryItem OnMoveInventoryItem;
public event UDPAssetUploadRequest OnAssetUploadRequest;
+ public event RequestTerrain OnRequestTerrain;
public event XferReceive OnXferReceive;
public event RequestXfer OnRequestXfer;
public event ConfirmXfer OnConfirmXfer;
@@ -615,6 +616,10 @@ namespace OpenSim.Region.Examples.SimpleModule
{
}
+ public void SendInitiateDownload(string simFileName, string clientFileName)
+ {
+ }
+
public void SendImageFirstPart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec)
{
}