Merge branch 'master' into careminster
Conflicts: OpenSim/Data/MySQL/Resources/RegionStore.migrations OpenSim/Region/Framework/Scenes/Scene.Inventory.csavinationmerge
commit
ce5e900721
|
@ -1510,9 +1510,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
// options["version"] = (string)requestData["version"];
|
// options["version"] = (string)requestData["version"];
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if (requestData.Contains("profile"))
|
if (requestData.Contains("home"))
|
||||||
{
|
{
|
||||||
options["profile"] = (string)requestData["profile"];
|
options["home"] = (string)requestData["home"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((string)requestData["noassets"] == "true")
|
if ((string)requestData["noassets"] == "true")
|
||||||
|
|
|
@ -1252,7 +1252,7 @@ VALUES
|
||||||
,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se
|
,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se
|
||||||
,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit
|
,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit
|
||||||
,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position
|
,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position
|
||||||
,[covenant] = @covenant , [sunvectorx] = @sunvectorx, [sunvectory] = @sunvectory, [sunvectorz] = @sunvectorz, [Sandbox] = @Sandbox, [loaded_creation_datetime] = @loaded_creation_datetime, [loaded_creation_id] = @loaded_creation_id
|
,[covenant] = @covenant ,[covenant_datetime] = @covenant_datetime, [sunvectorx] = @sunvectorx, [sunvectory] = @sunvectory, [sunvectorz] = @sunvectorz, [Sandbox] = @Sandbox, [loaded_creation_datetime] = @loaded_creation_datetime, [loaded_creation_id] = @loaded_creation_id
|
||||||
WHERE [regionUUID] = @regionUUID";
|
WHERE [regionUUID] = @regionUUID";
|
||||||
|
|
||||||
using (SqlConnection conn = new SqlConnection(m_connectionString))
|
using (SqlConnection conn = new SqlConnection(m_connectionString))
|
||||||
|
@ -1307,14 +1307,14 @@ VALUES
|
||||||
[block_show_in_search],[agent_limit],[object_bonus],[maturity],[disable_scripts],[disable_collisions],[disable_physics],
|
[block_show_in_search],[agent_limit],[object_bonus],[maturity],[disable_scripts],[disable_collisions],[disable_physics],
|
||||||
[terrain_texture_1],[terrain_texture_2],[terrain_texture_3],[terrain_texture_4],[elevation_1_nw],[elevation_2_nw],[elevation_1_ne],
|
[terrain_texture_1],[terrain_texture_2],[terrain_texture_3],[terrain_texture_4],[elevation_1_nw],[elevation_2_nw],[elevation_1_ne],
|
||||||
[elevation_2_ne],[elevation_1_se],[elevation_2_se],[elevation_1_sw],[elevation_2_sw],[water_height],[terrain_raise_limit],
|
[elevation_2_ne],[elevation_1_se],[elevation_2_se],[elevation_1_sw],[elevation_2_sw],[water_height],[terrain_raise_limit],
|
||||||
[terrain_lower_limit],[use_estate_sun],[fixed_sun],[sun_position],[covenant],[sunvectorx], [sunvectory], [sunvectorz],[Sandbox], [loaded_creation_datetime], [loaded_creation_id]
|
[terrain_lower_limit],[use_estate_sun],[fixed_sun],[sun_position],[covenant],[covenant_datetime],[sunvectorx], [sunvectory], [sunvectorz],[Sandbox], [loaded_creation_datetime], [loaded_creation_id]
|
||||||
)
|
)
|
||||||
VALUES
|
VALUES
|
||||||
(@regionUUID,@block_terraform,@block_fly,@allow_damage,@restrict_pushing,@allow_land_resell,@allow_land_join_divide,
|
(@regionUUID,@block_terraform,@block_fly,@allow_damage,@restrict_pushing,@allow_land_resell,@allow_land_join_divide,
|
||||||
@block_show_in_search,@agent_limit,@object_bonus,@maturity,@disable_scripts,@disable_collisions,@disable_physics,
|
@block_show_in_search,@agent_limit,@object_bonus,@maturity,@disable_scripts,@disable_collisions,@disable_physics,
|
||||||
@terrain_texture_1,@terrain_texture_2,@terrain_texture_3,@terrain_texture_4,@elevation_1_nw,@elevation_2_nw,@elevation_1_ne,
|
@terrain_texture_1,@terrain_texture_2,@terrain_texture_3,@terrain_texture_4,@elevation_1_nw,@elevation_2_nw,@elevation_1_ne,
|
||||||
@elevation_2_ne,@elevation_1_se,@elevation_2_se,@elevation_1_sw,@elevation_2_sw,@water_height,@terrain_raise_limit,
|
@elevation_2_ne,@elevation_1_se,@elevation_2_se,@elevation_1_sw,@elevation_2_sw,@water_height,@terrain_raise_limit,
|
||||||
@terrain_lower_limit,@use_estate_sun,@fixed_sun,@sun_position,@covenant,@sunvectorx,@sunvectory, @sunvectorz, @Sandbox, @loaded_creation_datetime, @loaded_creation_id)";
|
@terrain_lower_limit,@use_estate_sun,@fixed_sun,@sun_position,@covenant, @covenant_datetime, @sunvectorx,@sunvectory, @sunvectorz, @Sandbox, @loaded_creation_datetime, @loaded_creation_id)";
|
||||||
|
|
||||||
using (SqlConnection conn = new SqlConnection(m_connectionString))
|
using (SqlConnection conn = new SqlConnection(m_connectionString))
|
||||||
using (SqlCommand cmd = new SqlCommand(sql, conn))
|
using (SqlCommand cmd = new SqlCommand(sql, conn))
|
||||||
|
@ -1376,7 +1376,7 @@ VALUES
|
||||||
Convert.ToSingle(row["sunvectorz"])
|
Convert.ToSingle(row["sunvectorz"])
|
||||||
);
|
);
|
||||||
newSettings.Covenant = new UUID((Guid)row["covenant"]);
|
newSettings.Covenant = new UUID((Guid)row["covenant"]);
|
||||||
|
newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]);
|
||||||
newSettings.LoadedCreationDateTime = Convert.ToInt32(row["loaded_creation_datetime"]);
|
newSettings.LoadedCreationDateTime = Convert.ToInt32(row["loaded_creation_datetime"]);
|
||||||
|
|
||||||
if (row["loaded_creation_id"] is DBNull)
|
if (row["loaded_creation_id"] is DBNull)
|
||||||
|
@ -1789,6 +1789,7 @@ VALUES
|
||||||
parameters.Add(_Database.CreateParameter("sunvectory", settings.SunVector.Y));
|
parameters.Add(_Database.CreateParameter("sunvectory", settings.SunVector.Y));
|
||||||
parameters.Add(_Database.CreateParameter("sunvectorz", settings.SunVector.Z));
|
parameters.Add(_Database.CreateParameter("sunvectorz", settings.SunVector.Z));
|
||||||
parameters.Add(_Database.CreateParameter("covenant", settings.Covenant));
|
parameters.Add(_Database.CreateParameter("covenant", settings.Covenant));
|
||||||
|
parameters.Add(_Database.CreateParameter("covenant_datetime", settings.CovenantChangedDateTime));
|
||||||
parameters.Add(_Database.CreateParameter("Loaded_Creation_DateTime", settings.LoadedCreationDateTime));
|
parameters.Add(_Database.CreateParameter("Loaded_Creation_DateTime", settings.LoadedCreationDateTime));
|
||||||
parameters.Add(_Database.CreateParameter("Loaded_Creation_ID", settings.LoadedCreationID));
|
parameters.Add(_Database.CreateParameter("Loaded_Creation_ID", settings.LoadedCreationID));
|
||||||
|
|
||||||
|
|
|
@ -1043,3 +1043,11 @@ FOR CreatorID
|
||||||
ALTER TABLE primitems ALTER COLUMN CreatorID uniqueidentifier NOT NULL
|
ALTER TABLE primitems ALTER COLUMN CreatorID uniqueidentifier NOT NULL
|
||||||
|
|
||||||
COMMIT
|
COMMIT
|
||||||
|
|
||||||
|
:VERSION 29 #---------------------
|
||||||
|
|
||||||
|
BEGIN TRANSACTION
|
||||||
|
|
||||||
|
ALTER TABLE regionsettings ADD covenant_datetime int NOT NULL default 0
|
||||||
|
|
||||||
|
COMMIT
|
||||||
|
|
|
@ -1009,7 +1009,7 @@ namespace OpenSim.Data.MySQL
|
||||||
"elevation_2_sw, water_height, " +
|
"elevation_2_sw, water_height, " +
|
||||||
"terrain_raise_limit, terrain_lower_limit, " +
|
"terrain_raise_limit, terrain_lower_limit, " +
|
||||||
"use_estate_sun, fixed_sun, sun_position, " +
|
"use_estate_sun, fixed_sun, sun_position, " +
|
||||||
"covenant, Sandbox, sunvectorx, sunvectory, " +
|
"covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " +
|
||||||
"sunvectorz, loaded_creation_datetime, " +
|
"sunvectorz, loaded_creation_datetime, " +
|
||||||
"loaded_creation_id, map_tile_ID, block_search, casino, " +
|
"loaded_creation_id, map_tile_ID, block_search, casino, " +
|
||||||
"TelehubObject, parcel_tile_ID) " +
|
"TelehubObject, parcel_tile_ID) " +
|
||||||
|
@ -1025,7 +1025,7 @@ namespace OpenSim.Data.MySQL
|
||||||
"?Elevation2SE, ?Elevation1SW, ?Elevation2SW, " +
|
"?Elevation2SE, ?Elevation1SW, ?Elevation2SW, " +
|
||||||
"?WaterHeight, ?TerrainRaiseLimit, " +
|
"?WaterHeight, ?TerrainRaiseLimit, " +
|
||||||
"?TerrainLowerLimit, ?UseEstateSun, ?FixedSun, " +
|
"?TerrainLowerLimit, ?UseEstateSun, ?FixedSun, " +
|
||||||
"?SunPosition, ?Covenant, ?Sandbox, " +
|
"?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " +
|
||||||
"?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
|
"?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
|
||||||
"?LoadedCreationDateTime, ?LoadedCreationID, " +
|
"?LoadedCreationDateTime, ?LoadedCreationID, " +
|
||||||
"?TerrainImageID, ?block_search, ?casino, " +
|
"?TerrainImageID, ?block_search, ?casino, " +
|
||||||
|
@ -1308,7 +1308,7 @@ namespace OpenSim.Data.MySQL
|
||||||
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
|
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
|
||||||
newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
|
newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
|
||||||
newSettings.Covenant = DBGuid.FromDB(row["covenant"]);
|
newSettings.Covenant = DBGuid.FromDB(row["covenant"]);
|
||||||
|
newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]);
|
||||||
newSettings.LoadedCreationDateTime = Convert.ToInt32(row["loaded_creation_datetime"]);
|
newSettings.LoadedCreationDateTime = Convert.ToInt32(row["loaded_creation_datetime"]);
|
||||||
|
|
||||||
if (row["loaded_creation_id"] is DBNull)
|
if (row["loaded_creation_id"] is DBNull)
|
||||||
|
@ -1653,6 +1653,7 @@ namespace OpenSim.Data.MySQL
|
||||||
cmd.Parameters.AddWithValue("FixedSun", settings.FixedSun);
|
cmd.Parameters.AddWithValue("FixedSun", settings.FixedSun);
|
||||||
cmd.Parameters.AddWithValue("SunPosition", settings.SunPosition);
|
cmd.Parameters.AddWithValue("SunPosition", settings.SunPosition);
|
||||||
cmd.Parameters.AddWithValue("Covenant", settings.Covenant.ToString());
|
cmd.Parameters.AddWithValue("Covenant", settings.Covenant.ToString());
|
||||||
|
cmd.Parameters.AddWithValue("CovenantChangedDateTime", settings.CovenantChangedDateTime);
|
||||||
cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime);
|
cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime);
|
||||||
cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID);
|
cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID);
|
||||||
cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID);
|
cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID);
|
||||||
|
|
|
@ -863,3 +863,23 @@ BEGIN;
|
||||||
ALTER TABLE `regionsettings` ADD COLUMN `parcel_tile_ID` char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
|
ALTER TABLE `regionsettings` ADD COLUMN `parcel_tile_ID` char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 41 #---------------- Timed bans/access
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE `landaccesslist` ADD COLUMN `Expires` INTEGER NOT NULL DEFAULT 0;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 42 #--------------------- Region Covenant changed time
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE regionsettings ADD COLUMN covenant_datetime int unsigned NOT NULL DEFAULT '0';
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 43 #---------------------
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
ALTER TABLE `regionsettings` MODIFY COLUMN `TelehubObject` VARCHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
|
|
@ -466,4 +466,9 @@ ALTER TABLE `land` ADD COLUMN `MediaSize` VARCHAR(16) NOT NULL DEFAULT '0,0';
|
||||||
ALTER TABLE `land` ADD COLUMN `MediaLoop` BOOLEAN NOT NULL DEFAULT FALSE;
|
ALTER TABLE `land` ADD COLUMN `MediaLoop` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
ALTER TABLE `land` ADD COLUMN `ObscureMusic` BOOLEAN NOT NULL DEFAULT FALSE;
|
ALTER TABLE `land` ADD COLUMN `ObscureMusic` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
ALTER TABLE `land` ADD COLUMN `ObscureMedia` BOOLEAN NOT NULL DEFAULT FALSE;
|
ALTER TABLE `land` ADD COLUMN `ObscureMedia` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 22
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE regionsettings ADD COLUMN covenant_datetime INTEGER NOT NULL default 0;
|
||||||
|
COMMIT;
|
||||||
|
|
|
@ -1185,6 +1185,7 @@ namespace OpenSim.Data.SQLite
|
||||||
createCol(regionsettings, "fixed_sun", typeof (Int32));
|
createCol(regionsettings, "fixed_sun", typeof (Int32));
|
||||||
createCol(regionsettings, "sun_position", typeof (Double));
|
createCol(regionsettings, "sun_position", typeof (Double));
|
||||||
createCol(regionsettings, "covenant", typeof(String));
|
createCol(regionsettings, "covenant", typeof(String));
|
||||||
|
createCol(regionsettings, "covenant_datetime", typeof(Int32));
|
||||||
createCol(regionsettings, "map_tile_ID", typeof(String));
|
createCol(regionsettings, "map_tile_ID", typeof(String));
|
||||||
regionsettings.PrimaryKey = new DataColumn[] { regionsettings.Columns["regionUUID"] };
|
regionsettings.PrimaryKey = new DataColumn[] { regionsettings.Columns["regionUUID"] };
|
||||||
return regionsettings;
|
return regionsettings;
|
||||||
|
@ -1509,6 +1510,7 @@ namespace OpenSim.Data.SQLite
|
||||||
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
|
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
|
||||||
newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
|
newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
|
||||||
newSettings.Covenant = new UUID((String) row["covenant"]);
|
newSettings.Covenant = new UUID((String) row["covenant"]);
|
||||||
|
newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]);
|
||||||
newSettings.TerrainImageID = new UUID((String)row["map_tile_ID"]);
|
newSettings.TerrainImageID = new UUID((String)row["map_tile_ID"]);
|
||||||
|
|
||||||
return newSettings;
|
return newSettings;
|
||||||
|
@ -1833,6 +1835,7 @@ namespace OpenSim.Data.SQLite
|
||||||
row["fixed_sun"] = settings.FixedSun;
|
row["fixed_sun"] = settings.FixedSun;
|
||||||
row["sun_position"] = settings.SunPosition;
|
row["sun_position"] = settings.SunPosition;
|
||||||
row["covenant"] = settings.Covenant.ToString();
|
row["covenant"] = settings.Covenant.ToString();
|
||||||
|
row["covenant_datetime"] = settings.CovenantChangedDateTime;
|
||||||
row["map_tile_ID"] = settings.TerrainImageID.ToString();
|
row["map_tile_ID"] = settings.TerrainImageID.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1243,7 +1243,7 @@ namespace OpenSim.Framework
|
||||||
void SendEstateCovenantInformation(UUID covenant);
|
void SendEstateCovenantInformation(UUID covenant);
|
||||||
|
|
||||||
void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags,
|
void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags,
|
||||||
uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner);
|
uint sunPosition, UUID covenant, uint covenantChanged, string abuseEmail, UUID estateOwner);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send land properties to the client.
|
/// Send land properties to the client.
|
||||||
|
|
|
@ -34,7 +34,7 @@ using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
public struct LandAccessEntry
|
public class LandAccessEntry
|
||||||
{
|
{
|
||||||
public UUID AgentID;
|
public UUID AgentID;
|
||||||
public int Expires;
|
public int Expires;
|
||||||
|
|
|
@ -413,6 +413,14 @@ namespace OpenSim.Framework
|
||||||
set { m_Covenant = value; }
|
set { m_Covenant = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int m_CovenantChanged = 0;
|
||||||
|
|
||||||
|
public int CovenantChangedDateTime
|
||||||
|
{
|
||||||
|
get { return m_CovenantChanged; }
|
||||||
|
set { m_CovenantChanged = value; }
|
||||||
|
}
|
||||||
|
|
||||||
private int m_LoadedCreationDateTime;
|
private int m_LoadedCreationDateTime;
|
||||||
public int LoadedCreationDateTime
|
public int LoadedCreationDateTime
|
||||||
{
|
{
|
||||||
|
@ -514,4 +522,4 @@ namespace OpenSim.Framework
|
||||||
l_SpawnPoints.Clear();
|
l_SpawnPoints.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -24,11 +24,13 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
|
|
||||||
|
@ -39,6 +41,74 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ExternalRepresentationUtils
|
public class ExternalRepresentationUtils
|
||||||
{
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Populate a node with data read from xml using a dictinoary of processors
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="nodeToFill"></param>
|
||||||
|
/// <param name="processors">/param>
|
||||||
|
/// <param name="xtr"></param>
|
||||||
|
public static void ExecuteReadProcessors<NodeType>(
|
||||||
|
NodeType nodeToFill, Dictionary<string, Action<NodeType, XmlTextReader>> processors, XmlTextReader xtr)
|
||||||
|
{
|
||||||
|
ExecuteReadProcessors(
|
||||||
|
nodeToFill,
|
||||||
|
processors,
|
||||||
|
xtr,
|
||||||
|
(o, name, e)
|
||||||
|
=> m_log.ErrorFormat(
|
||||||
|
"[ExternalRepresentationUtils]: Exception while parsing element {0}, continuing. Exception {1}{2}",
|
||||||
|
name, e.Message, e.StackTrace));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Populate a node with data read from xml using a dictinoary of processors
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="nodeToFill"></param>
|
||||||
|
/// <param name="processors"></param>
|
||||||
|
/// <param name="xtr"></param>
|
||||||
|
/// <param name="parseExceptionAction">
|
||||||
|
/// Action to take if there is a parsing problem. This will usually just be to log the exception
|
||||||
|
/// </param>
|
||||||
|
public static void ExecuteReadProcessors<NodeType>(
|
||||||
|
NodeType nodeToFill,
|
||||||
|
Dictionary<string, Action<NodeType, XmlTextReader>> processors,
|
||||||
|
XmlTextReader xtr,
|
||||||
|
Action<NodeType, string, Exception> parseExceptionAction)
|
||||||
|
{
|
||||||
|
string nodeName = string.Empty;
|
||||||
|
while (xtr.NodeType != XmlNodeType.EndElement)
|
||||||
|
{
|
||||||
|
nodeName = xtr.Name;
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[ExternalRepresentationUtils]: Processing: {0}", nodeName);
|
||||||
|
|
||||||
|
Action<NodeType, XmlTextReader> p = null;
|
||||||
|
if (processors.TryGetValue(xtr.Name, out p))
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[ExternalRepresentationUtils]: Found {0} processor, nodeName);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
p(nodeToFill, xtr);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
parseExceptionAction(nodeToFill, nodeName, e);
|
||||||
|
|
||||||
|
if (xtr.NodeType == XmlNodeType.EndElement)
|
||||||
|
xtr.Read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[LandDataSerializer]: caught unknown element {0}", nodeName);
|
||||||
|
xtr.ReadOuterXml(); // ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Takes a XML representation of a SceneObjectPart and returns another XML representation
|
/// Takes a XML representation of a SceneObjectPart and returns another XML representation
|
||||||
/// with creator data added to it.
|
/// with creator data added to it.
|
||||||
|
|
|
@ -28,8 +28,10 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
|
||||||
|
@ -40,8 +42,119 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LandDataSerializer
|
public class LandDataSerializer
|
||||||
{
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
protected static UTF8Encoding m_utf8Encoding = new UTF8Encoding();
|
protected static UTF8Encoding m_utf8Encoding = new UTF8Encoding();
|
||||||
|
|
||||||
|
private static Dictionary<string, Action<LandData, XmlTextReader>> m_ldProcessors
|
||||||
|
= new Dictionary<string, Action<LandData, XmlTextReader>>();
|
||||||
|
|
||||||
|
private static Dictionary<string, Action<LandAccessEntry, XmlTextReader>> m_laeProcessors
|
||||||
|
= new Dictionary<string, Action<LandAccessEntry, XmlTextReader>>();
|
||||||
|
|
||||||
|
static LandDataSerializer()
|
||||||
|
{
|
||||||
|
// LandData processors
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Area", (ld, xtr) => ld.Area = Convert.ToInt32(xtr.ReadElementString("Area")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"AuctionID", (ld, xtr) => ld.AuctionID = Convert.ToUInt32(xtr.ReadElementString("AuctionID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"AuthBuyerID", (ld, xtr) => ld.AuthBuyerID = UUID.Parse(xtr.ReadElementString("AuthBuyerID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Category", (ld, xtr) => ld.Category = (ParcelCategory)Convert.ToSByte(xtr.ReadElementString("Category")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"ClaimDate", (ld, xtr) => ld.ClaimDate = Convert.ToInt32(xtr.ReadElementString("ClaimDate")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"ClaimPrice", (ld, xtr) => ld.ClaimPrice = Convert.ToInt32(xtr.ReadElementString("ClaimPrice")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"GlobalID", (ld, xtr) => ld.GlobalID = UUID.Parse(xtr.ReadElementString("GlobalID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"GroupID", (ld, xtr) => ld.GroupID = UUID.Parse(xtr.ReadElementString("GroupID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"IsGroupOwned", (ld, xtr) => ld.IsGroupOwned = Convert.ToBoolean(xtr.ReadElementString("IsGroupOwned")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Bitmap", (ld, xtr) => ld.Bitmap = Convert.FromBase64String(xtr.ReadElementString("Bitmap")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Description", (ld, xtr) => ld.Description = xtr.ReadElementString("Description"));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Flags", (ld, xtr) => ld.Flags = Convert.ToUInt32(xtr.ReadElementString("Flags")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"LandingType", (ld, xtr) => ld.LandingType = Convert.ToByte(xtr.ReadElementString("LandingType")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Name", (ld, xtr) => ld.Name = xtr.ReadElementString("Name"));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Status", (ld, xtr) => ld.Status = (ParcelStatus)Convert.ToSByte(xtr.ReadElementString("Status")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"LocalID", (ld, xtr) => ld.LocalID = Convert.ToInt32(xtr.ReadElementString("LocalID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MediaAutoScale", (ld, xtr) => ld.MediaAutoScale = Convert.ToByte(xtr.ReadElementString("MediaAutoScale")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MediaID", (ld, xtr) => ld.MediaID = UUID.Parse(xtr.ReadElementString("MediaID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MediaURL", (ld, xtr) => ld.MediaURL = xtr.ReadElementString("MediaURL"));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MusicURL", (ld, xtr) => ld.MusicURL = xtr.ReadElementString("MusicURL"));
|
||||||
|
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"ParcelAccessList", ProcessParcelAccessList);
|
||||||
|
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"PassHours", (ld, xtr) => ld.PassHours = Convert.ToSingle(xtr.ReadElementString("PassHours")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"PassPrice", (ld, xtr) => ld.PassPrice = Convert.ToInt32(xtr.ReadElementString("PassPrice")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"SalePrice", (ld, xtr) => ld.SalePrice = Convert.ToInt32(xtr.ReadElementString("SalePrice")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"SnapshotID", (ld, xtr) => ld.SnapshotID = UUID.Parse(xtr.ReadElementString("SnapshotID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"UserLocation", (ld, xtr) => ld.UserLocation = Vector3.Parse(xtr.ReadElementString("UserLocation")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"UserLookAt", (ld, xtr) => ld.UserLookAt = Vector3.Parse(xtr.ReadElementString("UserLookAt")));
|
||||||
|
|
||||||
|
// No longer used here //
|
||||||
|
// m_ldProcessors.Add("Dwell", (landData, xtr) => return);
|
||||||
|
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"OtherCleanTime", (ld, xtr) => ld.OtherCleanTime = Convert.ToInt32(xtr.ReadElementString("OtherCleanTime")));
|
||||||
|
|
||||||
|
// LandAccessEntryProcessors
|
||||||
|
m_laeProcessors.Add(
|
||||||
|
"AgentID", (lae, xtr) => lae.AgentID = UUID.Parse(xtr.ReadElementString("AgentID")));
|
||||||
|
m_laeProcessors.Add(
|
||||||
|
"Time", (lae, xtr) =>
|
||||||
|
{
|
||||||
|
// We really don't care about temp vs perm here and this
|
||||||
|
// would break on old oars. Assume all bans are perm
|
||||||
|
xtr.ReadElementString("Time");
|
||||||
|
lae.Expires = 0; // Convert.ToUint( xtr.ReadElementString("Time"));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
m_laeProcessors.Add(
|
||||||
|
"AccessList", (lae, xtr) => lae.Flags = (AccessList)Convert.ToUInt32(xtr.ReadElementString("AccessList")));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ProcessParcelAccessList(LandData ld, XmlTextReader xtr)
|
||||||
|
{
|
||||||
|
if (!xtr.IsEmptyElement)
|
||||||
|
{
|
||||||
|
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
|
||||||
|
{
|
||||||
|
LandAccessEntry lae = new LandAccessEntry();
|
||||||
|
|
||||||
|
xtr.ReadStartElement("ParcelAccessEntry");
|
||||||
|
|
||||||
|
ExternalRepresentationUtils.ExecuteReadProcessors<LandAccessEntry>(lae, m_laeProcessors, xtr);
|
||||||
|
|
||||||
|
xtr.ReadEndElement();
|
||||||
|
|
||||||
|
ld.ParcelAccessList.Add(lae);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xtr.Read();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reify/deserialize landData
|
/// Reify/deserialize landData
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -63,72 +176,14 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
LandData landData = new LandData();
|
LandData landData = new LandData();
|
||||||
|
|
||||||
StringReader sr = new StringReader(serializedLandData);
|
using (XmlTextReader reader = new XmlTextReader(new StringReader(serializedLandData)))
|
||||||
XmlTextReader xtr = new XmlTextReader(sr);
|
|
||||||
|
|
||||||
xtr.ReadStartElement("LandData");
|
|
||||||
|
|
||||||
landData.Area = Convert.ToInt32( xtr.ReadElementString("Area"));
|
|
||||||
landData.AuctionID = Convert.ToUInt32( xtr.ReadElementString("AuctionID"));
|
|
||||||
landData.AuthBuyerID = UUID.Parse( xtr.ReadElementString("AuthBuyerID"));
|
|
||||||
landData.Category = (ParcelCategory)Convert.ToSByte( xtr.ReadElementString("Category"));
|
|
||||||
landData.ClaimDate = Convert.ToInt32( xtr.ReadElementString("ClaimDate"));
|
|
||||||
landData.ClaimPrice = Convert.ToInt32( xtr.ReadElementString("ClaimPrice"));
|
|
||||||
landData.GlobalID = UUID.Parse( xtr.ReadElementString("GlobalID"));
|
|
||||||
landData.GroupID = UUID.Parse( xtr.ReadElementString("GroupID"));
|
|
||||||
landData.IsGroupOwned = Convert.ToBoolean( xtr.ReadElementString("IsGroupOwned"));
|
|
||||||
landData.Bitmap = Convert.FromBase64String( xtr.ReadElementString("Bitmap"));
|
|
||||||
landData.Description = xtr.ReadElementString("Description");
|
|
||||||
landData.Flags = Convert.ToUInt32( xtr.ReadElementString("Flags"));
|
|
||||||
landData.LandingType = Convert.ToByte( xtr.ReadElementString("LandingType"));
|
|
||||||
landData.Name = xtr.ReadElementString("Name");
|
|
||||||
landData.Status = (ParcelStatus)Convert.ToSByte( xtr.ReadElementString("Status"));
|
|
||||||
landData.LocalID = Convert.ToInt32( xtr.ReadElementString("LocalID"));
|
|
||||||
landData.MediaAutoScale = Convert.ToByte( xtr.ReadElementString("MediaAutoScale"));
|
|
||||||
landData.MediaID = UUID.Parse( xtr.ReadElementString("MediaID"));
|
|
||||||
landData.MediaURL = xtr.ReadElementString("MediaURL");
|
|
||||||
landData.MusicURL = xtr.ReadElementString("MusicURL");
|
|
||||||
landData.OwnerID = UUID.Parse( xtr.ReadElementString("OwnerID"));
|
|
||||||
|
|
||||||
landData.ParcelAccessList = new List<LandAccessEntry>();
|
|
||||||
xtr.Read();
|
|
||||||
if (xtr.Name != "ParcelAccessList")
|
|
||||||
throw new XmlException(String.Format("Expected \"ParcelAccessList\" element but got \"{0}\"", xtr.Name));
|
|
||||||
|
|
||||||
if (!xtr.IsEmptyElement)
|
|
||||||
{
|
{
|
||||||
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
|
reader.ReadStartElement("LandData");
|
||||||
{
|
|
||||||
LandAccessEntry pae = new LandAccessEntry();
|
|
||||||
|
|
||||||
xtr.ReadStartElement("ParcelAccessEntry");
|
ExternalRepresentationUtils.ExecuteReadProcessors<LandData>(landData, m_ldProcessors, reader);
|
||||||
pae.AgentID = UUID.Parse( xtr.ReadElementString("AgentID"));
|
|
||||||
// We really don't care about temp vs perm here and this
|
|
||||||
// would break on old oars. Assume all bans are perm
|
|
||||||
xtr.ReadElementString("Time");
|
|
||||||
pae.Expires = 0; // Convert.ToUint( xtr.ReadElementString("Time"));
|
|
||||||
pae.Flags = (AccessList)Convert.ToUInt32( xtr.ReadElementString("AccessList"));
|
|
||||||
xtr.ReadEndElement();
|
|
||||||
|
|
||||||
landData.ParcelAccessList.Add(pae);
|
reader.ReadEndElement();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
xtr.Read();
|
|
||||||
|
|
||||||
landData.PassHours = Convert.ToSingle( xtr.ReadElementString("PassHours"));
|
|
||||||
landData.PassPrice = Convert.ToInt32( xtr.ReadElementString("PassPrice"));
|
|
||||||
landData.SalePrice = Convert.ToInt32( xtr.ReadElementString("SalePrice"));
|
|
||||||
landData.SnapshotID = UUID.Parse( xtr.ReadElementString("SnapshotID"));
|
|
||||||
landData.UserLocation = Vector3.Parse( xtr.ReadElementString("UserLocation"));
|
|
||||||
landData.UserLookAt = Vector3.Parse( xtr.ReadElementString("UserLookAt"));
|
|
||||||
// No longer used here
|
|
||||||
xtr.ReadElementString("Dwell");
|
|
||||||
landData.OtherCleanTime = Convert.ToInt32( xtr.ReadElementString("OtherCleanTime"));
|
|
||||||
|
|
||||||
xtr.ReadEndElement();
|
|
||||||
|
|
||||||
xtr.Close();
|
|
||||||
sr.Close();
|
|
||||||
|
|
||||||
return landData;
|
return landData;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,14 +41,13 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serialize and deserialize user inventory items as an external format.
|
/// Serialize and deserialize user inventory items as an external format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// XXX: Please do not use yet.
|
|
||||||
public class UserInventoryItemSerializer
|
public class UserInventoryItemSerializer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private delegate void InventoryItemXmlProcessor(InventoryItemBase item, XmlTextReader reader);
|
private static Dictionary<string, Action<InventoryItemBase, XmlTextReader>> m_InventoryItemXmlProcessors
|
||||||
private static Dictionary<string, InventoryItemXmlProcessor> m_InventoryItemXmlProcessors = new Dictionary<string, InventoryItemXmlProcessor>();
|
= new Dictionary<string, Action<InventoryItemBase, XmlTextReader>>();
|
||||||
|
|
||||||
#region InventoryItemBase Processor initialization
|
#region InventoryItemBase Processor initialization
|
||||||
static UserInventoryItemSerializer()
|
static UserInventoryItemSerializer()
|
||||||
|
@ -205,39 +204,14 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
reader.ReadStartElement("InventoryItem");
|
reader.ReadStartElement("InventoryItem");
|
||||||
|
|
||||||
string nodeName = string.Empty;
|
ExternalRepresentationUtils.ExecuteReadProcessors<InventoryItemBase>(
|
||||||
while (reader.NodeType != XmlNodeType.EndElement)
|
item, m_InventoryItemXmlProcessors, reader);
|
||||||
{
|
|
||||||
nodeName = reader.Name;
|
|
||||||
InventoryItemXmlProcessor p = null;
|
|
||||||
if (m_InventoryItemXmlProcessors.TryGetValue(reader.Name, out p))
|
|
||||||
{
|
|
||||||
//m_log.DebugFormat("[XXX] Processing: {0}", reader.Name);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
p(item, reader);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[InventoryItemSerializer]: exception while parsing {0}: {1}", nodeName, e);
|
|
||||||
if (reader.NodeType == XmlNodeType.EndElement)
|
|
||||||
reader.Read();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[InventoryItemSerializer]: caught unknown element {0}", nodeName);
|
|
||||||
reader.ReadOuterXml(); // ignore
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.ReadEndElement(); // InventoryItem
|
reader.ReadEndElement(); // InventoryItem
|
||||||
}
|
}
|
||||||
|
|
||||||
//m_log.DebugFormat("[XXX]: parsed InventoryItemBase {0} - {1}", obj.Name, obj.UUID);
|
//m_log.DebugFormat("[XXX]: parsed InventoryItemBase {0} - {1}", obj.Name, obj.UUID);
|
||||||
return item;
|
return item;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Serialize(InventoryItemBase inventoryItem, Dictionary<string, object> options, IUserAccountService userAccountService)
|
public static string Serialize(InventoryItemBase inventoryItem, Dictionary<string, object> options, IUserAccountService userAccountService)
|
||||||
|
@ -305,14 +279,14 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
writer.WriteEndElement();
|
writer.WriteEndElement();
|
||||||
if (options.ContainsKey("creators") && inventoryItem.CreatorData != null && inventoryItem.CreatorData != string.Empty)
|
if (options.ContainsKey("creators") && inventoryItem.CreatorData != null && inventoryItem.CreatorData != string.Empty)
|
||||||
writer.WriteElementString("CreatorData", inventoryItem.CreatorData);
|
writer.WriteElementString("CreatorData", inventoryItem.CreatorData);
|
||||||
else if (options.ContainsKey("profile"))
|
else if (options.ContainsKey("home"))
|
||||||
{
|
{
|
||||||
if (userAccountService != null)
|
if (userAccountService != null)
|
||||||
{
|
{
|
||||||
UserAccount account = userAccountService.GetUserAccount(UUID.Zero, inventoryItem.CreatorIdAsUuid);
|
UserAccount account = userAccountService.GetUserAccount(UUID.Zero, inventoryItem.CreatorIdAsUuid);
|
||||||
if (account != null)
|
if (account != null)
|
||||||
{
|
{
|
||||||
writer.WriteElementString("CreatorData", (string)options["profile"] + "/" + inventoryItem.CreatorIdAsUuid + ";" + account.FirstName + " " + account.LastName);
|
writer.WriteElementString("CreatorData", (string)options["home"] + "/" + inventoryItem.CreatorIdAsUuid + ";" + account.FirstName + " " + account.LastName);
|
||||||
}
|
}
|
||||||
writer.WriteElementString("CreatorID", inventoryItem.CreatorId);
|
writer.WriteElementString("CreatorID", inventoryItem.CreatorId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,8 +33,11 @@ using OpenSim.Framework;
|
||||||
namespace OpenSim.Framework.Serialization.External
|
namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serialize and deserialize region settings as an external format.
|
/// Serialize and deserialize user profiles as an external format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Currently UNUSED.
|
||||||
|
/// </remarks>
|
||||||
public class UserProfileSerializer
|
public class UserProfileSerializer
|
||||||
{
|
{
|
||||||
public const int MAJOR_VERSION = 0;
|
public const int MAJOR_VERSION = 0;
|
||||||
|
|
|
@ -27,11 +27,12 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Framework.Serialization.External;
|
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Serialization.External;
|
||||||
|
using OpenSim.Tests.Common;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Serialization.Tests
|
namespace OpenSim.Framework.Serialization.Tests
|
||||||
{
|
{
|
||||||
|
@ -92,6 +93,8 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
[Test]
|
[Test]
|
||||||
public void LandDataSerializerSerializeTest()
|
public void LandDataSerializerSerializeTest()
|
||||||
{
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
string serialized = LandDataSerializer.Serialize(this.land).Replace("\r\n", "\n");
|
string serialized = LandDataSerializer.Serialize(this.land).Replace("\r\n", "\n");
|
||||||
Assert.That(serialized.Length > 0, "Serialize(LandData) returned empty string");
|
Assert.That(serialized.Length > 0, "Serialize(LandData) returned empty string");
|
||||||
|
|
||||||
|
@ -112,20 +115,32 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
/// Test the LandDataSerializer.Deserialize() method
|
/// Test the LandDataSerializer.Deserialize() method
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLandDataSerializerDeserializeFromStringTest()
|
public void TestLandDataDeserializeNoAccessLists()
|
||||||
{
|
{
|
||||||
LandData reifiedLandData = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerialized);
|
TestHelpers.InMethod();
|
||||||
Assert.That(reifiedLandData != null, "Deserialize(string) returned null");
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
Assert.That(reifiedLandData.GlobalID == this.land.GlobalID, "Reified LandData.GlobalID != original LandData.GlobalID");
|
|
||||||
Assert.That(reifiedLandData.Name == this.land.Name, "Reified LandData.Name != original LandData.Name");
|
|
||||||
|
|
||||||
LandData reifiedLandDataWithParcelAccessList = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerializedWithParcelAccessList);
|
LandData ld = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerialized);
|
||||||
Assert.That(reifiedLandDataWithParcelAccessList != null,
|
Assert.That(ld != null, "Deserialize(string) returned null");
|
||||||
|
Assert.That(ld.GlobalID == this.land.GlobalID, "Reified LandData.GlobalID != original LandData.GlobalID");
|
||||||
|
Assert.That(ld.Name == this.land.Name, "Reified LandData.Name != original LandData.Name");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestLandDataDeserializeWithAccessLists()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
LandData ld = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerializedWithParcelAccessList);
|
||||||
|
Assert.That(ld != null,
|
||||||
"Deserialize(string) returned null (pre-serialized with parcel access list)");
|
"Deserialize(string) returned null (pre-serialized with parcel access list)");
|
||||||
Assert.That(reifiedLandDataWithParcelAccessList.GlobalID == this.landWithParcelAccessList.GlobalID,
|
Assert.That(ld.GlobalID == this.landWithParcelAccessList.GlobalID,
|
||||||
"Reified LandData.GlobalID != original LandData.GlobalID (pre-serialized with parcel access list)");
|
"Reified LandData.GlobalID != original LandData.GlobalID (pre-serialized with parcel access list)");
|
||||||
Assert.That(reifiedLandDataWithParcelAccessList.Name == this.landWithParcelAccessList.Name,
|
Assert.That(ld.Name == this.landWithParcelAccessList.Name,
|
||||||
"Reified LandData.Name != original LandData.Name (pre-serialized with parcel access list)");
|
"Reified LandData.Name != original LandData.Name (pre-serialized with parcel access list)");
|
||||||
|
Assert.That(ld.ParcelAccessList.Count, Is.EqualTo(2));
|
||||||
|
Assert.That(ld.ParcelAccessList[0].AgentID, Is.EqualTo(UUID.Parse("62d65d45-c91a-4f77-862c-46557d978b6c")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.StructuredData;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Serialization.External;
|
||||||
|
using OpenSim.Tests.Common;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Serialization.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class RegionSettingsSerializerTests
|
||||||
|
{
|
||||||
|
private string m_serializedRs = @"<?xml version=""1.0"" encoding=""utf-16""?>
|
||||||
|
<RegionSettings>
|
||||||
|
<General>
|
||||||
|
<AllowDamage>True</AllowDamage>
|
||||||
|
<AllowLandResell>True</AllowLandResell>
|
||||||
|
<AllowLandJoinDivide>True</AllowLandJoinDivide>
|
||||||
|
<BlockFly>True</BlockFly>
|
||||||
|
<BlockLandShowInSearch>True</BlockLandShowInSearch>
|
||||||
|
<BlockTerraform>True</BlockTerraform>
|
||||||
|
<DisableCollisions>True</DisableCollisions>
|
||||||
|
<DisablePhysics>True</DisablePhysics>
|
||||||
|
<DisableScripts>True</DisableScripts>
|
||||||
|
<MaturityRating>1</MaturityRating>
|
||||||
|
<RestrictPushing>True</RestrictPushing>
|
||||||
|
<AgentLimit>40</AgentLimit>
|
||||||
|
<ObjectBonus>1.4</ObjectBonus>
|
||||||
|
</General>
|
||||||
|
<GroundTextures>
|
||||||
|
<Texture1>00000000-0000-0000-0000-000000000020</Texture1>
|
||||||
|
<Texture2>00000000-0000-0000-0000-000000000040</Texture2>
|
||||||
|
<Texture3>00000000-0000-0000-0000-000000000060</Texture3>
|
||||||
|
<Texture4>00000000-0000-0000-0000-000000000080</Texture4>
|
||||||
|
<ElevationLowSW>1.9</ElevationLowSW>
|
||||||
|
<ElevationLowNW>15.9</ElevationLowNW>
|
||||||
|
<ElevationLowSE>49</ElevationLowSE>
|
||||||
|
<ElevationLowNE>45.3</ElevationLowNE>
|
||||||
|
<ElevationHighSW>2.1</ElevationHighSW>
|
||||||
|
<ElevationHighNW>4.5</ElevationHighNW>
|
||||||
|
<ElevationHighSE>9.2</ElevationHighSE>
|
||||||
|
<ElevationHighNE>19.2</ElevationHighNE>
|
||||||
|
</GroundTextures>
|
||||||
|
<Terrain>
|
||||||
|
<WaterHeight>23</WaterHeight>
|
||||||
|
<TerrainRaiseLimit>17.9</TerrainRaiseLimit>
|
||||||
|
<TerrainLowerLimit>0.4</TerrainLowerLimit>
|
||||||
|
<UseEstateSun>True</UseEstateSun>
|
||||||
|
<FixedSun>true</FixedSun>
|
||||||
|
<SunPosition>12</SunPosition>
|
||||||
|
</Terrain>
|
||||||
|
</RegionSettings>";
|
||||||
|
|
||||||
|
private RegionSettings m_rs;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
m_rs = new RegionSettings();
|
||||||
|
m_rs.AgentLimit = 17;
|
||||||
|
m_rs.AllowDamage = true;
|
||||||
|
m_rs.AllowLandJoinDivide = true;
|
||||||
|
m_rs.AllowLandResell = true;
|
||||||
|
m_rs.BlockFly = true;
|
||||||
|
m_rs.BlockShowInSearch = true;
|
||||||
|
m_rs.BlockTerraform = true;
|
||||||
|
m_rs.DisableCollisions = true;
|
||||||
|
m_rs.DisablePhysics = true;
|
||||||
|
m_rs.DisableScripts = true;
|
||||||
|
m_rs.Elevation1NW = 15.9;
|
||||||
|
m_rs.Elevation1NE = 45.3;
|
||||||
|
m_rs.Elevation1SE = 49;
|
||||||
|
m_rs.Elevation1SW = 1.9;
|
||||||
|
m_rs.Elevation2NW = 4.5;
|
||||||
|
m_rs.Elevation2NE = 19.2;
|
||||||
|
m_rs.Elevation2SE = 9.2;
|
||||||
|
m_rs.Elevation2SW = 2.1;
|
||||||
|
m_rs.FixedSun = true;
|
||||||
|
m_rs.SunPosition = 12.0;
|
||||||
|
m_rs.ObjectBonus = 1.4;
|
||||||
|
m_rs.RestrictPushing = true;
|
||||||
|
m_rs.TerrainLowerLimit = 0.4;
|
||||||
|
m_rs.TerrainRaiseLimit = 17.9;
|
||||||
|
m_rs.TerrainTexture1 = UUID.Parse("00000000-0000-0000-0000-000000000020");
|
||||||
|
m_rs.TerrainTexture2 = UUID.Parse("00000000-0000-0000-0000-000000000040");
|
||||||
|
m_rs.TerrainTexture3 = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
||||||
|
m_rs.TerrainTexture4 = UUID.Parse("00000000-0000-0000-0000-000000000080");
|
||||||
|
m_rs.UseEstateSun = true;
|
||||||
|
m_rs.WaterHeight = 23;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestRegionSettingsDeserialize()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
RegionSettings deserRs = RegionSettingsSerializer.Deserialize(m_serializedRs);
|
||||||
|
Assert.That(deserRs, Is.Not.Null);
|
||||||
|
Assert.That(deserRs.TerrainTexture2, Is.EqualTo(m_rs.TerrainTexture2));
|
||||||
|
Assert.That(deserRs.DisablePhysics, Is.EqualTo(m_rs.DisablePhysics));
|
||||||
|
Assert.That(deserRs.TerrainLowerLimit, Is.EqualTo(m_rs.TerrainLowerLimit));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4497,7 +4497,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
EstateCovenantReplyPacket einfopack = new EstateCovenantReplyPacket();
|
EstateCovenantReplyPacket einfopack = new EstateCovenantReplyPacket();
|
||||||
EstateCovenantReplyPacket.DataBlock edata = new EstateCovenantReplyPacket.DataBlock();
|
EstateCovenantReplyPacket.DataBlock edata = new EstateCovenantReplyPacket.DataBlock();
|
||||||
edata.CovenantID = covenant;
|
edata.CovenantID = covenant;
|
||||||
edata.CovenantTimestamp = 0;
|
edata.CovenantTimestamp = (uint) m_scene.RegionInfo.RegionSettings.CovenantChangedDateTime;
|
||||||
edata.EstateOwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
edata.EstateOwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
||||||
edata.EstateName = Utils.StringToBytes(m_scene.RegionInfo.EstateSettings.EstateName);
|
edata.EstateName = Utils.StringToBytes(m_scene.RegionInfo.EstateSettings.EstateName);
|
||||||
einfopack.Data = edata;
|
einfopack.Data = edata;
|
||||||
|
@ -4505,8 +4505,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendDetailedEstateData(
|
public void SendDetailedEstateData(
|
||||||
UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition,
|
UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition,
|
||||||
UUID covenant, string abuseEmail, UUID estateOwner)
|
UUID covenant, uint covenantChanged, string abuseEmail, UUID estateOwner)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[LLCLIENTVIEW]: Sending detailed estate data to {0} with covenant asset id {1}", Name, covenant);
|
// "[LLCLIENTVIEW]: Sending detailed estate data to {0} with covenant asset id {1}", Name, covenant);
|
||||||
|
@ -4531,7 +4531,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
returnblock[4].Parameter = Utils.StringToBytes(sunPosition.ToString());
|
returnblock[4].Parameter = Utils.StringToBytes(sunPosition.ToString());
|
||||||
returnblock[5].Parameter = Utils.StringToBytes(parentEstate.ToString());
|
returnblock[5].Parameter = Utils.StringToBytes(parentEstate.ToString());
|
||||||
returnblock[6].Parameter = Utils.StringToBytes(covenant.ToString());
|
returnblock[6].Parameter = Utils.StringToBytes(covenant.ToString());
|
||||||
returnblock[7].Parameter = Utils.StringToBytes("1160895077"); // what is this?
|
returnblock[7].Parameter = Utils.StringToBytes(covenantChanged.ToString());
|
||||||
returnblock[8].Parameter = Utils.StringToBytes("1"); // what is this?
|
returnblock[8].Parameter = Utils.StringToBytes("1"); // what is this?
|
||||||
returnblock[9].Parameter = Utils.StringToBytes(abuseEmail);
|
returnblock[9].Parameter = Utils.StringToBytes(abuseEmail);
|
||||||
|
|
||||||
|
|
|
@ -412,7 +412,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
{
|
{
|
||||||
int majorVersion, minorVersion;
|
int majorVersion, minorVersion;
|
||||||
|
|
||||||
if (options.ContainsKey("profile"))
|
if (options.ContainsKey("home"))
|
||||||
{
|
{
|
||||||
majorVersion = 1;
|
majorVersion = 1;
|
||||||
minorVersion = 2;
|
minorVersion = 2;
|
||||||
|
|
|
@ -122,7 +122,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
|
|
||||||
scene.AddCommand(
|
scene.AddCommand(
|
||||||
this, "save iar",
|
this, "save iar",
|
||||||
"save iar [-h|--home=<url>] [--noassets] <first> <last> <inventory path> <password> [<IAR path>] [--v|-verbose]",
|
"save iar [-h|--home=<url>] [--noassets] <first> <last> <inventory path> <password> [<IAR path>] [-c|--creators] [-v|--verbose]",
|
||||||
"Save user inventory archive (IAR).",
|
"Save user inventory archive (IAR).",
|
||||||
"<first> is the user's first name." + Environment.NewLine
|
"<first> is the user's first name." + Environment.NewLine
|
||||||
+ "<last> is the user's last name." + Environment.NewLine
|
+ "<last> is the user's last name." + Environment.NewLine
|
||||||
|
@ -396,7 +396,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
|
|
||||||
OptionSet ops = new OptionSet();
|
OptionSet ops = new OptionSet();
|
||||||
//ops.Add("v|version=", delegate(string v) { options["version"] = v; });
|
//ops.Add("v|version=", delegate(string v) { options["version"] = v; });
|
||||||
ops.Add("p|profile=", delegate(string v) { options["profile"] = v; });
|
ops.Add("h|home=", delegate(string v) { options["home"] = v; });
|
||||||
ops.Add("v|verbose", delegate(string v) { options["verbose"] = v; });
|
ops.Add("v|verbose", delegate(string v) { options["verbose"] = v; });
|
||||||
ops.Add("c|creators", delegate(string v) { options["creators"] = v; });
|
ops.Add("c|creators", delegate(string v) { options["creators"] = v; });
|
||||||
ops.Add("noassets", delegate(string v) { options["noassets"] = v != null; });
|
ops.Add("noassets", delegate(string v) { options["noassets"] = v != null; });
|
||||||
|
@ -408,13 +408,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
if (mainParams.Count < 6)
|
if (mainParams.Count < 6)
|
||||||
{
|
{
|
||||||
m_log.Error(
|
m_log.Error(
|
||||||
"[INVENTORY ARCHIVER]: usage is save iar [--p|-profile=<url>] [--noassets] <first name> <last name> <inventory path> <user password> [<save file path>]");
|
"[INVENTORY ARCHIVER]: usage is save iar [-h|--home=<url>] [--noassets] <first name> <last name> <inventory path> <user password> [<save file path>] [-c|--creators] [-v|--verbose]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME.");
|
m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME.");
|
||||||
if (options.ContainsKey("profile"))
|
if (options.ContainsKey("home"))
|
||||||
m_log.WarnFormat("[INVENTORY ARCHIVER]: Please be aware that inventory archives with creator information are not compatible with OpenSim 0.7.0.2 and earlier. Do not use the -profile option if you want to produce a compatible IAR");
|
m_log.WarnFormat("[INVENTORY ARCHIVER]: Please be aware that inventory archives with creator information are not compatible with OpenSim 0.7.0.2 and earlier. Do not use the -home option if you want to produce a compatible IAR");
|
||||||
|
|
||||||
string firstName = mainParams[2];
|
string firstName = mainParams[2];
|
||||||
string lastName = mainParams[3];
|
string lastName = mainParams[3];
|
||||||
|
|
|
@ -306,10 +306,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
protected AssetBase PostProcess(AssetBase asset)
|
protected AssetBase PostProcess(AssetBase asset)
|
||||||
{
|
{
|
||||||
if (asset.Type == (sbyte)AssetType.Object && asset.Data != null && m_options.ContainsKey("profile"))
|
if (asset.Type == (sbyte)AssetType.Object && asset.Data != null && m_options.ContainsKey("home"))
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[ARCHIVER]: Rewriting object data for {0}", asset.ID);
|
//m_log.DebugFormat("[ARCHIVER]: Rewriting object data for {0}", asset.ID);
|
||||||
string xml = ExternalRepresentationUtils.RewriteSOP(Utils.BytesToString(asset.Data), m_options["profile"].ToString(), m_userAccountService, m_scopeID);
|
string xml = ExternalRepresentationUtils.RewriteSOP(Utils.BytesToString(asset.Data), m_options["home"].ToString(), m_userAccountService, m_scopeID);
|
||||||
asset.Data = Utils.StringToBytes(xml);
|
asset.Data = Utils.StringToBytes(xml);
|
||||||
}
|
}
|
||||||
return asset;
|
return asset;
|
||||||
|
|
|
@ -88,6 +88,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
GetEstateFlags(),
|
GetEstateFlags(),
|
||||||
sun,
|
sun,
|
||||||
Scene.RegionInfo.RegionSettings.Covenant,
|
Scene.RegionInfo.RegionSettings.Covenant,
|
||||||
|
(uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime,
|
||||||
Scene.RegionInfo.EstateSettings.AbuseEmail,
|
Scene.RegionInfo.EstateSettings.AbuseEmail,
|
||||||
estateOwner);
|
estateOwner);
|
||||||
}
|
}
|
||||||
|
@ -285,6 +286,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
// remoteClient.Name, estateCovenantID);
|
// remoteClient.Name, estateCovenantID);
|
||||||
|
|
||||||
Scene.RegionInfo.RegionSettings.Covenant = estateCovenantID;
|
Scene.RegionInfo.RegionSettings.Covenant = estateCovenantID;
|
||||||
|
Scene.RegionInfo.RegionSettings.CovenantChangedDateTime = Util.UnixTimeSinceEpoch();
|
||||||
Scene.RegionInfo.RegionSettings.Save();
|
Scene.RegionInfo.RegionSettings.Save();
|
||||||
TriggerRegionInfoChange();
|
TriggerRegionInfoChange();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1491,12 +1491,27 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()",
|
// "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()",
|
||||||
// currentItem.Name, part.Name);
|
// currentItem.Name, part.Name);
|
||||||
IAgentAssetTransactions agentTransactions = this.RequestModuleInterface<IAgentAssetTransactions>();
|
|
||||||
if (agentTransactions != null)
|
// Only look for an uploaded updated asset if we are passed a transaction ID. This is only the
|
||||||
|
// case for updates uploded through UDP. Updates uploaded via a capability (e.g. a script update)
|
||||||
|
// will not pass in a transaction ID in the update message.
|
||||||
|
if (transactionID != UUID.Zero)
|
||||||
{
|
{
|
||||||
agentTransactions.HandleTaskItemUpdateFromTransaction(
|
IAgentAssetTransactions agentTransactions = this.RequestModuleInterface<IAgentAssetTransactions>();
|
||||||
remoteClient, part, transactionID, currentItem);
|
if (agentTransactions != null)
|
||||||
|
{
|
||||||
|
agentTransactions.HandleTaskItemUpdateFromTransaction(
|
||||||
|
remoteClient, part, transactionID, currentItem);
|
||||||
|
|
||||||
|
// if ((InventoryType)itemInfo.InvType == InventoryType.Notecard)
|
||||||
|
// remoteClient.SendAgentAlertMessage("Notecard saved", false);
|
||||||
|
// else if ((InventoryType)itemInfo.InvType == InventoryType.LSL)
|
||||||
|
// remoteClient.SendAgentAlertMessage("Script saved", false);
|
||||||
|
// else
|
||||||
|
// remoteClient.SendAgentAlertMessage("Item saved", false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Base ALWAYS has move
|
// Base ALWAYS has move
|
||||||
currentItem.BasePermissions |= (uint)PermissionMask.Move;
|
currentItem.BasePermissions |= (uint)PermissionMask.Move;
|
||||||
|
|
||||||
|
|
|
@ -2781,10 +2781,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (ParentGroup == null)
|
if (ParentGroup == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// When running OpenSim tests, Scene (and EventManager can be null).
|
|
||||||
// Need to fix tests before we can trigger this here
|
|
||||||
// ParentGroup.Scene.EventManager.TriggerSceneObjectPartUpdated(this);
|
|
||||||
|
|
||||||
ParentGroup.QueueForUpdateCheck();
|
ParentGroup.QueueForUpdateCheck();
|
||||||
|
|
||||||
int timeNow = Util.UnixTimeSinceEpoch();
|
int timeNow = Util.UnixTimeSinceEpoch();
|
||||||
|
@ -2806,6 +2802,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT PART]: Scheduling full update for {0}, {1} at {2}",
|
// "[SCENE OBJECT PART]: Scheduling full update for {0}, {1} at {2}",
|
||||||
// UUID, Name, TimeStampFull);
|
// UUID, Name, TimeStampFull);
|
||||||
|
|
||||||
|
if (ParentGroup.Scene != null)
|
||||||
|
ParentGroup.Scene.EventManager.TriggerSceneObjectPartUpdated(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2817,15 +2816,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (ParentGroup == null)
|
if (ParentGroup == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// When running OpenSim tests, Scene (and EventManager can be null).
|
|
||||||
// Need to fix tests before we can trigger this here
|
|
||||||
// ParentGroup.Scene.EventManager.TriggerSceneObjectPartUpdated(this);
|
|
||||||
|
|
||||||
// This was pulled from SceneViewer. Attachments always receive full updates.
|
// This was pulled from SceneViewer. Attachments always receive full updates.
|
||||||
// I could not verify if this is a requirement but this maintains existing behavior
|
// I could not verify if this is a requirement but this maintains existing behavior
|
||||||
if (ParentGroup.IsAttachment)
|
if (ParentGroup.IsAttachment)
|
||||||
{
|
{
|
||||||
ScheduleFullUpdate();
|
ScheduleFullUpdate();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UpdateFlag == UpdateRequired.NONE)
|
if (UpdateFlag == UpdateRequired.NONE)
|
||||||
|
@ -2840,6 +2836,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// "[SCENE OBJECT PART]: Scheduling terse update for {0}, {1} at {2}",
|
// "[SCENE OBJECT PART]: Scheduling terse update for {0}, {1} at {2}",
|
||||||
// UUID, Name, TimeStampTerse);
|
// UUID, Name, TimeStampTerse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ParentGroup.Scene != null)
|
||||||
|
ParentGroup.Scene.EventManager.TriggerSceneObjectPartUpdated(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ScriptSetPhysicsStatus(bool UsePhysics)
|
public void ScriptSetPhysicsStatus(bool UsePhysics)
|
||||||
|
|
|
@ -34,6 +34,7 @@ using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Serialization.External;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
|
||||||
|
@ -276,14 +277,14 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
|
|
||||||
#region manual serialization
|
#region manual serialization
|
||||||
|
|
||||||
private delegate void SOPXmlProcessor(SceneObjectPart sop, XmlTextReader reader);
|
private static Dictionary<string, Action<SceneObjectPart, XmlTextReader>> m_SOPXmlProcessors
|
||||||
private static Dictionary<string, SOPXmlProcessor> m_SOPXmlProcessors = new Dictionary<string, SOPXmlProcessor>();
|
= new Dictionary<string, Action<SceneObjectPart, XmlTextReader>>();
|
||||||
|
|
||||||
private delegate void TaskInventoryXmlProcessor(TaskInventoryItem item, XmlTextReader reader);
|
private static Dictionary<string, Action<TaskInventoryItem, XmlTextReader>> m_TaskInventoryXmlProcessors
|
||||||
private static Dictionary<string, TaskInventoryXmlProcessor> m_TaskInventoryXmlProcessors = new Dictionary<string, TaskInventoryXmlProcessor>();
|
= new Dictionary<string, Action<TaskInventoryItem, XmlTextReader>>();
|
||||||
|
|
||||||
private delegate void ShapeXmlProcessor(PrimitiveBaseShape shape, XmlTextReader reader);
|
private static Dictionary<string, Action<PrimitiveBaseShape, XmlTextReader>> m_ShapeXmlProcessors
|
||||||
private static Dictionary<string, ShapeXmlProcessor> m_ShapeXmlProcessors = new Dictionary<string, ShapeXmlProcessor>();
|
= new Dictionary<string, Action<PrimitiveBaseShape, XmlTextReader>>();
|
||||||
|
|
||||||
static SceneObjectSerializer()
|
static SceneObjectSerializer()
|
||||||
{
|
{
|
||||||
|
@ -1480,34 +1481,14 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
|
|
||||||
reader.ReadStartElement("SceneObjectPart");
|
reader.ReadStartElement("SceneObjectPart");
|
||||||
|
|
||||||
string nodeName = string.Empty;
|
ExternalRepresentationUtils.ExecuteReadProcessors(
|
||||||
while (reader.NodeType != XmlNodeType.EndElement)
|
obj,
|
||||||
{
|
m_SOPXmlProcessors,
|
||||||
nodeName = reader.Name;
|
reader,
|
||||||
SOPXmlProcessor p = null;
|
(o, nodeName, e)
|
||||||
if (m_SOPXmlProcessors.TryGetValue(reader.Name, out p))
|
=> m_log.ErrorFormat(
|
||||||
{
|
"[SceneObjectSerializer]: Exception while parsing {0} in object {1} {2}: {3}{4}",
|
||||||
//m_log.DebugFormat("[XXX] Processing: {0}", reader.Name);
|
((SceneObjectPart)o).Name, ((SceneObjectPart)o).UUID, nodeName, e.Message, e.StackTrace));
|
||||||
try
|
|
||||||
{
|
|
||||||
p(obj, reader);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[SceneObjectSerializer]: exception while parsing {0} in object {1} {2}: {3}{4}",
|
|
||||||
obj.Name, obj.UUID, nodeName, e.Message, e.StackTrace);
|
|
||||||
if (reader.NodeType == XmlNodeType.EndElement)
|
|
||||||
reader.Read();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[SceneObjectSerializer]: caught unknown element {0}", nodeName);
|
|
||||||
reader.ReadOuterXml(); // ignore
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.ReadEndElement(); // SceneObjectPart
|
reader.ReadEndElement(); // SceneObjectPart
|
||||||
|
|
||||||
|
@ -1526,17 +1507,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
reader.ReadStartElement("TaskInventoryItem", String.Empty); // TaskInventory
|
reader.ReadStartElement("TaskInventoryItem", String.Empty); // TaskInventory
|
||||||
|
|
||||||
TaskInventoryItem item = new TaskInventoryItem();
|
TaskInventoryItem item = new TaskInventoryItem();
|
||||||
while (reader.NodeType != XmlNodeType.EndElement)
|
|
||||||
{
|
ExternalRepresentationUtils.ExecuteReadProcessors(
|
||||||
TaskInventoryXmlProcessor p = null;
|
item,
|
||||||
if (m_TaskInventoryXmlProcessors.TryGetValue(reader.Name, out p))
|
m_TaskInventoryXmlProcessors,
|
||||||
p(item, reader);
|
reader);
|
||||||
else
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[SceneObjectSerializer]: caught unknown element in TaskInventory {0}, {1}", reader.Name, reader.Value);
|
|
||||||
reader.ReadOuterXml();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reader.ReadEndElement(); // TaskInventoryItem
|
reader.ReadEndElement(); // TaskInventoryItem
|
||||||
tinv.Add(item.ItemID, item);
|
tinv.Add(item.ItemID, item);
|
||||||
|
|
||||||
|
@ -1563,35 +1539,14 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
|
|
||||||
reader.ReadStartElement(name, String.Empty); // Shape
|
reader.ReadStartElement(name, String.Empty); // Shape
|
||||||
|
|
||||||
string nodeName = string.Empty;
|
ExternalRepresentationUtils.ExecuteReadProcessors(
|
||||||
while (reader.NodeType != XmlNodeType.EndElement)
|
shape,
|
||||||
{
|
m_ShapeXmlProcessors,
|
||||||
nodeName = reader.Name;
|
reader,
|
||||||
//m_log.DebugFormat("[XXX] Processing: {0}", reader.Name);
|
(o, nodeName, e)
|
||||||
ShapeXmlProcessor p = null;
|
=> m_log.ErrorFormat(
|
||||||
if (m_ShapeXmlProcessors.TryGetValue(reader.Name, out p))
|
"[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
|
||||||
{
|
nodeName, e.Message, e.StackTrace));
|
||||||
try
|
|
||||||
{
|
|
||||||
p(shape, reader);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
errors = true;
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[SceneObjectSerializer]: exception while parsing Shape property {0}: {1}{2}",
|
|
||||||
nodeName, e.Message, e.StackTrace);
|
|
||||||
|
|
||||||
if (reader.NodeType == XmlNodeType.EndElement)
|
|
||||||
reader.Read();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[SceneObjectSerializer]: caught unknown element in Shape {0}", reader.Name);
|
|
||||||
reader.ReadOuterXml();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.ReadEndElement(); // Shape
|
reader.ReadEndElement(); // Shape
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
// log4net.Config.XmlConfigurator.Configure();
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
UUID userId = TestHelpers.ParseTail(0x1);
|
UUID userId = TestHelpers.ParseTail(0x1);
|
||||||
UUID itemId = TestHelpers.ParseTail(0x2);
|
// UUID itemId = TestHelpers.ParseTail(0x2);
|
||||||
string itemName = "Test Script Item";
|
string itemName = "Test Script Item";
|
||||||
|
|
||||||
Scene scene = SceneHelpers.SetupScene();
|
Scene scene = SceneHelpers.SetupScene();
|
||||||
|
|
|
@ -174,7 +174,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
TestHelpers.InMethod();
|
TestHelpers.InMethod();
|
||||||
// log4net.Config.XmlConfigurator.Configure();
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
UUID agent1Id = UUID.Parse("00000000-0000-0000-0000-000000000001");
|
// UUID agent1Id = UUID.Parse("00000000-0000-0000-0000-000000000001");
|
||||||
|
|
||||||
TestScene myScene1 = SceneHelpers.SetupScene("Neighbour y", UUID.Random(), 1000, 1000);
|
TestScene myScene1 = SceneHelpers.SetupScene("Neighbour y", UUID.Random(), 1000, 1000);
|
||||||
TestScene myScene2 = SceneHelpers.SetupScene("Neighbour y + 1", UUID.Random(), 1001, 1000);
|
TestScene myScene2 = SceneHelpers.SetupScene("Neighbour y + 1", UUID.Random(), 1001, 1000);
|
||||||
|
|
|
@ -1250,7 +1250,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner)
|
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, uint covenantChanged, string abuseEmail, UUID estateOwner)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -937,7 +937,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
public void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint)
|
public void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner)
|
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, uint covenantChanged, string abuseEmail, UUID estateOwner)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,24 +140,26 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
// acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
|
// acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
|
|
||||||
scene.AddNewClient(npcAvatar, PresenceType.Npc);
|
|
||||||
|
|
||||||
ScenePresence sp;
|
|
||||||
if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
|
|
||||||
{
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
|
||||||
|
|
||||||
sp.CompleteMovement(npcAvatar, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (m_avatars)
|
lock (m_avatars)
|
||||||
|
{
|
||||||
|
scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
|
||||||
|
scene.AddNewClient(npcAvatar, PresenceType.Npc);
|
||||||
|
|
||||||
|
ScenePresence sp;
|
||||||
|
if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
|
||||||
|
{
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
||||||
|
|
||||||
|
sp.CompleteMovement(npcAvatar, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
||||||
|
}
|
||||||
|
|
||||||
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
|
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
|
||||||
|
}
|
||||||
|
|
||||||
m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
|
m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
|
||||||
|
|
||||||
|
|
|
@ -624,20 +624,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const string URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED";
|
public const string URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED";
|
||||||
public const string URL_REQUEST_DENIED = "URL_REQUEST_DENIED";
|
public const string URL_REQUEST_DENIED = "URL_REQUEST_DENIED";
|
||||||
|
|
||||||
public static readonly LSLInteger RC_REJECT_TYPES = 2;
|
public static readonly LSLInteger RC_REJECT_TYPES = 0;
|
||||||
public static readonly LSLInteger RC_DATA_FLAGS = 4;
|
public static readonly LSLInteger RC_DETECT_PHANTOM = 1;
|
||||||
public static readonly LSLInteger RC_MAX_HITS = 8;
|
public static readonly LSLInteger RC_DATA_FLAGS = 2;
|
||||||
public static readonly LSLInteger RC_DETECT_PHANTOM = 16;
|
public static readonly LSLInteger RC_MAX_HITS = 3;
|
||||||
|
|
||||||
public static readonly LSLInteger RC_REJECT_AGENTS = 2;
|
public static readonly LSLInteger RC_REJECT_AGENTS = 1;
|
||||||
public static readonly LSLInteger RC_REJECT_PHYSICAL = 4;
|
public static readonly LSLInteger RC_REJECT_PHYSICAL = 2;
|
||||||
public static readonly LSLInteger RC_REJECT_NONPHYSICAL = 8;
|
public static readonly LSLInteger RC_REJECT_NONPHYSICAL = 4;
|
||||||
public static readonly LSLInteger RC_REJECT_LAND = 16;
|
public static readonly LSLInteger RC_REJECT_LAND = 8;
|
||||||
|
|
||||||
public static readonly LSLInteger RC_GET_NORMAL = 2;
|
public static readonly LSLInteger RC_GET_NORMAL = 1;
|
||||||
public static readonly LSLInteger RC_GET_ROOT_KEY = 4;
|
public static readonly LSLInteger RC_GET_ROOT_KEY = 2;
|
||||||
public static readonly LSLInteger RC_GET_LINK_NUM = 8;
|
public static readonly LSLInteger RC_GET_LINK_NUM = 4;
|
||||||
|
|
||||||
public static readonly LSLInteger RCERR_CAST_TIME_EXCEEDED = 1;
|
public static readonly LSLInteger RCERR_UNKNOWN = -1;
|
||||||
|
public static readonly LSLInteger RCERR_SIM_PERF_LOW = -2;
|
||||||
|
public static readonly LSLInteger RCERR_CAST_TIME_EXCEEDED = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@ namespace OpenSim.Services.AuthenticationService
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[AUTH SERVICE]: Salted hash {0} of given password did not match salted hash of {1} for PrincipalID {2}. Authentication failure.",
|
"[AUTH SERVICE]: Salted hash {0} of given password did not match salted hash of {1} for PrincipalID {2}. Authentication failure.",
|
||||||
principalID);
|
hashed, data.Data["passwordHash"], principalID);
|
||||||
return String.Empty;
|
return String.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -977,7 +977,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner)
|
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, uint covenantChanged, string abuseEmail, UUID estateOwner)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
|
||||||
|
</configSections>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
|
||||||
|
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
|
||||||
|
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
|
||||||
|
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
<log4net>
|
||||||
|
<!-- A1 is set to be a ConsoleAppender -->
|
||||||
|
<appender name="A1" type="log4net.Appender.ConsoleAppender">
|
||||||
|
|
||||||
|
<!-- A1 uses PatternLayout -->
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<!-- Print the date in ISO 8601 format -->
|
||||||
|
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- Set root logger level to DEBUG and its only appender to A1 -->
|
||||||
|
<root>
|
||||||
|
<level value="DEBUG" />
|
||||||
|
<appender-ref ref="A1" />
|
||||||
|
</root>
|
||||||
|
</log4net>
|
||||||
|
</configuration>
|
|
@ -218,6 +218,7 @@
|
||||||
|
|
||||||
<ReferencePath>../../../bin/</ReferencePath>
|
<ReferencePath>../../../bin/</ReferencePath>
|
||||||
<Reference name="System"/>
|
<Reference name="System"/>
|
||||||
|
<Reference name="System.Core"/>
|
||||||
<Reference name="System.Xml"/>
|
<Reference name="System.Xml"/>
|
||||||
<Reference name="log4net" path="../../../bin/"/>
|
<Reference name="log4net" path="../../../bin/"/>
|
||||||
<Reference name="OpenMetaverse" path="../../../bin/"/>
|
<Reference name="OpenMetaverse" path="../../../bin/"/>
|
||||||
|
@ -797,6 +798,7 @@
|
||||||
<Reference name="OpenSim.Framework.Communications"/>
|
<Reference name="OpenSim.Framework.Communications"/>
|
||||||
<Reference name="OpenSim.Data"/>
|
<Reference name="OpenSim.Data"/>
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
<Reference name="OpenSim.Framework.Serialization"/>
|
||||||
<Reference name="OpenSim.Framework.Servers"/>
|
<Reference name="OpenSim.Framework.Servers"/>
|
||||||
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
||||||
<Reference name="OpenSim.Framework.Statistics"/>
|
<Reference name="OpenSim.Framework.Statistics"/>
|
||||||
|
|
Loading…
Reference in New Issue