From ec637e2b8c089efc16bbb9faae0a1e3cf939db41 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 31 Mar 2010 04:20:20 +0100
Subject: Committing the LightShare code, which was developed by TomMeta of
 Meta7. This allows scripts to set WindLight parameters for clients connecting
 to a region. Currently, this is only supported by the Meta7 viewer.

---
 OpenSim/Client/MXP/ClientStack/MXPClientView.cs    |   2 +-
 .../Sirikata/ClientStack/SirikataClientView.cs     |   2 +-
 .../Client/VWoHTTP/ClientStack/VWHClientView.cs    |   2 +-
 OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs        |  13 +-
 OpenSim/Data/MySQL/MySQLLegacyRegionData.cs        | 199 ++++++++++++++
 OpenSim/Data/Null/NullDataStore.cs                 |  11 +-
 OpenSim/Data/SQLite/SQLiteRegionData.cs            |  13 +-
 OpenSim/Framework/IClientAPI.cs                    |   2 +-
 OpenSim/Framework/RegionInfo.cs                    | 305 ++++++++++++++++++++-
 .../Region/ClientStack/LindenUDP/LLClientView.cs   |   7 +-
 .../Region/Examples/SimpleModule/MyNpcCharacter.cs |   2 +-
 .../Framework/Interfaces/IRegionDataStore.cs       |   2 +
 OpenSim/Region/Framework/Scenes/EventManager.cs    |  24 +-
 OpenSim/Region/Framework/Scenes/Scene.cs           |  13 +
 .../Region/Framework/Scenes/Tests/SceneTests.cs    |  11 +-
 .../Server/IRCClientView.cs                        |   2 +-
 .../Region/OptionalModules/World/NPC/NPCAvatar.cs  |   2 +-
 ...nSim.Region.ScriptEngine.Shared.Api.Runtime.mdp |   2 +
 OpenSim/Tests/Common/Mock/TestClient.cs            |   2 +-
 19 files changed, 597 insertions(+), 19 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
index 2dec72d..17bd795 100644
--- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
+++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
@@ -930,7 +930,7 @@ namespace OpenSim.Client.MXP.ClientStack
             // Need to translate to MXP somehow
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
             // Need to translate to MXP somehow
         }
diff --git a/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs b/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs
index 9cb2172..4ecbaf9 100644
--- a/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs
+++ b/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs
@@ -503,7 +503,7 @@ namespace OpenSim.Client.Sirikata.ClientStack
             throw new System.NotImplementedException();
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
             throw new System.NotImplementedException();
         }
diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
index a427dd3..1da746a 100644
--- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
+++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
@@ -509,7 +509,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
             throw new System.NotImplementedException();
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
             throw new System.NotImplementedException();
         }
diff --git a/OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs b/OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs
index c849f38..d6cb91f 100644
--- a/OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs
@@ -691,7 +691,16 @@ VALUES
                 cmd.ExecuteNonQuery();
             }
         }
-
+        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
+        {
+            //This connector doesn't support the windlight module yet
+            //Return default LL windlight settings
+            return new RegionLightShareData();
+        }
+        public void StoreRegionWindlightSettings(RegionLightShareData wl)
+        {
+            //This connector doesn't support the windlight module yet
+        }
         /// <summary>
         /// Loads the settings of a region.
         /// </summary>
@@ -718,7 +727,7 @@ VALUES
                 }
             }
 
-            //If comes here then there is now region setting for that region
+            //If we reach this point then there are new region settings for that region
             regionSettings = new RegionSettings();
             regionSettings.RegionUUID = regionUUID;
             regionSettings.OnSave += StoreRegionSettings;
diff --git a/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs b/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
index a06eec3..a395ddc 100644
--- a/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
+++ b/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
@@ -711,6 +711,102 @@ namespace OpenSim.Data.MySQL
             }
         }
 
+        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
+        {
+            RegionLightShareData nWP = new RegionLightShareData();
+            nWP.OnSave += StoreRegionWindlightSettings;
+
+            using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+            {
+                dbcon.Open();
+
+                string command = "select * from `regionwindlight` where region_id = ?regionID";
+
+                using(MySqlCommand cmd = new MySqlCommand(command))
+                {
+                    cmd.Connection = dbcon;
+
+                    cmd.Parameters.AddWithValue("?regionID", regionUUID.ToString());
+
+                    IDataReader result = ExecuteReader(cmd);
+                    if (!result.Read())
+                    {
+                        //No result, so store our default windlight profile and return it
+                        nWP.regionID = regionUUID;
+                        StoreRegionWindlightSettings(nWP);
+                        return nWP;
+                    }
+                    else
+                    {
+                        UUID.TryParse(result["region_id"].ToString(), out nWP.regionID);
+                        nWP.waterColor.X = Convert.ToSingle(result["water_color_r"]);
+                        nWP.waterColor.Y = Convert.ToSingle(result["water_color_g"]);
+                        nWP.waterColor.Z = Convert.ToSingle(result["water_color_b"]);
+                        nWP.waterFogDensityExponent = Convert.ToSingle(result["water_fog_density_exponent"]);
+                        nWP.underwaterFogModifier = Convert.ToSingle(result["underwater_fog_modifier"]);
+                        nWP.reflectionWaveletScale.X = Convert.ToSingle(result["reflection_wavelet_scale_1"]);
+                        nWP.reflectionWaveletScale.Y = Convert.ToSingle(result["reflection_wavelet_scale_2"]);
+                        nWP.reflectionWaveletScale.Z = Convert.ToSingle(result["reflection_wavelet_scale_3"]);
+                        nWP.fresnelScale = Convert.ToSingle(result["fresnel_scale"]);
+                        nWP.fresnelOffset = Convert.ToSingle(result["fresnel_offset"]);
+                        nWP.refractScaleAbove = Convert.ToSingle(result["refract_scale_above"]);
+                        nWP.refractScaleBelow = Convert.ToSingle(result["refract_scale_below"]);
+                        nWP.blurMultiplier = Convert.ToSingle(result["blur_multiplier"]);
+                        nWP.bigWaveDirection.X = Convert.ToSingle(result["big_wave_direction_x"]);
+                        nWP.bigWaveDirection.Y = Convert.ToSingle(result["big_wave_direction_y"]);
+                        nWP.littleWaveDirection.X = Convert.ToSingle(result["little_wave_direction_x"]);
+                        nWP.littleWaveDirection.Y = Convert.ToSingle(result["little_wave_direction_y"]);
+                        UUID.TryParse(result["normal_map_texture"].ToString(), out nWP.normalMapTexture);
+                        nWP.horizon.X = Convert.ToSingle(result["horizon_r"]);
+                        nWP.horizon.Y = Convert.ToSingle(result["horizon_g"]);
+                        nWP.horizon.Z = Convert.ToSingle(result["horizon_b"]);
+                        nWP.horizon.W = Convert.ToSingle(result["horizon_i"]);
+                        nWP.hazeHorizon = Convert.ToSingle(result["haze_horizon"]);
+                        nWP.blueDensity.X = Convert.ToSingle(result["blue_density_r"]);
+                        nWP.blueDensity.Y = Convert.ToSingle(result["blue_density_g"]);
+                        nWP.blueDensity.Z = Convert.ToSingle(result["blue_density_b"]);
+                        nWP.blueDensity.W = Convert.ToSingle(result["blue_density_i"]);
+                        nWP.hazeDensity = Convert.ToSingle(result["haze_density"]);
+                        nWP.densityMultiplier = Convert.ToSingle(result["density_multiplier"]);
+                        nWP.distanceMultiplier = Convert.ToSingle(result["distance_multiplier"]);
+                        nWP.maxAltitude = Convert.ToUInt16(result["max_altitude"]);
+                        nWP.sunMoonColor.X = Convert.ToSingle(result["sun_moon_color_r"]);
+                        nWP.sunMoonColor.Y = Convert.ToSingle(result["sun_moon_color_g"]);
+                        nWP.sunMoonColor.Z = Convert.ToSingle(result["sun_moon_color_b"]);
+                        nWP.sunMoonColor.W = Convert.ToSingle(result["sun_moon_color_i"]);
+                        nWP.sunMoonPosition = Convert.ToSingle(result["sun_moon_position"]);
+                        nWP.ambient.X = Convert.ToSingle(result["ambient_r"]);
+                        nWP.ambient.Y = Convert.ToSingle(result["ambient_g"]);
+                        nWP.ambient.Z = Convert.ToSingle(result["ambient_b"]);
+                        nWP.ambient.W = Convert.ToSingle(result["ambient_i"]);
+                        nWP.eastAngle = Convert.ToSingle(result["east_angle"]);
+                        nWP.sunGlowFocus = Convert.ToSingle(result["sun_glow_focus"]);
+                        nWP.sunGlowSize = Convert.ToSingle(result["sun_glow_size"]);
+                        nWP.sceneGamma = Convert.ToSingle(result["scene_gamma"]);
+                        nWP.starBrightness = Convert.ToSingle(result["star_brightness"]);
+                        nWP.cloudColor.X = Convert.ToSingle(result["cloud_color_r"]);
+                        nWP.cloudColor.Y = Convert.ToSingle(result["cloud_color_g"]);
+                        nWP.cloudColor.Z = Convert.ToSingle(result["cloud_color_b"]);
+                        nWP.cloudColor.W = Convert.ToSingle(result["cloud_color_i"]);
+                        nWP.cloudXYDensity.X = Convert.ToSingle(result["cloud_x"]);
+                        nWP.cloudXYDensity.Y = Convert.ToSingle(result["cloud_y"]);
+                        nWP.cloudXYDensity.Z = Convert.ToSingle(result["cloud_density"]);
+                        nWP.cloudCoverage = Convert.ToSingle(result["cloud_coverage"]);
+                        nWP.cloudScale = Convert.ToSingle(result["cloud_scale"]);
+                        nWP.cloudDetailXYDensity.X = Convert.ToSingle(result["cloud_detail_x"]);
+                        nWP.cloudDetailXYDensity.Y = Convert.ToSingle(result["cloud_detail_y"]);
+                        nWP.cloudDetailXYDensity.Z = Convert.ToSingle(result["cloud_detail_density"]);
+                        nWP.cloudScrollX = Convert.ToSingle(result["cloud_scroll_x"]);
+                        nWP.cloudScrollXLock = Convert.ToBoolean(result["cloud_scroll_x_lock"]);
+                        nWP.cloudScrollY = Convert.ToSingle(result["cloud_scroll_y"]);
+                        nWP.cloudScrollYLock = Convert.ToBoolean(result["cloud_scroll_y_lock"]);
+                        nWP.drawClassicClouds = Convert.ToBoolean(result["draw_classic_clouds"]);
+                    }
+                }
+            }
+            return nWP;
+        }
+
         public RegionSettings LoadRegionSettings(UUID regionUUID)
         {
             RegionSettings rs = null;
@@ -749,6 +845,109 @@ namespace OpenSim.Data.MySQL
             return rs;
         }
 
