diff --git a/OpenSim/Data/MSSQL/Resources/GridStore.migrations b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
index c6342fcdfd..de0cea7ab1 100644
--- a/OpenSim/Data/MSSQL/Resources/GridStore.migrations
+++ b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
@@ -235,4 +235,11 @@ CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
regionName
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-COMMIT
\ No newline at end of file
+COMMIT
+
+:VERSION 9
+
+BEGIN TRANSACTION
+ALTER TABLE regions ADD parcelMapTexture uniqueidentifier NULL;
+
+COMMIT
diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
index 31195af06c..0f40cdc04d 100644
--- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
@@ -472,3 +472,73 @@ COMMIT;
BEGIN;
ALTER TABLE regionsettings ADD COLUMN covenant_datetime INTEGER NOT NULL default 0;
COMMIT;
+
+:VERSION 23
+BEGIN;
+CREATE TABLE regionwindlight (
+ region_id VARCHAR(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000' PRIMARY KEY,
+ water_color_r FLOAT NOT NULL DEFAULT '4.000000',
+ water_color_g FLOAT NOT NULL DEFAULT '38.000000',
+ water_color_b FLOAT NOT NULL DEFAULT '64.000000',
+ water_color_i FLOAT NOT NULL DEFAULT '1.000000',
+ water_fog_density_exponent FLOAT NOT NULL DEFAULT '4.0',
+ underwater_fog_modifier FLOAT NOT NULL DEFAULT '0.25',
+ reflection_wavelet_scale_1 FLOAT NOT NULL DEFAULT '2.0',
+ reflection_wavelet_scale_2 FLOAT NOT NULL DEFAULT '2.0',
+ reflection_wavelet_scale_3 FLOAT NOT NULL DEFAULT '2.0',
+ fresnel_scale FLOAT NOT NULL DEFAULT '0.40',
+ fresnel_offset FLOAT NOT NULL DEFAULT '0.50',
+ refract_scale_above FLOAT NOT NULL DEFAULT '0.03',
+ refract_scale_below FLOAT NOT NULL DEFAULT '0.20',
+ blur_multiplier FLOAT NOT NULL DEFAULT '0.040',
+ big_wave_direction_x FLOAT NOT NULL DEFAULT '1.05',
+ big_wave_direction_y FLOAT NOT NULL DEFAULT '-0.42',
+ little_wave_direction_x FLOAT NOT NULL DEFAULT '1.11',
+ little_wave_direction_y FLOAT NOT NULL DEFAULT '-1.16',
+ normal_map_texture VARCHAR(36) NOT NULL DEFAULT '822ded49-9a6c-f61c-cb89-6df54f42cdf4',
+ horizon_r FLOAT NOT NULL DEFAULT '0.25',
+ horizon_g FLOAT NOT NULL DEFAULT '0.25',
+ horizon_b FLOAT NOT NULL DEFAULT '0.32',
+ horizon_i FLOAT NOT NULL DEFAULT '0.32',
+ haze_horizon FLOAT NOT NULL DEFAULT '0.19',
+ blue_density_r FLOAT NOT NULL DEFAULT '0.12',
+ blue_density_g FLOAT NOT NULL DEFAULT '0.22',
+ blue_density_b FLOAT NOT NULL DEFAULT '0.38',
+ blue_density_i FLOAT NOT NULL DEFAULT '0.38',
+ haze_density FLOAT NOT NULL DEFAULT '0.70',
+ density_multiplier FLOAT NOT NULL DEFAULT '0.18',
+ distance_multiplier FLOAT NOT NULL DEFAULT '0.8',
+ max_altitude INTEGER NOT NULL DEFAULT '1605',
+ sun_moon_color_r FLOAT NOT NULL DEFAULT '0.24',
+ sun_moon_color_g FLOAT NOT NULL DEFAULT '0.26',
+ sun_moon_color_b FLOAT NOT NULL DEFAULT '0.30',
+ sun_moon_color_i FLOAT NOT NULL DEFAULT '0.30',
+ sun_moon_position FLOAT NOT NULL DEFAULT '0.317',
+ ambient_r FLOAT NOT NULL DEFAULT '0.35',
+ ambient_g FLOAT NOT NULL DEFAULT '0.35',
+ ambient_b FLOAT NOT NULL DEFAULT '0.35',
+ ambient_i FLOAT NOT NULL DEFAULT '0.35',
+ east_angle FLOAT NOT NULL DEFAULT '0.00',
+ sun_glow_focus FLOAT NOT NULL DEFAULT '0.10',
+ sun_glow_size FLOAT NOT NULL DEFAULT '1.75',
+ scene_gamma FLOAT NOT NULL DEFAULT '1.00',
+ star_brightness FLOAT NOT NULL DEFAULT '0.00',
+ cloud_color_r FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_g FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_b FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_i FLOAT NOT NULL DEFAULT '0.41',
+ cloud_x FLOAT NOT NULL DEFAULT '1.00',
+ cloud_y FLOAT NOT NULL DEFAULT '0.53',
+ cloud_density FLOAT NOT NULL DEFAULT '1.00',
+ cloud_coverage FLOAT NOT NULL DEFAULT '0.27',
+ cloud_scale FLOAT NOT NULL DEFAULT '0.42',
+ cloud_detail_x FLOAT NOT NULL DEFAULT '1.00',
+ cloud_detail_y FLOAT NOT NULL DEFAULT '0.53',
+ cloud_detail_density FLOAT NOT NULL DEFAULT '0.12',
+ cloud_scroll_x FLOAT NOT NULL DEFAULT '0.20',
+ cloud_scroll_x_lock INTEGER NOT NULL DEFAULT '0',
+ cloud_scroll_y FLOAT NOT NULL DEFAULT '0.01',
+ cloud_scroll_y_lock INTEGER NOT NULL DEFAULT '0',
+ draw_classic_clouds INTEGER NOT NULL DEFAULT '1');
+
+COMMIT;
\ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteFriendsData.cs b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
index b14c3482bb..5f68977c1f 100644
--- a/OpenSim/Data/SQLite/SQLiteFriendsData.cs
+++ b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
@@ -75,7 +75,7 @@ namespace OpenSim.Data.SQLite
cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue(":Friend", friend);
- ExecuteNonQuery(cmd, cmd.Connection);
+ ExecuteNonQuery(cmd, m_Connection);
return true;
}
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index a313c4f51b..ce1b7b4887 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -35,7 +35,7 @@ using log4net;
#if CSharpSqlite
using Community.CsharpSqlite.Sqlite;
#else
- using Mono.Data.Sqlite;
+using Mono.Data.Sqlite;
#endif
using OpenMetaverse;
using OpenMetaverse.StructuredData;
@@ -60,6 +60,7 @@ namespace OpenSim.Data.SQLite
private const string landAccessListSelect = "select distinct * from landaccesslist";
private const string regionbanListSelect = "select * from regionban";
private const string regionSettingsSelect = "select * from regionsettings";
+ private const string regionWindlightSelect = "select * from regionwindlight";
private DataSet ds;
private SqliteDataAdapter primDa;
@@ -69,9 +70,9 @@ namespace OpenSim.Data.SQLite
private SqliteDataAdapter landDa;
private SqliteDataAdapter landAccessListDa;
private SqliteDataAdapter regionSettingsDa;
+ private SqliteDataAdapter regionWindlightDa;
private SqliteConnection m_conn;
-
private String m_connectionString;
protected virtual Assembly Assembly
@@ -136,6 +137,9 @@ namespace OpenSim.Data.SQLite
SqliteCommand regionSettingsSelectCmd = new SqliteCommand(regionSettingsSelect, m_conn);
regionSettingsDa = new SqliteDataAdapter(regionSettingsSelectCmd);
+
+ SqliteCommand regionWindlightSelectCmd = new SqliteCommand(regionWindlightSelect, m_conn);
+ regionWindlightDa = new SqliteDataAdapter(regionWindlightSelectCmd);
// This actually does the roll forward assembly stuff
Migration m = new Migration(m_conn, Assembly, "RegionStore");
m.Update();
@@ -163,6 +167,9 @@ namespace OpenSim.Data.SQLite
ds.Tables.Add(createRegionSettingsTable());
setupRegionSettingsCommands(regionSettingsDa, m_conn);
+ ds.Tables.Add(createRegionWindlightTable());
+ setupRegionWindlightCommands(regionWindlightDa, m_conn);
+
// WORKAROUND: This is a work around for sqlite on
// windows, which gets really unhappy with blob columns
// that have no sample data in them. At some point we
@@ -171,63 +178,72 @@ namespace OpenSim.Data.SQLite
{
primDa.Fill(ds.Tables["prims"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on prims table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on prims table :{0}", e.Message);
}
try
{
shapeDa.Fill(ds.Tables["primshapes"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on primshapes table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on primshapes table :{0}", e.Message);
}
try
{
itemsDa.Fill(ds.Tables["primitems"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on primitems table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on primitems table :{0}", e.Message);
}
try
{
terrainDa.Fill(ds.Tables["terrain"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on terrain table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on terrain table :{0}", e.Message);
}
try
{
landDa.Fill(ds.Tables["land"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on land table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on land table :{0}", e.Message);
}
try
{
landAccessListDa.Fill(ds.Tables["landaccesslist"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on landaccesslist table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on landaccesslist table :{0}", e.Message);
}
try
{
regionSettingsDa.Fill(ds.Tables["regionsettings"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on regionsettings table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionsettings table :{0}", e.Message);
+ }
+
+ try
+ {
+ regionWindlightDa.Fill(ds.Tables["regionwindlight"]);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionwindlight table :{0}", e.Message);
}
// We have to create a data set mapping for every table, otherwise the IDataAdaptor.Update() will not populate rows with values!
@@ -240,14 +256,14 @@ namespace OpenSim.Data.SQLite
CreateDataSetMapping(landDa, "land");
CreateDataSetMapping(landAccessListDa, "landaccesslist");
CreateDataSetMapping(regionSettingsDa, "regionsettings");
+ CreateDataSetMapping(regionWindlightDa, "regionwindlight");
}
}
catch (Exception e)
{
- m_log.Error(e);
- Environment.Exit(23);
+ m_log.ErrorFormat("[SQLITE REGION DB]: ", e);
+ Environment.Exit(23);
}
-
return;
}
@@ -298,6 +314,11 @@ namespace OpenSim.Data.SQLite
regionSettingsDa.Dispose();
regionSettingsDa = null;
}
+ if (regionWindlightDa != null)
+ {
+ regionWindlightDa.Dispose();
+ regionWindlightDa = null;
+ }
}
public void StoreRegionSettings(RegionSettings rs)
@@ -321,19 +342,76 @@ namespace OpenSim.Data.SQLite
Commit();
}
}
+
+ ///
+ /// Load windlight settings from region storage
+ ///
+ /// RegionID
public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
{
- //This connector doesn't support the windlight module yet
- //Return default LL windlight settings
- return new RegionLightShareData();
+ RegionLightShareData wl = null;
+
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(regionUUID.ToString());
+ if (windlightRow == null)
+ {
+ wl = new RegionLightShareData();
+ wl.regionID = regionUUID;
+ StoreRegionWindlightSettings(wl);
+ return wl;
+ }
+ wl = buildRegionWindlight(windlightRow);
+ return wl;
+ }
}
+
+ ///
+ /// Remove windlight settings from region storage
+ ///
+ /// RegionID
public void RemoveRegionWindlightSettings(UUID regionID)
{
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(regionID.ToString());
+
+ if (windlightRow != null)
+ {
+ windlightRow.Delete();
+ }
+ }
+ Commit();
}
+
+ ///
+ /// Adds an windlight into region storage
+ ///
+ /// RegionLightShareData
public void StoreRegionWindlightSettings(RegionLightShareData wl)
{
- //This connector doesn't support the windlight module yet
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(wl.regionID.ToString());
+
+ if (windlightRow == null)
+ {
+ windlightRow = windlightTable.NewRow();
+ fillRegionWindlightRow(windlightRow, wl);
+ windlightTable.Rows.Add(windlightRow);
+ }
+ else
+ {
+ fillRegionWindlightRow(windlightRow, wl);
+ }
+
+ Commit();
+ }
}
+
public RegionSettings LoadRegionSettings(UUID regionUUID)
{
lock (ds)
@@ -387,7 +465,7 @@ namespace OpenSim.Data.SQLite
}
Commit();
- // m_log.Info("[Dump of prims]: " + ds.GetXml());
+// m_log.Info("[Dump of prims]: " + ds.GetXml());
}
///
@@ -397,7 +475,7 @@ namespace OpenSim.Data.SQLite
/// the region UUID
public void RemoveObject(UUID obj, UUID regionUUID)
{
- // m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
+// m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
DataTable prims = ds.Tables["prims"];
DataTable shapes = ds.Tables["primshapes"];
@@ -409,7 +487,7 @@ namespace OpenSim.Data.SQLite
foreach (DataRow row in primRows)
{
// Remove shape rows
- UUID uuid = new UUID((string) row["UUID"]);
+ UUID uuid = new UUID((string)row["UUID"]);
DataRow shapeRow = shapes.Rows.Find(uuid.ToString());
if (shapeRow != null)
{
@@ -464,7 +542,7 @@ namespace OpenSim.Data.SQLite
{
DataRow[] primsForRegion = prims.Select(byRegion);
// m_log.Info("[SQLITE REGION DB]: Loaded " + primsForRegion.Length + " prims for region: " + regionUUID);
-
+
// First, create all groups
foreach (DataRow primRow in primsForRegion)
{
@@ -472,9 +550,9 @@ namespace OpenSim.Data.SQLite
{
SceneObjectPart prim = null;
- string uuid = (string) primRow["UUID"];
- string objID = (string) primRow["SceneGroupID"];
-
+ string uuid = (string)primRow["UUID"];
+ string objID = (string)primRow["SceneGroupID"];
+
if (uuid == objID) //is new SceneObjectGroup ?
{
prim = buildPrim(primRow);
@@ -489,7 +567,7 @@ namespace OpenSim.Data.SQLite
"[SQLITE REGION DB]: No shape found for prim in storage, so setting default box shape");
prim.Shape = PrimitiveBaseShape.Default;
}
-
+
SceneObjectGroup group = new SceneObjectGroup(prim);
createdObjects.Add(group.UUID, group);
retvals.Add(group);
@@ -506,7 +584,7 @@ namespace OpenSim.Data.SQLite
}
}
}
-
+
// Now fill the groups with part data
foreach (DataRow primRow in primsForRegion)
{
@@ -514,8 +592,8 @@ namespace OpenSim.Data.SQLite
{
SceneObjectPart prim = null;
- string uuid = (string) primRow["UUID"];
- string objID = (string) primRow["SceneGroupID"];
+ string uuid = (string)primRow["UUID"];
+ string objID = (string)primRow["SceneGroupID"];
if (uuid != objID) //is new SceneObjectGroup ?
{
prim = buildPrim(primRow);
@@ -562,8 +640,7 @@ namespace OpenSim.Data.SQLite
DataRow[] dbItemRows = dbItems.Select(sql);
IList inventory = new List();
-// m_log.DebugFormat(
-// "[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID);
+// m_log.DebugFormat("[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID);
foreach (DataRow row in dbItemRows)
{
@@ -742,7 +819,7 @@ namespace OpenSim.Data.SQLite
// cmd.Parameters.Add(new SqliteParameter(":LandUUID", parcel.LandData.GlobalID.ToString()));
// cmd.ExecuteNonQuery();
-// }
+ // }
// This is the slower.. but more appropriate thing to do
@@ -805,7 +882,7 @@ namespace OpenSim.Data.SQLite
///
public void Commit()
{
- //m_log.Debug("[SQLITE]: Starting commit");
+// m_log.Debug("[SQLITE]: Starting commit");
lock (ds)
{
primDa.Update(ds, "prims");
@@ -819,6 +896,7 @@ namespace OpenSim.Data.SQLite
try
{
regionSettingsDa.Update(ds, "regionsettings");
+ regionWindlightDa.Update(ds, "regionwindlight");
}
catch (SqliteException SqlEx)
{
@@ -875,9 +953,9 @@ namespace OpenSim.Data.SQLite
{
DataTable terrain = new DataTable("terrain");
- createCol(terrain, "RegionUUID", typeof (String));
- createCol(terrain, "Revision", typeof (Int32));
- createCol(terrain, "Heightfield", typeof (Byte[]));
+ createCol(terrain, "RegionUUID", typeof(String));
+ createCol(terrain, "Revision", typeof(Int32));
+ createCol(terrain, "Heightfield", typeof(Byte[]));
return terrain;
}
@@ -890,62 +968,62 @@ namespace OpenSim.Data.SQLite
{
DataTable prims = new DataTable("prims");
- createCol(prims, "UUID", typeof (String));
- createCol(prims, "RegionUUID", typeof (String));
- createCol(prims, "CreationDate", typeof (Int32));
- createCol(prims, "Name", typeof (String));
- createCol(prims, "SceneGroupID", typeof (String));
+ createCol(prims, "UUID", typeof(String));
+ createCol(prims, "RegionUUID", typeof(String));
+ createCol(prims, "CreationDate", typeof(Int32));
+ createCol(prims, "Name", typeof(String));
+ createCol(prims, "SceneGroupID", typeof(String));
// various text fields
- createCol(prims, "Text", typeof (String));
- createCol(prims, "ColorR", typeof (Int32));
- createCol(prims, "ColorG", typeof (Int32));
- createCol(prims, "ColorB", typeof (Int32));
- createCol(prims, "ColorA", typeof (Int32));
- createCol(prims, "Description", typeof (String));
- createCol(prims, "SitName", typeof (String));
- createCol(prims, "TouchName", typeof (String));
+ createCol(prims, "Text", typeof(String));
+ createCol(prims, "ColorR", typeof(Int32));
+ createCol(prims, "ColorG", typeof(Int32));
+ createCol(prims, "ColorB", typeof(Int32));
+ createCol(prims, "ColorA", typeof(Int32));
+ createCol(prims, "Description", typeof(String));
+ createCol(prims, "SitName", typeof(String));
+ createCol(prims, "TouchName", typeof(String));
// permissions
- createCol(prims, "ObjectFlags", typeof (Int32));
- createCol(prims, "CreatorID", typeof (String));
- createCol(prims, "OwnerID", typeof (String));
- createCol(prims, "GroupID", typeof (String));
- createCol(prims, "LastOwnerID", typeof (String));
- createCol(prims, "OwnerMask", typeof (Int32));
- createCol(prims, "NextOwnerMask", typeof (Int32));
- createCol(prims, "GroupMask", typeof (Int32));
- createCol(prims, "EveryoneMask", typeof (Int32));
- createCol(prims, "BaseMask", typeof (Int32));
+ createCol(prims, "ObjectFlags", typeof(Int32));
+ createCol(prims, "CreatorID", typeof(String));
+ createCol(prims, "OwnerID", typeof(String));
+ createCol(prims, "GroupID", typeof(String));
+ createCol(prims, "LastOwnerID", typeof(String));
+ createCol(prims, "OwnerMask", typeof(Int32));
+ createCol(prims, "NextOwnerMask", typeof(Int32));
+ createCol(prims, "GroupMask", typeof(Int32));
+ createCol(prims, "EveryoneMask", typeof(Int32));
+ createCol(prims, "BaseMask", typeof(Int32));
// vectors
- createCol(prims, "PositionX", typeof (Double));
- createCol(prims, "PositionY", typeof (Double));
- createCol(prims, "PositionZ", typeof (Double));
- createCol(prims, "GroupPositionX", typeof (Double));
- createCol(prims, "GroupPositionY", typeof (Double));
- createCol(prims, "GroupPositionZ", typeof (Double));
- createCol(prims, "VelocityX", typeof (Double));
- createCol(prims, "VelocityY", typeof (Double));
- createCol(prims, "VelocityZ", typeof (Double));
- createCol(prims, "AngularVelocityX", typeof (Double));
- createCol(prims, "AngularVelocityY", typeof (Double));
- createCol(prims, "AngularVelocityZ", typeof (Double));
- createCol(prims, "AccelerationX", typeof (Double));
- createCol(prims, "AccelerationY", typeof (Double));
- createCol(prims, "AccelerationZ", typeof (Double));
+ createCol(prims, "PositionX", typeof(Double));
+ createCol(prims, "PositionY", typeof(Double));
+ createCol(prims, "PositionZ", typeof(Double));
+ createCol(prims, "GroupPositionX", typeof(Double));
+ createCol(prims, "GroupPositionY", typeof(Double));
+ createCol(prims, "GroupPositionZ", typeof(Double));
+ createCol(prims, "VelocityX", typeof(Double));
+ createCol(prims, "VelocityY", typeof(Double));
+ createCol(prims, "VelocityZ", typeof(Double));
+ createCol(prims, "AngularVelocityX", typeof(Double));
+ createCol(prims, "AngularVelocityY", typeof(Double));
+ createCol(prims, "AngularVelocityZ", typeof(Double));
+ createCol(prims, "AccelerationX", typeof(Double));
+ createCol(prims, "AccelerationY", typeof(Double));
+ createCol(prims, "AccelerationZ", typeof(Double));
// quaternions
- createCol(prims, "RotationX", typeof (Double));
- createCol(prims, "RotationY", typeof (Double));
- createCol(prims, "RotationZ", typeof (Double));
- createCol(prims, "RotationW", typeof (Double));
+ createCol(prims, "RotationX", typeof(Double));
+ createCol(prims, "RotationY", typeof(Double));
+ createCol(prims, "RotationZ", typeof(Double));
+ createCol(prims, "RotationW", typeof(Double));
// sit target
- createCol(prims, "SitTargetOffsetX", typeof (Double));
- createCol(prims, "SitTargetOffsetY", typeof (Double));
- createCol(prims, "SitTargetOffsetZ", typeof (Double));
+ createCol(prims, "SitTargetOffsetX", typeof(Double));
+ createCol(prims, "SitTargetOffsetY", typeof(Double));
+ createCol(prims, "SitTargetOffsetZ", typeof(Double));
- createCol(prims, "SitTargetOrientW", typeof (Double));
- createCol(prims, "SitTargetOrientX", typeof (Double));
- createCol(prims, "SitTargetOrientY", typeof (Double));
- createCol(prims, "SitTargetOrientZ", typeof (Double));
+ createCol(prims, "SitTargetOrientW", typeof(Double));
+ createCol(prims, "SitTargetOrientX", typeof(Double));
+ createCol(prims, "SitTargetOrientY", typeof(Double));
+ createCol(prims, "SitTargetOrientZ", typeof(Double));
createCol(prims, "PayPrice", typeof(Int32));
createCol(prims, "PayButton1", typeof(Int32));
@@ -981,7 +1059,7 @@ namespace OpenSim.Data.SQLite
createCol(prims, "SaleType", typeof(Int16));
// click action
- createCol(prims, "ClickAction", typeof (Byte));
+ createCol(prims, "ClickAction", typeof(Byte));
createCol(prims, "Material", typeof(Byte));
@@ -993,7 +1071,7 @@ namespace OpenSim.Data.SQLite
createCol(prims, "MediaURL", typeof(String));
// Add in contraints
- prims.PrimaryKey = new DataColumn[] {prims.Columns["UUID"]};
+ prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] };
return prims;
}
@@ -1005,42 +1083,42 @@ namespace OpenSim.Data.SQLite
private static DataTable createShapeTable()
{
DataTable shapes = new DataTable("primshapes");
- createCol(shapes, "UUID", typeof (String));
+ createCol(shapes, "UUID", typeof(String));
// shape is an enum
- createCol(shapes, "Shape", typeof (Int32));
+ createCol(shapes, "Shape", typeof(Int32));
// vectors
- createCol(shapes, "ScaleX", typeof (Double));
- createCol(shapes, "ScaleY", typeof (Double));
- createCol(shapes, "ScaleZ", typeof (Double));
+ createCol(shapes, "ScaleX", typeof(Double));
+ createCol(shapes, "ScaleY", typeof(Double));
+ createCol(shapes, "ScaleZ", typeof(Double));
// paths
- createCol(shapes, "PCode", typeof (Int32));
- createCol(shapes, "PathBegin", typeof (Int32));
- createCol(shapes, "PathEnd", typeof (Int32));
- createCol(shapes, "PathScaleX", typeof (Int32));
- createCol(shapes, "PathScaleY", typeof (Int32));
- createCol(shapes, "PathShearX", typeof (Int32));
- createCol(shapes, "PathShearY", typeof (Int32));
- createCol(shapes, "PathSkew", typeof (Int32));
- createCol(shapes, "PathCurve", typeof (Int32));
- createCol(shapes, "PathRadiusOffset", typeof (Int32));
- createCol(shapes, "PathRevolutions", typeof (Int32));
- createCol(shapes, "PathTaperX", typeof (Int32));
- createCol(shapes, "PathTaperY", typeof (Int32));
- createCol(shapes, "PathTwist", typeof (Int32));
- createCol(shapes, "PathTwistBegin", typeof (Int32));
+ createCol(shapes, "PCode", typeof(Int32));
+ createCol(shapes, "PathBegin", typeof(Int32));
+ createCol(shapes, "PathEnd", typeof(Int32));
+ createCol(shapes, "PathScaleX", typeof(Int32));
+ createCol(shapes, "PathScaleY", typeof(Int32));
+ createCol(shapes, "PathShearX", typeof(Int32));
+ createCol(shapes, "PathShearY", typeof(Int32));
+ createCol(shapes, "PathSkew", typeof(Int32));
+ createCol(shapes, "PathCurve", typeof(Int32));
+ createCol(shapes, "PathRadiusOffset", typeof(Int32));
+ createCol(shapes, "PathRevolutions", typeof(Int32));
+ createCol(shapes, "PathTaperX", typeof(Int32));
+ createCol(shapes, "PathTaperY", typeof(Int32));
+ createCol(shapes, "PathTwist", typeof(Int32));
+ createCol(shapes, "PathTwistBegin", typeof(Int32));
// profile
- createCol(shapes, "ProfileBegin", typeof (Int32));
- createCol(shapes, "ProfileEnd", typeof (Int32));
- createCol(shapes, "ProfileCurve", typeof (Int32));
- createCol(shapes, "ProfileHollow", typeof (Int32));
+ createCol(shapes, "ProfileBegin", typeof(Int32));
+ createCol(shapes, "ProfileEnd", typeof(Int32));
+ createCol(shapes, "ProfileCurve", typeof(Int32));
+ createCol(shapes, "ProfileHollow", typeof(Int32));
createCol(shapes, "State", typeof(Int32));
// text TODO: this isn't right, but I'm not sure the right
// way to specify this as a blob atm
- createCol(shapes, "Texture", typeof (Byte[]));
- createCol(shapes, "ExtraParams", typeof (Byte[]));
+ createCol(shapes, "Texture", typeof(Byte[]));
+ createCol(shapes, "ExtraParams", typeof(Byte[]));
createCol(shapes, "Media", typeof(String));
- shapes.PrimaryKey = new DataColumn[] {shapes.Columns["UUID"]};
+ shapes.PrimaryKey = new DataColumn[] { shapes.Columns["UUID"] };
return shapes;
}
@@ -1053,29 +1131,29 @@ namespace OpenSim.Data.SQLite
{
DataTable items = new DataTable("primitems");
- createCol(items, "itemID", typeof (String));
- createCol(items, "primID", typeof (String));
- createCol(items, "assetID", typeof (String));
- createCol(items, "parentFolderID", typeof (String));
+ createCol(items, "itemID", typeof(String));
+ createCol(items, "primID", typeof(String));
+ createCol(items, "assetID", typeof(String));
+ createCol(items, "parentFolderID", typeof(String));
- createCol(items, "invType", typeof (Int32));
- createCol(items, "assetType", typeof (Int32));
+ createCol(items, "invType", typeof(Int32));
+ createCol(items, "assetType", typeof(Int32));
- createCol(items, "name", typeof (String));
- createCol(items, "description", typeof (String));
+ createCol(items, "name", typeof(String));
+ createCol(items, "description", typeof(String));
- createCol(items, "creationDate", typeof (Int64));
- createCol(items, "creatorID", typeof (String));
- createCol(items, "ownerID", typeof (String));
- createCol(items, "lastOwnerID", typeof (String));
- createCol(items, "groupID", typeof (String));
+ createCol(items, "creationDate", typeof(Int64));
+ createCol(items, "creatorID", typeof(String));
+ createCol(items, "ownerID", typeof(String));
+ createCol(items, "lastOwnerID", typeof(String));
+ createCol(items, "groupID", typeof(String));
- createCol(items, "nextPermissions", typeof (UInt32));
- createCol(items, "currentPermissions", typeof (UInt32));
- createCol(items, "basePermissions", typeof (UInt32));
- createCol(items, "everyonePermissions", typeof (UInt32));
- createCol(items, "groupPermissions", typeof (UInt32));
- createCol(items, "flags", typeof (UInt32));
+ createCol(items, "nextPermissions", typeof(UInt32));
+ createCol(items, "currentPermissions", typeof(UInt32));
+ createCol(items, "basePermissions", typeof(UInt32));
+ createCol(items, "everyonePermissions", typeof(UInt32));
+ createCol(items, "groupPermissions", typeof(UInt32));
+ createCol(items, "flags", typeof(UInt32));
items.PrimaryKey = new DataColumn[] { items.Columns["itemID"] };
@@ -1089,44 +1167,44 @@ namespace OpenSim.Data.SQLite
private static DataTable createLandTable()
{
DataTable land = new DataTable("land");
- createCol(land, "UUID", typeof (String));
- createCol(land, "RegionUUID", typeof (String));
- createCol(land, "LocalLandID", typeof (UInt32));
+ createCol(land, "UUID", typeof(String));
+ createCol(land, "RegionUUID", typeof(String));
+ createCol(land, "LocalLandID", typeof(UInt32));
// Bitmap is a byte[512]
- createCol(land, "Bitmap", typeof (Byte[]));
+ createCol(land, "Bitmap", typeof(Byte[]));
- createCol(land, "Name", typeof (String));
- createCol(land, "Desc", typeof (String));
- createCol(land, "OwnerUUID", typeof (String));
- createCol(land, "IsGroupOwned", typeof (Boolean));
- createCol(land, "Area", typeof (Int32));
- createCol(land, "AuctionID", typeof (Int32)); //Unemplemented
- createCol(land, "Category", typeof (Int32)); //Enum OpenMetaverse.Parcel.ParcelCategory
- createCol(land, "ClaimDate", typeof (Int32));
- createCol(land, "ClaimPrice", typeof (Int32));
- createCol(land, "GroupUUID", typeof (string));
- createCol(land, "SalePrice", typeof (Int32));
- createCol(land, "LandStatus", typeof (Int32)); //Enum. OpenMetaverse.Parcel.ParcelStatus
- createCol(land, "LandFlags", typeof (UInt32));
- createCol(land, "LandingType", typeof (Byte));
- createCol(land, "MediaAutoScale", typeof (Byte));
- createCol(land, "MediaTextureUUID", typeof (String));
- createCol(land, "MediaURL", typeof (String));
- createCol(land, "MusicURL", typeof (String));
- createCol(land, "PassHours", typeof (Double));
- createCol(land, "PassPrice", typeof (UInt32));
- createCol(land, "SnapshotUUID", typeof (String));
- createCol(land, "UserLocationX", typeof (Double));
- createCol(land, "UserLocationY", typeof (Double));
- createCol(land, "UserLocationZ", typeof (Double));
- createCol(land, "UserLookAtX", typeof (Double));
- createCol(land, "UserLookAtY", typeof (Double));
- createCol(land, "UserLookAtZ", typeof (Double));
+ createCol(land, "Name", typeof(String));
+ createCol(land, "Desc", typeof(String));
+ createCol(land, "OwnerUUID", typeof(String));
+ createCol(land, "IsGroupOwned", typeof(Boolean));
+ createCol(land, "Area", typeof(Int32));
+ createCol(land, "AuctionID", typeof(Int32)); //Unemplemented
+ createCol(land, "Category", typeof(Int32)); //Enum OpenMetaverse.Parcel.ParcelCategory
+ createCol(land, "ClaimDate", typeof(Int32));
+ createCol(land, "ClaimPrice", typeof(Int32));
+ createCol(land, "GroupUUID", typeof(string));
+ createCol(land, "SalePrice", typeof(Int32));
+ createCol(land, "LandStatus", typeof(Int32)); //Enum. OpenMetaverse.Parcel.ParcelStatus
+ createCol(land, "LandFlags", typeof(UInt32));
+ createCol(land, "LandingType", typeof(Byte));
+ createCol(land, "MediaAutoScale", typeof(Byte));
+ createCol(land, "MediaTextureUUID", typeof(String));
+ createCol(land, "MediaURL", typeof(String));
+ createCol(land, "MusicURL", typeof(String));
+ createCol(land, "PassHours", typeof(Double));
+ createCol(land, "PassPrice", typeof(UInt32));
+ createCol(land, "SnapshotUUID", typeof(String));
+ createCol(land, "UserLocationX", typeof(Double));
+ createCol(land, "UserLocationY", typeof(Double));
+ createCol(land, "UserLocationZ", typeof(Double));
+ createCol(land, "UserLookAtX", typeof(Double));
+ createCol(land, "UserLookAtY", typeof(Double));
+ createCol(land, "UserLookAtZ", typeof(Double));
createCol(land, "AuthbuyerID", typeof(String));
createCol(land, "OtherCleanTime", typeof(Int32));
- land.PrimaryKey = new DataColumn[] {land.Columns["UUID"]};
+ land.PrimaryKey = new DataColumn[] { land.Columns["UUID"] };
return land;
}
@@ -1138,9 +1216,9 @@ namespace OpenSim.Data.SQLite
private static DataTable createLandAccessListTable()
{
DataTable landaccess = new DataTable("landaccesslist");
- createCol(landaccess, "LandUUID", typeof (String));
- createCol(landaccess, "AccessUUID", typeof (String));
- createCol(landaccess, "Flags", typeof (UInt32));
+ createCol(landaccess, "LandUUID", typeof(String));
+ createCol(landaccess, "AccessUUID", typeof(String));
+ createCol(landaccess, "Flags", typeof(UInt32));
return landaccess;
}
@@ -1149,41 +1227,41 @@ namespace OpenSim.Data.SQLite
{
DataTable regionsettings = new DataTable("regionsettings");
createCol(regionsettings, "regionUUID", typeof(String));
- createCol(regionsettings, "block_terraform", typeof (Int32));
- createCol(regionsettings, "block_fly", typeof (Int32));
- createCol(regionsettings, "allow_damage", typeof (Int32));
- createCol(regionsettings, "restrict_pushing", typeof (Int32));
- createCol(regionsettings, "allow_land_resell", typeof (Int32));
- createCol(regionsettings, "allow_land_join_divide", typeof (Int32));
- createCol(regionsettings, "block_show_in_search", typeof (Int32));
- createCol(regionsettings, "agent_limit", typeof (Int32));
- createCol(regionsettings, "object_bonus", typeof (Double));
- createCol(regionsettings, "maturity", typeof (Int32));
- createCol(regionsettings, "disable_scripts", typeof (Int32));
- createCol(regionsettings, "disable_collisions", typeof (Int32));
- createCol(regionsettings, "disable_physics", typeof (Int32));
+ createCol(regionsettings, "block_terraform", typeof(Int32));
+ createCol(regionsettings, "block_fly", typeof(Int32));
+ createCol(regionsettings, "allow_damage", typeof(Int32));
+ createCol(regionsettings, "restrict_pushing", typeof(Int32));
+ createCol(regionsettings, "allow_land_resell", typeof(Int32));
+ createCol(regionsettings, "allow_land_join_divide", typeof(Int32));
+ createCol(regionsettings, "block_show_in_search", typeof(Int32));
+ createCol(regionsettings, "agent_limit", typeof(Int32));
+ createCol(regionsettings, "object_bonus", typeof(Double));
+ createCol(regionsettings, "maturity", typeof(Int32));
+ createCol(regionsettings, "disable_scripts", typeof(Int32));
+ createCol(regionsettings, "disable_collisions", typeof(Int32));
+ createCol(regionsettings, "disable_physics", typeof(Int32));
createCol(regionsettings, "terrain_texture_1", typeof(String));
createCol(regionsettings, "terrain_texture_2", typeof(String));
createCol(regionsettings, "terrain_texture_3", typeof(String));
createCol(regionsettings, "terrain_texture_4", typeof(String));
- createCol(regionsettings, "elevation_1_nw", typeof (Double));
- createCol(regionsettings, "elevation_2_nw", typeof (Double));
- createCol(regionsettings, "elevation_1_ne", typeof (Double));
- createCol(regionsettings, "elevation_2_ne", typeof (Double));
- createCol(regionsettings, "elevation_1_se", typeof (Double));
- createCol(regionsettings, "elevation_2_se", typeof (Double));
- createCol(regionsettings, "elevation_1_sw", typeof (Double));
- createCol(regionsettings, "elevation_2_sw", typeof (Double));
- createCol(regionsettings, "water_height", typeof (Double));
- createCol(regionsettings, "terrain_raise_limit", typeof (Double));
- createCol(regionsettings, "terrain_lower_limit", typeof (Double));
- createCol(regionsettings, "use_estate_sun", typeof (Int32));
- createCol(regionsettings, "sandbox", typeof (Int32));
- createCol(regionsettings, "sunvectorx",typeof (Double));
- createCol(regionsettings, "sunvectory",typeof (Double));
- createCol(regionsettings, "sunvectorz",typeof (Double));
- createCol(regionsettings, "fixed_sun", typeof (Int32));
- createCol(regionsettings, "sun_position", typeof (Double));
+ createCol(regionsettings, "elevation_1_nw", typeof(Double));
+ createCol(regionsettings, "elevation_2_nw", typeof(Double));
+ createCol(regionsettings, "elevation_1_ne", typeof(Double));
+ createCol(regionsettings, "elevation_2_ne", typeof(Double));
+ createCol(regionsettings, "elevation_1_se", typeof(Double));
+ createCol(regionsettings, "elevation_2_se", typeof(Double));
+ createCol(regionsettings, "elevation_1_sw", typeof(Double));
+ createCol(regionsettings, "elevation_2_sw", typeof(Double));
+ createCol(regionsettings, "water_height", typeof(Double));
+ createCol(regionsettings, "terrain_raise_limit", typeof(Double));
+ createCol(regionsettings, "terrain_lower_limit", typeof(Double));
+ createCol(regionsettings, "use_estate_sun", typeof(Int32));
+ createCol(regionsettings, "sandbox", typeof(Int32));
+ createCol(regionsettings, "sunvectorx", typeof(Double));
+ createCol(regionsettings, "sunvectory", typeof(Double));
+ createCol(regionsettings, "sunvectorz", typeof(Double));
+ createCol(regionsettings, "fixed_sun", typeof(Int32));
+ createCol(regionsettings, "sun_position", typeof(Double));
createCol(regionsettings, "covenant", typeof(String));
createCol(regionsettings, "covenant_datetime", typeof(Int32));
createCol(regionsettings, "map_tile_ID", typeof(String));
@@ -1191,6 +1269,82 @@ namespace OpenSim.Data.SQLite
return regionsettings;
}
+ ///
+ /// create "regionwindlight" table
+ ///
+ /// RegionWindlight DataTable
+ private static DataTable createRegionWindlightTable()
+ {
+ DataTable regionwindlight = new DataTable("regionwindlight");
+ createCol(regionwindlight, "region_id", typeof(String));
+ createCol(regionwindlight, "water_color_r", typeof(Double));
+ createCol(regionwindlight, "water_color_g", typeof(Double));
+ createCol(regionwindlight, "water_color_b", typeof(Double));
+ createCol(regionwindlight, "water_color_i", typeof(Double));
+ createCol(regionwindlight, "water_fog_density_exponent", typeof(Double));
+ createCol(regionwindlight, "underwater_fog_modifier", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_1", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_2", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_3", typeof(Double));
+ createCol(regionwindlight, "fresnel_scale", typeof(Double));
+ createCol(regionwindlight, "fresnel_offset", typeof(Double));
+ createCol(regionwindlight, "refract_scale_above", typeof(Double));
+ createCol(regionwindlight, "refract_scale_below", typeof(Double));
+ createCol(regionwindlight, "blur_multiplier", typeof(Double));
+ createCol(regionwindlight, "big_wave_direction_x", typeof(Double));
+ createCol(regionwindlight, "big_wave_direction_y", typeof(Double));
+ createCol(regionwindlight, "little_wave_direction_x", typeof(Double));
+ createCol(regionwindlight, "little_wave_direction_y", typeof(Double));
+ createCol(regionwindlight, "normal_map_texture", typeof(String));
+ createCol(regionwindlight, "horizon_r", typeof(Double));
+ createCol(regionwindlight, "horizon_g", typeof(Double));
+ createCol(regionwindlight, "horizon_b", typeof(Double));
+ createCol(regionwindlight, "horizon_i", typeof(Double));
+ createCol(regionwindlight, "haze_horizon", typeof(Double));
+ createCol(regionwindlight, "blue_density_r", typeof(Double));
+ createCol(regionwindlight, "blue_density_g", typeof(Double));
+ createCol(regionwindlight, "blue_density_b", typeof(Double));
+ createCol(regionwindlight, "blue_density_i", typeof(Double));
+ createCol(regionwindlight, "haze_density", typeof(Double));
+ createCol(regionwindlight, "density_multiplier", typeof(Double));
+ createCol(regionwindlight, "distance_multiplier", typeof(Double));
+ createCol(regionwindlight, "max_altitude", typeof(Int32));
+ createCol(regionwindlight, "sun_moon_color_r", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_g", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_b", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_i", typeof(Double));
+ createCol(regionwindlight, "sun_moon_position", typeof(Double));
+ createCol(regionwindlight, "ambient_r", typeof(Double));
+ createCol(regionwindlight, "ambient_g", typeof(Double));
+ createCol(regionwindlight, "ambient_b", typeof(Double));
+ createCol(regionwindlight, "ambient_i", typeof(Double));
+ createCol(regionwindlight, "east_angle", typeof(Double));
+ createCol(regionwindlight, "sun_glow_focus", typeof(Double));
+ createCol(regionwindlight, "sun_glow_size", typeof(Double));
+ createCol(regionwindlight, "scene_gamma", typeof(Double));
+ createCol(regionwindlight, "star_brightness", typeof(Double));
+ createCol(regionwindlight, "cloud_color_r", typeof(Double));
+ createCol(regionwindlight, "cloud_color_g", typeof(Double));
+ createCol(regionwindlight, "cloud_color_b", typeof(Double));
+ createCol(regionwindlight, "cloud_color_i", typeof(Double));
+ createCol(regionwindlight, "cloud_x", typeof(Double));
+ createCol(regionwindlight, "cloud_y", typeof(Double));
+ createCol(regionwindlight, "cloud_density", typeof(Double));
+ createCol(regionwindlight, "cloud_coverage", typeof(Double));
+ createCol(regionwindlight, "cloud_scale", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_x", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_y", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_density", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_x", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_x_lock", typeof(Int32));
+ createCol(regionwindlight, "cloud_scroll_y", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_y_lock", typeof(Int32));
+ createCol(regionwindlight, "draw_classic_clouds", typeof(Int32));
+
+ regionwindlight.PrimaryKey = new DataColumn[] { regionwindlight.Columns["region_id"] };
+ return regionwindlight;
+ }
+
/***********************************************************************
*
* Convert between ADO.NET <=> OpenSim Objects
@@ -1229,26 +1383,26 @@ namespace OpenSim.Data.SQLite
// back out. Not enough time to figure it out yet.
SceneObjectPart prim = new SceneObjectPart();
- prim.UUID = new UUID((String) row["UUID"]);
+ prim.UUID = new UUID((String)row["UUID"]);
// explicit conversion of integers is required, which sort
// of sucks. No idea if there is a shortcut here or not.
prim.CreationDate = Convert.ToInt32(row["CreationDate"]);
prim.Name = row["Name"] == DBNull.Value ? string.Empty : (string)row["Name"];
// various text fields
- prim.Text = (String) row["Text"];
+ prim.Text = (String)row["Text"];
prim.Color = Color.FromArgb(Convert.ToInt32(row["ColorA"]),
Convert.ToInt32(row["ColorR"]),
Convert.ToInt32(row["ColorG"]),
Convert.ToInt32(row["ColorB"]));
- prim.Description = (String) row["Description"];
- prim.SitName = (String) row["SitName"];
- prim.TouchName = (String) row["TouchName"];
+ prim.Description = (String)row["Description"];
+ prim.SitName = (String)row["SitName"];
+ prim.TouchName = (String)row["TouchName"];
// permissions
prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]);
- prim.CreatorIdentification = (String) row["CreatorID"];
- prim.OwnerID = new UUID((String) row["OwnerID"]);
- prim.GroupID = new UUID((String) row["GroupID"]);
- prim.LastOwnerID = new UUID((String) row["LastOwnerID"]);
+ prim.CreatorIdentification = (String)row["CreatorID"];
+ prim.OwnerID = new UUID((String)row["OwnerID"]);
+ prim.GroupID = new UUID((String)row["GroupID"]);
+ prim.LastOwnerID = new UUID((String)row["LastOwnerID"]);
prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]);
prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]);
prim.GroupMask = Convert.ToUInt32(row["GroupMask"]);
@@ -1360,7 +1514,7 @@ namespace OpenSim.Data.SQLite
if (!(row["MediaURL"] is System.DBNull))
{
- //m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType());
+// m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType());
prim.MediaUrl = (string)row["MediaURL"];
}
@@ -1376,28 +1530,28 @@ namespace OpenSim.Data.SQLite
{
TaskInventoryItem taskItem = new TaskInventoryItem();
- taskItem.ItemID = new UUID((String)row["itemID"]);
- taskItem.ParentPartID = new UUID((String)row["primID"]);
- taskItem.AssetID = new UUID((String)row["assetID"]);
- taskItem.ParentID = new UUID((String)row["parentFolderID"]);
+ taskItem.ItemID = new UUID((String)row["itemID"]);
+ taskItem.ParentPartID = new UUID((String)row["primID"]);
+ taskItem.AssetID = new UUID((String)row["assetID"]);
+ taskItem.ParentID = new UUID((String)row["parentFolderID"]);
- taskItem.InvType = Convert.ToInt32(row["invType"]);
- taskItem.Type = Convert.ToInt32(row["assetType"]);
+ taskItem.InvType = Convert.ToInt32(row["invType"]);
+ taskItem.Type = Convert.ToInt32(row["assetType"]);
- taskItem.Name = (String)row["name"];
- taskItem.Description = (String)row["description"];
- taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
+ taskItem.Name = (String)row["name"];
+ taskItem.Description = (String)row["description"];
+ taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
taskItem.CreatorIdentification = (String)row["creatorID"];
- taskItem.OwnerID = new UUID((String)row["ownerID"]);
- taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]);
- taskItem.GroupID = new UUID((String)row["groupID"]);
+ taskItem.OwnerID = new UUID((String)row["ownerID"]);
+ taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]);
+ taskItem.GroupID = new UUID((String)row["groupID"]);
taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]);
- taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]);
- taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]);
- taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]);
- taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]);
- taskItem.Flags = Convert.ToUInt32(row["flags"]);
+ taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]);
+ taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]);
+ taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]);
+ taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]);
+ taskItem.Flags = Convert.ToUInt32(row["flags"]);
return taskItem;
}
@@ -1411,35 +1565,35 @@ namespace OpenSim.Data.SQLite
{
LandData newData = new LandData();
- newData.GlobalID = new UUID((String) row["UUID"]);
+ newData.GlobalID = new UUID((String)row["UUID"]);
newData.LocalID = Convert.ToInt32(row["LocalLandID"]);
// Bitmap is a byte[512]
- newData.Bitmap = (Byte[]) row["Bitmap"];
+ newData.Bitmap = (Byte[])row["Bitmap"];
- newData.Name = (String) row["Name"];
- newData.Description = (String) row["Desc"];
- newData.OwnerID = (UUID)(String) row["OwnerUUID"];
- newData.IsGroupOwned = (Boolean) row["IsGroupOwned"];
+ newData.Name = (String)row["Name"];
+ newData.Description = (String)row["Desc"];
+ newData.OwnerID = (UUID)(String)row["OwnerUUID"];
+ newData.IsGroupOwned = (Boolean)row["IsGroupOwned"];
newData.Area = Convert.ToInt32(row["Area"]);
newData.AuctionID = Convert.ToUInt32(row["AuctionID"]); //Unemplemented
- newData.Category = (ParcelCategory) Convert.ToInt32(row["Category"]);
- //Enum OpenMetaverse.Parcel.ParcelCategory
+ newData.Category = (ParcelCategory)Convert.ToInt32(row["Category"]);
+ //Enum OpenMetaverse.Parcel.ParcelCategory
newData.ClaimDate = Convert.ToInt32(row["ClaimDate"]);
newData.ClaimPrice = Convert.ToInt32(row["ClaimPrice"]);
- newData.GroupID = new UUID((String) row["GroupUUID"]);
+ newData.GroupID = new UUID((String)row["GroupUUID"]);
newData.SalePrice = Convert.ToInt32(row["SalePrice"]);
- newData.Status = (ParcelStatus) Convert.ToInt32(row["LandStatus"]);
- //Enum. OpenMetaverse.Parcel.ParcelStatus
+ newData.Status = (ParcelStatus)Convert.ToInt32(row["LandStatus"]);
+ //Enum. OpenMetaverse.Parcel.ParcelStatus
newData.Flags = Convert.ToUInt32(row["LandFlags"]);
- newData.LandingType = (Byte) row["LandingType"];
- newData.MediaAutoScale = (Byte) row["MediaAutoScale"];
- newData.MediaID = new UUID((String) row["MediaTextureUUID"]);
- newData.MediaURL = (String) row["MediaURL"];
- newData.MusicURL = (String) row["MusicURL"];
+ newData.LandingType = (Byte)row["LandingType"];
+ newData.MediaAutoScale = (Byte)row["MediaAutoScale"];
+ newData.MediaID = new UUID((String)row["MediaTextureUUID"]);
+ newData.MediaURL = (String)row["MediaURL"];
+ newData.MusicURL = (String)row["MusicURL"];
newData.PassHours = Convert.ToSingle(row["PassHours"]);
newData.PassPrice = Convert.ToInt32(row["PassPrice"]);
- newData.SnapshotID = (UUID)(String) row["SnapshotUUID"];
+ newData.SnapshotID = (UUID)(String)row["SnapshotUUID"];
try
{
@@ -1471,7 +1625,7 @@ namespace OpenSim.Data.SQLite
{
RegionSettings newSettings = new RegionSettings();
- newSettings.RegionUUID = new UUID((string) row["regionUUID"]);
+ newSettings.RegionUUID = new UUID((string)row["regionUUID"]);
newSettings.BlockTerraform = Convert.ToBoolean(row["block_terraform"]);
newSettings.AllowDamage = Convert.ToBoolean(row["allow_damage"]);
newSettings.BlockFly = Convert.ToBoolean(row["block_fly"]);
@@ -1485,10 +1639,10 @@ namespace OpenSim.Data.SQLite
newSettings.DisableScripts = Convert.ToBoolean(row["disable_scripts"]);
newSettings.DisableCollisions = Convert.ToBoolean(row["disable_collisions"]);
newSettings.DisablePhysics = Convert.ToBoolean(row["disable_physics"]);
- newSettings.TerrainTexture1 = new UUID((String) row["terrain_texture_1"]);
- newSettings.TerrainTexture2 = new UUID((String) row["terrain_texture_2"]);
- newSettings.TerrainTexture3 = new UUID((String) row["terrain_texture_3"]);
- newSettings.TerrainTexture4 = new UUID((String) row["terrain_texture_4"]);
+ newSettings.TerrainTexture1 = new UUID((String)row["terrain_texture_1"]);
+ newSettings.TerrainTexture2 = new UUID((String)row["terrain_texture_2"]);
+ newSettings.TerrainTexture3 = new UUID((String)row["terrain_texture_3"]);
+ newSettings.TerrainTexture4 = new UUID((String)row["terrain_texture_4"]);
newSettings.Elevation1NW = Convert.ToDouble(row["elevation_1_nw"]);
newSettings.Elevation2NW = Convert.ToDouble(row["elevation_2_nw"]);
newSettings.Elevation1NE = Convert.ToDouble(row["elevation_1_ne"]);
@@ -1502,20 +1656,97 @@ namespace OpenSim.Data.SQLite
newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]);
newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]);
newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]);
- newSettings.SunVector = new Vector3 (
+ newSettings.SunVector = new Vector3(
Convert.ToSingle(row["sunvectorx"]),
Convert.ToSingle(row["sunvectory"]),
Convert.ToSingle(row["sunvectorz"])
);
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
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"]);
return newSettings;
}
+ ///
+ /// Build a windlight entry from the persisted data.
+ ///
+ ///
+ /// RegionLightShareData
+ private RegionLightShareData buildRegionWindlight(DataRow row)
+ {
+ RegionLightShareData windlight = new RegionLightShareData();
+
+ windlight.regionID = new UUID((string)row["region_id"]);
+ windlight.waterColor.X = Convert.ToSingle(row["water_color_r"]);
+ windlight.waterColor.Y = Convert.ToSingle(row["water_color_g"]);
+ windlight.waterColor.Z = Convert.ToSingle(row["water_color_b"]);
+ //windlight.waterColor.W = Convert.ToSingle(row["water_color_i"]); //not implemented
+ windlight.waterFogDensityExponent = Convert.ToSingle(row["water_fog_density_exponent"]);
+ windlight.underwaterFogModifier = Convert.ToSingle(row["underwater_fog_modifier"]);
+ windlight.reflectionWaveletScale.X = Convert.ToSingle(row["reflection_wavelet_scale_1"]);
+ windlight.reflectionWaveletScale.Y = Convert.ToSingle(row["reflection_wavelet_scale_2"]);
+ windlight.reflectionWaveletScale.Z = Convert.ToSingle(row["reflection_wavelet_scale_3"]);
+ windlight.fresnelScale = Convert.ToSingle(row["fresnel_scale"]);
+ windlight.fresnelOffset = Convert.ToSingle(row["fresnel_offset"]);
+ windlight.refractScaleAbove = Convert.ToSingle(row["refract_scale_above"]);
+ windlight.refractScaleBelow = Convert.ToSingle(row["refract_scale_below"]);
+ windlight.blurMultiplier = Convert.ToSingle(row["blur_multiplier"]);
+ windlight.bigWaveDirection.X = Convert.ToSingle(row["big_wave_direction_x"]);
+ windlight.bigWaveDirection.Y = Convert.ToSingle(row["big_wave_direction_y"]);
+ windlight.littleWaveDirection.X = Convert.ToSingle(row["little_wave_direction_x"]);
+ windlight.littleWaveDirection.Y = Convert.ToSingle(row["little_wave_direction_y"]);
+ windlight.normalMapTexture = new UUID((string)row["normal_map_texture"]);
+ windlight.horizon.X = Convert.ToSingle(row["horizon_r"]);
+ windlight.horizon.Y = Convert.ToSingle(row["horizon_g"]);
+ windlight.horizon.Z = Convert.ToSingle(row["horizon_b"]);
+ windlight.horizon.W = Convert.ToSingle(row["horizon_i"]);
+ windlight.hazeHorizon = Convert.ToSingle(row["haze_horizon"]);
+ windlight.blueDensity.X = Convert.ToSingle(row["blue_density_r"]);
+ windlight.blueDensity.Y = Convert.ToSingle(row["blue_density_g"]);
+ windlight.blueDensity.Z = Convert.ToSingle(row["blue_density_b"]);
+ windlight.blueDensity.W = Convert.ToSingle(row["blue_density_i"]);
+ windlight.hazeDensity = Convert.ToSingle(row["haze_density"]);
+ windlight.densityMultiplier = Convert.ToSingle(row["density_multiplier"]);
+ windlight.distanceMultiplier = Convert.ToSingle(row["distance_multiplier"]);
+ windlight.maxAltitude = Convert.ToUInt16(row["max_altitude"]);
+ windlight.sunMoonColor.X = Convert.ToSingle(row["sun_moon_color_r"]);
+ windlight.sunMoonColor.Y = Convert.ToSingle(row["sun_moon_color_g"]);
+ windlight.sunMoonColor.Z = Convert.ToSingle(row["sun_moon_color_b"]);
+ windlight.sunMoonColor.W = Convert.ToSingle(row["sun_moon_color_i"]);
+ windlight.sunMoonPosition = Convert.ToSingle(row["sun_moon_position"]);
+ windlight.ambient.X = Convert.ToSingle(row["ambient_r"]);
+ windlight.ambient.Y = Convert.ToSingle(row["ambient_g"]);
+ windlight.ambient.Z = Convert.ToSingle(row["ambient_b"]);
+ windlight.ambient.W = Convert.ToSingle(row["ambient_i"]);
+ windlight.eastAngle = Convert.ToSingle(row["east_angle"]);
+ windlight.sunGlowFocus = Convert.ToSingle(row["sun_glow_focus"]);
+ windlight.sunGlowSize = Convert.ToSingle(row["sun_glow_size"]);
+ windlight.sceneGamma = Convert.ToSingle(row["scene_gamma"]);
+ windlight.starBrightness = Convert.ToSingle(row["star_brightness"]);
+ windlight.cloudColor.X = Convert.ToSingle(row["cloud_color_r"]);
+ windlight.cloudColor.Y = Convert.ToSingle(row["cloud_color_g"]);
+ windlight.cloudColor.Z = Convert.ToSingle(row["cloud_color_b"]);
+ windlight.cloudColor.W = Convert.ToSingle(row["cloud_color_i"]);
+ windlight.cloudXYDensity.X = Convert.ToSingle(row["cloud_x"]);
+ windlight.cloudXYDensity.Y = Convert.ToSingle(row["cloud_y"]);
+ windlight.cloudXYDensity.Z = Convert.ToSingle(row["cloud_density"]);
+ windlight.cloudCoverage = Convert.ToSingle(row["cloud_coverage"]);
+ windlight.cloudScale = Convert.ToSingle(row["cloud_scale"]);
+ windlight.cloudDetailXYDensity.X = Convert.ToSingle(row["cloud_detail_x"]);
+ windlight.cloudDetailXYDensity.Y = Convert.ToSingle(row["cloud_detail_y"]);
+ windlight.cloudDetailXYDensity.Z = Convert.ToSingle(row["cloud_detail_density"]);
+ windlight.cloudScrollX = Convert.ToSingle(row["cloud_scroll_x"]);
+ windlight.cloudScrollXLock = Convert.ToBoolean(row["cloud_scroll_x_lock"]);
+ windlight.cloudScrollY = Convert.ToSingle(row["cloud_scroll_y"]);
+ windlight.cloudScrollYLock = Convert.ToBoolean(row["cloud_scroll_y_lock"]);
+ windlight.drawClassicClouds = Convert.ToBoolean(row["draw_classic_clouds"]);
+
+ return windlight;
+ }
+
///
/// Build a land access entry from the persisted data.
///
@@ -1524,8 +1755,8 @@ namespace OpenSim.Data.SQLite
private static LandAccessEntry buildLandAccessData(DataRow row)
{
LandAccessEntry entry = new LandAccessEntry();
- entry.AgentID = new UUID((string) row["AccessUUID"]);
- entry.Flags = (AccessList) row["Flags"];
+ entry.AgentID = new UUID((string)row["AccessUUID"]);
+ entry.Flags = (AccessList)row["Flags"];
entry.Expires = 0;
return entry;
}
@@ -1537,7 +1768,7 @@ namespace OpenSim.Data.SQLite
///
private static Array serializeTerrain(double[,] val)
{
- MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double));
+ MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) * sizeof(double));
BinaryWriter bw = new BinaryWriter(str);
// TODO: COMPATIBILITY - Add byte-order conversions
@@ -1548,21 +1779,21 @@ namespace OpenSim.Data.SQLite
return str.ToArray();
}
-// private void fillTerrainRow(DataRow row, UUID regionUUID, int rev, double[,] val)
-// {
-// row["RegionUUID"] = regionUUID;
-// row["Revision"] = rev;
+ // private void fillTerrainRow(DataRow row, UUID regionUUID, int rev, double[,] val)
+ // {
+ // row["RegionUUID"] = regionUUID;
+ // row["Revision"] = rev;
// MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize)*sizeof (double));
-// BinaryWriter bw = new BinaryWriter(str);
+ // BinaryWriter bw = new BinaryWriter(str);
-// // TODO: COMPATIBILITY - Add byte-order conversions
+ // // TODO: COMPATIBILITY - Add byte-order conversions
// for (int x = 0; x < (int)Constants.RegionSize; x++)
// for (int y = 0; y < (int)Constants.RegionSize; y++)
-// bw.Write(val[x, y]);
+ // bw.Write(val[x, y]);
-// row["Heightfield"] = str.ToArray();
-// }
+ // row["Heightfield"] = str.ToArray();
+ // }
///
///
@@ -1839,6 +2070,79 @@ namespace OpenSim.Data.SQLite
row["map_tile_ID"] = settings.TerrainImageID.ToString();
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ private static void fillRegionWindlightRow(DataRow row, RegionLightShareData windlight)
+ {
+ row["region_id"] = windlight.regionID.ToString();
+ row["water_color_r"] = windlight.waterColor.X;
+ row["water_color_g"] = windlight.waterColor.Y;
+ row["water_color_b"] = windlight.waterColor.Z;
+ row["water_color_i"] = 1; //windlight.waterColor.W; //not implemented
+ row["water_fog_density_exponent"] = windlight.waterFogDensityExponent;
+ row["underwater_fog_modifier"] = windlight.underwaterFogModifier;
+ row["reflection_wavelet_scale_1"] = windlight.reflectionWaveletScale.X;
+ row["reflection_wavelet_scale_2"] = windlight.reflectionWaveletScale.Y;
+ row["reflection_wavelet_scale_3"] = windlight.reflectionWaveletScale.Z;
+ row["fresnel_scale"] = windlight.fresnelScale;
+ row["fresnel_offset"] = windlight.fresnelOffset;
+ row["refract_scale_above"] = windlight.refractScaleAbove;
+ row["refract_scale_below"] = windlight.refractScaleBelow;
+ row["blur_multiplier"] = windlight.blurMultiplier;
+ row["big_wave_direction_x"] = windlight.bigWaveDirection.X;
+ row["big_wave_direction_y"] = windlight.bigWaveDirection.Y;
+ row["little_wave_direction_x"] = windlight.littleWaveDirection.X;
+ row["little_wave_direction_y"] = windlight.littleWaveDirection.Y;
+ row["normal_map_texture"] = windlight.normalMapTexture.ToString();
+ row["horizon_r"] = windlight.horizon.X;
+ row["horizon_g"] = windlight.horizon.Y;
+ row["horizon_b"] = windlight.horizon.Z;
+ row["horizon_i"] = windlight.horizon.W;
+ row["haze_horizon"] = windlight.hazeHorizon;
+ row["blue_density_r"] = windlight.blueDensity.X;
+ row["blue_density_g"] = windlight.blueDensity.Y;
+ row["blue_density_b"] = windlight.blueDensity.Z;
+ row["blue_density_i"] = windlight.blueDensity.W;
+ row["haze_density"] = windlight.hazeDensity;
+ row["density_multiplier"] = windlight.densityMultiplier;
+ row["distance_multiplier"] = windlight.distanceMultiplier;
+ row["max_altitude"] = windlight.maxAltitude;
+ row["sun_moon_color_r"] = windlight.sunMoonColor.X;
+ row["sun_moon_color_g"] = windlight.sunMoonColor.Y;
+ row["sun_moon_color_b"] = windlight.sunMoonColor.Z;
+ row["sun_moon_color_i"] = windlight.sunMoonColor.W;
+ row["sun_moon_position"] = windlight.sunMoonPosition;
+ row["ambient_r"] = windlight.ambient.X;
+ row["ambient_g"] = windlight.ambient.Y;
+ row["ambient_b"] = windlight.ambient.Z;
+ row["ambient_i"] = windlight.ambient.W;
+ row["east_angle"] = windlight.eastAngle;
+ row["sun_glow_focus"] = windlight.sunGlowFocus;
+ row["sun_glow_size"] = windlight.sunGlowSize;
+ row["scene_gamma"] = windlight.sceneGamma;
+ row["star_brightness"] = windlight.starBrightness;
+ row["cloud_color_r"] = windlight.cloudColor.X;
+ row["cloud_color_g"] = windlight.cloudColor.Y;
+ row["cloud_color_b"] = windlight.cloudColor.Z;
+ row["cloud_color_i"] = windlight.cloudColor.W;
+ row["cloud_x"] = windlight.cloudXYDensity.X;
+ row["cloud_y"] = windlight.cloudXYDensity.Y;
+ row["cloud_density"] = windlight.cloudXYDensity.Z;
+ row["cloud_coverage"] = windlight.cloudCoverage;
+ row["cloud_scale"] = windlight.cloudScale;
+ row["cloud_detail_x"] = windlight.cloudDetailXYDensity.X;
+ row["cloud_detail_y"] = windlight.cloudDetailXYDensity.Y;
+ row["cloud_detail_density"] = windlight.cloudDetailXYDensity.Z;
+ row["cloud_scroll_x"] = windlight.cloudScrollX;
+ row["cloud_scroll_x_lock"] = windlight.cloudScrollXLock;
+ row["cloud_scroll_y"] = windlight.cloudScrollY;
+ row["cloud_scroll_y_lock"] = windlight.cloudScrollYLock;
+ row["draw_classic_clouds"] = windlight.drawClassicClouds;
+ }
+
///
///
///
@@ -1878,7 +2182,7 @@ namespace OpenSim.Data.SQLite
byte[] textureEntry = (byte[])row["Texture"];
s.TextureEntry = textureEntry;
- s.ExtraParams = (byte[]) row["ExtraParams"];
+ s.ExtraParams = (byte[])row["ExtraParams"];
if (!(row["Media"] is System.DBNull))
s.Media = PrimitiveBaseShape.MediaList.FromXml((string)row["Media"]);
@@ -1986,10 +2290,10 @@ namespace OpenSim.Data.SQLite
// repalce with current inventory details
foreach (TaskInventoryItem newItem in items)
{
-// m_log.InfoFormat(
-// "[DATASTORE]: ",
-// "Adding item {0}, {1} to prim ID {2}",
-// newItem.Name, newItem.ItemID, newItem.ParentPartID);
+ // m_log.InfoFormat(
+ // "[DATASTORE]: ",
+ // "Adding item {0}, {1} to prim ID {2}",
+ // newItem.Name, newItem.ItemID, newItem.ParentPartID);
DataRow newItemRow = dbItems.NewRow();
fillItemRow(newItemRow, newItem);
@@ -2040,7 +2344,7 @@ namespace OpenSim.Data.SQLite
sql += ") values (:";
sql += String.Join(", :", cols);
sql += ")";
- //m_log.DebugFormat("[SQLITE]: Created insert command {0}", sql);
+// m_log.DebugFormat("[SQLITE]: Created insert command {0}", sql);
SqliteCommand cmd = new SqliteCommand(sql);
// this provides the binding for all our parameters, so
@@ -2192,7 +2496,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from prims where UUID = :UUID");
- delete.Parameters.Add(createSqliteParameter("UUID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("UUID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2211,7 +2515,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from primitems where itemID = :itemID");
- delete.Parameters.Add(createSqliteParameter("itemID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("itemID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2274,6 +2578,19 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void setupRegionWindlightCommands(SqliteDataAdapter da, SqliteConnection conn)
+ {
+ da.InsertCommand = createInsertCommand("regionwindlight", ds.Tables["regionwindlight"]);
+ da.InsertCommand.Connection = conn;
+ da.UpdateCommand = createUpdateCommand("regionwindlight", "region_id=:region_id", ds.Tables["regionwindlight"]);
+ da.UpdateCommand.Connection = conn;
+ }
+
///
///
///
@@ -2288,7 +2605,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from primshapes where UUID = :UUID");
- delete.Parameters.Add(createSqliteParameter("UUID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("UUID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2306,27 +2623,27 @@ namespace OpenSim.Data.SQLite
///
private static DbType dbtypeFromType(Type type)
{
- if (type == typeof (String))
+ if (type == typeof(String))
{
return DbType.String;
}
- else if (type == typeof (Int32))
+ else if (type == typeof(Int32))
{
return DbType.Int32;
}
- else if (type == typeof (Double))
+ else if (type == typeof(Double))
{
return DbType.Double;
}
- else if (type == typeof (Byte))
+ else if (type == typeof(Byte))
{
return DbType.Byte;
}
- else if (type == typeof (Double))
+ else if (type == typeof(Double))
{
return DbType.Double;
}
- else if (type == typeof (Byte[]))
+ else if (type == typeof(Byte[]))
{
return DbType.Binary;
}
@@ -2338,32 +2655,32 @@ namespace OpenSim.Data.SQLite
static void PrintDataSet(DataSet ds)
{
- // Print out any name and extended properties.
- Console.WriteLine("DataSet is named: {0}", ds.DataSetName);
- foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties)
- {
- Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
- }
- Console.WriteLine();
- foreach (DataTable dt in ds.Tables)
- {
- Console.WriteLine("=> {0} Table:", dt.TableName);
- // Print out the column names.
- for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ // Print out any name and extended properties.
+ Console.WriteLine("DataSet is named: {0}", ds.DataSetName);
+ foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties)
{
- Console.Write(dt.Columns[curCol].ColumnName + "\t");
+ Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
}
- Console.WriteLine("\n----------------------------------");
- // Print the DataTable.
- for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
+ Console.WriteLine();
+ foreach (DataTable dt in ds.Tables)
{
- for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
- {
- Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
- }
- Console.WriteLine();
+ Console.WriteLine("=> {0} Table:", dt.TableName);
+ // Print out the column names.
+ for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ {
+ Console.Write(dt.Columns[curCol].ColumnName + "\t");
+ }
+ Console.WriteLine("\n----------------------------------");
+ // Print the DataTable.
+ for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
+ {
+ for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ {
+ Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
+ }
+ Console.WriteLine();
+ }
}
- }
}
}
diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs
index a0d3541b32..0d6288b5a3 100644
--- a/OpenSim/Framework/Console/CommandConsole.cs
+++ b/OpenSim/Framework/Console/CommandConsole.cs
@@ -31,6 +31,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Text;
+using System.Text.RegularExpressions;
using System.Threading;
using log4net;
using OpenSim.Framework;
@@ -531,6 +532,11 @@ namespace OpenSim.Framework.Console
public class Parser
{
+ // If an unquoted portion ends with an element matching this regex
+ // and the next element contains a space, then we have stripped
+ // embedded quotes that should not have been stripped
+ private static Regex optionRegex = new Regex("^--[a-zA-Z0-9-]+=$");
+
public static string[] Parse(string text)
{
List result = new List();
@@ -544,10 +550,38 @@ namespace OpenSim.Framework.Console
if (index % 2 == 0)
{
string[] words = unquoted[index].Split(new char[] {' '});
+
+ bool option = false;
foreach (string w in words)
{
if (w != String.Empty)
+ {
+ if (optionRegex.Match(w) == Match.Empty)
+ option = false;
+ else
+ option = true;
result.Add(w);
+ }
+ }
+ // The last item matched the regex, put the quotes back
+ if (option)
+ {
+ // If the line ended with it, don't do anything
+ if (index < (unquoted.Length - 1))
+ {
+ // Get and remove the option name
+ string optionText = result[result.Count - 1];
+ result.RemoveAt(result.Count - 1);
+
+ // Add the quoted value back
+ optionText += "\"" + unquoted[index + 1] + "\"";
+
+ // Push the result into our return array
+ result.Add(optionText);
+
+ // Skip the already used value
+ index++;
+ }
}
}
else
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 661b457146..5ba3863529 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -625,7 +625,6 @@ namespace OpenSim.Framework
foreach (String s in allKeys)
{
- string val = config.GetString(s);
SetOtherSetting(s, config.GetString(s));
}
}
diff --git a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
index a392af66aa..c56f21367f 100644
--- a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
+++ b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
@@ -49,15 +49,16 @@ namespace OpenSim.Framework.Serialization.External
///
/// /param>
///
- public static void ExecuteReadProcessors(
+ /// true on successful, false if there were any processing failures
+ public static bool ExecuteReadProcessors(
NodeType nodeToFill, Dictionary> processors, XmlTextReader xtr)
{
- ExecuteReadProcessors(
+ return ExecuteReadProcessors(
nodeToFill,
processors,
xtr,
(o, name, e)
- => m_log.ErrorFormat(
+ => m_log.DebugFormat(
"[ExternalRepresentationUtils]: Exception while parsing element {0}, continuing. Exception {1}{2}",
name, e.Message, e.StackTrace));
}
@@ -71,12 +72,15 @@ namespace OpenSim.Framework.Serialization.External
///
/// Action to take if there is a parsing problem. This will usually just be to log the exception
///
- public static void ExecuteReadProcessors(
+ /// true on successful, false if there were any processing failures
+ public static bool ExecuteReadProcessors(
NodeType nodeToFill,
Dictionary> processors,
XmlTextReader xtr,
Action parseExceptionAction)
{
+ bool errors = false;
+
string nodeName = string.Empty;
while (xtr.NodeType != XmlNodeType.EndElement)
{
@@ -95,6 +99,7 @@ namespace OpenSim.Framework.Serialization.External
}
catch (Exception e)
{
+ errors = true;
parseExceptionAction(nodeToFill, nodeName, e);
if (xtr.NodeType == XmlNodeType.EndElement)
@@ -107,6 +112,8 @@ namespace OpenSim.Framework.Serialization.External
xtr.ReadOuterXml(); // ignore
}
}
+
+ return errors;
}
///
@@ -140,6 +147,7 @@ namespace OpenSim.Framework.Serialization.External
UUID.TryParse(node.InnerText, out uuid);
creator = userService.GetUserAccount(scopeID, uuid);
}
+
if (node.Name == "CreatorData" && node.InnerText != null && node.InnerText != string.Empty)
hasCreatorData = true;
@@ -163,7 +171,6 @@ namespace OpenSim.Framework.Serialization.External
doc.Save(wr);
return wr.ToString();
}
-
}
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index ed92b2d2f4..4b0b13c3f4 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1664,13 +1664,14 @@ namespace OpenSim.Framework
///
public static void PrintCallStack()
{
- StackTrace stackTrace = new StackTrace(); // get call stack
+ StackTrace stackTrace = new StackTrace(true); // get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
// write call stack method names
foreach (StackFrame stackFrame in stackFrames)
{
- m_log.Debug(stackFrame.GetMethod().DeclaringType + "." + stackFrame.GetMethod().Name); // write method name
+ MethodBase mb = stackFrame.GetMethod();
+ m_log.DebugFormat("{0}.{1}:{2}", mb.DeclaringType, mb.Name, stackFrame.GetFileLineNumber()); // write method name
}
}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index cf0c28b8a8..be699db97f 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -422,7 +422,7 @@ namespace OpenSim.Region.ClientStack.Linden
string assetType)
{
m_log.DebugFormat(
- "Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
+ "[BUNCH OF CAPS]: Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
assetID, inventoryItem, inventoryType, assetType);
sbyte assType = 0;
@@ -625,7 +625,12 @@ namespace OpenSim.Region.ClientStack.Linden
item.AssetType = assType;
item.InvType = inType;
item.Folder = parentFolder;
- item.CurrentPermissions = (uint)PermissionMask.All;
+
+ // If we set PermissionMask.All then when we rez the item the next permissions will replace the current
+ // (owner) permissions. This becomes a problem if next permissions are changed.
+ item.CurrentPermissions
+ = (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
+
item.BasePermissions = (uint)PermissionMask.All;
item.EveryOnePermissions = 0;
item.NextPermissions = (uint)PermissionMask.All;
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs
index aed03b39c1..1117f2a8a6 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs
@@ -50,8 +50,7 @@ namespace OpenSim.Region.ClientStack.Linden
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
public class NewFileAgentInventoryVariablePriceModule : INonSharedRegionModule
{
-// private static readonly ILog m_log =
-// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene;
// private IAssetService m_assetService;
@@ -210,6 +209,9 @@ namespace OpenSim.Region.ClientStack.Linden
UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
string assetType,UUID AgentID)
{
+// m_log.DebugFormat(
+// "[NEW FILE AGENT INVENTORY VARIABLE PRICE MODULE]: Upload complete for {0}", inventoryItem);
+
sbyte assType = 0;
sbyte inType = 0;
@@ -259,13 +261,13 @@ namespace OpenSim.Region.ClientStack.Linden
item.AssetType = assType;
item.InvType = inType;
item.Folder = parentFolder;
- item.CurrentPermissions = (uint)PermissionMask.All;
+ item.CurrentPermissions
+ = (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
item.BasePermissions = (uint)PermissionMask.All;
item.EveryOnePermissions = 0;
item.NextPermissions = (uint)PermissionMask.All;
item.CreationDate = Util.UnixTimeSinceEpoch();
m_scene.AddInventoryItem(item);
-
}
}
}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
index e4bacd4df2..7a3d97e5d3 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
@@ -339,7 +339,7 @@ namespace OpenSim.Region.ClientStack.Linden
m_scene.AddSceneObject(grp);
grp.AbsolutePosition = obj.Position;
}
-
+
allparts[i] = grp;
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 8273c6f7dd..d98ff68d39 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -5107,7 +5107,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage, false);
AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship);
AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship);
- AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFrendship);
+ AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFriendship);
AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject);
AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject);
AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand);
@@ -5827,7 +5827,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return true;
}
- private bool HandlerTerminateFrendship(IClientAPI sender, Packet Pack)
+ private bool HandlerTerminateFriendship(IClientAPI sender, Packet Pack)
{
TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack;
@@ -5842,13 +5842,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
UUID listOwnerAgentID = tfriendpack.AgentData.AgentID;
UUID exFriendID = tfriendpack.ExBlock.OtherID;
-
- FriendshipTermination handlerTerminateFriendship = OnTerminateFriendship;
- if (handlerTerminateFriendship != null)
+ FriendshipTermination TerminateFriendshipHandler = OnTerminateFriendship;
+ if (TerminateFriendshipHandler != null)
{
- handlerTerminateFriendship(this, listOwnerAgentID, exFriendID);
+ TerminateFriendshipHandler(this, listOwnerAgentID, exFriendID);
+ return true;
}
- return true;
+ return false;
}
private bool HandleFindAgent(IClientAPI client, Packet Packet)
@@ -7625,6 +7625,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
}
+ else
+ if (transfer.TransferInfo.SourceType == (int)SourceType.SimEstate)
+ {
+ //TransferRequestPacket does not include covenant uuid?
+ //get scene covenant uuid
+ taskID = m_scene.RegionInfo.RegionSettings.Covenant;
+ }
MakeAssetRequest(transfer, taskID);
@@ -11985,6 +11992,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
requestID = new UUID(transferRequest.TransferInfo.Params, 80);
}
+ else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimEstate)
+ {
+ requestID = taskID;
+ }
+
// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID);
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 8d503bd7e6..c7f4c20d67 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -111,6 +111,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
#region IAvatarFactoryModule
+ ///
+ ///
+ ///
+ ///
+ public void SetAppearance(IScenePresence sp, AvatarAppearance appearance)
+ {
+ SetAppearance(sp, appearance.Texture, appearance.VisualParams);
+ }
+
///
/// Set appearance data (texture asset IDs and slider settings)
///
@@ -156,14 +165,23 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
changed = sp.Appearance.SetTextureEntries(textureEntry) || changed;
// WriteBakedTexturesReport(sp, m_log.DebugFormat);
- if (!ValidateBakedTextureCache(sp))
+
+ // If bake textures are missing and this is not an NPC, request a rebake from client
+ if (!ValidateBakedTextureCache(sp) && (((ScenePresence)sp).PresenceType != PresenceType.Npc))
RequestRebake(sp, true);
// This appears to be set only in the final stage of the appearance
// update transaction. In theory, we should be able to do an immediate
// appearance send and save here.
}
-
+
+ // NPC should send to clients immediately and skip saving appearance
+ if (((ScenePresence)sp).PresenceType == PresenceType.Npc)
+ {
+ SendAppearance((ScenePresence)sp);
+ return;
+ }
+
// save only if there were changes, send no matter what (doesn't hurt to send twice)
if (changed)
QueueAppearanceSave(sp.ControllingClient.AgentId);
@@ -174,6 +192,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString());
}
+ private void SendAppearance(ScenePresence sp)
+ {
+ // Send the appearance to everyone in the scene
+ sp.SendAppearanceToAllOtherAgents();
+
+ // Send animations back to the avatar as well
+ sp.Animator.SendAnimPack();
+ }
+
public bool SendAppearance(UUID agentId)
{
// m_log.DebugFormat("[AVFACTORY]: Sending appearance for {0}", agentId);
@@ -185,12 +212,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
return false;
}
- // Send the appearance to everyone in the scene
- sp.SendAppearanceToAllOtherAgents();
-
- // Send animations back to the avatar as well
- sp.Animator.SendAnimPack();
-
+ SendAppearance(sp);
return true;
}
@@ -626,4 +648,4 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
outputAction("{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "corrupt");
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 54b422b37a..63ba3d39b8 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -546,12 +546,20 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
return null;
userID = remoteClient.AgentId;
+
+// m_log.DebugFormat(
+// "[INVENTORY ACCESS MODULE]: Target of {0} in CreateItemForObject() is {1} {2}",
+// action, remoteClient.Name, userID);
}
else
{
// All returns / deletes go to the object owner
//
userID = so.RootPart.OwnerID;
+
+// m_log.DebugFormat(
+// "[INVENTORY ACCESS MODULE]: Target of {0} in CreateItemForObject() is object owner {1}",
+// action, userID);
}
if (userID == UUID.Zero) // Can't proceed
@@ -637,11 +645,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
}
// Override and put into where it came from, if it came
- // from anywhere in inventory
+ // from anywhere in inventory and the owner is taking it back.
//
if (action == DeRezAction.Take || action == DeRezAction.TakeCopy)
{
- if (so.RootPart.FromFolderID != UUID.Zero)
+ if (so.RootPart.FromFolderID != UUID.Zero && userID == remoteClient.AgentId)
{
InventoryFolderBase f = new InventoryFolderBase(so.RootPart.FromFolderID, userID);
folder = m_Scene.InventoryService.GetFolder(f);
@@ -789,6 +797,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
{
group = objlist[i];
+// m_log.DebugFormat(
+// "[InventoryAccessModule]: Preparing to rez {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
+// group.Name, group.LocalId, group.UUID,
+// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
+// remoteClient.Name);
+
// Vector3 storedPosition = group.AbsolutePosition;
if (group.UUID == UUID.Zero)
{
@@ -854,9 +868,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
rootPart.ScheduleFullUpdate();
}
-// m_log.DebugFormat(
-// "[InventoryAccessModule]: Rezzed {0} {1} {2} for {3}",
-// group.Name, group.LocalId, group.UUID, remoteClient.Name);
+// m_log.DebugFormat(
+// "[InventoryAccessModule]: Rezzed {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
+// group.Name, group.LocalId, group.UUID,
+// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
+// remoteClient.Name);
}
if (item != null)
@@ -937,7 +953,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
}
rootPart.FromFolderID = item.Folder;
-
+
+// Console.WriteLine("rootPart.OwnedID {0}, item.Owner {1}, item.CurrentPermissions {2:X}",
+// rootPart.OwnerID, item.Owner, item.CurrentPermissions);
+
if ((rootPart.OwnerID != item.Owner) ||
(item.CurrentPermissions & 16) != 0)
{
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index cdecd2f471..f3c6a30e64 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -707,7 +707,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
// Object owners should be able to edit their own content
if (currentUser == objectOwner)
{
- permission = true;
+ // there is no way that later code can change this back to false
+ // so just return true immediately and short circuit the more
+ // expensive group checks
+ return true;
+
+ //permission = true;
}
else if (group.IsAttachment)
{
diff --git a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
index 39a760cbf4..34aca33349 100644
--- a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
@@ -35,6 +35,7 @@ namespace OpenSim.Region.Framework.Interfaces
public interface IAvatarFactoryModule
{
+ void SetAppearance(IScenePresence sp, AvatarAppearance appearance);
void SetAppearance(IScenePresence sp, Primitive.TextureEntry textureEntry, byte[] visualParams);
///
diff --git a/OpenSim/Region/Framework/Interfaces/INPCModule.cs b/OpenSim/Region/Framework/Interfaces/INPCModule.cs
index 2731291ea0..dc3ff89303 100644
--- a/OpenSim/Region/Framework/Interfaces/INPCModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/INPCModule.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Region.Framework.Interfaces
///
///
/// The avatar appearance to use for the new NPC.
- /// The UUID of the ScenePresence created.
+ /// The UUID of the ScenePresence created. UUID.Zero if there was a failure.
UUID CreateNPC(
string firstname,
string lastname,
diff --git a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
index 5dfd3e027b..f678d07805 100644
--- a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
+++ b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
@@ -148,7 +148,8 @@ namespace OpenSim.Region.Framework.Scenes
x = m_inventoryDeletes.Dequeue();
m_log.DebugFormat(
- "[ASYNC DELETER]: Sending object to user's inventory, action {1}, count {2}, {0} item(s) remaining.", left, x.action, x.objectGroups.Count);
+ "[ASYNC DELETER]: Sending object to user's inventory, action {1}, count {2}, {0} item(s) remaining.",
+ left, x.action, x.objectGroups.Count);
try
{
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 6d7559e167..5a5307c471 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -347,6 +347,12 @@ namespace OpenSim.Region.Framework.Scenes
{
item.Name = itemUpd.Name;
item.Description = itemUpd.Description;
+
+// m_log.DebugFormat(
+// "[USER INVENTORY]: itemUpd {0} {1} {2} {3}, item {4} {5} {6} {7}",
+// itemUpd.NextPermissions, itemUpd.GroupPermissions, itemUpd.EveryOnePermissions, item.Flags,
+// item.NextPermissions, item.GroupPermissions, item.EveryOnePermissions, item.CurrentPermissions);
+
if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions))
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions;
@@ -355,6 +361,9 @@ namespace OpenSim.Region.Framework.Scenes
item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions;
if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions))
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
+
+// m_log.DebugFormat("[USER INVENTORY]: item.Flags {0}", item.Flags);
+
item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions;
item.GroupID = itemUpd.GroupID;
item.GroupOwned = itemUpd.GroupOwned;
@@ -2170,7 +2179,24 @@ namespace OpenSim.Region.Framework.Scenes
m_sceneGraph.DelinkObjects(parts);
}
+ ///
+ /// Link the scene objects containing the indicated parts to a root object.
+ ///
+ ///
+ /// A root prim id of the object which will be the root prim of the resulting linkset.
+ /// A list of child prims for the objects that should be linked in.
public void LinkObjects(IClientAPI client, uint parentPrimId, List childPrimIds)
+ {
+ LinkObjects(client.AgentId, parentPrimId, childPrimIds);
+ }
+
+ ///
+ /// Link the scene objects containing the indicated parts to a root object.
+ ///
+ /// The ID of the user linking.
+ /// A root prim id of the object which will be the root prim of the resulting linkset.
+ /// A list of child prims for the objects that should be linked in.
+ public void LinkObjects(UUID agentId, uint parentPrimId, List childPrimIds)
{
List owners = new List();
@@ -2183,7 +2209,7 @@ namespace OpenSim.Region.Framework.Scenes
return;
}
- if (!Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID))
+ if (!Permissions.CanLinkObject(agentId, root.ParentGroup.RootPart.UUID))
{
m_log.DebugFormat("[LINK]: Refusing link. No permissions on root prim");
return;
@@ -2199,7 +2225,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!owners.Contains(part.OwnerID))
owners.Add(part.OwnerID);
- if (Permissions.CanLinkObject(client.AgentId, part.ParentGroup.RootPart.UUID))
+ if (Permissions.CanLinkObject(agentId, part.ParentGroup.RootPart.UUID))
children.Add(part);
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 3347822fc4..4c8e2d2e6a 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3272,9 +3272,9 @@ namespace OpenSim.Region.Framework.Scenes
// Don't disable this log message - it's too helpful
m_log.DebugFormat(
- "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, teleportflags {6}, position {7})",
- RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
- agent.AgentID, agent.circuitcode, teleportFlags, agent.startpos);
+ "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags {8}, position {9})",
+ RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname,
+ agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, teleportFlags, agent.startpos);
if (LoginsDisabled)
{
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 7d801b52c1..e66678afb2 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -359,7 +359,7 @@ namespace OpenSim.Region.Framework.Scenes
m_log.ErrorFormat(
"[SCENEGRAPH]: Tried to add scene object {0} to {1} with illegal UUID of {2}",
sceneObject.Name, m_parentScene.RegionInfo.RegionName, UUID.Zero);
-
+
return false;
}
@@ -368,12 +368,12 @@ namespace OpenSim.Region.Framework.Scenes
// m_log.DebugFormat(
// "[SCENEGRAPH]: Scene graph for {0} already contains object {1} in AddSceneObject()",
// m_parentScene.RegionInfo.RegionName, sceneObject.UUID);
-
+
return false;
}
-
+
// m_log.DebugFormat(
-// "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}",
+// "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}",
// sceneObject.Name, sceneObject.UUID, sceneObject.Parts.Length, m_parentScene.RegionInfo.RegionName);
SceneObjectPart[] parts = sceneObject.Parts;
@@ -409,7 +409,7 @@ namespace OpenSim.Region.Framework.Scenes
lock (SceneObjectGroupsByFullID)
SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject;
-
+
lock (SceneObjectGroupsByFullPartID)
{
foreach (SceneObjectPart part in parts)
@@ -1662,6 +1662,10 @@ namespace OpenSim.Region.Framework.Scenes
{
SceneObjectGroup child = children[i].ParentGroup;
+ // Don't try and add a group to itself - this will only cause severe problems later on.
+ if (child == parentGroup)
+ continue;
+
// Make sure no child prim is set for sale
// So that, on delink, no prims are unwittingly
// left for sale and sold off
@@ -1684,11 +1688,13 @@ namespace OpenSim.Region.Framework.Scenes
// We need to explicitly resend the newly link prim's object properties since no other actions
// occur on link to invoke this elsewhere (such as object selection)
- parentGroup.RootPart.CreateSelected = true;
- parentGroup.TriggerScriptChangedEvent(Changed.LINK);
- parentGroup.HasGroupChanged = true;
- parentGroup.ScheduleGroupForFullUpdate();
-
+ if (childGroups.Count > 0)
+ {
+ parentGroup.RootPart.CreateSelected = true;
+ parentGroup.TriggerScriptChangedEvent(Changed.LINK);
+ parentGroup.HasGroupChanged = true;
+ parentGroup.ScheduleGroupForFullUpdate();
+ }
}
finally
{
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index f173c95ed0..a73d9b69f9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -265,6 +265,8 @@ namespace OpenSim.Region.Framework.Scenes
public void ApplyNextOwnerPermissions()
{
+// m_log.DebugFormat("[PRIM INVENTORY]: Applying next owner permissions to {0} {1}", Name, UUID);
+
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
parts[i].ApplyNextOwnerPermissions();
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 89393426b4..5b838f8377 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -567,7 +567,8 @@ namespace OpenSim.Region.Framework.Scenes
// ~SceneObjectGroup()
// {
-// m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId);
+// //m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId);
+// Console.WriteLine("Destructor called for {0}, local id {1}", Name, LocalId);
// }
#region Constructors
@@ -1960,6 +1961,10 @@ namespace OpenSim.Region.Framework.Scenes
// "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}",
// objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID);
+ // Linking to ourselves is not a valid operation.
+ if (objectGroup == this)
+ return;
+
SceneObjectPart linkPart = objectGroup.m_rootPart;
Vector3 oldGroupPosition = linkPart.GroupPosition;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 0e899ca168..b130bf70dc 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -303,6 +303,9 @@ namespace OpenSim.Region.Framework.Scenes
// ~SceneObjectPart()
// {
+// Console.WriteLine(
+// "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}",
+// Name, LocalId, ParentGroup.Name, ParentGroup.LocalId);
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}",
// Name, LocalId, ParentGroup.Name, ParentGroup.LocalId);
@@ -1501,7 +1504,7 @@ namespace OpenSim.Region.Framework.Scenes
PhysActor = null;
}
- // Basic Physics returns null.. joy joy joy.
+ // Basic Physics can also return null as well as an exception catch.
if (PhysActor != null)
{
PhysActor.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
@@ -1509,10 +1512,6 @@ namespace OpenSim.Region.Framework.Scenes
DoPhysicsPropertyUpdate(RigidBody, true);
PhysActor.SetVolumeDetect(VolumeDetectActive ? 1 : 0);
}
- else
- {
- m_log.DebugFormat("[SOP]: physics actor is null for {0} with parent {1}", UUID, this.ParentGroup.UUID);
- }
}
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 0c36dcd686..f2d19156f1 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -267,10 +267,8 @@ namespace OpenSim.Region.Framework.Scenes
///
public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource)
{
- // m_log.InfoFormat(
- // "[PRIM INVENTORY]: " +
- // "Starting script {0}, {1} in prim {2}, {3}",
- // item.Name, item.ItemID, Name, UUID);
+// m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}",
+// item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName);
if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID))
return;
@@ -299,8 +297,7 @@ namespace OpenSim.Region.Framework.Scenes
if (null == asset)
{
m_log.ErrorFormat(
- "[PRIM INVENTORY]: " +
- "Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
+ "[PRIM INVENTORY]: Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
item.Name, item.ItemID, m_part.AbsolutePosition,
m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID);
}
@@ -400,8 +397,7 @@ namespace OpenSim.Region.Framework.Scenes
CreateScriptInstance(item, startParam, postOnRez, engine, stateSource);
else
m_log.ErrorFormat(
- "[PRIM INVENTORY]: " +
- "Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
+ "[PRIM INVENTORY]: Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
itemId, m_part.Name, m_part.UUID,
m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 5c56150003..77f7b32fe3 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -291,13 +291,10 @@ namespace OpenSim.Region.Framework.Scenes
///
public PhysicsActor PhysicsActor { get; private set; }
- private byte m_movementflag;
-
- public byte MovementFlag
- {
- set { m_movementflag = value; }
- get { return m_movementflag; }
- }
+ ///
+ /// Record user movement inputs.
+ ///
+ public byte MovementFlag { get; private set; }
private bool m_updateflag;
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index ab02f92c83..0a32214661 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1470,7 +1470,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
m_SOPXmlProcessors,
reader,
(o, nodeName, e)
- => m_log.ErrorFormat(
+ => m_log.DebugFormat(
"[SceneObjectSerializer]: Exception while parsing {0} in object {1} {2}: {3}{4}",
((SceneObjectPart)o).Name, ((SceneObjectPart)o).UUID, nodeName, e.Message, e.StackTrace));
@@ -1535,14 +1535,18 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
reader.ReadStartElement(name, String.Empty); // Shape
- ExternalRepresentationUtils.ExecuteReadProcessors(
+ errors = ExternalRepresentationUtils.ExecuteReadProcessors(
shape,
m_ShapeXmlProcessors,
reader,
(o, nodeName, e)
- => m_log.ErrorFormat(
- "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
- nodeName, e.Message, e.StackTrace));
+ =>
+ {
+ m_log.DebugFormat(
+ "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
+ nodeName, e.Message, e.StackTrace);
+ }
+ );
reader.ReadEndElement(); // Shape
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs
index 80f198d2d6..7737d8ea83 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs
@@ -27,6 +27,7 @@
using System;
using System.Reflection;
+using System.Threading;
using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
@@ -43,6 +44,42 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[TestFixture]
public class SceneObjectBasicTests
{
+// [TearDown]
+// public void TearDown()
+// {
+// Console.WriteLine("TearDown");
+// GC.Collect();
+// Thread.Sleep(3000);
+// }
+
+// public class GcNotify
+// {
+// public static AutoResetEvent gcEvent = new AutoResetEvent(false);
+// private static bool _initialized = false;
+//
+// public static void Initialize()
+// {
+// if (!_initialized)
+// {
+// _initialized = true;
+// new GcNotify();
+// }
+// }
+//
+// private GcNotify(){}
+//
+// ~GcNotify()
+// {
+// if (!Environment.HasShutdownStarted &&
+// !AppDomain.CurrentDomain.IsFinalizingForUnload())
+// {
+// Console.WriteLine("GcNotify called");
+// gcEvent.Set();
+// new GcNotify();
+// }
+// }
+// }
+
///
/// Test adding an object to a scene.
///
@@ -147,11 +184,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestDeleteSceneObject()
{
TestHelpers.InMethod();
-
+
TestScene scene = SceneHelpers.SetupScene();
SceneObjectPart part = SceneHelpers.AddSceneObject(scene);
scene.DeleteSceneObject(part.ParentGroup, false);
-
+
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
Assert.That(retrievedPart, Is.Null);
}
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
index a2332bb4ec..be5b4a8986 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
@@ -39,14 +39,31 @@ using log4net;
namespace OpenSim.Region.Framework.Scenes.Tests
{
- ///
- /// Linking tests
- ///
[TestFixture]
public class SceneObjectLinkingTests
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ ///
+ /// Links to self should be ignored.
+ ///
+ [Test]
+ public void TestLinkToSelf()
+ {
+ TestHelpers.InMethod();
+
+ UUID ownerId = TestHelpers.ParseTail(0x1);
+ int nParts = 3;
+
+ TestScene scene = SceneHelpers.SetupScene();
+ SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(nParts, ownerId, "TestLinkToSelf_", 0x10);
+ scene.AddSceneObject(sog1);
+ scene.LinkObjects(ownerId, sog1.LocalId, new List() { sog1.Parts[1].LocalId });
+// sog1.LinkToGroup(sog1);
+
+ Assert.That(sog1.Parts.Length, Is.EqualTo(nParts));
+ }
+
[Test]
public void TestLinkDelink2SceneObjects()
{
diff --git a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
index 1abef8d846..e4b607daaf 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
@@ -52,6 +52,30 @@ namespace OpenSim.Region.Framework.Tests
[TestFixture]
public class TaskInventoryTests
{
+ [Test]
+ public void TestAddTaskInventoryItem()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ Scene scene = SceneHelpers.SetupScene();
+ UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene);
+ SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID);
+ SceneObjectPart sop1 = sog1.RootPart;
+
+ // Create an object embedded inside the first
+ UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
+ TaskInventoryItem taskSceneObjectItem
+ = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID);
+
+ TaskInventoryItem addedItem = sop1.Inventory.GetInventoryItem(taskSceneObjectItemId);
+ Assert.That(addedItem.ItemID, Is.EqualTo(taskSceneObjectItemId));
+ Assert.That(addedItem.OwnerID, Is.EqualTo(user1.PrincipalID));
+ Assert.That(addedItem.ParentID, Is.EqualTo(sop1.UUID));
+ Assert.That(addedItem.InvType, Is.EqualTo((int)InventoryType.Object));
+ Assert.That(addedItem.Type, Is.EqualTo((int)AssetType.Object));
+ }
+
[Test]
public void TestRezObjectFromInventoryItem()
{
@@ -66,7 +90,7 @@ namespace OpenSim.Region.Framework.Tests
// Create an object embedded inside the first
UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
TaskInventoryItem taskSceneObjectItem
- = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId);
+ = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID);
scene.AddSceneObject(sog1);
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index 5323a95e9b..05678c0fe9 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -63,9 +63,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// Capability string prefixes
- private static readonly string m_parcelVoiceInfoRequestPath = "0007/";
- private static readonly string m_provisionVoiceAccountRequestPath = "0008/";
- private static readonly string m_chatSessionRequestPath = "0009/";
+ private static readonly string m_parcelVoiceInfoRequestPath = "0207/";
+ private static readonly string m_provisionVoiceAccountRequestPath = "0208/";
+ private static readonly string m_chatSessionRequestPath = "0209/";
// Control info
private static bool m_Enabled = false;
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
index 42008dae43..130513d4c0 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
@@ -30,6 +30,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Reflection;
+using System.Threading;
using Nwc.XmlRpc;
@@ -167,6 +168,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
private bool m_debugEnabled = false;
+ private Dictionary m_pendingRequests = new Dictionary();
+
private ExpiringCache m_memoryCache;
private int m_cacheTimeout = 30;
@@ -1348,6 +1351,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Immediately forward the request if the cache is disabled.
if (m_cacheTimeout == 0)
{
+ m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: cache is disabled");
return WebUtil.PostToService(m_groupsServerURI, requestArgs);
}
@@ -1355,6 +1359,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
if (requestArgs["RequestMethod"] == "RemoveGeneric"
|| requestArgs["RequestMethod"] == "AddGeneric")
{
+ m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: clearing generics cache");
+
// Any and all updates cause the cache to clear
m_memoryCache.Clear();
@@ -1366,18 +1372,67 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Create the cache key for the request and see if we have it cached
string CacheKey = WebUtil.BuildQueryString(requestArgs);
- OSDMap response = null;
- if (!m_memoryCache.TryGetValue(CacheKey, out response))
- {
- // if it wasn't in the cache, pass the request to the Simian Grid Services
- response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
- // and cache the response
- m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ // This code uses a leader/follower pattern. On a cache miss, the request is added
+ // to a queue; the first thread to add it to the queue completes the request while
+ // follow on threads busy wait for the results, this situation seems to happen
+ // often when checking permissions
+ while (true)
+ {
+ OSDMap response = null;
+ bool firstRequest = false;
+
+ lock (m_memoryCache)
+ {
+ if (m_memoryCache.TryGetValue(CacheKey, out response))
+ return response;
+
+ if (! m_pendingRequests.ContainsKey(CacheKey))
+ {
+ m_pendingRequests.Add(CacheKey,true);
+ firstRequest = true;
+ }
+ }
+
+ if (firstRequest)
+ {
+ // if it wasn't in the cache, pass the request to the Simian Grid Services
+ try
+ {
+ response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
+ }
+ catch (Exception e)
+ {
+ m_log.InfoFormat("[SIMIAN GROUPS CONNECTOR] request failed {0}",CacheKey);
+ }
+
+ // and cache the response
+ lock (m_memoryCache)
+ {
+ m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ m_pendingRequests.Remove(CacheKey);
+ }
+
+ return response;
+ }
+
+ Thread.Sleep(50); // waiting for a web request to complete, 50msecs is reasonable
}
- // return cached response
- return response;
+ // if (!m_memoryCache.TryGetValue(CacheKey, out response))
+ // {
+ // m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: query not in the cache");
+ // Util.PrintCallStack();
+
+ // // if it wasn't in the cache, pass the request to the Simian Grid Services
+ // response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
+
+ // // and cache the response
+ // m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ // }
+
+ // // return cached response
+ // return response;
}
#endregion
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 6a48b89d69..53593545ef 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -96,15 +96,15 @@ namespace OpenSim.Region.OptionalModules.World.NPC
if (!m_avatars.ContainsKey(agentId))
return false;
+ // Delete existing sp attachments
scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, false);
- AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
- sp.Appearance = npcAppearance;
+ // Set new sp appearance. Also sends to clients.
+ scene.RequestModuleInterface().SetAppearance(sp, new AvatarAppearance(appearance, true));
+
+ // Rez needed sp attachments
scene.AttachmentsModule.RezAttachments(sp);
-
- IAvatarFactoryModule module = scene.RequestModuleInterface();
- module.SendAppearance(sp.UUID);
-
+
return true;
}
@@ -148,22 +148,21 @@ namespace OpenSim.Region.OptionalModules.World.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);
+// m_log.DebugFormat(
+// "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
sp.CompleteMovement(npcAvatar, false);
+ m_avatars.Add(npcAvatar.AgentId, npcAvatar);
+ m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
+
+ return npcAvatar.AgentId;
}
else
{
m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
+ return UUID.Zero;
}
-
- m_avatars.Add(npcAvatar.AgentId, npcAvatar);
}
-
- m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
-
- return npcAvatar.AgentId;
}
public bool MoveToTarget(UUID agentID, Scene scene, Vector3 pos, bool noFly, bool landAtTarget)
@@ -292,13 +291,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC
NPCAvatar av;
if (m_avatars.TryGetValue(agentID, out av))
{
+// m_log.DebugFormat("[NPC MODULE]: Found {0} {1} to remove", agentID, av.Name);
scene.RemoveClient(agentID, false);
m_avatars.Remove(agentID);
+// m_log.DebugFormat("[NPC MODULE]: Removed {0} {1}", agentID, av.Name);
return true;
}
}
+// m_log.DebugFormat("[NPC MODULE]: Could not find {0} to remove", agentID);
return false;
}
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 7c1c046522..6d1f41da05 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -156,6 +156,22 @@ namespace OpenSim.Region.Physics.OdePlugin
internal UUID m_uuid { get; private set; }
internal bool bad = false;
+ ///
+ /// ODE Avatar.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Only used right now to return information to LSL. Not actually used to set mass in ODE!
+ ///
+ ///
+ ///
public OdeCharacter(
String avName, OdeScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p,
float capsule_radius, float tensor, float density,
@@ -786,6 +802,10 @@ namespace OpenSim.Region.Physics.OdePlugin
Vector3 vec = Vector3.Zero;
d.Vector3 vel = d.BodyGetLinearVel(Body);
+// m_log.DebugFormat(
+// "[ODE CHARACTER]: Current velocity in Move() is <{0},{1},{2}>, target {3} for {4}",
+// vel.X, vel.Y, vel.Z, _target_velocity, Name);
+
float movementdivisor = 1f;
if (!m_alwaysRun)
@@ -884,18 +904,20 @@ namespace OpenSim.Region.Physics.OdePlugin
if (flying)
{
+ // This also acts as anti-gravity so that we hover when flying rather than fall.
vec.Z = (_target_velocity.Z - vel.Z) * (PID_D);
}
}
if (flying)
{
+ // Anti-gravity so that we hover when flying rather than fall.
vec.Z += ((-1 * _parent_scene.gravityz) * m_mass);
//Added for auto fly height. Kitto Flora
//d.Vector3 pos = d.BodyGetPosition(Body);
float target_altitude = _parent_scene.GetTerrainHeightAtXY(_position.X, _position.Y) + MinimumGroundFlightOffset;
-
+
if (_position.Z < target_altitude)
{
vec.Z += (target_altitude - _position.Z) * PID_P * 5.0f;
@@ -921,6 +943,25 @@ namespace OpenSim.Region.Physics.OdePlugin
return;
}
+
+ d.Vector3 newVel = d.BodyGetLinearVel(Body);
+ if (newVel.X >= 256 || newVel.X <= 256 || newVel.Y >= 256 || newVel.Y <= 256 || newVel.Z >= 256 || newVel.Z <= 256)
+ {
+// m_log.DebugFormat(
+// "[ODE CHARACTER]: Limiting falling velocity from {0} to {1} for {2}", newVel.Z, -9.8, Name);
+
+ newVel.X = Util.Clamp(newVel.X, -255f, 255f);
+ newVel.Y = Util.Clamp(newVel.Y, -255f, 255f);
+
+ if (!flying)
+ newVel.Z
+ = Util.Clamp(
+ newVel.Z, -_parent_scene.AvatarTerminalVelocity, _parent_scene.AvatarTerminalVelocity);
+ else
+ newVel.Z = Util.Clamp(newVel.Z, -255f, 255f);
+
+ d.BodySetLinearVel(Body, newVel.X, newVel.Y, newVel.Z);
+ }
}
///
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 4530c09464..598530c50f 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -144,6 +144,8 @@ namespace OpenSim.Region.Physics.OdePlugin
public float gravityy = 0f;
public float gravityz = -9.8f;
+ public float AvatarTerminalVelocity { get; set; }
+
private float contactsurfacelayer = 0.001f;
private int worldHashspaceLow = -4;
@@ -459,6 +461,15 @@ namespace OpenSim.Region.Physics.OdePlugin
gravityy = physicsconfig.GetFloat("world_gravityy", 0f);
gravityz = physicsconfig.GetFloat("world_gravityz", -9.8f);
+ float avatarTerminalVelocity = physicsconfig.GetFloat("avatar_terminal_velocity", 54f);
+ AvatarTerminalVelocity = Util.Clamp(avatarTerminalVelocity, 0, 255f);
+ if (AvatarTerminalVelocity != avatarTerminalVelocity)
+ {
+ m_log.WarnFormat(
+ "[ODE SCENE]: avatar_terminal_velocity of {0} is invalid. Clamping to {1}",
+ avatarTerminalVelocity, AvatarTerminalVelocity);
+ }
+
worldHashspaceLow = physicsconfig.GetInt("world_hashspace_size_low", -4);
worldHashspaceHigh = physicsconfig.GetInt("world_hashspace_size_high", 128);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 3e0e452ce0..850f50b13d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -445,17 +445,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
Vector3 toRegionPos;
double dis;
- Action senseEntity = new Action(delegate(ScenePresence presence)
+ Action senseEntity = new Action(presence =>
{
- if ((ts.type & NPC) == 0
- && presence.PresenceType == PresenceType.Npc
- && !npcModule.GetNPC(presence.UUID, presence.Scene).SenseAsAgent)
- return;
+ if ((ts.type & NPC) == 0 && presence.PresenceType == PresenceType.Npc)
+ {
+ INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
+ if (npcData == null || !npcData.SenseAsAgent)
+ return;
+ }
- if ((ts.type & AGENT) == 0
- && (presence.PresenceType == PresenceType.User
- || npcModule.GetNPC(presence.UUID, presence.Scene).SenseAsAgent))
- return;
+ if ((ts.type & AGENT) == 0)
+ {
+ if (presence.PresenceType == PresenceType.User)
+ {
+ return;
+ }
+ else
+ {
+ INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
+ if (npcData != null && npcData.SenseAsAgent)
+ return;
+ }
+ }
if (presence.IsDeleted || presence.IsChildAgent || presence.GodLevel > 0.0)
return;
diff --git a/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs b/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs
index 130e197841..e35f79fd71 100644
--- a/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs
@@ -44,7 +44,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
string dirName = myDomain.FriendlyName;
string ScriptEnginesPath = myDomain.SetupInformation.PrivateBinPath;
- string[] pathList = new string[] {"bin", ScriptEnginesPath,
+ string[] pathList = new string[] {"", "bin", ScriptEnginesPath,
Path.Combine(ScriptEnginesPath, dirName)};
string assemblyName = args.Name;
@@ -56,6 +56,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
string path = Path.Combine(Directory.GetCurrentDirectory(),
Path.Combine(s, assemblyName))+".dll";
+// Console.WriteLine("Trying to resolve {0}", path);
+
if (File.Exists(path))
return Assembly.LoadFrom(path);
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
index b1fb6c2810..8b88588391 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
@@ -28,12 +28,16 @@
using System;
using System.IO;
using System.Collections.Generic;
+using System.Reflection;
+using log4net;
using Tools;
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
{
public class CSCodeGenerator : ICodeConverter
{
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
private SYMBOL m_astRoot = null;
private Dictionary, KeyValuePair> m_positionMap;
private int m_indentWidth = 4; // for indentation
@@ -87,6 +91,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
/// String containing the generated C# code.
public string Convert(string script)
{
+// m_log.DebugFormat("[CS CODE GENERATOR]: Converting to C#\n{0}", script);
+
m_warnings.Clear();
ResetCounters();
Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true));
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
index 734d4d5beb..c10143b9a1 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
@@ -291,6 +291,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
public void PerformScriptCompile(string Script, string asset, UUID ownerUUID,
out string assembly, out Dictionary, KeyValuePair> linemap)
{
+// m_log.DebugFormat("[Compiler]: Compiling script\n{0}", Script);
+
linemap = null;
m_warnings.Clear();
@@ -357,6 +359,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture))
language = enumCompileType.yp;
+// m_log.DebugFormat("[Compiler]: Compile language is {0}", language);
+
if (!AllowedCompilers.ContainsKey(language.ToString()))
{
// Not allowed to compile to this language!
@@ -417,7 +421,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
}
assembly = CompileFromDotNetText(compileScript, language, asset, assembly);
- return;
}
public string[] GetWarnings()
@@ -491,6 +494,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
/// Filename to .dll assembly
internal string CompileFromDotNetText(string Script, enumCompileType lang, string asset, string assembly)
{
+// m_log.DebugFormat("[Compiler]: Compiling to assembly\n{0}", Script);
+
string ext = "." + lang.ToString();
// Output assembly name
@@ -531,8 +536,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
parameters.IncludeDebugInformation = true;
- string rootPath =
- Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
+ string rootPath = AppDomain.CurrentDomain.BaseDirectory;
parameters.ReferencedAssemblies.Add(Path.Combine(rootPath,
"OpenSim.Region.ScriptEngine.Shared.dll"));
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 9b93135fd4..bc1902b992 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -537,6 +537,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
public bool Stop(int timeout)
{
+// m_log.DebugFormat(
+// "[SCRIPT INSTANCE]: Stopping script {0} {1} with timeout {2}", ScriptName, ItemID, timeout);
+
IScriptWorkItem result;
lock (m_EventQueue)
@@ -769,7 +772,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
}
catch (Exception e)
{
- // m_log.DebugFormat("[SCRIPT] Exception: {0}", e.Message);
+// m_log.DebugFormat(
+// "[SCRIPT] Exception in script {0} {1}: {2}{3}",
+// ScriptName, ItemID, e.Message, e.StackTrace);
+
m_InEvent = false;
m_CurrentEvent = String.Empty;
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs
index b635d5c604..7d7bd82778 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs
@@ -27,44 +27,100 @@
using System;
using System.Collections.Generic;
+using System.Threading;
using Nini.Config;
using NUnit.Framework;
-using OpenSim.Tests.Common.Mock;
-using OpenSim.Region.Framework.Scenes;
using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Region.CoreModules.Scripting.WorldComm;
+using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
namespace OpenSim.Region.ScriptEngine.XEngine.Tests
{
///
- /// Scene presence tests
+ /// XEngine tests.
///
- /// Commented out XEngineTests that don't do anything
- /*
[TestFixture]
public class XEngineTest
{
- public Scene scene;
-
- public static Random random;
- public TestClient testclient;
- //TestCommunicationsManager cm;
+ private TestScene m_scene;
+ private XEngine m_xEngine;
+ private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
+ private OSChatMessage m_osChatMessageReceived;
[TestFixtureSetUp]
public void Init()
{
- TestCommunicationsManager cm = new TestCommunicationsManager();
- scene = SceneSetupHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, cm);
- random = new Random();
+ //AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin");
+// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
+ m_xEngine = new XEngine();
+
+ // Necessary to stop serialization complaining
+ WorldCommModule wcModule = new WorldCommModule();
+
+ IniConfigSource configSource = new IniConfigSource();
+
+ IConfig startupConfig = configSource.AddConfig("Startup");
+ startupConfig.Set("DefaultScriptEngine", "XEngine");
+
+ IConfig xEngineConfig = configSource.AddConfig("XEngine");
+ xEngineConfig.Set("Enabled", "true");
+
+ // These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
+ // to AssemblyResolver.OnAssemblyResolve fails.
+ xEngineConfig.Set("AppDomainLoading", "false");
+
+ m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource);
+ SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
+ m_scene.StartScripts();
}
-
+
+ ///
+ /// Test compilation and starting of a script.
+ ///
+ ///
+ /// This is a less than ideal regression test since it involves an asynchronous operation (in this case,
+ /// compilation of the script).
+ ///
[Test]
- public void T001_XStart()
+ public void TestCompileAndStartScript()
{
- INonSharedRegionModule xengine = new XEngine();
- SceneSetupHelpers.SetupSceneModules(scene, new IniConfigSource(), xengine);
- xengine.RegionLoaded(scene);
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ UUID userId = TestHelpers.ParseTail(0x1);
+// UUID objectId = TestHelpers.ParseTail(0x2);
+// UUID itemId = TestHelpers.ParseTail(0x3);
+ string itemName = "TestStartScript() Item";
+
+ SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, "TestStartScriptPart_", 0x100);
+ m_scene.AddNewSceneObject(so, true);
+
+ InventoryItemBase itemTemplate = new InventoryItemBase();
+// itemTemplate.ID = itemId;
+ itemTemplate.Name = itemName;
+ itemTemplate.Folder = so.UUID;
+ itemTemplate.InvType = (int)InventoryType.LSL;
+
+ m_scene.EventManager.OnChatFromWorld += OnChatFromWorld;
+
+ m_scene.RezNewScript(userId, itemTemplate);
+
+ m_chatEvent.WaitOne(60000);
+
+ Assert.That(m_osChatMessageReceived, Is.Not.Null, "No chat message received in TestStartScript()");
+ Assert.That(m_osChatMessageReceived.Message, Is.EqualTo("Script running"));
+ }
+
+ private void OnChatFromWorld(object sender, OSChatMessage oscm)
+ {
+// Console.WriteLine("Got chat [{0}]", oscm.Message);
+
+ m_osChatMessageReceived = oscm;
+ m_chatEvent.Set();
}
}
- */
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index f11987eede..c68f03ff87 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -680,6 +680,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource)
{
+// m_log.DebugFormat(
+// "[XEngine]: OnRezScript event triggered for script {0}, startParam {1}, postOnRez {2}, engine {3}, stateSource {4}, script\n{5}",
+// itemID, startParam, postOnRez, engine, stateSource, script);
+
if (script.StartsWith("//MRM:"))
return;
@@ -761,6 +765,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
m_CompileDict[itemID] = 0;
}
+// m_log.DebugFormat("[XEngine]: Added script {0} to compile queue", itemID);
+
if (m_CurrentCompile == null)
{
// NOTE: Although we use a lockless queue, the lock here
@@ -822,6 +828,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
bool postOnRez = (bool)p[4];
StateSource stateSource = (StateSource)p[5];
+// m_log.DebugFormat("[XEngine]: DoOnRezScript called for script {0}", itemID);
+
lock (m_CompileDict)
{
if (!m_CompileDict.ContainsKey(itemID))
@@ -870,7 +878,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
{
try
{
- lock (m_AddingAssemblies)
+ lock (m_AddingAssemblies)
{
m_Compiler.PerformScriptCompile(script, assetID.ToString(), item.OwnerID, out assembly, out linemap);
if (!m_AddingAssemblies.ContainsKey(assembly)) {
@@ -922,6 +930,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
}
catch (Exception e)
{
+// m_log.ErrorFormat("[XEngine]: Exception when rezzing script {0}{1}", e.Message, e.StackTrace);
+
// try
// {
if (!m_ScriptErrors.ContainsKey(itemID))
@@ -1132,7 +1142,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
handlerObjectRemoved(part.UUID);
}
-
ScriptRemoved handlerScriptRemoved = OnScriptRemoved;
if (handlerScriptRemoved != null)
handlerScriptRemoved(itemID);
@@ -1381,6 +1390,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
string path = Path.Combine(Directory.GetCurrentDirectory(),
Path.Combine(s, assemblyName))+".dll";
+// Console.WriteLine("[XEngine]: Trying to resolve {0}", path);
+
if (File.Exists(path))
return Assembly.LoadFrom(path);
}
@@ -1863,16 +1874,24 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void SuspendScript(UUID itemID)
{
+// m_log.DebugFormat("[XEngine]: Received request to suspend script with ID {0}", itemID);
+
IScriptInstance instance = GetInstance(itemID);
if (instance != null)
instance.Suspend();
+// else
+// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
}
public void ResumeScript(UUID itemID)
{
+// m_log.DebugFormat("[XEngine]: Received request to resume script with ID {0}", itemID);
+
IScriptInstance instance = GetInstance(itemID);
if (instance != null)
instance.Resume();
+// else
+// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs
index 24a94180db..f627e37d8f 100644
--- a/OpenSim/Region/UserStatistics/WebStatsModule.cs
+++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs
@@ -301,7 +301,7 @@ namespace OpenSim.Region.UserStatistics
public void OnRegisterCaps(UUID agentID, Caps caps)
{
- m_log.DebugFormat("[VC]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps);
+ m_log.DebugFormat("[WEB STATS MODULE]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps);
string capsPath = "/CAPS/VS/" + UUID.Random();
caps.RegisterHandler("ViewerStats",
new RestStreamHandler("POST", capsPath,
@@ -462,7 +462,7 @@ namespace OpenSim.Region.UserStatistics
if (!m_sessions.ContainsKey(agentID))
{
- m_log.Warn("[VS]: no session for stat disclosure");
+ m_log.Warn("[WEB STATS MODULE]: no session for stat disclosure");
return new UserSessionID();
}
uid = m_sessions[agentID];
@@ -667,14 +667,13 @@ namespace OpenSim.Region.UserStatistics
{
updatecmd.ExecuteNonQuery();
}
- catch
- (SqliteExecutionException)
+ catch (SqliteExecutionException)
{
- m_log.Warn("[WEBSTATS]: failed to write stats to storage Execution Exception");
+ m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage Execution Exception");
}
catch (SqliteSyntaxException)
{
- m_log.Warn("[WEBSTATS]: failed to write stats to storage SQL Syntax Exception");
+ m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage SQL Syntax Exception");
}
}
diff --git a/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs b/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs
index 8fdb4d0b66..ddfca57c81 100644
--- a/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs
@@ -110,12 +110,11 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
m_log.DebugFormat("[AVATAR CONNECTOR]: GetAgent received null or empty reply");
@@ -124,7 +123,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -159,12 +158,11 @@ namespace OpenSim.Services.Connectors
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
//m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -177,15 +175,18 @@ namespace OpenSim.Services.Connectors
return false;
}
else
+ {
m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar reply data does not contain result field");
-
+ }
}
else
+ {
m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar received empty reply");
+ }
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -202,12 +203,11 @@ namespace OpenSim.Services.Connectors
sendData["UserID"] = userID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -228,7 +228,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -246,12 +246,11 @@ namespace OpenSim.Services.Connectors
sendData["Values"] = new List(values);
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -272,7 +271,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -290,12 +289,11 @@ namespace OpenSim.Services.Connectors
sendData["Names"] = new List(names);
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -316,7 +314,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
diff --git a/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
index 41361ab6e4..44138c9fd1 100644
--- a/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
@@ -108,12 +108,11 @@ namespace OpenSim.Services.Connectors.Friends
protected FriendInfo[] GetFriends(Dictionary sendData, string PrincipalID)
{
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/friends";
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/friends",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -143,7 +142,6 @@ namespace OpenSim.Services.Connectors.Friends
// Success
return finfos.ToArray();
}
-
else
m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: GetFriends {0} received null response",
PrincipalID);
@@ -152,7 +150,7 @@ namespace OpenSim.Services.Connectors.Friends
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
}
return new FriendInfo[0];
@@ -167,15 +165,14 @@ namespace OpenSim.Services.Connectors.Friends
sendData["METHOD"] = "storefriend";
string reply = string.Empty;
+ string uri = m_ServerURI + "/friends";
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/friends",
- ServerUtils.BuildQueryString(sendData));
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
@@ -223,15 +220,14 @@ namespace OpenSim.Services.Connectors.Friends
public bool Delete(Dictionary sendData, string PrincipalID, string Friend)
{
string reply = string.Empty;
+ string uri = m_ServerURI = "/friends";
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/friends",
- ServerUtils.BuildQueryString(sendData));
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
diff --git a/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs b/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs
index d0a20fc989..eea9853463 100644
--- a/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs
+++ b/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs
@@ -139,12 +139,11 @@ namespace OpenSim.Services.Connectors.Friends
return false;
m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: region: {0}", region.ExternalHostName + ":" + region.HttpPort);
+ string uri = "http://" + region.ExternalHostName + ":" + region.HttpPort + "/friends";
+
try
{
- string url = "http://" + region.ExternalHostName + ":" + region.HttpPort;
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- url + "/friends",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -165,7 +164,7 @@ namespace OpenSim.Services.Connectors.Friends
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: Exception when contacting remote sim: {0}", e.ToString());
+ m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: Exception when contacting remote sim at {0}: {1}", uri, e.Message);
}
return false;
diff --git a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs
index e57f28b44e..1599a56b1b 100644
--- a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs
@@ -98,12 +98,11 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "register";
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/grid";
// m_log.DebugFormat("[GRID CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -133,7 +132,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
}
return "Error communicating with grid service";
@@ -147,11 +146,12 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "deregister";
+ string uri = m_ServerURI + "/grid";
+
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- ServerUtils.BuildQueryString(sendData));
+ string reply
+ = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
if (reply != string.Empty)
{
@@ -165,7 +165,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
}
return false;
@@ -184,15 +184,15 @@ namespace OpenSim.Services.Connectors
string reqString = ServerUtils.BuildQueryString(sendData);
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
+
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- reqString);
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -228,15 +228,14 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_uuid";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- ServerUtils.BuildQueryString(sendData));
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null;
}
@@ -274,15 +273,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_position";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null;
}
@@ -318,15 +318,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_name";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null;
}
@@ -361,15 +362,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_regions_by_name";
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -413,17 +415,19 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
+
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -463,17 +467,18 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -515,17 +520,18 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -565,17 +571,18 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -615,15 +622,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_flags";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return -1;
}
diff --git a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
index aa98b5df49..20d7eaf301 100644
--- a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
+++ b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
@@ -156,11 +156,12 @@ namespace OpenSim.Services.Connectors
sendData["LookAt"] = lookAt.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/griduser";
// m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/griduser",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -182,7 +183,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message);
+ m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
}
return false;
@@ -191,11 +192,12 @@ namespace OpenSim.Services.Connectors
protected GridUserInfo Get(Dictionary sendData)
{
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/griduser";
// m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/griduser",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -216,7 +218,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message);
+ m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
}
return null;
@@ -235,11 +237,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/griduser";
//m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/griduser",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -249,7 +252,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message);
+ m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
}
List rinfos = new List();
diff --git a/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs
index d699f596a2..af4b0daf9b 100644
--- a/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs
@@ -79,11 +79,12 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SESSIONID"] = m_SessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/hgfriends";
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/hgfriends",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -103,7 +104,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
}
catch (Exception e)
{
- m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
}
return 0;
@@ -123,15 +124,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SESSIONID"] = m_SessionID.ToString();
string reply = string.Empty;
+ string uri = m_ServerURI + "/hgfriends";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/hgfriends",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
@@ -168,15 +170,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SECRET"] = secret;
string reply = string.Empty;
+ string uri = m_ServerURI + "/hgfriends";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/hgfriends",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
diff --git a/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs b/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs
index e46714ec53..30bfb70aa9 100644
--- a/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs
+++ b/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs
@@ -97,11 +97,12 @@ namespace OpenSim.Services.Connectors
sendData["DATA"] = Convert.ToBase64String(jpgData);
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/map";
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/map",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -135,7 +136,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[MAP IMAGE CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[MAP IMAGE CONNECTOR]: Exception when contacting map server at {0}: {1}", uri, e.Message);
}
finally
{
diff --git a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
index 7238afc613..f7d8c5379c 100644
--- a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
@@ -98,11 +98,12 @@ namespace OpenSim.Services.Connectors
sendData["SecureSessionID"] = secureSessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -124,7 +125,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -142,11 +143,12 @@ namespace OpenSim.Services.Connectors
sendData["SessionID"] = sessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -168,7 +170,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -185,11 +187,12 @@ namespace OpenSim.Services.Connectors
sendData["RegionID"] = regionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -211,7 +214,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -229,11 +232,12 @@ namespace OpenSim.Services.Connectors
sendData["RegionID"] = regionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -255,7 +259,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -273,11 +277,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -287,7 +292,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -316,11 +321,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
//m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -330,7 +336,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
List rinfos = new List();
diff --git a/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs b/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs
index f6835b9f2f..609dafefd9 100644
--- a/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs
+++ b/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs
@@ -138,11 +138,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/accounts",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -152,7 +153,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting accounts server: {0}", e.Message);
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
}
List accounts = new List();
@@ -206,11 +207,12 @@ namespace OpenSim.Services.Connectors
{
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/accounts",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -220,7 +222,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user account server: {0}", e.Message);
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
}
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -241,11 +243,12 @@ namespace OpenSim.Services.Connectors
private bool SendAndGetBoolReply(Dictionary sendData)
{
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/accounts",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -267,7 +270,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[ACCOUNTS CONNECTOR]: Exception when contacting user account server: {0}", e.Message);
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
}
return false;
diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
index a25eb66751..aa904aad9c 100644
--- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
@@ -88,9 +88,27 @@ namespace OpenSim.Tests.Common
/// ID of the region
/// X co-ordinate of the region
/// Y co-ordinate of the region
- /// This should be the same if simulating two scenes within a standalone
+ ///
///
- public static TestScene SetupScene(string name, UUID id, uint x, uint y, CoreAssetCache cache)
+ public static TestScene SetupScene(
+ string name, UUID id, uint x, uint y, CoreAssetCache cache)
+ {
+ return SetupScene(name, id, x, y, cache, new IniConfigSource());
+ }
+
+ ///
+ /// Set up a scene. If it's more then one scene, use the same CommunicationsManager to link regions
+ /// or a different, to get a brand new scene with new shared region modules.
+ ///
+ /// Name of the region
+ /// ID of the region
+ /// X co-ordinate of the region
+ /// Y co-ordinate of the region
+ ///
+ ///
+ ///
+ public static TestScene SetupScene(
+ string name, UUID id, uint x, uint y, CoreAssetCache cache, IConfigSource configSource)
{
Console.WriteLine("Setting up test scene {0}", name);
@@ -106,7 +124,6 @@ namespace OpenSim.Tests.Common
ISimulationDataService simDataService = OpenSim.Server.Base.ServerUtils.LoadPlugin("OpenSim.Tests.Common.dll", null);
IEstateDataService estateDataService = null;
- IConfigSource configSource = new IniConfigSource();
TestScene testScene = new TestScene(
regInfo, acm, scs, simDataService, estateDataService, null, false, configSource, null);
diff --git a/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs b/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs
index a8f0d59849..7058d1e568 100644
--- a/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs
@@ -72,15 +72,21 @@ namespace OpenSim.Tests.Common
///
///
///
- public static TaskInventoryItem AddSceneObject(Scene scene, SceneObjectPart sop, string itemName, UUID id)
+ ///
+ public static TaskInventoryItem AddSceneObject(
+ Scene scene, SceneObjectPart sop, string itemName, UUID id, UUID userId)
{
SceneObjectGroup taskSceneObject = SceneHelpers.CreateSceneObject(1, UUID.Zero);
AssetBase taskSceneObjectAsset = AssetHelpers.CreateAsset(0x10, taskSceneObject);
scene.AssetService.Store(taskSceneObjectAsset);
TaskInventoryItem taskSceneObjectItem
= new TaskInventoryItem
- { Name = itemName, AssetID = taskSceneObjectAsset.FullID, ItemID = id,
- Type = (int)AssetType.Object, InvType = (int)InventoryType.Object };
+ { Name = itemName,
+ AssetID = taskSceneObjectAsset.FullID,
+ ItemID = id,
+ OwnerID = userId,
+ Type = (int)AssetType.Object,
+ InvType = (int)InventoryType.Object };
sop.Inventory.AddInventoryItem(taskSceneObjectItem, true);
return taskSceneObjectItem;
diff --git a/OpenSim/Tests/Common/Mock/TestScene.cs b/OpenSim/Tests/Common/Mock/TestScene.cs
index 07bcdce382..eea68c3b40 100644
--- a/OpenSim/Tests/Common/Mock/TestScene.cs
+++ b/OpenSim/Tests/Common/Mock/TestScene.cs
@@ -47,6 +47,12 @@ namespace OpenSim.Tests.Common.Mock
dumpAssetsToFile, config, simulatorVersion)
{
}
+
+ ~TestScene()
+ {
+ //Console.WriteLine("TestScene destructor called for {0}", RegionInfo.RegionName);
+ Console.WriteLine("TestScene destructor called");
+ }
///
/// Temporarily override session authentication for tests (namely teleport).
diff --git a/OpenSim/Tests/Torture/NPCTortureTests.cs b/OpenSim/Tests/Torture/NPCTortureTests.cs
new file mode 100644
index 0000000000..8078d9dfab
--- /dev/null
+++ b/OpenSim/Tests/Torture/NPCTortureTests.cs
@@ -0,0 +1,185 @@
+/*
+ * 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 System.Diagnostics;
+using System.Reflection;
+using log4net;
+using Nini.Config;
+using NUnit.Framework;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Framework.Communications;
+using OpenSim.Region.CoreModules.Avatar.Attachments;
+using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
+using OpenSim.Region.CoreModules.Framework.InventoryAccess;
+using OpenSim.Region.CoreModules.Framework.UserManagement;
+using OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.OptionalModules.World.NPC;
+using OpenSim.Services.AvatarService;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
+
+namespace OpenSim.Tests.Torture
+{
+ ///
+ /// NPC torture tests
+ ///
+ ///
+ /// Don't rely on the numbers given by these tests - they will vary a lot depending on what is already cached,
+ /// how much memory is free, etc. In some cases, later larger tests will apparently take less time than smaller
+ /// earlier tests.
+ ///
+ [TestFixture]
+ public class NPCTortureTests
+ {
+ private TestScene scene;
+ private AvatarFactoryModule afm;
+ private UserManagementModule umm;
+ private AttachmentsModule am;
+
+ [TestFixtureSetUp]
+ public void FixtureInit()
+ {
+ // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
+ Util.FireAndForgetMethod = FireAndForgetMethod.None;
+ }
+
+ [TestFixtureTearDown]
+ public void TearDown()
+ {
+ // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
+ // threads. Possibly, later tests should be rewritten not to worry about such things.
+ Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
+ }
+
+ [SetUp]
+ public void Init()
+ {
+ IConfigSource config = new IniConfigSource();
+ config.AddConfig("NPC");
+ config.Configs["NPC"].Set("Enabled", "true");
+ config.AddConfig("Modules");
+ config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
+
+ afm = new AvatarFactoryModule();
+ umm = new UserManagementModule();
+ am = new AttachmentsModule();
+
+ scene = SceneHelpers.SetupScene();
+ SceneHelpers.SetupSceneModules(scene, config, afm, umm, am, new BasicInventoryAccessModule(), new NPCModule());
+ }
+
+ [Test]
+ public void TestAddRemove100NPCs()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ TestAddRemoveNPCs(100);
+ }
+
+ [Test]
+ public void TestAddRemove1000NPCs()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ TestAddRemoveNPCs(1000);
+ }
+
+ [Test]
+ public void TestAddRemove2000NPCs()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ TestAddRemoveNPCs(2000);
+ }
+
+ private void TestAddRemoveNPCs(int numberOfNpcs)
+ {
+ ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
+// ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId);
+
+ // 8 is the index of the first baked texture in AvatarAppearance
+ UUID originalFace8TextureId = TestHelpers.ParseTail(0x10);
+ Primitive.TextureEntry originalTe = new Primitive.TextureEntry(UUID.Zero);
+ Primitive.TextureEntryFace originalTef = originalTe.CreateFace(8);
+ originalTef.TextureID = originalFace8TextureId;
+
+ // We also need to add the texture to the asset service, otherwise the AvatarFactoryModule will tell
+ // ScenePresence.SendInitialData() to reset our entire appearance.
+ scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId));
+
+ afm.SetAppearance(sp, originalTe, null);
+
+ INPCModule npcModule = scene.RequestModuleInterface();
+
+ List npcs = new List();
+
+ long startGcMemory = GC.GetTotalMemory(true);
+ Stopwatch sw = new Stopwatch();
+ sw.Start();
+
+ for (int i = 0; i < numberOfNpcs; i++)
+ {
+ npcs.Add(
+ npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, scene, sp.Appearance));
+ }
+
+ for (int i = 0; i < numberOfNpcs; i++)
+ {
+ Assert.That(npcs[i], Is.Not.Null);
+
+ ScenePresence npc = scene.GetScenePresence(npcs[i]);
+ Assert.That(npc, Is.Not.Null);
+ }
+
+ for (int i = 0; i < numberOfNpcs; i++)
+ {
+ Assert.That(npcModule.DeleteNPC(npcs[i], scene), Is.True);
+ ScenePresence npc = scene.GetScenePresence(npcs[i]);
+ Assert.That(npc, Is.Null);
+ }
+
+ sw.Stop();
+
+ long endGcMemory = GC.GetTotalMemory(true);
+
+ Console.WriteLine("Took {0} ms", sw.ElapsedMilliseconds);
+ Console.WriteLine(
+ "End {0} MB, Start {1} MB, Diff {2} MB",
+ endGcMemory / 1024 / 1024,
+ startGcMemory / 1024 / 1024,
+ (endGcMemory - startGcMemory) / 1024 / 1024);
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Tests/Torture/ObjectTortureTests.cs b/OpenSim/Tests/Torture/ObjectTortureTests.cs
index b9764d767d..e83186a929 100644
--- a/OpenSim/Tests/Torture/ObjectTortureTests.cs
+++ b/OpenSim/Tests/Torture/ObjectTortureTests.cs
@@ -49,6 +49,13 @@ namespace OpenSim.Tests.Torture
[TestFixture]
public class ObjectTortureTests
{
+ [TearDown]
+ public void TearDown()
+ {
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+ }
+
// [Test]
// public void Test0000Clean()
// {
@@ -118,7 +125,7 @@ namespace OpenSim.Tests.Torture
TestScene scene = SceneHelpers.SetupScene();
- Process process = Process.GetCurrentProcess();
+// Process process = Process.GetCurrentProcess();
// long startProcessMemory = process.PrivateMemorySize64;
long startGcMemory = GC.GetTotalMemory(true);
DateTime start = DateTime.Now;
@@ -131,7 +138,7 @@ namespace OpenSim.Tests.Torture
TimeSpan elapsed = DateTime.Now - start;
// long processMemoryAlloc = process.PrivateMemorySize64 - startProcessMemory;
- long processGcAlloc = GC.GetTotalMemory(false) - startGcMemory;
+ long endGcMemory = GC.GetTotalMemory(false);
for (int i = 1; i <= objectsToAdd; i++)
{
@@ -141,9 +148,29 @@ namespace OpenSim.Tests.Torture
string.Format("Object {0} could not be retrieved", i));
}
+ // When a scene object is added to a scene, it is placed in the update list for sending to viewers
+ // (though in this case we have none). When it is deleted, it is not removed from the update which is
+ // fine since it will later be ignored.
+ //
+ // However, that means that we need to manually run an update here to clear out that list so that deleted
+ // objects will be clean up by the garbage collector before the next stress test is run.
+ scene.Update();
+
+ // Currently, we need to do this in order to garbage collect the scene objects ready for the next test run.
+ // However, what we really need to do is find out why the entire scene is not garbage collected in
+ // teardown.
+ scene.DeleteAllSceneObjects();
+
Console.WriteLine(
- "Took {0}ms, {1}MB to create {2} objects each containing {3} prim(s)",
- Math.Round(elapsed.TotalMilliseconds), processGcAlloc / 1024 / 1024, objectsToAdd, primsInEachObject);
+ "Took {0}ms, {1}MB ({2} - {3}) to create {4} objects each containing {5} prim(s)",
+ Math.Round(elapsed.TotalMilliseconds),
+ (endGcMemory - startGcMemory) / 1024 / 1024,
+ endGcMemory / 1024 / 1024,
+ startGcMemory / 1024 / 1024,
+ objectsToAdd,
+ primsInEachObject);
+
+ scene = null;
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Tests/Torture/ScriptTortureTests.cs b/OpenSim/Tests/Torture/ScriptTortureTests.cs
new file mode 100644
index 0000000000..d94bbde680
--- /dev/null
+++ b/OpenSim/Tests/Torture/ScriptTortureTests.cs
@@ -0,0 +1,159 @@
+/*
+ * 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 System.Diagnostics;
+using System.Reflection;
+using System.Threading;
+using log4net;
+using Nini.Config;
+using NUnit.Framework;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Region.CoreModules.Scripting.WorldComm;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.ScriptEngine.XEngine;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
+
+namespace OpenSim.Tests.Torture
+{
+ ///
+ /// Script torture tests
+ ///
+ ///
+ /// Don't rely on the numbers given by these tests - they will vary a lot depending on what is already cached,
+ /// how much memory is free, etc. In some cases, later larger tests will apparently take less time than smaller
+ /// earlier tests.
+ ///
+ [TestFixture]
+ public class ScriptTortureTests
+ {
+ private TestScene m_scene;
+ private XEngine m_xEngine;
+ private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
+
+ private int m_expectedChatMessages;
+ private List m_osChatMessagesReceived = new List();
+
+ [SetUp]
+ public void Init()
+ {
+ //AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin");
+// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
+ m_xEngine = new XEngine();
+
+ // Necessary to stop serialization complaining
+ WorldCommModule wcModule = new WorldCommModule();
+
+ IniConfigSource configSource = new IniConfigSource();
+
+ IConfig startupConfig = configSource.AddConfig("Startup");
+ startupConfig.Set("DefaultScriptEngine", "XEngine");
+
+ IConfig xEngineConfig = configSource.AddConfig("XEngine");
+ xEngineConfig.Set("Enabled", "true");
+
+ // These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
+ // to AssemblyResolver.OnAssemblyResolve fails.
+ xEngineConfig.Set("AppDomainLoading", "false");
+
+ m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource);
+ SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
+
+ m_scene.EventManager.OnChatFromWorld += OnChatFromWorld;
+ m_scene.StartScripts();
+ }
+
+ [Test]
+ public void TestCompileAndStart100Scripts()
+ {
+ TestHelpers.InMethod();
+ log4net.Config.XmlConfigurator.Configure();
+
+ TestCompileAndStartScripts(100);
+ }
+
+ private void TestCompileAndStartScripts(int scriptsToCreate)
+ {
+ UUID userId = TestHelpers.ParseTail(0x1);
+
+ m_expectedChatMessages = scriptsToCreate;
+ int startingObjectIdTail = 0x100;
+
+ GC.Collect();
+
+ for (int idTail = startingObjectIdTail;idTail < startingObjectIdTail + scriptsToCreate; idTail++)
+ {
+ AddObjectAndScript(idTail, userId);
+ }
+
+ m_chatEvent.WaitOne(40000 + scriptsToCreate * 1000);
+
+ Assert.That(m_osChatMessagesReceived.Count, Is.EqualTo(m_expectedChatMessages));
+
+ foreach (OSChatMessage msg in m_osChatMessagesReceived)
+ Assert.That(
+ msg.Message,
+ Is.EqualTo("Script running"),
+ string.Format(
+ "Message from {0} was {1} rather than {2}", msg.SenderUUID, msg.Message, "Script running"));
+ }
+
+ private void AddObjectAndScript(int objectIdTail, UUID userId)
+ {
+// UUID itemId = TestHelpers.ParseTail(0x3);
+ string itemName = string.Format("AddObjectAndScript() Item for object {0}", objectIdTail);
+
+ SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, "AddObjectAndScriptPart_", objectIdTail);
+ m_scene.AddNewSceneObject(so, true);
+
+ InventoryItemBase itemTemplate = new InventoryItemBase();
+// itemTemplate.ID = itemId;
+ itemTemplate.Name = itemName;
+ itemTemplate.Folder = so.UUID;
+ itemTemplate.InvType = (int)InventoryType.LSL;
+
+ m_scene.RezNewScript(userId, itemTemplate);
+ }
+
+ private void OnChatFromWorld(object sender, OSChatMessage oscm)
+ {
+// Console.WriteLine("Got chat [{0}]", oscm.Message);
+
+ lock (m_osChatMessagesReceived)
+ {
+ m_osChatMessagesReceived.Add(oscm);
+
+ if (m_osChatMessagesReceived.Count == m_expectedChatMessages)
+ m_chatEvent.Set();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index d45f72bce4..a820ddf93f 100755
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -484,7 +484,6 @@
;; such as the Meta7 viewer.
;; It has no ill effect on viewers which do not support server-side
;; windlight settings.
- ;; Currently we only have support for MySQL databases.
; enable_windlight = false
@@ -573,10 +572,15 @@
; DeleteScriptsOnStartup = true
;; Set this to true (the default) to load each script into a separate
- ;; AppDomain. Setting this to false will load all script assemblies into the
- ;; current AppDomain, which will reduce the per-script overhead at the
- ;; expense of reduced security and the inability to garbage collect the
- ;; script assemblies
+ ;; AppDomain.
+ ;;
+ ;; Setting this to false will load all script assemblies into the
+ ;; current AppDomain, which will significantly improve script loading times.
+ ;; It will also reduce initial per-script memory overhead.
+ ;;
+ ;; However, setting this to false will also prevent script DLLs from being unloaded from memory if the script is deleted.
+ ;; This may cause an OutOfMemory problem over time when avatars with scripted attachments move in and out of the region.
+ ;; Some Windows users have also reported script loading problems when AppDomainLoading = false
; AppDomainLoading = true
;# {DefaultCompileLanguage} {Enabled:true} {Default script language?} {lsl vb cs} lsl
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 01cf7915f1..fab2c476be 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -637,13 +637,12 @@
[Mesh]
; enable / disable Collada mesh support
; default is true
- ; AllowMeshUpload = true
+ AllowMeshUpload = true
; if you use Meshmerizer and want collisions for meshies, setting this to true
; will cause OpenSim to attempt to decode meshies assets, extract the physics
- ; mesh, and use it for collisions. This is currently experimental code and enabling
- ; it may cause unexpected physics problems.
- ;UseMeshiesPhysicsMesh = false
+ ; mesh, and use it for collisions.
+ UseMeshiesPhysicsMesh = true
[ODEPhysicsSettings]
@@ -656,6 +655,11 @@
world_gravityy = 0
world_gravityz = -9.8
+ ; Terminal velocity of a falling avatar
+ ; This is the same http://en.wikipedia.org/wiki/Terminal_velocity#Examples
+ ; Max value is 255, min value is 0
+ avatar_terminal_velocity = 54
+
; World Step size. (warning these are dangerous. Changing these will probably cause your scene to explode dramatically)
; reference: fps = (0.089/ODE_STEPSIZE) * 1000;
world_stepsize = 0.0178
@@ -1066,7 +1070,6 @@
[LightShare]
; This enables the transmission of Windlight scenes to supporting clients, such as the Meta7 viewer.
; It has no ill effect on viewers which do not support server-side windlight settings.
- ; Currently we only have support for MySQL databases.
enable_windlight = false
diff --git a/bin/config-include/GridCommon.ini.example b/bin/config-include/GridCommon.ini.example
index 4195bcee50..712481d299 100644
--- a/bin/config-include/GridCommon.ini.example
+++ b/bin/config-include/GridCommon.ini.example
@@ -14,6 +14,8 @@
;StorageProvider = "OpenSim.Data.MySQL.dll"
;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
; Uncomment this line if you are using MySQL and want to use a different database for estates
+ ; The usual application for this is to allow estates to be spread out across multiple simulators by share the same database.
+ ; Most people won't need to do this so only uncomment if you know what you're doing.
;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
; MSSQL
diff --git a/prebuild.xml b/prebuild.xml
index 94d86d1292..54f42f44f2 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -3284,9 +3284,16 @@
+
+
+
+
+
+
+