diff --git a/LibreMetaverse/EstateTools.cs b/LibreMetaverse/EstateTools.cs
index 9aa0bab..6ebea7e 100644
--- a/LibreMetaverse/EstateTools.cs
+++ b/LibreMetaverse/EstateTools.cs
@@ -29,13 +29,9 @@ using OpenMetaverse.Interfaces;
using OpenMetaverse.Messages.Linden;
using System.Collections.Generic;
using System.Globalization;
-using MessagePack.Formatters;
-using OpenMetaverse.StructuredData;
-using System.Security.Cryptography.X509Certificates;
-using System.Security.Policy;
-using System.Threading;
-using System.Threading.Tasks;
using System.Net.Http;
+using System.Threading.Tasks;
+using OpenMetaverse.StructuredData;
using System.Text;
namespace OpenMetaverse
@@ -83,6 +79,13 @@ namespace OpenMetaverse
}
#region Enums
+ public enum RegionMaturity
+ {
+ PG = 13,
+ Mature = 21,
+ Adult = 42
+ }
+
/// Used in the ReportType field of a LandStatRequest
public enum LandStatReportType
{
@@ -91,7 +94,7 @@ namespace OpenMetaverse
}
/// Used by EstateOwnerMessage packets
- public enum EstateAccessDelta : uint
+ public enum EstateAccessDelta : uint
{
BanUser = 64,
BanUserAllEstates = 66,
@@ -186,7 +189,7 @@ namespace OpenMetaverse
{
add { lock (m_TopCollidersReply_Lock) { m_TopCollidersReply += value; } }
remove { lock (m_TopCollidersReply_Lock) { m_TopCollidersReply -= value; } }
- }
+ }
/// The event subscribers. null if no subscribers
private EventHandler m_TopScriptsReply;
@@ -299,7 +302,7 @@ namespace OpenMetaverse
add { lock (m_EstateBansReply_Lock) { m_EstateBansReply += value; } }
remove { lock (m_EstateBansReply_Lock) { m_EstateBansReply -= value; } }
}
-
+
/// The event subscribers. null if no subscribers
private EventHandler m_EstateCovenantReply;
@@ -567,64 +570,36 @@ namespace OpenMetaverse
EstateOwnerMessage("restart", "-1");
}
- /// Estate panel "Region" tab settings
- /// @deprecated Use the version with the adult flag instead
- public void SetRegionInfo(bool blockTerraform, bool blockFly, bool allowDamage, bool allowLandResell, bool restrictPushing, bool allowParcelJoinDivide, float agentLimit, float objectBonus, bool mature)
- {
- SetRegionInfo(blockTerraform, blockFly, allowDamage, allowLandResell, restrictPushing, allowParcelJoinDivide, agentLimit, objectBonus, mature, false);
- }
-
- /// Estate panel "Region" tab settings
- public void SetRegionInfo(bool blockTerraform, bool blockFly, bool allowDamage, bool allowLandResell, bool restrictPushing, bool allowParcelJoinDivide, float agentLimit, float objectBonus, bool mature, bool adult)
- {
-
- List listParams = new List();
- listParams.Add(blockTerraform ? "Y" : "N");
- listParams.Add(blockFly ? "Y" : "N");
- listParams.Add(allowDamage ? "Y" : "N");
- listParams.Add(allowLandResell ? "Y" : "N");
- listParams.Add(agentLimit.ToString(CultureInfo.InvariantCulture));
- listParams.Add(objectBonus.ToString(CultureInfo.InvariantCulture));
- if (adult)
- {
- listParams.Add(((int)RegionMaturity.Adult).ToString());
- }
- else
- {
- listParams.Add(((int)(mature ? RegionMaturity.Mature : RegionMaturity.PG)).ToString());
- }
- listParams.Add(restrictPushing ? "Y" : "N");
- listParams.Add(allowParcelJoinDivide ? "Y" : "N");
- EstateOwnerMessage("setregioninfo", listParams);
- }
-
- public async void extendedSetRegionInfoAsync(bool blockTerraform, bool blockFly, bool blockFlyover, bool allowDamage, bool allowLandResell, int agentLimit, float primBonus, RegionMaturity maturityLevel, bool blockObjectPush, bool allowParcelChanges, bool blockParcelSearch)
+ public async Task> extendedSetRegionInfo(
+ bool blockTerraform, bool blockFly, bool blockFlyover, bool allowDamage, bool allowLandResell,
+ int agentLimit, float primBonus, RegionMaturity maturityLevel, bool blockObjectPush,
+ bool allowParcelChanges, bool blockParcelSearch)
{
if (Client == null)
{
- Logger.Log($"No client object (what the fuck)", Helpers.LogLevel.Warning);
- return;
+ return new KeyValuePair(false, "No client object");
}
- if (Client.Network == null)
+ else if (Client.Network == null)
{
- Logger.Log($"Not connected to a network extendedSetRegionInfoAsync", Helpers.LogLevel.Warning);
- return;
+ return new KeyValuePair(false, "Not connected to a network");
}
- if (Client.Network.CurrentSim == null)
+ else if (Client.Network.CurrentSim == null)
{
- Logger.Log($"Not connected to a sim extendedSetRegionInfoAsync", Helpers.LogLevel.Warning);
- return;
+ return new KeyValuePair(false, "Not connected to a sim");
}
- if (Client.Network.CurrentSim.Caps == null)
+ else if (Client.Network.CurrentSim.Caps == null)
{
- Logger.Log($"No caps endpoint for current sim extendedSetRegionInfoAsync", Helpers.LogLevel.Warning);
- return;
+ return new KeyValuePair(false, "No caps endpoint for current sim");
}
+ else if (Client.HttpCapsClient == null)
+ {
+ return new KeyValuePair(false, "No HttpCapsClient available");
+ }
+
Uri uri = Client.Network.CurrentSim.Caps.CapabilityURI("DispatchRegionInfo");
if (uri == null)
{
- Logger.Log($"unable to get URI for DispatchRegionInfo extendedSetRegionInfoAsync", Helpers.LogLevel.Warning);
- return;
+ return new KeyValuePair(false, "Unable to get URI for DispatchRegionInfo");
}
OSDMap request = new OSDMap();
request["block_terraform"] = blockTerraform;
@@ -639,23 +614,48 @@ namespace OpenMetaverse
request["allow_parcel_changes"] = allowParcelChanges;
request["block_parcel_search"] = blockParcelSearch;
- // Serialize OSDMap to XML string
- string requestBody = request.ToString();
-
- // Use StringContent to convert the string to HttpContent
- using (var content = new StringContent(requestBody, Encoding.UTF8, "application/llsd+xml"))
+ string requestBody = OSDParser.SerializeLLSDXmlString(request);
+ try
{
- using (var reply = await Client.HttpCapsClient.PostAsync(uri.ToString(), content))
- {
- bool success = reply.IsSuccessStatusCode;
+ var content = new StringContent(requestBody, Encoding.UTF8, "application/llsd+xml");
+ var reply = await Client.HttpCapsClient.PostAsync(uri.ToString(), content);
+ string responseContent = await reply.Content.ReadAsStringAsync();
- if (!success)
- {
- Logger.Log($"Failed to make HTTP request to DispatchRegionInfo for extended update",
- Helpers.LogLevel.Warning);
- }
+ if (reply.IsSuccessStatusCode)
+ {
+ return new KeyValuePair(true, "ok");
}
+ return new KeyValuePair(false, $"HTTP {reply.StatusCode}: {responseContent}");
}
+ catch (Exception e)
+ {
+ return new KeyValuePair(false, e.Message);
+ }
+ }
+
+ /// Estate panel "Region" tab settings
+ /// @deprecated Use the version with RegionMaturity support
+ public void SetRegionInfo(bool blockTerraform, bool blockFly, bool allowDamage, bool allowLandResell, bool restrictPushing, bool allowParcelJoinDivide, float agentLimit, float objectBonus, bool mature)
+ {
+ RegionMaturity rating = mature ? RegionMaturity.Mature : RegionMaturity.PG;
+ SetRegionInfo(blockTerraform, blockFly, allowDamage, allowLandResell, restrictPushing, allowParcelJoinDivide, agentLimit, objectBonus, rating);
+ }
+
+ /// Estate panel "Region" tab settings
+ public void SetRegionInfo(bool blockTerraform, bool blockFly, bool allowDamage, bool allowLandResell, bool restrictPushing, bool allowParcelJoinDivide, float agentLimit, float objectBonus, RegionMaturity maturity)
+ {
+
+ List listParams = new List();
+ listParams.Add(blockTerraform ? "Y" : "N");
+ listParams.Add(blockFly ? "Y" : "N");
+ listParams.Add(allowDamage ? "Y" : "N");
+ listParams.Add(allowLandResell ? "Y" : "N");
+ listParams.Add(agentLimit.ToString(CultureInfo.InvariantCulture));
+ listParams.Add(objectBonus.ToString(CultureInfo.InvariantCulture));
+ listParams.Add(maturity.ToString());
+ listParams.Add(restrictPushing ? "Y" : "N");
+ listParams.Add(allowParcelJoinDivide ? "Y" : "N");
+ EstateOwnerMessage("setregioninfo", listParams);
}
/// Estate panel "Debug" tab settings
@@ -1001,11 +1001,11 @@ namespace OpenMetaverse
if (type == LandStatReportType.TopScripts)
{
- OnTopScriptsReply(new TopScriptsReplyEventArgs((int)p.RequestData.TotalObjectCount, Tasks));
+ OnTopScriptsReply(new TopScriptsReplyEventArgs((int)p.RequestData.TotalObjectCount, Tasks));
}
else if (type == LandStatReportType.TopColliders)
{
- OnTopCollidersReply(new TopCollidersReplyEventArgs((int) p.RequestData.TotalObjectCount, Tasks));
+ OnTopCollidersReply(new TopCollidersReplyEventArgs((int)p.RequestData.TotalObjectCount, Tasks));
}
/*
@@ -1023,12 +1023,6 @@ namespace OpenMetaverse
}
}
- public enum RegionMaturity
- {
- PG = 13,
- Mature = 21,
- Adult = 42
- }
private void LandStatCapsReplyHandler(string capsKey, IMessage message, Simulator simulator)
{
LandStatReplyMessage m = (LandStatReplyMessage)message;
@@ -1051,11 +1045,11 @@ namespace OpenMetaverse
if (type == LandStatReportType.TopScripts)
{
- OnTopScriptsReply(new TopScriptsReplyEventArgs((int)m.TotalObjectCount, Tasks));
+ OnTopScriptsReply(new TopScriptsReplyEventArgs((int)m.TotalObjectCount, Tasks));
}
else if (type == LandStatReportType.TopColliders)
{
- OnTopCollidersReply(new TopCollidersReplyEventArgs((int)m.TotalObjectCount, Tasks));
+ OnTopCollidersReply(new TopCollidersReplyEventArgs((int)m.TotalObjectCount, Tasks));
}
}
#endregion
diff --git a/SecondBotEvents/Commands/Estate.cs b/SecondBotEvents/Commands/Estate.cs
index ebab88a..d165f0d 100644
--- a/SecondBotEvents/Commands/Estate.cs
+++ b/SecondBotEvents/Commands/Estate.cs
@@ -110,8 +110,12 @@ namespace SecondBotEvents.Commands
{
regionMaturity = RegionMaturity.Adult;
}
- GetClient().Estate.extendedSetRegionInfoAsync(blockTerraform, blockFly, blockFlyOver, allowDamage, allowLandResell,
- agentLimitValue, primBonusValue, regionMaturity, blockObjectPush, allowParcelChanges, blockParcelSearch);
+ KeyValuePair result = GetClient().Estate.extendedSetRegionInfo(blockTerraform, blockFly, blockFlyOver, allowDamage, allowLandResell,
+ agentLimitValue, primBonusValue, regionMaturity, blockObjectPush, allowParcelChanges, blockParcelSearch).Await();
+ if (result.Key == false)
+ {
+ return Failure(result.Value, [setBlockTerraform, setBlockFly, setBlockFlyOver, setAllowDamage, setAllowLandResell, setAgentLimit, setPrimBonus, setMature, setAdult, setBlockObjectPush, setAllowParcelChanges, setBlockParcelSearch]);
+ }
return BasicReply("ok", [setBlockTerraform, setBlockFly, setBlockFlyOver, setAllowDamage, setAllowLandResell, setAgentLimit, setPrimBonus, setMature, setAdult, setBlockObjectPush, setAllowParcelChanges, setBlockParcelSearch]);
}
@@ -185,7 +189,12 @@ namespace SecondBotEvents.Commands
{
return Failure("Unable to process adult value please use true or false", [setBlockTerraform, setBlockFly, setAllowDamage, setAllowLandResell, setBlockPushing, setAllowParcelJoinDivide, setAgentLimit, setObjectBonus, setMature, setAdult]);
}
- GetClient().Estate.SetRegionInfo(blockTerraform, blockFly, allowDamage, allowLandResell, blockPushing, allowParcelJoinDivide, agentLimit, objectBonus, mature, adult);
+ RegionMaturity rating = mature ? RegionMaturity.Mature : RegionMaturity.PG;
+ if (adult)
+ {
+ rating = RegionMaturity.Adult;
+ }
+ GetClient().Estate.SetRegionInfo(blockTerraform, blockFly, allowDamage, allowLandResell, blockPushing, allowParcelJoinDivide, agentLimit, objectBonus, rating);
return BasicReply("ok", [setBlockTerraform, setBlockFly, setAllowDamage, setAllowLandResell, setBlockPushing, setAllowParcelJoinDivide, setAgentLimit, setObjectBonus, setMature, setAdult]);
}