+        public void StoreRegionWindlightSettings(RegionLightShareData wl)
+        {
+            using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+            {
+                dbcon.Open();
+
+                using (MySqlCommand cmd = dbcon.CreateCommand())
+                {
+                    cmd.CommandText = "REPLACE INTO `regionwindlight` (`region_id`, `water_color_r`, `water_color_g`, ";
+                    cmd.CommandText += "`water_color_b`, `water_fog_density_exponent`, `underwater_fog_modifier`, ";
+                    cmd.CommandText += "`reflection_wavelet_scale_1`, `reflection_wavelet_scale_2`, `reflection_wavelet_scale_3`, ";
+                    cmd.CommandText += "`fresnel_scale`, `fresnel_offset`, `refract_scale_above`, `refract_scale_below`, ";
+                    cmd.CommandText += "`blur_multiplier`, `big_wave_direction_x`, `big_wave_direction_y`, `little_wave_direction_x`, ";
+                    cmd.CommandText += "`little_wave_direction_y`, `normal_map_texture`, `horizon_r`, `horizon_g`, `horizon_b`, ";
+                    cmd.CommandText += "`horizon_i`, `haze_horizon`, `blue_density_r`, `blue_density_g`, `blue_density_b`, ";
+                    cmd.CommandText += "`blue_density_i`, `haze_density`, `density_multiplier`, `distance_multiplier`, `max_altitude`, ";
+                    cmd.CommandText += "`sun_moon_color_r`, `sun_moon_color_g`, `sun_moon_color_b`, `sun_moon_color_i`, `sun_moon_position`, ";
+                    cmd.CommandText += "`ambient_r`, `ambient_g`, `ambient_b`, `ambient_i`, `east_angle`, `sun_glow_focus`, `sun_glow_size`, ";
+                    cmd.CommandText += "`scene_gamma`, `star_brightness`, `cloud_color_r`, `cloud_color_g`, `cloud_color_b`, `cloud_color_i`, ";
+                    cmd.CommandText += "`cloud_x`, `cloud_y`, `cloud_density`, `cloud_coverage`, `cloud_scale`, `cloud_detail_x`, ";
+                    cmd.CommandText += "`cloud_detail_y`, `cloud_detail_density`, `cloud_scroll_x`, `cloud_scroll_x_lock`, `cloud_scroll_y`, ";
+                    cmd.CommandText += "`cloud_scroll_y_lock`, `draw_classic_clouds`) VALUES (?region_id, ?water_color_r, ";
+                    cmd.CommandText += "?water_color_g, ?water_color_b, ?water_fog_density_exponent, ?underwater_fog_modifier, ?reflection_wavelet_scale_1, ";
+                    cmd.CommandText += "?reflection_wavelet_scale_2, ?reflection_wavelet_scale_3, ?fresnel_scale, ?fresnel_offset, ?refract_scale_above, ";
+                    cmd.CommandText += "?refract_scale_below, ?blur_multiplier, ?big_wave_direction_x, ?big_wave_direction_y, ?little_wave_direction_x, ";
+                    cmd.CommandText += "?little_wave_direction_y, ?normal_map_texture, ?horizon_r, ?horizon_g, ?horizon_b, ?horizon_i, ?haze_horizon, ";
+                    cmd.CommandText += "?blue_density_r, ?blue_density_g, ?blue_density_b, ?blue_density_i, ?haze_density, ?density_multiplier, ";
+                    cmd.CommandText += "?distance_multiplier, ?max_altitude, ?sun_moon_color_r, ?sun_moon_color_g, ?sun_moon_color_b, ";
+                    cmd.CommandText += "?sun_moon_color_i, ?sun_moon_position, ?ambient_r, ?ambient_g, ?ambient_b, ?ambient_i, ?east_angle, ";
+                    cmd.CommandText += "?sun_glow_focus, ?sun_glow_size, ?scene_gamma, ?star_brightness, ?cloud_color_r, ?cloud_color_g, ";
+                    cmd.CommandText += "?cloud_color_b, ?cloud_color_i, ?cloud_x, ?cloud_y, ?cloud_density, ?cloud_coverage, ?cloud_scale, ";
+                    cmd.CommandText += "?cloud_detail_x, ?cloud_detail_y, ?cloud_detail_density, ?cloud_scroll_x, ?cloud_scroll_x_lock, ";
+                    cmd.CommandText += "?cloud_scroll_y, ?cloud_scroll_y_lock, ?draw_classic_clouds)";
+
+                    cmd.Parameters.AddWithValue("region_id", wl.regionID);
+                    cmd.Parameters.AddWithValue("water_color_r", wl.waterColor.X);
+                    cmd.Parameters.AddWithValue("water_color_g", wl.waterColor.Y);
+                    cmd.Parameters.AddWithValue("water_color_b", wl.waterColor.Z);
+                    cmd.Parameters.AddWithValue("water_fog_density_exponent", wl.waterFogDensityExponent);
+                    cmd.Parameters.AddWithValue("underwater_fog_modifier", wl.underwaterFogModifier);
+                    cmd.Parameters.AddWithValue("reflection_wavelet_scale_1", wl.reflectionWaveletScale.X);
+                    cmd.Parameters.AddWithValue("reflection_wavelet_scale_2", wl.reflectionWaveletScale.Y);
+                    cmd.Parameters.AddWithValue("reflection_wavelet_scale_3", wl.reflectionWaveletScale.Z);
+                    cmd.Parameters.AddWithValue("fresnel_scale", wl.fresnelScale);
+                    cmd.Parameters.AddWithValue("fresnel_offset", wl.fresnelOffset);
+                    cmd.Parameters.AddWithValue("refract_scale_above", wl.refractScaleAbove);
+                    cmd.Parameters.AddWithValue("refract_scale_below", wl.refractScaleBelow);
+                    cmd.Parameters.AddWithValue("blur_multiplier", wl.blurMultiplier);
+                    cmd.Parameters.AddWithValue("big_wave_direction_x", wl.bigWaveDirection.X);
+                    cmd.Parameters.AddWithValue("big_wave_direction_y", wl.bigWaveDirection.Y);
+                    cmd.Parameters.AddWithValue("little_wave_direction_x", wl.littleWaveDirection.X);
+                    cmd.Parameters.AddWithValue("little_wave_direction_y", wl.littleWaveDirection.Y);
+                    cmd.Parameters.AddWithValue("normal_map_texture", wl.normalMapTexture);
+                    cmd.Parameters.AddWithValue("horizon_r", wl.horizon.X);
+                    cmd.Parameters.AddWithValue("horizon_g", wl.horizon.Y);
+                    cmd.Parameters.AddWithValue("horizon_b", wl.horizon.Z);
+                    cmd.Parameters.AddWithValue("horizon_i", wl.horizon.W);
+                    cmd.Parameters.AddWithValue("haze_horizon", wl.hazeHorizon);
+                    cmd.Parameters.AddWithValue("blue_density_r", wl.blueDensity.X);
+                    cmd.Parameters.AddWithValue("blue_density_g", wl.blueDensity.Y);
+                    cmd.Parameters.AddWithValue("blue_density_b", wl.blueDensity.Z);
+                    cmd.Parameters.AddWithValue("blue_density_i", wl.blueDensity.W);
+                    cmd.Parameters.AddWithValue("haze_density", wl.hazeDensity);
+                    cmd.Parameters.AddWithValue("density_multiplier", wl.densityMultiplier);
+                    cmd.Parameters.AddWithValue("distance_multiplier", wl.distanceMultiplier);
+                    cmd.Parameters.AddWithValue("max_altitude", wl.maxAltitude);
+                    cmd.Parameters.AddWithValue("sun_moon_color_r", wl.sunMoonColor.X);
+                    cmd.Parameters.AddWithValue("sun_moon_color_g", wl.sunMoonColor.Y);
+                    cmd.Parameters.AddWithValue("sun_moon_color_b", wl.sunMoonColor.Z);
+                    cmd.Parameters.AddWithValue("sun_moon_color_i", wl.sunMoonColor.W);
+                    cmd.Parameters.AddWithValue("sun_moon_position", wl.sunMoonPosition);
+                    cmd.Parameters.AddWithValue("ambient_r", wl.ambient.X);
+                    cmd.Parameters.AddWithValue("ambient_g", wl.ambient.Y);
+                    cmd.Parameters.AddWithValue("ambient_b", wl.ambient.Z);
+                    cmd.Parameters.AddWithValue("ambient_i", wl.ambient.W);
+                    cmd.Parameters.AddWithValue("east_angle", wl.eastAngle);
+                    cmd.Parameters.AddWithValue("sun_glow_focus", wl.sunGlowFocus);
+                    cmd.Parameters.AddWithValue("sun_glow_size", wl.sunGlowSize);
+                    cmd.Parameters.AddWithValue("scene_gamma", wl.sceneGamma);
+                    cmd.Parameters.AddWithValue("star_brightness", wl.starBrightness);
+                    cmd.Parameters.AddWithValue("cloud_color_r", wl.cloudColor.X);
+                    cmd.Parameters.AddWithValue("cloud_color_g", wl.cloudColor.Y);
+                    cmd.Parameters.AddWithValue("cloud_color_b", wl.cloudColor.Z);
+                    cmd.Parameters.AddWithValue("cloud_color_i", wl.cloudColor.W);
+                    cmd.Parameters.AddWithValue("cloud_x", wl.cloudXYDensity.X);
+                    cmd.Parameters.AddWithValue("cloud_y", wl.cloudXYDensity.Y);
+                    cmd.Parameters.AddWithValue("cloud_density", wl.cloudXYDensity.Z);
+                    cmd.Parameters.AddWithValue("cloud_coverage", wl.cloudCoverage);
+                    cmd.Parameters.AddWithValue("cloud_scale", wl.cloudScale);
+                    cmd.Parameters.AddWithValue("cloud_detail_x", wl.cloudDetailXYDensity.X);
+                    cmd.Parameters.AddWithValue("cloud_detail_y", wl.cloudDetailXYDensity.Y);
+                    cmd.Parameters.AddWithValue("cloud_detail_density", wl.cloudDetailXYDensity.Z);
+                    cmd.Parameters.AddWithValue("cloud_scroll_x", wl.cloudScrollX);
+                    cmd.Parameters.AddWithValue("cloud_scroll_x_lock", wl.cloudScrollXLock);
+                    cmd.Parameters.AddWithValue("cloud_scroll_y", wl.cloudScrollY);
+                    cmd.Parameters.AddWithValue("cloud_scroll_y_lock", wl.cloudScrollYLock);
+                    cmd.Parameters.AddWithValue("draw_classic_clouds", wl.drawClassicClouds);
+                    
+                    ExecuteNonQuery(cmd);
+                }
+            }
+        }
+
         public void StoreRegionSettings(RegionSettings rs)
         {
             lock (m_dbLock)
diff --git a/OpenSim/Data/Null/NullDataStore.cs b/OpenSim/Data/Null/NullDataStore.cs
index 427fa0a..3ba44bb 100644
--- a/OpenSim/Data/Null/NullDataStore.cs
+++ b/OpenSim/Data/Null/NullDataStore.cs
@@ -50,7 +50,16 @@ namespace OpenSim.Data.Null
         public void StoreRegionSettings(RegionSettings rs)
         {
         }
-
+        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
+        {
+            //This connector doesn't support the windlight module yet
+            //Return default LL windlight settings
+            return new RegionLightShareData();
+        }
+        public void StoreRegionWindlightSettings(RegionLightShareData wl)
+        {
+            //This connector doesn't support the windlight module yet
+        }
         public RegionSettings LoadRegionSettings(UUID regionUUID)
         {
             return null;
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs
index 5a4ee2a..d2ba9ae 100644
--- a/OpenSim/Data/SQLite/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs
@@ -272,7 +272,16 @@ namespace OpenSim.Data.SQLite
                 Commit();
             }
         }
