diff options
Diffstat (limited to 'OpenSim')
45 files changed, 807 insertions, 485 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLFriendsData.cs b/OpenSim/Data/MSSQL/MSSQLFriendsData.cs index 09dde5e..fef6978 100644 --- a/OpenSim/Data/MSSQL/MSSQLFriendsData.cs +++ b/OpenSim/Data/MSSQL/MSSQLFriendsData.cs | |||
@@ -89,5 +89,11 @@ namespace OpenSim.Data.MSSQL | |||
89 | return DoQuery(cmd); | 89 | return DoQuery(cmd); |
90 | } | 90 | } |
91 | } | 91 | } |
92 | |||
93 | public FriendsData[] GetFriends(Guid principalID) | ||
94 | { | ||
95 | return GetFriends(principalID.ToString()); | ||
96 | } | ||
97 | |||
92 | } | 98 | } |
93 | } | 99 | } |
diff --git a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs index 4d06377..961593f 100644 --- a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs +++ b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs | |||
@@ -813,7 +813,7 @@ namespace OpenSim.Data.MSSQL | |||
813 | { | 813 | { |
814 | try | 814 | try |
815 | { | 815 | { |
816 | using (SqlCommand command = new SqlCommand("DELETE FROM inventoryfolders WHERE folderID=@folderID", connection)) | 816 | using (SqlCommand command = new SqlCommand("DELETE FROM inventoryfolders WHERE folderID=@folderID and type=-1", connection)) |
817 | { | 817 | { |
818 | command.Parameters.Add(database.CreateParameter("folderID", folderID)); | 818 | command.Parameters.Add(database.CreateParameter("folderID", folderID)); |
819 | 819 | ||
diff --git a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs index e58620a..d9dfe86 100644 --- a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs +++ b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs | |||
@@ -675,7 +675,7 @@ VALUES | |||
675 | cmd.ExecuteNonQuery(); | 675 | cmd.ExecuteNonQuery(); |
676 | } | 676 | } |
677 | 677 | ||
678 | sql = "INSERT INTO [landaccesslist] ([LandUUID],[AccessUUID],[Flags]) VALUES (@LandUUID,@AccessUUID,@Flags)"; | 678 | sql = "INSERT INTO [landaccesslist] ([LandUUID],[AccessUUID],[Flags],[Expires]) VALUES (@LandUUID,@AccessUUID,@Flags,@Expires)"; |
679 | 679 | ||
680 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | 680 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
681 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | 681 | using (SqlCommand cmd = new SqlCommand(sql, conn)) |
@@ -1215,6 +1215,8 @@ VALUES | |||
1215 | //Store new values | 1215 | //Store new values |
1216 | StoreNewRegionSettings(regionSettings); | 1216 | StoreNewRegionSettings(regionSettings); |
1217 | 1217 | ||
1218 | LoadSpawnPoints(regionSettings); | ||
1219 | |||
1218 | return regionSettings; | 1220 | return regionSettings; |
1219 | } | 1221 | } |
1220 | 1222 | ||
@@ -1252,7 +1254,7 @@ VALUES | |||
1252 | ,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se | 1254 | ,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se |
1253 | ,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit | 1255 | ,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit |
1254 | ,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position | 1256 | ,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position |
1255 | ,[covenant] = @covenant ,[covenant_datetime] = @covenant_datetime, [sunvectorx] = @sunvectorx, [sunvectory] = @sunvectory, [sunvectorz] = @sunvectorz, [Sandbox] = @Sandbox, [loaded_creation_datetime] = @loaded_creation_datetime, [loaded_creation_id] = @loaded_creation_id | 1257 | ,[covenant] = @covenant ,[covenant_datetime] = @covenant_datetime, [sunvectorx] = @sunvectorx, [sunvectory] = @sunvectory, [sunvectorz] = @sunvectorz, [Sandbox] = @Sandbox, [loaded_creation_datetime] = @loaded_creation_datetime, [loaded_creation_id] = @loaded_creation_id, [map_tile_id] = @TerrainImageID, [telehubobject] = @telehubobject, [parcel_tile_id] = @ParcelImageID |
1256 | WHERE [regionUUID] = @regionUUID"; | 1258 | WHERE [regionUUID] = @regionUUID"; |
1257 | 1259 | ||
1258 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | 1260 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
@@ -1263,6 +1265,7 @@ VALUES | |||
1263 | cmd.ExecuteNonQuery(); | 1265 | cmd.ExecuteNonQuery(); |
1264 | } | 1266 | } |
1265 | } | 1267 | } |
1268 | SaveSpawnPoints(regionSettings); | ||
1266 | } | 1269 | } |
1267 | 1270 | ||
1268 | public void Shutdown() | 1271 | public void Shutdown() |
@@ -1367,7 +1370,7 @@ VALUES | |||
1367 | newSettings.TerrainRaiseLimit = Convert.ToDouble(row["terrain_raise_limit"]); | 1370 | newSettings.TerrainRaiseLimit = Convert.ToDouble(row["terrain_raise_limit"]); |
1368 | newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]); | 1371 | newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]); |
1369 | newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]); | 1372 | newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]); |
1370 | newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]); | 1373 | newSettings.Sandbox = Convert.ToBoolean(row["Sandbox"]); |
1371 | newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]); | 1374 | newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]); |
1372 | newSettings.SunPosition = Convert.ToDouble(row["sun_position"]); | 1375 | newSettings.SunPosition = Convert.ToDouble(row["sun_position"]); |
1373 | newSettings.SunVector = new Vector3( | 1376 | newSettings.SunVector = new Vector3( |
@@ -1383,6 +1386,11 @@ VALUES | |||
1383 | newSettings.LoadedCreationID = ""; | 1386 | newSettings.LoadedCreationID = ""; |
1384 | else | 1387 | else |
1385 | newSettings.LoadedCreationID = (String)row["loaded_creation_id"]; | 1388 | newSettings.LoadedCreationID = (String)row["loaded_creation_id"]; |
1389 | |||
1390 | newSettings.TerrainImageID = new UUID((string)row["map_tile_ID"]); | ||
1391 | newSettings.ParcelImageID = new UUID((Guid)row["parcel_tile_ID"]); | ||
1392 | newSettings.TelehubObject = new UUID((Guid)row["TelehubObject"]); | ||
1393 | |||
1386 | return newSettings; | 1394 | return newSettings; |
1387 | } | 1395 | } |
1388 | 1396 | ||
@@ -1454,6 +1462,13 @@ VALUES | |||
1454 | } | 1462 | } |
1455 | 1463 | ||
1456 | newData.ParcelAccessList = new List<LandAccessEntry>(); | 1464 | newData.ParcelAccessList = new List<LandAccessEntry>(); |
1465 | newData.MediaDescription = (string)row["MediaDescription"]; | ||
1466 | newData.MediaType = (string)row["MediaType"]; | ||
1467 | newData.MediaWidth = Convert.ToInt32((((string)row["MediaSize"]).Split(','))[0]); | ||
1468 | newData.MediaHeight = Convert.ToInt32((((string)row["MediaSize"]).Split(','))[1]); | ||
1469 | newData.MediaLoop = Convert.ToBoolean(row["MediaLoop"]); | ||
1470 | newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]); | ||
1471 | newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]); | ||
1457 | 1472 | ||
1458 | return newData; | 1473 | return newData; |
1459 | } | 1474 | } |
@@ -1468,7 +1483,7 @@ VALUES | |||
1468 | LandAccessEntry entry = new LandAccessEntry(); | 1483 | LandAccessEntry entry = new LandAccessEntry(); |
1469 | entry.AgentID = new UUID((Guid)row["AccessUUID"]); | 1484 | entry.AgentID = new UUID((Guid)row["AccessUUID"]); |
1470 | entry.Flags = (AccessList)Convert.ToInt32(row["Flags"]); | 1485 | entry.Flags = (AccessList)Convert.ToInt32(row["Flags"]); |
1471 | entry.Expires = 0; | 1486 | entry.Expires = Convert.ToInt32(row["Expires"]); |
1472 | return entry; | 1487 | return entry; |
1473 | } | 1488 | } |
1474 | 1489 | ||
@@ -1497,7 +1512,8 @@ VALUES | |||
1497 | prim.TouchName = (string)primRow["TouchName"]; | 1512 | prim.TouchName = (string)primRow["TouchName"]; |
1498 | // permissions | 1513 | // permissions |
1499 | prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]); | 1514 | prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]); |
1500 | prim.CreatorID = new UUID((Guid)primRow["CreatorID"]); | 1515 | //prim.CreatorID = new UUID((Guid)primRow["CreatorID"]); |
1516 | prim.CreatorIdentification = (string)primRow["CreatorID"]; | ||
1501 | prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); | 1517 | prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); |
1502 | prim.GroupID = new UUID((Guid)primRow["GroupID"]); | 1518 | prim.GroupID = new UUID((Guid)primRow["GroupID"]); |
1503 | prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]); | 1519 | prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]); |
@@ -1691,7 +1707,8 @@ VALUES | |||
1691 | taskItem.Name = (string)inventoryRow["name"]; | 1707 | taskItem.Name = (string)inventoryRow["name"]; |
1692 | taskItem.Description = (string)inventoryRow["description"]; | 1708 | taskItem.Description = (string)inventoryRow["description"]; |
1693 | taskItem.CreationDate = Convert.ToUInt32(inventoryRow["creationDate"]); | 1709 | taskItem.CreationDate = Convert.ToUInt32(inventoryRow["creationDate"]); |
1694 | taskItem.CreatorID = new UUID((Guid)inventoryRow["creatorID"]); | 1710 | //taskItem.CreatorID = new UUID((Guid)inventoryRow["creatorID"]); |
1711 | taskItem.CreatorIdentification = (string)inventoryRow["creatorID"]; | ||
1695 | taskItem.OwnerID = new UUID((Guid)inventoryRow["ownerID"]); | 1712 | taskItem.OwnerID = new UUID((Guid)inventoryRow["ownerID"]); |
1696 | taskItem.LastOwnerID = new UUID((Guid)inventoryRow["lastOwnerID"]); | 1713 | taskItem.LastOwnerID = new UUID((Guid)inventoryRow["lastOwnerID"]); |
1697 | taskItem.GroupID = new UUID((Guid)inventoryRow["groupID"]); | 1714 | taskItem.GroupID = new UUID((Guid)inventoryRow["groupID"]); |
@@ -1782,7 +1799,7 @@ VALUES | |||
1782 | parameters.Add(_Database.CreateParameter("terrain_raise_limit", settings.TerrainRaiseLimit)); | 1799 | parameters.Add(_Database.CreateParameter("terrain_raise_limit", settings.TerrainRaiseLimit)); |
1783 | parameters.Add(_Database.CreateParameter("terrain_lower_limit", settings.TerrainLowerLimit)); | 1800 | parameters.Add(_Database.CreateParameter("terrain_lower_limit", settings.TerrainLowerLimit)); |
1784 | parameters.Add(_Database.CreateParameter("use_estate_sun", settings.UseEstateSun)); | 1801 | parameters.Add(_Database.CreateParameter("use_estate_sun", settings.UseEstateSun)); |
1785 | parameters.Add(_Database.CreateParameter("sandbox", settings.Sandbox)); | 1802 | parameters.Add(_Database.CreateParameter("Sandbox", settings.Sandbox)); |
1786 | parameters.Add(_Database.CreateParameter("fixed_sun", settings.FixedSun)); | 1803 | parameters.Add(_Database.CreateParameter("fixed_sun", settings.FixedSun)); |
1787 | parameters.Add(_Database.CreateParameter("sun_position", settings.SunPosition)); | 1804 | parameters.Add(_Database.CreateParameter("sun_position", settings.SunPosition)); |
1788 | parameters.Add(_Database.CreateParameter("sunvectorx", settings.SunVector.X)); | 1805 | parameters.Add(_Database.CreateParameter("sunvectorx", settings.SunVector.X)); |
@@ -1792,6 +1809,9 @@ VALUES | |||
1792 | parameters.Add(_Database.CreateParameter("covenant_datetime", settings.CovenantChangedDateTime)); | 1809 | parameters.Add(_Database.CreateParameter("covenant_datetime", settings.CovenantChangedDateTime)); |
1793 | parameters.Add(_Database.CreateParameter("Loaded_Creation_DateTime", settings.LoadedCreationDateTime)); | 1810 | parameters.Add(_Database.CreateParameter("Loaded_Creation_DateTime", settings.LoadedCreationDateTime)); |
1794 | parameters.Add(_Database.CreateParameter("Loaded_Creation_ID", settings.LoadedCreationID)); | 1811 | parameters.Add(_Database.CreateParameter("Loaded_Creation_ID", settings.LoadedCreationID)); |
1812 | parameters.Add(_Database.CreateParameter("TerrainImageID", settings.TerrainImageID)); | ||
1813 | parameters.Add(_Database.CreateParameter("ParcelImageID", settings.ParcelImageID)); | ||
1814 | parameters.Add(_Database.CreateParameter("TelehubObject", settings.TelehubObject)); | ||
1795 | 1815 | ||
1796 | return parameters.ToArray(); | 1816 | return parameters.ToArray(); |
1797 | } | 1817 | } |
@@ -1859,6 +1879,7 @@ VALUES | |||
1859 | parameters.Add(_Database.CreateParameter("LandUUID", parcelID)); | 1879 | parameters.Add(_Database.CreateParameter("LandUUID", parcelID)); |
1860 | parameters.Add(_Database.CreateParameter("AccessUUID", parcelAccessEntry.AgentID)); | 1880 | parameters.Add(_Database.CreateParameter("AccessUUID", parcelAccessEntry.AgentID)); |
1861 | parameters.Add(_Database.CreateParameter("Flags", parcelAccessEntry.Flags)); | 1881 | parameters.Add(_Database.CreateParameter("Flags", parcelAccessEntry.Flags)); |
1882 | parameters.Add(_Database.CreateParameter("Expires", parcelAccessEntry.Expires)); | ||
1862 | 1883 | ||
1863 | return parameters.ToArray(); | 1884 | return parameters.ToArray(); |
1864 | } | 1885 | } |
@@ -2063,5 +2084,57 @@ VALUES | |||
2063 | #endregion | 2084 | #endregion |
2064 | 2085 | ||
2065 | #endregion | 2086 | #endregion |
2087 | |||
2088 | private void LoadSpawnPoints(RegionSettings rs) | ||
2089 | { | ||
2090 | rs.ClearSpawnPoints(); | ||
2091 | |||
2092 | string sql = "SELECT Yaw, Pitch, Distance FROM spawn_points WHERE RegionUUID = @RegionUUID"; | ||
2093 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
2094 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
2095 | { | ||
2096 | cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID.ToString())); | ||
2097 | conn.Open(); | ||
2098 | using (SqlDataReader reader = cmd.ExecuteReader()) | ||
2099 | { | ||
2100 | if (reader.Read()) | ||
2101 | { | ||
2102 | SpawnPoint sp = new SpawnPoint(); | ||
2103 | |||
2104 | sp.Yaw = (float)reader["Yaw"]; | ||
2105 | sp.Pitch = (float)reader["Pitch"]; | ||
2106 | sp.Distance = (float)reader["Distance"]; | ||
2107 | |||
2108 | rs.AddSpawnPoint(sp); | ||
2109 | } | ||
2110 | } | ||
2111 | } | ||
2112 | } | ||
2113 | |||
2114 | private void SaveSpawnPoints(RegionSettings rs) | ||
2115 | { | ||
2116 | string sql = "DELETE FROM spawn_points WHERE RegionUUID = @RegionUUID"; | ||
2117 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
2118 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
2119 | { | ||
2120 | cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID)); | ||
2121 | conn.Open(); | ||
2122 | cmd.ExecuteNonQuery(); | ||
2123 | } | ||
2124 | foreach (SpawnPoint p in rs.SpawnPoints()) | ||
2125 | { | ||
2126 | sql = "INSERT INTO spawn_points (RegionUUID, Yaw, Pitch, Distance) VALUES (@RegionUUID, @Yaw, @Pitch, @Distance)"; | ||
2127 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
2128 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
2129 | { | ||
2130 | cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID)); | ||
2131 | cmd.Parameters.Add(_Database.CreateParameter("@Yaw", p.Yaw)); | ||
2132 | cmd.Parameters.Add(_Database.CreateParameter("@Pitch", p.Pitch)); | ||
2133 | cmd.Parameters.Add(_Database.CreateParameter("@Distance", p.Distance)); | ||
2134 | conn.Open(); | ||
2135 | cmd.ExecuteNonQuery(); | ||
2136 | } | ||
2137 | } | ||
2138 | } | ||
2066 | } | 2139 | } |
2067 | } | 2140 | } |
diff --git a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations index a98690a..d6a3be9 100644 --- a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations | |||
@@ -1044,10 +1044,93 @@ ALTER TABLE primitems ALTER COLUMN CreatorID uniqueidentifier NOT NULL | |||
1044 | 1044 | ||
1045 | COMMIT | 1045 | COMMIT |
1046 | 1046 | ||
1047 | :VERSION 29 #--------------------- | 1047 | :VERSION 29 #----------------- Region Covenant changed time |
1048 | 1048 | ||
1049 | BEGIN TRANSACTION | 1049 | BEGIN TRANSACTION |
1050 | 1050 | ||
1051 | ALTER TABLE regionsettings ADD covenant_datetime int NOT NULL default 0 | 1051 | ALTER TABLE regionsettings ADD covenant_datetime int NOT NULL default 0 |
1052 | 1052 | ||
1053 | COMMIT | 1053 | COMMIT |
1054 | |||
1055 | :VERSION 30 #------------------Migrate creatorID storage to varchars instead of UUIDs for HG support | ||
1056 | |||
1057 | BEGIN TRANSACTION | ||
1058 | |||
1059 | EXECUTE sp_rename N'dbo.prims.creatorid', N'creatoridold', 'COLUMN' | ||
1060 | EXECUTE sp_rename N'dbo.primitems.creatorid', N'creatoridold', 'COLUMN' | ||
1061 | |||
1062 | COMMIT | ||
1063 | |||
1064 | :VERSION 31 #--------------------- | ||
1065 | |||
1066 | BEGIN TRANSACTION | ||
1067 | |||
1068 | ALTER TABLE prims ADD CreatorID varchar(255) | ||
1069 | ALTER TABLE primitems ADD CreatorID varchar(255) | ||
1070 | |||
1071 | COMMIT | ||
1072 | |||
1073 | :VERSION 32 #--------------------- | ||
1074 | |||
1075 | BEGIN TRANSACTION | ||
1076 | |||
1077 | UPDATE prims SET prims.CreatorID = CONVERT(varchar(255), creatoridold) | ||
1078 | UPDATE primitems SET primitems.CreatorID = CONVERT(varchar(255), creatoridold) | ||
1079 | |||
1080 | COMMIT | ||
1081 | |||
1082 | :VERSION 33 #--------------------- | ||
1083 | |||
1084 | BEGIN TRANSACTION | ||
1085 | |||
1086 | ALTER TABLE prims | ||
1087 | ADD CONSTRAINT DF_prims_CreatorIDNew | ||
1088 | DEFAULT '00000000-0000-0000-0000-000000000000' | ||
1089 | FOR CreatorID | ||
1090 | |||
1091 | ALTER TABLE prims ALTER COLUMN CreatorID varchar(255) NOT NULL | ||
1092 | |||
1093 | ALTER TABLE primitems | ||
1094 | ADD CONSTRAINT DF_primitems_CreatorIDNew | ||
1095 | DEFAULT '00000000-0000-0000-0000-000000000000' | ||
1096 | FOR CreatorID | ||
1097 | |||
1098 | ALTER TABLE primitems ALTER COLUMN CreatorID varchar(255) NOT NULL | ||
1099 | |||
1100 | COMMIT | ||
1101 | |||
1102 | :VERSION 34 #--------------- Telehub support | ||
1103 | |||
1104 | BEGIN TRANSACTION | ||
1105 | |||
1106 | CREATE TABLE [dbo].[Spawn_Points]( | ||
1107 | [RegionUUID] [uniqueidentifier] NOT NULL, | ||
1108 | [Yaw] [float] NOT NULL, | ||
1109 | [Pitch] [float] NOT NULL, | ||
1110 | [Distance] [float] NOT NULL, | ||
1111 | PRIMARY KEY CLUSTERED | ||
1112 | ( | ||
1113 | [RegionUUID] ASC | ||
1114 | )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] | ||
1115 | ) ON [PRIMARY] | ||
1116 | |||
1117 | ALTER TABLE regionsettings ADD TelehubObject uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; | ||
1118 | |||
1119 | COMMIT | ||
1120 | |||
1121 | :VERSION 35 #---------------- Parcels for sale | ||
1122 | |||
1123 | BEGIN TRANSACTION | ||
1124 | |||
1125 | ALTER TABLE regionsettings ADD parcel_tile_ID uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; | ||
1126 | |||
1127 | COMMIT | ||
1128 | |||
1129 | :VERSION 36 #---------------- Timed bans/access | ||
1130 | |||
1131 | BEGIN TRANSACTION | ||
1132 | |||
1133 | ALTER TABLE landaccesslist ADD Expires integer NOT NULL DEFAULT 0; | ||
1134 | |||
1135 | COMMIT | ||
1136 | |||
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs index 5dafc0b..1197548 100644 --- a/OpenSim/Data/MySQL/MySQLSimulationData.cs +++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs | |||
@@ -1315,7 +1315,7 @@ namespace OpenSim.Data.MySQL | |||
1315 | newSettings.TerrainRaiseLimit = Convert.ToDouble(row["terrain_raise_limit"]); | 1315 | newSettings.TerrainRaiseLimit = Convert.ToDouble(row["terrain_raise_limit"]); |
1316 | newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]); | 1316 | newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]); |
1317 | newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]); | 1317 | newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]); |
1318 | newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]); | 1318 | newSettings.Sandbox = Convert.ToBoolean(row["Sandbox"]); |
1319 | newSettings.SunVector = new Vector3 ( | 1319 | newSettings.SunVector = new Vector3 ( |
1320 | Convert.ToSingle(row["sunvectorx"]), | 1320 | Convert.ToSingle(row["sunvectorx"]), |
1321 | Convert.ToSingle(row["sunvectory"]), | 1321 | Convert.ToSingle(row["sunvectory"]), |
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs index 186a586..7e7c08a 100644 --- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs +++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs | |||
@@ -2157,7 +2157,7 @@ namespace OpenSim.Data.SQLite | |||
2157 | row["terrain_raise_limit"] = settings.TerrainRaiseLimit; | 2157 | row["terrain_raise_limit"] = settings.TerrainRaiseLimit; |
2158 | row["terrain_lower_limit"] = settings.TerrainLowerLimit; | 2158 | row["terrain_lower_limit"] = settings.TerrainLowerLimit; |
2159 | row["use_estate_sun"] = settings.UseEstateSun; | 2159 | row["use_estate_sun"] = settings.UseEstateSun; |
2160 | row["Sandbox"] = settings.Sandbox; // database uses upper case S for sandbox | 2160 | row["sandbox"] = settings.Sandbox; // unlike other database modules, sqlite uses a lower case s for sandbox! |
2161 | row["sunvectorx"] = settings.SunVector.X; | 2161 | row["sunvectorx"] = settings.SunVector.X; |
2162 | row["sunvectory"] = settings.SunVector.Y; | 2162 | row["sunvectory"] = settings.SunVector.Y; |
2163 | row["sunvectorz"] = settings.SunVector.Z; | 2163 | row["sunvectorz"] = settings.SunVector.Z; |
diff --git a/OpenSim/Framework/Console/MockConsole.cs b/OpenSim/Framework/Console/MockConsole.cs index a29b370..4d8751f 100644 --- a/OpenSim/Framework/Console/MockConsole.cs +++ b/OpenSim/Framework/Console/MockConsole.cs | |||
@@ -29,6 +29,7 @@ using System; | |||
29 | using System.Threading; | 29 | using System.Threading; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.Text; | 31 | using System.Text; |
32 | using System.Xml; | ||
32 | 33 | ||
33 | namespace OpenSim.Framework.Console | 34 | namespace OpenSim.Framework.Console |
34 | { | 35 | { |
@@ -37,28 +38,42 @@ namespace OpenSim.Framework.Console | |||
37 | /// Don't use this except for Unit Testing or you're in for a world of hurt when the | 38 | /// Don't use this except for Unit Testing or you're in for a world of hurt when the |
38 | /// sim gets to ReadLine | 39 | /// sim gets to ReadLine |
39 | /// </summary> | 40 | /// </summary> |
40 | public class MockConsole : CommandConsole | 41 | public class MockConsole : ICommandConsole |
41 | { | 42 | { |
42 | public MockConsole(string defaultPrompt) : base(defaultPrompt) | 43 | private MockCommands m_commands = new MockCommands(); |
43 | { | ||
44 | } | ||
45 | public override void Output(string text) | ||
46 | { | ||
47 | } | ||
48 | public override void Output(string text, string level) | ||
49 | { | ||
50 | } | ||
51 | 44 | ||
52 | public override string ReadLine(string p, bool isCommand, bool e) | 45 | public ICommands Commands { get { return m_commands; } } |
53 | { | 46 | |
54 | //Thread.CurrentThread.Join(1000); | 47 | public void Prompt() {} |
55 | return string.Empty; | 48 | |
56 | } | 49 | public void RunCommand(string cmd) {} |
57 | public override void UnlockOutput() | 50 | |
58 | { | 51 | public string ReadLine(string p, bool isCommand, bool e) { return ""; } |
59 | } | 52 | |
60 | public override void LockOutput() | 53 | public object ConsoleScene { get { return null; } } |
61 | { | 54 | |
62 | } | 55 | public void Output(string text, string level) {} |
56 | public void Output(string text) {} | ||
57 | public void OutputFormat(string format, params object[] components) {} | ||
58 | |||
59 | public string CmdPrompt(string p) { return ""; } | ||
60 | public string CmdPrompt(string p, string def) { return ""; } | ||
61 | public string CmdPrompt(string p, List<char> excludedCharacters) { return ""; } | ||
62 | public string CmdPrompt(string p, string def, List<char> excludedCharacters) { return ""; } | ||
63 | |||
64 | public string CmdPrompt(string prompt, string defaultresponse, List<string> options) { return ""; } | ||
65 | |||
66 | public string PasswdPrompt(string p) { return ""; } | ||
67 | } | ||
68 | |||
69 | public class MockCommands : ICommands | ||
70 | { | ||
71 | public void FromXml(XmlElement root, CommandDelegate fn) {} | ||
72 | public List<string> GetHelp(string[] cmd) { return null; } | ||
73 | public void AddCommand(string module, bool shared, string command, string help, string longhelp, CommandDelegate fn) {} | ||
74 | public void AddCommand(string module, bool shared, string command, string help, string longhelp, string descriptivehelp, CommandDelegate fn) {} | ||
75 | public string[] FindNextOption(string[] cmd, bool term) { return null; } | ||
76 | public string[] Resolve(string[] cmd) { return null; } | ||
77 | public XmlElement GetXml(XmlDocument doc) { return null; } | ||
63 | } | 78 | } |
64 | } | 79 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 586cde6..daddd1f 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs | |||
@@ -247,7 +247,7 @@ namespace OpenSim.Framework.Servers | |||
247 | string reportFormat = "{0,6} {1,35} {2,16} {3,13} {4,10} {5,30}"; | 247 | string reportFormat = "{0,6} {1,35} {2,16} {3,13} {4,10} {5,30}"; |
248 | 248 | ||
249 | StringBuilder sb = new StringBuilder(); | 249 | StringBuilder sb = new StringBuilder(); |
250 | Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreads(); | 250 | Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreadsInfo(); |
251 | 251 | ||
252 | sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine); | 252 | sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine); |
253 | 253 | ||
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index 2206feb..0062d4e 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -65,6 +65,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
65 | String.Format("PollServiceWorkerThread{0}", i), | 65 | String.Format("PollServiceWorkerThread{0}", i), |
66 | ThreadPriority.Normal, | 66 | ThreadPriority.Normal, |
67 | false, | 67 | false, |
68 | true, | ||
68 | int.MaxValue); | 69 | int.MaxValue); |
69 | } | 70 | } |
70 | 71 | ||
@@ -73,6 +74,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
73 | "PollServiceWatcherThread", | 74 | "PollServiceWatcherThread", |
74 | ThreadPriority.Normal, | 75 | ThreadPriority.Normal, |
75 | false, | 76 | false, |
77 | true, | ||
76 | 1000 * 60 * 10); | 78 | 1000 * 60 * 10); |
77 | } | 79 | } |
78 | 80 | ||
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs index b2bb962..63ec257 100644 --- a/OpenSim/Framework/Servers/VersionInfo.cs +++ b/OpenSim/Framework/Servers/VersionInfo.cs | |||
@@ -29,7 +29,7 @@ namespace OpenSim | |||
29 | { | 29 | { |
30 | public class VersionInfo | 30 | public class VersionInfo |
31 | { | 31 | { |
32 | private const string VERSION_NUMBER = "0.7.3CM"; | 32 | private const string VERSION_NUMBER = "0.7.4CM"; |
33 | private const Flavour VERSION_FLAVOUR = Flavour.Dev; | 33 | private const Flavour VERSION_FLAVOUR = Flavour.Dev; |
34 | 34 | ||
35 | public enum Flavour | 35 | public enum Flavour |
diff --git a/OpenSim/Framework/Watchdog.cs b/OpenSim/Framework/Watchdog.cs index fa94109..881b6aa 100644 --- a/OpenSim/Framework/Watchdog.cs +++ b/OpenSim/Framework/Watchdog.cs | |||
@@ -72,6 +72,11 @@ namespace OpenSim.Framework | |||
72 | /// </summary> | 72 | /// </summary> |
73 | public bool IsTimedOut { get; set; } | 73 | public bool IsTimedOut { get; set; } |
74 | 74 | ||
75 | /// <summary> | ||
76 | /// Will this thread trigger the alarm function if it has timed out? | ||
77 | /// </summary> | ||
78 | public bool AlarmIfTimeout { get; set; } | ||
79 | |||
75 | public ThreadWatchdogInfo(Thread thread, int timeout) | 80 | public ThreadWatchdogInfo(Thread thread, int timeout) |
76 | { | 81 | { |
77 | Thread = thread; | 82 | Thread = thread; |
@@ -112,12 +117,13 @@ namespace OpenSim.Framework | |||
112 | /// <param name="start">The method that will be executed in a new thread</param> | 117 | /// <param name="start">The method that will be executed in a new thread</param> |
113 | /// <param name="name">A name to give to the new thread</param> | 118 | /// <param name="name">A name to give to the new thread</param> |
114 | /// <param name="priority">Priority to run the thread at</param> | 119 | /// <param name="priority">Priority to run the thread at</param> |
115 | /// <param name="isBackground">True to run this thread as a background | 120 | /// <param name="isBackground">True to run this thread as a background thread, otherwise false</param> |
116 | /// thread, otherwise false</param> | 121 | /// <param name="alarmIfTimeout">Trigger an alarm function is we have timed out</param> |
117 | /// <returns>The newly created Thread object</returns> | 122 | /// <returns>The newly created Thread object</returns> |
118 | public static Thread StartThread(ThreadStart start, string name, ThreadPriority priority, bool isBackground) | 123 | public static Thread StartThread( |
124 | ThreadStart start, string name, ThreadPriority priority, bool isBackground, bool alarmIfTimeout) | ||
119 | { | 125 | { |
120 | return StartThread(start, name, priority, isBackground, WATCHDOG_TIMEOUT_MS); | 126 | return StartThread(start, name, priority, isBackground, alarmIfTimeout, WATCHDOG_TIMEOUT_MS); |
121 | } | 127 | } |
122 | 128 | ||
123 | /// <summary> | 129 | /// <summary> |
@@ -128,21 +134,21 @@ namespace OpenSim.Framework | |||
128 | /// <param name="priority">Priority to run the thread at</param> | 134 | /// <param name="priority">Priority to run the thread at</param> |
129 | /// <param name="isBackground">True to run this thread as a background | 135 | /// <param name="isBackground">True to run this thread as a background |
130 | /// thread, otherwise false</param> | 136 | /// thread, otherwise false</param> |
131 | /// <param name="timeout"> | 137 | /// <param name="alarmIfTimeout">Trigger an alarm function is we have timed out</param> |
132 | /// Number of milliseconds to wait until we issue a warning about timeout. | 138 | /// <param name="timeout">Number of milliseconds to wait until we issue a warning about timeout.</param> |
133 | /// </para> | ||
134 | /// <returns>The newly created Thread object</returns> | 139 | /// <returns>The newly created Thread object</returns> |
135 | public static Thread StartThread( | 140 | public static Thread StartThread( |
136 | ThreadStart start, string name, ThreadPriority priority, bool isBackground, int timeout) | 141 | ThreadStart start, string name, ThreadPriority priority, bool isBackground, bool alarmIfTimeout, int timeout) |
137 | { | 142 | { |
138 | Thread thread = new Thread(start); | 143 | Thread thread = new Thread(start); |
139 | thread.Name = name; | 144 | thread.Name = name; |
140 | thread.Priority = priority; | 145 | thread.Priority = priority; |
141 | thread.IsBackground = isBackground; | 146 | thread.IsBackground = isBackground; |
142 | 147 | ||
143 | ThreadWatchdogInfo twi = new ThreadWatchdogInfo(thread, timeout); | 148 | ThreadWatchdogInfo twi = new ThreadWatchdogInfo(thread, timeout) { AlarmIfTimeout = alarmIfTimeout }; |
144 | 149 | ||
145 | m_log.Debug("[WATCHDOG]: Started tracking thread \"" + twi.Thread.Name + "\" (ID " + twi.Thread.ManagedThreadId + ")"); | 150 | m_log.DebugFormat( |
151 | "[WATCHDOG]: Started tracking thread {0}, ID {1}", twi.Thread.Name, twi.Thread.ManagedThreadId); | ||
146 | 152 | ||
147 | lock (m_threads) | 153 | lock (m_threads) |
148 | m_threads.Add(twi.Thread.ManagedThreadId, twi); | 154 | m_threads.Add(twi.Thread.ManagedThreadId, twi); |
@@ -224,19 +230,39 @@ namespace OpenSim.Framework | |||
224 | /// Get currently watched threads for diagnostic purposes | 230 | /// Get currently watched threads for diagnostic purposes |
225 | /// </summary> | 231 | /// </summary> |
226 | /// <returns></returns> | 232 | /// <returns></returns> |
227 | public static ThreadWatchdogInfo[] GetThreads() | 233 | public static ThreadWatchdogInfo[] GetThreadsInfo() |
228 | { | 234 | { |
229 | lock (m_threads) | 235 | lock (m_threads) |
230 | return m_threads.Values.ToArray(); | 236 | return m_threads.Values.ToArray(); |
231 | } | 237 | } |
232 | 238 | ||
239 | /// <summary> | ||
240 | /// Return the current thread's watchdog info. | ||
241 | /// </summary> | ||
242 | /// <returns>The watchdog info. null if the thread isn't being monitored.</returns> | ||
243 | public static ThreadWatchdogInfo GetCurrentThreadInfo() | ||
244 | { | ||
245 | lock (m_threads) | ||
246 | { | ||
247 | if (m_threads.ContainsKey(Thread.CurrentThread.ManagedThreadId)) | ||
248 | return m_threads[Thread.CurrentThread.ManagedThreadId]; | ||
249 | } | ||
250 | |||
251 | return null; | ||
252 | } | ||
253 | |||
254 | /// <summary> | ||
255 | /// Check watched threads. Fire alarm if appropriate. | ||
256 | /// </summary> | ||
257 | /// <param name="sender"></param> | ||
258 | /// <param name="e"></param> | ||
233 | private static void WatchdogTimerElapsed(object sender, System.Timers.ElapsedEventArgs e) | 259 | private static void WatchdogTimerElapsed(object sender, System.Timers.ElapsedEventArgs e) |
234 | { | 260 | { |
235 | WatchdogTimeout callback = OnWatchdogTimeout; | 261 | WatchdogTimeout callback = OnWatchdogTimeout; |
236 | 262 | ||
237 | if (callback != null) | 263 | if (callback != null) |
238 | { | 264 | { |
239 | ThreadWatchdogInfo timedOut = null; | 265 | List<ThreadWatchdogInfo> callbackInfos = null; |
240 | 266 | ||
241 | lock (m_threads) | 267 | lock (m_threads) |
242 | { | 268 | { |
@@ -246,21 +272,31 @@ namespace OpenSim.Framework | |||
246 | { | 272 | { |
247 | if (threadInfo.Thread.ThreadState == ThreadState.Stopped) | 273 | if (threadInfo.Thread.ThreadState == ThreadState.Stopped) |
248 | { | 274 | { |
249 | timedOut = threadInfo; | ||
250 | RemoveThread(threadInfo.Thread.ManagedThreadId); | 275 | RemoveThread(threadInfo.Thread.ManagedThreadId); |
251 | break; | 276 | |
277 | if (callbackInfos == null) | ||
278 | callbackInfos = new List<ThreadWatchdogInfo>(); | ||
279 | |||
280 | callbackInfos.Add(threadInfo); | ||
252 | } | 281 | } |
253 | else if (!threadInfo.IsTimedOut && now - threadInfo.LastTick >= threadInfo.Timeout) | 282 | else if (!threadInfo.IsTimedOut && now - threadInfo.LastTick >= threadInfo.Timeout) |
254 | { | 283 | { |
255 | threadInfo.IsTimedOut = true; | 284 | threadInfo.IsTimedOut = true; |
256 | timedOut = threadInfo; | 285 | |
257 | break; | 286 | if (threadInfo.AlarmIfTimeout) |
287 | { | ||
288 | if (callbackInfos == null) | ||
289 | callbackInfos = new List<ThreadWatchdogInfo>(); | ||
290 | |||
291 | callbackInfos.Add(threadInfo); | ||
292 | } | ||
258 | } | 293 | } |
259 | } | 294 | } |
260 | } | 295 | } |
261 | 296 | ||
262 | if (timedOut != null) | 297 | if (callbackInfos != null) |
263 | callback(timedOut.Thread, timedOut.LastTick); | 298 | foreach (ThreadWatchdogInfo callbackInfo in callbackInfos) |
299 | callback(callbackInfo.Thread, callbackInfo.LastTick); | ||
264 | } | 300 | } |
265 | 301 | ||
266 | m_watchdogTimer.Start(); | 302 | m_watchdogTimer.Start(); |
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs index 854f310..f90df12 100644 --- a/OpenSim/Framework/WebUtil.cs +++ b/OpenSim/Framework/WebUtil.cs | |||
@@ -63,77 +63,7 @@ namespace OpenSim.Framework | |||
63 | // a "long" call for warning & debugging purposes | 63 | // a "long" call for warning & debugging purposes |
64 | public const int LongCallTime = 500; | 64 | public const int LongCallTime = 500; |
65 | 65 | ||
66 | // /// <summary> | 66 | #region JSONRequest |
67 | // /// Send LLSD to an HTTP client in application/llsd+json form | ||
68 | // /// </summary> | ||
69 | // /// <param name="response">HTTP response to send the data in</param> | ||
70 | // /// <param name="body">LLSD to send to the client</param> | ||
71 | // public static void SendJSONResponse(OSHttpResponse response, OSDMap body) | ||
72 | // { | ||
73 | // byte[] responseData = Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(body)); | ||
74 | // | ||
75 | // response.ContentEncoding = Encoding.UTF8; | ||
76 | // response.ContentLength = responseData.Length; | ||
77 | // response.ContentType = "application/llsd+json"; | ||
78 | // response.Body.Write(responseData, 0, responseData.Length); | ||
79 | // } | ||
80 | // | ||
81 | // /// <summary> | ||
82 | // /// Send LLSD to an HTTP client in application/llsd+xml form | ||
83 | // /// </summary> | ||
84 | // /// <param name="response">HTTP response to send the data in</param> | ||
85 | // /// <param name="body">LLSD to send to the client</param> | ||
86 | // public static void SendXMLResponse(OSHttpResponse response, OSDMap body) | ||
87 | // { | ||
88 | // byte[] responseData = OSDParser.SerializeLLSDXmlBytes(body); | ||
89 | // | ||
90 | // response.ContentEncoding = Encoding.UTF8; | ||
91 | // response.ContentLength = responseData.Length; | ||
92 | // response.ContentType = "application/llsd+xml"; | ||
93 | // response.Body.Write(responseData, 0, responseData.Length); | ||
94 | // } | ||
95 | |||
96 | /// <summary> | ||
97 | /// Make a GET or GET-like request to a web service that returns LLSD | ||
98 | /// or JSON data | ||
99 | /// </summary> | ||
100 | public static OSDMap ServiceRequest(string url, string httpVerb) | ||
101 | { | ||
102 | string errorMessage; | ||
103 | |||
104 | try | ||
105 | { | ||
106 | HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); | ||
107 | request.Method = httpVerb; | ||
108 | |||
109 | using (WebResponse response = request.GetResponse()) | ||
110 | { | ||
111 | using (Stream responseStream = response.GetResponseStream()) | ||
112 | { | ||
113 | try | ||
114 | { | ||
115 | string responseStr = responseStream.GetStreamString(); | ||
116 | OSD responseOSD = OSDParser.Deserialize(responseStr); | ||
117 | if (responseOSD.Type == OSDType.Map) | ||
118 | return (OSDMap)responseOSD; | ||
119 | else | ||
120 | errorMessage = "Response format was invalid."; | ||
121 | } | ||
122 | catch | ||
123 | { | ||
124 | errorMessage = "Failed to parse the response."; | ||
125 | } | ||
126 | } | ||
127 | } | ||
128 | } | ||
129 | catch (Exception ex) | ||
130 | { | ||
131 | m_log.Warn(httpVerb + " on URL " + url + " failed: " + ex.Message); | ||
132 | errorMessage = ex.Message; | ||
133 | } | ||
134 | |||
135 | return new OSDMap { { "Message", OSD.FromString("Service request failed. " + errorMessage) } }; | ||
136 | } | ||
137 | 67 | ||
138 | /// <summary> | 68 | /// <summary> |
139 | /// PUT JSON-encoded data to a web service that returns LLSD or | 69 | /// PUT JSON-encoded data to a web service that returns LLSD or |
@@ -304,6 +234,10 @@ namespace OpenSim.Framework | |||
304 | return result; | 234 | return result; |
305 | } | 235 | } |
306 | 236 | ||
237 | #endregion JSONRequest | ||
238 | |||
239 | #region FormRequest | ||
240 | |||
307 | /// <summary> | 241 | /// <summary> |
308 | /// POST URL-encoded form data to a web service that returns LLSD or | 242 | /// POST URL-encoded form data to a web service that returns LLSD or |
309 | /// JSON data | 243 | /// JSON data |
@@ -398,6 +332,8 @@ namespace OpenSim.Framework | |||
398 | result["Message"] = OSD.FromString("Service request failed: " + msg); | 332 | result["Message"] = OSD.FromString("Service request failed: " + msg); |
399 | return result; | 333 | return result; |
400 | } | 334 | } |
335 | |||
336 | #endregion FormRequest | ||
401 | 337 | ||
402 | #region Uri | 338 | #region Uri |
403 | 339 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index be699db..35cb575 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | |||
@@ -262,7 +262,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
262 | { | 262 | { |
263 | try | 263 | try |
264 | { | 264 | { |
265 | m_log.Debug("[CAPS]: ScriptTaskInventory Request in region: " + m_regionName); | 265 | // m_log.Debug("[CAPS]: ScriptTaskInventory Request in region: " + m_regionName); |
266 | //m_log.DebugFormat("[CAPS]: request: {0}, path: {1}, param: {2}", request, path, param); | 266 | //m_log.DebugFormat("[CAPS]: request: {0}, path: {1}, param: {2}", request, path, param); |
267 | 267 | ||
268 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(Utils.StringToBytes(request)); | 268 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(Utils.StringToBytes(request)); |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index a79b387..75f783b 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -244,8 +244,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
244 | base.Start(m_recvBufferSize, m_asyncPacketHandling); | 244 | base.Start(m_recvBufferSize, m_asyncPacketHandling); |
245 | 245 | ||
246 | // Start the packet processing threads | 246 | // Start the packet processing threads |
247 | Watchdog.StartThread(IncomingPacketHandler, "Incoming Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false); | 247 | Watchdog.StartThread( |
248 | Watchdog.StartThread(OutgoingPacketHandler, "Outgoing Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false); | 248 | IncomingPacketHandler, "Incoming Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false, true); |
249 | Watchdog.StartThread( | ||
250 | OutgoingPacketHandler, "Outgoing Packets (" + m_scene.RegionInfo.RegionName + ")", ThreadPriority.Normal, false, true); | ||
251 | |||
249 | m_elapsedMSSinceLastStatReport = Environment.TickCount; | 252 | m_elapsedMSSinceLastStatReport = Environment.TickCount; |
250 | } | 253 | } |
251 | 254 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index a81f36c..650069a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | |||
@@ -349,8 +349,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
349 | { | 349 | { |
350 | try | 350 | try |
351 | { | 351 | { |
352 | m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME."); | ||
353 | |||
354 | Dictionary<string, object> options = new Dictionary<string, object>(); | 352 | Dictionary<string, object> options = new Dictionary<string, object>(); |
355 | OptionSet optionSet = new OptionSet().Add("m|merge", delegate (string v) { options["merge"] = v != null; }); | 353 | OptionSet optionSet = new OptionSet().Add("m|merge", delegate (string v) { options["merge"] = v != null; }); |
356 | 354 | ||
@@ -412,7 +410,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
412 | return; | 410 | return; |
413 | } | 411 | } |
414 | 412 | ||
415 | m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME."); | ||
416 | if (options.ContainsKey("home")) | 413 | if (options.ContainsKey("home")) |
417 | m_log.WarnFormat("[INVENTORY ARCHIVER]: Please be aware that inventory archives with creator information are not compatible with OpenSim 0.7.0.2 and earlier. Do not use the -home option if you want to produce a compatible IAR"); | 414 | m_log.WarnFormat("[INVENTORY ARCHIVER]: Please be aware that inventory archives with creator information are not compatible with OpenSim 0.7.0.2 and earlier. Do not use the -home option if you want to produce a compatible IAR"); |
418 | 415 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Profile/BasicProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/Profile/BasicProfileModule.cs index eb1e4b5..8101ca2 100644 --- a/OpenSim/Region/CoreModules/Avatar/Profile/BasicProfileModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Profile/BasicProfileModule.cs | |||
@@ -150,7 +150,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Profile | |||
150 | string skillsText = String.Empty; | 150 | string skillsText = String.Empty; |
151 | string languages = String.Empty; | 151 | string languages = String.Empty; |
152 | 152 | ||
153 | Byte[] charterMember = Utils.StringToBytes("Avatar"); | 153 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, avatarID); |
154 | |||
155 | string name = "Avatar"; | ||
156 | int created = 0; | ||
157 | if (account != null) | ||
158 | { | ||
159 | name = account.FirstName + " " + account.LastName; | ||
160 | created = account.Created; | ||
161 | } | ||
162 | Byte[] charterMember = Utils.StringToBytes(name); | ||
154 | 163 | ||
155 | profileUrl = "No profile data"; | 164 | profileUrl = "No profile data"; |
156 | aboutText = string.Empty; | 165 | aboutText = string.Empty; |
@@ -160,7 +169,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Profile | |||
160 | partner = UUID.Zero; | 169 | partner = UUID.Zero; |
161 | 170 | ||
162 | remoteClient.SendAvatarProperties(avatarID, aboutText, | 171 | remoteClient.SendAvatarProperties(avatarID, aboutText, |
163 | Util.ToDateTime(0).ToString( | 172 | Util.ToDateTime(created).ToString( |
164 | "M/d/yyyy", CultureInfo.InvariantCulture), | 173 | "M/d/yyyy", CultureInfo.InvariantCulture), |
165 | charterMember, firstLifeAboutText, | 174 | charterMember, firstLifeAboutText, |
166 | (uint)(0 & 0xff), | 175 | (uint)(0 & 0xff), |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index 0c4ff7f..d2fe388 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs | |||
@@ -117,7 +117,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
117 | string userAssetServer = string.Empty; | 117 | string userAssetServer = string.Empty; |
118 | if (IsForeignUser(avatarID, out userAssetServer) && userAssetServer != string.Empty && m_OutboundPermission) | 118 | if (IsForeignUser(avatarID, out userAssetServer) && userAssetServer != string.Empty && m_OutboundPermission) |
119 | { | 119 | { |
120 | Util.FireAndForget(delegate { m_assMapper.Post(assetID, avatarID, userAssetServer); }); | 120 | m_assMapper.Post(assetID, avatarID, userAssetServer); |
121 | } | 121 | } |
122 | } | 122 | } |
123 | 123 | ||
diff --git a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs index f367739..a6e2548 100644 --- a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs +++ b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs | |||
@@ -1210,7 +1210,7 @@ namespace OpenSim.Region.CoreModules.InterGrid | |||
1210 | if (homeScene.TryGetScenePresence(avatarId,out avatar)) | 1210 | if (homeScene.TryGetScenePresence(avatarId,out avatar)) |
1211 | { | 1211 | { |
1212 | KillAUser ku = new KillAUser(avatar,mod); | 1212 | KillAUser ku = new KillAUser(avatar,mod); |
1213 | Watchdog.StartThread(ku.ShutdownNoLogout, "OGPShutdown", ThreadPriority.Normal, true); | 1213 | Watchdog.StartThread(ku.ShutdownNoLogout, "OGPShutdown", ThreadPriority.Normal, true, true); |
1214 | } | 1214 | } |
1215 | } | 1215 | } |
1216 | 1216 | ||
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 4ebfb21..0cbe1e1 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -132,7 +132,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
132 | { | 132 | { |
133 | } | 133 | } |
134 | 134 | ||
135 | public Type ReplaceableInterface | 135 | public Type ReplaceableInterface |
136 | { | 136 | { |
137 | get { return null; } | 137 | get { return null; } |
138 | } | 138 | } |
@@ -220,7 +220,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
220 | // There is a major hack going on in this method. The viewer doesn't request | 220 | // There is a major hack going on in this method. The viewer doesn't request |
221 | // map blocks (RequestMapBlocks) above 2048. That means that if we don't hack, | 221 | // map blocks (RequestMapBlocks) above 2048. That means that if we don't hack, |
222 | // grids above that cell don't have a map at all. So, here's the hack: we wait | 222 | // grids above that cell don't have a map at all. So, here's the hack: we wait |
223 | // for this CAP request to come, and we inject the map blocks at this point. | 223 | // for this CAP request to come, and we inject the map blocks at this point. |
224 | // In a normal scenario, this request simply sends back the MapLayer (the blue color). | 224 | // In a normal scenario, this request simply sends back the MapLayer (the blue color). |
225 | // In the hacked scenario, it also sends the map blocks via UDP. | 225 | // In the hacked scenario, it also sends the map blocks via UDP. |
226 | // | 226 | // |
@@ -351,6 +351,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
351 | process, | 351 | process, |
352 | string.Format("MapItemRequestThread ({0})", m_scene.RegionInfo.RegionName), | 352 | string.Format("MapItemRequestThread ({0})", m_scene.RegionInfo.RegionName), |
353 | ThreadPriority.BelowNormal, | 353 | ThreadPriority.BelowNormal, |
354 | true, | ||
354 | true); | 355 | true); |
355 | } | 356 | } |
356 | 357 | ||
@@ -750,7 +751,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
750 | { | 751 | { |
751 | uint x = 0, y = 0; | 752 | uint x = 0, y = 0; |
752 | Utils.LongToUInts(regionhandle, out x, out y); | 753 | Utils.LongToUInts(regionhandle, out x, out y); |
753 | GridRegion mreg = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y); | 754 | GridRegion mreg = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y); |
754 | 755 | ||
755 | if (mreg != null) | 756 | if (mreg != null) |
756 | { | 757 | { |
@@ -856,7 +857,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
856 | finally | 857 | finally |
857 | { | 858 | { |
858 | if (os != null) | 859 | if (os != null) |
859 | os.Close(); | 860 | os.Close(); |
860 | } | 861 | } |
861 | 862 | ||
862 | string response_mapItems_reply = null; | 863 | string response_mapItems_reply = null; |
@@ -959,16 +960,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
959 | // on an unloaded square. | 960 | // on an unloaded square. |
960 | // But make sure: Look whether the one we requested is in there | 961 | // But make sure: Look whether the one we requested is in there |
961 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | 962 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, |
962 | minX * (int)Constants.RegionSize, | 963 | minX * (int)Constants.RegionSize, |
963 | maxX * (int)Constants.RegionSize, | 964 | maxX * (int)Constants.RegionSize, |
964 | minY * (int)Constants.RegionSize, | 965 | minY * (int)Constants.RegionSize, |
965 | maxY * (int)Constants.RegionSize); | 966 | maxY * (int)Constants.RegionSize); |
966 | 967 | ||
967 | if (regions != null) | 968 | if (regions != null) |
968 | { | 969 | { |
969 | foreach (GridRegion r in regions) | 970 | foreach (GridRegion r in regions) |
970 | { | 971 | { |
971 | if ((r.RegionLocX == minX * (int)Constants.RegionSize) && | 972 | if ((r.RegionLocX == minX * (int)Constants.RegionSize) && |
972 | (r.RegionLocY == minY * (int)Constants.RegionSize)) | 973 | (r.RegionLocY == minY * (int)Constants.RegionSize)) |
973 | { | 974 | { |
974 | // found it => add it to response | 975 | // found it => add it to response |
@@ -1003,7 +1004,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1003 | { | 1004 | { |
1004 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); | 1005 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); |
1005 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | 1006 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, |
1006 | (minX - 4) * (int)Constants.RegionSize, | 1007 | (minX - 4) * (int)Constants.RegionSize, |
1007 | (maxX + 4) * (int)Constants.RegionSize, | 1008 | (maxX + 4) * (int)Constants.RegionSize, |
1008 | (minY - 4) * (int)Constants.RegionSize, | 1009 | (minY - 4) * (int)Constants.RegionSize, |
1009 | (maxY + 4) * (int)Constants.RegionSize); | 1010 | (maxY + 4) * (int)Constants.RegionSize); |
@@ -1335,7 +1336,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1335 | // Cannot create a map for a nonexistant heightmap | 1336 | // Cannot create a map for a nonexistant heightmap |
1336 | if (m_scene.Heightmap == null) | 1337 | if (m_scene.Heightmap == null) |
1337 | return; | 1338 | return; |
1338 | 1339 | ||
1339 | //create a texture asset of the terrain | 1340 | //create a texture asset of the terrain |
1340 | IMapImageGenerator terrain = m_scene.RequestModuleInterface<IMapImageGenerator>(); | 1341 | IMapImageGenerator terrain = m_scene.RequestModuleInterface<IMapImageGenerator>(); |
1341 | if (terrain == null) | 1342 | if (terrain == null) |
@@ -1344,7 +1345,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1344 | byte[] data = terrain.WriteJpeg2000Image(); | 1345 | byte[] data = terrain.WriteJpeg2000Image(); |
1345 | if (data == null) | 1346 | if (data == null) |
1346 | return; | 1347 | return; |
1347 | 1348 | ||
1348 | byte[] overlay = GenerateOverlay(); | 1349 | byte[] overlay = GenerateOverlay(); |
1349 | 1350 | ||
1350 | m_log.Debug("[WORLDMAP]: STORING MAPTILE IMAGE"); | 1351 | m_log.Debug("[WORLDMAP]: STORING MAPTILE IMAGE"); |
@@ -1365,7 +1366,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1365 | // Store the new one | 1366 | // Store the new one |
1366 | m_log.DebugFormat("[WORLDMAP]: Storing map tile {0}", asset.ID); | 1367 | m_log.DebugFormat("[WORLDMAP]: Storing map tile {0}", asset.ID); |
1367 | m_scene.AssetService.Store(asset); | 1368 | m_scene.AssetService.Store(asset); |
1368 | 1369 | ||
1369 | if (overlay != null) | 1370 | if (overlay != null) |
1370 | { | 1371 | { |
1371 | parcelImageID = UUID.Random(); | 1372 | parcelImageID = UUID.Random(); |
@@ -1389,7 +1390,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1389 | m_scene.RegionInfo.RegionSettings.TerrainImageID = terrainImageID; | 1390 | m_scene.RegionInfo.RegionSettings.TerrainImageID = terrainImageID; |
1390 | m_scene.RegionInfo.RegionSettings.ParcelImageID = parcelImageID; | 1391 | m_scene.RegionInfo.RegionSettings.ParcelImageID = parcelImageID; |
1391 | m_scene.RegionInfo.RegionSettings.Save(); | 1392 | m_scene.RegionInfo.RegionSettings.Save(); |
1392 | 1393 | ||
1393 | // Delete the old one | 1394 | // Delete the old one |
1394 | // m_log.DebugFormat("[WORLDMAP]: Deleting old map tile {0}", lastTerrainImageID); | 1395 | // m_log.DebugFormat("[WORLDMAP]: Deleting old map tile {0}", lastTerrainImageID); |
1395 | m_scene.AssetService.Delete(lastTerrainImageID.ToString()); | 1396 | m_scene.AssetService.Delete(lastTerrainImageID.ToString()); |
@@ -1510,11 +1511,11 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1510 | 1511 | ||
1511 | if (!landForSale) | 1512 | if (!landForSale) |
1512 | { | 1513 | { |
1513 | m_log.DebugFormat("[WORLD MAP]: Region {0} has no parcels for sale, not geenrating overlay", m_scene.RegionInfo.RegionName); | 1514 | m_log.DebugFormat("[WORLD MAP]: Region {0} has no parcels for sale, not generating overlay", m_scene.RegionInfo.RegionName); |
1514 | return null; | 1515 | return null; |
1515 | } | 1516 | } |
1516 | 1517 | ||
1517 | m_log.DebugFormat("[WORLD MAP]: Region {0} has parcels for sale, genrating overlay", m_scene.RegionInfo.RegionName); | 1518 | m_log.DebugFormat("[WORLD MAP]: Region {0} has parcels for sale, generating overlay", m_scene.RegionInfo.RegionName); |
1518 | 1519 | ||
1519 | try | 1520 | try |
1520 | { | 1521 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 5d27d86..4fc59e2 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1181,7 +1181,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1181 | 1181 | ||
1182 | HeartbeatThread | 1182 | HeartbeatThread |
1183 | = Watchdog.StartThread( | 1183 | = Watchdog.StartThread( |
1184 | Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false); | 1184 | Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false); |
1185 | } | 1185 | } |
1186 | 1186 | ||
1187 | /// <summary> | 1187 | /// <summary> |
@@ -1219,6 +1219,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
1219 | try | 1219 | try |
1220 | { | 1220 | { |
1221 | m_eventManager.TriggerOnRegionStarted(this); | 1221 | m_eventManager.TriggerOnRegionStarted(this); |
1222 | |||
1223 | // The first frame can take a very long time due to physics actors being added on startup. Therefore, | ||
1224 | // don't turn on the watchdog alarm for this thread until the second frame, in order to prevent false | ||
1225 | // alarms for scenes with many objects. | ||
1226 | Update(); | ||
1227 | Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true; | ||
1228 | |||
1222 | while (!shuttingdown) | 1229 | while (!shuttingdown) |
1223 | Update(); | 1230 | Update(); |
1224 | } | 1231 | } |
@@ -1244,7 +1251,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1244 | 1251 | ||
1245 | ++Frame; | 1252 | ++Frame; |
1246 | 1253 | ||
1247 | // m_log.DebugFormat("[SCENE]: Processing frame {0}", Frame); | 1254 | // m_log.DebugFormat("[SCENE]: Processing frame {0} in {1}", Frame, RegionInfo.RegionName); |
1248 | 1255 | ||
1249 | try | 1256 | try |
1250 | { | 1257 | { |
@@ -1406,26 +1413,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1406 | { | 1413 | { |
1407 | throw; | 1414 | throw; |
1408 | } | 1415 | } |
1409 | catch (AccessViolationException e) | ||
1410 | { | ||
1411 | m_log.ErrorFormat( | ||
1412 | "[REGION]: Failed on region {0} with exception {1}{2}", | ||
1413 | RegionInfo.RegionName, e.Message, e.StackTrace); | ||
1414 | } | ||
1415 | //catch (NullReferenceException e) | ||
1416 | //{ | ||
1417 | // m_log.Error("[REGION]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); | ||
1418 | //} | ||
1419 | catch (InvalidOperationException e) | ||
1420 | { | ||
1421 | m_log.ErrorFormat( | ||
1422 | "[REGION]: Failed on region {0} with exception {1}{2}", | ||
1423 | RegionInfo.RegionName, e.Message, e.StackTrace); | ||
1424 | } | ||
1425 | catch (Exception e) | 1416 | catch (Exception e) |
1426 | { | 1417 | { |
1427 | m_log.ErrorFormat( | 1418 | m_log.ErrorFormat( |
1428 | "[REGION]: Failed on region {0} with exception {1}{2}", | 1419 | "[SCENE]: Failed on region {0} with exception {1}{2}", |
1429 | RegionInfo.RegionName, e.Message, e.StackTrace); | 1420 | RegionInfo.RegionName, e.Message, e.StackTrace); |
1430 | } | 1421 | } |
1431 | 1422 | ||
@@ -1467,7 +1458,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1467 | entry.checkAtTargets(); | 1458 | entry.checkAtTargets(); |
1468 | } | 1459 | } |
1469 | 1460 | ||
1470 | |||
1471 | /// <summary> | 1461 | /// <summary> |
1472 | /// Send out simstats data to all clients | 1462 | /// Send out simstats data to all clients |
1473 | /// </summary> | 1463 | /// </summary> |
@@ -4342,16 +4332,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
4342 | public bool PipeEventsForScript(uint localID) | 4332 | public bool PipeEventsForScript(uint localID) |
4343 | { | 4333 | { |
4344 | SceneObjectPart part = GetSceneObjectPart(localID); | 4334 | SceneObjectPart part = GetSceneObjectPart(localID); |
4335 | |||
4345 | if (part != null) | 4336 | if (part != null) |
4346 | { | 4337 | { |
4347 | // Changed so that child prims of attachments return ScriptDanger for their parent, so that | ||
4348 | // their scripts will actually run. | ||
4349 | // -- Leaf, Tue Aug 12 14:17:05 EDT 2008 | ||
4350 | SceneObjectPart parent = part.ParentGroup.RootPart; | 4338 | SceneObjectPart parent = part.ParentGroup.RootPart; |
4351 | if (part.ParentGroup.IsAttachment) | 4339 | return ScriptDanger(parent, parent.GetWorldPosition()); |
4352 | return ScriptDanger(parent, parent.GetWorldPosition()); | ||
4353 | else | ||
4354 | return ScriptDanger(part, part.GetWorldPosition()); | ||
4355 | } | 4340 | } |
4356 | else | 4341 | else |
4357 | { | 4342 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 65ffe92..b806d91 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -156,8 +156,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
156 | // that the region position is cached or performance will degrade | 156 | // that the region position is cached or performance will degrade |
157 | Utils.LongToUInts(regionHandle, out x, out y); | 157 | Utils.LongToUInts(regionHandle, out x, out y); |
158 | GridRegion dest = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | 158 | GridRegion dest = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); |
159 | bool v = true; | 159 | // bool v = true; |
160 | if (! simulatorList.Contains(dest.ServerURI)) | 160 | if (!simulatorList.Contains(dest.ServerURI)) |
161 | { | 161 | { |
162 | // we havent seen this simulator before, add it to the list | 162 | // we havent seen this simulator before, add it to the list |
163 | // and send it an update | 163 | // and send it an update |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 26fa6c0..2efb0d2 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -349,13 +349,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
349 | /// </summary> | 349 | /// </summary> |
350 | protected Vector3 m_lastCameraPosition; | 350 | protected Vector3 m_lastCameraPosition; |
351 | 351 | ||
352 | protected Vector3 m_CameraPosition; | 352 | public Vector3 CameraPosition { get; set; } |
353 | |||
354 | public Vector3 CameraPosition | ||
355 | { | ||
356 | get { return m_CameraPosition; } | ||
357 | private set { m_CameraPosition = value; } | ||
358 | } | ||
359 | 353 | ||
360 | public Quaternion CameraRotation | 354 | public Quaternion CameraRotation |
361 | { | 355 | { |
@@ -365,28 +359,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
365 | // Use these three vectors to figure out what the agent is looking at | 359 | // Use these three vectors to figure out what the agent is looking at |
366 | // Convert it to a Matrix and/or Quaternion | 360 | // Convert it to a Matrix and/or Quaternion |
367 | // | 361 | // |
368 | protected Vector3 m_CameraAtAxis; | 362 | public Vector3 CameraAtAxis { get; set; } |
369 | protected Vector3 m_CameraLeftAxis; | 363 | public Vector3 CameraLeftAxis { get; set; } |
370 | protected Vector3 m_CameraUpAxis; | 364 | public Vector3 CameraUpAxis { get; set; } |
371 | |||
372 | public Vector3 CameraAtAxis | ||
373 | { | ||
374 | get { return m_CameraAtAxis; } | ||
375 | private set { m_CameraAtAxis = value; } | ||
376 | } | ||
377 | |||
378 | |||
379 | public Vector3 CameraLeftAxis | ||
380 | { | ||
381 | get { return m_CameraLeftAxis; } | ||
382 | private set { m_CameraLeftAxis = value; } | ||
383 | } | ||
384 | |||
385 | public Vector3 CameraUpAxis | ||
386 | { | ||
387 | get { return m_CameraUpAxis; } | ||
388 | private set { m_CameraUpAxis = value; } | ||
389 | } | ||
390 | 365 | ||
391 | public Vector3 Lookat | 366 | public Vector3 Lookat |
392 | { | 367 | { |
@@ -402,33 +377,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
402 | } | 377 | } |
403 | #endregion | 378 | #endregion |
404 | 379 | ||
405 | public readonly string Firstname; | 380 | public string Firstname { get; private set; } |
406 | public readonly string Lastname; | 381 | public string Lastname { get; private set; } |
407 | 382 | ||
408 | private string m_grouptitle; | 383 | public string Grouptitle { get; set; } |
409 | |||
410 | public string Grouptitle | ||
411 | { | ||
412 | get { return m_grouptitle; } | ||
413 | set { m_grouptitle = value; } | ||
414 | } | ||
415 | 384 | ||
416 | // Agent's Draw distance. | 385 | // Agent's Draw distance. |
417 | protected float m_DrawDistance; | 386 | public float DrawDistance { get; set; } |
418 | |||
419 | public float DrawDistance | ||
420 | { | ||
421 | get { return m_DrawDistance; } | ||
422 | private set { m_DrawDistance = value; } | ||
423 | } | ||
424 | |||
425 | protected bool m_allowMovement = true; | ||
426 | 387 | ||
427 | public bool AllowMovement | 388 | public bool AllowMovement { get; set; } |
428 | { | ||
429 | get { return m_allowMovement; } | ||
430 | set { m_allowMovement = value; } | ||
431 | } | ||
432 | 389 | ||
433 | private bool m_setAlwaysRun; | 390 | private bool m_setAlwaysRun; |
434 | 391 | ||
@@ -455,13 +412,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
455 | } | 412 | } |
456 | } | 413 | } |
457 | 414 | ||
458 | private byte m_state; | 415 | public byte State { get; set; } |
459 | |||
460 | public byte State | ||
461 | { | ||
462 | get { return m_state; } | ||
463 | set { m_state = value; } | ||
464 | } | ||
465 | 416 | ||
466 | private AgentManager.ControlFlags m_AgentControlFlags; | 417 | private AgentManager.ControlFlags m_AgentControlFlags; |
467 | 418 | ||
@@ -471,29 +422,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
471 | set { m_AgentControlFlags = (AgentManager.ControlFlags)value; } | 422 | set { m_AgentControlFlags = (AgentManager.ControlFlags)value; } |
472 | } | 423 | } |
473 | 424 | ||
474 | /// <summary> | 425 | public IClientAPI ControllingClient { get; set; } |
475 | /// This works out to be the ClientView object associated with this avatar, or it's client connection manager | ||
476 | /// </summary> | ||
477 | private IClientAPI m_controllingClient; | ||
478 | |||
479 | public IClientAPI ControllingClient | ||
480 | { | ||
481 | get { return m_controllingClient; } | ||
482 | private set { m_controllingClient = value; } | ||
483 | } | ||
484 | 426 | ||
485 | public IClientCore ClientView | 427 | public IClientCore ClientView |
486 | { | 428 | { |
487 | get { return (IClientCore) m_controllingClient; } | 429 | get { return (IClientCore)ControllingClient; } |
488 | } | 430 | } |
489 | 431 | ||
490 | protected Vector3 m_parentPosition; | 432 | public Vector3 ParentPosition { get; set; } |
491 | |||
492 | public Vector3 ParentPosition | ||
493 | { | ||
494 | get { return m_parentPosition; } | ||
495 | set { m_parentPosition = value; } | ||
496 | } | ||
497 | 433 | ||
498 | /// <summary> | 434 | /// <summary> |
499 | /// Position of this avatar relative to the region the avatar is in | 435 | /// Position of this avatar relative to the region the avatar is in |
@@ -760,7 +696,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
760 | IClientAPI client, Scene world, AvatarAppearance appearance, PresenceType type) | 696 | IClientAPI client, Scene world, AvatarAppearance appearance, PresenceType type) |
761 | { | 697 | { |
762 | AttachmentsSyncLock = new Object(); | 698 | AttachmentsSyncLock = new Object(); |
763 | 699 | AllowMovement = true; | |
764 | IsChildAgent = true; | 700 | IsChildAgent = true; |
765 | m_sendCourseLocationsMethod = SendCoarseLocationsDefault; | 701 | m_sendCourseLocationsMethod = SendCoarseLocationsDefault; |
766 | Animator = new ScenePresenceAnimator(this); | 702 | Animator = new ScenePresenceAnimator(this); |
@@ -839,17 +775,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
839 | private Vector3[] GetWalkDirectionVectors() | 775 | private Vector3[] GetWalkDirectionVectors() |
840 | { | 776 | { |
841 | Vector3[] vector = new Vector3[11]; | 777 | Vector3[] vector = new Vector3[11]; |
842 | vector[0] = new Vector3(m_CameraUpAxis.Z, 0f, -m_CameraAtAxis.Z); //FORWARD | 778 | vector[0] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD |
843 | vector[1] = new Vector3(-m_CameraUpAxis.Z, 0f, m_CameraAtAxis.Z); //BACK | 779 | vector[1] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK |
844 | vector[2] = Vector3.UnitY; //LEFT | 780 | vector[2] = Vector3.UnitY; //LEFT |
845 | vector[3] = -Vector3.UnitY; //RIGHT | 781 | vector[3] = -Vector3.UnitY; //RIGHT |
846 | vector[4] = new Vector3(m_CameraAtAxis.Z, 0f, m_CameraUpAxis.Z); //UP | 782 | vector[4] = new Vector3(CameraAtAxis.Z, 0f, CameraUpAxis.Z); //UP |
847 | vector[5] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN | 783 | vector[5] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN |
848 | vector[6] = new Vector3(m_CameraUpAxis.Z, 0f, -m_CameraAtAxis.Z); //FORWARD_NUDGE | 784 | vector[6] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD_NUDGE |
849 | vector[7] = new Vector3(-m_CameraUpAxis.Z, 0f, m_CameraAtAxis.Z); //BACK_NUDGE | 785 | vector[7] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK_NUDGE |
850 | vector[8] = Vector3.UnitY; //LEFT_NUDGE | 786 | vector[8] = Vector3.UnitY; //LEFT_NUDGE |
851 | vector[9] = -Vector3.UnitY; //RIGHT_NUDGE | 787 | vector[9] = -Vector3.UnitY; //RIGHT_NUDGE |
852 | vector[10] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN_NUDGE | 788 | vector[10] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN_NUDGE |
853 | return vector; | 789 | return vector; |
854 | } | 790 | } |
855 | 791 | ||
@@ -1380,7 +1316,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1380 | // Convert it to a Matrix and/or Quaternion | 1316 | // Convert it to a Matrix and/or Quaternion |
1381 | CameraAtAxis = agentData.CameraAtAxis; | 1317 | CameraAtAxis = agentData.CameraAtAxis; |
1382 | CameraLeftAxis = agentData.CameraLeftAxis; | 1318 | CameraLeftAxis = agentData.CameraLeftAxis; |
1383 | m_CameraUpAxis = agentData.CameraUpAxis; | 1319 | CameraUpAxis = agentData.CameraUpAxis; |
1384 | 1320 | ||
1385 | // The Agent's Draw distance setting | 1321 | // The Agent's Draw distance setting |
1386 | // When we get to the point of re-computing neighbors everytime this | 1322 | // When we get to the point of re-computing neighbors everytime this |
@@ -1392,7 +1328,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1392 | // Check if Client has camera in 'follow cam' or 'build' mode. | 1328 | // Check if Client has camera in 'follow cam' or 'build' mode. |
1393 | Vector3 camdif = (Vector3.One * Rotation - Vector3.One * CameraRotation); | 1329 | Vector3 camdif = (Vector3.One * Rotation - Vector3.One * CameraRotation); |
1394 | 1330 | ||
1395 | m_followCamAuto = ((m_CameraUpAxis.Z > 0.959f && m_CameraUpAxis.Z < 0.98f) | 1331 | m_followCamAuto = ((CameraUpAxis.Z > 0.959f && CameraUpAxis.Z < 0.98f) |
1396 | && (Math.Abs(camdif.X) < 0.4f && Math.Abs(camdif.Y) < 0.4f)) ? true : false; | 1332 | && (Math.Abs(camdif.X) < 0.4f && Math.Abs(camdif.Y) < 0.4f)) ? true : false; |
1397 | 1333 | ||
1398 | m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0; | 1334 | m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0; |
@@ -3158,7 +3094,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3158 | cAgent.Center = CameraPosition; | 3094 | cAgent.Center = CameraPosition; |
3159 | cAgent.AtAxis = CameraAtAxis; | 3095 | cAgent.AtAxis = CameraAtAxis; |
3160 | cAgent.LeftAxis = CameraLeftAxis; | 3096 | cAgent.LeftAxis = CameraLeftAxis; |
3161 | cAgent.UpAxis = m_CameraUpAxis; | 3097 | cAgent.UpAxis = CameraUpAxis; |
3162 | 3098 | ||
3163 | cAgent.Far = DrawDistance; | 3099 | cAgent.Far = DrawDistance; |
3164 | 3100 | ||
@@ -3247,7 +3183,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3247 | CameraPosition = cAgent.Center; | 3183 | CameraPosition = cAgent.Center; |
3248 | CameraAtAxis = cAgent.AtAxis; | 3184 | CameraAtAxis = cAgent.AtAxis; |
3249 | CameraLeftAxis = cAgent.LeftAxis; | 3185 | CameraLeftAxis = cAgent.LeftAxis; |
3250 | m_CameraUpAxis = cAgent.UpAxis; | 3186 | CameraUpAxis = cAgent.UpAxis; |
3251 | ParentUUID = cAgent.ParentPart; | 3187 | ParentUUID = cAgent.ParentPart; |
3252 | m_prevSitOffset = cAgent.SitOffset; | 3188 | m_prevSitOffset = cAgent.SitOffset; |
3253 | 3189 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs index e4b607d..e16903c 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs | |||
@@ -65,8 +65,7 @@ namespace OpenSim.Region.Framework.Tests | |||
65 | 65 | ||
66 | // Create an object embedded inside the first | 66 | // Create an object embedded inside the first |
67 | UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000"); | 67 | UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000"); |
68 | TaskInventoryItem taskSceneObjectItem | 68 | TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID); |
69 | = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID); | ||
70 | 69 | ||
71 | TaskInventoryItem addedItem = sop1.Inventory.GetInventoryItem(taskSceneObjectItemId); | 70 | TaskInventoryItem addedItem = sop1.Inventory.GetInventoryItem(taskSceneObjectItemId); |
72 | Assert.That(addedItem.ItemID, Is.EqualTo(taskSceneObjectItemId)); | 71 | Assert.That(addedItem.ItemID, Is.EqualTo(taskSceneObjectItemId)); |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 7d7c5c5..0f62b2a 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -70,7 +70,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
70 | m_client = client; | 70 | m_client = client; |
71 | m_scene = scene; | 71 | m_scene = scene; |
72 | 72 | ||
73 | Watchdog.StartThread(InternalLoop, "IRCClientView", ThreadPriority.Normal, false); | 73 | Watchdog.StartThread(InternalLoop, "IRCClientView", ThreadPriority.Normal, false, true); |
74 | } | 74 | } |
75 | 75 | ||
76 | private void SendServerCommand(string command) | 76 | private void SendServerCommand(string command) |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs index eb39026..a7c5020 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCServer.cs | |||
@@ -57,7 +57,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
57 | 57 | ||
58 | m_listener.Start(50); | 58 | m_listener.Start(50); |
59 | 59 | ||
60 | Watchdog.StartThread(ListenLoop, "IRCServer", ThreadPriority.Normal, false); | 60 | Watchdog.StartThread(ListenLoop, "IRCServer", ThreadPriority.Normal, false, true); |
61 | m_baseScene = baseScene; | 61 | m_baseScene = baseScene; |
62 | } | 62 | } |
63 | 63 | ||
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index 78e9b29..68f21c8 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | |||
@@ -88,25 +88,26 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
88 | 88 | ||
89 | public bool SetNPCAppearance(UUID agentId, AvatarAppearance appearance, Scene scene) | 89 | public bool SetNPCAppearance(UUID agentId, AvatarAppearance appearance, Scene scene) |
90 | { | 90 | { |
91 | ScenePresence sp = scene.GetScenePresence(agentId); | 91 | ScenePresence npc = scene.GetScenePresence(agentId); |
92 | if (sp == null || sp.IsChildAgent) | 92 | if (npc == null || npc.IsChildAgent) |
93 | return false; | 93 | return false; |
94 | 94 | ||
95 | lock (m_avatars) | 95 | lock (m_avatars) |
96 | if (!m_avatars.ContainsKey(agentId)) | 96 | if (!m_avatars.ContainsKey(agentId)) |
97 | return false; | 97 | return false; |
98 | 98 | ||
99 | // Delete existing sp attachments | 99 | // Delete existing npc attachments |
100 | scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, false); | 100 | scene.AttachmentsModule.DeleteAttachmentsFromScene(npc, false); |
101 | |||
102 | AvatarAppearance app = new AvatarAppearance(appearance, true); | ||
103 | sp.Appearance = app; | ||
104 | 101 | ||
105 | // Set new sp appearance. Also sends to clients. | 102 | // XXX: We can't just use IAvatarFactoryModule.SetAppearance() yet since it doesn't transfer attachments |
106 | scene.RequestModuleInterface<IAvatarFactoryModule>().SetAppearance(sp, app); | 103 | AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true); |
104 | npc.Appearance = npcAppearance; | ||
107 | 105 | ||
108 | // Rez needed sp attachments | 106 | // Rez needed npc attachments |
109 | scene.AttachmentsModule.RezAttachments(sp); | 107 | scene.AttachmentsModule.RezAttachments(npc); |
108 | |||
109 | IAvatarFactoryModule module = scene.RequestModuleInterface<IAvatarFactoryModule>(); | ||
110 | module.SendAppearance(npc.UUID); | ||
110 | 111 | ||
111 | return true; | 112 | return true; |
112 | } | 113 | } |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs index d507822..9a7e9e8 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs | |||
@@ -50,10 +50,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
50 | [TestFixture] | 50 | [TestFixture] |
51 | public class NPCModuleTests | 51 | public class NPCModuleTests |
52 | { | 52 | { |
53 | private TestScene scene; | 53 | private TestScene m_scene; |
54 | private AvatarFactoryModule afm; | 54 | private AvatarFactoryModule m_afMod; |
55 | private UserManagementModule umm; | 55 | private UserManagementModule m_umMod; |
56 | private AttachmentsModule am; | 56 | private AttachmentsModule m_attMod; |
57 | private NPCModule m_npcMod; | ||
57 | 58 | ||
58 | [TestFixtureSetUp] | 59 | [TestFixtureSetUp] |
59 | public void FixtureInit() | 60 | public void FixtureInit() |
@@ -79,12 +80,13 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
79 | config.AddConfig("Modules"); | 80 | config.AddConfig("Modules"); |
80 | config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); | 81 | config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); |
81 | 82 | ||
82 | afm = new AvatarFactoryModule(); | 83 | m_afMod = new AvatarFactoryModule(); |
83 | umm = new UserManagementModule(); | 84 | m_umMod = new UserManagementModule(); |
84 | am = new AttachmentsModule(); | 85 | m_attMod = new AttachmentsModule(); |
86 | m_npcMod = new NPCModule(); | ||
85 | 87 | ||
86 | scene = SceneHelpers.SetupScene(); | 88 | m_scene = SceneHelpers.SetupScene(); |
87 | SceneHelpers.SetupSceneModules(scene, config, afm, umm, am, new BasicInventoryAccessModule(), new NPCModule()); | 89 | SceneHelpers.SetupSceneModules(m_scene, config, m_afMod, m_umMod, m_attMod, m_npcMod, new BasicInventoryAccessModule()); |
88 | } | 90 | } |
89 | 91 | ||
90 | [Test] | 92 | [Test] |
@@ -93,7 +95,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
93 | TestHelpers.InMethod(); | 95 | TestHelpers.InMethod(); |
94 | // log4net.Config.XmlConfigurator.Configure(); | 96 | // log4net.Config.XmlConfigurator.Configure(); |
95 | 97 | ||
96 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | 98 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
97 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); | 99 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); |
98 | 100 | ||
99 | // 8 is the index of the first baked texture in AvatarAppearance | 101 | // 8 is the index of the first baked texture in AvatarAppearance |
@@ -104,18 +106,17 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
104 | 106 | ||
105 | // We also need to add the texture to the asset service, otherwise the AvatarFactoryModule will tell | 107 | // We also need to add the texture to the asset service, otherwise the AvatarFactoryModule will tell |
106 | // ScenePresence.SendInitialData() to reset our entire appearance. | 108 | // ScenePresence.SendInitialData() to reset our entire appearance. |
107 | scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId)); | 109 | m_scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId)); |
108 | 110 | ||
109 | afm.SetAppearance(sp, originalTe, null); | 111 | m_afMod.SetAppearance(sp, originalTe, null); |
110 | 112 | ||
111 | INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); | 113 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance); |
112 | UUID npcId = npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, scene, sp.Appearance); | ||
113 | 114 | ||
114 | ScenePresence npc = scene.GetScenePresence(npcId); | 115 | ScenePresence npc = m_scene.GetScenePresence(npcId); |
115 | 116 | ||
116 | Assert.That(npc, Is.Not.Null); | 117 | Assert.That(npc, Is.Not.Null); |
117 | Assert.That(npc.Appearance.Texture.FaceTextures[8].TextureID, Is.EqualTo(originalFace8TextureId)); | 118 | Assert.That(npc.Appearance.Texture.FaceTextures[8].TextureID, Is.EqualTo(originalFace8TextureId)); |
118 | Assert.That(umm.GetUserName(npc.UUID), Is.EqualTo(string.Format("{0} {1}", npc.Firstname, npc.Lastname))); | 119 | Assert.That(m_umMod.GetUserName(npc.UUID), Is.EqualTo(string.Format("{0} {1}", npc.Firstname, npc.Lastname))); |
119 | } | 120 | } |
120 | 121 | ||
121 | [Test] | 122 | [Test] |
@@ -124,42 +125,83 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
124 | TestHelpers.InMethod(); | 125 | TestHelpers.InMethod(); |
125 | // log4net.Config.XmlConfigurator.Configure(); | 126 | // log4net.Config.XmlConfigurator.Configure(); |
126 | 127 | ||
127 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | 128 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
128 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); | 129 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); |
129 | 130 | ||
130 | Vector3 startPos = new Vector3(128, 128, 30); | 131 | Vector3 startPos = new Vector3(128, 128, 30); |
131 | INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); | 132 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", startPos, UUID.Zero, true, m_scene, sp.Appearance); |
132 | UUID npcId = npcModule.CreateNPC("John", "Smith", startPos, UUID.Zero, true, scene, sp.Appearance); | ||
133 | 133 | ||
134 | npcModule.DeleteNPC(npcId, scene); | 134 | m_npcMod.DeleteNPC(npcId, m_scene); |
135 | 135 | ||
136 | ScenePresence deletedNpc = scene.GetScenePresence(npcId); | 136 | ScenePresence deletedNpc = m_scene.GetScenePresence(npcId); |
137 | 137 | ||
138 | Assert.That(deletedNpc, Is.Null); | 138 | Assert.That(deletedNpc, Is.Null); |
139 | } | 139 | } |
140 | 140 | ||
141 | [Test] | 141 | [Test] |
142 | public void TestAttachments() | 142 | public void TestCreateWithAttachments() |
143 | { | 143 | { |
144 | TestHelpers.InMethod(); | 144 | TestHelpers.InMethod(); |
145 | // log4net.Config.XmlConfigurator.Configure(); | 145 | // log4net.Config.XmlConfigurator.Configure(); |
146 | 146 | ||
147 | UUID userId = TestHelpers.ParseTail(0x1); | 147 | UUID userId = TestHelpers.ParseTail(0x1); |
148 | UserAccountHelpers.CreateUserWithInventory(scene, userId); | 148 | UserAccountHelpers.CreateUserWithInventory(m_scene, userId); |
149 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); | 149 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); |
150 | 150 | ||
151 | UUID attItemId = TestHelpers.ParseTail(0x2); | 151 | UUID attItemId = TestHelpers.ParseTail(0x2); |
152 | UUID attAssetId = TestHelpers.ParseTail(0x3); | 152 | UUID attAssetId = TestHelpers.ParseTail(0x3); |
153 | string attName = "att"; | 153 | string attName = "att"; |
154 | 154 | ||
155 | UserInventoryHelpers.CreateInventoryItem(scene, attName, attItemId, attAssetId, sp.UUID, InventoryType.Object); | 155 | UserInventoryHelpers.CreateInventoryItem(m_scene, attName, attItemId, attAssetId, sp.UUID, InventoryType.Object); |
156 | 156 | ||
157 | am.RezSingleAttachmentFromInventory(sp, attItemId, (uint)AttachmentPoint.Chest); | 157 | m_attMod.RezSingleAttachmentFromInventory(sp, attItemId, (uint)AttachmentPoint.Chest); |
158 | 158 | ||
159 | INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); | 159 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance); |
160 | UUID npcId = npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, scene, sp.Appearance); | ||
161 | 160 | ||
162 | ScenePresence npc = scene.GetScenePresence(npcId); | 161 | ScenePresence npc = m_scene.GetScenePresence(npcId); |
162 | |||
163 | // Check scene presence status | ||
164 | Assert.That(npc.HasAttachments(), Is.True); | ||
165 | List<SceneObjectGroup> attachments = npc.GetAttachments(); | ||
166 | Assert.That(attachments.Count, Is.EqualTo(1)); | ||
167 | SceneObjectGroup attSo = attachments[0]; | ||
168 | |||
169 | // Just for now, we won't test the name since this is (wrongly) the asset part name rather than the item | ||
170 | // name. TODO: Do need to fix ultimately since the item may be renamed before being passed on to an NPC. | ||
171 | // Assert.That(attSo.Name, Is.EqualTo(attName)); | ||
172 | |||
173 | Assert.That(attSo.AttachmentPoint, Is.EqualTo((byte)AttachmentPoint.Chest)); | ||
174 | Assert.That(attSo.IsAttachment); | ||
175 | Assert.That(attSo.UsesPhysics, Is.False); | ||
176 | Assert.That(attSo.IsTemporary, Is.False); | ||
177 | Assert.That(attSo.OwnerID, Is.EqualTo(npc.UUID)); | ||
178 | } | ||
179 | |||
180 | [Test] | ||
181 | public void TestLoadAppearance() | ||
182 | { | ||
183 | TestHelpers.InMethod(); | ||
184 | // log4net.Config.XmlConfigurator.Configure(); | ||
185 | |||
186 | UUID userId = TestHelpers.ParseTail(0x1); | ||
187 | UserAccountHelpers.CreateUserWithInventory(m_scene, userId); | ||
188 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); | ||
189 | |||
190 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance); | ||
191 | |||
192 | // Now add the attachment to the original avatar and use that to load a new appearance | ||
193 | // TODO: Could also run tests loading from a notecard though this isn't much different for our purposes here | ||
194 | UUID attItemId = TestHelpers.ParseTail(0x2); | ||
195 | UUID attAssetId = TestHelpers.ParseTail(0x3); | ||
196 | string attName = "att"; | ||
197 | |||
198 | UserInventoryHelpers.CreateInventoryItem(m_scene, attName, attItemId, attAssetId, sp.UUID, InventoryType.Object); | ||
199 | |||
200 | m_attMod.RezSingleAttachmentFromInventory(sp, attItemId, (uint)AttachmentPoint.Chest); | ||
201 | |||
202 | m_npcMod.SetNPCAppearance(npcId, sp.Appearance, m_scene); | ||
203 | |||
204 | ScenePresence npc = m_scene.GetScenePresence(npcId); | ||
163 | 205 | ||
164 | // Check scene presence status | 206 | // Check scene presence status |
165 | Assert.That(npc.HasAttachments(), Is.True); | 207 | Assert.That(npc.HasAttachments(), Is.True); |
@@ -184,31 +226,30 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
184 | TestHelpers.InMethod(); | 226 | TestHelpers.InMethod(); |
185 | // log4net.Config.XmlConfigurator.Configure(); | 227 | // log4net.Config.XmlConfigurator.Configure(); |
186 | 228 | ||
187 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | 229 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
188 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); | 230 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); |
189 | 231 | ||
190 | Vector3 startPos = new Vector3(128, 128, 30); | 232 | Vector3 startPos = new Vector3(128, 128, 30); |
191 | INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); | 233 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", startPos, UUID.Zero, true, m_scene, sp.Appearance); |
192 | UUID npcId = npcModule.CreateNPC("John", "Smith", startPos, UUID.Zero, true, scene, sp.Appearance); | ||
193 | 234 | ||
194 | ScenePresence npc = scene.GetScenePresence(npcId); | 235 | ScenePresence npc = m_scene.GetScenePresence(npcId); |
195 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | 236 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); |
196 | 237 | ||
197 | // For now, we'll make the scene presence fly to simplify this test, but this needs to change. | 238 | // For now, we'll make the scene presence fly to simplify this test, but this needs to change. |
198 | npc.Flying = true; | 239 | npc.Flying = true; |
199 | 240 | ||
200 | scene.Update(); | 241 | m_scene.Update(); |
201 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | 242 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); |
202 | 243 | ||
203 | Vector3 targetPos = startPos + new Vector3(0, 10, 0); | 244 | Vector3 targetPos = startPos + new Vector3(0, 10, 0); |
204 | npcModule.MoveToTarget(npc.UUID, scene, targetPos, false, false); | 245 | m_npcMod.MoveToTarget(npc.UUID, m_scene, targetPos, false, false); |
205 | 246 | ||
206 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | 247 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); |
207 | //Assert.That(npc.Rotation, Is.EqualTo(new Quaternion(0, 0, 0.7071068f, 0.7071068f))); | 248 | //Assert.That(npc.Rotation, Is.EqualTo(new Quaternion(0, 0, 0.7071068f, 0.7071068f))); |
208 | Assert.That( | 249 | Assert.That( |
209 | npc.Rotation, new QuaternionToleranceConstraint(new Quaternion(0, 0, 0.7071068f, 0.7071068f), 0.000001)); | 250 | npc.Rotation, new QuaternionToleranceConstraint(new Quaternion(0, 0, 0.7071068f, 0.7071068f), 0.000001)); |
210 | 251 | ||
211 | scene.Update(); | 252 | m_scene.Update(); |
212 | 253 | ||
213 | // We should really check the exact figure. | 254 | // We should really check the exact figure. |
214 | Assert.That(npc.AbsolutePosition.X, Is.EqualTo(startPos.X)); | 255 | Assert.That(npc.AbsolutePosition.X, Is.EqualTo(startPos.X)); |
@@ -217,7 +258,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
217 | Assert.That(npc.AbsolutePosition.Z, Is.LessThan(targetPos.X)); | 258 | Assert.That(npc.AbsolutePosition.Z, Is.LessThan(targetPos.X)); |
218 | 259 | ||
219 | for (int i = 0; i < 10; i++) | 260 | for (int i = 0; i < 10; i++) |
220 | scene.Update(); | 261 | m_scene.Update(); |
221 | 262 | ||
222 | double distanceToTarget = Util.GetDistanceTo(npc.AbsolutePosition, targetPos); | 263 | double distanceToTarget = Util.GetDistanceTo(npc.AbsolutePosition, targetPos); |
223 | Assert.That(distanceToTarget, Is.LessThan(1), "NPC not within 1 unit of target position on first move"); | 264 | Assert.That(distanceToTarget, Is.LessThan(1), "NPC not within 1 unit of target position on first move"); |
@@ -227,14 +268,14 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
227 | // Try a second movement | 268 | // Try a second movement |
228 | startPos = npc.AbsolutePosition; | 269 | startPos = npc.AbsolutePosition; |
229 | targetPos = startPos + new Vector3(10, 0, 0); | 270 | targetPos = startPos + new Vector3(10, 0, 0); |
230 | npcModule.MoveToTarget(npc.UUID, scene, targetPos, false, false); | 271 | m_npcMod.MoveToTarget(npc.UUID, m_scene, targetPos, false, false); |
231 | 272 | ||
232 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | 273 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); |
233 | // Assert.That(npc.Rotation, Is.EqualTo(new Quaternion(0, 0, 0, 1))); | 274 | // Assert.That(npc.Rotation, Is.EqualTo(new Quaternion(0, 0, 0, 1))); |
234 | Assert.That( | 275 | Assert.That( |
235 | npc.Rotation, new QuaternionToleranceConstraint(new Quaternion(0, 0, 0, 1), 0.000001)); | 276 | npc.Rotation, new QuaternionToleranceConstraint(new Quaternion(0, 0, 0, 1), 0.000001)); |
236 | 277 | ||
237 | scene.Update(); | 278 | m_scene.Update(); |
238 | 279 | ||
239 | // We should really check the exact figure. | 280 | // We should really check the exact figure. |
240 | Assert.That(npc.AbsolutePosition.X, Is.GreaterThan(startPos.X)); | 281 | Assert.That(npc.AbsolutePosition.X, Is.GreaterThan(startPos.X)); |
@@ -243,7 +284,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
243 | Assert.That(npc.AbsolutePosition.Z, Is.EqualTo(startPos.Z)); | 284 | Assert.That(npc.AbsolutePosition.Z, Is.EqualTo(startPos.Z)); |
244 | 285 | ||
245 | for (int i = 0; i < 10; i++) | 286 | for (int i = 0; i < 10; i++) |
246 | scene.Update(); | 287 | m_scene.Update(); |
247 | 288 | ||
248 | distanceToTarget = Util.GetDistanceTo(npc.AbsolutePosition, targetPos); | 289 | distanceToTarget = Util.GetDistanceTo(npc.AbsolutePosition, targetPos); |
249 | Assert.That(distanceToTarget, Is.LessThan(1), "NPC not within 1 unit of target position on second move"); | 290 | Assert.That(distanceToTarget, Is.LessThan(1), "NPC not within 1 unit of target position on second move"); |
@@ -256,17 +297,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
256 | TestHelpers.InMethod(); | 297 | TestHelpers.InMethod(); |
257 | // log4net.Config.XmlConfigurator.Configure(); | 298 | // log4net.Config.XmlConfigurator.Configure(); |
258 | 299 | ||
259 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | 300 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
260 | 301 | ||
261 | Vector3 startPos = new Vector3(128, 128, 30); | 302 | Vector3 startPos = new Vector3(128, 128, 30); |
262 | INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); | 303 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", startPos, UUID.Zero, true, m_scene, sp.Appearance); |
263 | UUID npcId = npcModule.CreateNPC("John", "Smith", startPos, UUID.Zero, true, scene, sp.Appearance); | ||
264 | 304 | ||
265 | ScenePresence npc = scene.GetScenePresence(npcId); | 305 | ScenePresence npc = m_scene.GetScenePresence(npcId); |
266 | SceneObjectPart part = SceneHelpers.AddSceneObject(scene); | 306 | SceneObjectPart part = SceneHelpers.AddSceneObject(m_scene); |
267 | 307 | ||
268 | part.SitTargetPosition = new Vector3(0, 0, 1); | 308 | part.SitTargetPosition = new Vector3(0, 0, 1); |
269 | npcModule.Sit(npc.UUID, part.UUID, scene); | 309 | m_npcMod.Sit(npc.UUID, part.UUID, m_scene); |
270 | 310 | ||
271 | Assert.That(part.SitTargetAvatar, Is.EqualTo(npcId)); | 311 | Assert.That(part.SitTargetAvatar, Is.EqualTo(npcId)); |
272 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); | 312 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); |
@@ -274,7 +314,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
274 | npc.AbsolutePosition, | 314 | npc.AbsolutePosition, |
275 | Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + ScenePresence.SIT_TARGET_ADJUSTMENT)); | 315 | Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + ScenePresence.SIT_TARGET_ADJUSTMENT)); |
276 | 316 | ||
277 | npcModule.Stand(npc.UUID, scene); | 317 | m_npcMod.Stand(npc.UUID, m_scene); |
278 | 318 | ||
279 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); | 319 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); |
280 | Assert.That(npc.ParentID, Is.EqualTo(0)); | 320 | Assert.That(npc.ParentID, Is.EqualTo(0)); |
@@ -286,19 +326,18 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
286 | TestHelpers.InMethod(); | 326 | TestHelpers.InMethod(); |
287 | // log4net.Config.XmlConfigurator.Configure(); | 327 | // log4net.Config.XmlConfigurator.Configure(); |
288 | 328 | ||
289 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | 329 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
290 | 330 | ||
291 | // FIXME: To get this to work for now, we are going to place the npc right next to the target so that | 331 | // FIXME: To get this to work for now, we are going to place the npc right next to the target so that |
292 | // the autopilot doesn't trigger | 332 | // the autopilot doesn't trigger |
293 | Vector3 startPos = new Vector3(1, 1, 1); | 333 | Vector3 startPos = new Vector3(1, 1, 1); |
294 | 334 | ||
295 | INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); | 335 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", startPos, UUID.Zero, true, m_scene, sp.Appearance); |
296 | UUID npcId = npcModule.CreateNPC("John", "Smith", startPos, UUID.Zero, true, scene, sp.Appearance); | ||
297 | 336 | ||
298 | ScenePresence npc = scene.GetScenePresence(npcId); | 337 | ScenePresence npc = m_scene.GetScenePresence(npcId); |
299 | SceneObjectPart part = SceneHelpers.AddSceneObject(scene); | 338 | SceneObjectPart part = SceneHelpers.AddSceneObject(m_scene); |
300 | 339 | ||
301 | npcModule.Sit(npc.UUID, part.UUID, scene); | 340 | m_npcMod.Sit(npc.UUID, part.UUID, m_scene); |
302 | 341 | ||
303 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); | 342 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); |
304 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); | 343 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); |
@@ -311,7 +350,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
311 | npc.AbsolutePosition, | 350 | npc.AbsolutePosition, |
312 | Is.EqualTo(part.AbsolutePosition + new Vector3(0, 0, 0.845499337f))); | 351 | Is.EqualTo(part.AbsolutePosition + new Vector3(0, 0, 0.845499337f))); |
313 | 352 | ||
314 | npcModule.Stand(npc.UUID, scene); | 353 | m_npcMod.Stand(npc.UUID, m_scene); |
315 | 354 | ||
316 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); | 355 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); |
317 | Assert.That(npc.ParentID, Is.EqualTo(0)); | 356 | Assert.That(npc.ParentID, Is.EqualTo(0)); |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 62e3763..254d578 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | |||
@@ -1474,6 +1474,8 @@ Console.WriteLine("CreateGeom:"); | |||
1474 | /// </summary> | 1474 | /// </summary> |
1475 | private void changeadd() | 1475 | private void changeadd() |
1476 | { | 1476 | { |
1477 | // m_log.DebugFormat("[ODE PRIM]: Adding prim {0}", Name); | ||
1478 | |||
1477 | int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position); | 1479 | int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position); |
1478 | IntPtr targetspace = _parent_scene.calculateSpaceForGeom(_position); | 1480 | IntPtr targetspace = _parent_scene.calculateSpaceForGeom(_position); |
1479 | 1481 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index 61e4934..57794f9 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs | |||
@@ -137,7 +137,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
137 | if (cmdHandlerThread == null) | 137 | if (cmdHandlerThread == null) |
138 | { | 138 | { |
139 | // Start the thread that will be doing the work | 139 | // Start the thread that will be doing the work |
140 | cmdHandlerThread = Watchdog.StartThread(CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true); | 140 | cmdHandlerThread |
141 | = Watchdog.StartThread( | ||
142 | CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true); | ||
141 | } | 143 | } |
142 | } | 144 | } |
143 | 145 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 0cc8829..6d4072c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -4450,7 +4450,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4450 | Vector3 av3 = new Vector3(Util.Clip((float)color.x, 0.0f, 1.0f), | 4450 | Vector3 av3 = new Vector3(Util.Clip((float)color.x, 0.0f, 1.0f), |
4451 | Util.Clip((float)color.y, 0.0f, 1.0f), | 4451 | Util.Clip((float)color.y, 0.0f, 1.0f), |
4452 | Util.Clip((float)color.z, 0.0f, 1.0f)); | 4452 | Util.Clip((float)color.z, 0.0f, 1.0f)); |
4453 | m_host.SetText(text.Length > 254 ? text.Remove(255) : text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); | 4453 | m_host.SetText(text.Length > 254 ? text.Remove(254) : text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); |
4454 | //m_host.ParentGroup.HasGroupChanged = true; | 4454 | //m_host.ParentGroup.HasGroupChanged = true; |
4455 | //m_host.ParentGroup.ScheduleGroupForFullUpdate(); | 4455 | //m_host.ParentGroup.ScheduleGroupForFullUpdate(); |
4456 | } | 4456 | } |
@@ -6866,16 +6866,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6866 | } | 6866 | } |
6867 | } | 6867 | } |
6868 | 6868 | ||
6869 | public void llSitTarget(LSL_Vector offset, LSL_Rotation rot) | 6869 | protected void SitTarget(SceneObjectPart part, LSL_Vector offset, LSL_Rotation rot) |
6870 | { | 6870 | { |
6871 | m_host.AddScriptLPS(1); | ||
6872 | // LSL quaternions can normalize to 0, normal Quaternions can't. | 6871 | // LSL quaternions can normalize to 0, normal Quaternions can't. |
6873 | if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0) | 6872 | if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0) |
6874 | rot.z = 1; // ZERO_ROTATION = 0,0,0,1 | 6873 | rot.z = 1; // ZERO_ROTATION = 0,0,0,1 |
6875 | 6874 | ||
6876 | m_host.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z); | 6875 | part.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z); |
6877 | m_host.SitTargetOrientation = Rot2Quaternion(rot); | 6876 | part.SitTargetOrientation = Rot2Quaternion(rot); |
6878 | m_host.ParentGroup.HasGroupChanged = true; | 6877 | part.ParentGroup.HasGroupChanged = true; |
6878 | } | ||
6879 | |||
6880 | public void llSitTarget(LSL_Vector offset, LSL_Rotation rot) | ||
6881 | { | ||
6882 | m_host.AddScriptLPS(1); | ||
6883 | SitTarget(m_host, offset, rot); | ||
6884 | } | ||
6885 | |||
6886 | public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot) | ||
6887 | { | ||
6888 | m_host.AddScriptLPS(1); | ||
6889 | if (link == ScriptBaseClass.LINK_ROOT) | ||
6890 | SitTarget(m_host.ParentGroup.RootPart, offset, rot); | ||
6891 | else if (link == ScriptBaseClass.LINK_THIS) | ||
6892 | SitTarget(m_host, offset, rot); | ||
6893 | else | ||
6894 | { | ||
6895 | SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); | ||
6896 | if (null != part) | ||
6897 | { | ||
6898 | SitTarget(part, offset, rot); | ||
6899 | } | ||
6900 | } | ||
6879 | } | 6901 | } |
6880 | 6902 | ||
6881 | public LSL_String llAvatarOnSitTarget() | 6903 | public LSL_String llAvatarOnSitTarget() |
@@ -7560,10 +7582,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7560 | shapeBlock.PathScaleX = 100; | 7582 | shapeBlock.PathScaleX = 100; |
7561 | shapeBlock.PathScaleY = 150; | 7583 | shapeBlock.PathScaleY = 150; |
7562 | 7584 | ||
7563 | if ((type & (int)ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER) == 0 && | 7585 | int flag = type & (ScriptBaseClass.PRIM_SCULPT_FLAG_INVERT | ScriptBaseClass.PRIM_SCULPT_FLAG_MIRROR); |
7564 | (type & (int)ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE) == 0 && | 7586 | |
7565 | (type & (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE) == 0 && | 7587 | if (type != (ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER | flag) && |
7566 | (type & (int)ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS) == 0) | 7588 | type != (ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE | flag) && |
7589 | type != (ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE | flag) && | ||
7590 | type != (ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS | flag)) | ||
7567 | { | 7591 | { |
7568 | // default | 7592 | // default |
7569 | type = type | (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE; | 7593 | type = type | (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE; |
@@ -8851,23 +8875,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8851 | { | 8875 | { |
8852 | m_host.AddScriptLPS(1); | 8876 | m_host.AddScriptLPS(1); |
8853 | ScriptSleep(1000); | 8877 | ScriptSleep(1000); |
8878 | return GetPrimMediaParams(m_host, face, rules); | ||
8879 | } | ||
8854 | 8880 | ||
8881 | public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) | ||
8882 | { | ||
8883 | m_host.AddScriptLPS(1); | ||
8884 | ScriptSleep(1000); | ||
8885 | if (link == ScriptBaseClass.LINK_ROOT) | ||
8886 | return GetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); | ||
8887 | else if (link == ScriptBaseClass.LINK_THIS) | ||
8888 | return GetPrimMediaParams(m_host, face, rules); | ||
8889 | else | ||
8890 | { | ||
8891 | SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); | ||
8892 | if (null != part) | ||
8893 | return GetPrimMediaParams(part, face, rules); | ||
8894 | } | ||
8895 | |||
8896 | return new LSL_List(); | ||
8897 | } | ||
8898 | |||
8899 | private LSL_List GetPrimMediaParams(SceneObjectPart part, int face, LSL_List rules) | ||
8900 | { | ||
8855 | // LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid | 8901 | // LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid |
8856 | // TODO: Need to correctly handle case where a face has no media (which gives back an empty list). | 8902 | // TODO: Need to correctly handle case where a face has no media (which gives back an empty list). |
8857 | // Assuming silently fail means give back an empty list. Ideally, need to check this. | 8903 | // Assuming silently fail means give back an empty list. Ideally, need to check this. |
8858 | if (face < 0 || face > m_host.GetNumberOfSides() - 1) | 8904 | if (face < 0 || face > part.GetNumberOfSides() - 1) |
8859 | return new LSL_List(); | 8905 | return new LSL_List(); |
8860 | 8906 | ||
8861 | return GetPrimMediaParams(face, rules); | ||
8862 | } | ||
8863 | |||
8864 | private LSL_List GetPrimMediaParams(int face, LSL_List rules) | ||
8865 | { | ||
8866 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); | 8907 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); |
8867 | if (null == module) | 8908 | if (null == module) |
8868 | throw new Exception("Media on a prim functions not available"); | 8909 | return new LSL_List(); |
8869 | 8910 | ||
8870 | MediaEntry me = module.GetMediaEntry(m_host, face); | 8911 | MediaEntry me = module.GetMediaEntry(part, face); |
8871 | 8912 | ||
8872 | // As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams | 8913 | // As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams |
8873 | if (null == me) | 8914 | if (null == me) |
@@ -8949,33 +8990,52 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8949 | case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: | 8990 | case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: |
8950 | res.Add(new LSL_Integer((int)me.ControlPermissions)); | 8991 | res.Add(new LSL_Integer((int)me.ControlPermissions)); |
8951 | break; | 8992 | break; |
8993 | |||
8994 | default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS; | ||
8952 | } | 8995 | } |
8953 | } | 8996 | } |
8954 | 8997 | ||
8955 | return res; | 8998 | return res; |
8956 | } | 8999 | } |
8957 | 9000 | ||
8958 | public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules) | 9001 | public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules) |
8959 | { | 9002 | { |
8960 | m_host.AddScriptLPS(1); | 9003 | m_host.AddScriptLPS(1); |
8961 | ScriptSleep(1000); | 9004 | ScriptSleep(1000); |
9005 | return SetPrimMediaParams(m_host, face, rules); | ||
9006 | } | ||
8962 | 9007 | ||
8963 | // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid | 9008 | public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) |
8964 | // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. | 9009 | { |
8965 | // Don't perform the media check directly | 9010 | m_host.AddScriptLPS(1); |
8966 | if (face < 0 || face > m_host.GetNumberOfSides() - 1) | 9011 | ScriptSleep(1000); |
8967 | return ScriptBaseClass.LSL_STATUS_OK; | 9012 | if (link == ScriptBaseClass.LINK_ROOT) |
9013 | return SetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); | ||
9014 | else if (link == ScriptBaseClass.LINK_THIS) | ||
9015 | return SetPrimMediaParams(m_host, face, rules); | ||
9016 | else | ||
9017 | { | ||
9018 | SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); | ||
9019 | if (null != part) | ||
9020 | return SetPrimMediaParams(part, face, rules); | ||
9021 | } | ||
8968 | 9022 | ||
8969 | return SetPrimMediaParams(face, rules); | 9023 | return ScriptBaseClass.LSL_STATUS_NOT_FOUND; |
8970 | } | 9024 | } |
8971 | 9025 | ||
8972 | private LSL_Integer SetPrimMediaParams(int face, LSL_List rules) | 9026 | private LSL_Integer SetPrimMediaParams(SceneObjectPart part, LSL_Integer face, LSL_List rules) |
8973 | { | 9027 | { |
9028 | // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid | ||
9029 | // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. | ||
9030 | // Don't perform the media check directly | ||
9031 | if (face < 0 || face > part.GetNumberOfSides() - 1) | ||
9032 | return ScriptBaseClass.LSL_STATUS_NOT_FOUND; | ||
9033 | |||
8974 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); | 9034 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); |
8975 | if (null == module) | 9035 | if (null == module) |
8976 | throw new Exception("Media on a prim functions not available"); | 9036 | return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED; |
8977 | 9037 | ||
8978 | MediaEntry me = module.GetMediaEntry(m_host, face); | 9038 | MediaEntry me = module.GetMediaEntry(part, face); |
8979 | if (null == me) | 9039 | if (null == me) |
8980 | me = new MediaEntry(); | 9040 | me = new MediaEntry(); |
8981 | 9041 | ||
@@ -9054,10 +9114,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9054 | case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: | 9114 | case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: |
9055 | me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); | 9115 | me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); |
9056 | break; | 9116 | break; |
9117 | |||
9118 | default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS; | ||
9057 | } | 9119 | } |
9058 | } | 9120 | } |
9059 | 9121 | ||
9060 | module.SetMediaEntry(m_host, face, me); | 9122 | module.SetMediaEntry(part, face, me); |
9061 | 9123 | ||
9062 | return ScriptBaseClass.LSL_STATUS_OK; | 9124 | return ScriptBaseClass.LSL_STATUS_OK; |
9063 | } | 9125 | } |
@@ -9066,18 +9128,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9066 | { | 9128 | { |
9067 | m_host.AddScriptLPS(1); | 9129 | m_host.AddScriptLPS(1); |
9068 | ScriptSleep(1000); | 9130 | ScriptSleep(1000); |
9131 | return ClearPrimMedia(m_host, face); | ||
9132 | } | ||
9069 | 9133 | ||
9134 | public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face) | ||
9135 | { | ||
9136 | m_host.AddScriptLPS(1); | ||
9137 | ScriptSleep(1000); | ||
9138 | if (link == ScriptBaseClass.LINK_ROOT) | ||
9139 | return ClearPrimMedia(m_host.ParentGroup.RootPart, face); | ||
9140 | else if (link == ScriptBaseClass.LINK_THIS) | ||
9141 | return ClearPrimMedia(m_host, face); | ||
9142 | else | ||
9143 | { | ||
9144 | SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); | ||
9145 | if (null != part) | ||
9146 | return ClearPrimMedia(part, face); | ||
9147 | } | ||
9148 | |||
9149 | return ScriptBaseClass.LSL_STATUS_NOT_FOUND; | ||
9150 | } | ||
9151 | |||
9152 | private LSL_Integer ClearPrimMedia(SceneObjectPart part, LSL_Integer face) | ||
9153 | { | ||
9070 | // LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid | 9154 | // LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid |
9071 | // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. | 9155 | // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. |
9072 | // FIXME: Don't perform the media check directly | 9156 | // FIXME: Don't perform the media check directly |
9073 | if (face < 0 || face > m_host.GetNumberOfSides() - 1) | 9157 | if (face < 0 || face > part.GetNumberOfSides() - 1) |
9074 | return ScriptBaseClass.LSL_STATUS_OK; | 9158 | return ScriptBaseClass.LSL_STATUS_NOT_FOUND; |
9075 | 9159 | ||
9076 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); | 9160 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); |
9077 | if (null == module) | 9161 | if (null == module) |
9078 | throw new Exception("Media on a prim functions not available"); | 9162 | return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED; |
9079 | 9163 | ||
9080 | module.ClearMediaEntry(m_host, face); | 9164 | module.ClearMediaEntry(part, face); |
9081 | 9165 | ||
9082 | return ScriptBaseClass.LSL_STATUS_OK; | 9166 | return ScriptBaseClass.LSL_STATUS_OK; |
9083 | } | 9167 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index a9b8e04..ecc5fb5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -2169,6 +2169,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2169 | return result; | 2169 | return result; |
2170 | } | 2170 | } |
2171 | 2171 | ||
2172 | public LSL_String osReplaceString(string src, string pattern, string replace, int count, int start) | ||
2173 | { | ||
2174 | CheckThreatLevel(ThreatLevel.High, "osReplaceString"); | ||
2175 | m_host.AddScriptLPS(1); | ||
2176 | |||
2177 | // Normalize indices (if negative). | ||
2178 | // After normlaization they may still be | ||
2179 | // negative, but that is now relative to | ||
2180 | // the start, rather than the end, of the | ||
2181 | // sequence. | ||
2182 | if (start < 0) | ||
2183 | { | ||
2184 | start = src.Length + start; | ||
2185 | } | ||
2186 | |||
2187 | if (start < 0 || start >= src.Length) | ||
2188 | { | ||
2189 | return src; | ||
2190 | } | ||
2191 | |||
2192 | // Find matches beginning at start position | ||
2193 | Regex matcher = new Regex(pattern); | ||
2194 | return matcher.Replace(src,replace,count,start); | ||
2195 | } | ||
2196 | |||
2172 | public string osLoadedCreationDate() | 2197 | public string osLoadedCreationDate() |
2173 | { | 2198 | { |
2174 | CheckThreatLevel(ThreatLevel.Low, "osLoadedCreationDate"); | 2199 | CheckThreatLevel(ThreatLevel.Low, "osLoadedCreationDate"); |
@@ -2786,7 +2811,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2786 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); | 2811 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); |
2787 | m_host.AddScriptLPS(1); | 2812 | m_host.AddScriptLPS(1); |
2788 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); | 2813 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); |
2789 | avatar.SpeedModifier = (float)SpeedModifier; | 2814 | |
2815 | if (avatar != null) | ||
2816 | avatar.SpeedModifier = (float)SpeedModifier; | ||
2790 | } | 2817 | } |
2791 | 2818 | ||
2792 | public void osKickAvatar(string FirstName,string SurName,string alert) | 2819 | public void osKickAvatar(string FirstName,string SurName,string alert) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index 83da204..e25255c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | |||
@@ -157,12 +157,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
157 | 157 | ||
158 | public void CheckSenseRepeaterEvents() | 158 | public void CheckSenseRepeaterEvents() |
159 | { | 159 | { |
160 | // Nothing to do here? | ||
161 | if (SenseRepeaters.Count == 0) | ||
162 | return; | ||
163 | |||
164 | lock (SenseRepeatListLock) | 160 | lock (SenseRepeatListLock) |
165 | { | 161 | { |
162 | // Nothing to do here? | ||
163 | if (SenseRepeaters.Count == 0) | ||
164 | return; | ||
165 | |||
166 | // Go through all timers | 166 | // Go through all timers |
167 | foreach (SenseRepeatClass ts in SenseRepeaters) | 167 | foreach (SenseRepeatClass ts in SenseRepeaters) |
168 | { | 168 | { |
@@ -640,7 +640,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
640 | ts.next = | 640 | ts.next = |
641 | DateTime.Now.ToUniversalTime().AddSeconds(ts.interval); | 641 | DateTime.Now.ToUniversalTime().AddSeconds(ts.interval); |
642 | 642 | ||
643 | SenseRepeaters.Add(ts); | 643 | lock (SenseRepeatListLock) |
644 | SenseRepeaters.Add(ts); | ||
645 | |||
644 | idx += 6; | 646 | idx += 6; |
645 | } | 647 | } |
646 | } | 648 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index 5b8c316..8d97a7c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs | |||
@@ -64,6 +64,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
64 | LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options); | 64 | LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options); |
65 | LSL_Integer llCeil(double f); | 65 | LSL_Integer llCeil(double f); |
66 | void llClearCameraParams(); | 66 | void llClearCameraParams(); |
67 | LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face); | ||
67 | LSL_Integer llClearPrimMedia(LSL_Integer face); | 68 | LSL_Integer llClearPrimMedia(LSL_Integer face); |
68 | void llCloseRemoteDataChannel(string channel); | 69 | void llCloseRemoteDataChannel(string channel); |
69 | LSL_Float llCloud(LSL_Vector offset); | 70 | LSL_Float llCloud(LSL_Vector offset); |
@@ -140,7 +141,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
140 | LSL_String llGetLinkName(int linknum); | 141 | LSL_String llGetLinkName(int linknum); |
141 | LSL_Integer llGetLinkNumber(); | 142 | LSL_Integer llGetLinkNumber(); |
142 | LSL_Integer llGetLinkNumberOfSides(int link); | 143 | LSL_Integer llGetLinkNumberOfSides(int link); |
143 | LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules); | 144 | LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules); |
145 | LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules); | ||
144 | LSL_Integer llGetListEntryType(LSL_List src, int index); | 146 | LSL_Integer llGetListEntryType(LSL_List src, int index); |
145 | LSL_Integer llGetListLength(LSL_List src); | 147 | LSL_Integer llGetListLength(LSL_List src); |
146 | LSL_Vector llGetLocalPos(); | 148 | LSL_Vector llGetLocalPos(); |
@@ -220,6 +222,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
220 | LSL_String llGetDisplayName(string id); | 222 | LSL_String llGetDisplayName(string id); |
221 | LSL_String llRequestDisplayName(string id); | 223 | LSL_String llRequestDisplayName(string id); |
222 | void llLinkParticleSystem(int linknum, LSL_List rules); | 224 | void llLinkParticleSystem(int linknum, LSL_List rules); |
225 | void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot); | ||
223 | LSL_String llList2CSV(LSL_List src); | 226 | LSL_String llList2CSV(LSL_List src); |
224 | LSL_Float llList2Float(LSL_List src, int index); | 227 | LSL_Float llList2Float(LSL_List src, int index); |
225 | LSL_Integer llList2Integer(LSL_List src, int index); | 228 | LSL_Integer llList2Integer(LSL_List src, int index); |
@@ -336,6 +339,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
336 | void llSetInventoryPermMask(string item, int mask, int value); | 339 | void llSetInventoryPermMask(string item, int mask, int value); |
337 | void llSetLinkAlpha(int linknumber, double alpha, int face); | 340 | void llSetLinkAlpha(int linknumber, double alpha, int face); |
338 | void llSetLinkColor(int linknumber, LSL_Vector color, int face); | 341 | void llSetLinkColor(int linknumber, LSL_Vector color, int face); |
342 | LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules); | ||
339 | void llSetLinkPrimitiveParams(int linknumber, LSL_List rules); | 343 | void llSetLinkPrimitiveParams(int linknumber, LSL_List rules); |
340 | void llSetLinkTexture(int linknumber, string texture, int face); | 344 | void llSetLinkTexture(int linknumber, string texture, int face); |
341 | void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate); | 345 | void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate); |
@@ -347,7 +351,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
347 | void llSetPayPrice(int price, LSL_List quick_pay_buttons); | 351 | void llSetPayPrice(int price, LSL_List quick_pay_buttons); |
348 | void llSetPos(LSL_Vector pos); | 352 | void llSetPos(LSL_Vector pos); |
349 | LSL_Integer llSetRegionPos(LSL_Vector pos); | 353 | LSL_Integer llSetRegionPos(LSL_Vector pos); |
350 | LSL_Integer llSetPrimMediaParams(int face, LSL_List rules); | 354 | LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules); |
351 | void llSetPrimitiveParams(LSL_List rules); | 355 | void llSetPrimitiveParams(LSL_List rules); |
352 | void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules); | 356 | void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules); |
353 | void llSetPrimURL(string url); | 357 | void llSetPrimURL(string url); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index ca24051..fb52600 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | |||
@@ -165,6 +165,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
165 | 165 | ||
166 | LSL_String osFormatString(string str, LSL_List strings); | 166 | LSL_String osFormatString(string str, LSL_List strings); |
167 | LSL_List osMatchString(string src, string pattern, int start); | 167 | LSL_List osMatchString(string src, string pattern, int start); |
168 | LSL_String osReplaceString(string src, string pattern, string replace, int count, int start); | ||
168 | 169 | ||
169 | // Information about data loaded into the region | 170 | // Information about data loaded into the region |
170 | string osLoadedCreationDate(); | 171 | string osLoadedCreationDate(); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index 1366141..a8d1ddb 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs | |||
@@ -1710,6 +1710,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
1710 | m_LSL_Functions.llSitTarget(offset, rot); | 1710 | m_LSL_Functions.llSitTarget(offset, rot); |
1711 | } | 1711 | } |
1712 | 1712 | ||
1713 | public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot) | ||
1714 | { | ||
1715 | m_LSL_Functions.llLinkSitTarget(link, offset, rot); | ||
1716 | } | ||
1717 | |||
1713 | public void llSleep(double sec) | 1718 | public void llSleep(double sec) |
1714 | { | 1719 | { |
1715 | m_LSL_Functions.llSleep(sec); | 1720 | m_LSL_Functions.llSleep(sec); |
@@ -1909,17 +1914,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
1909 | { | 1914 | { |
1910 | return m_LSL_Functions.llGetPrimMediaParams(face, rules); | 1915 | return m_LSL_Functions.llGetPrimMediaParams(face, rules); |
1911 | } | 1916 | } |
1912 | 1917 | ||
1918 | public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) | ||
1919 | { | ||
1920 | return m_LSL_Functions.llGetLinkMedia(link, face, rules); | ||
1921 | } | ||
1922 | |||
1913 | public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules) | 1923 | public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules) |
1914 | { | 1924 | { |
1915 | return m_LSL_Functions.llSetPrimMediaParams(face, rules); | 1925 | return m_LSL_Functions.llSetPrimMediaParams(face, rules); |
1916 | } | 1926 | } |
1917 | 1927 | ||
1928 | public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) | ||
1929 | { | ||
1930 | return m_LSL_Functions.llSetLinkMedia(link, face, rules); | ||
1931 | } | ||
1932 | |||
1918 | public LSL_Integer llClearPrimMedia(LSL_Integer face) | 1933 | public LSL_Integer llClearPrimMedia(LSL_Integer face) |
1919 | { | 1934 | { |
1920 | return m_LSL_Functions.llClearPrimMedia(face); | 1935 | return m_LSL_Functions.llClearPrimMedia(face); |
1921 | } | 1936 | } |
1922 | 1937 | ||
1938 | public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face) | ||
1939 | { | ||
1940 | return m_LSL_Functions.llClearLinkMedia(link, face); | ||
1941 | } | ||
1942 | |||
1923 | public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link) | 1943 | public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link) |
1924 | { | 1944 | { |
1925 | return m_LSL_Functions.llGetLinkNumberOfSides(link); | 1945 | return m_LSL_Functions.llGetLinkNumberOfSides(link); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index cc8d417..4341246 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -472,6 +472,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
472 | return m_OSSL_Functions.osMatchString(src, pattern, start); | 472 | return m_OSSL_Functions.osMatchString(src, pattern, start); |
473 | } | 473 | } |
474 | 474 | ||
475 | public LSL_String osReplaceString(string src, string pattern, string replace, int count, int start) | ||
476 | { | ||
477 | return m_OSSL_Functions.osReplaceString(src,pattern,replace,count,start); | ||
478 | } | ||
479 | |||
480 | |||
475 | // Information about data loaded into the region | 481 | // Information about data loaded into the region |
476 | public string osLoadedCreationDate() | 482 | public string osLoadedCreationDate() |
477 | { | 483 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs index 8b88588..65d3b9b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs | |||
@@ -118,7 +118,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools | |||
118 | emessage = emessage.Substring(slinfo.Length+2); | 118 | emessage = emessage.Substring(slinfo.Length+2); |
119 | 119 | ||
120 | message = String.Format("({0},{1}) {2}", | 120 | message = String.Format("({0},{1}) {2}", |
121 | e.slInfo.lineNumber - 2, | 121 | e.slInfo.lineNumber - 1, |
122 | e.slInfo.charPosition - 1, emessage); | 122 | e.slInfo.charPosition - 1, emessage); |
123 | 123 | ||
124 | throw new Exception(message); | 124 | throw new Exception(message); |
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs index f627e37..b9ba4bc 100644 --- a/OpenSim/Region/UserStatistics/WebStatsModule.cs +++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs | |||
@@ -83,6 +83,9 @@ namespace OpenSim.Region.UserStatistics | |||
83 | { | 83 | { |
84 | if (m_scenes.Count == 0) | 84 | if (m_scenes.Count == 0) |
85 | { | 85 | { |
86 | if (Util.IsWindows()) | ||
87 | Util.LoadArchSpecificWindowsDll("sqlite3.dll"); | ||
88 | |||
86 | //IConfig startupConfig = config.Configs["Startup"]; | 89 | //IConfig startupConfig = config.Configs["Startup"]; |
87 | 90 | ||
88 | dbConn = new SqliteConnection("URI=file:LocalUserStatistics.db,version=3"); | 91 | dbConn = new SqliteConnection("URI=file:LocalUserStatistics.db,version=3"); |
@@ -221,13 +224,11 @@ namespace OpenSim.Region.UserStatistics | |||
221 | concurrencyCounter--; | 224 | concurrencyCounter--; |
222 | 225 | ||
223 | response_code = 200; | 226 | response_code = 200; |
224 | |||
225 | } | 227 | } |
226 | else | 228 | else |
227 | { | 229 | { |
228 | strOut = MainServer.Instance.GetHTTP404(""); | 230 | strOut = MainServer.Instance.GetHTTP404(""); |
229 | } | 231 | } |
230 | |||
231 | 232 | ||
232 | responsedata["int_response_code"] = response_code; | 233 | responsedata["int_response_code"] = response_code; |
233 | responsedata["content_type"] = contenttype; | 234 | responsedata["content_type"] = contenttype; |
@@ -244,43 +245,44 @@ namespace OpenSim.Region.UserStatistics | |||
244 | // TODO: FIXME: implement stats migrations | 245 | // TODO: FIXME: implement stats migrations |
245 | const string SQL = @"SELECT * FROM migrations LIMIT 1"; | 246 | const string SQL = @"SELECT * FROM migrations LIMIT 1"; |
246 | 247 | ||
247 | SqliteCommand cmd = new SqliteCommand(SQL, db); | 248 | using (SqliteCommand cmd = new SqliteCommand(SQL, db)) |
248 | |||
249 | try | ||
250 | { | ||
251 | cmd.ExecuteNonQuery(); | ||
252 | } | ||
253 | catch (SqliteSyntaxException) | ||
254 | { | 249 | { |
255 | CreateTables(db); | 250 | try |
251 | { | ||
252 | cmd.ExecuteNonQuery(); | ||
253 | } | ||
254 | catch (SqliteSyntaxException) | ||
255 | { | ||
256 | CreateTables(db); | ||
257 | } | ||
256 | } | 258 | } |
257 | } | 259 | } |
258 | } | 260 | } |
259 | 261 | ||
260 | public void CreateTables(SqliteConnection db) | 262 | public void CreateTables(SqliteConnection db) |
261 | { | 263 | { |
262 | SqliteCommand createcmd = new SqliteCommand(SQL_STATS_TABLE_CREATE, db); | 264 | using (SqliteCommand createcmd = new SqliteCommand(SQL_STATS_TABLE_CREATE, db)) |
263 | createcmd.ExecuteNonQuery(); | 265 | { |
266 | createcmd.ExecuteNonQuery(); | ||
264 | 267 | ||
265 | createcmd.CommandText = SQL_MIGRA_TABLE_CREATE; | 268 | createcmd.CommandText = SQL_MIGRA_TABLE_CREATE; |
266 | createcmd.ExecuteNonQuery(); | 269 | createcmd.ExecuteNonQuery(); |
270 | } | ||
267 | } | 271 | } |
268 | 272 | ||
269 | public virtual void PostInitialise() | 273 | public virtual void PostInitialise() |
270 | { | 274 | { |
271 | if (!enabled) | 275 | if (!enabled) |
272 | { | ||
273 | return; | 276 | return; |
274 | } | 277 | |
275 | AddHandlers(); | 278 | AddHandlers(); |
276 | } | 279 | } |
277 | 280 | ||
278 | public virtual void Close() | 281 | public virtual void Close() |
279 | { | 282 | { |
280 | if (!enabled) | 283 | if (!enabled) |
281 | { | ||
282 | return; | 284 | return; |
283 | } | 285 | |
284 | dbConn.Close(); | 286 | dbConn.Close(); |
285 | dbConn.Dispose(); | 287 | dbConn.Dispose(); |
286 | m_sessions.Clear(); | 288 | m_sessions.Clear(); |
@@ -301,7 +303,8 @@ namespace OpenSim.Region.UserStatistics | |||
301 | 303 | ||
302 | public void OnRegisterCaps(UUID agentID, Caps caps) | 304 | public void OnRegisterCaps(UUID agentID, Caps caps) |
303 | { | 305 | { |
304 | m_log.DebugFormat("[WEB STATS MODULE]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps); | 306 | // m_log.DebugFormat("[WEB STATS MODULE]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps); |
307 | |||
305 | string capsPath = "/CAPS/VS/" + UUID.Random(); | 308 | string capsPath = "/CAPS/VS/" + UUID.Random(); |
306 | caps.RegisterHandler("ViewerStats", | 309 | caps.RegisterHandler("ViewerStats", |
307 | new RestStreamHandler("POST", capsPath, | 310 | new RestStreamHandler("POST", capsPath, |
@@ -315,7 +318,6 @@ namespace OpenSim.Region.UserStatistics | |||
315 | 318 | ||
316 | public void OnDeRegisterCaps(UUID agentID, Caps caps) | 319 | public void OnDeRegisterCaps(UUID agentID, Caps caps) |
317 | { | 320 | { |
318 | |||
319 | } | 321 | } |
320 | 322 | ||
321 | protected virtual void AddHandlers() | 323 | protected virtual void AddHandlers() |
@@ -365,7 +367,6 @@ namespace OpenSim.Region.UserStatistics | |||
365 | 367 | ||
366 | public void OnMakeChildAgent(ScenePresence agent) | 368 | public void OnMakeChildAgent(ScenePresence agent) |
367 | { | 369 | { |
368 | |||
369 | } | 370 | } |
370 | 371 | ||
371 | public void OnClientClosed(UUID agentID, Scene scene) | 372 | public void OnClientClosed(UUID agentID, Scene scene) |
@@ -427,6 +428,7 @@ namespace OpenSim.Region.UserStatistics | |||
427 | return scene.RegionInfo.RegionID; | 428 | return scene.RegionInfo.RegionID; |
428 | } | 429 | } |
429 | } | 430 | } |
431 | |||
430 | return UUID.Zero; | 432 | return UUID.Zero; |
431 | } | 433 | } |
432 | 434 | ||
@@ -455,14 +457,14 @@ namespace OpenSim.Region.UserStatistics | |||
455 | UserSessionData usd; | 457 | UserSessionData usd; |
456 | OSD message = OSDParser.DeserializeLLSDXml(request); | 458 | OSD message = OSDParser.DeserializeLLSDXml(request); |
457 | OSDMap mmap; | 459 | OSDMap mmap; |
460 | |||
458 | lock (m_sessions) | 461 | lock (m_sessions) |
459 | { | 462 | { |
460 | if (agentID != UUID.Zero) | 463 | if (agentID != UUID.Zero) |
461 | { | 464 | { |
462 | |||
463 | if (!m_sessions.ContainsKey(agentID)) | 465 | if (!m_sessions.ContainsKey(agentID)) |
464 | { | 466 | { |
465 | m_log.Warn("[WEB STATS MODULE]: no session for stat disclosure"); | 467 | m_log.WarnFormat("[WEB STATS MODULE]: no session for stat disclosure for agent {0}", agentID); |
466 | return new UserSessionID(); | 468 | return new UserSessionID(); |
467 | } | 469 | } |
468 | uid = m_sessions[agentID]; | 470 | uid = m_sessions[agentID]; |
@@ -582,8 +584,6 @@ namespace OpenSim.Region.UserStatistics | |||
582 | usd.n_out_kb = (float)net_out["kbytes"].AsReal(); | 584 | usd.n_out_kb = (float)net_out["kbytes"].AsReal(); |
583 | usd.n_out_pk = net_out["packets"].AsInteger(); | 585 | usd.n_out_pk = net_out["packets"].AsInteger(); |
584 | } | 586 | } |
585 | |||
586 | |||
587 | } | 587 | } |
588 | } | 588 | } |
589 | 589 | ||
@@ -599,83 +599,85 @@ namespace OpenSim.Region.UserStatistics | |||
599 | 599 | ||
600 | lock (db) | 600 | lock (db) |
601 | { | 601 | { |
602 | SqliteCommand updatecmd = new SqliteCommand(SQL_STATS_TABLE_UPDATE, db); | 602 | using (SqliteCommand updatecmd = new SqliteCommand(SQL_STATS_TABLE_UPDATE, db)) |
603 | updatecmd.Parameters.Add(new SqliteParameter(":session_id", uid.session_data.session_id.ToString())); | ||
604 | updatecmd.Parameters.Add(new SqliteParameter(":agent_id", uid.session_data.agent_id.ToString())); | ||
605 | updatecmd.Parameters.Add(new SqliteParameter(":region_id", uid.session_data.region_id.ToString())); | ||
606 | updatecmd.Parameters.Add(new SqliteParameter(":last_updated", (int) uid.session_data.last_updated)); | ||
607 | updatecmd.Parameters.Add(new SqliteParameter(":remote_ip", uid.session_data.remote_ip)); | ||
608 | updatecmd.Parameters.Add(new SqliteParameter(":name_f", uid.session_data.name_f)); | ||
609 | updatecmd.Parameters.Add(new SqliteParameter(":name_l", uid.session_data.name_l)); | ||
610 | updatecmd.Parameters.Add(new SqliteParameter(":avg_agents_in_view", uid.session_data.avg_agents_in_view)); | ||
611 | updatecmd.Parameters.Add(new SqliteParameter(":min_agents_in_view", | ||
612 | (int) uid.session_data.min_agents_in_view)); | ||
613 | updatecmd.Parameters.Add(new SqliteParameter(":max_agents_in_view", | ||
614 | (int) uid.session_data.max_agents_in_view)); | ||
615 | updatecmd.Parameters.Add(new SqliteParameter(":mode_agents_in_view", | ||
616 | (int) uid.session_data.mode_agents_in_view)); | ||
617 | updatecmd.Parameters.Add(new SqliteParameter(":avg_fps", uid.session_data.avg_fps)); | ||
618 | updatecmd.Parameters.Add(new SqliteParameter(":min_fps", uid.session_data.min_fps)); | ||
619 | updatecmd.Parameters.Add(new SqliteParameter(":max_fps", uid.session_data.max_fps)); | ||
620 | updatecmd.Parameters.Add(new SqliteParameter(":mode_fps", uid.session_data.mode_fps)); | ||
621 | updatecmd.Parameters.Add(new SqliteParameter(":a_language", uid.session_data.a_language)); | ||
622 | updatecmd.Parameters.Add(new SqliteParameter(":mem_use", uid.session_data.mem_use)); | ||
623 | updatecmd.Parameters.Add(new SqliteParameter(":meters_traveled", uid.session_data.meters_traveled)); | ||
624 | updatecmd.Parameters.Add(new SqliteParameter(":avg_ping", uid.session_data.avg_ping)); | ||
625 | updatecmd.Parameters.Add(new SqliteParameter(":min_ping", uid.session_data.min_ping)); | ||
626 | updatecmd.Parameters.Add(new SqliteParameter(":max_ping", uid.session_data.max_ping)); | ||
627 | updatecmd.Parameters.Add(new SqliteParameter(":mode_ping", uid.session_data.mode_ping)); | ||
628 | updatecmd.Parameters.Add(new SqliteParameter(":regions_visited", uid.session_data.regions_visited)); | ||
629 | updatecmd.Parameters.Add(new SqliteParameter(":run_time", uid.session_data.run_time)); | ||
630 | updatecmd.Parameters.Add(new SqliteParameter(":avg_sim_fps", uid.session_data.avg_sim_fps)); | ||
631 | updatecmd.Parameters.Add(new SqliteParameter(":min_sim_fps", uid.session_data.min_sim_fps)); | ||
632 | updatecmd.Parameters.Add(new SqliteParameter(":max_sim_fps", uid.session_data.max_sim_fps)); | ||
633 | updatecmd.Parameters.Add(new SqliteParameter(":mode_sim_fps", uid.session_data.mode_sim_fps)); | ||
634 | updatecmd.Parameters.Add(new SqliteParameter(":start_time", uid.session_data.start_time)); | ||
635 | updatecmd.Parameters.Add(new SqliteParameter(":client_version", uid.session_data.client_version)); | ||
636 | updatecmd.Parameters.Add(new SqliteParameter(":s_cpu", uid.session_data.s_cpu)); | ||
637 | updatecmd.Parameters.Add(new SqliteParameter(":s_gpu", uid.session_data.s_gpu)); | ||
638 | updatecmd.Parameters.Add(new SqliteParameter(":s_os", uid.session_data.s_os)); | ||
639 | updatecmd.Parameters.Add(new SqliteParameter(":s_ram", uid.session_data.s_ram)); | ||
640 | updatecmd.Parameters.Add(new SqliteParameter(":d_object_kb", uid.session_data.d_object_kb)); | ||
641 | updatecmd.Parameters.Add(new SqliteParameter(":d_texture_kb", uid.session_data.d_texture_kb)); | ||
642 | updatecmd.Parameters.Add(new SqliteParameter(":d_world_kb", uid.session_data.d_world_kb)); | ||
643 | updatecmd.Parameters.Add(new SqliteParameter(":n_in_kb", uid.session_data.n_in_kb)); | ||
644 | updatecmd.Parameters.Add(new SqliteParameter(":n_in_pk", uid.session_data.n_in_pk)); | ||
645 | updatecmd.Parameters.Add(new SqliteParameter(":n_out_kb", uid.session_data.n_out_kb)); | ||
646 | updatecmd.Parameters.Add(new SqliteParameter(":n_out_pk", uid.session_data.n_out_pk)); | ||
647 | updatecmd.Parameters.Add(new SqliteParameter(":f_dropped", uid.session_data.f_dropped)); | ||
648 | updatecmd.Parameters.Add(new SqliteParameter(":f_failed_resends", uid.session_data.f_failed_resends)); | ||
649 | updatecmd.Parameters.Add(new SqliteParameter(":f_invalid", uid.session_data.f_invalid)); | ||
650 | |||
651 | updatecmd.Parameters.Add(new SqliteParameter(":f_off_circuit", uid.session_data.f_off_circuit)); | ||
652 | updatecmd.Parameters.Add(new SqliteParameter(":f_resent", uid.session_data.f_resent)); | ||
653 | updatecmd.Parameters.Add(new SqliteParameter(":f_send_packet", uid.session_data.f_send_packet)); | ||
654 | |||
655 | updatecmd.Parameters.Add(new SqliteParameter(":session_key", uid.session_data.session_id.ToString())); | ||
656 | updatecmd.Parameters.Add(new SqliteParameter(":agent_key", uid.session_data.agent_id.ToString())); | ||
657 | updatecmd.Parameters.Add(new SqliteParameter(":region_key", uid.session_data.region_id.ToString())); | ||
658 | // m_log.Debug("UPDATE"); | ||
659 | |||
660 | int result = updatecmd.ExecuteNonQuery(); | ||
661 | |||
662 | if (result == 0) | ||
663 | { | 603 | { |
664 | // m_log.Debug("INSERT"); | 604 | updatecmd.Parameters.Add(new SqliteParameter(":session_id", uid.session_data.session_id.ToString())); |
665 | updatecmd.CommandText = SQL_STATS_TABLE_INSERT; | 605 | updatecmd.Parameters.Add(new SqliteParameter(":agent_id", uid.session_data.agent_id.ToString())); |
666 | try | 606 | updatecmd.Parameters.Add(new SqliteParameter(":region_id", uid.session_data.region_id.ToString())); |
667 | { | 607 | updatecmd.Parameters.Add(new SqliteParameter(":last_updated", (int) uid.session_data.last_updated)); |
668 | updatecmd.ExecuteNonQuery(); | 608 | updatecmd.Parameters.Add(new SqliteParameter(":remote_ip", uid.session_data.remote_ip)); |
669 | } | 609 | updatecmd.Parameters.Add(new SqliteParameter(":name_f", uid.session_data.name_f)); |
670 | catch (SqliteExecutionException) | 610 | updatecmd.Parameters.Add(new SqliteParameter(":name_l", uid.session_data.name_l)); |
611 | updatecmd.Parameters.Add(new SqliteParameter(":avg_agents_in_view", uid.session_data.avg_agents_in_view)); | ||
612 | updatecmd.Parameters.Add(new SqliteParameter(":min_agents_in_view", | ||
613 | (int) uid.session_data.min_agents_in_view)); | ||
614 | updatecmd.Parameters.Add(new SqliteParameter(":max_agents_in_view", | ||
615 | (int) uid.session_data.max_agents_in_view)); | ||
616 | updatecmd.Parameters.Add(new SqliteParameter(":mode_agents_in_view", | ||
617 | (int) uid.session_data.mode_agents_in_view)); | ||
618 | updatecmd.Parameters.Add(new SqliteParameter(":avg_fps", uid.session_data.avg_fps)); | ||
619 | updatecmd.Parameters.Add(new SqliteParameter(":min_fps", uid.session_data.min_fps)); | ||
620 | updatecmd.Parameters.Add(new SqliteParameter(":max_fps", uid.session_data.max_fps)); | ||
621 | updatecmd.Parameters.Add(new SqliteParameter(":mode_fps", uid.session_data.mode_fps)); | ||
622 | updatecmd.Parameters.Add(new SqliteParameter(":a_language", uid.session_data.a_language)); | ||
623 | updatecmd.Parameters.Add(new SqliteParameter(":mem_use", uid.session_data.mem_use)); | ||
624 | updatecmd.Parameters.Add(new SqliteParameter(":meters_traveled", uid.session_data.meters_traveled)); | ||
625 | updatecmd.Parameters.Add(new SqliteParameter(":avg_ping", uid.session_data.avg_ping)); | ||
626 | updatecmd.Parameters.Add(new SqliteParameter(":min_ping", uid.session_data.min_ping)); | ||
627 | updatecmd.Parameters.Add(new SqliteParameter(":max_ping", uid.session_data.max_ping)); | ||
628 | updatecmd.Parameters.Add(new SqliteParameter(":mode_ping", uid.session_data.mode_ping)); | ||
629 | updatecmd.Parameters.Add(new SqliteParameter(":regions_visited", uid.session_data.regions_visited)); | ||
630 | updatecmd.Parameters.Add(new SqliteParameter(":run_time", uid.session_data.run_time)); | ||
631 | updatecmd.Parameters.Add(new SqliteParameter(":avg_sim_fps", uid.session_data.avg_sim_fps)); | ||
632 | updatecmd.Parameters.Add(new SqliteParameter(":min_sim_fps", uid.session_data.min_sim_fps)); | ||
633 | updatecmd.Parameters.Add(new SqliteParameter(":max_sim_fps", uid.session_data.max_sim_fps)); | ||
634 | updatecmd.Parameters.Add(new SqliteParameter(":mode_sim_fps", uid.session_data.mode_sim_fps)); | ||
635 | updatecmd.Parameters.Add(new SqliteParameter(":start_time", uid.session_data.start_time)); | ||
636 | updatecmd.Parameters.Add(new SqliteParameter(":client_version", uid.session_data.client_version)); | ||
637 | updatecmd.Parameters.Add(new SqliteParameter(":s_cpu", uid.session_data.s_cpu)); | ||
638 | updatecmd.Parameters.Add(new SqliteParameter(":s_gpu", uid.session_data.s_gpu)); | ||
639 | updatecmd.Parameters.Add(new SqliteParameter(":s_os", uid.session_data.s_os)); | ||
640 | updatecmd.Parameters.Add(new SqliteParameter(":s_ram", uid.session_data.s_ram)); | ||
641 | updatecmd.Parameters.Add(new SqliteParameter(":d_object_kb", uid.session_data.d_object_kb)); | ||
642 | updatecmd.Parameters.Add(new SqliteParameter(":d_texture_kb", uid.session_data.d_texture_kb)); | ||
643 | updatecmd.Parameters.Add(new SqliteParameter(":d_world_kb", uid.session_data.d_world_kb)); | ||
644 | updatecmd.Parameters.Add(new SqliteParameter(":n_in_kb", uid.session_data.n_in_kb)); | ||
645 | updatecmd.Parameters.Add(new SqliteParameter(":n_in_pk", uid.session_data.n_in_pk)); | ||
646 | updatecmd.Parameters.Add(new SqliteParameter(":n_out_kb", uid.session_data.n_out_kb)); | ||
647 | updatecmd.Parameters.Add(new SqliteParameter(":n_out_pk", uid.session_data.n_out_pk)); | ||
648 | updatecmd.Parameters.Add(new SqliteParameter(":f_dropped", uid.session_data.f_dropped)); | ||
649 | updatecmd.Parameters.Add(new SqliteParameter(":f_failed_resends", uid.session_data.f_failed_resends)); | ||
650 | updatecmd.Parameters.Add(new SqliteParameter(":f_invalid", uid.session_data.f_invalid)); | ||
651 | |||
652 | updatecmd.Parameters.Add(new SqliteParameter(":f_off_circuit", uid.session_data.f_off_circuit)); | ||
653 | updatecmd.Parameters.Add(new SqliteParameter(":f_resent", uid.session_data.f_resent)); | ||
654 | updatecmd.Parameters.Add(new SqliteParameter(":f_send_packet", uid.session_data.f_send_packet)); | ||
655 | |||
656 | updatecmd.Parameters.Add(new SqliteParameter(":session_key", uid.session_data.session_id.ToString())); | ||
657 | updatecmd.Parameters.Add(new SqliteParameter(":agent_key", uid.session_data.agent_id.ToString())); | ||
658 | updatecmd.Parameters.Add(new SqliteParameter(":region_key", uid.session_data.region_id.ToString())); | ||
659 | |||
660 | // m_log.DebugFormat("[WEB STATS MODULE]: Database stats update for {0}", uid.session_data.agent_id); | ||
661 | |||
662 | int result = updatecmd.ExecuteNonQuery(); | ||
663 | |||
664 | if (result == 0) | ||
671 | { | 665 | { |
672 | m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage Execution Exception"); | 666 | // m_log.DebugFormat("[WEB STATS MODULE]: Database stats insert for {0}", uid.session_data.agent_id); |
673 | } | 667 | |
674 | catch (SqliteSyntaxException) | 668 | updatecmd.CommandText = SQL_STATS_TABLE_INSERT; |
675 | { | ||
676 | m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage SQL Syntax Exception"); | ||
677 | } | ||
678 | 669 | ||
670 | try | ||
671 | { | ||
672 | updatecmd.ExecuteNonQuery(); | ||
673 | } | ||
674 | catch (Exception e) | ||
675 | { | ||
676 | m_log.WarnFormat( | ||
677 | "[WEB STATS MODULE]: failed to write stats for {0}, storage Execution Exception {1}{2}", | ||
678 | uid.session_data.agent_id, e.Message, e.StackTrace); | ||
679 | } | ||
680 | } | ||
679 | } | 681 | } |
680 | } | 682 | } |
681 | } | 683 | } |
diff --git a/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs b/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs index 440b898..dfed761 100644 --- a/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs +++ b/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs | |||
@@ -248,7 +248,7 @@ For more information, see <a href='http://openid.net/'>http://openid.net/</a>. | |||
248 | if (passwordValues != null && passwordValues.Length == 1) | 248 | if (passwordValues != null && passwordValues.Length == 1) |
249 | { | 249 | { |
250 | if (account != null && | 250 | if (account != null && |
251 | (m_authenticationService.Authenticate(account.PrincipalID, passwordValues[0], 30) != string.Empty)) | 251 | (m_authenticationService.Authenticate(account.PrincipalID,Util.Md5Hash(passwordValues[0]), 30) != string.Empty)) |
252 | authRequest.IsAuthenticated = true; | 252 | authRequest.IsAuthenticated = true; |
253 | else | 253 | else |
254 | authRequest.IsAuthenticated = false; | 254 | authRequest.IsAuthenticated = false; |
diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs index de05f28..079bcb1 100644 --- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs +++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs | |||
@@ -173,6 +173,12 @@ namespace OpenSim.Services.LLLoginService | |||
173 | // Web map | 173 | // Web map |
174 | private string mapTileURL; | 174 | private string mapTileURL; |
175 | 175 | ||
176 | // Web Profiles | ||
177 | private string profileURL; | ||
178 | |||
179 | // OpenID | ||
180 | private string openIDURL; | ||
181 | |||
176 | private string searchURL; | 182 | private string searchURL; |
177 | 183 | ||
178 | // Error Flags | 184 | // Error Flags |
@@ -225,7 +231,7 @@ namespace OpenSim.Services.LLLoginService | |||
225 | public LLLoginResponse(UserAccount account, AgentCircuitData aCircuit, GridUserInfo pinfo, | 231 | public LLLoginResponse(UserAccount account, AgentCircuitData aCircuit, GridUserInfo pinfo, |
226 | GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService, | 232 | GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService, |
227 | string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message, | 233 | string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message, |
228 | GridRegion home, IPEndPoint clientIP, string mapTileURL, string searchURL, string currency) | 234 | GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency) |
229 | : this() | 235 | : this() |
230 | { | 236 | { |
231 | FillOutInventoryData(invSkel, libService); | 237 | FillOutInventoryData(invSkel, libService); |
@@ -242,6 +248,9 @@ namespace OpenSim.Services.LLLoginService | |||
242 | BuddList = ConvertFriendListItem(friendsList); | 248 | BuddList = ConvertFriendListItem(friendsList); |
243 | StartLocation = where; | 249 | StartLocation = where; |
244 | MapTileURL = mapTileURL; | 250 | MapTileURL = mapTileURL; |
251 | ProfileURL = profileURL; | ||
252 | OpenIDURL = openIDURL; | ||
253 | |||
245 | SearchURL = searchURL; | 254 | SearchURL = searchURL; |
246 | Currency = currency; | 255 | Currency = currency; |
247 | 256 | ||
@@ -390,6 +399,8 @@ namespace OpenSim.Services.LLLoginService | |||
390 | InitialOutfitHash["gender"] = "female"; | 399 | InitialOutfitHash["gender"] = "female"; |
391 | initialOutfit.Add(InitialOutfitHash); | 400 | initialOutfit.Add(InitialOutfitHash); |
392 | mapTileURL = String.Empty; | 401 | mapTileURL = String.Empty; |
402 | profileURL = String.Empty; | ||
403 | openIDURL = String.Empty; | ||
393 | searchURL = String.Empty; | 404 | searchURL = String.Empty; |
394 | 405 | ||
395 | currency = String.Empty; | 406 | currency = String.Empty; |
@@ -462,6 +473,13 @@ namespace OpenSim.Services.LLLoginService | |||
462 | if (mapTileURL != String.Empty) | 473 | if (mapTileURL != String.Empty) |
463 | responseData["map-server-url"] = mapTileURL; | 474 | responseData["map-server-url"] = mapTileURL; |
464 | 475 | ||
476 | if (profileURL != String.Empty) | ||
477 | responseData["profile-server-url"] = profileURL; | ||
478 | |||
479 | // We need to send an openid_token back in the response too | ||
480 | if (openIDURL != String.Empty) | ||
481 | responseData["openid_url"] = openIDURL; | ||
482 | |||
465 | if (m_buddyList != null) | 483 | if (m_buddyList != null) |
466 | { | 484 | { |
467 | responseData["buddy-list"] = m_buddyList.ToArray(); | 485 | responseData["buddy-list"] = m_buddyList.ToArray(); |
@@ -567,6 +585,12 @@ namespace OpenSim.Services.LLLoginService | |||
567 | if (mapTileURL != String.Empty) | 585 | if (mapTileURL != String.Empty) |
568 | map["map-server-url"] = OSD.FromString(mapTileURL); | 586 | map["map-server-url"] = OSD.FromString(mapTileURL); |
569 | 587 | ||
588 | if (profileURL != String.Empty) | ||
589 | map["profile-server-url"] = OSD.FromString(profileURL); | ||
590 | |||
591 | if (openIDURL != String.Empty) | ||
592 | map["openid_url"] = OSD.FromString(openIDURL); | ||
593 | |||
570 | if (searchURL != String.Empty) | 594 | if (searchURL != String.Empty) |
571 | map["search"] = OSD.FromString(searchURL); | 595 | map["search"] = OSD.FromString(searchURL); |
572 | 596 | ||
@@ -939,6 +963,18 @@ namespace OpenSim.Services.LLLoginService | |||
939 | set { mapTileURL = value; } | 963 | set { mapTileURL = value; } |
940 | } | 964 | } |
941 | 965 | ||
966 | public string ProfileURL | ||
967 | { | ||
968 | get { return profileURL; } | ||
969 | set { profileURL = value; } | ||
970 | } | ||
971 | |||
972 | public string OpenIDURL | ||
973 | { | ||
974 | get { return openIDURL; } | ||
975 | set { openIDURL = value; } | ||
976 | } | ||
977 | |||
942 | public string SearchURL | 978 | public string SearchURL |
943 | { | 979 | { |
944 | get { return searchURL; } | 980 | get { return searchURL; } |
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 6a9b8c6..c9a1154 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -74,6 +74,8 @@ namespace OpenSim.Services.LLLoginService | |||
74 | protected string m_GatekeeperURL; | 74 | protected string m_GatekeeperURL; |
75 | protected bool m_AllowRemoteSetLoginLevel; | 75 | protected bool m_AllowRemoteSetLoginLevel; |
76 | protected string m_MapTileURL; | 76 | protected string m_MapTileURL; |
77 | protected string m_ProfileURL; | ||
78 | protected string m_OpenIDURL; | ||
77 | protected string m_SearchURL; | 79 | protected string m_SearchURL; |
78 | protected string m_Currency; | 80 | protected string m_Currency; |
79 | 81 | ||
@@ -108,6 +110,8 @@ namespace OpenSim.Services.LLLoginService | |||
108 | m_MinLoginLevel = m_LoginServerConfig.GetInt("MinLoginLevel", 0); | 110 | m_MinLoginLevel = m_LoginServerConfig.GetInt("MinLoginLevel", 0); |
109 | m_GatekeeperURL = m_LoginServerConfig.GetString("GatekeeperURI", string.Empty); | 111 | m_GatekeeperURL = m_LoginServerConfig.GetString("GatekeeperURI", string.Empty); |
110 | m_MapTileURL = m_LoginServerConfig.GetString("MapTileURL", string.Empty); | 112 | m_MapTileURL = m_LoginServerConfig.GetString("MapTileURL", string.Empty); |
113 | m_ProfileURL = m_LoginServerConfig.GetString("ProfileServerURL", string.Empty); | ||
114 | m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty); | ||
111 | m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty); | 115 | m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty); |
112 | m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty); | 116 | m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty); |
113 | 117 | ||
@@ -420,7 +424,7 @@ namespace OpenSim.Services.LLLoginService | |||
420 | // Finally, fill out the response and return it | 424 | // Finally, fill out the response and return it |
421 | // | 425 | // |
422 | LLLoginResponse response = new LLLoginResponse(account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, | 426 | LLLoginResponse response = new LLLoginResponse(account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, |
423 | where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, m_MapTileURL, m_SearchURL, m_Currency); | 427 | where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency); |
424 | 428 | ||
425 | m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to client."); | 429 | m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to client."); |
426 | return response; | 430 | return response; |
diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs index aa904aa..8a69d7c 100644 --- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs +++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs | |||
@@ -113,7 +113,7 @@ namespace OpenSim.Tests.Common | |||
113 | Console.WriteLine("Setting up test scene {0}", name); | 113 | Console.WriteLine("Setting up test scene {0}", name); |
114 | 114 | ||
115 | // We must set up a console otherwise setup of some modules may fail | 115 | // We must set up a console otherwise setup of some modules may fail |
116 | MainConsole.Instance = new MockConsole("TEST PROMPT"); | 116 | MainConsole.Instance = new MockConsole(); |
117 | 117 | ||
118 | RegionInfo regInfo = new RegionInfo(x, y, new IPEndPoint(IPAddress.Loopback, 9000), "127.0.0.1"); | 118 | RegionInfo regInfo = new RegionInfo(x, y, new IPEndPoint(IPAddress.Loopback, 9000), "127.0.0.1"); |
119 | regInfo.RegionName = name; | 119 | regInfo.RegionName = name; |
diff --git a/OpenSim/Tools/pCampBot/Bot.cs b/OpenSim/Tools/pCampBot/Bot.cs index 0bd0bcc..da090dd 100644 --- a/OpenSim/Tools/pCampBot/Bot.cs +++ b/OpenSim/Tools/pCampBot/Bot.cs | |||
@@ -420,6 +420,8 @@ namespace pCampBot | |||
420 | 420 | ||
421 | public void Network_LoginProgress(object sender, LoginProgressEventArgs args) | 421 | public void Network_LoginProgress(object sender, LoginProgressEventArgs args) |
422 | { | 422 | { |
423 | m_log.DebugFormat("[BOT]: Bot {0} {1} in Network_LoginProcess", Name, args.Status); | ||
424 | |||
423 | if (args.Status == LoginStatus.Success) | 425 | if (args.Status == LoginStatus.Success) |
424 | { | 426 | { |
425 | if (OnConnected != null) | 427 | if (OnConnected != null) |
@@ -431,10 +433,15 @@ namespace pCampBot | |||
431 | 433 | ||
432 | public void Network_SimConnected(object sender, SimConnectedEventArgs args) | 434 | public void Network_SimConnected(object sender, SimConnectedEventArgs args) |
433 | { | 435 | { |
436 | m_log.DebugFormat( | ||
437 | "[BOT]: Bot {0} connected to {1} at {2}", Name, args.Simulator.Name, args.Simulator.IPEndPoint); | ||
434 | } | 438 | } |
435 | 439 | ||
436 | public void Network_OnDisconnected(object sender, DisconnectedEventArgs args) | 440 | public void Network_OnDisconnected(object sender, DisconnectedEventArgs args) |
437 | { | 441 | { |
442 | m_log.DebugFormat( | ||
443 | "[BOT]: Bot {0} disconnected reason {1}, message {2}", Name, args.Reason, args.Message); | ||
444 | |||
438 | // m_log.ErrorFormat("Fired Network_OnDisconnected"); | 445 | // m_log.ErrorFormat("Fired Network_OnDisconnected"); |
439 | 446 | ||
440 | // if ( | 447 | // if ( |
diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs index 6481e97..0f501b7 100644 --- a/OpenSim/Tools/pCampBot/BotManager.cs +++ b/OpenSim/Tools/pCampBot/BotManager.cs | |||
@@ -266,7 +266,7 @@ namespace pCampBot | |||
266 | /// <returns></returns> | 266 | /// <returns></returns> |
267 | protected CommandConsole CreateConsole() | 267 | protected CommandConsole CreateConsole() |
268 | { | 268 | { |
269 | return new LocalConsole("Region"); | 269 | return new LocalConsole("pCampbot"); |
270 | } | 270 | } |
271 | 271 | ||
272 | private void HandleShutdown(string module, string[] cmd) | 272 | private void HandleShutdown(string module, string[] cmd) |
diff --git a/OpenSim/Tools/pCampBot/pCampBot.cs b/OpenSim/Tools/pCampBot/pCampBot.cs index a73fcbe..ec5ad04 100644 --- a/OpenSim/Tools/pCampBot/pCampBot.cs +++ b/OpenSim/Tools/pCampBot/pCampBot.cs | |||
@@ -56,6 +56,10 @@ namespace pCampBot | |||
56 | { | 56 | { |
57 | Help(); | 57 | Help(); |
58 | } | 58 | } |
59 | else if (config.Get("firstname") == null || config.Get("lastname") == null || config.Get("password") == null) | ||
60 | { | ||
61 | Console.WriteLine("ERROR: You must supply a firstname, lastname and password for the bots."); | ||
62 | } | ||
59 | else | 63 | else |
60 | { | 64 | { |
61 | int botcount = config.GetInt("botcount", 1); | 65 | int botcount = config.GetInt("botcount", 1); |