-
+        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
+        {
+            //This connector doesn't support the windlight module yet
+            //Return default LL windlight settings
+            return new RegionLightShareData();
+        }
+        public void StoreRegionWindlightSettings(RegionLightShareData wl)
+        {
+            //This connector doesn't support the windlight module yet
+        }
         public RegionSettings LoadRegionSettings(UUID regionUUID)
         {
             lock (ds)
@@ -320,7 +329,7 @@ namespace OpenSim.Data.SQLite
             {
                 foreach (SceneObjectPart prim in obj.Children.Values)
                 {
-                    m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
+//                    m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
                     addPrim(prim, obj.UUID, regionUUID);
                 }
             }
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 4f6f709..4577758 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -1150,7 +1150,7 @@ namespace OpenSim.Framework
 
         void SendInstantMessage(GridInstantMessage im);
 
-        void SendGenericMessage(string method, List<string> message);
+        void SendGenericMessage(string method, List<byte[]> message);
 
         void SendLayerData(float[] map);
         void SendLayerData(int px, int py, float[] map);
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 5d63da7..5eacd73 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -36,8 +36,295 @@ using OpenMetaverse;
 using OpenMetaverse.StructuredData;
 using OpenSim.Framework.Console;
 
+
 namespace OpenSim.Framework
-{
+{
+    public class RegionLightShareData : ICloneable
+    {
+        public UUID regionID = UUID.Zero;
+        public Vector3 waterColor = new Vector3(4.0f,38.0f,64.0f);
+        public float waterFogDensityExponent = 4.0f;
+        public float underwaterFogModifier = 0.25f;
+        public Vector3 reflectionWaveletScale = new Vector3(2.0f,2.0f,2.0f);
+        public float fresnelScale = 0.40f;
+        public float fresnelOffset = 0.50f;
+        public float refractScaleAbove = 0.03f;
+        public float refractScaleBelow = 0.20f;
+        public float blurMultiplier = 0.040f;
+        public Vector2 bigWaveDirection = new Vector2(1.05f,-0.42f);
+        public Vector2 littleWaveDirection = new Vector2(1.11f,-1.16f);
+        public UUID normalMapTexture = new UUID("822ded49-9a6c-f61c-cb89-6df54f42cdf4");
+        public Vector4 horizon = new Vector4(0.25f, 0.25f, 0.32f, 0.32f);
+        public float hazeHorizon = 0.19f;
+        public Vector4 blueDensity = new Vector4(0.12f, 0.22f, 0.38f, 0.38f);
+        public float hazeDensity = 0.70f;
+        public float densityMultiplier = 0.18f;
+        public float distanceMultiplier = 0.8f;
+        public UInt16 maxAltitude = 1605;
+        public Vector4 sunMoonColor = new Vector4(0.24f, 0.26f, 0.30f, 0.30f);
+        public float sunMoonPosition = 0.317f;
+        public Vector4 ambient = new Vector4(0.35f,0.35f,0.35f,0.35f);
+        public float eastAngle = 0.0f;
+        public float sunGlowFocus = 0.10f;
+        public float sunGlowSize = 1.75f;
+        public float sceneGamma = 1.0f;
+        public float starBrightness = 0.0f;
+        public Vector4 cloudColor = new Vector4(0.41f, 0.41f, 0.41f, 0.41f);
+        public Vector3 cloudXYDensity = new Vector3(1.00f, 0.53f, 1.00f);
+        public float cloudCoverage = 0.27f;
+        public float cloudScale = 0.42f;
+        public Vector3 cloudDetailXYDensity = new Vector3(1.00f, 0.53f, 0.12f);
+        public float cloudScrollX = 0.20f;
+        public bool cloudScrollXLock = false;
+        public float cloudScrollY = 0.01f;
+        public bool cloudScrollYLock = false;
+        public bool drawClassicClouds = true;
+
+        public delegate void SaveDelegate(RegionLightShareData wl);
+        public event SaveDelegate OnSave;
+        public void Save()
+        {
+            if (OnSave != null)
+                OnSave(this);
+        }
+        public object Clone()
+        {
+            return this.MemberwiseClone();      // call clone method
+        }
+
+    }
+
+    [Serializable]
+    public class SimpleRegionInfo
+    {
+        // private static readonly log4net.ILog m_log
+        //     = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+        /// <summary>
+        /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
+        /// </summary>
+        public uint HttpPort
+        {
+            get { return m_httpPort; }
+            set { m_httpPort = value; }
+        }
+        protected uint m_httpPort;
+
+        /// <summary>
+        /// A well-formed URI for the host region server (namely "http://" + ExternalHostName)
+        /// </summary>
+        public string ServerURI
+        {
+            get { return m_serverURI; }
+            set { m_serverURI = value; }
+        }
+        protected string m_serverURI;
+
+        public string RegionName
+        {
+            get { return m_regionName; }
+            set { m_regionName = value; }
+        }
+        protected string m_regionName = String.Empty;
+
+        protected bool Allow_Alternate_Ports;
+        public bool m_allow_alternate_ports;
+        protected string m_externalHostName;
+
+        protected IPEndPoint m_internalEndPoint;
+        protected uint? m_regionLocX;
+        protected uint? m_regionLocY;
+        protected uint m_remotingPort;
+        public UUID RegionID = UUID.Zero;
+        public string RemotingAddress;
+        public UUID ScopeID = UUID.Zero;
+
+        public SimpleRegionInfo()
+        {
+        }
+
+        public SimpleRegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri)
+        {
+            m_regionLocX = regionLocX;
+            m_regionLocY = regionLocY;
+
+            m_internalEndPoint = internalEndPoint;
+            m_externalHostName = externalUri;
+        }
+
+        public SimpleRegionInfo(uint regionLocX, uint regionLocY, string externalUri, uint port)
+        {
+            m_regionLocX = regionLocX;
+            m_regionLocY = regionLocY;
+
+            m_externalHostName = externalUri;
+
+            m_internalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int) port);
+        }
+
+        public SimpleRegionInfo(RegionInfo ConvertFrom)
+        {
+            m_regionName = ConvertFrom.RegionName;
+            m_regionLocX = ConvertFrom.RegionLocX;
+            m_regionLocY = ConvertFrom.RegionLocY;
+            m_internalEndPoint = ConvertFrom.InternalEndPoint;
+            m_externalHostName = ConvertFrom.ExternalHostName;
+            m_remotingPort = ConvertFrom.RemotingPort;
+            m_httpPort = ConvertFrom.HttpPort;
+            m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
+            RemotingAddress = ConvertFrom.RemotingAddress;
+            RegionID = UUID.Zero;
+            ServerURI = ConvertFrom.ServerURI;
+        }
+
+        public uint RemotingPort
+        {
+            get { return m_remotingPort; }
+            set { m_remotingPort = value; }
+        }
+
+        /// <value>
+        /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw.
+        ///
+        /// XXX Isn't this really doing too much to be a simple getter, rather than an explict method?
+        /// </value>
+        public IPEndPoint ExternalEndPoint
+        {
+            get
+            {
+                // Old one defaults to IPv6
+                //return new IPEndPoint(Dns.GetHostAddresses(m_externalHostName)[0], m_internalEndPoint.Port);
+
+                IPAddress ia = null;
+                // If it is already an IP, don't resolve it - just return directly
+                if (IPAddress.TryParse(m_externalHostName, out ia))
+                    return new IPEndPoint(ia, m_internalEndPoint.Port);
+
+                // Reset for next check
+                ia = null;
+                try
+                {
+                    foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName))
+                    {
+                        if (ia == null)
+                            ia = Adr;
+
+                        if (Adr.AddressFamily == AddressFamily.InterNetwork)
+                        {
+                            ia = Adr;
+                            break;
+                        }
+                    }
+                }
+                catch (SocketException e)
+                {
+                    throw new Exception(
+                        "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" +
+                        e + "' attached to this exception", e);
+                }
+
+                return new IPEndPoint(ia, m_internalEndPoint.Port);
+            }
+
+            set { m_externalHostName = value.ToString(); }
+        }
+
+        public string ExternalHostName
+        {
+            get { return m_externalHostName; }
+            set { m_externalHostName = value; }
+        }
+
+        public IPEndPoint InternalEndPoint
+        {
+            get { return m_internalEndPoint; }
+            set { m_internalEndPoint = value; }
+        }
+
+        public uint RegionLocX
+        {
+            get { return m_regionLocX.Value; }
+            set { m_regionLocX = value; }
+        }
+
+        public uint RegionLocY
+        {
+            get { return m_regionLocY.Value; }
+            set { m_regionLocY = value; }
+        }
+
+        public ulong RegionHandle
+        {
+            get { return Util.UIntsToLong((RegionLocX * (uint) Constants.RegionSize), (RegionLocY * (uint) Constants.RegionSize)); }
+        }
+
+        public int getInternalEndPointPort()
+        {
+            return m_internalEndPoint.Port;
+        }
+
+        public Dictionary<string, object> ToKeyValuePairs()
+        {
+            Dictionary<string, object> kvp = new Dictionary<string, object>();
+            kvp["uuid"] = RegionID.ToString();
+            kvp["locX"] = RegionLocX.ToString();
+            kvp["locY"] = RegionLocY.ToString();
+            kvp["external_ip_address"] = ExternalEndPoint.Address.ToString();
+            kvp["external_port"] = ExternalEndPoint.Port.ToString();
+            kvp["external_host_name"] = ExternalHostName;
+            kvp["http_port"] = HttpPort.ToString();
+            kvp["internal_ip_address"] = InternalEndPoint.Address.ToString();
+            kvp["internal_port"] = InternalEndPoint.Port.ToString();
+            kvp["alternate_ports"] = m_allow_alternate_ports.ToString();
+            kvp["server_uri"] = ServerURI;
+
+            return kvp;
+        }
+
+        public SimpleRegionInfo(Dictionary<string, object> kvp)
+        {
+            if ((kvp["external_ip_address"] != null) && (kvp["external_port"] != null))
+            {
+                int port = 0;
+                Int32.TryParse((string)kvp["external_port"], out port);
+                IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["external_ip_address"]), port);
+                ExternalEndPoint = ep;
+            }
+            else
+                ExternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
+
+            if (kvp["external_host_name"] != null)
+                ExternalHostName = (string)kvp["external_host_name"];
+
+            if (kvp["http_port"] != null)
+            {
+                UInt32 port = 0;
+                UInt32.TryParse((string)kvp["http_port"], out port);
+                HttpPort = port;
+            }
+
+            if ((kvp["internal_ip_address"] != null) && (kvp["internal_port"] != null))
+            {
+                int port = 0;
+                Int32.TryParse((string)kvp["internal_port"], out port);
+                IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["internal_ip_address"]), port);
+                InternalEndPoint = ep;
+            }
+            else
+                InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
+
+            if (kvp["alternate_ports"] != null)
+            {
+                bool alts = false;
+                Boolean.TryParse((string)kvp["alternate_ports"], out alts);
+                m_allow_alternate_ports = alts;
+            }
+
+            if (kvp["server_uri"] != null)
+                ServerURI = (string)kvp["server_uri"];
+        }
+    }
+
     public class RegionInfo
     {
         // private static readonly log4net.ILog m_log
@@ -69,6 +356,7 @@ namespace OpenSim.Framework
         private bool m_clampPrimSize = false;
         private int m_objectCapacity = 0;
         private string m_regionType = String.Empty;
+        private RegionLightShareData m_windlight = new RegionLightShareData();
         protected uint m_httpPort;
         protected string m_serverURI;
         protected string m_regionName = String.Empty;
@@ -207,6 +495,21 @@ namespace OpenSim.Framework
             set { m_regionSettings = value; }
         }
 
+        public RegionLightShareData WindlightSettings
+        {
+            get
+            {
+                if (m_windlight == null)
+                {
+                    m_windlight = new RegionLightShareData();
+                }
+
+                return m_windlight;
+            }
+
+            set { m_windlight = value; }
+        }
+
         public int NonphysPrimMax
         {
             get { return m_nonphysPrimMax; }
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 9ba99d6..25f6ef0 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -845,17 +845,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
             }
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
             GenericMessagePacket gmp = new GenericMessagePacket();
             gmp.MethodData.Method = Util.StringToBytes256(method);
             gmp.ParamList = new GenericMessagePacket.ParamListBlock[message.Count];
             int i = 0;
-            foreach (string val in message)
+            foreach (byte[] val in message)
             {
                 gmp.ParamList[i] = new GenericMessagePacket.ParamListBlock();
-                gmp.ParamList[i++].Parameter = Util.StringToBytes256(val);
+                gmp.ParamList[i++].Parameter = val;
             }
+
             OutPacket(gmp, ThrottleOutPacketType.Task);
         }
 
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index d052f38..8d27f9c 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -460,7 +460,7 @@ namespace OpenSim.Region.Examples.SimpleModule
             
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
 
         }
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs
index 78bd622..3e8e196 100644
--- a/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs
+++ b/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs
@@ -103,6 +103,8 @@ namespace OpenSim.Region.Framework.Interfaces
 
         void StoreRegionSettings(RegionSettings rs);
         RegionSettings LoadRegionSettings(UUID regionUUID);
+        RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID);
+        void StoreRegionWindlightSettings(RegionLightShareData wl);
 
         void Shutdown();
     }
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index dc9ae19..ef125cd 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -206,7 +206,11 @@ namespace OpenSim.Region.Framework.Scenes
         public event OnMakeChildAgentDelegate OnMakeChildAgent;
 
         public delegate void OnMakeRootAgentDelegate(ScenePresence presence);
+        public delegate void OnSaveNewWindlightProfileDelegate();
+        public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user);
         public event OnMakeRootAgentDelegate OnMakeRootAgent;
+        public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted;
+        public event OnSaveNewWindlightProfileDelegate OnSaveNewWindlightProfile;
 
         /// <summary>
         /// Triggered when an object or attachment enters a scene
@@ -1216,6 +1220,24 @@ namespace OpenSim.Region.Framework.Scenes
             }
         }
 
+        public void TriggerOnSendNewWindlightProfileTargeted(RegionLightShareData wl, UUID user)
+        {
+            OnSendNewWindlightProfileTargetedDelegate handlerSendNewWindlightProfileTargeted = OnSendNewWindlightProfileTargeted;
+            if (handlerSendNewWindlightProfileTargeted != null)
+            {
+                handlerSendNewWindlightProfileTargeted(wl, user);
+            }
+        }
+
+        public void TriggerOnSaveNewWindlightProfile()
+        {
+            OnSaveNewWindlightProfileDelegate handlerSaveNewWindlightProfile = OnSaveNewWindlightProfile;
+            if (handlerSaveNewWindlightProfile != null)
+            {
+                handlerSaveNewWindlightProfile();
+            }
+        }
+
         public void TriggerOnMakeRootAgent(ScenePresence presence)
         {
             OnMakeRootAgentDelegate handlerMakeRootAgent = OnMakeRootAgent;
@@ -1992,4 +2014,4 @@ namespace OpenSim.Region.Framework.Scenes
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 0085df3..fc915a3 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1715,6 +1715,19 @@ namespace OpenSim.Region.Framework.Scenes
             m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID);
         }
 
+        public void StoreWindlightProfile(RegionLightShareData wl)
+        {
+            m_regInfo.WindlightSettings = wl;
+            m_storageManager.DataStore.StoreRegionWindlightSettings(wl);
+            m_eventManager.TriggerOnSaveNewWindlightProfile();
+        }
+
+        public void LoadWindlightProfile()
+        {
+            m_regInfo.WindlightSettings = m_storageManager.DataStore.LoadRegionWindlightSettings(RegionInfo.RegionID);
+            m_eventManager.TriggerOnSaveNewWindlightProfile();
+        }
+
         /// <summary>
         /// Loads the World heightmap
         /// </summary>
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneTests.cs
index c77220c..8b2d387 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneTests.cs
@@ -101,7 +101,16 @@ namespace OpenSim.Region.Framework.Scenes.Tests
                 {
                     throw new NotImplementedException();
                 }
-
+                public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
+                {
+                    //This connector doesn't support the windlight module yet
+                    //Return default LL windlight settings
+                    return new RegionLightShareData();
+                }
+                public void StoreRegionWindlightSettings(RegionLightShareData wl)
+                {
+                    //This connector doesn't support the windlight module yet
+                }
                 public RegionSettings LoadRegionSettings(UUID regionUUID)
                 {
                     return null;
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index 1885946..f5b148f 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -964,7 +964,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
             // TODO
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
             
         }
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 77958eb..338c04b 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -550,7 +550,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
             
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
 
         }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp
index 98bbc68..23138ef 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp
@@ -17,6 +17,8 @@
     <excludeFiles />
   </DeploymentInformation>
   <Contents>
+    <File name="./CM_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
+    <File name="./CM_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name="./Executor.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name="./LSL_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name="./LSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index 5fff279..f015db2 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -518,7 +518,7 @@ namespace OpenSim.Tests.Common.Mock
 
         }
 
-        public void SendGenericMessage(string method, List<string> message)
+        public void SendGenericMessage(string method, List<byte[]> message)
         {
 
         }
-- 
cgit v1.1


From 19ae5e5dbb3ae12907305a7fad4cd2f4952ae94c Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 31 Mar 2010 04:23:51 +0100
Subject: Adding the LightShare module and scripting API. This code was written
 by TomMeta and was contributed by Meta7.

---
 .../CoreModules/LightShare/LightShareModule.cs     | 274 ++++++++++++
 .../Shared/Api/Implementation/CM_Api.cs            | 477 +++++++++++++++++++++
 .../ScriptEngine/Shared/Api/Interface/ICM_Api.cs   |  21 +
 .../Shared/Api/Runtime/CM_Constants.cs             |  77 ++++
 .../ScriptEngine/Shared/Api/Runtime/CM_Stub.cs     |  76 ++++
 5 files changed, 925 insertions(+)
 create mode 100644 OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
 create mode 100644 OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs
 create mode 100644 OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
 create mode 100644 OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs
 create mode 100644 OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs

(limited to 'OpenSim')

diff --git a/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
new file mode 100644
index 0000000..77d6e9a
--- /dev/null
+++ b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
@@ -0,0 +1,274 @@
+/*
+ * Copyright (c) Thomas Grimshaw and Magne Metaverse Research
+ *  
+ * This module is not open source. All rights reserved.
+ * Unauthorised copying, distribution or public display is prohibited.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using OpenMetaverse;
+using log4net;
+using Nini.Config;
+using OpenSim.Data;
+using OpenSim.Framework;
+using OpenSim.Region.CoreModules.Framework.InterfaceCommander;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+
+
+namespace OpenSim.Region.CoreModules.World.LightShare
+{
+    public class LightShareModule : IRegionModule, ICommandableModule
+    {
+        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+        private readonly Commander m_commander = new Commander("windlight");
+        private Scene m_scene;
+        private static bool m_enableWindlight;
+
+        #region ICommandableModule Members
+
+        public ICommander CommandInterface
+        {
+            get { return m_commander; }
+        }
+
+        #endregion
+
+        #region IRegionModule Members
+
+        public static bool EnableWindlight
+        {
+            get
+            {
+                return m_enableWindlight;
+            }
+            set
+            {
+            }
+        }
+
+        public void Initialise(Scene scene, IConfigSource config)
+        {
+            m_scene = scene;
+            m_scene.RegisterModuleInterface<IRegionModule>(this);
+            m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
+            
+            // ini file settings
+            try
+            {
+                m_enableWindlight = config.Configs["LightShare"].GetBoolean("enable_windlight", false);
+            }
+            catch (Exception)
+            {
+                m_log.Debug("[WINDLIGHT]: ini failure for enable_windlight - using default");
+            }
+
+            if (m_enableWindlight)
+            {
+                m_scene.EventManager.OnMakeRootAgent += EventManager_OnMakeRootAgent;
+                m_scene.EventManager.OnSaveNewWindlightProfile += EventManager_OnSaveNewWindlightProfile;
+                m_scene.EventManager.OnSendNewWindlightProfileTargeted += EventManager_OnSendNewWindlightProfileTargeted;
+            }
+
+            InstallCommands();
+
+            m_log.Debug("[WINDLIGHT]: Initialised windlight module");
+        }
+
+        private List<byte[]> compileWindlightSettings(RegionLightShareData wl)
+        {
+            byte[] mBlock = new Byte[249];
+            int pos = 0;
+
+            wl.waterColor.ToBytes(mBlock, 0); pos += 12;
+            Utils.FloatToBytes(wl.waterFogDensityExponent).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.underwaterFogModifier).CopyTo(mBlock, pos); pos += 4;
+            wl.reflectionWaveletScale.ToBytes(mBlock, pos); pos += 12;
+            Utils.FloatToBytes(wl.fresnelScale).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.fresnelOffset).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.refractScaleAbove).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.refractScaleBelow).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.blurMultiplier).CopyTo(mBlock, pos); pos += 4;
+            wl.bigWaveDirection.ToBytes(mBlock, pos); pos += 8;
+            wl.littleWaveDirection.ToBytes(mBlock, pos); pos += 8;
+            wl.normalMapTexture.ToBytes(mBlock, pos); pos += 16;
+            wl.horizon.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.hazeHorizon).CopyTo(mBlock, pos); pos += 4;
+            wl.blueDensity.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.hazeDensity).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.densityMultiplier).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.distanceMultiplier).CopyTo(mBlock, pos); pos += 4;
+            wl.sunMoonColor.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.sunMoonPosition).CopyTo(mBlock, pos); pos += 4;
+            wl.ambient.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.eastAngle).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.sunGlowFocus).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.sunGlowSize).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.sceneGamma).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.starBrightness).CopyTo(mBlock, pos); pos += 4;
+            wl.cloudColor.ToBytes(mBlock, pos); pos += 16;
+            wl.cloudXYDensity.ToBytes(mBlock, pos); pos += 12;
+            Utils.FloatToBytes(wl.cloudCoverage).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.cloudScale).CopyTo(mBlock, pos); pos += 4;
+            wl.cloudDetailXYDensity.ToBytes(mBlock, pos); pos += 12;
+            Utils.FloatToBytes(wl.cloudScrollX).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.cloudScrollY).CopyTo(mBlock, pos); pos += 4;
+            Utils.UInt16ToBytes(wl.maxAltitude).CopyTo(mBlock, pos); pos += 2;
+            mBlock[pos] = Convert.ToByte(wl.cloudScrollXLock); pos++;
+            mBlock[pos] = Convert.ToByte(wl.cloudScrollYLock); pos++;
+            mBlock[pos] = Convert.ToByte(wl.drawClassicClouds); pos++;
+            List<byte[]> param = new List<byte[]>();
+            param.Add(mBlock);
+            return param;
+        }
+        public void SendProfileToClient(ScenePresence presence)
+        {
+            IClientAPI client = presence.ControllingClient;
+            if (m_enableWindlight)
+            {
+                if (presence.IsChildAgent == false)
+                {
+                    List<byte[]> param = compileWindlightSettings(m_scene.RegionInfo.WindlightSettings);
+                    client.SendGenericMessage("Windlight", param);
+                }
+            }
+            else
+            {
+                //We probably don't want to spam chat with this.. probably
+                //m_log.Debug("[WINDLIGHT]: Module disabled");
+            }
+        }
+        public void SendProfileToClient(ScenePresence presence, RegionLightShareData wl)
+        {
+            IClientAPI client = presence.ControllingClient;
+            if (m_enableWindlight)
+            {
+                if (presence.IsChildAgent == false)
+                {
+                    List<byte[]> param = compileWindlightSettings(wl);
+                    client.SendGenericMessage("Windlight", param);
+                }
+            }
+            else
+            {
+                //We probably don't want to spam chat with this.. probably
+                //m_log.Debug("[WINDLIGHT]: Module disabled");
+            }
+        }
+        private void EventManager_OnMakeRootAgent(ScenePresence presence)
+        {
+            m_log.Debug("[WINDLIGHT]: Sending windlight scene to new client");
+            SendProfileToClient(presence);
+        }
+        private void EventManager_OnSendNewWindlightProfileTargeted(RegionLightShareData wl, UUID pUUID)
+        {
+            ScenePresence Sc;
+            if (m_scene.TryGetScenePresence(pUUID,out Sc))
+            {
+                SendProfileToClient(Sc,wl);
+            }
+        }
+        private void EventManager_OnSaveNewWindlightProfile()
+        {
+            m_scene.ForEachScenePresence(SendProfileToClient);
+        }
+
+        public void PostInitialise()
+        {
+
+        }
+
+        public void Close()
+        {
+        }
+
+        public string Name
+        {
+            get { return "LightShareModule"; }
+        }
+
+        public bool IsSharedModule
+        {
+            get { return false; }
+        }
+
+        #endregion
+
+        #region events
+
+        #endregion
+
+        #region ICommandableModule Members
+
+        private void InstallCommands()
+        {
+            Command wlload = new Command("load", CommandIntentions.COMMAND_NON_HAZARDOUS, HandleLoad, "Load windlight profile from the database and broadcast");
+            Command wlenable = new Command("enable", CommandIntentions.COMMAND_NON_HAZARDOUS, HandleEnable, "Enable the windlight plugin");
+            Command wldisable = new Command("disable", CommandIntentions.COMMAND_NON_HAZARDOUS, HandleDisable, "Enable the windlight plugin");
+
+            m_commander.RegisterCommand("load", wlload);
+            m_commander.RegisterCommand("enable", wlenable);
+            m_commander.RegisterCommand("disable", wldisable);
+
+            m_scene.RegisterModuleCommander(m_commander);
+        }
+
+        private void HandleLoad(Object[] args)
+        {
+            if (!m_enableWindlight)
+            {
+                m_log.InfoFormat("[WINDLIGHT]: Cannot load windlight profile, module disabled. Use 'windlight enable' first.");
+            }
+            else
+            {
+                m_log.InfoFormat("[WINDLIGHT]: Loading Windlight profile from database");
+                m_scene.LoadWindlightProfile();
+                m_log.InfoFormat("[WINDLIGHT]: Load complete");
+            }
+        }
+
+        private void HandleDisable(Object[] args)
+        {
+            m_log.InfoFormat("[WINDLIGHT]: Plugin now disabled");
+            m_enableWindlight=false;
+        }
+
+        private void HandleEnable(Object[] args)
+        {
+            m_log.InfoFormat("[WINDLIGHT]: Plugin now enabled");
+            m_enableWindlight = true;
+        }
+
+        /// <summary>
+        /// Processes commandline input. Do not call directly.
+        /// </summary>
+        /// <param name="args">Commandline arguments</param>
+        private void EventManager_OnPluginConsole(string[] args)
+        {
+            if (args[0] == "windlight")
+            {
+                if (args.Length == 1)
+                {
+                    m_commander.ProcessConsoleCommand("add", new string[0]);
+                    return;
+                }
+
+                string[] tmpArgs = new string[args.Length - 2];
+                int i;
+                for (i = 2; i < args.Length; i++)
+                {
+                    tmpArgs[i - 2] = args[i];
+                }
+
+                m_commander.ProcessConsoleCommand(args[1], tmpArgs);
+            }
+        }
+        #endregion
+
+    }
+}
+
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs
new file mode 100644
index 0000000..4e8a3c4
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs
@@ -0,0 +1,477 @@
+using System;
+using System.Reflection;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Remoting.Lifetime;
+using OpenMetaverse;
+using Nini.Config;
+using OpenSim;
+using OpenSim.Framework;
+using OpenSim.Region.CoreModules.World.LightShare;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.ScriptEngine.Shared;
+using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
+using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
+using OpenSim.Region.ScriptEngine.Interfaces;
+using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces;
+
+using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
+using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
+using LSL_Key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
+using LSL_Rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
+using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
+
+namespace OpenSim.Region.ScriptEngine.Shared.Api
+{
+    [Serializable]
+    public class CM_Api : MarshalByRefObject, ICM_Api, IScriptApi
+    {
+        internal IScriptEngine m_ScriptEngine;
+        internal SceneObjectPart m_host;
+        internal uint m_localID;
+        internal UUID m_itemID;
+        internal bool m_CMFunctionsEnabled = false;
+        internal IScriptModuleComms m_comms = null;
+
+        public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
+        {
+            m_ScriptEngine = ScriptEngine;
+            m_host = host;
+            m_localID = localID;
+            m_itemID = itemID;
+
+            if (m_ScriptEngine.Config.GetBoolean("AllowCareminsterFunctions", false))
+                m_CMFunctionsEnabled = true;
+
+            m_comms = m_ScriptEngine.World.RequestModuleInterface<IScriptModuleComms>();
+            if (m_comms == null)
+                m_CMFunctionsEnabled = false;
+        }
+
+        public override Object InitializeLifetimeService()
+        {
+            ILease lease = (ILease)base.InitializeLifetimeService();
+
+            if (lease.CurrentState == LeaseState.Initial)
+            {
+                lease.InitialLeaseTime = TimeSpan.FromMinutes(0);
+                //                lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
+                //                lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
+            }
+            return lease;
+        }
+
+        public Scene World
+        {
+            get { return m_ScriptEngine.World; }
+        }
+
+        //
+        //Dumps an error message on the debug console.
+        //
+
+        internal void CMShoutError(string message)
+        {
+            if (message.Length > 1023)
+                message = message.Substring(0, 1023);
+
+            World.SimChat(Utils.StringToBytes(message),
+                          ChatTypeEnum.Shout, ScriptBaseClass.DEBUG_CHANNEL, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, true);
+
+            IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
+            wComm.DeliverMessage(ChatTypeEnum.Shout, ScriptBaseClass.DEBUG_CHANNEL, m_host.Name, m_host.UUID, message);
+        }
+
+        /// <summary>
+        /// Get the current Windlight scene
+        /// </summary>
+        /// <returns>List of windlight parameters</returns>
+        public LSL_List cmGetWindlightScene(LSL_List rules)
+        {
+            if (!m_CMFunctionsEnabled)
+            {
+                CMShoutError("Careminster functions are not enabled.");
+                return new LSL_List();
+            }
+            m_host.AddScriptLPS(1);
+            RegionLightShareData wl = m_host.ParentGroup.Scene.RegionInfo.WindlightSettings;
+
+            LSL_List values = new LSL_List();
+            int idx = 0;
+            while (idx < rules.Length)
+            {
+                uint rule = (uint)rules.GetLSLIntegerItem(idx);
+                LSL_List toadd = new LSL_List();
+
+                switch (rule)
+                {
+                    case (int)ScriptBaseClass.WL_AMBIENT:
+                        toadd.Add(new LSL_Rotation(wl.ambient.X, wl.ambient.Y, wl.ambient.Z, wl.ambient.W));
+                        break;
+                    case (int)ScriptBaseClass.WL_BIG_WAVE_DIRECTION:
+                        toadd.Add(new LSL_Vector(wl.bigWaveDirection.X, wl.bigWaveDirection.Y, 0.0f));
+                        break;
+                    case (int)ScriptBaseClass.WL_BLUE_DENSITY:
+                        toadd.Add(new LSL_Rotation(wl.blueDensity.X, wl.blueDensity.Y, wl.blueDensity.Z, wl.blueDensity.W));
+                        break;
+                    case (int)ScriptBaseClass.WL_BLUR_MULTIPLIER:
+                        toadd.Add(new LSL_Float(wl.blurMultiplier));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_COLOR:
+                        toadd.Add(new LSL_Rotation(wl.cloudColor.X, wl.cloudColor.Y, wl.cloudColor.Z, wl.cloudColor.W));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_COVERAGE:
+                        toadd.Add(new LSL_Float(wl.cloudCoverage));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_DETAIL_XY_DENSITY:
+                        toadd.Add(new LSL_Vector(wl.cloudDetailXYDensity.X, wl.cloudDetailXYDensity.Y, wl.cloudDetailXYDensity.Z));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCALE:
+                        toadd.Add(new LSL_Float(wl.cloudScale));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X:
+                        toadd.Add(new LSL_Float(wl.cloudScrollX));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK:
+                        toadd.Add(new LSL_Integer(wl.cloudScrollXLock ? 1 : 0));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y:
+                        toadd.Add(new LSL_Float(wl.cloudScrollY));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK:
+                        toadd.Add(new LSL_Integer(wl.cloudScrollYLock ? 1 : 0));
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_XY_DENSITY:
+                        toadd.Add(new LSL_Vector(wl.cloudXYDensity.X, wl.cloudXYDensity.Y, wl.cloudXYDensity.Z));
+                        break;
+                    case (int)ScriptBaseClass.WL_DENSITY_MULTIPLIER:
+                        toadd.Add(new LSL_Float(wl.densityMultiplier));
+                        break;
+                    case (int)ScriptBaseClass.WL_DISTANCE_MULTIPLIER:
+                        toadd.Add(new LSL_Float(wl.distanceMultiplier));
+                        break;
+                    case (int)ScriptBaseClass.WL_DRAW_CLASSIC_CLOUDS:
+                        toadd.Add(new LSL_Integer(wl.drawClassicClouds ? 1 : 0));
+                        break;
+                    case (int)ScriptBaseClass.WL_EAST_ANGLE:
+                        toadd.Add(new LSL_Float(wl.eastAngle));
+                        break;
+                    case (int)ScriptBaseClass.WL_FRESNEL_OFFSET:
+                        toadd.Add(new LSL_Float(wl.fresnelOffset));
+                        break;
+                    case (int)ScriptBaseClass.WL_FRESNEL_SCALE:
+                        toadd.Add(new LSL_Float(wl.fresnelScale));
+                        break;
+                    case (int)ScriptBaseClass.WL_HAZE_DENSITY:
+                        toadd.Add(new LSL_Float(wl.hazeDensity));
+                        break;
+                    case (int)ScriptBaseClass.WL_HAZE_HORIZON:
+                        toadd.Add(new LSL_Float(wl.hazeHorizon));
+                        break;
+                    case (int)ScriptBaseClass.WL_HORIZON:
+                        toadd.Add(new LSL_Rotation(wl.horizon.X, wl.horizon.Y, wl.horizon.Z, wl.horizon.W));
+                        break;
+                    case (int)ScriptBaseClass.WL_LITTLE_WAVE_DIRECTION:
+                        toadd.Add(new LSL_Vector(wl.littleWaveDirection.X, wl.littleWaveDirection.Y, 0.0f));
+                        break;
+                    case (int)ScriptBaseClass.WL_MAX_ALTITUDE:
+                        toadd.Add(new LSL_Integer(wl.maxAltitude));
+                        break;
+                    case (int)ScriptBaseClass.WL_NORMAL_MAP_TEXTURE:
+                        toadd.Add(new LSL_Key(wl.normalMapTexture.ToString()));
+                        break;
+                    case (int)ScriptBaseClass.WL_REFLECTION_WAVELET_SCALE:
+                        toadd.Add(new LSL_Vector(wl.reflectionWaveletScale.X, wl.reflectionWaveletScale.Y, wl.reflectionWaveletScale.Z));
+                        break;
+                    case (int)ScriptBaseClass.WL_REFRACT_SCALE_ABOVE:
+                        toadd.Add(new LSL_Float(wl.refractScaleAbove));
+                        break;
+                    case (int)ScriptBaseClass.WL_REFRACT_SCALE_BELOW:
+                        toadd.Add(new LSL_Float(wl.refractScaleBelow));
+                        break;
+                    case (int)ScriptBaseClass.WL_SCENE_GAMMA:
+                        toadd.Add(new LSL_Float(wl.sceneGamma));
+                        break;
+                    case (int)ScriptBaseClass.WL_STAR_BRIGHTNESS:
+                        toadd.Add(new LSL_Float(wl.starBrightness));
+                        break;
+                    case (int)ScriptBaseClass.WL_SUN_GLOW_FOCUS:
+                        toadd.Add(new LSL_Float(wl.sunGlowFocus));
+                        break;
+                    case (int)ScriptBaseClass.WL_SUN_GLOW_SIZE:
+                        toadd.Add(new LSL_Float(wl.sunGlowSize));
+                        break;
+                    case (int)ScriptBaseClass.WL_SUN_MOON_COLOR:
+                        toadd.Add(new LSL_Rotation(wl.sunMoonColor.X, wl.sunMoonColor.Y, wl.sunMoonColor.Z, wl.sunMoonColor.W));
+                        break;
+                    case (int)ScriptBaseClass.WL_UNDERWATER_FOG_MODIFIER:
+                        toadd.Add(new LSL_Float(wl.underwaterFogModifier));
+                        break;
+                    case (int)ScriptBaseClass.WL_WATER_COLOR:
+                        toadd.Add(new LSL_Vector(wl.waterColor.X, wl.waterColor.Y, wl.waterColor.Z));
+                        break;
+                    case (int)ScriptBaseClass.WL_WATER_FOG_DENSITY_EXPONENT:
+                        toadd.Add(new LSL_Float(wl.waterFogDensityExponent));
+                        break;
+                }
+
+                if (toadd.Length > 0)
+                {
+                    values.Add(rule);
+                    values.Add(toadd.Data[0]);
+                }
+                idx++;
+            }
+
+
+            return values;
+
+        }
+
+        private RegionLightShareData getWindlightProfileFromRules(LSL_List rules)
+        {
+            RegionLightShareData wl = (RegionLightShareData)m_host.ParentGroup.Scene.RegionInfo.WindlightSettings.Clone();
+
+            LSL_List values = new LSL_List();
+            int idx = 0;
+            while (idx < rules.Length)
+            {
+                uint rule = (uint)rules.GetLSLIntegerItem(idx);
+                LSL_Types.Quaternion iQ;
+                LSL_Types.Vector3 iV;
+                switch (rule)
+                {
+                    case (int)ScriptBaseClass.WL_SUN_MOON_POSITION:
+                        idx++;
+                        wl.sunMoonPosition = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_AMBIENT:
+                        idx++;
+                        iQ = rules.GetQuaternionItem(idx);
+                        wl.ambient = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
+                        break;
+                    case (int)ScriptBaseClass.WL_BIG_WAVE_DIRECTION:
+                        idx++;
+                        iV = rules.GetVector3Item(idx);
+                        wl.bigWaveDirection = new Vector2((float)iV.x, (float)iV.y);
+                        break;
+                    case (int)ScriptBaseClass.WL_BLUE_DENSITY:
+                        idx++;
+                        iQ = rules.GetQuaternionItem(idx);
+                        wl.blueDensity = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
+                        break;
+                    case (int)ScriptBaseClass.WL_BLUR_MULTIPLIER:
+                        idx++;
+                        wl.blurMultiplier = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_COLOR:
+                        idx++;
+                        iQ = rules.GetQuaternionItem(idx);
+                        wl.cloudColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_COVERAGE:
+                        idx++;
+                        wl.cloudCoverage = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_DETAIL_XY_DENSITY:
+                        idx++;
+                        iV = rules.GetVector3Item(idx);
+                        wl.cloudDetailXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCALE:
+                        idx++;
+                        wl.cloudScale = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X:
+                        idx++;
+                        wl.cloudScrollX = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK:
+                        idx++;
+                        wl.cloudScrollXLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false;
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y:
+                        idx++;
+                        wl.cloudScrollY = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK:
+                        idx++;
+                        wl.cloudScrollYLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false;
+                        break;
+                    case (int)ScriptBaseClass.WL_CLOUD_XY_DENSITY:
+                        idx++;
+                        iV = rules.GetVector3Item(idx);
+                        wl.cloudXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+                        break;
+                    case (int)ScriptBaseClass.WL_DENSITY_MULTIPLIER:
+                        idx++;
+                        wl.densityMultiplier = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_DISTANCE_MULTIPLIER:
+                        idx++;
+                        wl.distanceMultiplier = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_DRAW_CLASSIC_CLOUDS:
+                        idx++;
+                        wl.drawClassicClouds = rules.GetLSLIntegerItem(idx).value == 1 ? true : false;
+                        break;
+                    case (int)ScriptBaseClass.WL_EAST_ANGLE:
+                        idx++;
+                        wl.eastAngle = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_FRESNEL_OFFSET:
+                        idx++;
+                        wl.fresnelOffset = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_FRESNEL_SCALE:
+                        idx++;
+                        wl.fresnelScale = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_HAZE_DENSITY:
+                        idx++;
+                        wl.hazeDensity = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_HAZE_HORIZON:
+                        idx++;
+                        wl.hazeHorizon = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_HORIZON:
+                        idx++;
+                        iQ = rules.GetQuaternionItem(idx);
+                        wl.horizon = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
+                        break;
+                    case (int)ScriptBaseClass.WL_LITTLE_WAVE_DIRECTION:
+                        idx++;
+                        iV = rules.GetVector3Item(idx);
+                        wl.littleWaveDirection = new Vector2((float)iV.x, (float)iV.y);
+                        break;
+                    case (int)ScriptBaseClass.WL_MAX_ALTITUDE:
+                        idx++;
+                        wl.maxAltitude = (ushort)rules.GetLSLIntegerItem(idx).value;
+                        break;
+                    case (int)ScriptBaseClass.WL_NORMAL_MAP_TEXTURE:
+                        idx++;
+                        wl.normalMapTexture = new UUID(rules.GetLSLStringItem(idx).m_string);
+                        break;
+                    case (int)ScriptBaseClass.WL_REFLECTION_WAVELET_SCALE:
+                        idx++;
+                        iV = rules.GetVector3Item(idx);
+                        wl.reflectionWaveletScale = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+                        break;
+                    case (int)ScriptBaseClass.WL_REFRACT_SCALE_ABOVE:
+                        idx++;
+                        wl.refractScaleAbove = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_REFRACT_SCALE_BELOW:
+                        idx++;
+                        wl.refractScaleBelow = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_SCENE_GAMMA:
+                        idx++;
+                        wl.sceneGamma = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_STAR_BRIGHTNESS:
+                        idx++;
+                        wl.starBrightness = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_SUN_GLOW_FOCUS:
+                        idx++;
+                        wl.sunGlowFocus = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_SUN_GLOW_SIZE:
+                        idx++;
+                        wl.sunGlowSize = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_SUN_MOON_COLOR:
+                        idx++;
+                        iQ = rules.GetQuaternionItem(idx);
+                        wl.sunMoonColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s);
+                        break;
+                    case (int)ScriptBaseClass.WL_UNDERWATER_FOG_MODIFIER:
+                        idx++;
+                        wl.underwaterFogModifier = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                    case (int)ScriptBaseClass.WL_WATER_COLOR:
+                        idx++;
+                        iV = rules.GetVector3Item(idx);
+                        wl.waterColor = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+                        break;
+                    case (int)ScriptBaseClass.WL_WATER_FOG_DENSITY_EXPONENT:
+                        idx++;
+                        wl.waterFogDensityExponent = (float)rules.GetLSLFloatItem(idx);
+                        break;
+                }
+                idx++;
+            }
+            return wl;
+        }
+        /// <summary>
+        /// Set the current Windlight scene
+        /// </summary>
+        /// <param name="rules"></param>
+        /// <returns>success: true or false</returns>
+        public int cmSetWindlightScene(LSL_List rules)
+        {
+            if (!m_CMFunctionsEnabled)
+            {
+                CMShoutError("Careminster functions are not enabled.");
+                return 0;
+            }
+            if (!World.RegionInfo.EstateSettings.IsEstateManager(m_host.OwnerID) && World.GetScenePresence(m_host.OwnerID).GodLevel < 200)
+            {
+                CMShoutError("cmSetWindlightScene can only be used by estate managers or owners.");
+                return 0;
+            }
+            int success = 0;
+            m_host.AddScriptLPS(1);
+            if (LightShareModule.EnableWindlight)
+            {
+                RegionLightShareData wl = getWindlightProfileFromRules(rules);
+                m_host.ParentGroup.Scene.StoreWindlightProfile(wl);
+                success = 1;
+            }
+            else
+            {
+                CMShoutError("Windlight module is disabled");
+                return 0;
+            }
+            return success;
+        }
+        /// <summary>
+        /// Set the current Windlight scene to a target avatar
+        /// </summary>
+        /// <param name="rules"></param>
+        /// <returns>success: true or false</returns>
+        public int cmSetWindlightSceneTargeted(LSL_List rules, LSL_Key target)
+        {
+            if (!m_CMFunctionsEnabled)
+            {
+                CMShoutError("Careminster functions are not enabled.");
+                return 0;
+            }
+            if (!World.RegionInfo.EstateSettings.IsEstateManager(m_host.OwnerID) && World.GetScenePresence(m_host.OwnerID).GodLevel < 200)
+            {
+                CMShoutError("cmSetWindlightSceneTargeted can only be used by estate managers or owners.");
+                return 0;
+            }
+            int success = 0;
+            m_host.AddScriptLPS(1);
+            if (LightShareModule.EnableWindlight)
+            { 
+                RegionLightShareData wl = getWindlightProfileFromRules(rules);
+                World.EventManager.TriggerOnSendNewWindlightProfileTargeted(wl, new UUID(target.m_string));
+                success = 1;
+            }
+            else
+            {
+                CMShoutError("Windlight module is disabled");
+                return 0;
+            }
+            return success;
+        }
+        
+    }
+}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
new file mode 100644
index 0000000..ef990a1
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using OpenSim.Region.ScriptEngine.Interfaces;
+
+using key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
+using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
+using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
+using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
+using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
+
+namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
+{
+    public interface ICM_Api
+    {
+        // Windlight Functions
+        LSL_List cmGetWindlightScene(LSL_List rules);
+        int cmSetWindlightScene(LSL_List rules);
+        int cmSetWindlightSceneTargeted(LSL_List rules, key target);
+    }
+}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs
new file mode 100644
index 0000000..522c020
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs
@@ -0,0 +1,77 @@
+/*
+ * 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 vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
+using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
+using LSLInteger = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
+
+namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
+{
+    public partial class ScriptBaseClass
+    {
+        // Constants for cmWindlight*
+        public const int WL_WATER_COLOR = 0;
+        public const int WL_WATER_FOG_DENSITY_EXPONENT = 1;
+        public const int WL_UNDERWATER_FOG_MODIFIER = 2;
+        public const int WL_REFLECTION_WAVELET_SCALE = 3;
+        public const int WL_FRESNEL_SCALE = 4;
+        public const int WL_FRESNEL_OFFSET = 5;
+        public const int WL_REFRACT_SCALE_ABOVE = 6;
+        public const int WL_REFRACT_SCALE_BELOW = 7;
+        public const int WL_BLUR_MULTIPLIER = 8;
+        public const int WL_BIG_WAVE_DIRECTION = 9;
+        public const int WL_LITTLE_WAVE_DIRECTION = 10;
+        public const int WL_NORMAL_MAP_TEXTURE = 11;
+        public const int WL_HORIZON = 12;
+        public const int WL_HAZE_HORIZON = 13;
+        public const int WL_BLUE_DENSITY = 14;
+        public const int WL_HAZE_DENSITY = 15;
+        public const int WL_DENSITY_MULTIPLIER = 16;
+        public const int WL_DISTANCE_MULTIPLIER = 17;
+        public const int WL_MAX_ALTITUDE = 18;
+        public const int WL_SUN_MOON_COLOR = 19;
+        public const int WL_AMBIENT = 20;
+        public const int WL_EAST_ANGLE = 21;
+        public const int WL_SUN_GLOW_FOCUS = 22;
+        public const int WL_SUN_GLOW_SIZE = 23;
+        public const int WL_SCENE_GAMMA = 24;
+        public const int WL_STAR_BRIGHTNESS = 25;
+        public const int WL_CLOUD_COLOR = 26;
+        public const int WL_CLOUD_XY_DENSITY = 27;
+        public const int WL_CLOUD_COVERAGE = 28;
+        public const int WL_CLOUD_SCALE = 29;
+        public const int WL_CLOUD_DETAIL_XY_DENSITY = 30;
+        public const int WL_CLOUD_SCROLL_X = 31;
+        public const int WL_CLOUD_SCROLL_Y = 32;
+        public const int WL_CLOUD_SCROLL_Y_LOCK = 33;
+        public const int WL_CLOUD_SCROLL_X_LOCK = 34;
+        public const int WL_DRAW_CLASSIC_CLOUDS = 35;
+        public const int WL_SUN_MOON_POSITION = 36;
+
+    }
+}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs
new file mode 100644
index 0000000..5bc3a88
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs
@@ -0,0 +1,76 @@
+/*
+ * 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.Runtime.Remoting.Lifetime;
+using System.Threading;
+using System.Reflection;
+using System.Collections;
+using System.Collections.Generic;
+using OpenSim.Framework;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.ScriptEngine.Interfaces;
+using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces;
+using integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
+using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
+using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
+using key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
+using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
+using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
+
+namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
+{
+    public partial class ScriptBaseClass : MarshalByRefObject
+    {
+        public ICM_Api m_CM_Functions;
+
+        public void ApiTypeCM(IScriptApi api)
+        {
+            if (!(api is ICM_Api))
+                return;
+
+            m_CM_Functions = (ICM_Api)api;
+        }
+
+        public LSL_List cmGetWindlightScene(LSL_List rules)
+        {
+            return m_CM_Functions.cmGetWindlightScene(rules);
+        }
+
+        public int cmSetWindlightScene(LSL_List rules)
+        {
+            return m_CM_Functions.cmSetWindlightScene(rules);
+        }
+
+        public int cmSetWindlightSceneTargeted(LSL_List rules, key target)
+        {
+            return m_CM_Functions.cmSetWindlightSceneTargeted(rules, target);
+        }
+    }
+}
-- 
cgit v1.1


From 21519d33112396f1df08bcdf951b8d6b5a12ad72 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 31 Mar 2010 13:33:18 +0100
Subject: Add missing licenses. Change relicensed LightShare module to proper
 BSD licensing.

---
 .../CoreModules/LightShare/LightShareModule.cs     | 27 +++++++++++++++++---
 .../Shared/Api/Implementation/CM_Api.cs            | 29 +++++++++++++++++++++-
 .../ScriptEngine/Shared/Api/Interface/ICM_Api.cs   | 29 +++++++++++++++++++++-
 3 files changed, 79 insertions(+), 6 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
index 77d6e9a..e6cab1d 100644
--- a/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
+++ b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
@@ -1,9 +1,28 @@
 /*
- * Copyright (c) Thomas Grimshaw and Magne Metaverse Research
- *  
- * This module is not open source. All rights reserved.
- * Unauthorised copying, distribution or public display is prohibited.
+ * 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;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs
index 4e8a3c4..880ca1b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs
@@ -1,4 +1,31 @@
-using System;
+/*
+ * 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.Reflection;
 using System.Collections;
 using System.Collections.Generic;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
index ef990a1..f5570ec 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
@@ -1,4 +1,31 @@
-using System.Collections;
+/*
+ * 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.Collections;
 using OpenSim.Region.ScriptEngine.Interfaces;
 
 using key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
-- 
cgit v1.1


From 08ba34da0325e3ed2a839cff62f2020742e887e7 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 31 Mar 2010 21:30:44 -0700
Subject: First attempt at fixing mantis #4641. It's better but there are now
 some issues with permissions. (looks like my commit is going to touch CM
 files, I'm going to let it do it - eof only)

---
 .../Framework/Communications/Osp/OspResolver.cs    |  5 ++++-
 OpenSim/Framework/RegionInfo.cs                    | 12 +++++------
 .../CoreModules/Framework/Library/LibraryModule.cs | 25 ++++++++++++++++++----
 .../ScriptEngine/Shared/Api/Interface/ICM_Api.cs   |  2 +-
 .../Shared/Api/Runtime/CM_Constants.cs             |  2 +-
 .../ScriptEngine/Shared/Api/Runtime/CM_Stub.cs     | 10 ++++-----
 6 files changed, 38 insertions(+), 18 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Framework/Communications/Osp/OspResolver.cs b/OpenSim/Framework/Communications/Osp/OspResolver.cs
index 2e55f53..24ea64d 100644
--- a/OpenSim/Framework/Communications/Osp/OspResolver.cs
+++ b/OpenSim/Framework/Communications/Osp/OspResolver.cs
@@ -139,6 +139,9 @@ namespace OpenSim.Framework.Communications.Osp
         /// </returns>
         protected static UUID ResolveOspaName(string name, IUserAccountService userService)
         {
+            if (userService == null)
+                return UUID.Zero;
+
             int nameSeparatorIndex = name.IndexOf(OSPA_NAME_VALUE_SEPARATOR);
             
             if (nameSeparatorIndex < 0)
@@ -149,7 +152,7 @@ namespace OpenSim.Framework.Communications.Osp
             
             string firstName = name.Remove(nameSeparatorIndex).TrimEnd();
             string lastName = name.Substring(nameSeparatorIndex + 1).TrimStart();
-            
+
             UserAccount account = userService.GetUserAccount(UUID.Zero, firstName, lastName);
             if (account != null)
                 return account.PrincipalID;
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 5eacd73..ad98816 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -38,7 +38,7 @@ using OpenSim.Framework.Console;
 
 
 namespace OpenSim.Framework
-{
+{
     public class RegionLightShareData : ICloneable
     {
         public UUID regionID = UUID.Zero;
@@ -86,11 +86,11 @@ namespace OpenSim.Framework
         {
             if (OnSave != null)
                 OnSave(this);
-        }
-        public object Clone()
-        {
-            return this.MemberwiseClone();      // call clone method
-        }
+        }
+        public object Clone()
+        {
+            return this.MemberwiseClone();      // call clone method
+        }
 
     }
 
diff --git a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
index e37da9f..36dae6b 100644
--- a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
@@ -173,11 +173,11 @@ namespace OpenSim.Region.CoreModules.Framework.Library
                 m_log.InfoFormat("[LIBRARY MODULE]: Loading library archive {0} ({1})...", iarFileName, simpleName);
                 simpleName = GetInventoryPathFromName(simpleName);
 
+                InventoryArchiveReadRequest archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, simpleName, iarFileName);
                 try
                 {
-                    InventoryArchiveReadRequest archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, simpleName, iarFileName);
                     List<InventoryNodeBase> nodes = archread.Execute();
-                    if (nodes.Count == 0)
+                    if (nodes != null && nodes.Count == 0)
                     {
                         // didn't find the subfolder with the given name; place it on the top
                         m_log.InfoFormat("[LIBRARY MODULE]: Didn't find {0} in library. Placing archive on the top level", simpleName);
@@ -185,16 +185,33 @@ namespace OpenSim.Region.CoreModules.Framework.Library
                         archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName);
                         archread.Execute();
                     }
-                    archread.Close();
+                    foreach (InventoryNodeBase node in nodes)
+                        FixPerms(node);
                 }
                 catch (Exception e)
                 {
-                    m_log.DebugFormat("[LIBRARY MODULE]: Exception when processing archive {0}: {1}", iarFileName, e.Message);
+                    m_log.DebugFormat("[LIBRARY MODULE]: Exception when processing archive {0}: {1}", iarFileName, e.StackTrace);
+                }
+                finally
+                {
+                    archread.Close();
                 }
             }
 
         }
 
+        private void FixPerms(InventoryNodeBase node)
+        {
+            if (node is InventoryItemBase)
+            {
+                InventoryItemBase item = (InventoryItemBase)node;
+                item.BasePermissions = 0x7FFFFFFF;
+                item.EveryOnePermissions = 0x7FFFFFFF;
+                item.CurrentPermissions = 0x7FFFFFFF;
+                item.NextPermissions = 0x7FFFFFFF;
+            }
+        }
+
         private void DumpLibrary()
         {
             InventoryFolderImpl lib = m_Library.LibraryRootFolder;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
index f5570ec..f13b6e5 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs
@@ -42,7 +42,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
     {
         // Windlight Functions
         LSL_List cmGetWindlightScene(LSL_List rules);
-        int cmSetWindlightScene(LSL_List rules);
+        int cmSetWindlightScene(LSL_List rules);
         int cmSetWindlightSceneTargeted(LSL_List rules, key target);
     }
 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs
index 522c020..f94ef4a 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Constants.cs
@@ -70,7 +70,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
         public const int WL_CLOUD_SCROLL_Y = 32;
         public const int WL_CLOUD_SCROLL_Y_LOCK = 33;
         public const int WL_CLOUD_SCROLL_X_LOCK = 34;
-        public const int WL_DRAW_CLASSIC_CLOUDS = 35;
+        public const int WL_DRAW_CLASSIC_CLOUDS = 35;
         public const int WL_SUN_MOON_POSITION = 36;
 
     }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs
index 5bc3a88..c0edaae 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs
@@ -66,11 +66,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
         public int cmSetWindlightScene(LSL_List rules)
         {
             return m_CM_Functions.cmSetWindlightScene(rules);
-        }
-
-        public int cmSetWindlightSceneTargeted(LSL_List rules, key target)
-        {
-            return m_CM_Functions.cmSetWindlightSceneTargeted(rules, target);
+        }
+
+        public int cmSetWindlightSceneTargeted(LSL_List rules, key target)
+        {
+            return m_CM_Functions.cmSetWindlightSceneTargeted(rules, target);
         }
     }
 }
-- 
cgit v1.1