aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs40
-rw-r--r--OpenSim/Data/MySQL/MySQLFramework.cs75
-rw-r--r--OpenSim/Data/MySQL/MySQLGenericTableHandler.cs163
-rw-r--r--OpenSim/Data/MySQL/MySQLSimulationData.cs14
-rw-r--r--OpenSim/Data/MySQL/Resources/RegionStore.migrations6
-rwxr-xr-xOpenSim/Data/PGSQL/PGSQLGroupsData.cs4
-rwxr-xr-xOpenSim/Data/PGSQL/PGSQLSimulationData.cs46
-rw-r--r--OpenSim/Data/PGSQL/Resources/RegionStore.migrations16
-rw-r--r--OpenSim/Data/SQLite/Resources/RegionStore.migrations6
-rw-r--r--OpenSim/Data/SQLite/SQLiteSimulationData.cs11
-rw-r--r--OpenSim/Framework/IAssetCache.cs5
-rw-r--r--OpenSim/Framework/IClientAPI.cs14
-rw-r--r--OpenSim/Framework/Monitoring/StatsManager.cs13
-rw-r--r--OpenSim/Framework/OutboundUrlFilter.cs14
-rw-r--r--OpenSim/Framework/PhysicsInertia.cs262
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs64
-rw-r--r--OpenSim/Framework/RegionInfo.cs4
-rw-r--r--OpenSim/Framework/Servers/ServerBase.cs17
-rw-r--r--OpenSim/Framework/Util.cs51
-rw-r--r--OpenSim/Framework/WearableCacheItem.cs3
-rw-r--r--OpenSim/Region/Application/OpenSim.cs1
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs7
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs59
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs10
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs1
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs234
-rw-r--r--OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs5
-rw-r--r--OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs10
-rw-r--r--OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs46
-rw-r--r--OpenSim/Region/CoreModules/Asset/GlynnTuckerAssetCache.cs11
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs47
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs93
-rw-r--r--OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs94
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs11
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs58
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs11
-rw-r--r--OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs26
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs8
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs23
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs26
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs22
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs17
-rw-r--r--OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs35
-rw-r--r--OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs29
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs1889
-rw-r--r--OpenSim/Region/CoreModules/World/Region/RestartModule.cs43
-rw-r--r--OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs3
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEntityInventory.cs2
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs2
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEtcdModule.cs37
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/GodController.cs20
-rw-r--r--OpenSim/Region/Framework/Scenes/KeyframeMotion.cs133
-rw-r--r--OpenSim/Region/Framework/Scenes/Prioritizer.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/SOPMaterial.cs82
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs353
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs17
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Permissions.cs441
-rwxr-xr-xOpenSim/Region/Framework/Scenes/Scene.cs211
-rwxr-xr-xOpenSim/Region/Framework/Scenes/SceneGraph.cs138
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs297
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs645
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs149
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs35
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs110
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs28
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneObjectCrossingTests.cs37
-rw-r--r--OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs7
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs25
-rw-r--r--OpenSim/Region/OptionalModules/Framework/Monitoring/EtcdMonitoringModule.cs195
-rw-r--r--OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs2
-rw-r--r--OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs103
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs2
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs6
-rw-r--r--OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs4
-rw-r--r--OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs18
-rw-r--r--OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs487
-rw-r--r--OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs79
-rw-r--r--OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs320
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs310
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs12
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs35
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs13
-rw-r--r--OpenSim/Server/Base/ServicesServerBase.cs36
-rw-r--r--OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs28
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs16
-rw-r--r--OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs6
-rw-r--r--OpenSim/Tests/Common/Mock/TestClient.cs6
-rw-r--r--bin/Newtonsoft.Json.dllbin0 -> 498176 bytes
-rw-r--r--bin/Newtonsoft.Json.xml8626
-rwxr-xr-xbin/OpenSim.exe.config3
-rw-r--r--bin/OpenSim.ini.example3
-rw-r--r--bin/RestSharp.dllbin0 -> 165376 bytes
-rw-r--r--bin/RestSharp.xml3024
-rw-r--r--bin/config-include/osslEnable.ini1
-rwxr-xr-xbin/lib32/libode.sobin1019273 -> 4232000 bytes
-rwxr-xr-xbin/lib32/ode.dllbin552448 -> 541696 bytes
-rwxr-xr-xbin/lib64/libode-x86_64.sobin6397607 -> 6427600 bytes
-rwxr-xr-xbin/lib64/ode.dllbin651776 -> 635392 bytes
-rw-r--r--bin/netcd.dllbin0 -> 22528 bytes
-rw-r--r--prebuild.xml2
111 files changed, 17449 insertions, 2357 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 597b439..1ee2468 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -359,6 +359,42 @@ namespace OpenSim.ApplicationPlugins.RemoteController
359 notice = false; 359 notice = false;
360 } 360 }
361 361
362 if (startupConfig.GetBoolean("SkipDelayOnEmptyRegion", false))
363 {
364 m_log.Info("[RADMIN]: Counting affected avatars");
365 int agents = 0;
366
367 if (restartAll)
368 {
369 foreach (Scene s in m_application.SceneManager.Scenes)
370 {
371 foreach (ScenePresence sp in s.GetScenePresences())
372 {
373 if (!sp.IsChildAgent && !sp.IsNPC)
374 agents++;
375 }
376 }
377 }
378 else
379 {
380 foreach (ScenePresence sp in rebootedScene.GetScenePresences())
381 {
382 if (!sp.IsChildAgent && !sp.IsNPC)
383 agents++;
384 }
385 }
386
387 m_log.InfoFormat("[RADMIN]: Avatars in region: {0}", agents);
388
389 if (agents == 0)
390 {
391 m_log.Info("[RADMIN]: No avatars detected, shutting down without delay");
392
393 times.Clear();
394 times.Add(0);
395 }
396 }
397
362 List<Scene> restartList; 398 List<Scene> restartList;
363 399
364 if (restartAll) 400 if (restartAll)
@@ -376,10 +412,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController
376 } 412 }
377 catch (Exception e) 413 catch (Exception e)
378 { 414 {
379// m_log.ErrorFormat("[RADMIN]: Restart region: failed: {0} {1}", e.Message, e.StackTrace); 415 m_log.ErrorFormat("[RADMIN]: Restart region: failed: {0} {1}", e.Message, e.StackTrace);
380 responseData["rebooting"] = false; 416 responseData["rebooting"] = false;
381 417
382 throw e; 418 throw;
383 } 419 }
384 420
385 m_log.Info("[RADMIN]: Restart Region request complete"); 421 m_log.Info("[RADMIN]: Restart Region request complete");
diff --git a/OpenSim/Data/MySQL/MySQLFramework.cs b/OpenSim/Data/MySQL/MySQLFramework.cs
index 34791cf..93662db 100644
--- a/OpenSim/Data/MySQL/MySQLFramework.cs
+++ b/OpenSim/Data/MySQL/MySQLFramework.cs
@@ -36,7 +36,7 @@ using MySql.Data.MySqlClient;
36namespace OpenSim.Data.MySQL 36namespace OpenSim.Data.MySQL
37{ 37{
38 /// <summary> 38 /// <summary>
39 /// A database interface class to a user profile storage system 39 /// Common code for a number of database modules
40 /// </summary> 40 /// </summary>
41 public class MySqlFramework 41 public class MySqlFramework
42 { 42 {
@@ -44,14 +44,24 @@ namespace OpenSim.Data.MySQL
44 log4net.LogManager.GetLogger( 44 log4net.LogManager.GetLogger(
45 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 45 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
46 46
47 protected string m_connectionString; 47 protected string m_connectionString = String.Empty;
48 protected object m_dbLock = new object(); 48 protected MySqlTransaction m_trans = null;
49 49
50 // Constructor using a connection string. Instances constructed
51 // this way will open a new connection for each call.
50 protected MySqlFramework(string connectionString) 52 protected MySqlFramework(string connectionString)
51 { 53 {
52 m_connectionString = connectionString; 54 m_connectionString = connectionString;
53 } 55 }
54 56
57 // Constructor using a connection object. Instances constructed
58 // this way will use the connection object and never create
59 // new connections.
60 protected MySqlFramework(MySqlTransaction trans)
61 {
62 m_trans = trans;
63 }
64
55 ////////////////////////////////////////////////////////////// 65 //////////////////////////////////////////////////////////////
56 // 66 //
57 // All non queries are funneled through one connection 67 // All non queries are funneled through one connection
@@ -59,33 +69,48 @@ namespace OpenSim.Data.MySQL
59 // 69 //
60 protected int ExecuteNonQuery(MySqlCommand cmd) 70 protected int ExecuteNonQuery(MySqlCommand cmd)
61 { 71 {
62 lock (m_dbLock) 72 if (m_trans == null)
63 { 73 {
64 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 74 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
65 { 75 {
66 try 76 dbcon.Open();
67 { 77 return ExecuteNonQueryWithConnection(cmd, dbcon);
68 dbcon.Open(); 78 }
69 cmd.Connection = dbcon; 79 }
80 else
81 {
82 return ExecuteNonQueryWithTransaction(cmd, m_trans);
83 }
84 }
70 85
71 try 86 private int ExecuteNonQueryWithTransaction(MySqlCommand cmd, MySqlTransaction trans)
72 { 87 {
73 return cmd.ExecuteNonQuery(); 88 cmd.Transaction = trans;
74 } 89 return ExecuteNonQueryWithConnection(cmd, trans.Connection);
75 catch (Exception e) 90 }
76 { 91
77 m_log.Error(e.Message, e); 92 private int ExecuteNonQueryWithConnection(MySqlCommand cmd, MySqlConnection dbcon)
78 m_log.Error(Environment.StackTrace.ToString()); 93 {
79 return 0; 94 try
80 } 95 {
81 } 96 cmd.Connection = dbcon;
82 catch (Exception e) 97
83 { 98 try
84 m_log.Error(e.Message, e); 99 {
85 return 0; 100 return cmd.ExecuteNonQuery();
86 }
87 } 101 }
102 catch (Exception e)
103 {
104 m_log.Error(e.Message, e);
105 m_log.Error(Environment.StackTrace.ToString());
106 return 0;
107 }
108 }
109 catch (Exception e)
110 {
111 m_log.Error(e.Message, e);
112 return 0;
88 } 113 }
89 } 114 }
90 } 115 }
91} \ No newline at end of file 116}
diff --git a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
index 6aae9c6..bd8bbd5 100644
--- a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
+++ b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
@@ -53,14 +53,27 @@ namespace OpenSim.Data.MySQL
53 get { return GetType().Assembly; } 53 get { return GetType().Assembly; }
54 } 54 }
55 55
56 public MySQLGenericTableHandler(MySqlTransaction trans,
57 string realm, string storeName) : base(trans)
58 {
59 m_Realm = realm;
60
61 CommonConstruct(storeName);
62 }
63
56 public MySQLGenericTableHandler(string connectionString, 64 public MySQLGenericTableHandler(string connectionString,
57 string realm, string storeName) : base(connectionString) 65 string realm, string storeName) : base(connectionString)
58 { 66 {
59 m_Realm = realm; 67 m_Realm = realm;
60 m_connectionString = connectionString;
61 68
69 CommonConstruct(storeName);
70 }
71
72 protected void CommonConstruct(string storeName)
73 {
62 if (storeName != String.Empty) 74 if (storeName != String.Empty)
63 { 75 {
76 // We always use a new connection for any Migrations
64 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 77 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
65 { 78 {
66 dbcon.Open(); 79 dbcon.Open();
@@ -111,6 +124,11 @@ namespace OpenSim.Data.MySQL
111 124
112 public virtual T[] Get(string[] fields, string[] keys) 125 public virtual T[] Get(string[] fields, string[] keys)
113 { 126 {
127 return Get(fields, keys, String.Empty);
128 }
129
130 public virtual T[] Get(string[] fields, string[] keys, string options)
131 {
114 if (fields.Length != keys.Length) 132 if (fields.Length != keys.Length)
115 return new T[0]; 133 return new T[0];
116 134
@@ -126,8 +144,8 @@ namespace OpenSim.Data.MySQL
126 144
127 string where = String.Join(" and ", terms.ToArray()); 145 string where = String.Join(" and ", terms.ToArray());
128 146
129 string query = String.Format("select * from {0} where {1}", 147 string query = String.Format("select * from {0} where {1} {2}",
130 m_Realm, where); 148 m_Realm, where, options);
131 149
132 cmd.CommandText = query; 150 cmd.CommandText = query;
133 151
@@ -137,72 +155,92 @@ namespace OpenSim.Data.MySQL
137 155
138 protected T[] DoQuery(MySqlCommand cmd) 156 protected T[] DoQuery(MySqlCommand cmd)
139 { 157 {
158 if (m_trans == null)
159 {
160 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
161 {
162 dbcon.Open();
163
164 return DoQueryWithConnection(cmd, dbcon);
165 }
166 }
167 else
168 {
169 return DoQueryWithTransaction(cmd, m_trans);
170 }
171 }
172
173 protected T[] DoQueryWithTransaction(MySqlCommand cmd, MySqlTransaction trans)
174 {
175 cmd.Transaction = trans;
176
177 return DoQueryWithConnection(cmd, trans.Connection);
178 }
179
180 protected T[] DoQueryWithConnection(MySqlCommand cmd, MySqlConnection dbcon)
181 {
140 List<T> result = new List<T>(); 182 List<T> result = new List<T>();
141 183
142 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 184 cmd.Connection = dbcon;
185
186 using (IDataReader reader = cmd.ExecuteReader())
143 { 187 {
144 dbcon.Open(); 188 if (reader == null)
145 cmd.Connection = dbcon; 189 return new T[0];
146 190
147 using (IDataReader reader = cmd.ExecuteReader()) 191 CheckColumnNames(reader);
148 {
149 if (reader == null)
150 return new T[0];
151 192
152 CheckColumnNames(reader); 193 while (reader.Read())
194 {
195 T row = new T();
153 196
154 while (reader.Read()) 197 foreach (string name in m_Fields.Keys)
155 { 198 {
156 T row = new T(); 199 if (reader[name] is DBNull)
157
158 foreach (string name in m_Fields.Keys)
159 { 200 {
160 if (reader[name] is DBNull) 201 continue;
161 {
162 continue;
163 }
164 if (m_Fields[name].FieldType == typeof(bool))
165 {
166 int v = Convert.ToInt32(reader[name]);
167 m_Fields[name].SetValue(row, v != 0 ? true : false);
168 }
169 else if (m_Fields[name].FieldType == typeof(UUID))
170 {
171 m_Fields[name].SetValue(row, DBGuid.FromDB(reader[name]));
172 }
173 else if (m_Fields[name].FieldType == typeof(int))
174 {
175 int v = Convert.ToInt32(reader[name]);
176 m_Fields[name].SetValue(row, v);
177 }
178 else if (m_Fields[name].FieldType == typeof(uint))
179 {
180 uint v = Convert.ToUInt32(reader[name]);
181 m_Fields[name].SetValue(row, v);
182 }
183 else
184 {
185 m_Fields[name].SetValue(row, reader[name]);
186 }
187 } 202 }
188 203 if (m_Fields[name].FieldType == typeof(bool))
189 if (m_DataField != null) 204 {
205 int v = Convert.ToInt32(reader[name]);
206 m_Fields[name].SetValue(row, v != 0 ? true : false);
207 }
208 else if (m_Fields[name].FieldType == typeof(UUID))
209 {
210 m_Fields[name].SetValue(row, DBGuid.FromDB(reader[name]));
211 }
212 else if (m_Fields[name].FieldType == typeof(int))
213 {
214 int v = Convert.ToInt32(reader[name]);
215 m_Fields[name].SetValue(row, v);
216 }
217 else if (m_Fields[name].FieldType == typeof(uint))
218 {
219 uint v = Convert.ToUInt32(reader[name]);
220 m_Fields[name].SetValue(row, v);
221 }
222 else
190 { 223 {
191 Dictionary<string, string> data = 224 m_Fields[name].SetValue(row, reader[name]);
192 new Dictionary<string, string>(); 225 }
226 }
193 227
194 foreach (string col in m_ColumnNames) 228 if (m_DataField != null)
195 { 229 {
196 data[col] = reader[col].ToString(); 230 Dictionary<string, string> data =
197 if (data[col] == null) 231 new Dictionary<string, string>();
198 data[col] = String.Empty;
199 }
200 232
201 m_DataField.SetValue(row, data); 233 foreach (string col in m_ColumnNames)
234 {
235 data[col] = reader[col].ToString();
236 if (data[col] == null)
237 data[col] = String.Empty;
202 } 238 }
203 239
204 result.Add(row); 240 m_DataField.SetValue(row, data);
205 } 241 }
242
243 result.Add(row);
206 } 244 }
207 } 245 }
208 246
@@ -357,14 +395,23 @@ namespace OpenSim.Data.MySQL
357 395
358 public object DoQueryScalar(MySqlCommand cmd) 396 public object DoQueryScalar(MySqlCommand cmd)
359 { 397 {
360 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 398 if (m_trans == null)
361 { 399 {
362 dbcon.Open(); 400 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
363 cmd.Connection = dbcon; 401 {
402 dbcon.Open();
403 cmd.Connection = dbcon;
404
405 return cmd.ExecuteScalar();
406 }
407 }
408 else
409 {
410 cmd.Connection = m_trans.Connection;
411 cmd.Transaction = m_trans;
364 412
365 return cmd.ExecuteScalar(); 413 return cmd.ExecuteScalar();
366 } 414 }
367 } 415 }
368
369 } 416 }
370} 417}
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index 8278c0e..5740b91 100644
--- a/OpenSim/Data/MySQL/MySQLSimulationData.cs
+++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs
@@ -187,7 +187,7 @@ namespace OpenSim.Data.MySQL
187 "LinkNumber, MediaURL, KeyframeMotion, AttachedPosX, " + 187 "LinkNumber, MediaURL, KeyframeMotion, AttachedPosX, " +
188 "AttachedPosY, AttachedPosZ, " + 188 "AttachedPosY, AttachedPosZ, " +
189 "PhysicsShapeType, Density, GravityModifier, " + 189 "PhysicsShapeType, Density, GravityModifier, " +
190 "Friction, Restitution, Vehicle, DynAttrs, " + 190 "Friction, Restitution, Vehicle, PhysInertia, DynAttrs, " +
191 "RotationAxisLocks" + 191 "RotationAxisLocks" +
192 ") values (" + "?UUID, " + 192 ") values (" + "?UUID, " +
193 "?CreationDate, ?Name, ?Text, " + 193 "?CreationDate, ?Name, ?Text, " +
@@ -224,7 +224,7 @@ namespace OpenSim.Data.MySQL
224 "?LinkNumber, ?MediaURL, ?KeyframeMotion, ?AttachedPosX, " + 224 "?LinkNumber, ?MediaURL, ?KeyframeMotion, ?AttachedPosX, " +
225 "?AttachedPosY, ?AttachedPosZ, " + 225 "?AttachedPosY, ?AttachedPosZ, " +
226 "?PhysicsShapeType, ?Density, ?GravityModifier, " + 226 "?PhysicsShapeType, ?Density, ?GravityModifier, " +
227 "?Friction, ?Restitution, ?Vehicle, ?DynAttrs," + 227 "?Friction, ?Restitution, ?Vehicle, ?PhysInertia, ?DynAttrs," +
228 "?RotationAxisLocks)"; 228 "?RotationAxisLocks)";
229 229
230 FillPrimCommand(cmd, prim, obj.UUID, regionUUID); 230 FillPrimCommand(cmd, prim, obj.UUID, regionUUID);
@@ -1452,6 +1452,11 @@ namespace OpenSim.Data.MySQL
1452 prim.VehicleParams = vehicle; 1452 prim.VehicleParams = vehicle;
1453 } 1453 }
1454 1454
1455 PhysicsInertiaData pdata = null;
1456 if (row["PhysInertia"].ToString() != String.Empty)
1457 pdata = PhysicsInertiaData.FromXml2(row["PhysInertia"].ToString());
1458 prim.PhysicsInertia = pdata;
1459
1455 return prim; 1460 return prim;
1456 } 1461 }
1457 1462
@@ -1810,6 +1815,11 @@ namespace OpenSim.Data.MySQL
1810 else 1815 else
1811 cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]); 1816 cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]);
1812 1817
1818 if (prim.PhysicsInertia != null)
1819 cmd.Parameters.AddWithValue("PhysInertia", prim.PhysicsInertia.ToXml2());
1820 else
1821 cmd.Parameters.AddWithValue("PhysInertia", String.Empty);
1822
1813 if (prim.VehicleParams != null) 1823 if (prim.VehicleParams != null)
1814 cmd.Parameters.AddWithValue("Vehicle", prim.VehicleParams.ToXml2()); 1824 cmd.Parameters.AddWithValue("Vehicle", prim.VehicleParams.ToXml2());
1815 else 1825 else
diff --git a/OpenSim/Data/MySQL/Resources/RegionStore.migrations b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
index c63cc95..0577392 100644
--- a/OpenSim/Data/MySQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
@@ -461,3 +461,9 @@ BEGIN;
461ALTER TABLE `prims` ADD COLUMN `RezzerID` char(36) DEFAULT NULL; 461ALTER TABLE `prims` ADD COLUMN `RezzerID` char(36) DEFAULT NULL;
462 462
463COMMIT; 463COMMIT;
464
465:VERSION 57 #----- Add physics inertia data
466
467BEGIN;
468ALTER TABLE `prims` ADD COLUMN `PhysInertia` TEXT default NULL;
469COMMIT;
diff --git a/OpenSim/Data/PGSQL/PGSQLGroupsData.cs b/OpenSim/Data/PGSQL/PGSQLGroupsData.cs
index 6ef576b..f398256 100755
--- a/OpenSim/Data/PGSQL/PGSQLGroupsData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLGroupsData.cs
@@ -435,7 +435,7 @@ namespace OpenSim.Data.PGSQL
435 435
436 using (NpgsqlCommand cmd = new NpgsqlCommand()) 436 using (NpgsqlCommand cmd = new NpgsqlCommand())
437 { 437 {
438 cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm); 438 cmd.CommandText = String.Format("delete from {0} where \"TMStamp\"::abstime::timestamp < now() - INTERVAL '2 week'", m_Realm);
439 439
440 ExecuteNonQuery(cmd); 440 ExecuteNonQuery(cmd);
441 } 441 }
@@ -461,7 +461,7 @@ namespace OpenSim.Data.PGSQL
461 461
462 using (NpgsqlCommand cmd = new NpgsqlCommand()) 462 using (NpgsqlCommand cmd = new NpgsqlCommand())
463 { 463 {
464 cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm); 464 cmd.CommandText = String.Format("delete from {0} where \"TMStamp\"::abstime::timestamp < now() - INTERVAL '2 week'", m_Realm);
465 465
466 ExecuteNonQuery(cmd); 466 ExecuteNonQuery(cmd);
467 } 467 }
diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
index 33d12bd..625120b 100755
--- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
@@ -350,10 +350,11 @@ namespace OpenSim.Data.PGSQL
350 ""CameraEyeOffsetY"" = :CameraEyeOffsetY, ""CameraEyeOffsetZ"" = :CameraEyeOffsetZ, ""CameraAtOffsetX"" = :CameraAtOffsetX, 350 ""CameraEyeOffsetY"" = :CameraEyeOffsetY, ""CameraEyeOffsetZ"" = :CameraEyeOffsetZ, ""CameraAtOffsetX"" = :CameraAtOffsetX,
351 ""CameraAtOffsetY"" = :CameraAtOffsetY, ""CameraAtOffsetZ"" = :CameraAtOffsetZ, ""ForceMouselook"" = :ForceMouselook, 351 ""CameraAtOffsetY"" = :CameraAtOffsetY, ""CameraAtOffsetZ"" = :CameraAtOffsetZ, ""ForceMouselook"" = :ForceMouselook,
352 ""ScriptAccessPin"" = :ScriptAccessPin, ""AllowedDrop"" = :AllowedDrop, ""DieAtEdge"" = :DieAtEdge, ""SalePrice"" = :SalePrice, 352 ""ScriptAccessPin"" = :ScriptAccessPin, ""AllowedDrop"" = :AllowedDrop, ""DieAtEdge"" = :DieAtEdge, ""SalePrice"" = :SalePrice,
353 ""SaleType"" = :SaleType, ""ColorR"" = :ColorR, ""ColorG"" = :ColorG, ""ColorB"" = :ColorB, ""ColorA"" = :ColorA, ""ParticleSystem"" = :ParticleSystem, 353 ""PhysicsShapeType"" = :PhysicsShapeType, ""Density"" = :Density, ""GravityModifier"" = :GravityModifier, ""Friction"" = :Friction, ""Restitution"" = :Restitution,
354 ""PassCollisions"" = :PassCollisions, ""RotationAxisLocks"" = :RotationAxisLocks, ""RezzerID"" = :RezzerID,
354 ""ClickAction"" = :ClickAction, ""Material"" = :Material, ""CollisionSound"" = :CollisionSound, ""CollisionSoundVolume"" = :CollisionSoundVolume, ""PassTouches"" = :PassTouches, 355 ""ClickAction"" = :ClickAction, ""Material"" = :Material, ""CollisionSound"" = :CollisionSound, ""CollisionSoundVolume"" = :CollisionSoundVolume, ""PassTouches"" = :PassTouches,
355 ""LinkNumber"" = :LinkNumber, ""MediaURL"" = :MediaURL, ""DynAttrs"" = :DynAttrs, 356 ""LinkNumber"" = :LinkNumber, ""MediaURL"" = :MediaURL, ""DynAttrs"" = :DynAttrs,
356 ""PhysicsShapeType"" = :PhysicsShapeType, ""Density"" = :Density, ""GravityModifier"" = :GravityModifier, ""Friction"" = :Friction, ""Restitution"" = :Restitution 357 ""PhysInertia"" = :PhysInertia
357 WHERE ""UUID"" = :UUID ; 358 WHERE ""UUID"" = :UUID ;
358 359
359 INSERT INTO 360 INSERT INTO
@@ -367,7 +368,7 @@ namespace OpenSim.Data.PGSQL
367 ""OmegaY"", ""OmegaZ"", ""CameraEyeOffsetX"", ""CameraEyeOffsetY"", ""CameraEyeOffsetZ"", ""CameraAtOffsetX"", ""CameraAtOffsetY"", ""CameraAtOffsetZ"", 368 ""OmegaY"", ""OmegaZ"", ""CameraEyeOffsetX"", ""CameraEyeOffsetY"", ""CameraEyeOffsetZ"", ""CameraAtOffsetX"", ""CameraAtOffsetY"", ""CameraAtOffsetZ"",
368 ""ForceMouselook"", ""ScriptAccessPin"", ""AllowedDrop"", ""DieAtEdge"", ""SalePrice"", ""SaleType"", ""ColorR"", ""ColorG"", ""ColorB"", ""ColorA"", 369 ""ForceMouselook"", ""ScriptAccessPin"", ""AllowedDrop"", ""DieAtEdge"", ""SalePrice"", ""SaleType"", ""ColorR"", ""ColorG"", ""ColorB"", ""ColorA"",
369 ""ParticleSystem"", ""ClickAction"", ""Material"", ""CollisionSound"", ""CollisionSoundVolume"", ""PassTouches"", ""LinkNumber"", ""MediaURL"", ""DynAttrs"", 370 ""ParticleSystem"", ""ClickAction"", ""Material"", ""CollisionSound"", ""CollisionSoundVolume"", ""PassTouches"", ""LinkNumber"", ""MediaURL"", ""DynAttrs"",
370 ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution"" 371 ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution"", ""PassCollisions"", ""RotationAxisLocks"", ""RezzerID"" , ""PhysInertia""
371 ) Select 372 ) Select
372 :UUID, :CreationDate, :Name, :Text, :Description, :SitName, :TouchName, :ObjectFlags, :OwnerMask, :NextOwnerMask, :GroupMask, 373 :UUID, :CreationDate, :Name, :Text, :Description, :SitName, :TouchName, :ObjectFlags, :OwnerMask, :NextOwnerMask, :GroupMask,
373 :EveryoneMask, :BaseMask, :PositionX, :PositionY, :PositionZ, :GroupPositionX, :GroupPositionY, :GroupPositionZ, :VelocityX, 374 :EveryoneMask, :BaseMask, :PositionX, :PositionY, :PositionZ, :GroupPositionX, :GroupPositionY, :GroupPositionZ, :VelocityX,
@@ -378,7 +379,7 @@ namespace OpenSim.Data.PGSQL
378 :OmegaY, :OmegaZ, :CameraEyeOffsetX, :CameraEyeOffsetY, :CameraEyeOffsetZ, :CameraAtOffsetX, :CameraAtOffsetY, :CameraAtOffsetZ, 379 :OmegaY, :OmegaZ, :CameraEyeOffsetX, :CameraEyeOffsetY, :CameraEyeOffsetZ, :CameraAtOffsetX, :CameraAtOffsetY, :CameraAtOffsetZ,
379 :ForceMouselook, :ScriptAccessPin, :AllowedDrop, :DieAtEdge, :SalePrice, :SaleType, :ColorR, :ColorG, :ColorB, :ColorA, 380 :ForceMouselook, :ScriptAccessPin, :AllowedDrop, :DieAtEdge, :SalePrice, :SaleType, :ColorR, :ColorG, :ColorB, :ColorA,
380 :ParticleSystem, :ClickAction, :Material, :CollisionSound, :CollisionSoundVolume, :PassTouches, :LinkNumber, :MediaURL, :DynAttrs, 381 :ParticleSystem, :ClickAction, :Material, :CollisionSound, :CollisionSoundVolume, :PassTouches, :LinkNumber, :MediaURL, :DynAttrs,
381 :PhysicsShapeType, :Density, :GravityModifier, :Friction, :Restitution 382 :PhysicsShapeType, :Density, :GravityModifier, :Friction, :Restitution, :PassCollisions, :RotationAxisLocks, :RezzerID, :PhysInertia
382 where not EXISTS (SELECT ""UUID"" FROM prims WHERE ""UUID"" = :UUID); 383 where not EXISTS (SELECT ""UUID"" FROM prims WHERE ""UUID"" = :UUID);
383 "; 384 ";
384 385
@@ -1678,6 +1679,12 @@ namespace OpenSim.Data.PGSQL
1678 prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); 1679 prim.OwnerID = new UUID((Guid)primRow["OwnerID"]);
1679 prim.GroupID = new UUID((Guid)primRow["GroupID"]); 1680 prim.GroupID = new UUID((Guid)primRow["GroupID"]);
1680 prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]); 1681 prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]);
1682
1683 if (primRow["RezzerID"] != DBNull.Value)
1684 prim.RezzerID = new UUID((Guid)primRow["RezzerID"]);
1685 else
1686 prim.RezzerID = UUID.Zero;
1687
1681 prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]); 1688 prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]);
1682 prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]); 1689 prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]);
1683 prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]); 1690 prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]);
@@ -1796,6 +1803,13 @@ namespace OpenSim.Data.PGSQL
1796 prim.GravityModifier = Convert.ToSingle(primRow["GravityModifier"]); 1803 prim.GravityModifier = Convert.ToSingle(primRow["GravityModifier"]);
1797 prim.Friction = Convert.ToSingle(primRow["Friction"]); 1804 prim.Friction = Convert.ToSingle(primRow["Friction"]);
1798 prim.Restitution = Convert.ToSingle(primRow["Restitution"]); 1805 prim.Restitution = Convert.ToSingle(primRow["Restitution"]);
1806 prim.RotationAxisLocks = Convert.ToByte(primRow["RotationAxisLocks"]);
1807
1808
1809 PhysicsInertiaData pdata = null;
1810 if (!(primRow["PhysInertia"] is System.DBNull))
1811 pdata = PhysicsInertiaData.FromXml2(primRow["PhysInertia"].ToString());
1812 prim.PhysicsInertia = pdata;
1799 1813
1800 return prim; 1814 return prim;
1801 } 1815 }
@@ -2097,6 +2111,7 @@ namespace OpenSim.Data.PGSQL
2097 parameters.Add(_Database.CreateParameter("OwnerID", prim.OwnerID)); 2111 parameters.Add(_Database.CreateParameter("OwnerID", prim.OwnerID));
2098 parameters.Add(_Database.CreateParameter("GroupID", prim.GroupID)); 2112 parameters.Add(_Database.CreateParameter("GroupID", prim.GroupID));
2099 parameters.Add(_Database.CreateParameter("LastOwnerID", prim.LastOwnerID)); 2113 parameters.Add(_Database.CreateParameter("LastOwnerID", prim.LastOwnerID));
2114 parameters.Add(_Database.CreateParameter("RezzerID", prim.RezzerID));
2100 parameters.Add(_Database.CreateParameter("OwnerMask", prim.OwnerMask)); 2115 parameters.Add(_Database.CreateParameter("OwnerMask", prim.OwnerMask));
2101 parameters.Add(_Database.CreateParameter("NextOwnerMask", prim.NextOwnerMask)); 2116 parameters.Add(_Database.CreateParameter("NextOwnerMask", prim.NextOwnerMask));
2102 parameters.Add(_Database.CreateParameter("GroupMask", prim.GroupMask)); 2117 parameters.Add(_Database.CreateParameter("GroupMask", prim.GroupMask));
@@ -2196,10 +2211,28 @@ namespace OpenSim.Data.PGSQL
2196 parameters.Add(_Database.CreateParameter("CollisionSound", prim.CollisionSound)); 2211 parameters.Add(_Database.CreateParameter("CollisionSound", prim.CollisionSound));
2197 parameters.Add(_Database.CreateParameter("CollisionSoundVolume", prim.CollisionSoundVolume)); 2212 parameters.Add(_Database.CreateParameter("CollisionSoundVolume", prim.CollisionSoundVolume));
2198 2213
2199 parameters.Add(_Database.CreateParameter("PassTouches", prim.PassTouches)); 2214 parameters.Add(_Database.CreateParameter("PassTouches", (bool)prim.PassTouches));
2215 parameters.Add(_Database.CreateParameter("PassCollisions", prim.PassCollisions));
2216
2217
2218 if (prim.PassTouches)
2219 parameters.Add(_Database.CreateParameter("PassTouches", true));
2220 else
2221 parameters.Add(_Database.CreateParameter("PassTouches", false));
2222
2223 if (prim.PassCollisions)
2224 parameters.Add(_Database.CreateParameter("PassCollisions", 1));
2225 else
2226 parameters.Add(_Database.CreateParameter("PassCollisions", 0));
2200 2227
2201 parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum)); 2228 parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum));
2202 parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl)); 2229 parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl));
2230
2231 if (prim.PhysicsInertia != null)
2232 parameters.Add(_Database.CreateParameter("PhysInertia", prim.PhysicsInertia.ToXml2()));
2233 else
2234 parameters.Add(_Database.CreateParameter("PhysInertia", String.Empty));
2235
2203 2236
2204 if (prim.DynAttrs.CountNamespaces > 0) 2237 if (prim.DynAttrs.CountNamespaces > 0)
2205 parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml())); 2238 parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml()));
@@ -2211,12 +2244,13 @@ namespace OpenSim.Data.PGSQL
2211 parameters.Add(_Database.CreateParameter("GravityModifier", (double)prim.GravityModifier)); 2244 parameters.Add(_Database.CreateParameter("GravityModifier", (double)prim.GravityModifier));
2212 parameters.Add(_Database.CreateParameter("Friction", (double)prim.Friction)); 2245 parameters.Add(_Database.CreateParameter("Friction", (double)prim.Friction));
2213 parameters.Add(_Database.CreateParameter("Restitution", (double)prim.Restitution)); 2246 parameters.Add(_Database.CreateParameter("Restitution", (double)prim.Restitution));
2247 parameters.Add(_Database.CreateParameter("RotationAxisLocks", prim.RotationAxisLocks));
2214 2248
2215 return parameters.ToArray(); 2249 return parameters.ToArray();
2216 } 2250 }
2217 2251
2218 /// <summary> 2252 /// <summary>
2219 /// Creates the primshape parameters for stroing in DB. 2253 /// Creates the primshape parameters for storing in DB.
2220 /// </summary> 2254 /// </summary>
2221 /// <param name="prim">Basic data of SceneObjectpart prim.</param> 2255 /// <param name="prim">Basic data of SceneObjectpart prim.</param>
2222 /// <param name="sceneGroupID">The scene group ID.</param> 2256 /// <param name="sceneGroupID">The scene group ID.</param>
diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
index c085939..948d177 100644
--- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
@@ -1195,3 +1195,19 @@ CREATE TABLE bakedterrain
1195 ); 1195 );
1196 1196
1197COMMIT; 1197COMMIT;
1198
1199:VERSION 45 #---- Add RezzerID filed in table prims
1200
1201BEGIN TRANSACTION;
1202
1203ALTER TABLE prims ADD "RezzerID" uuid NULL;
1204
1205COMMIT;
1206
1207:VERSION 46 #---- Add physics inertia data to table prims
1208
1209BEGIN TRANSACTION;
1210
1211ALTER TABLE prims ADD "PhysInertia" TEXT;
1212
1213COMMIT;
diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
index eef14d6..fb154cf 100644
--- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
@@ -371,3 +371,9 @@ BEGIN;
371ALTER TABLE `prims` ADD COLUMN `RezzerID` char(36) DEFAULT NULL; 371ALTER TABLE `prims` ADD COLUMN `RezzerID` char(36) DEFAULT NULL;
372 372
373COMMIT; 373COMMIT;
374
375:VERSION 36 #----- Add physics inertia data
376
377BEGIN;
378ALTER TABLE `prims` ADD COLUMN `PhysInertia` TEXT default NULL;
379COMMIT;
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index eec386f..19880de 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -1843,6 +1843,12 @@ namespace OpenSim.Data.SQLite
1843 if (vehicle != null) 1843 if (vehicle != null)
1844 prim.VehicleParams = vehicle; 1844 prim.VehicleParams = vehicle;
1845 } 1845 }
1846
1847 PhysicsInertiaData pdata = null;
1848 if (!(row["PhysInertia"] is DBNull) && row["PhysInertia"].ToString() != String.Empty)
1849 pdata = PhysicsInertiaData.FromXml2(row["PhysInertia"].ToString());
1850 prim.PhysicsInertia = pdata;
1851
1846 return prim; 1852 return prim;
1847 } 1853 }
1848 1854
@@ -2266,6 +2272,11 @@ namespace OpenSim.Data.SQLite
2266 else 2272 else
2267 row["Vehicle"] = String.Empty; 2273 row["Vehicle"] = String.Empty;
2268 2274
2275 if (prim.PhysicsInertia != null)
2276 row["PhysInertia"] = prim.PhysicsInertia.ToXml2();
2277 else
2278 row["PhysInertia"] = String.Empty;
2279
2269 } 2280 }
2270 2281
2271 /// <summary> 2282 /// <summary>
diff --git a/OpenSim/Framework/IAssetCache.cs b/OpenSim/Framework/IAssetCache.cs
index 8477116..2df9199 100644
--- a/OpenSim/Framework/IAssetCache.cs
+++ b/OpenSim/Framework/IAssetCache.cs
@@ -47,8 +47,9 @@ namespace OpenSim.Framework
47 /// Get an asset by its id. 47 /// Get an asset by its id.
48 /// </summary> 48 /// </summary>
49 /// <param name='id'></param> 49 /// <param name='id'></param>
50 /// <returns>null if the asset does not exist.</returns> 50 /// <param name='asset'>Will be set to null if no asset was found</param>
51 AssetBase Get(string id); 51 /// <returns>False if the asset has been negative-cached</returns>
52 bool Get(string id, out AssetBase asset);
52 53
53 /// <summary> 54 /// <summary>
54 /// Check whether an asset with the specified id exists in the cache. 55 /// Check whether an asset with the specified id exists in the cache.
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 1267993..5ca8c88 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -107,7 +107,7 @@ namespace OpenSim.Framework
107 public delegate void GenericCall4(Packet packet, IClientAPI remoteClient); 107 public delegate void GenericCall4(Packet packet, IClientAPI remoteClient);
108 108
109 public delegate void DeRezObject( 109 public delegate void DeRezObject(
110 IClientAPI remoteClient, List<uint> localIDs, UUID groupID, DeRezAction action, UUID destinationID); 110 IClientAPI remoteClient, List<uint> localIDs, UUID groupID, DeRezAction action, UUID destinationID, bool AddToReturns = true);
111 111
112 public delegate void GenericCall5(IClientAPI remoteClient, bool status); 112 public delegate void GenericCall5(IClientAPI remoteClient, bool status);
113 113
@@ -685,9 +685,10 @@ namespace OpenSim.Framework
685 ExtraData = 1 << 20, 685 ExtraData = 1 << 20,
686 Sound = 1 << 21, 686 Sound = 1 << 21,
687 Joint = 1 << 22, 687 Joint = 1 << 22,
688 FullUpdate = 0x3fffffff, 688 FullUpdate = 0x0fffffff,
689 CancelKill = 0x7fffffff, 689 SendInTransit = 0x20000000,
690 Kill = 0x80000000 690 CancelKill = 0x4fffffff, // 1 << 30
691 Kill = 0x80000000 // 1 << 31
691 } 692 }
692 693
693/* included in .net 4.0 694/* included in .net 4.0
@@ -1112,7 +1113,7 @@ namespace OpenSim.Framework
1112 /// <param name="localID"></param> 1113 /// <param name="localID"></param>
1113 void SendKillObject(List<uint> localID); 1114 void SendKillObject(List<uint> localID);
1114 1115
1115 void SendPartFullUpdate(ISceneEntity ent, uint? parentID); 1116// void SendPartFullUpdate(ISceneEntity ent, uint? parentID);
1116 1117
1117 void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); 1118 void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs);
1118 void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); 1119 void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args);
@@ -1187,7 +1188,8 @@ namespace OpenSim.Framework
1187 void SetAgentThrottleSilent(int throttle, int setting); 1188 void SetAgentThrottleSilent(int throttle, int setting);
1188 int GetAgentThrottleSilent(int throttle); 1189 int GetAgentThrottleSilent(int throttle);
1189 1190
1190 void SendAvatarDataImmediate(ISceneEntity avatar); 1191 void SendEntityFullUpdateImmediate(ISceneEntity entity);
1192 void SendEntityTerseUpdateImmediate(ISceneEntity entity);
1191 1193
1192 /// <summary> 1194 /// <summary>
1193 /// Send a positional, velocity, etc. update to the viewer for a given entity. 1195 /// Send a positional, velocity, etc. update to the viewer for a given entity.
diff --git a/OpenSim/Framework/Monitoring/StatsManager.cs b/OpenSim/Framework/Monitoring/StatsManager.cs
index 55c3276..a6b341f 100644
--- a/OpenSim/Framework/Monitoring/StatsManager.cs
+++ b/OpenSim/Framework/Monitoring/StatsManager.cs
@@ -47,6 +47,8 @@ namespace OpenSim.Framework.Monitoring
47 // Subcommand used to list other stats. 47 // Subcommand used to list other stats.
48 public const string ListSubCommand = "list"; 48 public const string ListSubCommand = "list";
49 49
50 public static string StatsPassword { get; set; }
51
50 // All subcommands 52 // All subcommands
51 public static HashSet<string> SubCommands = new HashSet<string> { AllSubCommand, ListSubCommand }; 53 public static HashSet<string> SubCommands = new HashSet<string> { AllSubCommand, ListSubCommand };
52 54
@@ -302,6 +304,17 @@ namespace OpenSim.Framework.Monitoring
302 int response_code = 200; 304 int response_code = 200;
303 string contenttype = "text/json"; 305 string contenttype = "text/json";
304 306
307 if (StatsPassword != String.Empty && (!request.ContainsKey("pass") || request["pass"].ToString() != StatsPassword))
308 {
309 responsedata["int_response_code"] = response_code;
310 responsedata["content_type"] = "text/plain";
311 responsedata["keepalive"] = false;
312 responsedata["str_response_string"] = "Access denied";
313 responsedata["access_control_allow_origin"] = "*";
314
315 return responsedata;
316 }
317
305 string pCategoryName = StatsManager.AllSubCommand; 318 string pCategoryName = StatsManager.AllSubCommand;
306 string pContainerName = StatsManager.AllSubCommand; 319 string pContainerName = StatsManager.AllSubCommand;
307 string pStatName = StatsManager.AllSubCommand; 320 string pStatName = StatsManager.AllSubCommand;
diff --git a/OpenSim/Framework/OutboundUrlFilter.cs b/OpenSim/Framework/OutboundUrlFilter.cs
index ee4707f..63ae361 100644
--- a/OpenSim/Framework/OutboundUrlFilter.cs
+++ b/OpenSim/Framework/OutboundUrlFilter.cs
@@ -212,7 +212,17 @@ namespace OpenSim.Framework
212 // Check that we are permitted to make calls to this endpoint. 212 // Check that we are permitted to make calls to this endpoint.
213 bool foundIpv4Address = false; 213 bool foundIpv4Address = false;
214 214
215 IPAddress[] addresses = Dns.GetHostAddresses(url.Host); 215 IPAddress[] addresses = null;
216
217 try
218 {
219 addresses = Dns.GetHostAddresses(url.Host);
220 }
221 catch
222 {
223 // If there is a DNS error, we can't stop the script!
224 return true;
225 }
216 226
217 foreach (IPAddress addr in addresses) 227 foreach (IPAddress addr in addresses)
218 { 228 {
@@ -253,4 +263,4 @@ namespace OpenSim.Framework
253 return allowed; 263 return allowed;
254 } 264 }
255 } 265 }
256} \ No newline at end of file 266}
diff --git a/OpenSim/Framework/PhysicsInertia.cs b/OpenSim/Framework/PhysicsInertia.cs
new file mode 100644
index 0000000..af70634
--- /dev/null
+++ b/OpenSim/Framework/PhysicsInertia.cs
@@ -0,0 +1,262 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using System.Text;
32using System.IO;
33using System.Xml;
34
35namespace OpenSim.Framework
36{
37 public class PhysicsInertiaData
38 {
39 public float TotalMass; // the total mass of a linkset
40 public Vector3 CenterOfMass; // the center of mass position relative to root part position
41 public Vector3 Inertia; // (Ixx, Iyy, Izz) moment of inertia relative to center of mass and principal axis in local coords
42 public Vector4 InertiaRotation; // if principal axis don't match local axis, the principal axis rotation
43 // or the upper triangle of the inertia tensor
44 // Ixy (= Iyx), Ixz (= Izx), Iyz (= Izy))
45
46 public PhysicsInertiaData()
47 {
48 }
49
50 public PhysicsInertiaData(PhysicsInertiaData source)
51 {
52 TotalMass = source.TotalMass;
53 CenterOfMass = source.CenterOfMass;
54 Inertia = source.Inertia;
55 InertiaRotation = source.InertiaRotation;
56 }
57
58 private XmlTextWriter writer;
59
60 private void XWint(string name, int i)
61 {
62 writer.WriteElementString(name, i.ToString());
63 }
64
65 private void XWfloat(string name, float f)
66 {
67 writer.WriteElementString(name, f.ToString(Utils.EnUsCulture));
68 }
69
70 private void XWVector(string name, Vector3 vec)
71 {
72 writer.WriteStartElement(name);
73 writer.WriteElementString("X", vec.X.ToString(Utils.EnUsCulture));
74 writer.WriteElementString("Y", vec.Y.ToString(Utils.EnUsCulture));
75 writer.WriteElementString("Z", vec.Z.ToString(Utils.EnUsCulture));
76 writer.WriteEndElement();
77 }
78
79 private void XWVector4(string name, Vector4 quat)
80 {
81 writer.WriteStartElement(name);
82 writer.WriteElementString("X", quat.X.ToString(Utils.EnUsCulture));
83 writer.WriteElementString("Y", quat.Y.ToString(Utils.EnUsCulture));
84 writer.WriteElementString("Z", quat.Z.ToString(Utils.EnUsCulture));
85 writer.WriteElementString("W", quat.W.ToString(Utils.EnUsCulture));
86 writer.WriteEndElement();
87 }
88
89 public void ToXml2(XmlTextWriter twriter)
90 {
91 writer = twriter;
92 writer.WriteStartElement("PhysicsInertia");
93
94 XWfloat("MASS", TotalMass);
95 XWVector("CM", CenterOfMass);
96 XWVector("INERTIA", Inertia);
97 XWVector4("IROT", InertiaRotation);
98
99 writer.WriteEndElement();
100 writer = null;
101 }
102
103 XmlReader reader;
104
105 private int XRint()
106 {
107 return reader.ReadElementContentAsInt();
108 }
109
110 private float XRfloat()
111 {
112 return reader.ReadElementContentAsFloat();
113 }
114
115 public Vector3 XRvector()
116 {
117 Vector3 vec;
118 reader.ReadStartElement();
119 vec.X = reader.ReadElementContentAsFloat();
120 vec.Y = reader.ReadElementContentAsFloat();
121 vec.Z = reader.ReadElementContentAsFloat();
122 reader.ReadEndElement();
123 return vec;
124 }
125
126 public Vector4 XRVector4()
127 {
128 Vector4 q;
129 reader.ReadStartElement();
130 q.X = reader.ReadElementContentAsFloat();
131 q.Y = reader.ReadElementContentAsFloat();
132 q.Z = reader.ReadElementContentAsFloat();
133 q.W = reader.ReadElementContentAsFloat();
134 reader.ReadEndElement();
135 return q;
136 }
137
138 public static bool EReadProcessors(
139 Dictionary<string, Action> processors,
140 XmlReader xtr)
141 {
142 bool errors = false;
143
144 string nodeName = string.Empty;
145 while (xtr.NodeType != XmlNodeType.EndElement)
146 {
147 nodeName = xtr.Name;
148
149 Action p = null;
150 if (processors.TryGetValue(xtr.Name, out p))
151 {
152 try
153 {
154 p();
155 }
156 catch
157 {
158 errors = true;
159 if (xtr.NodeType == XmlNodeType.EndElement)
160 xtr.Read();
161 }
162 }
163 else
164 {
165 xtr.ReadOuterXml(); // ignore
166 }
167 }
168
169 return errors;
170 }
171
172 public string ToXml2()
173 {
174 using (StringWriter sw = new StringWriter())
175 {
176 using (XmlTextWriter xwriter = new XmlTextWriter(sw))
177 {
178 ToXml2(xwriter);
179 }
180
181 return sw.ToString();
182 }
183 }
184
185 public static PhysicsInertiaData FromXml2(string text)
186 {
187 if (text == String.Empty)
188 return null;
189
190 UTF8Encoding enc = new UTF8Encoding();
191 MemoryStream ms = new MemoryStream(enc.GetBytes(text));
192 XmlTextReader xreader = new XmlTextReader(ms);
193
194 PhysicsInertiaData v = new PhysicsInertiaData();
195 bool error;
196
197 v.FromXml2(xreader, out error);
198
199 xreader.Close();
200
201 if (error)
202 return null;
203
204 return v;
205 }
206
207 public static PhysicsInertiaData FromXml2(XmlReader reader)
208 {
209 PhysicsInertiaData data = new PhysicsInertiaData();
210
211 bool errors = false;
212
213 data.FromXml2(reader, out errors);
214 if (errors)
215 return null;
216
217 return data;
218 }
219
220 private void FromXml2(XmlReader _reader, out bool errors)
221 {
222 errors = false;
223 reader = _reader;
224
225 Dictionary<string, Action> m_XmlProcessors = new Dictionary<string, Action>();
226
227 m_XmlProcessors.Add("MASS", ProcessXR_Mass);
228 m_XmlProcessors.Add("CM", ProcessXR_CM);
229 m_XmlProcessors.Add("INERTIA", ProcessXR_Inertia);
230 m_XmlProcessors.Add("IROT", ProcessXR_InertiaRotation);
231
232 reader.ReadStartElement("PhysicsInertia", String.Empty);
233
234 errors = EReadProcessors(
235 m_XmlProcessors,
236 reader);
237
238 reader.ReadEndElement();
239 reader = null;
240 }
241
242 private void ProcessXR_Mass()
243 {
244 TotalMass = XRfloat();
245 }
246
247 private void ProcessXR_CM()
248 {
249 CenterOfMass = XRvector();
250 }
251
252 private void ProcessXR_Inertia()
253 {
254 Inertia = XRvector();
255 }
256
257 private void ProcessXR_InertiaRotation()
258 {
259 InertiaRotation = XRVector4();
260 }
261 }
262}
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index 29985d2..a830551 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -328,6 +328,70 @@ namespace OpenSim.Framework
328 return shape; 328 return shape;
329 } 329 }
330 330
331 public static PrimitiveBaseShape CreateMesh(int numberOfFaces, UUID meshAssetID)
332 {
333 PrimitiveBaseShape shape = new PrimitiveBaseShape();
334
335 shape._pathScaleX = 100;
336 shape._pathScaleY = 100;
337
338 if(numberOfFaces <= 0) // oops ?
339 numberOfFaces = 1;
340
341 switch(numberOfFaces)
342 {
343 case 1: // torus
344 shape.ProfileCurve = (byte)ProfileShape.Circle | (byte)HollowShape.Triangle;
345 shape.PathCurve = (byte)Extrusion.Curve1;
346 break;
347
348 case 2: // torus with hollow (a sl viewer whould see 4 faces on a hollow sphere)
349 shape.ProfileCurve = (byte)ProfileShape.Circle | (byte)HollowShape.Triangle;
350 shape.PathCurve = (byte)Extrusion.Curve1;
351 shape.ProfileHollow = 1;
352 break;
353
354 case 3: // cylinder
355 shape.ProfileCurve = (byte)ProfileShape.Circle | (byte)HollowShape.Triangle;
356 shape.PathCurve = (byte)Extrusion.Straight;
357 break;
358
359 case 4: // cylinder with hollow
360 shape.ProfileCurve = (byte)ProfileShape.Circle | (byte)HollowShape.Triangle;
361 shape.PathCurve = (byte)Extrusion.Straight;
362 shape.ProfileHollow = 1;
363 break;
364
365 case 5: // prism
366 shape.ProfileCurve = (byte)ProfileShape.EquilateralTriangle | (byte)HollowShape.Triangle;
367 shape.PathCurve = (byte)Extrusion.Straight;
368 break;
369
370 case 6: // box
371 shape.ProfileCurve = (byte)ProfileShape.Square | (byte)HollowShape.Triangle;
372 shape.PathCurve = (byte)Extrusion.Straight;
373 break;
374
375 case 7: // box with hollow
376 shape.ProfileCurve = (byte)ProfileShape.Square | (byte)HollowShape.Triangle;
377 shape.PathCurve = (byte)Extrusion.Straight;
378 shape.ProfileHollow = 1;
379 break;
380
381 default: // 8 faces box with cut
382 shape.ProfileCurve = (byte)ProfileShape.Square | (byte)HollowShape.Triangle;
383 shape.PathCurve = (byte)Extrusion.Straight;
384 shape.ProfileBegin = 1;
385 break;
386 }
387
388 shape.SculptEntry = true;
389 shape.SculptType = (byte)OpenMetaverse.SculptType.Mesh;
390 shape.SculptTexture = meshAssetID;
391
392 return shape;
393 }
394
331 public void SetScale(float side) 395 public void SetScale(float side)
332 { 396 {
333 _scale = new Vector3(side, side, side); 397 _scale = new Vector3(side, side, side);
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 99e97e8..7de8c52 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -130,7 +130,7 @@ namespace OpenSim.Framework
130 private float m_physPrimMin = 0; 130 private float m_physPrimMin = 0;
131 private int m_physPrimMax = 0; 131 private int m_physPrimMax = 0;
132 private bool m_clampPrimSize = false; 132 private bool m_clampPrimSize = false;
133 private int m_objectCapacity = 0; 133 private int m_objectCapacity = 15000;
134 private int m_maxPrimsPerUser = -1; 134 private int m_maxPrimsPerUser = -1;
135 private int m_linksetCapacity = 0; 135 private int m_linksetCapacity = 0;
136 private string m_regionType = String.Empty; 136 private string m_regionType = String.Empty;
@@ -753,7 +753,7 @@ namespace OpenSim.Framework
753 m_clampPrimSize = config.GetBoolean("ClampPrimSize", false); 753 m_clampPrimSize = config.GetBoolean("ClampPrimSize", false);
754 allKeys.Remove("ClampPrimSize"); 754 allKeys.Remove("ClampPrimSize");
755 755
756 m_objectCapacity = config.GetInt("MaxPrims", 15000); 756 m_objectCapacity = config.GetInt("MaxPrims", m_objectCapacity);
757 allKeys.Remove("MaxPrims"); 757 allKeys.Remove("MaxPrims");
758 758
759 m_maxPrimsPerUser = config.GetInt("MaxPrimsPerUser", -1); 759 m_maxPrimsPerUser = config.GetInt("MaxPrimsPerUser", -1);
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 8965e71..f627ae6 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -57,6 +57,7 @@ namespace OpenSim.Framework.Servers
57 57
58 protected OpenSimAppender m_consoleAppender; 58 protected OpenSimAppender m_consoleAppender;
59 protected FileAppender m_logFileAppender; 59 protected FileAppender m_logFileAppender;
60 protected FileAppender m_statsLogFileAppender;
60 61
61 protected DateTime m_startuptime; 62 protected DateTime m_startuptime;
62 protected string m_startupDirectory = Environment.CurrentDirectory; 63 protected string m_startupDirectory = Environment.CurrentDirectory;
@@ -156,6 +157,10 @@ namespace OpenSim.Framework.Servers
156 { 157 {
157 m_logFileAppender = (FileAppender)appender; 158 m_logFileAppender = (FileAppender)appender;
158 } 159 }
160 else if (appender.Name == "StatsLogFileAppender")
161 {
162 m_statsLogFileAppender = (FileAppender)appender;
163 }
159 } 164 }
160 165
161 if (null == m_consoleAppender) 166 if (null == m_consoleAppender)
@@ -185,6 +190,18 @@ namespace OpenSim.Framework.Servers
185 190
186 m_log.InfoFormat("[SERVER BASE]: Logging started to file {0}", m_logFileAppender.File); 191 m_log.InfoFormat("[SERVER BASE]: Logging started to file {0}", m_logFileAppender.File);
187 } 192 }
193
194 if (m_statsLogFileAppender != null && startupConfig != null)
195 {
196 string cfgStatsFileName = startupConfig.GetString("StatsLogFile", null);
197 if (cfgStatsFileName != null)
198 {
199 m_statsLogFileAppender.File = cfgStatsFileName;
200 m_statsLogFileAppender.ActivateOptions();
201 }
202
203 m_log.InfoFormat("[SERVER BASE]: Stats Logging started to file {0}", m_statsLogFileAppender.File);
204 }
188 } 205 }
189 206
190 /// <summary> 207 /// <summary>
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 6d679f2..0ec24e6 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -63,22 +63,34 @@ namespace OpenSim.Framework
63 None = 0, 63 None = 0,
64 64
65 // folded perms 65 // folded perms
66 foldedTransfer = 1, 66 FoldedTransfer = 1,
67 foldedModify = 1 << 1, 67 FoldedModify = 1 << 1,
68 foldedCopy = 1 << 2, 68 FoldedCopy = 1 << 2,
69 69 FoldedExport = 1 << 3,
70 foldedMask = 0x07, 70
71 // DO NOT USE THIS FOR NEW WORK. IT IS DEPRECATED AND
72 // EXISTS ONLY TO REACT TO EXISTING OBJECTS HAVING IT.
73 // NEW CODE SHOULD NEVER SET THIS BIT!
74 // Use InventoryItemFlags.ObjectSlamPerm in the Flags field of
75 // this legacy slam bit. It comes from prior incomplete
76 // understanding of the code and the prohibition on
77 // reading viewer code that used to be in place.
78 Slam = (1 << 4),
79
80 FoldedMask = 0x0f,
71 81
72 // 82 //
73 Transfer = 1 << 13, 83 Transfer = 1 << 13, // 0x02000
74 Modify = 1 << 14, 84 Modify = 1 << 14, // 0x04000
75 Copy = 1 << 15, 85 Copy = 1 << 15, // 0x08000
76 Export = 1 << 16, 86 Export = 1 << 16, // 0x10000
77 Move = 1 << 19, 87 Move = 1 << 19, // 0x80000
78 Damage = 1 << 20, 88 Damage = 1 << 20, // 0x100000 does not seem to be in use
79 // All does not contain Export, which is special and must be 89 // All does not contain Export, which is special and must be
80 // explicitly given 90 // explicitly given
81 All = (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19) 91 All = 0x8e000,
92 AllAndExport = 0x9e000,
93 AllEffective = 0x9e000
82 } 94 }
83 95
84 /// <summary> 96 /// <summary>
@@ -1180,7 +1192,7 @@ namespace OpenSim.Framework
1180 { 1192 {
1181 foreach (IAppender appender in LogManager.GetRepository().GetAppenders()) 1193 foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
1182 { 1194 {
1183 if (appender is FileAppender) 1195 if (appender is FileAppender && appender.Name == "LogFileAppender")
1184 { 1196 {
1185 return ((FileAppender)appender).File; 1197 return ((FileAppender)appender).File;
1186 } 1198 }
@@ -1189,6 +1201,19 @@ namespace OpenSim.Framework
1189 return "./OpenSim.log"; 1201 return "./OpenSim.log";
1190 } 1202 }
1191 1203
1204 public static string statsLogFile()
1205 {
1206 foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
1207 {
1208 if (appender is FileAppender && appender.Name == "StatsLogFileAppender")
1209 {
1210 return ((FileAppender)appender).File;
1211 }
1212 }
1213
1214 return "./OpenSimStats.log";
1215 }
1216
1192 public static string logDir() 1217 public static string logDir()
1193 { 1218 {
1194 return Path.GetDirectoryName(logFile()); 1219 return Path.GetDirectoryName(logFile());
diff --git a/OpenSim/Framework/WearableCacheItem.cs b/OpenSim/Framework/WearableCacheItem.cs
index ccaf69e..427e149 100644
--- a/OpenSim/Framework/WearableCacheItem.cs
+++ b/OpenSim/Framework/WearableCacheItem.cs
@@ -113,7 +113,8 @@ namespace OpenSim.Framework
113 { 113 {
114 if (dataCache.Check(item.TextureID.ToString())) 114 if (dataCache.Check(item.TextureID.ToString()))
115 { 115 {
116 AssetBase assetItem = dataCache.Get(item.TextureID.ToString()); 116 AssetBase assetItem;
117 dataCache.Get(item.TextureID.ToString(), out assetItem);
117 if (assetItem != null) 118 if (assetItem != null)
118 { 119 {
119 itemmap.Add("assetdata", OSD.FromBinary(assetItem.Data)); 120 itemmap.Add("assetdata", OSD.FromBinary(assetItem.Data));
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 8022b1e..58178bc 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -211,6 +211,7 @@ namespace OpenSim
211 if (managedStatsURI != String.Empty) 211 if (managedStatsURI != String.Empty)
212 { 212 {
213 string urlBase = String.Format("/{0}/", managedStatsURI); 213 string urlBase = String.Format("/{0}/", managedStatsURI);
214 StatsManager.StatsPassword = managedStatsPassword;
214 MainServer.Instance.AddHTTPHandler(urlBase, StatsManager.HandleStatsRequest); 215 MainServer.Instance.AddHTTPHandler(urlBase, StatsManager.HandleStatsRequest);
215 m_log.InfoFormat("[OPENSIM] Enabling remote managed stats fetch. URL = {0}", urlBase); 216 m_log.InfoFormat("[OPENSIM] Enabling remote managed stats fetch. URL = {0}", urlBase);
216 } 217 }
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 75dc741..079d733 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -88,6 +88,7 @@ namespace OpenSim
88 88
89 public string userStatsURI = String.Empty; 89 public string userStatsURI = String.Empty;
90 public string managedStatsURI = String.Empty; 90 public string managedStatsURI = String.Empty;
91 public string managedStatsPassword = String.Empty;
91 92
92 protected bool m_autoCreateClientStack = true; 93 protected bool m_autoCreateClientStack = true;
93 94
@@ -239,6 +240,7 @@ namespace OpenSim
239 m_permsModules = new List<string>(permissionModules.Split(',')); 240 m_permsModules = new List<string>(permissionModules.Split(','));
240 241
241 managedStatsURI = startupConfig.GetString("ManagedStatsRemoteFetchURI", String.Empty); 242 managedStatsURI = startupConfig.GetString("ManagedStatsRemoteFetchURI", String.Empty);
243 managedStatsPassword = startupConfig.GetString("ManagedStatsRemoteFetchPassword", String.Empty);
242 } 244 }
243 245
244 // Load the simulation data service 246 // Load the simulation data service
@@ -481,15 +483,14 @@ namespace OpenSim
481 while (regionInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null) 483 while (regionInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null)
482 SetUpEstateOwner(scene); 484 SetUpEstateOwner(scene);
483 485
486 scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID);
487
484 // Prims have to be loaded after module configuration since some modules may be invoked during the load 488 // Prims have to be loaded after module configuration since some modules may be invoked during the load
485 scene.LoadPrimsFromStorage(regionInfo.originRegionID); 489 scene.LoadPrimsFromStorage(regionInfo.originRegionID);
486 490
487 // TODO : Try setting resource for region xstats here on scene 491 // TODO : Try setting resource for region xstats here on scene
488 MainServer.Instance.AddStreamHandler(new RegionStatsHandler(regionInfo)); 492 MainServer.Instance.AddStreamHandler(new RegionStatsHandler(regionInfo));
489 493
490 scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID);
491 scene.EventManager.TriggerParcelPrimCountUpdate();
492
493 if (scene.SnmpService != null) 494 if (scene.SnmpService != null)
494 { 495 {
495 scene.SnmpService.BootInfo("Grid Registration in progress", scene); 496 scene.SnmpService.BootInfo("Grid Registration in progress", scene);
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 58b7b00..e1b9e08 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -946,17 +946,26 @@ namespace OpenSim.Region.ClientStack.Linden
946 continue; 946 continue;
947 } 947 }
948 948
949 PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateBox(); 949 OSDArray face_list = (OSDArray)inner_instance_list["face_list"];
950
951 PrimitiveBaseShape pbs = null;
952 if (inner_instance_list.ContainsKey("mesh")) // seems to happen always but ...
953 {
954 int meshindx = inner_instance_list["mesh"].AsInteger();
955 if (meshAssets.Count > meshindx)
956 pbs = PrimitiveBaseShape.CreateMesh(face_list.Count, meshAssets[meshindx]);
957 }
958 if(pbs == null) // fallback
959 pbs = PrimitiveBaseShape.CreateBox();
950 960
951 Primitive.TextureEntry textureEntry 961 Primitive.TextureEntry textureEntry
952 = new Primitive.TextureEntry(Primitive.TextureEntry.WHITE_TEXTURE); 962 = new Primitive.TextureEntry(Primitive.TextureEntry.WHITE_TEXTURE);
953 963
954
955 OSDArray face_list = (OSDArray)inner_instance_list["face_list"];
956 for (uint face = 0; face < face_list.Count; face++) 964 for (uint face = 0; face < face_list.Count; face++)
957 { 965 {
958 OSDMap faceMap = (OSDMap)face_list[(int)face]; 966 OSDMap faceMap = (OSDMap)face_list[(int)face];
959 Primitive.TextureEntryFace f = pbs.Textures.CreateFace(face); 967
968 Primitive.TextureEntryFace f = textureEntry.CreateFace(face); //clone the default
960 if (faceMap.ContainsKey("fullbright")) 969 if (faceMap.ContainsKey("fullbright"))
961 f.Fullbright = faceMap["fullbright"].AsBoolean(); 970 f.Fullbright = faceMap["fullbright"].AsBoolean();
962 if (faceMap.ContainsKey("diffuse_color")) 971 if (faceMap.ContainsKey("diffuse_color"))
@@ -986,51 +995,11 @@ namespace OpenSim.Region.ClientStack.Linden
986 995
987 if (textures.Count > textureNum) 996 if (textures.Count > textureNum)
988 f.TextureID = textures[textureNum]; 997 f.TextureID = textures[textureNum];
989 else 998
990 f.TextureID = Primitive.TextureEntry.WHITE_TEXTURE;
991
992 textureEntry.FaceTextures[face] = f; 999 textureEntry.FaceTextures[face] = f;
993 } 1000 }
994
995 pbs.TextureEntry = textureEntry.GetBytes(); 1001 pbs.TextureEntry = textureEntry.GetBytes();
996 1002
997 if (inner_instance_list.ContainsKey("mesh")) // seems to happen always but ...
998 {
999 int meshindx = inner_instance_list["mesh"].AsInteger();
1000 if (meshAssets.Count > meshindx)
1001 {
1002 pbs.SculptEntry = true;
1003 pbs.SculptType = (byte)SculptType.Mesh;
1004 pbs.SculptTexture = meshAssets[meshindx]; // actual asset UUID after meshs suport introduction
1005 // data will be requested from asset on rez (i hope)
1006 }
1007 }
1008
1009 // faces number to pbs shape
1010 switch(face_list.Count)
1011 {
1012 case 1:
1013 case 2:
1014 pbs.ProfileCurve = (byte)ProfileCurve.Circle;
1015 pbs.PathCurve = (byte)PathCurve.Circle;
1016 break;
1017
1018 case 3:
1019 case 4:
1020 pbs.ProfileCurve = (byte)ProfileCurve.Circle;
1021 pbs.PathCurve = (byte)PathCurve.Line;
1022 break;
1023 case 5:
1024 pbs.ProfileCurve = (byte)ProfileCurve.EqualTriangle;
1025 pbs.PathCurve = (byte)PathCurve.Line;
1026 break;
1027
1028 default:
1029 pbs.ProfileCurve = (byte)ProfileCurve.Square;
1030 pbs.PathCurve = (byte)PathCurve.Line;
1031 break;
1032 }
1033
1034 Vector3 position = inner_instance_list["position"].AsVector3(); 1003 Vector3 position = inner_instance_list["position"].AsVector3();
1035 Quaternion rotation = inner_instance_list["rotation"].AsQuaternion(); 1004 Quaternion rotation = inner_instance_list["rotation"].AsQuaternion();
1036 1005
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs
index 189fa36..69fcb7d 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs
@@ -121,6 +121,9 @@ namespace OpenSim.Region.ClientStack.Linden
121 121
122 122
123 OSD r = OSDParser.DeserializeLLSDXml((string)request["requestbody"]); 123 OSD r = OSDParser.DeserializeLLSDXml((string)request["requestbody"]);
124 if (r.Type != OSDType.Map) // not a proper req
125 return responsedata;
126
124 //UUID session_id = UUID.Zero; 127 //UUID session_id = UUID.Zero;
125 bool bypass_raycast = false; 128 bool bypass_raycast = false;
126 uint everyone_mask = 0; 129 uint everyone_mask = 0;
@@ -157,9 +160,6 @@ namespace OpenSim.Region.ClientStack.Linden
157 int state = 0; 160 int state = 0;
158 int lastattach = 0; 161 int lastattach = 0;
159 162
160 if (r.Type != OSDType.Map) // not a proper req
161 return responsedata;
162
163 OSDMap rm = (OSDMap)r; 163 OSDMap rm = (OSDMap)r;
164 164
165 if (rm.ContainsKey("ObjectData")) //v2 165 if (rm.ContainsKey("ObjectData")) //v2
@@ -307,8 +307,6 @@ namespace OpenSim.Region.ClientStack.Linden
307 } 307 }
308 } 308 }
309 309
310
311
312 Vector3 pos = m_scene.GetNewRezLocation(ray_start, ray_end, ray_target_id, rotation, (bypass_raycast) ? (byte)1 : (byte)0, (ray_end_is_intersection) ? (byte)1 : (byte)0, true, scale, false); 310 Vector3 pos = m_scene.GetNewRezLocation(ray_start, ray_end, ray_target_id, rotation, (bypass_raycast) ? (byte)1 : (byte)0, (ray_end_is_intersection) ? (byte)1 : (byte)0, true, scale, false);
313 311
314 PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateBox(); 312 PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateBox();
@@ -359,6 +357,8 @@ namespace OpenSim.Region.ClientStack.Linden
359 rootpart.NextOwnerMask = next_owner_mask; 357 rootpart.NextOwnerMask = next_owner_mask;
360 rootpart.Material = (byte)material; 358 rootpart.Material = (byte)material;
361 359
360 obj.AggregatePerms();
361
362 m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor); 362 m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
363 363
364 responsedata["int_response_code"] = 200; //501; //410; //404; 364 responsedata["int_response_code"] = 200; //501; //410; //404;
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
index 6874662..116c51f 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
@@ -335,6 +335,7 @@ namespace OpenSim.Region.ClientStack.Linden
335 grp.AbsolutePosition = obj.Position; 335 grp.AbsolutePosition = obj.Position;
336 prim.RotationOffset = obj.Rotation; 336 prim.RotationOffset = obj.Rotation;
337 337
338
338 // Required for linking 339 // Required for linking
339 grp.RootPart.ClearUpdateSchedule(); 340 grp.RootPart.ClearUpdateSchedule();
340 341
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index df34668..cf96a8b 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -3950,24 +3950,68 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3950 /// <summary> 3950 /// <summary>
3951 /// Send an ObjectUpdate packet with information about an avatar 3951 /// Send an ObjectUpdate packet with information about an avatar
3952 /// </summary> 3952 /// </summary>
3953 public void SendAvatarDataImmediate(ISceneEntity avatar) 3953 public void SendEntityFullUpdateImmediate(ISceneEntity ent)
3954 { 3954 {
3955// m_log.DebugFormat( 3955// m_log.DebugFormat(
3956// "[LLCLIENTVIEW]: Sending immediate object update for avatar {0} {1} to {2} {3}", 3956// "[LLCLIENTVIEW]: Sending immediate object update for avatar {0} {1} to {2} {3}",
3957// avatar.Name, avatar.UUID, Name, AgentId); 3957// avatar.Name, avatar.UUID, Name, AgentId);
3958 3958
3959 ScenePresence presence = avatar as ScenePresence; 3959 if (ent == null)
3960 if (presence == null)
3961 return; 3960 return;
3962 3961
3963 ObjectUpdatePacket objupdate = (ObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ObjectUpdate); 3962 ObjectUpdatePacket objupdate = (ObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ObjectUpdate);
3964 objupdate.Header.Zerocoded = true; 3963 objupdate.Header.Zerocoded = true;
3965 3964
3966 objupdate.RegionData.RegionHandle = presence.RegionHandle;
3967// objupdate.RegionData.TimeDilation = ushort.MaxValue;
3968 objupdate.RegionData.TimeDilation = Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f); 3965 objupdate.RegionData.TimeDilation = Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f);
3969 objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; 3966 objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
3970 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(presence); 3967
3968 if(ent is ScenePresence)
3969 {
3970 ScenePresence presence = ent as ScenePresence;
3971 objupdate.RegionData.RegionHandle = presence.RegionHandle;
3972 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(presence);
3973 }
3974 else if(ent is SceneObjectPart)
3975 {
3976 SceneObjectPart part = ent as SceneObjectPart;
3977 objupdate.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
3978 objupdate.ObjectData[0] = CreatePrimUpdateBlock(part, (ScenePresence)SceneAgent);
3979 }
3980
3981 OutPacket(objupdate, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
3982
3983 // We need to record the avatar local id since the root prim of an attachment points to this.
3984// m_attachmentsSent.Add(avatar.LocalId);
3985 }
3986
3987 public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
3988 {
3989// m_log.DebugFormat(
3990// "[LLCLIENTVIEW]: Sending immediate object update for avatar {0} {1} to {2} {3}",
3991// avatar.Name, avatar.UUID, Name, AgentId);
3992
3993 if (ent == null)
3994 return;
3995
3996 ImprovedTerseObjectUpdatePacket objupdate =
3997 (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate);
3998 objupdate.Header.Zerocoded = true;
3999
4000 objupdate.RegionData.TimeDilation = Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f);
4001 objupdate.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
4002
4003 if(ent is ScenePresence)
4004 {
4005 ScenePresence presence = ent as ScenePresence;
4006 objupdate.RegionData.RegionHandle = presence.RegionHandle;
4007 objupdate.ObjectData[0] = CreateImprovedTerseBlock(ent, false);
4008 }
4009 else if(ent is SceneObjectPart)
4010 {
4011 SceneObjectPart part = ent as SceneObjectPart;
4012 objupdate.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
4013 objupdate.ObjectData[0] = CreateImprovedTerseBlock(ent, false);
4014 }
3971 4015
3972 OutPacket(objupdate, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority); 4016 OutPacket(objupdate, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
3973 4017
@@ -4021,7 +4065,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4021 4065
4022 #region Primitive Packet/Data Sending Methods 4066 #region Primitive Packet/Data Sending Methods
4023 4067
4024
4025 /// <summary> 4068 /// <summary>
4026 /// Generate one of the object update packets based on PrimUpdateFlags 4069 /// Generate one of the object update packets based on PrimUpdateFlags
4027 /// and broadcast the packet to clients 4070 /// and broadcast the packet to clients
@@ -4044,10 +4087,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4044*/ 4087*/
4045 if (entity is SceneObjectPart) 4088 if (entity is SceneObjectPart)
4046 { 4089 {
4047 SceneObjectPart e = (SceneObjectPart)entity; 4090 SceneObjectPart p = (SceneObjectPart)entity;
4048 SceneObjectGroup g = e.ParentGroup; 4091 SceneObjectGroup g = p.ParentGroup;
4049 if (g.HasPrivateAttachmentPoint && g.OwnerID != AgentId) 4092 if (g.HasPrivateAttachmentPoint && g.OwnerID != AgentId)
4050 return; // Don't send updates for other people's HUDs 4093 return; // Don't send updates for other people's HUDs
4094
4095 if((updateFlags ^ PrimUpdateFlags.SendInTransit) == 0)
4096 {
4097 List<uint> partIDs = (new List<uint> {p.LocalId});
4098 lock (m_entityProps.SyncRoot)
4099 m_entityProps.Remove(partIDs);
4100 lock (m_entityUpdates.SyncRoot)
4101 m_entityUpdates.Remove(partIDs);
4102 return;
4103 }
4051 } 4104 }
4052 4105
4053 //double priority = m_prioritizer.GetUpdatePriority(this, entity); 4106 //double priority = m_prioritizer.GetUpdatePriority(this, entity);
@@ -4126,14 +4179,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4126// Vector3 mycamera = Vector3.Zero; 4179// Vector3 mycamera = Vector3.Zero;
4127 Vector3 mypos = Vector3.Zero; 4180 Vector3 mypos = Vector3.Zero;
4128 ScenePresence mysp = (ScenePresence)SceneAgent; 4181 ScenePresence mysp = (ScenePresence)SceneAgent;
4129 if(mysp != null && !mysp.IsDeleted) 4182
4183 // we should have a presence
4184 if(mysp == null)
4185 return;
4186
4187 if(doCulling)
4130 { 4188 {
4131 cullingrange = mysp.DrawDistance + m_scene.ReprioritizationDistance + 16f; 4189 cullingrange = mysp.DrawDistance + m_scene.ReprioritizationDistance + 16f;
4132// mycamera = mysp.CameraPosition; 4190// mycamera = mysp.CameraPosition;
4133 mypos = mysp.AbsolutePosition; 4191 mypos = mysp.AbsolutePosition;
4134 } 4192 }
4135 else
4136 doCulling = false;
4137 4193
4138 while (maxUpdatesBytes > 0) 4194 while (maxUpdatesBytes > 0)
4139 { 4195 {
@@ -4154,9 +4210,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4154 { 4210 {
4155 SceneObjectPart part = (SceneObjectPart)update.Entity; 4211 SceneObjectPart part = (SceneObjectPart)update.Entity;
4156 SceneObjectGroup grp = part.ParentGroup; 4212 SceneObjectGroup grp = part.ParentGroup;
4157 if (grp.inTransit) 4213 if (grp.inTransit && !update.Flags.HasFlag(PrimUpdateFlags.SendInTransit))
4158 continue; 4214 continue;
4215/* debug
4216 if (update.Flags.HasFlag(PrimUpdateFlags.SendInTransit))
4217 {
4218
4159 4219
4220 }
4221*/
4160 if (grp.IsDeleted) 4222 if (grp.IsDeleted)
4161 { 4223 {
4162 // Don't send updates for objects that have been marked deleted. 4224 // Don't send updates for objects that have been marked deleted.
@@ -4213,14 +4275,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4213 { 4275 {
4214 part.Shape.LightEntry = false; 4276 part.Shape.LightEntry = false;
4215 } 4277 }
4216
4217 if (part.Shape != null && (part.Shape.SculptType == (byte)SculptType.Mesh))
4218 {
4219 // Ensure that mesh has at least 8 valid faces
4220 part.Shape.ProfileBegin = 12500;
4221 part.Shape.ProfileEnd = 0;
4222 part.Shape.ProfileHollow = 27500;
4223 }
4224 } 4278 }
4225 4279
4226 if(doCulling && !grp.IsAttachment) 4280 if(doCulling && !grp.IsAttachment)
@@ -4248,14 +4302,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4248 continue; 4302 continue;
4249 } 4303 }
4250 } 4304 }
4251
4252 if (part.Shape != null && (part.Shape.SculptType == (byte)SculptType.Mesh))
4253 {
4254 // Ensure that mesh has at least 8 valid faces
4255 part.Shape.ProfileBegin = 12500;
4256 part.Shape.ProfileEnd = 0;
4257 part.Shape.ProfileHollow = 27500;
4258 }
4259 } 4305 }
4260 else if (update.Entity is ScenePresence) 4306 else if (update.Entity is ScenePresence)
4261 { 4307 {
@@ -4330,7 +4376,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4330 if (update.Entity is ScenePresence) 4376 if (update.Entity is ScenePresence)
4331 ablock = CreateAvatarUpdateBlock((ScenePresence)update.Entity); 4377 ablock = CreateAvatarUpdateBlock((ScenePresence)update.Entity);
4332 else 4378 else
4333 ablock = CreatePrimUpdateBlock((SceneObjectPart)update.Entity, this.m_agentId); 4379 ablock = CreatePrimUpdateBlock((SceneObjectPart)update.Entity, mysp);
4334 objectUpdateBlocks.Add(ablock); 4380 objectUpdateBlocks.Add(ablock);
4335 objectUpdates.Value.Add(update); 4381 objectUpdates.Value.Add(update);
4336 maxUpdatesBytes -= ablock.Length; 4382 maxUpdatesBytes -= ablock.Length;
@@ -4462,6 +4508,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4462 } 4508 }
4463 4509
4464 // hack.. dont use 4510 // hack.. dont use
4511/*
4465 public void SendPartFullUpdate(ISceneEntity ent, uint? parentID) 4512 public void SendPartFullUpdate(ISceneEntity ent, uint? parentID)
4466 { 4513 {
4467 if (ent is SceneObjectPart) 4514 if (ent is SceneObjectPart)
@@ -4472,7 +4519,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4472 packet.RegionData.TimeDilation = Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f); 4519 packet.RegionData.TimeDilation = Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f);
4473 packet.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; 4520 packet.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
4474 4521
4475 ObjectUpdatePacket.ObjectDataBlock blk = CreatePrimUpdateBlock(part, this.m_agentId); 4522 ObjectUpdatePacket.ObjectDataBlock blk = CreatePrimUpdateBlock(part, mysp);
4476 if (parentID.HasValue) 4523 if (parentID.HasValue)
4477 { 4524 {
4478 blk.ParentID = parentID.Value; 4525 blk.ParentID = parentID.Value;
@@ -4488,7 +4535,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4488// updatesThisCall, Name, SceneAgent.IsChildAgent ? "child" : "root", Scene.Name); 4535// updatesThisCall, Name, SceneAgent.IsChildAgent ? "child" : "root", Scene.Name);
4489// 4536//
4490 } 4537 }
4491 4538*/
4492 public void ReprioritizeUpdates() 4539 public void ReprioritizeUpdates()
4493 { 4540 {
4494 lock (m_entityUpdates.SyncRoot) 4541 lock (m_entityUpdates.SyncRoot)
@@ -5726,28 +5773,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5726 return update; 5773 return update;
5727 } 5774 }
5728 5775
5729 protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(SceneObjectPart data, UUID recipientID) 5776// protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(SceneObjectPart data, UUID recipientID)
5777 protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(SceneObjectPart part, ScenePresence sp)
5730 { 5778 {
5731 byte[] objectData = new byte[60]; 5779 byte[] objectData = new byte[60];
5732 data.RelativePosition.ToBytes(objectData, 0); 5780 part.RelativePosition.ToBytes(objectData, 0);
5733 data.Velocity.ToBytes(objectData, 12); 5781 part.Velocity.ToBytes(objectData, 12);
5734 data.Acceleration.ToBytes(objectData, 24); 5782 part.Acceleration.ToBytes(objectData, 24);
5735 5783
5736 Quaternion rotation = data.RotationOffset; 5784 Quaternion rotation = part.RotationOffset;
5737 rotation.Normalize(); 5785 rotation.Normalize();
5738 rotation.ToBytes(objectData, 36); 5786 rotation.ToBytes(objectData, 36);
5739 data.AngularVelocity.ToBytes(objectData, 48); 5787 part.AngularVelocity.ToBytes(objectData, 48);
5740 5788
5741 ObjectUpdatePacket.ObjectDataBlock update = new ObjectUpdatePacket.ObjectDataBlock(); 5789 ObjectUpdatePacket.ObjectDataBlock update = new ObjectUpdatePacket.ObjectDataBlock();
5742 update.ClickAction = (byte)data.ClickAction; 5790 update.ClickAction = (byte)part.ClickAction;
5743 update.CRC = 0; 5791 update.CRC = 0;
5744 update.ExtraParams = data.Shape.ExtraParams ?? Utils.EmptyBytes; 5792 update.ExtraParams = part.Shape.ExtraParams ?? Utils.EmptyBytes;
5745 update.FullID = data.UUID; 5793 update.FullID = part.UUID;
5746 update.ID = data.LocalId; 5794 update.ID = part.LocalId;
5747 //update.JointAxisOrAnchor = Vector3.Zero; // These are deprecated 5795 //update.JointAxisOrAnchor = Vector3.Zero; // These are deprecated
5748 //update.JointPivot = Vector3.Zero; 5796 //update.JointPivot = Vector3.Zero;
5749 //update.JointType = 0; 5797 //update.JointType = 0;
5750 update.Material = data.Material; 5798 update.Material = part.Material;
5751 update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim 5799 update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim
5752/* 5800/*
5753 if (data.ParentGroup.IsAttachment) 5801 if (data.ParentGroup.IsAttachment)
@@ -5776,68 +5824,74 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5776 } 5824 }
5777*/ 5825*/
5778 5826
5779 if (data.ParentGroup.IsAttachment) 5827 if (part.ParentGroup.IsAttachment)
5780 { 5828 {
5781 if (data.IsRoot) 5829 if (part.IsRoot)
5782 { 5830 {
5783 update.NameValue = Util.StringToBytes256("AttachItemID STRING RW SV " + data.ParentGroup.FromItemID); 5831 update.NameValue = Util.StringToBytes256("AttachItemID STRING RW SV " + part.ParentGroup.FromItemID);
5784 } 5832 }
5785 else 5833 else
5786 update.NameValue = Utils.EmptyBytes; 5834 update.NameValue = Utils.EmptyBytes;
5787 5835
5788 int st = (int)data.ParentGroup.AttachmentPoint; 5836 int st = (int)part.ParentGroup.AttachmentPoint;
5789 update.State = (byte)(((st & 0xf0) >> 4) + ((st & 0x0f) << 4)); ; 5837 update.State = (byte)(((st & 0xf0) >> 4) + ((st & 0x0f) << 4)); ;
5790 } 5838 }
5791 else 5839 else
5792 { 5840 {
5793 update.NameValue = Utils.EmptyBytes; 5841 update.NameValue = Utils.EmptyBytes;
5794 update.State = data.Shape.State; // not sure about this 5842 update.State = part.Shape.State; // not sure about this
5795 } 5843 }
5796 5844
5797 5845
5798 update.ObjectData = objectData; 5846 update.ObjectData = objectData;
5799 update.ParentID = data.ParentID; 5847 update.ParentID = part.ParentID;
5800 update.PathBegin = data.Shape.PathBegin; 5848 update.PathBegin = part.Shape.PathBegin;
5801 update.PathCurve = data.Shape.PathCurve; 5849 update.PathCurve = part.Shape.PathCurve;
5802 update.PathEnd = data.Shape.PathEnd; 5850 update.PathEnd = part.Shape.PathEnd;
5803 update.PathRadiusOffset = data.Shape.PathRadiusOffset; 5851 update.PathRadiusOffset = part.Shape.PathRadiusOffset;
5804 update.PathRevolutions = data.Shape.PathRevolutions; 5852 update.PathRevolutions = part.Shape.PathRevolutions;
5805 update.PathScaleX = data.Shape.PathScaleX; 5853 update.PathScaleX = part.Shape.PathScaleX;
5806 update.PathScaleY = data.Shape.PathScaleY; 5854 update.PathScaleY = part.Shape.PathScaleY;
5807 update.PathShearX = data.Shape.PathShearX; 5855 update.PathShearX = part.Shape.PathShearX;
5808 update.PathShearY = data.Shape.PathShearY; 5856 update.PathShearY = part.Shape.PathShearY;
5809 update.PathSkew = data.Shape.PathSkew; 5857 update.PathSkew = part.Shape.PathSkew;
5810 update.PathTaperX = data.Shape.PathTaperX; 5858 update.PathTaperX = part.Shape.PathTaperX;
5811 update.PathTaperY = data.Shape.PathTaperY; 5859 update.PathTaperY = part.Shape.PathTaperY;
5812 update.PathTwist = data.Shape.PathTwist; 5860 update.PathTwist = part.Shape.PathTwist;
5813 update.PathTwistBegin = data.Shape.PathTwistBegin; 5861 update.PathTwistBegin = part.Shape.PathTwistBegin;
5814 update.PCode = data.Shape.PCode; 5862 update.PCode = part.Shape.PCode;
5815 update.ProfileBegin = data.Shape.ProfileBegin; 5863 update.ProfileBegin = part.Shape.ProfileBegin;
5816 update.ProfileCurve = data.Shape.ProfileCurve; 5864 update.ProfileCurve = part.Shape.ProfileCurve;
5817 update.ProfileEnd = data.Shape.ProfileEnd; 5865
5818 update.ProfileHollow = data.Shape.ProfileHollow; 5866 if(part.Shape.SculptType == (byte)SculptType.Mesh) // filter out hack
5819 update.PSBlock = data.ParticleSystem ?? Utils.EmptyBytes; 5867 update.ProfileCurve = (byte)(part.Shape.ProfileCurve & 0x0f);
5820 update.TextColor = data.GetTextColor().GetBytes(false); 5868 else
5821 update.TextureAnim = data.TextureAnimation ?? Utils.EmptyBytes; 5869 update.ProfileCurve = part.Shape.ProfileCurve;
5822 update.TextureEntry = data.Shape.TextureEntry ?? Utils.EmptyBytes; 5870
5823 update.Scale = data.Shape.Scale; 5871 update.ProfileEnd = part.Shape.ProfileEnd;
5824 update.Text = Util.StringToBytes256(data.Text); 5872 update.ProfileHollow = part.Shape.ProfileHollow;
5825 update.MediaURL = Util.StringToBytes256(data.MediaUrl); 5873 update.PSBlock = part.ParticleSystem ?? Utils.EmptyBytes;
5874 update.TextColor = part.GetTextColor().GetBytes(false);
5875 update.TextureAnim = part.TextureAnimation ?? Utils.EmptyBytes;
5876 update.TextureEntry = part.Shape.TextureEntry ?? Utils.EmptyBytes;
5877 update.Scale = part.Shape.Scale;
5878 update.Text = Util.StringToBytes256(part.Text);
5879 update.MediaURL = Util.StringToBytes256(part.MediaUrl);
5826 5880
5827 #region PrimFlags 5881 #region PrimFlags
5828 5882
5829 PrimFlags flags = (PrimFlags)m_scene.Permissions.GenerateClientFlags(recipientID, data.UUID); 5883 PrimFlags flags = (PrimFlags)m_scene.Permissions.GenerateClientFlags(part, sp);
5830 5884
5831 // Don't send the CreateSelected flag to everyone 5885 // Don't send the CreateSelected flag to everyone
5832 flags &= ~PrimFlags.CreateSelected; 5886 flags &= ~PrimFlags.CreateSelected;
5833 5887
5834 if (recipientID == data.OwnerID) 5888 if (sp.UUID == part.OwnerID)
5835 { 5889 {
5836 if (data.CreateSelected) 5890 if (part.CreateSelected)
5837 { 5891 {
5838 // Only send this flag once, then unset it 5892 // Only send this flag once, then unset it
5839 flags |= PrimFlags.CreateSelected; 5893 flags |= PrimFlags.CreateSelected;
5840 data.CreateSelected = false; 5894 part.CreateSelected = false;
5841 } 5895 }
5842 } 5896 }
5843 5897
@@ -5849,21 +5903,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5849 5903
5850 #endregion PrimFlags 5904 #endregion PrimFlags
5851 5905
5852 if (data.Sound != UUID.Zero) 5906 if (part.Sound != UUID.Zero)
5853 { 5907 {
5854 update.Sound = data.Sound; 5908 update.Sound = part.Sound;
5855 update.OwnerID = data.OwnerID; 5909 update.OwnerID = part.OwnerID;
5856 update.Gain = (float)data.SoundGain; 5910 update.Gain = (float)part.SoundGain;
5857 update.Radius = (float)data.SoundRadius; 5911 update.Radius = (float)part.SoundRadius;
5858 update.Flags = data.SoundFlags; 5912 update.Flags = part.SoundFlags;
5859 } 5913 }
5860 5914
5861 switch ((PCode)data.Shape.PCode) 5915 switch ((PCode)part.Shape.PCode)
5862 { 5916 {
5863 case PCode.Grass: 5917 case PCode.Grass:
5864 case PCode.Tree: 5918 case PCode.Tree:
5865 case PCode.NewTree: 5919 case PCode.NewTree:
5866 update.Data = new byte[] { data.Shape.State }; 5920 update.Data = new byte[] { part.Shape.State };
5867 break; 5921 break;
5868 default: 5922 default:
5869 update.Data = Utils.EmptyBytes; 5923 update.Data = Utils.EmptyBytes;
@@ -7753,10 +7807,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7753 7807
7754 ObjectDuplicate handlerObjectDuplicate = null; 7808 ObjectDuplicate handlerObjectDuplicate = null;
7755 7809
7756 for (int i = 0; i < dupe.ObjectData.Length; i++) 7810 handlerObjectDuplicate = OnObjectDuplicate;
7811 if (handlerObjectDuplicate != null)
7757 { 7812 {
7758 handlerObjectDuplicate = OnObjectDuplicate; 7813 for (int i = 0; i < dupe.ObjectData.Length; i++)
7759 if (handlerObjectDuplicate != null)
7760 { 7814 {
7761 UUID rezGroupID = dupe.AgentData.GroupID; 7815 UUID rezGroupID = dupe.AgentData.GroupID;
7762 if(!IsGroupMember(rezGroupID)) 7816 if(!IsGroupMember(rezGroupID))
diff --git a/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs b/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
index 2242e42..6e4a710 100644
--- a/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
+++ b/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
@@ -369,7 +369,8 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
369 else if (Cache != null) 369 else if (Cache != null)
370 { 370 {
371 string assetName = "j2kCache_" + AssetId.ToString(); 371 string assetName = "j2kCache_" + AssetId.ToString();
372 AssetBase layerDecodeAsset = Cache.Get(assetName); 372 AssetBase layerDecodeAsset;
373 Cache.Get(assetName, out layerDecodeAsset);
373 374
374 if (layerDecodeAsset != null) 375 if (layerDecodeAsset != null)
375 { 376 {
diff --git a/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs b/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs
index 23c1f03..403236c 100644
--- a/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs
@@ -260,10 +260,9 @@ namespace OpenSim.Region.CoreModules.Asset
260 /// Cache doesn't guarantee in any situation that asset is stored to it. 260 /// Cache doesn't guarantee in any situation that asset is stored to it.
261 /// </para> 261 /// </para>
262 /// </remarks> 262 /// </remarks>
263 public AssetBase Get(string id) 263 public bool Get(string id, out AssetBase assetBase)
264 { 264 {
265 m_getCount++; 265 m_getCount++;
266 AssetBase assetBase;
267 if (m_cache.TryGetValue(id, out assetBase)) 266 if (m_cache.TryGetValue(id, out assetBase))
268 m_hitCount++; 267 m_hitCount++;
269 268
@@ -284,7 +283,7 @@ namespace OpenSim.Region.CoreModules.Asset
284// if (null == assetBase) 283// if (null == assetBase)
285// m_log.DebugFormat("[CENOME ASSET CACHE]: Asset {0} not in cache", id); 284// m_log.DebugFormat("[CENOME ASSET CACHE]: Asset {0} not in cache", id);
286 285
287 return assetBase; 286 return true;
288 } 287 }
289 288
290 #endregion 289 #endregion
diff --git a/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs b/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs
index 51fc3d1..10c0e85 100644
--- a/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs
@@ -115,7 +115,10 @@ namespace OpenSim.Region.CoreModules.Asset
115 public bool Check(string id) 115 public bool Check(string id)
116 { 116 {
117 // XXX This is probably not an efficient implementation. 117 // XXX This is probably not an efficient implementation.
118 return Get(id) != null; 118 AssetBase asset;
119 if (!Get(id, out asset))
120 return false;
121 return asset != null;
119 } 122 }
120 123
121 public void Cache(AssetBase asset) 124 public void Cache(AssetBase asset)
@@ -129,9 +132,10 @@ namespace OpenSim.Region.CoreModules.Asset
129 // We don't do negative caching 132 // We don't do negative caching
130 } 133 }
131 134
132 public AssetBase Get(string id) 135 public bool Get(string id, out AssetBase asset)
133 { 136 {
134 return (AssetBase)m_Cache.Get(id); 137 asset = (AssetBase)m_Cache.Get(id);
138 return true;
135 } 139 }
136 140
137 public void Expire(string id) 141 public void Expire(string id)
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
index 187f090..610e279 100644
--- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
@@ -474,6 +474,8 @@ namespace OpenSim.Region.CoreModules.Asset
474 { 474 {
475 using (FileStream stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) 475 using (FileStream stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
476 { 476 {
477 if (stream.Length == 0) // Empty file will trigger exception below
478 return null;
477 BinaryFormatter bformatter = new BinaryFormatter(); 479 BinaryFormatter bformatter = new BinaryFormatter();
478 480
479 asset = (AssetBase)bformatter.Deserialize(stream); 481 asset = (AssetBase)bformatter.Deserialize(stream);
@@ -531,15 +533,26 @@ namespace OpenSim.Region.CoreModules.Asset
531 return found; 533 return found;
532 } 534 }
533 535
536 // For IAssetService
534 public AssetBase Get(string id) 537 public AssetBase Get(string id)
535 { 538 {
539 AssetBase asset;
540 Get(id, out asset);
541 return asset;
542 }
543
544 public bool Get(string id, out AssetBase asset)
545 {
546 asset = null;
547
536 m_Requests++; 548 m_Requests++;
537 549
538 object dummy; 550 object dummy;
539 if (m_negativeCache.TryGetValue(id, out dummy)) 551 if (m_negativeCache.TryGetValue(id, out dummy))
540 return null; 552 {
553 return false;
554 }
541 555
542 AssetBase asset = null;
543 asset = GetFromWeakReference(id); 556 asset = GetFromWeakReference(id);
544 if (asset != null && m_updateFileTimeOnCacheHit) 557 if (asset != null && m_updateFileTimeOnCacheHit)
545 { 558 {
@@ -578,13 +591,7 @@ namespace OpenSim.Region.CoreModules.Asset
578 GenerateCacheHitReport().ForEach(l => m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0}", l)); 591 GenerateCacheHitReport().ForEach(l => m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0}", l));
579 } 592 }
580 593
581 if(asset == null) 594 return true;
582 {
583
584
585 }
586
587 return asset;
588 } 595 }
589 596
590 public bool Check(string id) 597 public bool Check(string id)
@@ -599,7 +606,9 @@ namespace OpenSim.Region.CoreModules.Asset
599 606
600 public AssetBase GetCached(string id) 607 public AssetBase GetCached(string id)
601 { 608 {
602 return Get(id); 609 AssetBase asset;
610 Get(id, out asset);
611 return asset;
603 } 612 }
604 613
605 public void Expire(string id) 614 public void Expire(string id)
@@ -797,6 +806,9 @@ namespace OpenSim.Region.CoreModules.Asset
797 806
798 return; 807 return;
799 } 808 }
809 catch (UnauthorizedAccessException e)
810 {
811 }
800 finally 812 finally
801 { 813 {
802 if (stream != null) 814 if (stream != null)
@@ -1227,19 +1239,23 @@ namespace OpenSim.Region.CoreModules.Asset
1227 1239
1228 public AssetMetadata GetMetadata(string id) 1240 public AssetMetadata GetMetadata(string id)
1229 { 1241 {
1230 AssetBase asset = Get(id); 1242 AssetBase asset;
1243 Get(id, out asset);
1231 return asset.Metadata; 1244 return asset.Metadata;
1232 } 1245 }
1233 1246
1234 public byte[] GetData(string id) 1247 public byte[] GetData(string id)
1235 { 1248 {
1236 AssetBase asset = Get(id); 1249 AssetBase asset;
1250 Get(id, out asset);
1237 return asset.Data; 1251 return asset.Data;
1238 } 1252 }
1239 1253
1240 public bool Get(string id, object sender, AssetRetrieved handler) 1254 public bool Get(string id, object sender, AssetRetrieved handler)
1241 { 1255 {
1242 AssetBase asset = Get(id); 1256 AssetBase asset;
1257 if (!Get(id, out asset))
1258 return false;
1243 handler(id, sender, asset); 1259 handler(id, sender, asset);
1244 return true; 1260 return true;
1245 } 1261 }
@@ -1270,7 +1286,9 @@ namespace OpenSim.Region.CoreModules.Asset
1270 1286
1271 public bool UpdateContent(string id, byte[] data) 1287 public bool UpdateContent(string id, byte[] data)
1272 { 1288 {
1273 AssetBase asset = Get(id); 1289 AssetBase asset;
1290 if (!Get(id, out asset))
1291 return false;
1274 asset.Data = data; 1292 asset.Data = data;
1275 Cache(asset); 1293 Cache(asset);
1276 return true; 1294 return true;
diff --git a/OpenSim/Region/CoreModules/Asset/GlynnTuckerAssetCache.cs b/OpenSim/Region/CoreModules/Asset/GlynnTuckerAssetCache.cs
index 208963d..abe9b23 100644
--- a/OpenSim/Region/CoreModules/Asset/GlynnTuckerAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/GlynnTuckerAssetCache.cs
@@ -131,14 +131,15 @@ namespace OpenSim.Region.CoreModules.Asset
131 // We don't do negative caching 131 // We don't do negative caching
132 } 132 }
133 133
134 public AssetBase Get(string id) 134 public bool Get(string id, out AssetBase asset)
135 { 135 {
136 Object asset = null; 136 Object a = null;
137 m_Cache.TryGet(id, out asset); 137 m_Cache.TryGet(id, out a);
138 138
139 Debug(asset); 139 Debug(a);
140 140
141 return (AssetBase)asset; 141 asset = (AssetBase)a;
142 return true;
142 } 143 }
143 144
144 public void Expire(string id) 145 public void Expire(string id)
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 8b8ac20..cf188aa 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -481,14 +481,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
481// "[ATTACHMENTS MODULE]: Attaching object {0} {1} to {2} point {3} from ground (silent = {4})", 481// "[ATTACHMENTS MODULE]: Attaching object {0} {1} to {2} point {3} from ground (silent = {4})",
482// group.Name, group.LocalId, sp.Name, attachmentPt, silent); 482// group.Name, group.LocalId, sp.Name, attachmentPt, silent);
483 483
484 if (sp.GetAttachments().Contains(group))
485 {
486// m_log.WarnFormat(
487// "[ATTACHMENTS MODULE]: Ignoring request to attach {0} {1} to {2} on {3} since it's already attached",
488// group.Name, group.LocalId, sp.Name, AttachmentPt);
489
490 return false;
491 }
492 484
493 if (group.GetSittingAvatarsCount() != 0) 485 if (group.GetSittingAvatarsCount() != 0)
494 { 486 {
@@ -500,6 +492,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
500 return false; 492 return false;
501 } 493 }
502 494
495 List<SceneObjectGroup> attachments = sp.GetAttachments(attachmentPt);
496 if (attachments.Contains(group))
497 {
498// if (DebugLevel > 0)
499// m_log.WarnFormat(
500// "[ATTACHMENTS MODULE]: Ignoring request to attach {0} {1} to {2} on {3} since it's already attached",
501// group.Name, group.LocalId, sp.Name, attachmentPt);
502
503 return false;
504 }
505
503 Vector3 attachPos = group.AbsolutePosition; 506 Vector3 attachPos = group.AbsolutePosition;
504 507
505 // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should 508 // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should
@@ -533,7 +536,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
533 { 536 {
534 attachmentPt = (uint)group.RootPart.Shape.LastAttachPoint; 537 attachmentPt = (uint)group.RootPart.Shape.LastAttachPoint;
535 attachPos = group.RootPart.AttachedPos; 538 attachPos = group.RootPart.AttachedPos;
536 group.HasGroupChanged = true;
537 } 539 }
538 540
539 // if we still didn't find a suitable attachment point....... 541 // if we still didn't find a suitable attachment point.......
@@ -544,18 +546,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
544 attachPos = Vector3.Zero; 546 attachPos = Vector3.Zero;
545 } 547 }
546 548
547 List<SceneObjectGroup> attachments = sp.GetAttachments(attachmentPt);
548
549 if (attachments.Contains(group))
550 {
551 if (DebugLevel > 0)
552 m_log.WarnFormat(
553 "[ATTACHMENTS MODULE]: Ignoring request to attach {0} {1} to {2} on {3} since it's already attached",
554 group.Name, group.LocalId, sp.Name, attachmentPt);
555
556 return false;
557 }
558
559 // If we already have 5, remove the oldest until only 4 are left. Skip over temp ones 549 // If we already have 5, remove the oldest until only 4 are left. Skip over temp ones
560 while (attachments.Count >= 5) 550 while (attachments.Count >= 5)
561 { 551 {
@@ -579,7 +569,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
579 lock (sp.AttachmentsSyncLock) 569 lock (sp.AttachmentsSyncLock)
580 { 570 {
581 group.AttachmentPoint = attachmentPt; 571 group.AttachmentPoint = attachmentPt;
582 group.AbsolutePosition = attachPos; 572 group.RootPart.AttachedPos = attachPos;
583 573
584 if (addToInventory && sp.PresenceType != PresenceType.Npc) 574 if (addToInventory && sp.PresenceType != PresenceType.Npc)
585 UpdateUserInventoryWithAttachment(sp, group, attachmentPt, append); 575 UpdateUserInventoryWithAttachment(sp, group, attachmentPt, append);
@@ -956,7 +946,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
956 m_scene.DeleteFromStorage(so.UUID); 946 m_scene.DeleteFromStorage(so.UUID);
957 m_scene.EventManager.TriggerParcelPrimCountTainted(); 947 m_scene.EventManager.TriggerParcelPrimCountTainted();
958 948
959 so.AttachedAvatar = sp.UUID;
960 949
961 foreach (SceneObjectPart part in so.Parts) 950 foreach (SceneObjectPart part in so.Parts)
962 { 951 {
@@ -969,11 +958,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
969 } 958 }
970 } 959 }
971 960
972 so.AbsolutePosition = attachOffset;
973 so.RootPart.AttachedPos = attachOffset;
974 so.IsAttachment = true;
975 so.RootPart.SetParentLocalId(sp.LocalId); 961 so.RootPart.SetParentLocalId(sp.LocalId);
962 so.AttachedAvatar = sp.UUID;
976 so.AttachmentPoint = attachmentpoint; 963 so.AttachmentPoint = attachmentpoint;
964 so.RootPart.AttachedPos = attachOffset;
965 so.AbsolutePosition = attachOffset;
966 so.IsAttachment = true;
977 967
978 sp.AddAttachment(so); 968 sp.AddAttachment(so);
979 969
@@ -1322,7 +1312,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
1322 if (part == null) 1312 if (part == null)
1323 return; 1313 return;
1324 1314
1325 if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) 1315 SceneObjectGroup group = part.ParentGroup;
1316
1317 if (!m_scene.Permissions.CanTakeObject(group, sp))
1326 { 1318 {
1327 remoteClient.SendAgentAlertMessage( 1319 remoteClient.SendAgentAlertMessage(
1328 "You don't have sufficient permissions to attach this object", false); 1320 "You don't have sufficient permissions to attach this object", false);
@@ -1334,7 +1326,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
1334 AttachmentPt &= 0x7f; 1326 AttachmentPt &= 0x7f;
1335 1327
1336 // Calls attach with a Zero position 1328 // Calls attach with a Zero position
1337 SceneObjectGroup group = part.ParentGroup;
1338 if (AttachObject(sp, group , AttachmentPt, false, true, append)) 1329 if (AttachObject(sp, group , AttachmentPt, false, true, append))
1339 { 1330 {
1340 if (DebugLevel > 0) 1331 if (DebugLevel > 0)
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index fb408a4..535d946 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -299,7 +299,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
299 if (bakedTextureFace == null) 299 if (bakedTextureFace == null)
300 continue; 300 continue;
301 301
302 AssetBase asset = cache.Get(bakedTextureFace.TextureID.ToString()); 302 AssetBase asset;
303 cache.Get(bakedTextureFace.TextureID.ToString(), out asset);
303 304
304 if (asset != null && asset.Local) 305 if (asset != null && asset.Local)
305 { 306 {
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
index d1f6054..315ce1b 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
@@ -52,6 +52,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53 53
54 private bool enabled = true; 54 private bool enabled = true;
55 private bool m_UseNewAvnCode = false;
55 private List<Scene> m_SceneList = new List<Scene>(); 56 private List<Scene> m_SceneList = new List<Scene>();
56 private string m_RestURL = String.Empty; 57 private string m_RestURL = String.Empty;
57 IMessageTransferModule m_TransferModule = null; 58 IMessageTransferModule m_TransferModule = null;
@@ -82,6 +83,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
82 } 83 }
83 84
84 m_ForwardOfflineGroupMessages = cnf.GetBoolean("ForwardOfflineGroupMessages", m_ForwardOfflineGroupMessages); 85 m_ForwardOfflineGroupMessages = cnf.GetBoolean("ForwardOfflineGroupMessages", m_ForwardOfflineGroupMessages);
86 m_UseNewAvnCode = cnf.GetBoolean("UseNewAvnCode", m_UseNewAvnCode);
85 } 87 }
86 88
87 public void AddRegion(Scene scene) 89 public void AddRegion(Scene scene)
@@ -244,68 +246,73 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
244 return; 246 return;
245 } 247 }
246 248
247 Scene scene = FindScene(new UUID(im.fromAgentID)); 249 if(m_UseNewAvnCode)
248 if (scene == null) 250 {
249 scene = m_SceneList[0]; 251 Scene scene = FindScene(new UUID(im.fromAgentID));
252 if (scene == null)
253 scene = m_SceneList[0];
250 254
251// Avination new code 255 UUID scopeID = scene.RegionInfo.ScopeID;
252// SendReply reply = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, SendReply>( 256 SendReply reply = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, SendReply>(
253// "POST", m_RestURL+"/SaveMessage/?scope=" + 257 "POST", m_RestURL+"/SaveMessage/?scope=" + scopeID.ToString(), im, 20000);
254// scene.RegionInfo.ScopeID.ToString(), im);
255 258
256// current opensim and osgrid compatible 259 if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
257 bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>( 260 {
258 "POST", m_RestURL+"/SaveMessage/", im, 10000); 261 IClientAPI client = FindClient(new UUID(im.fromAgentID));
259// current opensim and osgrid compatible end 262 if (client == null)
263 return;
260 264
261 if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent) 265 if (string.IsNullOrEmpty(reply.Message))
262 { 266 reply.Message = "User is not logged in. " + (reply.Success ? "Message saved." : "Message not saved");
263 IClientAPI client = FindClient(new UUID(im.fromAgentID));
264 if (client == null)
265 return;
266/* Avination new code
267 if (reply.Message == String.Empty)
268 reply.Message = "User is not logged in. " + (reply.Success ? "Message saved." : "Message not saved");
269 267
270 bool sendReply = true; 268 bool sendReply = true;
271 269
272 switch (reply.Disposition) 270 switch (reply.Disposition)
273 {
274 case 0: // Normal
275 break;
276 case 1: // Only once per user
277 if (m_repliesSent.ContainsKey(client) && m_repliesSent[client].Contains(new UUID(im.toAgentID)))
278 { 271 {
279 sendReply = false; 272 case 0: // Normal
273 break;
274 case 1: // Only once per user
275 if (m_repliesSent.ContainsKey(client) && m_repliesSent[client].Contains(new UUID(im.toAgentID)))
276 sendReply = false;
277 else
278 {
279 if (!m_repliesSent.ContainsKey(client))
280 m_repliesSent[client] = new List<UUID>();
281 m_repliesSent[client].Add(new UUID(im.toAgentID));
282 }
283 break;
280 } 284 }
281 else 285
286 if (sendReply)
282 { 287 {
283 if (!m_repliesSent.ContainsKey(client)) 288 client.SendInstantMessage(new GridInstantMessage(
284 m_repliesSent[client] = new List<UUID>(); 289 null, new UUID(im.toAgentID),
285 m_repliesSent[client].Add(new UUID(im.toAgentID)); 290 "System", new UUID(im.fromAgentID),
291 (byte)InstantMessageDialog.MessageFromAgent,
292 reply.Message,
293 false, new Vector3()));
286 } 294 }
287 break;
288 } 295 }
296 }
297 else
298 {
299 bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>(
300 "POST", m_RestURL+"/SaveMessage/", im, 20000);
289 301
290 if (sendReply) 302 if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
291 { 303 {
304 IClientAPI client = FindClient(new UUID(im.fromAgentID));
305 if (client == null)
306 return;
307
292 client.SendInstantMessage(new GridInstantMessage( 308 client.SendInstantMessage(new GridInstantMessage(
293 null, new UUID(im.toAgentID),
294 "System", new UUID(im.fromAgentID),
295 (byte)InstantMessageDialog.MessageFromAgent,
296 reply.Message,
297 false, new Vector3()));
298 }
299*/
300// current opensim and osgrid compatible
301 client.SendInstantMessage(new GridInstantMessage(
302 null, new UUID(im.toAgentID), 309 null, new UUID(im.toAgentID),
303 "System", new UUID(im.fromAgentID), 310 "System", new UUID(im.fromAgentID),
304 (byte)InstantMessageDialog.MessageFromAgent, 311 (byte)InstantMessageDialog.MessageFromAgent,
305 "User is not logged in. "+ 312 "User is not logged in. "+
306 (success ? "Message saved." : "Message not saved"), 313 (success ? "Message saved." : "Message not saved"),
307 false, new Vector3())); 314 false, new Vector3()));
308// current opensim and osgrid compatible end 315 }
309 } 316 }
310 } 317 }
311 } 318 }
diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
index bc8aeca..89e3020 100644
--- a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs
@@ -149,7 +149,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
149 149
150 if (profileConfig == null) 150 if (profileConfig == null)
151 { 151 {
152 m_log.Debug("[PROFILES]: UserProfiles disabled, no configuration"); 152 //m_log.Debug("[PROFILES]: UserProfiles disabled, no configuration");
153 Enabled = false; 153 Enabled = false;
154 return; 154 return;
155 } 155 }
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 6dc982b..87b76dc 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1703,11 +1703,81 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1703 return agent; 1703 return agent;
1704 } 1704 }
1705 1705
1706 public bool CrossAgentCreateFarChild(ScenePresence agent, GridRegion neighbourRegion, Vector3 pos, EntityTransferContext ctx)
1707 {
1708 ulong regionhandler = neighbourRegion.RegionHandle;
1709
1710 if(agent.knowsNeighbourRegion(regionhandler))
1711 return true;
1712
1713 string reason;
1714 ulong currentRegionHandler = agent.Scene.RegionInfo.RegionHandle;
1715 GridRegion source = new GridRegion(agent.Scene.RegionInfo);
1716
1717 AgentCircuitData currentAgentCircuit =
1718 agent.Scene.AuthenticateHandler.GetAgentCircuitData(agent.ControllingClient.CircuitCode);
1719 AgentCircuitData agentCircuit = agent.ControllingClient.RequestClientInfo();
1720 agentCircuit.startpos = pos;
1721 agentCircuit.child = true;
1722
1723 agentCircuit.Appearance = new AvatarAppearance();
1724 agentCircuit.Appearance.AvatarHeight = agent.Appearance.AvatarHeight;
1725
1726 if (currentAgentCircuit != null)
1727 {
1728 agentCircuit.ServiceURLs = currentAgentCircuit.ServiceURLs;
1729 agentCircuit.IPAddress = currentAgentCircuit.IPAddress;
1730 agentCircuit.Viewer = currentAgentCircuit.Viewer;
1731 agentCircuit.Channel = currentAgentCircuit.Channel;
1732 agentCircuit.Mac = currentAgentCircuit.Mac;
1733 agentCircuit.Id0 = currentAgentCircuit.Id0;
1734 }
1735
1736 agentCircuit.CapsPath = CapsUtil.GetRandomCapsObjectPath();
1737 agent.AddNeighbourRegion(neighbourRegion, agentCircuit.CapsPath);
1738
1739 IPEndPoint endPoint = neighbourRegion.ExternalEndPoint;
1740 if (Scene.SimulationService.CreateAgent(source, neighbourRegion, agentCircuit, (int)TeleportFlags.Default, ctx, out reason))
1741 {
1742 string capsPath = neighbourRegion.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
1743 int newSizeX = neighbourRegion.RegionSizeX;
1744 int newSizeY = neighbourRegion.RegionSizeY;
1745
1746 if (m_eqModule != null)
1747 {
1748 #region IP Translation for NAT
1749 IClientIPEndpoint ipepClient;
1750 if (agent.ClientView.TryGet(out ipepClient))
1751 endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address);
1752
1753 m_log.DebugFormat("{0} {1} is sending {2} EnableSimulator for neighbour region {3}(loc=<{4},{5}>,siz=<{6},{7}>) " +
1754 "and EstablishAgentCommunication with seed cap {8}", LogHeader,
1755 source.RegionName, agent.Name,
1756 neighbourRegion.RegionName, neighbourRegion.RegionLocX, neighbourRegion.RegionLocY, newSizeX, newSizeY , capsPath);
1757
1758 m_eqModule.EnableSimulator(regionhandler,
1759 endPoint, agent.UUID, newSizeX, newSizeY);
1760 m_eqModule.EstablishAgentCommunication(agent.UUID, endPoint, capsPath,
1761 regionhandler, newSizeX, newSizeY);
1762 }
1763 else
1764 {
1765 agent.ControllingClient.InformClientOfNeighbour(regionhandler, endPoint);
1766 }
1767 return true;
1768 }
1769 agent.RemoveNeighbourRegion(regionhandler);
1770 return false;
1771 }
1772
1706 public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying, EntityTransferContext ctx) 1773 public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying, EntityTransferContext ctx)
1707 { 1774 {
1708 int ts = Util.EnvironmentTickCount(); 1775 int ts = Util.EnvironmentTickCount();
1776 bool sucess = true;
1777 string reason = String.Empty;
1709 try 1778 try
1710 { 1779 {
1780
1711 AgentData cAgent = new AgentData(); 1781 AgentData cAgent = new AgentData();
1712 agent.CopyTo(cAgent,true); 1782 agent.CopyTo(cAgent,true);
1713 1783
@@ -1725,18 +1795,26 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1725 // Beyond this point, extra cleanup is needed beyond removing transit state 1795 // Beyond this point, extra cleanup is needed beyond removing transit state
1726 m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.Transferring); 1796 m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.Transferring);
1727 1797
1728 if (!agent.Scene.SimulationService.UpdateAgent(neighbourRegion, cAgent, ctx)) 1798 if (sucess && !agent.Scene.SimulationService.UpdateAgent(neighbourRegion, cAgent, ctx))
1799 {
1800 sucess = false;
1801 reason = "agent update failed";
1802 }
1803
1804 if(!sucess)
1729 { 1805 {
1730 // region doesn't take it 1806 // region doesn't take it
1731 m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.CleaningUp); 1807 m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.CleaningUp);
1732 1808
1733 m_log.WarnFormat( 1809 m_log.WarnFormat(
1734 "[ENTITY TRANSFER MODULE]: Region {0} would not accept update for agent {1} on cross attempt. Returning to original region.", 1810 "[ENTITY TRANSFER MODULE]: agent {0} crossing to {1} failed: {2}",
1735 neighbourRegion.RegionName, agent.Name); 1811 agent.Name, neighbourRegion.RegionName, reason);
1736 1812
1737 ReInstantiateScripts(agent); 1813 ReInstantiateScripts(agent);
1738 if(agent.ParentID == 0 && agent.ParentUUID == UUID.Zero) 1814 if(agent.ParentID == 0 && agent.ParentUUID == UUID.Zero)
1815 {
1739 agent.AddToPhysicalScene(isFlying); 1816 agent.AddToPhysicalScene(isFlying);
1817 }
1740 1818
1741 return false; 1819 return false;
1742 } 1820 }
@@ -1777,7 +1855,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1777 1855
1778 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, agent.UUID); 1856 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, agent.UUID);
1779 1857
1780 Vector3 vel2 = new Vector3(agent.Velocity.X, agent.Velocity.Y, 0); 1858 Vector3 vel2 = Vector3.Zero;
1859 if((agent.crossingFlags & 2) != 0)
1860 vel2 = new Vector3(agent.Velocity.X, agent.Velocity.Y, 0);
1781 1861
1782 if (m_eqModule != null) 1862 if (m_eqModule != null)
1783 { 1863 {
@@ -1804,7 +1884,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1804 1884
1805 // this may need the attachments 1885 // this may need the attachments
1806 1886
1807 agent.HasMovedAway(true); 1887 agent.HasMovedAway((agent.crossingFlags & 8) == 0);
1808 1888
1809 agent.MakeChildAgent(neighbourRegion.RegionHandle); 1889 agent.MakeChildAgent(neighbourRegion.RegionHandle);
1810 1890
@@ -2135,7 +2215,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2135 sp.Scene.RegionInfo.WorldLocY - neighbour.RegionLocY, 2215 sp.Scene.RegionInfo.WorldLocY - neighbour.RegionLocY,
2136 0f); 2216 0f);
2137 } 2217 }
2138 2218 #endregion
2139 2219
2140 #region NotFoundLocationCache class 2220 #region NotFoundLocationCache class
2141 // A collection of not found locations to make future lookups 'not found' lookups quick. 2221 // A collection of not found locations to make future lookups 'not found' lookups quick.
@@ -2620,7 +2700,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2620 { 2700 {
2621 // FIXME: It would be better to never add the scene object at all rather than add it and then delete 2701 // FIXME: It would be better to never add the scene object at all rather than add it and then delete
2622 // it 2702 // it
2623 if (!Scene.Permissions.CanObjectEntry(so.UUID, true, so.AbsolutePosition)) 2703 if (!Scene.Permissions.CanObjectEntry(so, true, so.AbsolutePosition))
2624 { 2704 {
2625 // Deny non attachments based on parcel settings 2705 // Deny non attachments based on parcel settings
2626 // 2706 //
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
index 95e7456..ba3a7c9 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
@@ -541,16 +541,17 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
541 541
542 #region Permissions 542 #region Permissions
543 543
544 private bool CanTakeObject(UUID objectID, UUID stealer, Scene scene) 544 private bool CanTakeObject(SceneObjectGroup sog, ScenePresence sp)
545 { 545 {
546 if (m_bypassPermissions) return true; 546 if (m_bypassPermissions) return true;
547 547
548 if (!m_OutboundPermission && !UserManagementModule.IsLocalGridUser(stealer)) 548 if(sp == null || sog == null)
549 return false;
550
551 if (!m_OutboundPermission && !UserManagementModule.IsLocalGridUser(sp.UUID))
549 { 552 {
550 SceneObjectGroup sog = null; 553 if (sog.OwnerID == sp.UUID)
551 if (m_Scene.TryGetSceneObjectGroup(objectID, out sog) && sog.OwnerID == stealer)
552 return true; 554 return true;
553
554 return false; 555 return false;
555 } 556 }
556 557
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 0104823..67c847b 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -427,20 +427,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
427 originalRotations[objectGroup.UUID] = inventoryStoredRotation; 427 originalRotations[objectGroup.UUID] = inventoryStoredRotation;
428 428
429 // Restore attachment data after trip through the sim 429 // Restore attachment data after trip through the sim
430 if (objectGroup.RootPart.AttachPoint > 0) 430 if (objectGroup.AttachmentPoint > 0)
431 { 431 {
432 inventoryStoredPosition = objectGroup.RootPart.AttachedPos; 432 inventoryStoredPosition = objectGroup.RootPart.AttachedPos;
433 inventoryStoredRotation = objectGroup.RootPart.AttachRotation; 433 inventoryStoredRotation = objectGroup.RootPart.AttachRotation;
434 } 434 if (objectGroup.RootPart.Shape.PCode != (byte) PCode.Tree &&
435 objectGroup.RootPart.Shape.PCode != (byte) PCode.NewTree)
436 objectGroup.RootPart.Shape.LastAttachPoint = (byte)objectGroup.AttachmentPoint;
435 437
436 // Trees could be attached and it's been done, but it makes
437 // no sense. State must be preserved because it's the tree type
438 if (objectGroup.RootPart.Shape.PCode != (byte) PCode.Tree &&
439 objectGroup.RootPart.Shape.PCode != (byte) PCode.NewTree)
440 {
441 objectGroup.RootPart.Shape.State = objectGroup.RootPart.AttachPoint;
442 if (objectGroup.RootPart.AttachPoint > 0)
443 objectGroup.RootPart.Shape.LastAttachPoint = objectGroup.RootPart.AttachPoint;
444 } 438 }
445 439
446 objectGroup.AbsolutePosition = inventoryStoredPosition; 440 objectGroup.AbsolutePosition = inventoryStoredPosition;
@@ -605,15 +599,18 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
605 perms &= ~(uint)PermissionMask.Transfer; 599 perms &= ~(uint)PermissionMask.Transfer;
606 if ((nextPerms & (uint)PermissionMask.Modify) == 0) 600 if ((nextPerms & (uint)PermissionMask.Modify) == 0)
607 perms &= ~(uint)PermissionMask.Modify; 601 perms &= ~(uint)PermissionMask.Modify;
608 602
609 item.BasePermissions = perms & so.RootPart.NextOwnerMask; 603// item.BasePermissions = perms & so.RootPart.NextOwnerMask;
604
605 uint nextp = so.RootPart.NextOwnerMask | (uint)PermissionMask.FoldedMask;
606 item.BasePermissions = perms & nextp;
610 item.CurrentPermissions = item.BasePermissions; 607 item.CurrentPermissions = item.BasePermissions;
611 item.NextPermissions = perms & so.RootPart.NextOwnerMask; 608 item.NextPermissions = perms & so.RootPart.NextOwnerMask;
612 item.EveryOnePermissions = so.RootPart.EveryoneMask & so.RootPart.NextOwnerMask; 609 item.EveryOnePermissions = so.RootPart.EveryoneMask & so.RootPart.NextOwnerMask;
613 item.GroupPermissions = so.RootPart.GroupMask & so.RootPart.NextOwnerMask; 610 item.GroupPermissions = so.RootPart.GroupMask & so.RootPart.NextOwnerMask;
614 611
615 // apply next owner perms on rez 612 // apply next owner perms on rez
616 item.CurrentPermissions |= SceneObjectGroup.SLAM; 613 item.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm;
617 } 614 }
618 else 615 else
619 { 616 {
@@ -1124,7 +1121,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
1124// rootPart.OwnerID, item.Owner, item.CurrentPermissions); 1121// rootPart.OwnerID, item.Owner, item.CurrentPermissions);
1125 1122
1126 if ((rootPart.OwnerID != item.Owner) || 1123 if ((rootPart.OwnerID != item.Owner) ||
1127 (item.CurrentPermissions & 16) != 0 || 1124 (item.CurrentPermissions & (uint)PermissionMask.Slam) != 0 ||
1128 (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0) 1125 (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0)
1129 { 1126 {
1130 //Need to kill the for sale here 1127 //Need to kill the for sale here
@@ -1136,32 +1133,48 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
1136 foreach (SceneObjectPart part in so.Parts) 1133 foreach (SceneObjectPart part in so.Parts)
1137 { 1134 {
1138 part.GroupMask = 0; // DO NOT propagate here 1135 part.GroupMask = 0; // DO NOT propagate here
1139 1136 if( part.OwnerID != part.GroupID)
1140 part.LastOwnerID = part.OwnerID; 1137 part.LastOwnerID = part.OwnerID;
1141 part.OwnerID = item.Owner; 1138 part.OwnerID = item.Owner;
1142 part.RezzerID = item.Owner; 1139 part.RezzerID = item.Owner;
1143 part.Inventory.ChangeInventoryOwner(item.Owner); 1140 part.Inventory.ChangeInventoryOwner(item.Owner);
1144 1141
1145 // This applies the base mask from the item as the next 1142 // Reconstruct the original item's base permissions. They
1146 // permissions for the object. This is correct because the 1143 // can be found in the lower (folded) bits.
1147 // giver's base mask was masked by the giver's next owner 1144 if ((item.BasePermissions & (uint)PermissionMask.FoldedMask) != 0)
1148 // mask, so the base mask equals the original next owner mask. 1145 {
1149 part.NextOwnerMask = item.BasePermissions; 1146 // We have permissions stored there so use them
1147 part.NextOwnerMask = ((item.BasePermissions & 7) << 13);
1148 if ((item.BasePermissions & (uint)PermissionMask.FoldedExport) != 0)
1149 part.NextOwnerMask |= (uint)PermissionMask.Export;
1150 part.NextOwnerMask |= (uint)PermissionMask.Move;
1151 }
1152 else
1153 {
1154 // This is a legacy object and we can't avoid the issues that
1155 // caused perms loss or escalation before, treat it the legacy
1156 // way.
1157 part.NextOwnerMask = item.NextPermissions;
1158 }
1150 } 1159 }
1151 1160
1152 so.ApplyNextOwnerPermissions(); 1161 so.ApplyNextOwnerPermissions();
1153 1162
1154 // In case the user has changed flags on a received item 1163 // In case the user has changed flags on a received item
1155 // we have to apply those changes after the slam. Else we 1164 // we have to apply those changes after the slam. Else we
1156 // get a net loss of permissions 1165 // get a net loss of permissions.
1166 // On legacy objects, this opts for a loss of permissions rather
1167 // than the previous handling that allowed escalation.
1157 foreach (SceneObjectPart part in so.Parts) 1168 foreach (SceneObjectPart part in so.Parts)
1158 { 1169 {
1159 if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0) 1170 if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0)
1160 { 1171 {
1172 part.GroupMask = item.GroupPermissions & part.BaseMask;
1161 part.EveryoneMask = item.EveryOnePermissions & part.BaseMask; 1173 part.EveryoneMask = item.EveryOnePermissions & part.BaseMask;
1162 part.NextOwnerMask = item.NextPermissions & part.BaseMask; 1174 part.NextOwnerMask = item.NextPermissions & part.BaseMask;
1163 } 1175 }
1164 } 1176 }
1177
1165 } 1178 }
1166 } 1179 }
1167 else 1180 else
@@ -1180,6 +1193,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
1180 } 1193 }
1181 1194
1182 rootPart.TrimPermissions(); 1195 rootPart.TrimPermissions();
1196 so.AggregateDeepPerms();
1183 1197
1184 if (isAttachment) 1198 if (isAttachment)
1185 so.FromItemID = item.ID; 1199 so.FromItemID = item.ID;
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 51f973a..32cb5a3 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -957,9 +957,14 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
957 957
958 public virtual bool IsLocalGridUser(UUID uuid) 958 public virtual bool IsLocalGridUser(UUID uuid)
959 { 959 {
960 UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, uuid); 960 lock (m_Scenes)
961 if (account == null || (account != null && !account.LocalToGrid)) 961 {
962 return false; 962 if (m_Scenes.Count == 0)
963 return true;
964 UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, uuid);
965 if (account == null || (account != null && !account.LocalToGrid))
966 return false;
967 }
963 968
964 return true; 969 return true;
965 } 970 }
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
index 3f332fa..290daa9 100644
--- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
@@ -83,17 +83,17 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
83 LogManager.GetLogger( 83 LogManager.GetLogger(
84 MethodBase.GetCurrentMethod().DeclaringType); 84 MethodBase.GetCurrentMethod().DeclaringType);
85 85
86 private Dictionary<UUID, UrlData> m_RequestMap = 86 protected Dictionary<UUID, UrlData> m_RequestMap =
87 new Dictionary<UUID, UrlData>(); 87 new Dictionary<UUID, UrlData>();
88 88
89 private Dictionary<string, UrlData> m_UrlMap = 89 protected Dictionary<string, UrlData> m_UrlMap =
90 new Dictionary<string, UrlData>(); 90 new Dictionary<string, UrlData>();
91 91
92 private uint m_HttpsPort = 0; 92 protected uint m_HttpsPort = 0;
93 private IHttpServer m_HttpServer = null; 93 protected IHttpServer m_HttpServer = null;
94 private IHttpServer m_HttpsServer = null; 94 protected IHttpServer m_HttpsServer = null;
95 95
96 public string ExternalHostNameForLSL { get; private set; } 96 public string ExternalHostNameForLSL { get; protected set; }
97 97
98 /// <summary> 98 /// <summary>
99 /// The default maximum number of urls 99 /// The default maximum number of urls
@@ -107,7 +107,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
107 107
108 public Type ReplaceableInterface 108 public Type ReplaceableInterface
109 { 109 {
110 get { return null; } 110 get { return typeof(IUrlModule); }
111 } 111 }
112 112
113 public string Name 113 public string Name
@@ -453,7 +453,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
453 } 453 }
454 454
455 455
456 private void RemoveUrl(UrlData data) 456 protected void RemoveUrl(UrlData data)
457 { 457 {
458 if (data.isSsl) 458 if (data.isSsl)
459 m_HttpsServer.RemoveHTTPHandler("", "/lslhttps/"+data.urlcode.ToString()+"/"); 459 m_HttpsServer.RemoveHTTPHandler("", "/lslhttps/"+data.urlcode.ToString()+"/");
@@ -461,7 +461,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
461 m_HttpServer.RemoveHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/"); 461 m_HttpServer.RemoveHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/");
462 } 462 }
463 463
464 private Hashtable NoEvents(UUID requestID, UUID sessionID) 464 protected Hashtable NoEvents(UUID requestID, UUID sessionID)
465 { 465 {
466 Hashtable response = new Hashtable(); 466 Hashtable response = new Hashtable();
467 UrlData url; 467 UrlData url;
@@ -499,7 +499,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
499 return response; 499 return response;
500 } 500 }
501 501
502 private bool HasEvents(UUID requestID, UUID sessionID) 502 protected bool HasEvents(UUID requestID, UUID sessionID)
503 { 503 {
504 UrlData url=null; 504 UrlData url=null;
505 505
@@ -531,7 +531,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
531 } 531 }
532 } 532 }
533 533
534 private void Drop(UUID requestID, UUID sessionID) 534 protected void Drop(UUID requestID, UUID sessionID)
535 { 535 {
536 UrlData url = null; 536 UrlData url = null;
537 lock (m_RequestMap) 537 lock (m_RequestMap)
@@ -552,7 +552,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
552 } 552 }
553 } 553 }
554 554
555 private Hashtable GetEvents(UUID requestID, UUID sessionID) 555 protected Hashtable GetEvents(UUID requestID, UUID sessionID)
556 { 556 {
557 UrlData url = null; 557 UrlData url = null;
558 RequestData requestData = null; 558 RequestData requestData = null;
@@ -757,7 +757,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
757 } 757 }
758 } 758 }
759 759
760 private void OnScriptReset(uint localID, UUID itemID) 760 protected void OnScriptReset(uint localID, UUID itemID)
761 { 761 {
762 ScriptRemoved(itemID); 762 ScriptRemoved(itemID);
763 } 763 }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
index 9e75ee2..2e6f472 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/UserProfiles/LocalUserProfilesServiceConnector.cs
@@ -85,12 +85,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Profile
85 85
86 public LocalUserProfilesServicesConnector() 86 public LocalUserProfilesServicesConnector()
87 { 87 {
88 m_log.Debug("[LOCAL USERPROFILES SERVICE CONNECTOR]: LocalUserProfileServicesConnector no params"); 88 //m_log.Debug("[LOCAL USERPROFILES SERVICE CONNECTOR]: LocalUserProfileServicesConnector no params");
89 } 89 }
90 90
91 public LocalUserProfilesServicesConnector(IConfigSource source) 91 public LocalUserProfilesServicesConnector(IConfigSource source)
92 { 92 {
93 m_log.Debug("[LOCAL USERPROFILES SERVICE CONNECTOR]: LocalUserProfileServicesConnector instantiated directly."); 93 //m_log.Debug("[LOCAL USERPROFILES SERVICE CONNECTOR]: LocalUserProfileServicesConnector instantiated directly.");
94 InitialiseService(source); 94 InitialiseService(source);
95 } 95 }
96 96
@@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Profile
104 IConfig config = source.Configs[ConfigName]; 104 IConfig config = source.Configs[ConfigName];
105 if (config == null) 105 if (config == null)
106 { 106 {
107 m_log.Error("[LOCAL USERPROFILES SERVICE CONNECTOR]: UserProfilesService missing from OpenSim.ini"); 107 //m_log.Error("[LOCAL USERPROFILES SERVICE CONNECTOR]: UserProfilesService missing from OpenSim.ini");
108 return; 108 return;
109 } 109 }
110 110
@@ -225,4 +225,4 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Profile
225 } 225 }
226 #endregion 226 #endregion
227 } 227 }
228} \ No newline at end of file 228}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
index f5aa971..92ae36f 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
@@ -209,7 +209,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
209 209
210 if (m_Cache != null) 210 if (m_Cache != null)
211 { 211 {
212 asset = m_Cache.Get(id); 212 if (!m_Cache.Get(id, out asset))
213 return null;
213 214
214 if (asset != null) 215 if (asset != null)
215 return asset; 216 return asset;
@@ -238,10 +239,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
238 239
239 public AssetBase GetCached(string id) 240 public AssetBase GetCached(string id)
240 { 241 {
242 AssetBase asset = null;
241 if (m_Cache != null) 243 if (m_Cache != null)
242 return m_Cache.Get(id); 244 m_Cache.Get(id, out asset);
243 245
244 return null; 246 return asset;
245 } 247 }
246 248
247 public AssetMetadata GetMetadata(string id) 249 public AssetMetadata GetMetadata(string id)
@@ -250,8 +252,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
250 252
251 if (m_Cache != null) 253 if (m_Cache != null)
252 { 254 {
253 if (m_Cache != null) 255 if (!m_Cache.Get(id, out asset))
254 m_Cache.Get(id); 256 return null;
255 257
256 if (asset != null) 258 if (asset != null)
257 return asset.Metadata; 259 return asset.Metadata;
@@ -273,8 +275,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
273 275
274 if (m_Cache != null) 276 if (m_Cache != null)
275 { 277 {
276 if (m_Cache != null) 278 if (!m_Cache.Get(id, out asset))
277 m_Cache.Get(id); 279 return null;
278 280
279 if (asset != null) 281 if (asset != null)
280 return asset.Data; 282 return asset.Data;
@@ -292,7 +294,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
292 AssetBase asset = null; 294 AssetBase asset = null;
293 295
294 if (m_Cache != null) 296 if (m_Cache != null)
295 asset = m_Cache.Get(id); 297 {
298 if (!m_Cache.Get(id, out asset))
299 return false;
300 }
296 301
297 if (asset != null) 302 if (asset != null)
298 { 303 {
@@ -382,7 +387,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
382 AssetBase asset = null; 387 AssetBase asset = null;
383 388
384 if (m_Cache != null) 389 if (m_Cache != null)
385 asset = m_Cache.Get(id); 390 m_Cache.Get(id, out asset);
386 391
387 if (asset != null) 392 if (asset != null)
388 { 393 {
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs
index 7190aa0..37a48bb 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs
@@ -158,7 +158,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
158 158
159 AssetBase asset = null; 159 AssetBase asset = null;
160 if (m_Cache != null) 160 if (m_Cache != null)
161 asset = m_Cache.Get(id); 161 {
162 if (!m_Cache.Get(id, out asset))
163 return null;
164 }
162 165
163 if (asset == null) 166 if (asset == null)
164 { 167 {
@@ -177,17 +180,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
177 { 180 {
178// m_log.DebugFormat("[LOCAL ASSET SERVICES CONNECTOR]: Cache request for {0}", id); 181// m_log.DebugFormat("[LOCAL ASSET SERVICES CONNECTOR]: Cache request for {0}", id);
179 182
183 AssetBase asset = null;
180 if (m_Cache != null) 184 if (m_Cache != null)
181 return m_Cache.Get(id); 185 m_Cache.Get(id, out asset);
182 186
183 return null; 187 return asset;
184 } 188 }
185 189
186 public AssetMetadata GetMetadata(string id) 190 public AssetMetadata GetMetadata(string id)
187 { 191 {
188 AssetBase asset = null; 192 AssetBase asset = null;
189 if (m_Cache != null) 193 if (m_Cache != null)
190 asset = m_Cache.Get(id); 194 {
195 if (!m_Cache.Get(id, out asset))
196 return null;
197 }
191 198
192 if (asset != null) 199 if (asset != null)
193 return asset.Metadata; 200 return asset.Metadata;
@@ -210,7 +217,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
210 AssetBase asset = null; 217 AssetBase asset = null;
211 218
212 if (m_Cache != null) 219 if (m_Cache != null)
213 asset = m_Cache.Get(id); 220 {
221 if (!m_Cache.Get(id, out asset))
222 return null;
223 }
214 224
215 if (asset != null) 225 if (asset != null)
216 return asset.Data; 226 return asset.Data;
@@ -232,7 +242,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
232 242
233 if (m_Cache != null) 243 if (m_Cache != null)
234 { 244 {
235 AssetBase asset = m_Cache.Get(id); 245 AssetBase asset;
246 if (!m_Cache.Get(id, out asset))
247 return false;
236 248
237 if (asset != null) 249 if (asset != null)
238 { 250 {
@@ -287,7 +299,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
287 { 299 {
288 AssetBase asset = null; 300 AssetBase asset = null;
289 if (m_Cache != null) 301 if (m_Cache != null)
290 m_Cache.Get(id); 302 m_Cache.Get(id, out asset);
291 if (asset != null) 303 if (asset != null)
292 { 304 {
293 asset.Data = data; 305 asset.Data = data;
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 5d12f8b..53b9796 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -149,9 +149,11 @@ namespace OpenSim.Region.CoreModules.World.Land
149 parcelInfoCache.Size = 30; // the number of different parcel requests in this region to cache 149 parcelInfoCache.Size = 30; // the number of different parcel requests in this region to cache
150 parcelInfoCache.DefaultTTL = new TimeSpan(0, 5, 0); 150 parcelInfoCache.DefaultTTL = new TimeSpan(0, 5, 0);
151 151
152 m_scene.EventManager.OnObjectAddedToScene += EventManagerOnParcelPrimCountAdd;
152 m_scene.EventManager.OnParcelPrimCountAdd += EventManagerOnParcelPrimCountAdd; 153 m_scene.EventManager.OnParcelPrimCountAdd += EventManagerOnParcelPrimCountAdd;
153 m_scene.EventManager.OnParcelPrimCountUpdate += EventManagerOnParcelPrimCountUpdate; 154
154 m_scene.EventManager.OnObjectBeingRemovedFromScene += EventManagerOnObjectBeingRemovedFromScene; 155 m_scene.EventManager.OnObjectBeingRemovedFromScene += EventManagerOnObjectBeingRemovedFromScene;
156 m_scene.EventManager.OnParcelPrimCountUpdate += EventManagerOnParcelPrimCountUpdate;
155 m_scene.EventManager.OnRequestParcelPrimCountUpdate += EventManagerOnRequestParcelPrimCountUpdate; 157 m_scene.EventManager.OnRequestParcelPrimCountUpdate += EventManagerOnRequestParcelPrimCountUpdate;
156 158
157 m_scene.EventManager.OnAvatarEnteringNewParcel += EventManagerOnAvatarEnteringNewParcel; 159 m_scene.EventManager.OnAvatarEnteringNewParcel += EventManagerOnAvatarEnteringNewParcel;
@@ -287,8 +289,10 @@ namespace OpenSim.Region.CoreModules.World.Land
287 289
288 fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, 290 fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0,
289 (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY)); 291 (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY));
290 fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; 292 LandData ldata = fullSimParcel.LandData;
291 fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch(); 293 ldata.SimwideArea = ldata.Area;
294 ldata.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
295 ldata.ClaimDate = Util.UnixTimeSinceEpoch();
292 296
293 return AddLandObject(fullSimParcel); 297 return AddLandObject(fullSimParcel);
294 } 298 }
@@ -813,6 +817,9 @@ namespace OpenSim.Region.CoreModules.World.Land
813 throw new Exception("Error: Parcel not found at point " + x + ", " + y); 817 throw new Exception("Error: Parcel not found at point " + x + ", " + y);
814 } 818 }
815 819
820 if(m_landList.Count == 0 || m_landIDList == null)
821 return null;
822
816 lock (m_landIDList) 823 lock (m_landIDList)
817 { 824 {
818 try 825 try
@@ -824,8 +831,6 @@ namespace OpenSim.Region.CoreModules.World.Land
824 return null; 831 return null;
825 } 832 }
826 } 833 }
827
828 return m_landList[m_landIDList[x / 4, y / 4]];
829 } 834 }
830 835
831 // Create a 'parcel is here' bitmap for the parcel identified by the passed landID 836 // Create a 'parcel is here' bitmap for the parcel identified by the passed landID
@@ -1576,6 +1581,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1576 } 1581 }
1577 } 1582 }
1578 } 1583 }
1584 FinalizeLandPrimCountUpdate(); // update simarea information
1579 } 1585 }
1580 } 1586 }
1581 1587
@@ -1640,9 +1646,9 @@ namespace OpenSim.Region.CoreModules.World.Land
1640 foreach (HashSet<SceneObjectGroup> objs in returns.Values) 1646 foreach (HashSet<SceneObjectGroup> objs in returns.Values)
1641 { 1647 {
1642 List<SceneObjectGroup> objs2 = new List<SceneObjectGroup>(objs); 1648 List<SceneObjectGroup> objs2 = new List<SceneObjectGroup>(objs);
1643 if (m_scene.Permissions.CanReturnObjects(null, remoteClient.AgentId, objs2)) 1649 if (m_scene.Permissions.CanReturnObjects(null, remoteClient, objs2))
1644 { 1650 {
1645 m_scene.returnObjects(objs2.ToArray(), remoteClient.AgentId); 1651 m_scene.returnObjects(objs2.ToArray(), remoteClient);
1646 } 1652 }
1647 else 1653 else
1648 { 1654 {
@@ -2035,7 +2041,7 @@ namespace OpenSim.Region.CoreModules.World.Land
2035 { 2041 {
2036 SceneObjectGroup[] objs = new SceneObjectGroup[1]; 2042 SceneObjectGroup[] objs = new SceneObjectGroup[1];
2037 objs[0] = obj; 2043 objs[0] = obj;
2038 ((Scene)client.Scene).returnObjects(objs, client.AgentId); 2044 ((Scene)client.Scene).returnObjects(objs, client);
2039 } 2045 }
2040 2046
2041 Dictionary<UUID, System.Threading.Timer> Timers = new Dictionary<UUID, System.Threading.Timer>(); 2047 Dictionary<UUID, System.Threading.Timer> Timers = new Dictionary<UUID, System.Threading.Timer>();
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 73b4cb5..2b5cb31 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -356,6 +356,7 @@ namespace OpenSim.Region.CoreModules.World.Land
356 } 356 }
357 } 357 }
358 358
359 // the total prims a parcel owner can have on a region
359 public int GetSimulatorMaxPrimCount() 360 public int GetSimulatorMaxPrimCount()
360 { 361 {
361 if (overrideSimulatorMaxPrimCount != null) 362 if (overrideSimulatorMaxPrimCount != null)
@@ -370,7 +371,7 @@ namespace OpenSim.Region.CoreModules.World.Land
370 * (double)m_scene.RegionInfo.RegionSettings.ObjectBonus 371 * (double)m_scene.RegionInfo.RegionSettings.ObjectBonus
371 / (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) 372 / (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY)
372 +0.5 ); 373 +0.5 );
373 374 // sanity check
374 if(simMax > m_scene.RegionInfo.ObjectCapacity) 375 if(simMax > m_scene.RegionInfo.ObjectCapacity)
375 simMax = m_scene.RegionInfo.ObjectCapacity; 376 simMax = m_scene.RegionInfo.ObjectCapacity;
376 //m_log.DebugFormat("Simwide Area: {0}, Capacity {1}, SimMax {2}, SimWidePrims {3}", 377 //m_log.DebugFormat("Simwide Area: {0}, Capacity {1}, SimMax {2}, SimWidePrims {3}",
@@ -1043,7 +1044,8 @@ namespace OpenSim.Region.CoreModules.World.Land
1043 else 1044 else
1044 LandData.AABBMax = new Vector3(tx, ty, (float)m_scene.Heightmap[tx - 1, ty - 1]); 1045 LandData.AABBMax = new Vector3(tx, ty, (float)m_scene.Heightmap[tx - 1, ty - 1]);
1045 1046
1046 LandData.Area = tempArea * landUnit * landUnit; 1047 tempArea *= landUnit * landUnit;
1048 LandData.Area = tempArea;
1047 } 1049 }
1048 1050
1049 #endregion 1051 #endregion
@@ -1647,8 +1649,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1647 { 1649 {
1648 foreach (SceneObjectGroup obj in primsOverMe) 1650 foreach (SceneObjectGroup obj in primsOverMe)
1649 { 1651 {
1650 if (obj.OwnerID == previousOwner && obj.GroupID == UUID.Zero && 1652 if(m_scene.Permissions.CanSellObject(previousOwner,obj, (byte)SaleType.Original))
1651 (obj.GetEffectivePermissions() & (uint)(OpenSim.Framework.PermissionMask.Transfer)) != 0)
1652 m_BuySellModule.BuyObject(sp.ControllingClient, UUID.Zero, obj.LocalId, 1, 0); 1653 m_BuySellModule.BuyObject(sp.ControllingClient, UUID.Zero, obj.LocalId, 1, 0);
1653 } 1654 }
1654 } 1655 }
@@ -1662,7 +1663,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1662 { 1663 {
1663 SceneObjectGroup[] objs = new SceneObjectGroup[1]; 1664 SceneObjectGroup[] objs = new SceneObjectGroup[1];
1664 objs[0] = obj; 1665 objs[0] = obj;
1665 m_scene.returnObjects(objs, obj.OwnerID); 1666 m_scene.returnObjects(objs, null);
1666 } 1667 }
1667 1668
1668 public void ReturnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client) 1669 public void ReturnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client)
@@ -1693,6 +1694,8 @@ namespace OpenSim.Region.CoreModules.World.Land
1693 { 1694 {
1694 if (obj.GroupID == LandData.GroupID) 1695 if (obj.GroupID == LandData.GroupID)
1695 { 1696 {
1697 if (obj.OwnerID == LandData.OwnerID)
1698 continue;
1696 if (!returns.ContainsKey(obj.OwnerID)) 1699 if (!returns.ContainsKey(obj.OwnerID))
1697 returns[obj.OwnerID] = 1700 returns[obj.OwnerID] =
1698 new List<SceneObjectGroup>(); 1701 new List<SceneObjectGroup>();
@@ -1734,8 +1737,8 @@ namespace OpenSim.Region.CoreModules.World.Land
1734 1737
1735 foreach (List<SceneObjectGroup> ol in returns.Values) 1738 foreach (List<SceneObjectGroup> ol in returns.Values)
1736 { 1739 {
1737 if (m_scene.Permissions.CanReturnObjects(this, remote_client.AgentId, ol)) 1740 if (m_scene.Permissions.CanReturnObjects(this, remote_client, ol))
1738 m_scene.returnObjects(ol.ToArray(), remote_client.AgentId); 1741 m_scene.returnObjects(ol.ToArray(), remote_client);
1739 } 1742 }
1740 } 1743 }
1741 1744
diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
index 857f919..2a720db 100644
--- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
@@ -92,10 +92,8 @@ namespace OpenSim.Region.CoreModules.World.Land
92 m_Scene.RegisterModuleInterface<IPrimCountModule>(this); 92 m_Scene.RegisterModuleInterface<IPrimCountModule>(this);
93 93
94 m_Scene.EventManager.OnObjectAddedToScene += OnParcelPrimCountAdd; 94 m_Scene.EventManager.OnObjectAddedToScene += OnParcelPrimCountAdd;
95 m_Scene.EventManager.OnObjectBeingRemovedFromScene += 95 m_Scene.EventManager.OnObjectBeingRemovedFromScene += OnObjectBeingRemovedFromScene;
96 OnObjectBeingRemovedFromScene; 96 m_Scene.EventManager.OnParcelPrimCountTainted += OnParcelPrimCountTainted;
97 m_Scene.EventManager.OnParcelPrimCountTainted +=
98 OnParcelPrimCountTainted;
99 m_Scene.EventManager.OnLandObjectAdded += delegate(ILandObject lo) { OnParcelPrimCountTainted(); }; 97 m_Scene.EventManager.OnLandObjectAdded += delegate(ILandObject lo) { OnParcelPrimCountTainted(); };
100 } 98 }
101 99
@@ -215,29 +213,15 @@ namespace OpenSim.Region.CoreModules.World.Land
215 else 213 else
216 parcelCounts.Users[obj.OwnerID] = partCount; 214 parcelCounts.Users[obj.OwnerID] = partCount;
217 215
218 if (obj.IsSelected) 216 if (obj.IsSelected || obj.GetSittingAvatarsCount() > 0)
219 {
220 parcelCounts.Selected += partCount; 217 parcelCounts.Selected += partCount;
221 } 218
219 if (obj.OwnerID == landData.OwnerID)
220 parcelCounts.Owner += partCount;
221 else if (landData.GroupID != UUID.Zero && obj.GroupID == landData.GroupID)
222 parcelCounts.Group += partCount;
222 else 223 else
223 { 224 parcelCounts.Others += partCount;
224 if (landData.IsGroupOwned)
225 {
226 if (obj.OwnerID == landData.GroupID)
227 parcelCounts.Owner += partCount;
228 else if (landData.GroupID != UUID.Zero && obj.GroupID == landData.GroupID)
229 parcelCounts.Group += partCount;
230 else
231 parcelCounts.Others += partCount;
232 }
233 else
234 {
235 if (obj.OwnerID == landData.OwnerID)
236 parcelCounts.Owner += partCount;
237 else
238 parcelCounts.Others += partCount;
239 }
240 }
241 } 225 }
242 } 226 }
243 227
@@ -393,7 +377,6 @@ namespace OpenSim.Region.CoreModules.World.Land
393 count = counts.Owner; 377 count = counts.Owner;
394 count += counts.Group; 378 count += counts.Group;
395 count += counts.Others; 379 count += counts.Others;
396 count += counts.Selected;
397 } 380 }
398 } 381 }
399 382
diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
index 0d8ece7..a349aa1 100644
--- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
+++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
@@ -151,7 +151,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
151 151
152 SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01); 152 SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
153 m_scene.AddNewSceneObject(sog, false); 153 m_scene.AddNewSceneObject(sog, false);
154 m_scene.SceneGraph.DuplicateObject(sog.LocalId, Vector3.Zero, 0, m_userId, UUID.Zero, Quaternion.Identity); 154 m_scene.SceneGraph.DuplicateObject(sog.LocalId, Vector3.Zero, m_userId, UUID.Zero, Quaternion.Identity, false);
155 155
156 Assert.That(pc.Owner, Is.EqualTo(6)); 156 Assert.That(pc.Owner, Is.EqualTo(6));
157 Assert.That(pc.Group, Is.EqualTo(0)); 157 Assert.That(pc.Group, Is.EqualTo(0));
diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
index 2837358..90d65c7 100644
--- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
@@ -89,28 +89,23 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
89 if (part == null) 89 if (part == null)
90 return; 90 return;
91 91
92 if (part.ParentGroup.IsDeleted) 92 SceneObjectGroup sog = part.ParentGroup;
93 if (sog == null || sog.IsDeleted)
93 return; 94 return;
94 95
95 if (part.OwnerID != part.GroupID && part.OwnerID != client.AgentId && (!m_scene.Permissions.IsGod(client.AgentId))) 96 // Does the user have the power to put the object on sale?
96 return; 97 if (!m_scene.Permissions.CanSellObject(client, sog, saleType))
97
98 if (part.OwnerID == part.GroupID) // Group owned
99 { 98 {
100 // Does the user have the power to put the object on sale? 99 client.SendAgentAlertMessage("You don't have permission to set object on sale", false);
101 if (!m_scene.Permissions.CanSellGroupObject(client.AgentId, part.GroupID, m_scene)) 100 return;
102 {
103 client.SendAgentAlertMessage("You don't have permission to set group-owned objects on sale", false);
104 return;
105 }
106 } 101 }
107 102
108 part = part.ParentGroup.RootPart; 103 part = sog.RootPart;
109 104
110 part.ObjectSaleType = saleType; 105 part.ObjectSaleType = saleType;
111 part.SalePrice = salePrice; 106 part.SalePrice = salePrice;
112 107
113 part.ParentGroup.HasGroupChanged = true; 108 sog.HasGroupChanged = true;
114 109
115 part.SendPropertiesToClient(client); 110 part.SendPropertiesToClient(client);
116 } 111 }
@@ -127,7 +122,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
127 switch (saleType) 122 switch (saleType)
128 { 123 {
129 case 1: // Sell as original (in-place sale) 124 case 1: // Sell as original (in-place sale)
130 uint effectivePerms = group.GetEffectivePermissions(); 125 uint effectivePerms = group.EffectiveOwnerPerms;
131 126
132 if ((effectivePerms & (uint)PermissionMask.Transfer) == 0) 127 if ((effectivePerms & (uint)PermissionMask.Transfer) == 0)
133 { 128 {
@@ -136,8 +131,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
136 return false; 131 return false;
137 } 132 }
138 133
139 group.SetOwnerId(remoteClient.AgentId); 134 group.SetOwner(remoteClient.AgentId, remoteClient.ActiveGroupId);
140 group.SetRootPartOwner(part, remoteClient.AgentId, remoteClient.ActiveGroupId);
141 135
142 if (m_scene.Permissions.PropagatePermissions()) 136 if (m_scene.Permissions.PropagatePermissions())
143 { 137 {
@@ -147,6 +141,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
147 child.TriggerScriptChangedEvent(Changed.OWNER); 141 child.TriggerScriptChangedEvent(Changed.OWNER);
148 child.ApplyNextOwnerPermissions(); 142 child.ApplyNextOwnerPermissions();
149 } 143 }
144 group.AggregatePerms();
150 } 145 }
151 146
152 part.ObjectSaleType = 0; 147 part.ObjectSaleType = 0;
@@ -174,7 +169,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
174 string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(group); 169 string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(group);
175 group.AbsolutePosition = originalPosition; 170 group.AbsolutePosition = originalPosition;
176 171
177 uint perms = group.GetEffectivePermissions(); 172 uint perms = group.EffectiveOwnerPerms;
178 173
179 if ((perms & (uint)PermissionMask.Transfer) == 0) 174 if ((perms & (uint)PermissionMask.Transfer) == 0)
180 { 175 {
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 75d90f3..8eee864 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -49,6 +49,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50 50
51 protected Scene m_scene; 51 protected Scene m_scene;
52 protected ScenePermissions scenePermissions;
52 protected bool m_Enabled; 53 protected bool m_Enabled;
53 54
54 private InventoryFolderImpl m_libraryRootFolder; 55 private InventoryFolderImpl m_libraryRootFolder;
@@ -69,15 +70,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
69 } 70 }
70 71
71 #region Constants 72 #region Constants
72 // These are here for testing. They will be taken out
73
74 //private uint PERM_ALL = (uint)2147483647;
75 private uint PERM_COPY = (uint)32768;
76 //private uint PERM_MODIFY = (uint)16384;
77 private uint PERM_MOVE = (uint)524288;
78 private uint PERM_TRANS = (uint)8192;
79 private uint PERM_LOCKED = (uint)540672;
80
81 /// <value> 73 /// <value>
82 /// Different user set names that come in from the configuration file. 74 /// Different user set names that come in from the configuration file.
83 /// </value> 75 /// </value>
@@ -96,14 +88,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
96 private bool m_bypassPermissionsValue = true; 88 private bool m_bypassPermissionsValue = true;
97 private bool m_propagatePermissions = false; 89 private bool m_propagatePermissions = false;
98 private bool m_debugPermissions = false; 90 private bool m_debugPermissions = false;
99 private bool m_allowGridGods = false; 91 private bool m_allowGridAdmins = false;
100 private bool m_RegionOwnerIsGod = false; 92 private bool m_RegionOwnerIsAdmin = false;
101 private bool m_RegionManagerIsGod = false; 93 private bool m_RegionManagerIsAdmin = false;
102 private bool m_forceGridGodsOnly; 94 private bool m_forceGridAdminsOnly;
103 private bool m_forceGodModeAlwaysOn; 95 private bool m_forceAdminModeAlwaysOn;
104 private bool m_allowGodActionsWithoutGodMode; 96 private bool m_allowAdminActionsWithoutGodMode;
105
106 private bool m_SimpleBuildPermissions = false;
107 97
108 /// <value> 98 /// <value>
109 /// The set of users that are allowed to create scripts. This is only active if permissions are not being 99 /// The set of users that are allowed to create scripts. This is only active if permissions are not being
@@ -172,25 +162,23 @@ namespace OpenSim.Region.CoreModules.World.Permissions
172 162
173 string[] sections = new string[] { "Startup", "Permissions" }; 163 string[] sections = new string[] { "Startup", "Permissions" };
174 164
175 m_allowGridGods = Util.GetConfigVarFromSections<bool>(config, "allow_grid_gods", sections, false); 165 m_allowGridAdmins = Util.GetConfigVarFromSections<bool>(config, "allow_grid_gods", sections, false);
176 m_bypassPermissions = !Util.GetConfigVarFromSections<bool>(config, "serverside_object_permissions", sections, true); 166 m_bypassPermissions = !Util.GetConfigVarFromSections<bool>(config, "serverside_object_permissions", sections, true);
177 m_propagatePermissions = Util.GetConfigVarFromSections<bool>(config, "propagate_permissions", sections, true); 167 m_propagatePermissions = Util.GetConfigVarFromSections<bool>(config, "propagate_permissions", sections, true);
178 168
179 m_forceGridGodsOnly = Util.GetConfigVarFromSections<bool>(config, "force_grid_gods_only", sections, false); 169 m_forceGridAdminsOnly = Util.GetConfigVarFromSections<bool>(config, "force_grid_gods_only", sections, false);
180 if(!m_forceGridGodsOnly) 170 if(!m_forceGridAdminsOnly)
181 { 171 {
182 m_RegionOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_owner_is_god",sections, true); 172 m_RegionOwnerIsAdmin = Util.GetConfigVarFromSections<bool>(config, "region_owner_is_god",sections, true);
183 m_RegionManagerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god",sections, false); 173 m_RegionManagerIsAdmin = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god",sections, false);
184 } 174 }
185 else 175 else
186 m_allowGridGods = true; 176 m_allowGridAdmins = true;
187 177
188 m_forceGodModeAlwaysOn = Util.GetConfigVarFromSections<bool>(config, "automatic_gods", sections, false); 178 m_forceAdminModeAlwaysOn = Util.GetConfigVarFromSections<bool>(config, "automatic_gods", sections, false);
189 m_allowGodActionsWithoutGodMode = Util.GetConfigVarFromSections<bool>(config, "implicit_gods", sections, false); 179 m_allowAdminActionsWithoutGodMode = Util.GetConfigVarFromSections<bool>(config, "implicit_gods", sections, false);
190 if(m_allowGodActionsWithoutGodMode) 180 if(m_allowAdminActionsWithoutGodMode)
191 m_forceGodModeAlwaysOn = false; 181 m_forceAdminModeAlwaysOn = false;
192
193 m_SimpleBuildPermissions = Util.GetConfigVarFromSections<bool>(config, "simple_build_permissions",sections, false);
194 182
195 m_allowedScriptCreators 183 m_allowedScriptCreators
196 = ParseUserSetConfigSetting(config, "allowed_script_creators", m_allowedScriptCreators); 184 = ParseUserSetConfigSetting(config, "allowed_script_creators", m_allowedScriptCreators);
@@ -266,63 +254,78 @@ namespace OpenSim.Region.CoreModules.World.Permissions
266 m_scene = scene; 254 m_scene = scene;
267 255
268 scene.RegisterModuleInterface<IPermissionsModule>(this); 256 scene.RegisterModuleInterface<IPermissionsModule>(this);
257 scenePermissions = m_scene.Permissions;
269 258
270 //Register functions with Scene External Checks! 259 //Register functions with Scene External Checks!
271 m_scene.Permissions.OnBypassPermissions += BypassPermissions; 260 scenePermissions.OnBypassPermissions += BypassPermissions;
272 m_scene.Permissions.OnSetBypassPermissions += SetBypassPermissions; 261 scenePermissions.OnSetBypassPermissions += SetBypassPermissions;
273 m_scene.Permissions.OnPropagatePermissions += PropagatePermissions; 262 scenePermissions.OnPropagatePermissions += PropagatePermissions;
274 m_scene.Permissions.OnGenerateClientFlags += GenerateClientFlags; 263
275 m_scene.Permissions.OnAbandonParcel += CanAbandonParcel; 264 scenePermissions.OnIsGridGod += IsGridAdministrator;
276 m_scene.Permissions.OnReclaimParcel += CanReclaimParcel; 265 scenePermissions.OnIsAdministrator += IsAdministrator;
277 m_scene.Permissions.OnDeedParcel += CanDeedParcel; 266 scenePermissions.OnIsEstateManager += IsEstateManager;
278 m_scene.Permissions.OnDeedObject += CanDeedObject; 267
279 m_scene.Permissions.OnIsGod += IsGod; 268 scenePermissions.OnGenerateClientFlags += GenerateClientFlags;
280 m_scene.Permissions.OnIsGridGod += IsGridGod; 269
281 m_scene.Permissions.OnIsAdministrator += IsAdministrator; 270 scenePermissions.OnIssueEstateCommand += CanIssueEstateCommand;
282 m_scene.Permissions.OnIsEstateManager += IsEstateManager; 271 scenePermissions.OnRunConsoleCommand += CanRunConsoleCommand;
283 m_scene.Permissions.OnDuplicateObject += CanDuplicateObject; 272
284 m_scene.Permissions.OnDeleteObject += CanDeleteObject; 273 scenePermissions.OnTeleport += CanTeleport;
285 m_scene.Permissions.OnEditObject += CanEditObject; 274
286 m_scene.Permissions.OnEditParcelProperties += CanEditParcelProperties; 275 scenePermissions.OnInstantMessage += CanInstantMessage;
287 m_scene.Permissions.OnInstantMessage += CanInstantMessage; 276
288 m_scene.Permissions.OnInventoryTransfer += CanInventoryTransfer; 277 scenePermissions.OnAbandonParcel += CanAbandonParcel;
289 m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; 278 scenePermissions.OnReclaimParcel += CanReclaimParcel;
290 m_scene.Permissions.OnMoveObject += CanMoveObject; 279 scenePermissions.OnDeedParcel += CanDeedParcel;
291 m_scene.Permissions.OnObjectEntry += CanObjectEntry; 280 scenePermissions.OnSellParcel += CanSellParcel;
292 m_scene.Permissions.OnReturnObjects += CanReturnObjects; 281 scenePermissions.OnEditParcelProperties += CanEditParcelProperties;
293 m_scene.Permissions.OnRezObject += CanRezObject; 282 scenePermissions.OnTerraformLand += CanTerraformLand;
294 m_scene.Permissions.OnRunConsoleCommand += CanRunConsoleCommand; 283 scenePermissions.OnBuyLand += CanBuyLand;
295 m_scene.Permissions.OnRunScript += CanRunScript; 284
296 m_scene.Permissions.OnCompileScript += CanCompileScript; 285 scenePermissions.OnReturnObjects += CanReturnObjects;
297 m_scene.Permissions.OnSellParcel += CanSellParcel; 286
298 m_scene.Permissions.OnTakeObject += CanTakeObject; 287 scenePermissions.OnRezObject += CanRezObject;
299 m_scene.Permissions.OnSellGroupObject += CanSellGroupObject; 288 scenePermissions.OnObjectEntry += CanObjectEntry;
300 m_scene.Permissions.OnTakeCopyObject += CanTakeCopyObject; 289 scenePermissions.OnObjectEnterWithScripts += OnObjectEnterWithScripts;
301 m_scene.Permissions.OnTerraformLand += CanTerraformLand; 290
302 m_scene.Permissions.OnLinkObject += CanLinkObject; 291 scenePermissions.OnDuplicateObject += CanDuplicateObject;
303 m_scene.Permissions.OnDelinkObject += CanDelinkObject; 292 scenePermissions.OnDeleteObjectByIDs += CanDeleteObjectByIDs;
304 m_scene.Permissions.OnBuyLand += CanBuyLand; 293 scenePermissions.OnDeleteObject += CanDeleteObject;
305 294 scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs;
306 m_scene.Permissions.OnViewNotecard += CanViewNotecard; 295 scenePermissions.OnEditObject += CanEditObject;
307 m_scene.Permissions.OnViewScript += CanViewScript; 296 scenePermissions.OnInventoryTransfer += CanInventoryTransfer;
308 m_scene.Permissions.OnEditNotecard += CanEditNotecard; 297 scenePermissions.OnMoveObject += CanMoveObject;
309 m_scene.Permissions.OnEditScript += CanEditScript; 298 scenePermissions.OnTakeObject += CanTakeObject;
310 299 scenePermissions.OnTakeCopyObject += CanTakeCopyObject;
311 m_scene.Permissions.OnCreateObjectInventory += CanCreateObjectInventory; 300 scenePermissions.OnLinkObject += CanLinkObject;
312 m_scene.Permissions.OnEditObjectInventory += CanEditObjectInventory; 301 scenePermissions.OnDelinkObject += CanDelinkObject;
313 m_scene.Permissions.OnCopyObjectInventory += CanCopyObjectInventory; 302 scenePermissions.OnDeedObject += CanDeedObject;
314 m_scene.Permissions.OnDeleteObjectInventory += CanDeleteObjectInventory; 303 scenePermissions.OnSellGroupObject += CanSellGroupObject;
315 m_scene.Permissions.OnResetScript += CanResetScript; 304 scenePermissions.OnSellObjectByUserID += CanSellObjectByUserID;
316 305 scenePermissions.OnSellObject += CanSellObject;
317 m_scene.Permissions.OnCreateUserInventory += CanCreateUserInventory; 306
318 m_scene.Permissions.OnCopyUserInventory += CanCopyUserInventory; 307 scenePermissions.OnCreateObjectInventory += CanCreateObjectInventory;
319 m_scene.Permissions.OnEditUserInventory += CanEditUserInventory; 308 scenePermissions.OnEditObjectInventory += CanEditObjectInventory;
320 m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory; 309 scenePermissions.OnCopyObjectInventory += CanCopyObjectInventory;
321 310 scenePermissions.OnDeleteObjectInventory += CanDeleteObjectInventory;
322 m_scene.Permissions.OnTeleport += CanTeleport; 311 scenePermissions.OnDoObjectInvToObjectInv += CanDoObjectInvToObjectInv;
323 312 scenePermissions.OnDropInObjectInv += CanDropInObjectInv;
324 m_scene.Permissions.OnControlPrimMedia += CanControlPrimMedia; 313
325 m_scene.Permissions.OnInteractWithPrimMedia += CanInteractWithPrimMedia; 314 scenePermissions.OnViewNotecard += CanViewNotecard;
315 scenePermissions.OnViewScript += CanViewScript;
316 scenePermissions.OnEditNotecard += CanEditNotecard;
317 scenePermissions.OnEditScript += CanEditScript;
318 scenePermissions.OnResetScript += CanResetScript;
319 scenePermissions.OnRunScript += CanRunScript;
320 scenePermissions.OnCompileScript += CanCompileScript;
321
322 scenePermissions.OnCreateUserInventory += CanCreateUserInventory;
323 scenePermissions.OnCopyUserInventory += CanCopyUserInventory;
324 scenePermissions.OnEditUserInventory += CanEditUserInventory;
325 scenePermissions.OnDeleteUserInventory += CanDeleteUserInventory;
326
327 scenePermissions.OnControlPrimMedia += CanControlPrimMedia;
328 scenePermissions.OnInteractWithPrimMedia += CanInteractWithPrimMedia;
326 329
327 m_scene.AddCommand("Users", this, "bypass permissions", 330 m_scene.AddCommand("Users", this, "bypass permissions",
328 "bypass permissions <true / false>", 331 "bypass permissions <true / false>",
@@ -351,6 +354,78 @@ namespace OpenSim.Region.CoreModules.World.Permissions
351 return; 354 return;
352 355
353 m_scene.UnregisterModuleInterface<IPermissionsModule>(this); 356 m_scene.UnregisterModuleInterface<IPermissionsModule>(this);
357
358 scenePermissions.OnBypassPermissions -= BypassPermissions;
359 scenePermissions.OnSetBypassPermissions -= SetBypassPermissions;
360 scenePermissions.OnPropagatePermissions -= PropagatePermissions;
361
362 scenePermissions.OnIsGridGod -= IsGridAdministrator;
363 scenePermissions.OnIsAdministrator -= IsAdministrator;
364 scenePermissions.OnIsEstateManager -= IsEstateManager;
365
366 scenePermissions.OnGenerateClientFlags -= GenerateClientFlags;
367
368 scenePermissions.OnIssueEstateCommand -= CanIssueEstateCommand;
369 scenePermissions.OnRunConsoleCommand -= CanRunConsoleCommand;
370
371 scenePermissions.OnTeleport -= CanTeleport;
372
373 scenePermissions.OnInstantMessage -= CanInstantMessage;
374
375 scenePermissions.OnAbandonParcel -= CanAbandonParcel;
376 scenePermissions.OnReclaimParcel -= CanReclaimParcel;
377 scenePermissions.OnDeedParcel -= CanDeedParcel;
378 scenePermissions.OnSellParcel -= CanSellParcel;
379 scenePermissions.OnEditParcelProperties -= CanEditParcelProperties;
380 scenePermissions.OnTerraformLand -= CanTerraformLand;
381 scenePermissions.OnBuyLand -= CanBuyLand;
382
383 scenePermissions.OnRezObject -= CanRezObject;
384 scenePermissions.OnObjectEntry -= CanObjectEntry;
385 scenePermissions.OnObjectEnterWithScripts -= OnObjectEnterWithScripts;
386
387 scenePermissions.OnReturnObjects -= CanReturnObjects;
388
389 scenePermissions.OnDuplicateObject -= CanDuplicateObject;
390 scenePermissions.OnDeleteObjectByIDs -= CanDeleteObjectByIDs;
391 scenePermissions.OnDeleteObject -= CanDeleteObject;
392 scenePermissions.OnEditObjectByIDs -= CanEditObjectByIDs;
393 scenePermissions.OnEditObject -= CanEditObject;
394 scenePermissions.OnInventoryTransfer -= CanInventoryTransfer;
395 scenePermissions.OnMoveObject -= CanMoveObject;
396 scenePermissions.OnTakeObject -= CanTakeObject;
397 scenePermissions.OnTakeCopyObject -= CanTakeCopyObject;
398 scenePermissions.OnLinkObject -= CanLinkObject;
399 scenePermissions.OnDelinkObject -= CanDelinkObject;
400 scenePermissions.OnDeedObject -= CanDeedObject;
401
402 scenePermissions.OnSellGroupObject -= CanSellGroupObject;
403 scenePermissions.OnSellObjectByUserID -= CanSellObjectByUserID;
404 scenePermissions.OnSellObject -= CanSellObject;
405
406 scenePermissions.OnCreateObjectInventory -= CanCreateObjectInventory;
407 scenePermissions.OnEditObjectInventory -= CanEditObjectInventory;
408 scenePermissions.OnCopyObjectInventory -= CanCopyObjectInventory;
409 scenePermissions.OnDeleteObjectInventory -= CanDeleteObjectInventory;
410 scenePermissions.OnDoObjectInvToObjectInv -= CanDoObjectInvToObjectInv;
411 scenePermissions.OnDropInObjectInv -= CanDropInObjectInv;
412
413 scenePermissions.OnViewNotecard -= CanViewNotecard;
414 scenePermissions.OnViewScript -= CanViewScript;
415 scenePermissions.OnEditNotecard -= CanEditNotecard;
416 scenePermissions.OnEditScript -= CanEditScript;
417 scenePermissions.OnResetScript -= CanResetScript;
418 scenePermissions.OnRunScript -= CanRunScript;
419 scenePermissions.OnCompileScript -= CanCompileScript;
420
421 scenePermissions.OnCreateUserInventory -= CanCreateUserInventory;
422 scenePermissions.OnCopyUserInventory -= CanCopyUserInventory;
423 scenePermissions.OnEditUserInventory -= CanEditUserInventory;
424 scenePermissions.OnDeleteUserInventory -= CanDeleteUserInventory;
425
426 scenePermissions.OnControlPrimMedia -= CanControlPrimMedia;
427 scenePermissions.OnInteractWithPrimMedia -= CanInteractWithPrimMedia;
428
354 } 429 }
355 430
356 public void Close() 431 public void Close()
@@ -480,6 +555,36 @@ namespace OpenSim.Region.CoreModules.World.Permissions
480 return false; 555 return false;
481 } 556 }
482 557
558 protected bool GroupMemberPowers(UUID groupID, UUID userID, ref ulong powers)
559 {
560 powers = 0;
561 if (null == GroupsModule)
562 return false;
563
564 GroupMembershipData gmd = GroupsModule.GetMembershipData(groupID, userID);
565
566 if (gmd != null)
567 {
568 powers = gmd.GroupPowers;
569 return true;
570 }
571 return false;
572 }
573
574 protected bool GroupMemberPowers(UUID groupID, ScenePresence sp, ref ulong powers)
575 {
576 powers = 0;
577 IClientAPI client = sp.ControllingClient;
578 if (client == null)
579 return false;
580
581 if(!client.IsGroupMember(groupID))
582 return false;
583
584 powers = client.GetGroupPowers(groupID);
585 return true;
586 }
587
483 /// <summary> 588 /// <summary>
484 /// Parse a user set configuration setting 589 /// Parse a user set configuration setting
485 /// </summary> 590 /// </summary>
@@ -526,13 +631,13 @@ namespace OpenSim.Region.CoreModules.World.Permissions
526 if (user == UUID.Zero) 631 if (user == UUID.Zero)
527 return false; 632 return false;
528 633
529 if (m_scene.RegionInfo.EstateSettings.EstateOwner == user && m_RegionOwnerIsGod) 634 if (m_RegionOwnerIsAdmin && m_scene.RegionInfo.EstateSettings.EstateOwner == user)
530 return true; 635 return true;
531 636
532 if (IsEstateManager(user) && m_RegionManagerIsGod) 637 if (m_RegionManagerIsAdmin && IsEstateManager(user))
533 return true; 638 return true;
534 639
535 if (IsGridGod(user, null)) 640 if (IsGridAdministrator(user))
536 return true; 641 return true;
537 642
538 return false; 643 return false;
@@ -544,14 +649,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions
544 /// <param name="user">The user</param> 649 /// <param name="user">The user</param>
545 /// <param name="scene">Unused, can be null</param> 650 /// <param name="scene">Unused, can be null</param>
546 /// <returns></returns> 651 /// <returns></returns>
547 protected bool IsGridGod(UUID user, Scene scene) 652 protected bool IsGridAdministrator(UUID user)
548 { 653 {
549 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 654 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
550 if (m_bypassPermissions) return m_bypassPermissionsValue; 655 if (m_bypassPermissions) return m_bypassPermissionsValue;
551 656
552 if (user == UUID.Zero) return false; 657 if (user == UUID.Zero)
658 return false;
553 659
554 if (m_allowGridGods) 660 if (m_allowGridAdmins)
555 { 661 {
556 ScenePresence sp = m_scene.GetScenePresence(user); 662 ScenePresence sp = m_scene.GetScenePresence(user);
557 if (sp != null) 663 if (sp != null)
@@ -567,10 +673,10 @@ namespace OpenSim.Region.CoreModules.World.Permissions
567 673
568 protected bool IsFriendWithPerms(UUID user, UUID objectOwner) 674 protected bool IsFriendWithPerms(UUID user, UUID objectOwner)
569 { 675 {
570 if (user == UUID.Zero) 676 if (FriendsModule == null)
571 return false; 677 return false;
572 678
573 if (FriendsModule == null) 679 if (user == UUID.Zero)
574 return false; 680 return false;
575 681
576 int friendPerms = FriendsModule.GetRightsGrantedByFriend(user, objectOwner); 682 int friendPerms = FriendsModule.GetRightsGrantedByFriend(user, objectOwner);
@@ -606,75 +712,178 @@ namespace OpenSim.Region.CoreModules.World.Permissions
606 712
607 #region Object Permissions 713 #region Object Permissions
608 714
609 public uint GenerateClientFlags(UUID user, UUID objID) 715 const uint DEFAULT_FLAGS = (uint)(
610 { 716 PrimFlags.ObjectCopy | // Tells client you can copy the object
611 // Here's the way this works, 717 PrimFlags.ObjectModify | // tells client you can modify the object
612 // ObjectFlags and Permission flags are two different enumerations 718 PrimFlags.ObjectMove | // tells client that you can move the object (only, no mod)
613 // ObjectFlags, however, tells the client to change what it will allow the user to do. 719 PrimFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
614 // So, that means that all of the permissions type ObjectFlags are /temporary/ and only 720 PrimFlags.ObjectYouOwner | // Tells client that you're the owner of the object
615 // supposed to be set when customizing the objectflags for the client. 721 PrimFlags.ObjectAnyOwner | // Tells client that someone owns the object
722 PrimFlags.ObjectOwnerModify // Tells client that you're the owner of the object
723 );
724
725 const uint NOT_DEFAULT_FLAGS = (uint)~(
726 PrimFlags.ObjectCopy | // Tells client you can copy the object
727 PrimFlags.ObjectModify | // tells client you can modify the object
728 PrimFlags.ObjectMove | // tells client that you can move the object (only, no mod)
729 PrimFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
730 PrimFlags.ObjectYouOwner | // Tells client that you're the owner of the object
731 PrimFlags.ObjectAnyOwner | // Tells client that someone owns the object
732 PrimFlags.ObjectOwnerModify // Tells client that you're the owner of the object
733 );
734
735 const uint EXTRAOWNERMASK = (uint)(
736 PrimFlags.ObjectYouOwner |
737 PrimFlags.ObjectAnyOwner
738 );
739
740 const uint EXTRAGODMASK = (uint)(
741 PrimFlags.ObjectYouOwner |
742 PrimFlags.ObjectAnyOwner |
743 PrimFlags.ObjectOwnerModify |
744 PrimFlags.ObjectModify |
745 PrimFlags.ObjectMove
746 );
747
748 const uint GOD_FLAGS = (uint)(
749 PrimFlags.ObjectCopy | // Tells client you can copy the object
750 PrimFlags.ObjectModify | // tells client you can modify the object
751 PrimFlags.ObjectMove | // tells client that you can move the object (only, no mod)
752 PrimFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
753 PrimFlags.ObjectYouOwner | // Tells client that you're the owner of the object
754 PrimFlags.ObjectAnyOwner | // Tells client that someone owns the object
755 PrimFlags.ObjectOwnerModify // Tells client that you're the owner of the object
756 );
757
758 const uint LOCKED_GOD_FLAGS = (uint)(
759 PrimFlags.ObjectCopy | // Tells client you can copy the object
760 PrimFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
761 PrimFlags.ObjectYouOwner | // Tells client that you're the owner of the object
762 PrimFlags.ObjectAnyOwner // Tells client that someone owns the object
763 );
764
765 const uint SHAREDMASK = (uint)(
766 PermissionMask.Move |
767 PermissionMask.Modify |
768 PermissionMask.Copy
769 );
770
771 public uint GenerateClientFlags(SceneObjectPart task, ScenePresence sp, uint curEffectivePerms)
772 {
773 if(sp == null || task == null || curEffectivePerms == 0)
774 return 0;
616 775
617 // These temporary objectflags get computed and added in this function based on the 776 // Remove any of the objectFlags that are temporary. These will get added back if appropriate
618 // Permission mask that's appropriate! 777 uint objflags = curEffectivePerms & NOT_DEFAULT_FLAGS ;
619 // Outside of this method, they should never be added to objectflags!
620 // -teravus
621 778
622 SceneObjectPart task = m_scene.GetSceneObjectPart(objID); 779 uint returnMask;
623 780
624 // this shouldn't ever happen.. return no permissions/objectflags. 781 SceneObjectGroup grp = task.ParentGroup;
625 if (task == null) 782 if(grp == null)
626 return (uint)0; 783 return 0;
627 784
628 uint objflags = task.GetEffectiveObjectFlags(); 785 UUID taskOwnerID = task.OwnerID;
629 UUID objectOwner = task.OwnerID; 786 UUID spID = sp.UUID;
630 787
788 bool unlocked = (grp.RootPart.OwnerMask & (uint)PermissionMask.Move) != 0;
631 789
632 // Remove any of the objectFlags that are temporary. These will get added back if appropriate 790 if(sp.IsGod)
633 // in the next bit of code 791 {
634 792 // do locked on objects owned by admin
635 // libomv will moan about PrimFlags.ObjectYouOfficer being 793 if(!unlocked && spID == taskOwnerID)
636 // deprecated 794 return objflags | LOCKED_GOD_FLAGS;
637#pragma warning disable 0612 795 else
638 objflags &= (uint) 796 return objflags | GOD_FLAGS;
639 ~(PrimFlags.ObjectCopy | // Tells client you can copy the object 797 }
640 PrimFlags.ObjectModify | // tells client you can modify the object 798
641 PrimFlags.ObjectMove | // tells client that you can move the object (only, no mod) 799 //bypass option == owner rights
642 PrimFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it 800 if (m_bypassPermissions)
643 PrimFlags.ObjectYouOwner | // Tells client that you're the owner of the object
644 PrimFlags.ObjectAnyOwner | // Tells client that someone owns the object
645 PrimFlags.ObjectOwnerModify | // Tells client that you're the owner of the object
646 PrimFlags.ObjectYouOfficer // Tells client that you've got group object editing permission. Used when ObjectGroupOwned is set
647 );
648#pragma warning restore 0612
649
650 // Creating the three ObjectFlags options for this method to choose from.
651 // Customize the OwnerMask
652 uint objectOwnerMask = ApplyObjectModifyMasks(task.OwnerMask, objflags);
653 objectOwnerMask |= (uint)PrimFlags.ObjectYouOwner | (uint)PrimFlags.ObjectAnyOwner | (uint)PrimFlags.ObjectOwnerModify;
654
655 // Customize the GroupMask
656 uint objectGroupMask = ApplyObjectModifyMasks(task.GroupMask, objflags);
657
658 // Customize the EveryoneMask
659 uint objectEveryoneMask = ApplyObjectModifyMasks(task.EveryoneMask, objflags);
660 if (objectOwner != UUID.Zero)
661 objectEveryoneMask |= (uint)PrimFlags.ObjectAnyOwner;
662
663 PermissionClass permissionClass = GetPermissionClass(user, task);
664
665 switch (permissionClass)
666 { 801 {
667 case PermissionClass.Owner: 802 returnMask = ApplyObjectModifyMasks(task.OwnerMask, objflags, true); //??
668 return objectOwnerMask; 803 returnMask |= EXTRAOWNERMASK;
669 case PermissionClass.Group: 804 if((returnMask & (uint)PrimFlags.ObjectModify) != 0)
670 return objectGroupMask | objectEveryoneMask; 805 returnMask |= (uint)PrimFlags.ObjectOwnerModify;
671 case PermissionClass.Everyone: 806 return returnMask;
672 default:
673 return objectEveryoneMask;
674 } 807 }
808
809 // owner
810 if (spID == taskOwnerID)
811 {
812 returnMask = ApplyObjectModifyMasks(grp.EffectiveOwnerPerms, objflags, unlocked);
813 returnMask |= EXTRAOWNERMASK;
814 if((returnMask & (uint)PrimFlags.ObjectModify) != 0)
815 returnMask |= (uint)PrimFlags.ObjectOwnerModify;
816 return returnMask;
817 }
818
819 // if not god or owner, do attachments as everyone
820 if(task.ParentGroup.IsAttachment)
821 {
822 returnMask = ApplyObjectModifyMasks(grp.EffectiveEveryOnePerms, objflags, unlocked);
823 if (taskOwnerID != UUID.Zero)
824 returnMask |= (uint)PrimFlags.ObjectAnyOwner;
825 return returnMask;
826 }
827
828 UUID taskGroupID = task.GroupID;
829 bool notGroupdOwned = taskOwnerID != taskGroupID;
830
831 // if friends with rights then owner
832 if (notGroupdOwned && IsFriendWithPerms(spID, taskOwnerID))
833 {
834 returnMask = ApplyObjectModifyMasks(grp.EffectiveOwnerPerms, objflags, unlocked);
835 returnMask |= EXTRAOWNERMASK;
836 if((returnMask & (uint)PrimFlags.ObjectModify) != 0)
837 returnMask |= (uint)PrimFlags.ObjectOwnerModify;
838 return returnMask;
839 }
840
841 // group owned or shared ?
842 IClientAPI client = sp.ControllingClient;
843 ulong powers = 0;
844 if(taskGroupID != UUID.Zero && GroupMemberPowers(taskGroupID, sp, ref powers))
845 {
846 if(notGroupdOwned)
847 {
848 // group sharing or everyone
849 returnMask = ApplyObjectModifyMasks(grp.EffectiveGroupOrEveryOnePerms, objflags, unlocked);
850 if (taskOwnerID != UUID.Zero)
851 returnMask |= (uint)PrimFlags.ObjectAnyOwner;
852 return returnMask;
853 }
854
855 // object is owned by group, check role powers
856 if((powers & (ulong)GroupPowers.ObjectManipulate) == 0)
857 {
858 // group sharing or everyone
859 returnMask = ApplyObjectModifyMasks(grp.EffectiveGroupOrEveryOnePerms, objflags, unlocked);
860 returnMask |=
861 (uint)PrimFlags.ObjectGroupOwned |
862 (uint)PrimFlags.ObjectAnyOwner;
863 return returnMask;
864 }
865
866 // we may have copy without transfer
867 uint grpEffectiveOwnerPerms = grp.EffectiveOwnerPerms;
868 if((grpEffectiveOwnerPerms & (uint)PermissionMask.Transfer) == 0)
869 grpEffectiveOwnerPerms &= ~(uint)PermissionMask.Copy;
870 returnMask = ApplyObjectModifyMasks(grpEffectiveOwnerPerms, objflags, unlocked);
871 returnMask |=
872 (uint)PrimFlags.ObjectGroupOwned |
873 (uint)PrimFlags.ObjectYouOwner;
874 if((returnMask & (uint)PrimFlags.ObjectModify) != 0)
875 returnMask |= (uint)PrimFlags.ObjectOwnerModify;
876 return returnMask;
877 }
878
879 // fallback is everyone rights
880 returnMask = ApplyObjectModifyMasks(grp.EffectiveEveryOnePerms, objflags, unlocked);
881 if (taskOwnerID != UUID.Zero)
882 returnMask |= (uint)PrimFlags.ObjectAnyOwner;
883 return returnMask;
675 } 884 }
676 885
677 private uint ApplyObjectModifyMasks(uint setPermissionMask, uint objectFlagsMask) 886 private uint ApplyObjectModifyMasks(uint setPermissionMask, uint objectFlagsMask, bool unlocked)
678 { 887 {
679 // We are adding the temporary objectflags to the object's objectflags based on the 888 // We are adding the temporary objectflags to the object's objectflags based on the
680 // permission flag given. These change the F flags on the client. 889 // permission flag given. These change the F flags on the client.
@@ -684,14 +893,17 @@ namespace OpenSim.Region.CoreModules.World.Permissions
684 objectFlagsMask |= (uint)PrimFlags.ObjectCopy; 893 objectFlagsMask |= (uint)PrimFlags.ObjectCopy;
685 } 894 }
686 895
687 if ((setPermissionMask & (uint)PermissionMask.Move) != 0) 896 if (unlocked)
688 { 897 {
689 objectFlagsMask |= (uint)PrimFlags.ObjectMove; 898 if ((setPermissionMask & (uint)PermissionMask.Move) != 0)
690 } 899 {
900 objectFlagsMask |= (uint)PrimFlags.ObjectMove;
901 }
691 902
692 if ((setPermissionMask & (uint)PermissionMask.Modify) != 0) 903 if ((setPermissionMask & (uint)PermissionMask.Modify) != 0)
693 { 904 {
694 objectFlagsMask |= (uint)PrimFlags.ObjectModify; 905 objectFlagsMask |= (uint)PrimFlags.ObjectModify;
906 }
695 } 907 }
696 908
697 if ((setPermissionMask & (uint)PermissionMask.Transfer) != 0) 909 if ((setPermissionMask & (uint)PermissionMask.Transfer) != 0)
@@ -702,6 +914,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
702 return objectFlagsMask; 914 return objectFlagsMask;
703 } 915 }
704 916
917 // OARs still need this method that handles offline users
705 public PermissionClass GetPermissionClass(UUID user, SceneObjectPart obj) 918 public PermissionClass GetPermissionClass(UUID user, SceneObjectPart obj)
706 { 919 {
707 if (obj == null) 920 if (obj == null)
@@ -715,136 +928,199 @@ namespace OpenSim.Region.CoreModules.World.Permissions
715 if (user == objectOwner) 928 if (user == objectOwner)
716 return PermissionClass.Owner; 929 return PermissionClass.Owner;
717 930
718 if (IsFriendWithPerms(user, objectOwner) && !obj.ParentGroup.IsAttachment)
719 return PermissionClass.Owner;
720
721 // Estate users should be able to edit anything in the sim if RegionOwnerIsGod is set
722 if (m_RegionOwnerIsGod && IsEstateManager(user) && !IsAdministrator(objectOwner))
723 return PermissionClass.Owner;
724
725 // Admin should be able to edit anything in the sim (including admin objects) 931 // Admin should be able to edit anything in the sim (including admin objects)
726 if (IsAdministrator(user)) 932 if (IsAdministrator(user))
727 return PermissionClass.Owner; 933 return PermissionClass.Owner;
728 934
729/* to review later 935 if(!obj.ParentGroup.IsAttachment)
730 // Users should be able to edit what is over their land.
731 Vector3 taskPos = obj.AbsolutePosition;
732 ILandObject parcel = m_scene.LandChannel.GetLandObject(taskPos.X, taskPos.Y);
733 if (parcel != null && parcel.LandData.OwnerID == user && m_ParcelOwnerIsGod)
734 { 936 {
735 // Admin objects should not be editable by the above 937 if (IsFriendWithPerms(user, objectOwner) )
736 if (!IsAdministrator(objectOwner))
737 return PermissionClass.Owner; 938 return PermissionClass.Owner;
939
940 // Group permissions
941 if (obj.GroupID != UUID.Zero && IsGroupMember(obj.GroupID, user, 0))
942 return PermissionClass.Group;
738 } 943 }
739*/
740 // Group permissions
741 if ((obj.GroupID != UUID.Zero) && IsGroupMember(obj.GroupID, user, 0))
742 return PermissionClass.Group;
743 944
744 return PermissionClass.Everyone; 945 return PermissionClass.Everyone;
745 } 946 }
746 947
747 /// <summary> 948 // get effective object permissions using user UUID. User rights will be fixed
748 /// General permissions checks for any operation involving an object. These supplement more specific checks 949 protected uint GetObjectPermissions(UUID currentUser, SceneObjectGroup group, bool denyOnLocked)
749 /// implemented by callers.
750 /// </summary>
751 /// <param name="currentUser"></param>
752 /// <param name="objId">This is a scene object group UUID</param>
753 /// <param name="denyOnLocked"></param>
754 /// <returns></returns>
755 protected bool GenericObjectPermission(UUID currentUser, UUID objId, bool denyOnLocked)
756 { 950 {
757 // Default: deny 951 if (group == null)
758 bool permission = false; 952 return 0;
759 bool locked = false;
760 953
761 SceneObjectPart part = m_scene.GetSceneObjectPart(objId); 954 SceneObjectPart root = group.RootPart;
762 955 if (root == null)
763 if (part == null) 956 return 0;
764 return false;
765
766 SceneObjectGroup group = part.ParentGroup;
767 957
768 UUID objectOwner = group.OwnerID; 958 UUID objectOwner = group.OwnerID;
769 locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0); 959 bool locked = denyOnLocked && ((root.OwnerMask & (uint)PermissionMask.Move) == 0);
770 960
771 // People shouldn't be able to do anything with locked objects, except the Administrator 961 if (IsAdministrator(currentUser))
772 // The 'set permissions' runs through a different permission check, so when an object owner
773 // sets an object locked, the only thing that they can do is unlock it.
774 //
775 // Nobody but the object owner can set permissions on an object
776 //
777 if (locked && (!IsAdministrator(currentUser)) && denyOnLocked)
778 { 962 {
779 return false; 963 // do lock on admin owned objects
964 if(locked && currentUser == objectOwner)
965 return (uint)(PermissionMask.AllEffective & ~(PermissionMask.Modify | PermissionMask.Move));
966 return (uint)PermissionMask.AllEffective;
780 } 967 }
781 968
782 // Object owners should be able to edit their own content 969 uint lockmask = (uint)PermissionMask.AllEffective;
970 if(locked)
971 lockmask &= ~(uint)(PermissionMask.Modify | PermissionMask.Move);
972
783 if (currentUser == objectOwner) 973 if (currentUser == objectOwner)
784 { 974 return group.EffectiveOwnerPerms & lockmask;
785 // there is no way that later code can change this back to false 975
786 // so just return true immediately and short circuit the more 976 if (group.IsAttachment)
787 // expensive group checks 977 return 0;
788 return true;
789 978
790 //permission = true; 979 UUID sogGroupID = group.GroupID;
791 } 980 bool notgroudOwned = sogGroupID != objectOwner;
792 else if (group.IsAttachment)
793 {
794 permission = false;
795 }
796 981
797// m_log.DebugFormat( 982 if (notgroudOwned && IsFriendWithPerms(currentUser, objectOwner))
798// "[PERMISSIONS]: group.GroupID = {0}, part.GroupMask = {1}, isGroupMember = {2} for {3}", 983 return group.EffectiveOwnerPerms & lockmask;
799// group.GroupID,
800// m_scene.GetSceneObjectPart(objId).GroupMask,
801// IsGroupMember(group.GroupID, currentUser, 0),
802// currentUser);
803
804 // Group members should be able to edit group objects
805 if ((group.GroupID != UUID.Zero)
806 && ((m_scene.GetSceneObjectPart(objId).GroupMask & (uint)PermissionMask.Modify) != 0)
807 && IsGroupMember(group.GroupID, currentUser, 0))
808 {
809 // Return immediately, so that the administrator can shares group objects
810 return true;
811 }
812 984
813 // Friends with benefits should be able to edit the objects too 985 ulong powers = 0;
814 if (IsFriendWithPerms(currentUser, objectOwner)) 986 if (sogGroupID != UUID.Zero && GroupMemberPowers(sogGroupID, currentUser, ref powers))
815 { 987 {
816 // Return immediately, so that the administrator can share objects with friends 988 if(notgroudOwned)
817 return true; 989 return group.EffectiveGroupOrEveryOnePerms & lockmask;
990
991 if((powers & (ulong)GroupPowers.ObjectManipulate) == 0)
992 return group.EffectiveGroupOrEveryOnePerms & lockmask;
993
994 uint grpEffectiveOwnerPerms = group.EffectiveOwnerPerms & lockmask;
995 if((grpEffectiveOwnerPerms & (uint)PermissionMask.Transfer) == 0)
996 grpEffectiveOwnerPerms &= ~(uint)PermissionMask.Copy;
997 return grpEffectiveOwnerPerms;
818 } 998 }
819 999
820 // Users should be able to edit what is over their land. 1000 return group.EffectiveEveryOnePerms & lockmask;
821 ILandObject parcel = m_scene.LandChannel.GetLandObject(group.AbsolutePosition.X, group.AbsolutePosition.Y); 1001 }
822 if ((parcel != null) && (parcel.LandData.OwnerID == currentUser)) 1002
1003 // get effective object permissions using present presence. So some may depend on requested rights (ie God)
1004 protected uint GetObjectPermissions(ScenePresence sp, SceneObjectGroup group, bool denyOnLocked)
1005 {
1006 if (sp == null || sp.IsDeleted || group == null || group.IsDeleted)
1007 return 0;
1008
1009 SceneObjectPart root = group.RootPart;
1010 if (root == null)
1011 return 0;
1012
1013 UUID spID = sp.UUID;
1014 UUID objectOwner = group.OwnerID;
1015
1016 bool locked = denyOnLocked && ((root.OwnerMask & (uint)PermissionMask.Move) == 0);
1017
1018 if (sp.IsGod)
823 { 1019 {
824 permission = true; 1020 if(locked && spID == objectOwner)
1021 return (uint)(PermissionMask.AllEffective & ~(PermissionMask.Modify | PermissionMask.Move));
1022 return (uint)PermissionMask.AllEffective;
825 } 1023 }
826 1024
827 // Estate users should be able to edit anything in the sim 1025 uint lockmask = (uint)PermissionMask.AllEffective;
828 if (IsEstateManager(currentUser)) 1026 if(locked)
1027 lockmask &= ~(uint)(PermissionMask.Modify | PermissionMask.Move);
1028
1029 if (spID == objectOwner)
1030 return group.EffectiveOwnerPerms & lockmask;
1031
1032 if (group.IsAttachment)
1033 return 0;
1034
1035 UUID sogGroupID = group.GroupID;
1036 bool notgroudOwned = sogGroupID != objectOwner;
1037
1038 if (notgroudOwned && IsFriendWithPerms(spID, objectOwner))
1039 return group.EffectiveOwnerPerms & lockmask;
1040
1041 ulong powers = 0;
1042 if (sogGroupID != UUID.Zero && GroupMemberPowers(sogGroupID, sp, ref powers))
829 { 1043 {
830 permission = true; 1044 if(notgroudOwned)
1045 return group.EffectiveGroupOrEveryOnePerms & lockmask;
1046
1047 if((powers & (ulong)GroupPowers.ObjectManipulate) == 0)
1048 return group.EffectiveGroupOrEveryOnePerms & lockmask;
1049
1050 uint grpEffectiveOwnerPerms = group.EffectiveOwnerPerms & lockmask;
1051 if((grpEffectiveOwnerPerms & (uint)PermissionMask.Transfer) == 0)
1052 grpEffectiveOwnerPerms &= ~(uint)PermissionMask.Copy;
1053 return grpEffectiveOwnerPerms;
831 } 1054 }
832 1055
833 // Admin objects should not be editable by the above 1056 return group.EffectiveEveryOnePerms & lockmask;
834 if (IsAdministrator(objectOwner)) 1057 }
1058
1059 private uint GetObjectItemPermissions(UUID userID, TaskInventoryItem ti)
1060 {
1061 UUID tiOwnerID = ti.OwnerID;
1062 if(tiOwnerID == userID)
1063 return ti.CurrentPermissions;
1064
1065 if(IsAdministrator(userID))
1066 return (uint)PermissionMask.AllEffective;
1067 // ??
1068 if (IsFriendWithPerms(userID, tiOwnerID))
1069 return ti.CurrentPermissions;
1070
1071 UUID tiGroupID = ti.GroupID;
1072 if(tiGroupID != UUID.Zero)
835 { 1073 {
836 permission = false; 1074 ulong powers = 0;
1075 if(GroupMemberPowers(tiGroupID, userID, ref powers))
1076 {
1077 if(tiGroupID == ti.OwnerID)
1078 {
1079 if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
1080 return ti.CurrentPermissions;
1081 }
1082 return ti.GroupPermissions;
1083 }
837 } 1084 }
838 1085
839 // Admin should be able to edit anything in the sim (including admin objects) 1086 return 0;
840 if (IsAdministrator(currentUser)) 1087 }
1088
1089 private uint GetObjectItemPermissions(ScenePresence sp, TaskInventoryItem ti, bool notEveryone)
1090 {
1091 UUID tiOwnerID = ti.OwnerID;
1092 UUID spID = sp.UUID;
1093
1094 if(tiOwnerID == spID)
1095 return ti.CurrentPermissions;
1096
1097 // ??
1098 if (IsFriendWithPerms(spID, tiOwnerID))
1099 return ti.CurrentPermissions;
1100
1101 UUID tiGroupID = ti.GroupID;
1102 if(tiGroupID != UUID.Zero)
841 { 1103 {
842 permission = true; 1104 ulong powers = 0;
1105 if(GroupMemberPowers(tiGroupID, spID, ref powers))
1106 {
1107 if(tiGroupID == ti.OwnerID)
1108 {
1109 if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
1110 return ti.CurrentPermissions;
1111 }
1112 uint p = ti.GroupPermissions;
1113 if(!notEveryone)
1114 p |= ti.EveryonePermissions;
1115 return p;
1116 }
843 } 1117 }
844 1118
845 return permission; 1119 if(notEveryone)
846 } 1120 return 0;
847 1121
1122 return ti.EveryonePermissions;
1123 }
848 #endregion 1124 #endregion
849 1125
850 #region Generic Permissions 1126 #region Generic Permissions
@@ -869,89 +1145,37 @@ namespace OpenSim.Region.CoreModules.World.Permissions
869 1145
870 public bool GenericEstatePermission(UUID user) 1146 public bool GenericEstatePermission(UUID user)
871 { 1147 {
872 // Default: deny
873 bool permission = false;
874
875 // Estate admins should be able to use estate tools 1148 // Estate admins should be able to use estate tools
876 if (IsEstateManager(user)) 1149 if (IsEstateManager(user))
877 permission = true; 1150 return true;
878 1151
879 // Administrators always have permission 1152 // Administrators always have permission
880 if (IsAdministrator(user)) 1153 if (IsAdministrator(user))
881 permission = true; 1154 return true;
882
883 return permission;
884 }
885
886 protected bool GenericParcelPermission(UUID user, ILandObject parcel, ulong groupPowers)
887 {
888 bool permission = false;
889
890 if (parcel.LandData.OwnerID == user)
891 {
892 permission = true;
893 }
894
895 if ((parcel.LandData.GroupID != UUID.Zero) && IsGroupMember(parcel.LandData.GroupID, user, groupPowers))
896 {
897 permission = true;
898 }
899
900 if (IsEstateManager(user))
901 {
902 permission = true;
903 }
904
905 if (IsAdministrator(user))
906 {
907 permission = true;
908 }
909
910 if (m_SimpleBuildPermissions &&
911 (parcel.LandData.Flags & (uint)ParcelFlags.UseAccessList) == 0 && parcel.IsInLandAccessList(user))
912 permission = true;
913 1155
914 return permission; 1156 return false;
915 } 1157 }
916 1158
917 protected bool GenericParcelOwnerPermission(UUID user, ILandObject parcel, ulong groupPowers, bool allowEstateManager) 1159 protected bool GenericParcelOwnerPermission(UUID user, ILandObject parcel, ulong groupPowers, bool allowEstateManager)
918 { 1160 {
919 if (parcel.LandData.OwnerID == user) 1161 if (parcel.LandData.OwnerID == user)
920 {
921 // Returning immediately so that group deeded objects on group deeded land don't trigger a NRE on
922 // the subsequent redundant checks when using lParcelMediaCommandList()
923 // See http://opensimulator.org/mantis/view.php?id=3999 for more details
924 return true; 1162 return true;
925 }
926 1163
927 if (parcel.LandData.IsGroupOwned && IsGroupMember(parcel.LandData.GroupID, user, groupPowers)) 1164 if (parcel.LandData.IsGroupOwned && IsGroupMember(parcel.LandData.GroupID, user, groupPowers))
928 {
929 return true; 1165 return true;
930 }
931 1166
932 if (allowEstateManager && IsEstateManager(user)) 1167 if (allowEstateManager && IsEstateManager(user))
933 {
934 return true; 1168 return true;
935 }
936 1169
937 if (IsAdministrator(user)) 1170 if (IsAdministrator(user))
938 {
939 return true; 1171 return true;
940 }
941 1172
942 return false; 1173 return false;
943 } 1174 }
944
945 protected bool GenericParcelPermission(UUID user, Vector3 pos, ulong groupPowers)
946 {
947 ILandObject parcel = m_scene.LandChannel.GetLandObject(pos.X, pos.Y);
948 if (parcel == null) return false;
949 return GenericParcelPermission(user, parcel, groupPowers);
950 }
951#endregion 1175#endregion
952 1176
953 #region Permission Checks 1177 #region Permission Checks
954 private bool CanAbandonParcel(UUID user, ILandObject parcel, Scene scene) 1178 private bool CanAbandonParcel(UUID user, ILandObject parcel)
955 { 1179 {
956 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1180 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
957 if (m_bypassPermissions) return m_bypassPermissionsValue; 1181 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -959,7 +1183,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
959 return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandRelease, false); 1183 return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandRelease, false);
960 } 1184 }
961 1185
962 private bool CanReclaimParcel(UUID user, ILandObject parcel, Scene scene) 1186 private bool CanReclaimParcel(UUID user, ILandObject parcel)
963 { 1187 {
964 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1188 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
965 if (m_bypassPermissions) return m_bypassPermissionsValue; 1189 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -967,108 +1191,223 @@ namespace OpenSim.Region.CoreModules.World.Permissions
967 return GenericParcelOwnerPermission(user, parcel, 0,true); 1191 return GenericParcelOwnerPermission(user, parcel, 0,true);
968 } 1192 }
969 1193
970 private bool CanDeedParcel(UUID user, ILandObject parcel, Scene scene) 1194 private bool CanDeedParcel(UUID user, ILandObject parcel)
971 { 1195 {
972 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1196 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
973 if (m_bypassPermissions) return m_bypassPermissionsValue; 1197 if (m_bypassPermissions) return m_bypassPermissionsValue;
974 1198
1199 if(parcel.LandData.GroupID == UUID.Zero)
1200 return false;
1201
1202 if (IsAdministrator(user))
1203 return true;
1204
975 if (parcel.LandData.OwnerID != user) // Only the owner can deed! 1205 if (parcel.LandData.OwnerID != user) // Only the owner can deed!
976 return false; 1206 return false;
977 1207
978 ScenePresence sp = scene.GetScenePresence(user); 1208 ScenePresence sp = m_scene.GetScenePresence(user);
979 IClientAPI client = sp.ControllingClient; 1209 if(sp == null)
1210 return false;
980 1211
1212 IClientAPI client = sp.ControllingClient;
981 if ((client.GetGroupPowers(parcel.LandData.GroupID) & (ulong)GroupPowers.LandDeed) == 0) 1213 if ((client.GetGroupPowers(parcel.LandData.GroupID) & (ulong)GroupPowers.LandDeed) == 0)
982 return false; 1214 return false;
983 1215
984 return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandDeed, false); 1216 return true;
985 } 1217 }
986 1218
987 private bool CanDeedObject(UUID user, UUID group, Scene scene) 1219 private bool CanDeedObject(ScenePresence sp, SceneObjectGroup sog, UUID targetGroupID)
988 { 1220 {
989 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1221 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
990 if (m_bypassPermissions) return m_bypassPermissionsValue; 1222 if (m_bypassPermissions) return m_bypassPermissionsValue;
991 1223
992 ScenePresence sp = scene.GetScenePresence(user); 1224 if(sog == null || sog.IsDeleted || sp == null || sp.IsDeleted || targetGroupID == UUID.Zero)
993 IClientAPI client = sp.ControllingClient; 1225 return false;
1226
1227 // object has group already?
1228 if(sog.GroupID != targetGroupID)
1229 return false;
1230
1231 // is effectivelly shared?
1232 if(sog.EffectiveGroupPerms == 0)
1233 return false;
1234
1235 if(sp.IsGod)
1236 return true;
1237
1238 // owned by requester?
1239 if(sog.OwnerID != sp.UUID)
1240 return false;
1241
1242 // owner can transfer?
1243 if((sog.EffectiveOwnerPerms & (uint)PermissionMask.Transfer) == 0)
1244 return false;
1245
1246 // group member ?
1247 ulong powers = 0;
1248 if(!GroupMemberPowers(targetGroupID, sp, ref powers))
1249 return false;
994 1250
995 if ((client.GetGroupPowers(group) & (ulong)GroupPowers.DeedObject) == 0) 1251 // has group rights?
1252 if ((powers & (ulong)GroupPowers.DeedObject) == 0)
996 return false; 1253 return false;
997 1254
998 return true; 1255 return true;
999 } 1256 }
1000 1257
1001 private bool IsGod(UUID user, Scene scene) 1258 private bool CanDuplicateObject(SceneObjectGroup sog, ScenePresence sp)
1002 { 1259 {
1003 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1260 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1004 if (m_bypassPermissions) return m_bypassPermissionsValue; 1261 if (m_bypassPermissions) return m_bypassPermissionsValue;
1005 1262
1006 return IsAdministrator(user); 1263 if (sog == null || sog.IsDeleted || sp == null || sp.IsDeleted)
1264 return false;
1265
1266 uint perms = GetObjectPermissions(sp, sog, false);
1267 if((perms & (uint)PermissionMask.Copy) == 0)
1268 return false;
1269
1270 if(sog.OwnerID != sp.UUID && (perms & (uint)PermissionMask.Transfer) == 0)
1271 return false;
1272
1273 //If they can rez, they can duplicate
1274 return CanRezObject(0, sp.UUID, sog.AbsolutePosition);
1007 } 1275 }
1008 1276
1009 private bool CanDuplicateObject(int objectCount, UUID objectID, UUID owner, Scene scene, Vector3 objectPosition) 1277 private bool CanDeleteObject(SceneObjectGroup sog, ScenePresence sp)
1010 { 1278 {
1279 // ignoring locked. viewers should warn and ask for confirmation
1280
1011 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1281 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1012 if (m_bypassPermissions) return m_bypassPermissionsValue; 1282 if (m_bypassPermissions) return m_bypassPermissionsValue;
1013 1283
1014 if (!GenericObjectPermission(owner, objectID, true)) 1284 if (sog == null || sog.IsDeleted || sp == null || sp.IsDeleted)
1015 {
1016 //They can't even edit the object
1017 return false; 1285 return false;
1018 }
1019 1286
1020 SceneObjectPart part = scene.GetSceneObjectPart(objectID); 1287 if(sog.IsAttachment)
1021 if (part == null)
1022 return false; 1288 return false;
1023 1289
1024 if (part.OwnerID == owner) 1290 UUID sogOwnerID = sog.OwnerID;
1291 UUID spID = sp.UUID;
1292
1293 if(sogOwnerID == spID)
1294 return true;
1295
1296 if (sp.IsGod)
1297 return true;
1298
1299 if (IsFriendWithPerms(sog.UUID, sogOwnerID))
1300 return true;
1301
1302 UUID sogGroupID = sog.GroupID;
1303 if (sogGroupID != UUID.Zero)
1025 { 1304 {
1026 if ((part.OwnerMask & PERM_COPY) == 0) 1305 ulong powers = 0;
1027 return false; 1306 if(GroupMemberPowers(sogGroupID, sp, ref powers))
1307 {
1308 if(sogGroupID == sogOwnerID)
1309 {
1310 if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
1311 return true;
1312 }
1313 return (sog.EffectiveGroupPerms & (uint)PermissionMask.Modify) != 0;
1314 }
1028 } 1315 }
1029 else if (part.GroupID != UUID.Zero) 1316 return false;
1030 { 1317 }
1031 if ((part.OwnerID == part.GroupID) && ((owner != part.LastOwnerID) || ((part.GroupMask & PERM_TRANS) == 0)))
1032 return false;
1033 1318
1034 if ((part.GroupMask & PERM_COPY) == 0) 1319 private bool CanDeleteObjectByIDs(UUID objectID, UUID userID)
1035 return false; 1320 {
1036 } 1321 // ignoring locked. viewers should warn and ask for confirmation
1037 1322
1038 //If they can rez, they can duplicate 1323 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1039 return CanRezObject(objectCount, owner, objectPosition, scene); 1324 if (m_bypassPermissions) return m_bypassPermissionsValue;
1325
1326 SceneObjectGroup sog = m_scene.GetGroupByPrim(objectID);
1327 if (sog == null)
1328 return false;
1329
1330 if(sog.IsAttachment)
1331 return false;
1332
1333 UUID sogOwnerID = sog.OwnerID;
1334
1335 if(sogOwnerID == userID)
1336 return true;
1337
1338 if (IsAdministrator(userID))
1339 return true;
1340
1341 if (IsFriendWithPerms(objectID, sogOwnerID))
1342 return true;
1343
1344 UUID sogGroupID = sog.GroupID;
1345 if (sogGroupID != UUID.Zero)
1346 {
1347 ulong powers = 0;
1348 if(GroupMemberPowers(sogGroupID, userID, ref powers))
1349 {
1350 if(sogGroupID == sogOwnerID)
1351 {
1352 if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
1353 return true;
1354 }
1355 return (sog.EffectiveGroupPerms & (uint)PermissionMask.Modify) != 0;
1356 }
1357 }
1358 return false;
1040 } 1359 }
1041 1360
1042 private bool CanDeleteObject(UUID objectID, UUID deleter, Scene scene) 1361 private bool CanEditObjectByIDs(UUID objectID, UUID userID)
1043 { 1362 {
1044 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1363 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1045 if (m_bypassPermissions) return m_bypassPermissionsValue; 1364 if (m_bypassPermissions) return m_bypassPermissionsValue;
1046 1365
1047 return GenericObjectPermission(deleter, objectID, false); 1366 SceneObjectGroup sog = m_scene.GetGroupByPrim(objectID);
1367 if (sog == null)
1368 return false;
1369
1370 uint perms = GetObjectPermissions(userID, sog, true);
1371 if((perms & (uint)PermissionMask.Modify) == 0)
1372 return false;
1373 return true;
1048 } 1374 }
1049 1375
1050 private bool CanEditObject(UUID objectID, UUID editorID, Scene scene) 1376 private bool CanEditObject(SceneObjectGroup sog, ScenePresence sp)
1051 { 1377 {
1052 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1378 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1053 if (m_bypassPermissions) return m_bypassPermissionsValue; 1379 if (m_bypassPermissions) return m_bypassPermissionsValue;
1054 1380
1055 return GenericObjectPermission(editorID, objectID, false); 1381 if(sog == null || sog.IsDeleted || sp == null || sp.IsDeleted)
1382 return false;
1383
1384 uint perms = GetObjectPermissions(sp, sog, true);
1385 if((perms & (uint)PermissionMask.Modify) == 0)
1386 return false;
1387 return true;
1056 } 1388 }
1057 1389
1058 private bool CanEditObjectInventory(UUID objectID, UUID editorID, Scene scene) 1390 private bool CanEditObjectInventory(UUID objectID, UUID userID)
1059 { 1391 {
1060 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1392 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1061 if (m_bypassPermissions) return m_bypassPermissionsValue; 1393 if (m_bypassPermissions) return m_bypassPermissionsValue;
1062 1394
1063 return GenericObjectPermission(editorID, objectID, false); 1395 SceneObjectGroup sog = m_scene.GetGroupByPrim(objectID);
1396 if (sog == null)
1397 return false;
1398
1399 uint perms = GetObjectPermissions(userID, sog, true);
1400 if((perms & (uint)PermissionMask.Modify) == 0)
1401 return false;
1402 return true;
1064 } 1403 }
1065 1404
1066 private bool CanEditParcelProperties(UUID user, ILandObject parcel, GroupPowers p, Scene scene, bool allowManager) 1405 private bool CanEditParcelProperties(UUID userID, ILandObject parcel, GroupPowers p, bool allowManager)
1067 { 1406 {
1068 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1407 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1069 if (m_bypassPermissions) return m_bypassPermissionsValue; 1408 if (m_bypassPermissions) return m_bypassPermissionsValue;
1070 1409
1071 return GenericParcelOwnerPermission(user, parcel, (ulong)p, false); 1410 return GenericParcelOwnerPermission(userID, parcel, (ulong)p, false);
1072 } 1411 }
1073 1412
1074 /// <summary> 1413 /// <summary>
@@ -1079,18 +1418,18 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1079 /// <param name="user"></param> 1418 /// <param name="user"></param>
1080 /// <param name="scene"></param> 1419 /// <param name="scene"></param>
1081 /// <returns></returns> 1420 /// <returns></returns>
1082 private bool CanEditScript(UUID script, UUID objectID, UUID user, Scene scene) 1421 private bool CanEditScript(UUID script, UUID objectID, UUID userID)
1083 { 1422 {
1084 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1423 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1085 if (m_bypassPermissions) return m_bypassPermissionsValue; 1424 if (m_bypassPermissions) return m_bypassPermissionsValue;
1086 1425
1087 if (m_allowedScriptEditors == UserSet.Administrators && !IsAdministrator(user)) 1426 if (m_allowedScriptEditors == UserSet.Administrators && !IsAdministrator(userID))
1088 return false; 1427 return false;
1089 1428
1090 // Ordinarily, if you can view it, you can edit it 1429 // Ordinarily, if you can view it, you can edit it
1091 // There is no viewing a no mod script 1430 // There is no viewing a no mod script
1092 // 1431 //
1093 return CanViewScript(script, objectID, user, scene); 1432 return CanViewScript(script, objectID, userID);
1094 } 1433 }
1095 1434
1096 /// <summary> 1435 /// <summary>
@@ -1101,7 +1440,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1101 /// <param name="user"></param> 1440 /// <param name="user"></param>
1102 /// <param name="scene"></param> 1441 /// <param name="scene"></param>
1103 /// <returns></returns> 1442 /// <returns></returns>
1104 private bool CanEditNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) 1443 private bool CanEditNotecard(UUID notecard, UUID objectID, UUID user)
1105 { 1444 {
1106 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1445 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1107 if (m_bypassPermissions) return m_bypassPermissionsValue; 1446 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -1132,69 +1471,68 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1132 } 1471 }
1133 else // Prim inventory 1472 else // Prim inventory
1134 { 1473 {
1135 SceneObjectPart part = scene.GetSceneObjectPart(objectID); 1474 SceneObjectPart part = m_scene.GetSceneObjectPart(objectID);
1136
1137 if (part == null) 1475 if (part == null)
1138 return false; 1476 return false;
1139 1477
1140 if (part.OwnerID != user) 1478 SceneObjectGroup sog = part.ParentGroup;
1141 { 1479 if (sog == null)
1142 if (part.GroupID == UUID.Zero) 1480 return false;
1143 return false;
1144
1145 if (!IsGroupMember(part.GroupID, user, 0))
1146 return false;
1147 1481
1148 if ((part.GroupMask & (uint)PermissionMask.Modify) == 0) 1482 // check object mod right
1149 return false; 1483 uint perms = GetObjectPermissions(user, sog, true);
1150 } 1484 if((perms & (uint)PermissionMask.Modify) == 0)
1151 else
1152 {
1153 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
1154 return false; 1485 return false;
1155 }
1156 1486
1157 TaskInventoryItem ti = part.Inventory.GetInventoryItem(notecard); 1487 TaskInventoryItem ti = part.Inventory.GetInventoryItem(notecard);
1158
1159 if (ti == null) 1488 if (ti == null)
1160 return false; 1489 return false;
1161 1490
1162 if (ti.OwnerID != user) 1491 if (ti.OwnerID != user)
1163 { 1492 {
1164 if (ti.GroupID == UUID.Zero) 1493 UUID tiGroupID = ti.GroupID;
1494 if (tiGroupID == UUID.Zero)
1165 return false; 1495 return false;
1166 1496
1167 if (!IsGroupMember(ti.GroupID, user, 0)) 1497 ulong powers = 0;
1498 if(!GroupMemberPowers(tiGroupID, user, ref powers))
1168 return false; 1499 return false;
1500
1501 if(tiGroupID == ti.OwnerID && (powers & (ulong)GroupPowers.ObjectManipulate) != 0)
1502 {
1503 if ((ti.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy)) ==
1504 ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy))
1505 return true;
1506 }
1507 if ((ti.GroupPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy)) ==
1508 ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy))
1509 return true;
1510 return false;
1169 } 1511 }
1170 1512
1171 // Require full perms 1513 // Require full perms
1172 if ((ti.CurrentPermissions & 1514 if ((ti.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy)) !=
1173 ((uint)PermissionMask.Modify | 1515 ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy))
1174 (uint)PermissionMask.Copy)) !=
1175 ((uint)PermissionMask.Modify |
1176 (uint)PermissionMask.Copy))
1177 return false; 1516 return false;
1178 } 1517 }
1179
1180 return true; 1518 return true;
1181 } 1519 }
1182 1520
1183 private bool CanInstantMessage(UUID user, UUID target, Scene startScene) 1521 private bool CanInstantMessage(UUID user, UUID target)
1184 { 1522 {
1185 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1523 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1186 if (m_bypassPermissions) return m_bypassPermissionsValue; 1524 if (m_bypassPermissions) return m_bypassPermissionsValue;
1187 1525
1188 // If the sender is an object, check owner instead 1526 // If the sender is an object, check owner instead
1189 // 1527 //
1190 SceneObjectPart part = startScene.GetSceneObjectPart(user); 1528 SceneObjectPart part = m_scene.GetSceneObjectPart(user);
1191 if (part != null) 1529 if (part != null)
1192 user = part.OwnerID; 1530 user = part.OwnerID;
1193 1531
1194 return GenericCommunicationPermission(user, target); 1532 return GenericCommunicationPermission(user, target);
1195 } 1533 }
1196 1534
1197 private bool CanInventoryTransfer(UUID user, UUID target, Scene startScene) 1535 private bool CanInventoryTransfer(UUID user, UUID target)
1198 { 1536 {
1199 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1537 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1200 if (m_bypassPermissions) return m_bypassPermissionsValue; 1538 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -1202,7 +1540,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1202 return GenericCommunicationPermission(user, target); 1540 return GenericCommunicationPermission(user, target);
1203 } 1541 }
1204 1542
1205 private bool CanIssueEstateCommand(UUID user, Scene requestFromScene, bool ownerCommand) 1543 private bool CanIssueEstateCommand(UUID user, bool ownerCommand)
1206 { 1544 {
1207 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1545 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1208 if (m_bypassPermissions) return m_bypassPermissionsValue; 1546 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -1210,178 +1548,162 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1210 if (IsAdministrator(user)) 1548 if (IsAdministrator(user))
1211 return true; 1549 return true;
1212 1550
1213 if (m_scene.RegionInfo.EstateSettings.IsEstateOwner(user))
1214 return true;
1215
1216 if (ownerCommand) 1551 if (ownerCommand)
1217 return false; 1552 return m_scene.RegionInfo.EstateSettings.IsEstateOwner(user);
1218 1553
1219 return GenericEstatePermission(user); 1554 return IsEstateManager(user);
1220 } 1555 }
1221 1556
1222 private bool CanMoveObject(UUID objectID, UUID moverID, Scene scene) 1557 private bool CanMoveObject(SceneObjectGroup sog, ScenePresence sp)
1223 { 1558 {
1224 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1559 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1560
1561 if(sog == null || sog.IsDeleted || sp == null || sp.IsDeleted)
1562 return false;
1563
1225 if (m_bypassPermissions) 1564 if (m_bypassPermissions)
1226 { 1565 {
1227 SceneObjectPart part = scene.GetSceneObjectPart(objectID); 1566 if (sog.OwnerID != sp.UUID && sog.IsAttachment)
1228 if (part.OwnerID != moverID) 1567 return false;
1229 {
1230 if (!part.ParentGroup.IsDeleted)
1231 {
1232 if (part.ParentGroup.IsAttachment)
1233 return false;
1234 }
1235 }
1236 return m_bypassPermissionsValue; 1568 return m_bypassPermissionsValue;
1237 } 1569 }
1238 1570
1239 bool permission = GenericObjectPermission(moverID, objectID, true); 1571 uint perms = GetObjectPermissions(sp, sog, true);
1240 if (!permission) 1572 if((perms & (uint)PermissionMask.Move) == 0)
1241 { 1573 return false;
1242 if (!m_scene.Entities.ContainsKey(objectID)) 1574 return true;
1243 { 1575 }
1244 return false;
1245 }
1246 1576
1247 // The client 1577 private bool CanObjectEntry(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint)
1248 // may request to edit linked parts, and therefore, it needs 1578 {
1249 // to also check for SceneObjectPart 1579 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1250 1580
1251 // If it's not an object, we cant edit it. 1581 float newX = newPoint.X;
1252 if ((!(m_scene.Entities[objectID] is SceneObjectGroup))) 1582 float newY = newPoint.Y;
1253 {
1254 return false;
1255 }
1256 1583
1584 // allow outside region this is needed for crossings
1585 if (newX < -1f || newX > (m_scene.RegionInfo.RegionSizeX + 1.0f) ||
1586 newY < -1f || newY > (m_scene.RegionInfo.RegionSizeY + 1.0f) )
1587 return true;
1257 1588
1258 SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID]; 1589 if(sog == null || sog.IsDeleted)
1590 return false;
1259 1591
1592 if (m_bypassPermissions)
1593 return m_bypassPermissionsValue;
1260 1594
1261 // UUID taskOwner = null; 1595 ILandObject parcel = m_scene.LandChannel.GetLandObject(newX, newY);
1262 // Added this because at this point in time it wouldn't be wise for 1596 if (parcel == null)
1263 // the administrator object permissions to take effect. 1597 return false;
1264 // UUID objectOwner = task.OwnerID;
1265 1598
1266 // Anyone can move 1599 if ((parcel.LandData.Flags & ((int)ParcelFlags.AllowAPrimitiveEntry)) != 0)
1267 if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0) 1600 return true;
1268 permission = true;
1269 1601
1270 // Locked 1602 if (!enteringRegion)
1271 if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
1272 permission = false;
1273 }
1274 else
1275 { 1603 {
1276 bool locked = false; 1604 Vector3 oldPoint = sog.AbsolutePosition;
1277 if (!m_scene.Entities.ContainsKey(objectID)) 1605 ILandObject fromparcel = m_scene.LandChannel.GetLandObject(oldPoint.X, oldPoint.Y);
1278 { 1606 if (fromparcel != null && fromparcel.Equals(parcel)) // it already entered parcel ????
1279 return false; 1607 return true;
1280 } 1608 }
1281
1282 // If it's not an object, we cant edit it.
1283 if ((!(m_scene.Entities[objectID] is SceneObjectGroup)))
1284 {
1285 return false;
1286 }
1287 1609
1288 SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objectID]; 1610 UUID userID = sog.OwnerID;
1611 LandData landdata = parcel.LandData;
1289 1612
1290 UUID objectOwner = group.OwnerID; 1613 if (landdata.OwnerID == userID)
1291 locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0); 1614 return true;
1292 1615
1293 // This is an exception to the generic object permission. 1616 if (IsAdministrator(userID))
1294 // Administrators who lock their objects should not be able to move them, 1617 return true;
1295 // however generic object permission should return true.
1296 // This keeps locked objects from being affected by random click + drag actions by accident
1297 // and allows the administrator to grab or delete a locked object.
1298 1618
1299 // Administrators and estate managers are still able to click+grab locked objects not 1619 UUID landGroupID = landdata.GroupID;
1300 // owned by them in the scene 1620 if (landGroupID != UUID.Zero)
1301 // This is by design. 1621 {
1622 if ((parcel.LandData.Flags & ((int)ParcelFlags.AllowGroupObjectEntry)) != 0)
1623 return IsGroupMember(landGroupID, userID, 0);
1302 1624
1303 if (locked && (moverID == objectOwner)) 1625 if (landdata.IsGroupOwned && IsGroupMember(landGroupID, userID, (ulong)GroupPowers.AllowRez))
1304 return false; 1626 return true;
1305 } 1627 }
1306 return permission; 1628
1629 //Otherwise, false!
1630 return false;
1307 } 1631 }
1308 1632
1309 private bool CanObjectEntry(UUID objectID, bool enteringRegion, Vector3 newPoint, Scene scene) 1633 private bool OnObjectEnterWithScripts(SceneObjectGroup sog, ILandObject parcel)
1310 { 1634 {
1311 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1635 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1312 if (m_bypassPermissions) return m_bypassPermissionsValue;
1313
1314 1636
1315 // allow outide region?? 1637 if(sog == null || sog.IsDeleted)
1316 if (newPoint.X < -1f || newPoint.Y < -1f) 1638 return false;
1317 return true;
1318 if (newPoint.X > scene.RegionInfo.RegionSizeX + 1.0f || newPoint.Y > scene.RegionInfo.RegionSizeY + 1.0f)
1319 {
1320 return true;
1321 }
1322 1639
1323 SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID]; 1640 if (m_bypassPermissions)
1641 return m_bypassPermissionsValue;
1324 1642
1325 ILandObject land = m_scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y); 1643 if (parcel == null)
1644 return true;
1326 1645
1327 if (!enteringRegion) 1646 int checkflags = ((int)ParcelFlags.AllowAPrimitiveEntry);
1328 { 1647 bool scripts = (sog.ScriptCount() > 0);
1329 ILandObject fromland = m_scene.LandChannel.GetLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y); 1648 if(scripts)
1649 checkflags |= ((int)ParcelFlags.AllowOtherScripts);
1330 1650
1331 if (fromland == land) // Not entering 1651 if ((parcel.LandData.Flags & checkflags) == checkflags)
1332 return true; 1652 return true;
1333 }
1334 1653
1335 if (land == null) 1654 UUID userID = sog.OwnerID;
1336 { 1655 LandData landdata = parcel.LandData;
1337 return false;
1338 }
1339 1656
1340 if ((land.LandData.Flags & ((int)ParcelFlags.AllowAPrimitiveEntry)) != 0) 1657 if (landdata.OwnerID == userID)
1341 {
1342 return true; 1658 return true;
1343 }
1344 1659
1345 if (!m_scene.Entities.ContainsKey(objectID)) 1660 if (IsAdministrator(userID))
1346 { 1661 return true;
1347 return false;
1348 }
1349 1662
1350 // If it's not an object, we cant edit it. 1663 UUID landGroupID = landdata.GroupID;
1351 if (!(m_scene.Entities[objectID] is SceneObjectGroup)) 1664 if (landGroupID != UUID.Zero)
1352 { 1665 {
1353 return false; 1666 checkflags = (int)ParcelFlags.AllowGroupObjectEntry;
1354 } 1667 if(scripts)
1668 checkflags |= ((int)ParcelFlags.AllowGroupScripts);
1355 1669
1670 if ((parcel.LandData.Flags & checkflags) == checkflags)
1671 return IsGroupMember(landGroupID, userID, 0);
1356 1672
1357 if (GenericParcelPermission(task.OwnerID, newPoint, 0)) 1673 if (landdata.IsGroupOwned && IsGroupMember(landGroupID, userID, (ulong)GroupPowers.AllowRez))
1358 { 1674 return true;
1359 return true;
1360 } 1675 }
1361 1676
1362 //Otherwise, false! 1677 //Otherwise, false!
1363 return false; 1678 return false;
1364 } 1679 }
1365 1680
1366 private bool CanReturnObjects(ILandObject land, UUID user, List<SceneObjectGroup> objects, Scene scene) 1681
1682 private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
1367 { 1683 {
1368 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1684 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1369 if (m_bypassPermissions) return m_bypassPermissionsValue; 1685 if (m_bypassPermissions) return m_bypassPermissionsValue;
1370 1686
1371 GroupPowers powers; 1687 if(sp == null)
1372 ILandObject l; 1688 return true; // assuming that in this case rights are as owner
1373 1689
1374 ScenePresence sp = scene.GetScenePresence(user); 1690 UUID userID = sp.UUID;
1375 if (sp == null) 1691 bool isPrivUser = sp.IsGod || IsEstateManager(userID);
1376 return false;
1377 1692
1378 IClientAPI client = sp.ControllingClient; 1693 IClientAPI client = sp.ControllingClient;
1379 1694
1695 ulong powers = 0;
1696 ILandObject l;
1697
1380 foreach (SceneObjectGroup g in new List<SceneObjectGroup>(objects)) 1698 foreach (SceneObjectGroup g in new List<SceneObjectGroup>(objects))
1381 { 1699 {
1382 // Any user can return their own objects at any time 1700 if(g.IsAttachment)
1383 // 1701 {
1384 if (GenericObjectPermission(user, g.UUID, false)) 1702 objects.Remove(g);
1703 continue;
1704 }
1705
1706 if (isPrivUser || g.OwnerID == userID)
1385 continue; 1707 continue;
1386 1708
1387 // This is a short cut for efficiency. If land is non-null, 1709 // This is a short cut for efficiency. If land is non-null,
@@ -1395,39 +1717,40 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1395 else 1717 else
1396 { 1718 {
1397 Vector3 pos = g.AbsolutePosition; 1719 Vector3 pos = g.AbsolutePosition;
1398 1720 l = m_scene.LandChannel.GetLandObject(pos.X, pos.Y);
1399 l = scene.LandChannel.GetLandObject(pos.X, pos.Y);
1400 } 1721 }
1401 1722
1402 // If it's not over any land, then we can't do a thing 1723 // If it's not over any land, then we can't do a thing
1403 if (l == null) 1724 if (l == null || l.LandData == null)
1404 { 1725 {
1405 objects.Remove(g); 1726 objects.Remove(g);
1406 continue; 1727 continue;
1407 } 1728 }
1408 1729
1730 LandData ldata = l.LandData;
1409 // If we own the land outright, then allow 1731 // If we own the land outright, then allow
1410 // 1732 //
1411 if (l.LandData.OwnerID == user) 1733 if (ldata.OwnerID == userID)
1412 continue; 1734 continue;
1413 1735
1414 // Group voodoo 1736 // Group voodoo
1415 // 1737 //
1416 if (l.LandData.IsGroupOwned) 1738 if (ldata.IsGroupOwned)
1417 { 1739 {
1418 powers = (GroupPowers)client.GetGroupPowers(l.LandData.GroupID); 1740 UUID lGroupID = ldata.GroupID;
1419 // Not a group member, or no rights at all 1741 // Not a group member, or no rights at all
1420 // 1742 //
1421 if (powers == (GroupPowers)0) 1743 powers = client.GetGroupPowers(lGroupID);
1744 if(powers == 0)
1422 { 1745 {
1423 objects.Remove(g); 1746 objects.Remove(g);
1424 continue; 1747 continue;
1425 } 1748 }
1426 1749
1427 // Group deeded object? 1750 // Group deeded object?
1428 // 1751 //
1429 if (g.OwnerID == l.LandData.GroupID && 1752 if (g.OwnerID == lGroupID &&
1430 (powers & GroupPowers.ReturnGroupOwned) == (GroupPowers)0) 1753 (powers & (ulong)GroupPowers.ReturnGroupOwned) == 0)
1431 { 1754 {
1432 objects.Remove(g); 1755 objects.Remove(g);
1433 continue; 1756 continue;
@@ -1435,14 +1758,14 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1435 1758
1436 // Group set object? 1759 // Group set object?
1437 // 1760 //
1438 if (g.GroupID == l.LandData.GroupID && 1761 if (g.GroupID == lGroupID &&
1439 (powers & GroupPowers.ReturnGroupSet) == (GroupPowers)0) 1762 (powers & (ulong)GroupPowers.ReturnGroupSet) == 0)
1440 { 1763 {
1441 objects.Remove(g); 1764 objects.Remove(g);
1442 continue; 1765 continue;
1443 } 1766 }
1444 1767
1445 if ((powers & GroupPowers.ReturnNonGroup) == (GroupPowers)0) 1768 if ((powers & (ulong)GroupPowers.ReturnNonGroup) == 0)
1446 { 1769 {
1447 objects.Remove(g); 1770 objects.Remove(g);
1448 continue; 1771 continue;
@@ -1465,41 +1788,41 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1465 return true; 1788 return true;
1466 } 1789 }
1467 1790
1468 private bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene) 1791 private bool CanRezObject(int objectCount, UUID userID, Vector3 objectPosition)
1469 { 1792 {
1470 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1793 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1471 if (m_bypassPermissions) return m_bypassPermissionsValue; 1794 if (m_bypassPermissions)
1795 return m_bypassPermissionsValue;
1472 1796
1473// m_log.DebugFormat("[PERMISSIONS MODULE]: Checking rez object at {0} in {1}", objectPosition, m_scene.Name); 1797// m_log.DebugFormat("[PERMISSIONS MODULE]: Checking rez object at {0} in {1}", objectPosition, m_scene.Name);
1474 1798
1475 ILandObject parcel = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y); 1799 ILandObject parcel = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y);
1476 if (parcel == null) 1800 if (parcel == null || parcel.LandData == null)
1477 return false; 1801 return false;
1478 1802
1479 if ((parcel.LandData.Flags & (uint)ParcelFlags.CreateObjects) != 0) 1803 LandData landdata = parcel.LandData;
1480 { 1804 if ((userID == landdata.OwnerID))
1481 return true; 1805 return true;
1482 } 1806
1483 else if ((owner == parcel.LandData.OwnerID) || IsAdministrator(owner)) 1807 if ((landdata.Flags & (uint)ParcelFlags.CreateObjects) != 0)
1484 {
1485 return true;
1486 }
1487 else if (((parcel.LandData.Flags & (uint)ParcelFlags.CreateGroupObjects) != 0)
1488 && (parcel.LandData.GroupID != UUID.Zero) && IsGroupMember(parcel.LandData.GroupID, owner, 0))
1489 {
1490 return true; 1808 return true;
1491 } 1809
1492 else if (parcel.LandData.GroupID != UUID.Zero && IsGroupMember(parcel.LandData.GroupID, owner, (ulong)GroupPowers.AllowRez)) 1810 if(IsAdministrator(userID))
1493 {
1494 return true; 1811 return true;
1495 } 1812
1496 else 1813 if(landdata.GroupID != UUID.Zero)
1497 { 1814 {
1498 return false; 1815 if ((landdata.Flags & (uint)ParcelFlags.CreateGroupObjects) != 0)
1816 return IsGroupMember(landdata.GroupID, userID, 0);
1817
1818 if (landdata.IsGroupOwned && IsGroupMember(landdata.GroupID, userID, (ulong)GroupPowers.AllowRez))
1819 return true;
1499 } 1820 }
1821
1822 return false;
1500 } 1823 }
1501 1824
1502 private bool CanRunConsoleCommand(UUID user, Scene requestFromScene) 1825 private bool CanRunConsoleCommand(UUID user)
1503 { 1826 {
1504 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1827 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1505 if (m_bypassPermissions) return m_bypassPermissionsValue; 1828 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -1508,15 +1831,43 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1508 return IsAdministrator(user); 1831 return IsAdministrator(user);
1509 } 1832 }
1510 1833
1511 private bool CanRunScript(UUID script, UUID objectID, UUID user, Scene scene) 1834 private bool CanRunScript(TaskInventoryItem scriptitem, SceneObjectPart part)
1512 { 1835 {
1513 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1836 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1514 if (m_bypassPermissions) return m_bypassPermissionsValue; 1837 if (m_bypassPermissions) return m_bypassPermissionsValue;
1515 1838
1516 return true; 1839 if(scriptitem == null || part == null)
1840 return false;
1841
1842 SceneObjectGroup sog = part.ParentGroup;
1843 if(sog == null)
1844 return false;
1845
1846 Vector3 pos = sog.AbsolutePosition;
1847 ILandObject parcel = m_scene.LandChannel.GetLandObject(pos.X, pos.Y);
1848 if (parcel == null)
1849 return false;
1850
1851 LandData ldata = parcel.LandData;
1852 if(ldata == null)
1853 return false;
1854
1855 uint lflags = ldata.Flags;
1856
1857 if ((lflags & (uint)ParcelFlags.AllowOtherScripts) != 0)
1858 return true;
1859
1860 if ((part.OwnerID == ldata.OwnerID))
1861 return true;
1862
1863 if (((lflags & (uint)ParcelFlags.AllowGroupScripts) != 0)
1864 && (ldata.GroupID != UUID.Zero) && (ldata.GroupID == part.GroupID))
1865 return true;
1866
1867 return GenericEstatePermission(part.OwnerID);
1517 } 1868 }
1518 1869
1519 private bool CanSellParcel(UUID user, ILandObject parcel, Scene scene) 1870 private bool CanSellParcel(UUID user, ILandObject parcel)
1520 { 1871 {
1521 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1872 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1522 if (m_bypassPermissions) return m_bypassPermissionsValue; 1873 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -1524,7 +1875,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1524 return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandSetSale, true); 1875 return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandSetSale, true);
1525 } 1876 }
1526 1877
1527 private bool CanSellGroupObject(UUID userID, UUID groupID, Scene scene) 1878 private bool CanSellGroupObject(UUID userID, UUID groupID)
1528 { 1879 {
1529 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1880 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1530 if (m_bypassPermissions) return m_bypassPermissionsValue; 1881 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -1532,66 +1883,159 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1532 return IsGroupMember(groupID, userID, (ulong)GroupPowers.ObjectSetForSale); 1883 return IsGroupMember(groupID, userID, (ulong)GroupPowers.ObjectSetForSale);
1533 } 1884 }
1534 1885
1535 private bool CanTakeObject(UUID objectID, UUID stealer, Scene scene) 1886 private bool CanSellObjectByUserID(SceneObjectGroup sog, UUID userID, byte saleType)
1536 { 1887 {
1537 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1888 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1538 if (m_bypassPermissions) return m_bypassPermissionsValue; 1889 if (m_bypassPermissions) return m_bypassPermissionsValue;
1539 1890
1540 return GenericObjectPermission(stealer,objectID, false); 1891 if (sog == null || sog.IsDeleted || userID == UUID.Zero)
1892 return false;
1893
1894 // sell is not a attachment op
1895 if(sog.IsAttachment)
1896 return false;
1897
1898 if(IsAdministrator(userID))
1899 return true;
1900
1901 uint sogEffectiveOwnerPerms = sog.EffectiveOwnerPerms;
1902 if((sogEffectiveOwnerPerms & (uint)PermissionMask.Transfer) == 0)
1903 return false;
1904
1905 if(saleType == (byte)SaleType.Copy &&
1906 (sogEffectiveOwnerPerms & (uint)PermissionMask.Copy) == 0)
1907 return false;
1908
1909 UUID sogOwnerID = sog.OwnerID;
1910
1911 if(sogOwnerID == userID)
1912 return true;
1913
1914 // else only group owned can be sold by members with powers
1915 UUID sogGroupID = sog.GroupID;
1916 if(sog.OwnerID != sogGroupID || sogGroupID == UUID.Zero)
1917 return false;
1918
1919 return IsGroupMember(sogGroupID, userID, (ulong)GroupPowers.ObjectSetForSale);
1541 } 1920 }
1542 1921
1543 private bool CanTakeCopyObject(UUID objectID, UUID userID, Scene inScene) 1922 private bool CanSellObject(SceneObjectGroup sog, ScenePresence sp, byte saleType)
1544 { 1923 {
1545 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1924 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1546 if (m_bypassPermissions) return m_bypassPermissionsValue; 1925 if (m_bypassPermissions) return m_bypassPermissionsValue;
1547 1926
1548 bool permission = GenericObjectPermission(userID, objectID, false); 1927 if (sog == null || sog.IsDeleted || sp == null || sp.IsDeleted)
1928 return false;
1549 1929
1550 SceneObjectGroup so = (SceneObjectGroup)m_scene.Entities[objectID]; 1930 // sell is not a attachment op
1931 if(sog.IsAttachment)
1932 return false;
1551 1933
1552 if (!permission) 1934 if(sp.IsGod)
1553 { 1935 return true;
1554 if (!m_scene.Entities.ContainsKey(objectID))
1555 {
1556 return false;
1557 }
1558 1936
1559 // If it's not an object, we cant edit it. 1937 uint sogEffectiveOwnerPerms = sog.EffectiveOwnerPerms;
1560 if (!(m_scene.Entities[objectID] is SceneObjectGroup)) 1938 if((sogEffectiveOwnerPerms & (uint)PermissionMask.Transfer) == 0)
1561 { 1939 return false;
1562 return false;
1563 }
1564 1940
1565 // UUID taskOwner = null; 1941 if(saleType == (byte)SaleType.Copy &&
1566 // Added this because at this point in time it wouldn't be wise for 1942 (sogEffectiveOwnerPerms & (uint)PermissionMask.Copy) == 0)
1567 // the administrator object permissions to take effect. 1943 return false;
1568 // UUID objectOwner = task.OwnerID;
1569 1944
1570 if ((so.RootPart.EveryoneMask & PERM_COPY) != 0) 1945 UUID userID = sp.UUID;
1571 permission = true; 1946 UUID sogOwnerID = sog.OwnerID;
1572 }
1573 1947
1574 if (so.OwnerID != userID) 1948 if(sogOwnerID == userID)
1575 { 1949 return true;
1576 if ((so.GetEffectivePermissions() & (PERM_COPY | PERM_TRANS)) != (PERM_COPY | PERM_TRANS)) 1950
1577 permission = false; 1951 // else only group owned can be sold by members with powers
1578 } 1952 UUID sogGroupID = sog.GroupID;
1579 else 1953 if(sog.OwnerID != sogGroupID || sogGroupID == UUID.Zero)
1954 return false;
1955
1956 ulong powers = 0;
1957 if(!GroupMemberPowers(sogGroupID, sp, ref powers))
1958 return false;
1959
1960 if((powers & (ulong)GroupPowers.ObjectSetForSale) == 0)
1961 return false;
1962
1963 return true;
1964 }
1965
1966 private bool CanTakeObject(SceneObjectGroup sog, ScenePresence sp)
1967 {
1968 // ignore locked, viewers shell ask for confirmation
1969 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1970 if (m_bypassPermissions) return m_bypassPermissionsValue;
1971
1972 if (sog == null || sog.IsDeleted || sp == null || sp.IsDeleted)
1973 return false;
1974
1975 // take is not a attachment op
1976 if(sog.IsAttachment)
1977 return false;
1978
1979 UUID sogOwnerID = sog.OwnerID;
1980 UUID spID = sp.UUID;
1981
1982 if(sogOwnerID == spID)
1983 return true;
1984
1985 if (sp.IsGod)
1986 return true;
1987
1988 if((sog.EffectiveOwnerPerms & (uint)PermissionMask.Transfer) == 0)
1989 return false;
1990
1991 if (IsFriendWithPerms(sog.UUID, sogOwnerID))
1992 return true;
1993
1994 UUID sogGroupID = sog.GroupID;
1995 if (sogGroupID != UUID.Zero)
1580 { 1996 {
1581 if ((so.GetEffectivePermissions() & PERM_COPY) != PERM_COPY) 1997 ulong powers = 0;
1582 permission = false; 1998 if(GroupMemberPowers(sogGroupID, sp, ref powers))
1999 {
2000 if(sogGroupID == sogOwnerID)
2001 {
2002 if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
2003 return true;
2004 }
2005 return (sog.EffectiveGroupPerms & (uint)PermissionMask.Modify) != 0;
2006 }
1583 } 2007 }
2008 return false;
2009 }
1584 2010
1585 return permission; 2011 private bool CanTakeCopyObject(SceneObjectGroup sog, ScenePresence sp)
2012 {
2013 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
2014 if (m_bypassPermissions) return m_bypassPermissionsValue;
2015
2016 if (sog == null || sog.IsDeleted || sp == null || sp.IsDeleted)
2017 return false;
2018
2019 // refuse on attachments
2020 if(sog.IsAttachment && !sp.IsGod)
2021 return false;
2022
2023 uint perms = GetObjectPermissions(sp, sog, true);
2024 if((perms & (uint)PermissionMask.Copy) == 0)
2025 return false;
2026
2027 if(sog.OwnerID != sp.UUID && (perms & (uint)PermissionMask.Transfer) == 0)
2028 return false;
2029 return true;
1586 } 2030 }
1587 2031
1588 private bool CanTerraformLand(UUID user, Vector3 position, Scene requestFromScene) 2032 private bool CanTerraformLand(UUID userID, Vector3 position)
1589 { 2033 {
1590 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2034 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1591 if (m_bypassPermissions) return m_bypassPermissionsValue; 2035 if (m_bypassPermissions) return m_bypassPermissionsValue;
1592 2036
1593 // Estate override 2037 // Estate override
1594 if (GenericEstatePermission(user)) 2038 if (GenericEstatePermission(userID))
1595 return true; 2039 return true;
1596 2040
1597 float X = position.X; 2041 float X = position.X;
@@ -1609,13 +2053,19 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1609 ILandObject parcel = m_scene.LandChannel.GetLandObject(X, Y); 2053 ILandObject parcel = m_scene.LandChannel.GetLandObject(X, Y);
1610 if (parcel == null) 2054 if (parcel == null)
1611 return false; 2055 return false;
1612 2056
1613 // Others allowed to terraform? 2057 LandData landdata = parcel.LandData;
1614 if ((parcel.LandData.Flags & ((int)ParcelFlags.AllowTerraform)) != 0) 2058 if (landdata == null)
2059 return false;
2060
2061 if ((landdata.Flags & ((int)ParcelFlags.AllowTerraform)) != 0)
1615 return true; 2062 return true;
1616 2063
1617 // Land owner can terraform too 2064 if(landdata.OwnerID == userID)
1618 if (parcel != null && GenericParcelPermission(user, parcel, (ulong)GroupPowers.AllowEditLand)) 2065 return true;
2066
2067 if (landdata.IsGroupOwned && parcel.LandData.GroupID != UUID.Zero &&
2068 IsGroupMember(landdata.GroupID, userID, (ulong)GroupPowers.AllowEditLand))
1619 return true; 2069 return true;
1620 2070
1621 return false; 2071 return false;
@@ -1629,15 +2079,19 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1629 /// <param name="user"></param> 2079 /// <param name="user"></param>
1630 /// <param name="scene"></param> 2080 /// <param name="scene"></param>
1631 /// <returns></returns> 2081 /// <returns></returns>
1632 private bool CanViewScript(UUID script, UUID objectID, UUID user, Scene scene) 2082 private bool CanViewScript(UUID script, UUID objectID, UUID userID)
1633 { 2083 {
1634 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2084 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1635 if (m_bypassPermissions) return m_bypassPermissionsValue; 2085 if (m_bypassPermissions) return m_bypassPermissionsValue;
1636 2086
2087 // A god is a god is a god
2088 if (IsAdministrator(userID))
2089 return true;
2090
1637 if (objectID == UUID.Zero) // User inventory 2091 if (objectID == UUID.Zero) // User inventory
1638 { 2092 {
1639 IInventoryService invService = m_scene.InventoryService; 2093 IInventoryService invService = m_scene.InventoryService;
1640 InventoryItemBase assetRequestItem = invService.GetItem(user, script); 2094 InventoryItemBase assetRequestItem = invService.GetItem(userID, script);
1641 if (assetRequestItem == null && LibraryRootFolder != null) // Library item 2095 if (assetRequestItem == null && LibraryRootFolder != null) // Library item
1642 { 2096 {
1643 assetRequestItem = LibraryRootFolder.FindItem(script); 2097 assetRequestItem = LibraryRootFolder.FindItem(script);
@@ -1657,60 +2111,53 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1657 // readable only if it's really full perms 2111 // readable only if it's really full perms
1658 // 2112 //
1659 if ((assetRequestItem.CurrentPermissions & 2113 if ((assetRequestItem.CurrentPermissions &
2114/*
1660 ((uint)PermissionMask.Modify | 2115 ((uint)PermissionMask.Modify |
1661 (uint)PermissionMask.Copy | 2116 (uint)PermissionMask.Copy |
1662 (uint)PermissionMask.Transfer)) != 2117 (uint)PermissionMask.Transfer)) !=
1663 ((uint)PermissionMask.Modify | 2118 ((uint)PermissionMask.Modify |
1664 (uint)PermissionMask.Copy | 2119 (uint)PermissionMask.Copy |
1665 (uint)PermissionMask.Transfer)) 2120 (uint)PermissionMask.Transfer))
2121*/
2122 (uint)(PermissionMask.Modify | PermissionMask.Copy)) !=
2123 (uint)(PermissionMask.Modify | PermissionMask.Copy))
1666 return false; 2124 return false;
1667 } 2125 }
1668 else // Prim inventory 2126 else // Prim inventory
1669 { 2127 {
1670 SceneObjectPart part = scene.GetSceneObjectPart(objectID); 2128 SceneObjectPart part = m_scene.GetSceneObjectPart(objectID);
1671
1672 if (part == null) 2129 if (part == null)
1673 return false; 2130 return false;
1674 2131
1675 if (part.OwnerID != user) 2132 SceneObjectGroup sog = part.ParentGroup;
1676 { 2133 if (sog == null)
1677 if (part.GroupID == UUID.Zero) 2134 return false;
1678 return false;
1679
1680 if (!IsGroupMember(part.GroupID, user, 0))
1681 return false;
1682 2135
1683 if ((part.GroupMask & (uint)PermissionMask.Modify) == 0) 2136 uint perms = GetObjectPermissions(userID, sog, true);
1684 return false; 2137 if((perms & (uint)PermissionMask.Modify) == 0)
1685 } 2138 return false;
1686 else
1687 {
1688 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
1689 return false;
1690 }
1691 2139
1692 TaskInventoryItem ti = part.Inventory.GetInventoryItem(script); 2140 TaskInventoryItem ti = part.Inventory.GetInventoryItem(script);
1693 2141
1694 if (ti == null) 2142// if (ti == null || ti.InvType != (int)InventoryType.LSL)
2143 if (ti == null) // legacy may not have type
1695 return false; 2144 return false;
1696 2145
1697 if (ti.OwnerID != user) 2146 uint itperms = GetObjectItemPermissions(userID, ti);
1698 {
1699 if (ti.GroupID == UUID.Zero)
1700 return false;
1701
1702 if (!IsGroupMember(ti.GroupID, user, 0))
1703 return false;
1704 }
1705 2147
1706 // Require full perms 2148 // Require full perms
1707 if ((ti.CurrentPermissions & 2149
1708 ((uint)PermissionMask.Modify | 2150 if ((itperms &
2151/*
2152 ((uint)(PermissionMask.Modify |
1709 (uint)PermissionMask.Copy | 2153 (uint)PermissionMask.Copy |
1710 (uint)PermissionMask.Transfer)) != 2154 (uint)PermissionMask.Transfer)) !=
1711 ((uint)PermissionMask.Modify | 2155 ((uint)PermissionMask.Modify |
1712 (uint)PermissionMask.Copy | 2156 (uint)PermissionMask.Copy |
1713 (uint)PermissionMask.Transfer)) 2157 (uint)PermissionMask.Transfer))
2158*/
2159 (uint)(PermissionMask.Modify | PermissionMask.Copy)) !=
2160 (uint)(PermissionMask.Modify | PermissionMask.Copy))
1714 return false; 2161 return false;
1715 } 2162 }
1716 2163
@@ -1725,15 +2172,19 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1725 /// <param name="user"></param> 2172 /// <param name="user"></param>
1726 /// <param name="scene"></param> 2173 /// <param name="scene"></param>
1727 /// <returns></returns> 2174 /// <returns></returns>
1728 private bool CanViewNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) 2175 private bool CanViewNotecard(UUID notecard, UUID objectID, UUID userID)
1729 { 2176 {
1730 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2177 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1731 if (m_bypassPermissions) return m_bypassPermissionsValue; 2178 if (m_bypassPermissions) return m_bypassPermissionsValue;
1732 2179
2180 // A god is a god is a god
2181 if (IsAdministrator(userID))
2182 return true;
2183
1733 if (objectID == UUID.Zero) // User inventory 2184 if (objectID == UUID.Zero) // User inventory
1734 { 2185 {
1735 IInventoryService invService = m_scene.InventoryService; 2186 IInventoryService invService = m_scene.InventoryService;
1736 InventoryItemBase assetRequestItem = invService.GetItem(user, notecard); 2187 InventoryItemBase assetRequestItem = invService.GetItem(userID, notecard);
1737 if (assetRequestItem == null && LibraryRootFolder != null) // Library item 2188 if (assetRequestItem == null && LibraryRootFolder != null) // Library item
1738 { 2189 {
1739 assetRequestItem = LibraryRootFolder.FindItem(notecard); 2190 assetRequestItem = LibraryRootFolder.FindItem(notecard);
@@ -1751,40 +2202,29 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1751 } 2202 }
1752 else // Prim inventory 2203 else // Prim inventory
1753 { 2204 {
1754 SceneObjectPart part = scene.GetSceneObjectPart(objectID); 2205 SceneObjectPart part = m_scene.GetSceneObjectPart(objectID);
1755
1756 if (part == null) 2206 if (part == null)
1757 return false; 2207 return false;
1758 2208
1759 if (part.OwnerID != user) 2209 SceneObjectGroup sog = part.ParentGroup;
1760 { 2210 if (sog == null)
1761 if (part.GroupID == UUID.Zero) 2211 return false;
1762 return false;
1763
1764 if (!IsGroupMember(part.GroupID, user, 0))
1765 return false;
1766 }
1767 2212
1768 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) 2213 uint perms = GetObjectPermissions(userID, sog, true);
2214 if((perms & (uint)PermissionMask.Modify) == 0)
1769 return false; 2215 return false;
1770 2216
1771 TaskInventoryItem ti = part.Inventory.GetInventoryItem(notecard); 2217 TaskInventoryItem ti = part.Inventory.GetInventoryItem(notecard);
1772 2218
2219// if (ti == null || ti.InvType != (int)InventoryType.Notecard)
1773 if (ti == null) 2220 if (ti == null)
1774 return false; 2221 return false;
1775 2222
1776 if (ti.OwnerID != user) 2223 uint itperms = GetObjectItemPermissions(userID, ti);
1777 {
1778 if (ti.GroupID == UUID.Zero)
1779 return false;
1780
1781 if (!IsGroupMember(ti.GroupID, user, 0))
1782 return false;
1783 }
1784 2224
1785 // Notecards are always readable unless no copy 2225 // Notecards are always readable unless no copy
1786 // 2226 //
1787 if ((ti.CurrentPermissions & 2227 if ((itperms &
1788 (uint)PermissionMask.Copy) != 2228 (uint)PermissionMask.Copy) !=
1789 (uint)PermissionMask.Copy) 2229 (uint)PermissionMask.Copy)
1790 return false; 2230 return false;
@@ -1800,7 +2240,14 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1800 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2240 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1801 if (m_bypassPermissions) return m_bypassPermissionsValue; 2241 if (m_bypassPermissions) return m_bypassPermissionsValue;
1802 2242
1803 return GenericObjectPermission(userID, objectID, false); 2243 SceneObjectGroup sog = m_scene.GetGroupByPrim(objectID);
2244 if (sog == null)
2245 return false;
2246
2247 uint perms = GetObjectPermissions(userID, sog, true);
2248 if((perms & (uint)PermissionMask.Modify) == 0)
2249 return false;
2250 return true;
1804 } 2251 }
1805 2252
1806 private bool CanDelinkObject(UUID userID, UUID objectID) 2253 private bool CanDelinkObject(UUID userID, UUID objectID)
@@ -1808,10 +2255,17 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1808 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2255 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1809 if (m_bypassPermissions) return m_bypassPermissionsValue; 2256 if (m_bypassPermissions) return m_bypassPermissionsValue;
1810 2257
1811 return GenericObjectPermission(userID, objectID, false); 2258 SceneObjectGroup sog = m_scene.GetGroupByPrim(objectID);
2259 if (sog == null)
2260 return false;
2261
2262 uint perms = GetObjectPermissions(userID, sog, true);
2263 if((perms & (uint)PermissionMask.Modify) == 0)
2264 return false;
2265 return true;
1812 } 2266 }
1813 2267
1814 private bool CanBuyLand(UUID userID, ILandObject parcel, Scene scene) 2268 private bool CanBuyLand(UUID userID, ILandObject parcel)
1815 { 2269 {
1816 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2270 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1817 if (m_bypassPermissions) return m_bypassPermissionsValue; 2271 if (m_bypassPermissions) return m_bypassPermissionsValue;
@@ -1824,6 +2278,130 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1824 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2278 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1825 if (m_bypassPermissions) return m_bypassPermissionsValue; 2279 if (m_bypassPermissions) return m_bypassPermissionsValue;
1826 2280
2281 SceneObjectPart part = m_scene.GetSceneObjectPart(objectID);
2282 if (part == null)
2283 return false;
2284
2285 SceneObjectGroup sog = part.ParentGroup;
2286 if (sog == null)
2287 return false;
2288
2289 uint perms = GetObjectPermissions(userID, sog, true);
2290 if((perms & (uint)PermissionMask.Modify) == 0)
2291 return false;
2292
2293 TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID);
2294 if(ti == null)
2295 return false;
2296
2297 uint itperms = GetObjectItemPermissions(userID, ti);
2298
2299 if((itperms & (uint)PermissionMask.Copy) == 0)
2300 return false;
2301
2302 if(sog.OwnerID != userID && (itperms & (uint)PermissionMask.Transfer) == 0)
2303 return false;
2304
2305 return true;
2306 }
2307
2308 // object inventory to object inventory item drag and drop
2309 private bool CanDoObjectInvToObjectInv(TaskInventoryItem item, SceneObjectPart sourcePart, SceneObjectPart destPart)
2310 {
2311 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
2312
2313 if (sourcePart == null || destPart == null || item == null)
2314 return false;
2315
2316 if (m_bypassPermissions)
2317 return m_bypassPermissionsValue;
2318
2319 SceneObjectGroup srcsog = sourcePart.ParentGroup;
2320 SceneObjectGroup destsog = destPart.ParentGroup;
2321 if (srcsog == null || destsog == null)
2322 return false;
2323
2324 // dest is locked
2325 if((destsog.EffectiveOwnerPerms & (uint)PermissionMask.Move) == 0)
2326 return false;
2327
2328 uint itperms = item.CurrentPermissions;
2329
2330 // if item is no copy the source is modifed
2331 if((itperms & (uint)PermissionMask.Copy) == 0 && (srcsog.EffectiveOwnerPerms & (uint)PermissionMask.Modify) == 0)
2332 return false;
2333
2334 UUID srcOwner = srcsog.OwnerID;
2335 UUID destOwner = destsog.OwnerID;
2336 bool notSameOwner = srcOwner != destOwner;
2337
2338 if(notSameOwner)
2339 {
2340 if((itperms & (uint)PermissionMask.Transfer) == 0)
2341 return false;
2342
2343 // scripts can't be droped
2344 if(item.InvType == (int)InventoryType.LSL)
2345 return false;
2346
2347 if((destsog.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0)
2348 return false;
2349 }
2350 else
2351 {
2352 if((destsog.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0 &&
2353 (destsog.EffectiveOwnerPerms & (uint)PermissionMask.Modify) == 0)
2354 return false;
2355 }
2356
2357 return true;
2358 }
2359
2360 private bool CanDropInObjectInv(InventoryItemBase item, ScenePresence sp, SceneObjectPart destPart)
2361 {
2362 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
2363
2364 if (sp == null || sp.IsDeleted || destPart == null || item == null)
2365 return false;
2366
2367 SceneObjectGroup destsog = destPart.ParentGroup;
2368 if (destsog == null || destsog.IsDeleted)
2369 return false;
2370
2371 if (m_bypassPermissions)
2372 return m_bypassPermissionsValue;
2373
2374 if(sp.IsGod)
2375 return true;
2376
2377 // dest is locked
2378 if((destsog.EffectiveOwnerPerms & (uint)PermissionMask.Move) == 0)
2379 return false;
2380
2381 UUID destOwner = destsog.OwnerID;
2382 UUID spID = sp.UUID;
2383 bool spNotOwner = spID != destOwner;
2384
2385 // scripts can't be droped
2386 if(spNotOwner && item.InvType == (int)InventoryType.LSL)
2387 return false;
2388
2389 if(spNotOwner || item.Owner != destOwner)
2390 {
2391 // no copy item will be moved if it has transfer
2392 uint itperms = item.CurrentPermissions;
2393 if((itperms & (uint)PermissionMask.Transfer) == 0)
2394 return false;
2395 }
2396
2397 // allowdrop is a root part thing and does bypass modify rights
2398 if((destsog.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) != 0)
2399 return true;
2400
2401 uint perms = GetObjectPermissions(spID, destsog, true);
2402 if((perms & (uint)PermissionMask.Modify) == 0)
2403 return false;
2404
1827 return true; 2405 return true;
1828 } 2406 }
1829 2407
@@ -1832,6 +2410,23 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1832 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2410 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1833 if (m_bypassPermissions) return m_bypassPermissionsValue; 2411 if (m_bypassPermissions) return m_bypassPermissionsValue;
1834 2412
2413 SceneObjectPart part = m_scene.GetSceneObjectPart(objectID);
2414 if (part == null)
2415 return false;
2416
2417 SceneObjectGroup sog = part.ParentGroup;
2418 if (sog == null)
2419 return false;
2420
2421 uint perms = GetObjectPermissions(userID, sog, true);
2422 if((perms & (uint)PermissionMask.Modify) == 0)
2423 return false;
2424
2425 TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID);
2426 if(ti == null)
2427 return false;
2428
2429 //TODO item perm ?
1835 return true; 2430 return true;
1836 } 2431 }
1837 2432
@@ -1848,26 +2443,23 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1848 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2443 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1849 if (m_bypassPermissions) return m_bypassPermissionsValue; 2444 if (m_bypassPermissions) return m_bypassPermissionsValue;
1850 2445
1851 SceneObjectPart part = m_scene.GetSceneObjectPart(objectID);
1852 ScenePresence p = m_scene.GetScenePresence(userID); 2446 ScenePresence p = m_scene.GetScenePresence(userID);
1853 2447
1854 if (part == null || p == null) 2448 if (p == null)
2449 return false;
2450
2451 SceneObjectGroup sog = m_scene.GetGroupByPrim(objectID);
2452 if (sog == null)
2453 return false;
2454
2455 uint perms = GetObjectPermissions(userID, sog, true);
2456 if((perms & (uint)PermissionMask.Modify) == 0)
1855 return false; 2457 return false;
1856 2458
1857 if (!IsAdministrator(userID)) 2459 if ((int)InventoryType.LSL == invType)
1858 { 2460 {
1859 if (part.OwnerID != userID) 2461 if (m_allowedScriptCreators == UserSet.Administrators)
1860 { 2462 return false;
1861 // Group permissions
1862 if ((part.GroupID == UUID.Zero) || (p.ControllingClient.GetGroupPowers(part.GroupID) == 0) || ((part.GroupMask & (uint)PermissionMask.Modify) == 0))
1863 return false;
1864 } else {
1865 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
1866 return false;
1867 }
1868 if ((int)InventoryType.LSL == invType)
1869 if (m_allowedScriptCreators == UserSet.Administrators)
1870 return false;
1871 } 2463 }
1872 2464
1873 return true; 2465 return true;
@@ -1941,22 +2533,22 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1941 return true; 2533 return true;
1942 } 2534 }
1943 2535
1944 private bool CanResetScript(UUID prim, UUID script, UUID agentID, Scene scene) 2536 private bool CanResetScript(UUID primID, UUID script, UUID agentID)
1945 { 2537 {
1946 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 2538 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1947 if (m_bypassPermissions) return m_bypassPermissionsValue; 2539 if (m_bypassPermissions) return m_bypassPermissionsValue;
1948 2540
1949 SceneObjectPart part = m_scene.GetSceneObjectPart(prim); 2541 SceneObjectGroup sog = m_scene.GetGroupByPrim(primID);
1950 2542 if (sog == null)
1951 // If we selected a sub-prim to reset, prim won't represent the object, but only a part. 2543 return false;
1952 // We have to check the permissions of the object, though.
1953 if (part.ParentID != 0) prim = part.ParentUUID;
1954 2544
1955 // You can reset the scripts in any object you can edit 2545 uint perms = GetObjectPermissions(agentID, sog, false);
1956 return GenericObjectPermission(agentID, prim, false); 2546 if((perms & (uint)PermissionMask.Modify) == 0) // ??
2547 return false;
2548 return true;
1957 } 2549 }
1958 2550
1959 private bool CanCompileScript(UUID ownerUUID, int scriptType, Scene scene) 2551 private bool CanCompileScript(UUID ownerUUID, int scriptType)
1960 { 2552 {
1961 //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType); 2553 //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType);
1962 switch (scriptType) { 2554 switch (scriptType) {
@@ -2014,7 +2606,14 @@ namespace OpenSim.Region.CoreModules.World.Permissions
2014// "[PERMISSIONS]: Checking CanControlPrimMedia for {0} on {1} face {2} with control permissions {3}", 2606// "[PERMISSIONS]: Checking CanControlPrimMedia for {0} on {1} face {2} with control permissions {3}",
2015// agentID, primID, face, me.ControlPermissions); 2607// agentID, primID, face, me.ControlPermissions);
2016 2608
2017 return GenericObjectPermission(agentID, part.ParentGroup.UUID, true); 2609 SceneObjectGroup sog = part.ParentGroup;
2610 if (sog == null)
2611 return false;
2612
2613 uint perms = GetObjectPermissions(agentID, sog, false);
2614 if((perms & (uint)PermissionMask.Modify) == 0)
2615 return false;
2616 return true;
2018 } 2617 }
2019 2618
2020 private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face) 2619 private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face)
diff --git a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs
index 8bac9e6..bb3b860 100644
--- a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs
+++ b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs
@@ -61,6 +61,8 @@ namespace OpenSim.Region.CoreModules.World.Region
61 protected IDialogModule m_DialogModule = null; 61 protected IDialogModule m_DialogModule = null;
62 protected string m_MarkerPath = String.Empty; 62 protected string m_MarkerPath = String.Empty;
63 private int[] m_CurrentAlerts = null; 63 private int[] m_CurrentAlerts = null;
64 protected bool m_shortCircuitDelays = false;
65 protected bool m_rebootAll = false;
64 66
65 public void Initialise(IConfigSource config) 67 public void Initialise(IConfigSource config)
66 { 68 {
@@ -69,6 +71,9 @@ namespace OpenSim.Region.CoreModules.World.Region
69 { 71 {
70 m_MarkerPath = restartConfig.GetString("MarkerPath", String.Empty); 72 m_MarkerPath = restartConfig.GetString("MarkerPath", String.Empty);
71 } 73 }
74 IConfig startupConfig = config.Configs["Startup"];
75 m_shortCircuitDelays = startupConfig.GetBoolean("SkipDelayOnEmptyRegion", false);
76 m_rebootAll = startupConfig.GetBoolean("InworldRestartShutsDown", false);
72 } 77 }
73 78
74 public void AddRegion(Scene scene) 79 public void AddRegion(Scene scene)
@@ -250,6 +255,14 @@ namespace OpenSim.Region.CoreModules.World.Region
250 private void OnTimer(object source, ElapsedEventArgs e) 255 private void OnTimer(object source, ElapsedEventArgs e)
251 { 256 {
252 int nextInterval = DoOneNotice(true); 257 int nextInterval = DoOneNotice(true);
258 if (m_shortCircuitDelays)
259 {
260 if (CountAgents() == 0)
261 {
262 m_Scene.RestartNow();
263 return;
264 }
265 }
253 266
254 SetTimer(nextInterval); 267 SetTimer(nextInterval);
255 } 268 }
@@ -349,5 +362,35 @@ namespace OpenSim.Region.CoreModules.World.Region
349 { 362 {
350 } 363 }
351 } 364 }
365
366 int CountAgents()
367 {
368 m_log.Info("[RESTART MODULE]: Counting affected avatars");
369 int agents = 0;
370
371 if (m_rebootAll)
372 {
373 foreach (Scene s in SceneManager.Instance.Scenes)
374 {
375 foreach (ScenePresence sp in s.GetScenePresences())
376 {
377 if (!sp.IsChildAgent && !sp.IsNPC)
378 agents++;
379 }
380 }
381 }
382 else
383 {
384 foreach (ScenePresence sp in m_Scene.GetScenePresences())
385 {
386 if (!sp.IsChildAgent && !sp.IsNPC)
387 agents++;
388 }
389 }
390
391 m_log.InfoFormat("[RESTART MODULE]: Avatars in region: {0}", agents);
392
393 return agents;
394 }
352 } 395 }
353} 396}
diff --git a/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs b/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs
index 04b6f00..167f6b5 100644
--- a/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs
+++ b/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs
@@ -105,8 +105,9 @@ namespace OpenSim.Region.CoreModules.World.Vegetation
105 if (rootPart.Shape.PCode != (byte)PCode.Grass) 105 if (rootPart.Shape.PCode != (byte)PCode.Grass)
106 AdaptTree(ref shape); 106 AdaptTree(ref shape);
107 107
108 m_scene.AddNewSceneObject(sceneObject, true);
109 sceneObject.SetGroup(groupID, null); 108 sceneObject.SetGroup(groupID, null);
109 m_scene.AddNewSceneObject(sceneObject, true);
110 sceneObject.AggregatePerms();
110 111
111 return sceneObject; 112 return sceneObject;
112 } 113 }
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 0c4017e..e7c2428 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -278,6 +278,8 @@ namespace OpenSim.Region.Framework.Interfaces
278 /// <param name="datastore"></param> 278 /// <param name="datastore"></param>
279 void ProcessInventoryBackup(ISimulationDataService datastore); 279 void ProcessInventoryBackup(ISimulationDataService datastore);
280 280
281 void AggregateInnerPerms(ref uint owner, ref uint group, ref uint everyone);
282
281 uint MaskEffectivePermissions(); 283 uint MaskEffectivePermissions();
282 284
283 void ApplyNextOwnerPermissions(); 285 void ApplyNextOwnerPermissions();
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs b/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs
index 9585082..1b690ba 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs
@@ -102,6 +102,8 @@ namespace OpenSim.Region.Framework.Interfaces
102 102
103 ScenePresence CrossAgentToNewRegionAsync(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying, EntityTransferContext ctx); 103 ScenePresence CrossAgentToNewRegionAsync(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying, EntityTransferContext ctx);
104 104
105 bool CrossAgentCreateFarChild(ScenePresence agent, GridRegion neighbourRegion, Vector3 pos, EntityTransferContext ctx);
106
105 bool HandleIncomingSceneObject(SceneObjectGroup so, Vector3 newPosition); 107 bool HandleIncomingSceneObject(SceneObjectGroup so, Vector3 newPosition);
106 } 108 }
107 109
diff --git a/OpenSim/Region/Framework/Interfaces/IEtcdModule.cs b/OpenSim/Region/Framework/Interfaces/IEtcdModule.cs
new file mode 100644
index 0000000..123cb67
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IEtcdModule.cs
@@ -0,0 +1,37 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29
30public interface IEtcdModule
31{
32 bool Store(string k, string v);
33 bool Store(string k, string v, int ttl);
34 string Get(string k);
35 void Watch(string k, Action<string> callback);
36 void Delete(string k);
37}
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 1e9711d..827f91e 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -3161,7 +3161,7 @@ namespace OpenSim.Region.Framework.Scenes
3161 { 3161 {
3162 foreach (Action<Scene> d in handler.GetInvocationList()) 3162 foreach (Action<Scene> d in handler.GetInvocationList())
3163 { 3163 {
3164 m_log.InfoFormat("[EVENT MANAGER]: TriggerSceneShuttingDown invoque {0}", d.Method.Name.ToString()); 3164 m_log.InfoFormat("[EVENT MANAGER]: TriggerSceneShuttingDown invoke {0}", d.Method.Name.ToString());
3165 try 3165 try
3166 { 3166 {
3167 d(s); 3167 d(s);
diff --git a/OpenSim/Region/Framework/Scenes/GodController.cs b/OpenSim/Region/Framework/Scenes/GodController.cs
index 7ed80f6..9372366 100644
--- a/OpenSim/Region/Framework/Scenes/GodController.cs
+++ b/OpenSim/Region/Framework/Scenes/GodController.cs
@@ -246,17 +246,14 @@ namespace OpenSim.Region.Framework.Scenes
246 { 246 {
247 bool newstate = false; 247 bool newstate = false;
248 if(m_forceGodModeAlwaysOn) 248 if(m_forceGodModeAlwaysOn)
249 newstate = true; 249 newstate = m_viewergodlevel >= 200;
250 else 250 if(state != null)
251 { 251 {
252 if(state != null) 252 OSDMap s = (OSDMap)state;
253 {
254 OSDMap s = (OSDMap)state;
255 253
256 if (s.ContainsKey("ViewerUiIsGod")) 254 if (s.ContainsKey("ViewerUiIsGod"))
257 newstate = s["ViewerUiIsGod"].AsBoolean(); 255 newstate = s["ViewerUiIsGod"].AsBoolean();
258 m_lastLevelToViewer = m_viewergodlevel; // we are not changing viewer level by default 256 m_lastLevelToViewer = m_viewergodlevel; // we are not changing viewer level by default
259 }
260 } 257 }
261 UpdateGodLevels(newstate); 258 UpdateGodLevels(newstate);
262 } 259 }
@@ -264,6 +261,11 @@ namespace OpenSim.Region.Framework.Scenes
264 public void HasMovedAway() 261 public void HasMovedAway()
265 { 262 {
266 m_lastLevelToViewer = 0; 263 m_lastLevelToViewer = 0;
264 if(m_forceGodModeAlwaysOn)
265 {
266 m_viewergodlevel = m_rightsGodLevel;
267 m_godlevel = m_rightsGodLevel;
268 }
267 } 269 }
268 270
269 public int UserLevel 271 public int UserLevel
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index e4aa196..d81d8a2 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -495,6 +495,7 @@ namespace OpenSim.Region.Framework.Scenes
495 495
496 m_group.RootPart.Velocity = Vector3.Zero; 496 m_group.RootPart.Velocity = Vector3.Zero;
497 m_group.RootPart.AngularVelocity = Vector3.Zero; 497 m_group.RootPart.AngularVelocity = Vector3.Zero;
498 m_skippedUpdates = 1000;
498 m_group.SendGroupRootTerseUpdate(); 499 m_group.SendGroupRootTerseUpdate();
499// m_group.RootPart.ScheduleTerseUpdate(); 500// m_group.RootPart.ScheduleTerseUpdate();
500 } 501 }
@@ -517,6 +518,7 @@ namespace OpenSim.Region.Framework.Scenes
517 return; 518 return;
518 if (m_running && !m_waitingCrossing) 519 if (m_running && !m_waitingCrossing)
519 StartTimer(); 520 StartTimer();
521 m_skippedUpdates = 1000;
520 } 522 }
521 } 523 }
522 524
@@ -643,10 +645,15 @@ namespace OpenSim.Region.Framework.Scenes
643 m_group.RootPart.Velocity = Vector3.Zero; 645 m_group.RootPart.Velocity = Vector3.Zero;
644 m_group.RootPart.AngularVelocity = Vector3.Zero; 646 m_group.RootPart.AngularVelocity = Vector3.Zero;
645 m_group.SendGroupRootTerseUpdate(); 647 m_group.SendGroupRootTerseUpdate();
646 // m_group.RootPart.ScheduleTerseUpdate(); 648
647 m_frames.Clear(); 649 m_frames.Clear();
648 } 650 }
649 651
652 Vector3 m_lastPosUpdate;
653 Quaternion m_lastRotationUpdate;
654 Vector3 m_currentVel;
655 int m_skippedUpdates;
656
650 private void DoOnTimer(double tickDuration) 657 private void DoOnTimer(double tickDuration)
651 { 658 {
652 if (m_skipLoops > 0) 659 if (m_skipLoops > 0)
@@ -665,6 +672,7 @@ namespace OpenSim.Region.Framework.Scenes
665 if (m_group.RootPart.Velocity != Vector3.Zero) 672 if (m_group.RootPart.Velocity != Vector3.Zero)
666 { 673 {
667 m_group.RootPart.Velocity = Vector3.Zero; 674 m_group.RootPart.Velocity = Vector3.Zero;
675 m_skippedUpdates = 1000;
668 m_group.SendGroupRootTerseUpdate(); 676 m_group.SendGroupRootTerseUpdate();
669 } 677 }
670 return; 678 return;
@@ -677,7 +685,9 @@ namespace OpenSim.Region.Framework.Scenes
677 // retry to set the position that evtually caused the outbound 685 // retry to set the position that evtually caused the outbound
678 // if still outside region this will call startCrossing below 686 // if still outside region this will call startCrossing below
679 m_isCrossing = false; 687 m_isCrossing = false;
688 m_skippedUpdates = 1000;
680 m_group.AbsolutePosition = m_nextPosition; 689 m_group.AbsolutePosition = m_nextPosition;
690
681 if (!m_isCrossing) 691 if (!m_isCrossing)
682 { 692 {
683 StopTimer(); 693 StopTimer();
@@ -700,10 +710,12 @@ namespace OpenSim.Region.Framework.Scenes
700 } 710 }
701 711
702 m_currentFrame = m_frames[0]; 712 m_currentFrame = m_frames[0];
703 m_currentFrame.TimeMS += (int)tickDuration;
704 } 713 }
705 //force a update on a keyframe transition
706 m_nextPosition = m_group.AbsolutePosition; 714 m_nextPosition = m_group.AbsolutePosition;
715 m_currentVel = (Vector3)m_currentFrame.Position - m_nextPosition;
716 m_currentVel /= (m_currentFrame.TimeMS * 0.001f);
717
718 m_currentFrame.TimeMS += (int)tickDuration;
707 update = true; 719 update = true;
708 } 720 }
709 721
@@ -712,7 +724,7 @@ namespace OpenSim.Region.Framework.Scenes
712 // Do the frame processing 724 // Do the frame processing
713 double remainingSteps = (double)m_currentFrame.TimeMS / tickDuration; 725 double remainingSteps = (double)m_currentFrame.TimeMS / tickDuration;
714 726
715 if (remainingSteps <= 0.0) 727 if (remainingSteps <= 1.0)
716 { 728 {
717 m_group.RootPart.Velocity = Vector3.Zero; 729 m_group.RootPart.Velocity = Vector3.Zero;
718 m_group.RootPart.AngularVelocity = Vector3.Zero; 730 m_group.RootPart.AngularVelocity = Vector3.Zero;
@@ -720,92 +732,71 @@ namespace OpenSim.Region.Framework.Scenes
720 m_nextPosition = (Vector3)m_currentFrame.Position; 732 m_nextPosition = (Vector3)m_currentFrame.Position;
721 m_group.AbsolutePosition = m_nextPosition; 733 m_group.AbsolutePosition = m_nextPosition;
722 734
723 // we are sending imediate updates, no doing force a extra terseUpdate
724 // m_group.UpdateGroupRotationR((Quaternion)m_currentFrame.Rotation);
725
726 m_group.RootPart.RotationOffset = (Quaternion)m_currentFrame.Rotation; 735 m_group.RootPart.RotationOffset = (Quaternion)m_currentFrame.Rotation;
727 736
728 lock (m_frames) 737 lock (m_frames)
729 { 738 {
730 m_frames.RemoveAt(0); 739 m_frames.RemoveAt(0);
731 if (m_frames.Count > 0) 740 if (m_frames.Count > 0)
741 {
732 m_currentFrame = m_frames[0]; 742 m_currentFrame = m_frames[0];
743 m_currentVel = (Vector3)m_currentFrame.Position - m_nextPosition;
744 m_currentVel /= (m_currentFrame.TimeMS * 0.001f);
745 m_group.RootPart.Velocity = m_currentVel;
746 m_currentFrame.TimeMS += (int)tickDuration;
747 }
748 else
749 m_group.RootPart.Velocity = Vector3.Zero;
733 } 750 }
734
735 update = true; 751 update = true;
736 } 752 }
737 else 753 else
738 { 754 {
739 float completed = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal; 755 bool lastSteps = remainingSteps < 4;
740 bool lastStep = m_currentFrame.TimeMS <= tickDuration; 756 Vector3 currentPosition = m_group.AbsolutePosition;
741 757 Vector3 motionThisFrame = (Vector3)m_currentFrame.Position - currentPosition;
742 Vector3 v = (Vector3)m_currentFrame.Position - m_group.AbsolutePosition; 758 motionThisFrame /= (float)remainingSteps;
743 Vector3 motionThisFrame = v / (float)remainingSteps; 759
744 v = v * 1000 / m_currentFrame.TimeMS; 760 m_nextPosition = currentPosition + motionThisFrame;
745 761
746 m_nextPosition = m_group.AbsolutePosition + motionThisFrame; 762 Quaternion currentRotation = m_group.GroupRotation;
747 763 if ((Quaternion)m_currentFrame.Rotation != currentRotation)
748 if (Vector3.Mag(motionThisFrame) >= 0.05f)
749 update = true;
750
751 //int totalSteps = m_currentFrame.TimeTotal / (int)tickDuration;
752 //m_log.DebugFormat("KeyframeMotion.OnTimer: step {0}/{1}, curPosition={2}, finalPosition={3}, motionThisStep={4} (scene {5})",
753 // totalSteps - remainingSteps + 1, totalSteps, m_group.AbsolutePosition, m_currentFrame.Position, motionThisStep, m_scene.RegionInfo.RegionName);
754
755 if ((Quaternion)m_currentFrame.Rotation != m_group.GroupRotation)
756 { 764 {
757 Quaternion current = m_group.GroupRotation; 765 float completed = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal;
758
759 Quaternion step = Quaternion.Slerp(m_currentFrame.StartRotation, (Quaternion)m_currentFrame.Rotation, completed); 766 Quaternion step = Quaternion.Slerp(m_currentFrame.StartRotation, (Quaternion)m_currentFrame.Rotation, completed);
760 step.Normalize(); 767 step.Normalize();
761 /* use simpler change detection 768 m_group.RootPart.RotationOffset = step;
762 * float angle = 0; 769 if (Math.Abs(step.X - m_lastRotationUpdate.X) > 0.001f
763 770 || Math.Abs(step.Y - m_lastRotationUpdate.Y) > 0.001f
764 float aa = current.X * current.X + current.Y * current.Y + current.Z * current.Z + current.W * current.W; 771 || Math.Abs(step.Z - m_lastRotationUpdate.Z) > 0.001f)
765 float bb = step.X * step.X + step.Y * step.Y + step.Z * step.Z + step.W * step.W;
766 float aa_bb = aa * bb;
767
768 if (aa_bb == 0)
769 {
770 angle = 0;
771 }
772 else
773 {
774 float ab = current.X * step.X +
775 current.Y * step.Y +
776 current.Z * step.Z +
777 current.W * step.W;
778 float q = (ab * ab) / aa_bb;
779
780 if (q > 1.0f)
781 {
782 angle = 0;
783 }
784 else
785 {
786 angle = (float)Math.Acos(2 * q - 1);
787 }
788 }
789
790 if (angle > 0.01f)
791 */
792 if (Math.Abs(step.X - current.X) > 0.001f
793 || Math.Abs(step.Y - current.Y) > 0.001f
794 || Math.Abs(step.Z - current.Z) > 0.001f)
795 // assuming w is a dependente var
796 {
797// m_group.UpdateGroupRotationR(step);
798 m_group.RootPart.RotationOffset = step;
799
800 //m_group.RootPart.UpdateAngularVelocity(m_currentFrame.AngularVelocity / 2);
801 update = true; 772 update = true;
802 }
803 } 773 }
804 }
805 774
806 if (update)
807 {
808 m_group.AbsolutePosition = m_nextPosition; 775 m_group.AbsolutePosition = m_nextPosition;
776 if(lastSteps)
777 m_group.RootPart.Velocity = Vector3.Zero;
778 else
779 m_group.RootPart.Velocity = m_currentVel;
780
781 if(!update && (
782 lastSteps ||
783 m_skippedUpdates * tickDuration > 0.5 ||
784 Math.Abs(m_nextPosition.X - currentPosition.X) > 5f ||
785 Math.Abs(m_nextPosition.Y - currentPosition.Y) > 5f ||
786 Math.Abs(m_nextPosition.Z - currentPosition.Z) > 5f
787 ))
788 {
789 update = true;
790 }
791 else
792 m_skippedUpdates++;
793
794 }
795 if(update)
796 {
797 m_lastPosUpdate = m_nextPosition;
798 m_lastRotationUpdate = m_group.GroupRotation;
799 m_skippedUpdates = 0;
809 m_group.SendGroupRootTerseUpdate(); 800 m_group.SendGroupRootTerseUpdate();
810 } 801 }
811 } 802 }
@@ -850,6 +841,7 @@ namespace OpenSim.Region.Framework.Scenes
850 if (m_group.RootPart.Velocity != Vector3.Zero) 841 if (m_group.RootPart.Velocity != Vector3.Zero)
851 { 842 {
852 m_group.RootPart.Velocity = Vector3.Zero; 843 m_group.RootPart.Velocity = Vector3.Zero;
844 m_skippedUpdates = 1000;
853 m_group.SendGroupRootTerseUpdate(); 845 m_group.SendGroupRootTerseUpdate();
854// m_group.RootPart.ScheduleTerseUpdate(); 846// m_group.RootPart.ScheduleTerseUpdate();
855 } 847 }
@@ -862,6 +854,7 @@ namespace OpenSim.Region.Framework.Scenes
862 if (m_group != null) 854 if (m_group != null)
863 { 855 {
864 m_group.RootPart.Velocity = Vector3.Zero; 856 m_group.RootPart.Velocity = Vector3.Zero;
857 m_skippedUpdates = 1000;
865 m_group.SendGroupRootTerseUpdate(); 858 m_group.SendGroupRootTerseUpdate();
866// m_group.RootPart.ScheduleTerseUpdate(); 859// m_group.RootPart.ScheduleTerseUpdate();
867 860
diff --git a/OpenSim/Region/Framework/Scenes/Prioritizer.cs b/OpenSim/Region/Framework/Scenes/Prioritizer.cs
index cbf40c8..53ca849 100644
--- a/OpenSim/Region/Framework/Scenes/Prioritizer.cs
+++ b/OpenSim/Region/Framework/Scenes/Prioritizer.cs
@@ -172,14 +172,22 @@ namespace OpenSim.Region.Framework.Scenes
172 172
173 if (entity is SceneObjectPart) 173 if (entity is SceneObjectPart)
174 { 174 {
175 SceneObjectGroup sog = ((SceneObjectPart)entity).ParentGroup;
175 // Attachments are high priority, 176 // Attachments are high priority,
176 if (((SceneObjectPart)entity).ParentGroup.IsAttachment) 177 if (sog.IsAttachment)
177 return 2; 178 return 2;
179
180
181 if(presence.ParentPart != null)
182 {
183 if(presence.ParentPart.ParentGroup == sog)
184 return 2;
185 }
178 186
179 pqueue = ComputeDistancePriority(client, entity, false); 187 pqueue = ComputeDistancePriority(client, entity, false);
180 188
181 // Non physical prims are lower priority than physical prims 189 // Non physical prims are lower priority than physical prims
182 PhysicsActor physActor = ((SceneObjectPart)entity).ParentGroup.RootPart.PhysActor; 190 PhysicsActor physActor = sog.RootPart.PhysActor;
183 if (physActor == null || !physActor.IsPhysical) 191 if (physActor == null || !physActor.IsPhysical)
184 pqueue++; 192 pqueue++;
185 } 193 }
@@ -302,6 +310,17 @@ namespace OpenSim.Region.Framework.Scenes
302 else 310 else
303 { 311 {
304 SceneObjectGroup group = (entity as SceneObjectPart).ParentGroup; 312 SceneObjectGroup group = (entity as SceneObjectPart).ParentGroup;
313 if(presence.ParentPart != null)
314 {
315 if(presence.ParentPart.ParentGroup == group)
316 return pqueue;
317 }
318 if(group.IsAttachment)
319 {
320 if(group.RootPart.LocalId == presence.LocalId)
321 return pqueue;
322 }
323
305 float bradius = group.GetBoundsRadius(); 324 float bradius = group.GetBoundsRadius();
306 Vector3 grppos = group.AbsolutePosition + group.getBoundsCenter(); 325 Vector3 grppos = group.AbsolutePosition + group.getBoundsCenter();
307 distance = Vector3.Distance(presencePos, grppos); 326 distance = Vector3.Distance(presencePos, grppos);
diff --git a/OpenSim/Region/Framework/Scenes/SOPMaterial.cs b/OpenSim/Region/Framework/Scenes/SOPMaterial.cs
index 651c52e..d38ef61 100644
--- a/OpenSim/Region/Framework/Scenes/SOPMaterial.cs
+++ b/OpenSim/Region/Framework/Scenes/SOPMaterial.cs
@@ -28,6 +28,7 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using OpenMetaverse; 30using OpenMetaverse;
31using OpenMetaverse.StructuredData;
31using OpenSim.Framework; 32using OpenSim.Framework;
32 33
33namespace OpenSim.Region.Framework.Scenes 34namespace OpenSim.Region.Framework.Scenes
@@ -90,6 +91,87 @@ namespace OpenSim.Region.Framework.Scenes
90 else 91 else
91 return 0; 92 return 0;
92 } 93 }
94 }
95
96 public class FaceMaterial
97 {
98 public UUID ID;
99 public UUID NormalMapID = UUID.Zero;
100 public float NormalOffsetX = 0.0f;
101 public float NormalOffsetY = 0.0f;
102 public float NormalRepeatX = 1.0f;
103 public float NormalRepeatY = 1.0f;
104 public float NormalRotation = 0.0f;
105
106 public UUID SpecularMapID = UUID.Zero;
107 public float SpecularOffsetX = 0.0f;
108 public float SpecularOffsetY = 0.0f;
109 public float SpecularRepeatX = 1.0f;
110 public float SpecularRepeatY = 1.0f;
111 public float SpecularRotation = 0.0f;
112
113 public Color4 SpecularLightColor = new Color4(255,255,255,255);
114 public Byte SpecularLightExponent = 51;
115 public Byte EnvironmentIntensity = 0;
116 public Byte DiffuseAlphaMode = 1;
117 public Byte AlphaMaskCutoff = 0;
118
119 public FaceMaterial()
120 { }
121
122 public FaceMaterial(UUID pID, OSDMap mat)
123 {
124 ID = pID;
125 if(mat == null)
126 return;
127 float scale = 0.0001f;
128 NormalMapID = mat["NormMap"].AsUUID();
129 NormalOffsetX = scale * (float)mat["NormOffsetX"].AsReal();
130 NormalOffsetY = scale * (float)mat["NormOffsetY"].AsReal();
131 NormalRepeatX = scale * (float)mat["NormRepeatX"].AsReal();
132 NormalRepeatY = scale * (float)mat["NormRepeatY"].AsReal();
133 NormalRotation = scale * (float)mat["NormRotation"].AsReal();
134
135 SpecularMapID = mat["SpecMap"].AsUUID();
136 SpecularOffsetX = scale * (float)mat["SpecOffsetX"].AsReal();
137 SpecularOffsetY = scale * (float)mat["SpecOffsetY"].AsReal();
138 SpecularRepeatX = scale * (float)mat["SpecRepeatX"].AsReal();
139 SpecularRepeatY = scale * (float)mat["SpecRepeatY"].AsReal();
140 SpecularRotation = scale * (float)mat["SpecRotation"].AsReal();
93 141
142 SpecularLightColor = mat["SpecColor"].AsColor4();
143 SpecularLightExponent = (Byte)mat["SpecExp"].AsUInteger();
144 EnvironmentIntensity = (Byte)mat["EnvIntensity"].AsUInteger();
145 DiffuseAlphaMode = (Byte)mat["DiffuseAlphaMode"].AsUInteger();
146 AlphaMaskCutoff = (Byte)mat["AlphaMaskCutoff"].AsUInteger();
147 }
148
149 public OSDMap toOSD()
150 {
151 OSDMap mat = new OSDMap();
152 float scale = 10000f;
153
154 mat["NormMap"] = NormalMapID;
155 mat["NormOffsetX"] = (int) (scale * NormalOffsetX);
156 mat["NormOffsetY"] = (int) (scale * NormalOffsetY);
157 mat["NormRepeatX"] = (int) (scale * NormalRepeatX);
158 mat["NormRepeatY"] = (int) (scale * NormalRepeatY);
159 mat["NormRotation"] = (int) (scale * NormalRotation);
160
161 mat["SpecMap"] = SpecularMapID;
162 mat["SpecOffsetX"] = (int) (scale * SpecularOffsetX);
163 mat["SpecOffsetY"] = (int) (scale * SpecularOffsetY);
164 mat["SpecRepeatX"] = (int) (scale * SpecularRepeatX);
165 mat["SpecRepeatY"] = (int) (scale * SpecularRepeatY);
166 mat["SpecRotation"] = (int) (scale * SpecularRotation);
167
168 mat["SpecColor"] = SpecularLightColor;
169 mat["SpecExp"] = SpecularLightExponent;
170 mat["EnvIntensity"] = EnvironmentIntensity;
171 mat["DiffuseAlphaMode"] = DiffuseAlphaMode;
172 mat["AlphaMaskCutoff"] = AlphaMaskCutoff;
173
174 return mat;
175 }
94 } 176 }
95} \ No newline at end of file 177} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index cb06540..2f016fa 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -338,6 +338,7 @@ namespace OpenSim.Region.Framework.Scenes
338 // Update item with new asset 338 // Update item with new asset
339 item.AssetID = asset.FullID; 339 item.AssetID = asset.FullID;
340 group.UpdateInventoryItem(item); 340 group.UpdateInventoryItem(item);
341 group.AggregatePerms();
341 342
342 part.SendPropertiesToClient(remoteClient); 343 part.SendPropertiesToClient(remoteClient);
343 344
@@ -647,7 +648,8 @@ namespace OpenSim.Region.Framework.Scenes
647 // Modify 648 // Modify
648 uint permsMask = ~ ((uint)PermissionMask.Copy | 649 uint permsMask = ~ ((uint)PermissionMask.Copy |
649 (uint)PermissionMask.Transfer | 650 (uint)PermissionMask.Transfer |
650 (uint)PermissionMask.Modify); 651 (uint)PermissionMask.Modify |
652 (uint)PermissionMask.Export);
651 653
652 // Now, reduce the next perms to the mask bits 654 // Now, reduce the next perms to the mask bits
653 // relevant to the operation 655 // relevant to the operation
@@ -677,6 +679,23 @@ namespace OpenSim.Region.Framework.Scenes
677 (uint)PermissionMask.Move; 679 (uint)PermissionMask.Move;
678 uint ownerPerms = item.CurrentPermissions; 680 uint ownerPerms = item.CurrentPermissions;
679 681
682 // These will be applied to the root prim at next rez.
683 // The legacy slam bit (bit 3) and folded permission (bits 0-2)
684 // are preserved due to the above mangling
685 ownerPerms &= nextPerms;
686
687 // Mask the base permissions. This is a conservative
688 // approach altering only the three main perms
689 basePerms &= nextPerms;
690
691 // Mask out the folded portion of the base mask.
692 // While the owner mask carries the actual folded
693 // permissions, the base mask carries the original
694 // base mask, before masking with the folded perms.
695 // We need this later for rezzing.
696 basePerms &= ~(uint)PermissionMask.FoldedMask;
697 basePerms |= ((basePerms >> 13) & 7) | (((basePerms & (uint)PermissionMask.Export) != 0) ? (uint)PermissionMask.FoldedExport : 0);
698
680 // If this is an object, root prim perms may be more 699 // If this is an object, root prim perms may be more
681 // permissive than folded perms. Use folded perms as 700 // permissive than folded perms. Use folded perms as
682 // a mask 701 // a mask
@@ -684,6 +703,9 @@ namespace OpenSim.Region.Framework.Scenes
684 { 703 {
685 // Create a safe mask for the current perms 704 // Create a safe mask for the current perms
686 uint foldedPerms = (item.CurrentPermissions & 7) << 13; 705 uint foldedPerms = (item.CurrentPermissions & 7) << 13;
706 if ((item.CurrentPermissions & (uint)PermissionMask.FoldedExport) != 0)
707 foldedPerms |= (uint)PermissionMask.Export;
708
687 foldedPerms |= permsMask; 709 foldedPerms |= permsMask;
688 710
689 bool isRootMod = (item.CurrentPermissions & 711 bool isRootMod = (item.CurrentPermissions &
@@ -691,6 +713,8 @@ namespace OpenSim.Region.Framework.Scenes
691 true : false; 713 true : false;
692 714
693 // Mask the owner perms to the folded perms 715 // Mask the owner perms to the folded perms
716 // Note that this is only to satisfy the viewer.
717 // The effect of this will be reversed on rez.
694 ownerPerms &= foldedPerms; 718 ownerPerms &= foldedPerms;
695 basePerms &= foldedPerms; 719 basePerms &= foldedPerms;
696 720
@@ -705,15 +729,6 @@ namespace OpenSim.Region.Framework.Scenes
705 } 729 }
706 } 730 }
707 731
708 // These will be applied to the root prim at next rez.
709 // The slam bit (bit 3) and folded permission (bits 0-2)
710 // are preserved due to the above mangling
711 ownerPerms &= nextPerms;
712
713 // Mask the base permissions. This is a conservative
714 // approach altering only the three main perms
715 basePerms &= nextPerms;
716
717 // Assign to the actual item. Make sure the slam bit is 732 // Assign to the actual item. Make sure the slam bit is
718 // set, if it wasn't set before. 733 // set, if it wasn't set before.
719 itemCopy.BasePermissions = basePerms; 734 itemCopy.BasePermissions = basePerms;
@@ -1200,6 +1215,7 @@ namespace OpenSim.Region.Framework.Scenes
1200 } 1215 }
1201 1216
1202 group.RemoveInventoryItem(localID, itemID); 1217 group.RemoveInventoryItem(localID, itemID);
1218 group.AggregatePerms();
1203 } 1219 }
1204 1220
1205 part.SendPropertiesToClient(remoteClient); 1221 part.SendPropertiesToClient(remoteClient);
@@ -1244,6 +1260,10 @@ namespace OpenSim.Region.Framework.Scenes
1244 agentItem.InvType = taskItem.InvType; 1260 agentItem.InvType = taskItem.InvType;
1245 agentItem.Flags = taskItem.Flags; 1261 agentItem.Flags = taskItem.Flags;
1246 1262
1263 // The code below isn't OK. It doesn't account for flags being changed
1264 // in the object inventory, so it will break when you do it. That
1265 // is the previous behaviour, so no matter at this moment. However, there is a lot
1266 // TODO: Fix this after the inventory fixer exists and has beenr run
1247 if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions()) 1267 if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions())
1248 { 1268 {
1249 agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); 1269 agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
@@ -1252,7 +1272,7 @@ namespace OpenSim.Region.Framework.Scenes
1252 else 1272 else
1253 agentItem.CurrentPermissions = agentItem.BasePermissions & taskItem.CurrentPermissions; 1273 agentItem.CurrentPermissions = agentItem.BasePermissions & taskItem.CurrentPermissions;
1254 1274
1255 agentItem.CurrentPermissions = agentItem.BasePermissions; 1275 agentItem.BasePermissions = agentItem.CurrentPermissions;
1256 1276
1257 agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; 1277 agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm;
1258 agentItem.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner); 1278 agentItem.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner);
@@ -1360,18 +1380,10 @@ namespace OpenSim.Region.Framework.Scenes
1360 return; 1380 return;
1361 } 1381 }
1362 1382
1363 if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0) 1383 if (!Permissions.CanCopyObjectInventory(itemId, part.UUID, remoteClient.AgentId))
1364 {
1365 // If the item to be moved is no copy, we need to be able to
1366 // edit the prim.
1367 if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
1368 return;
1369 }
1370 else
1371 { 1384 {
1372 // If the item is copiable, then we just need to have perms 1385 // check also if we can delete the no copy item
1373 // on it. The delete check is a pure rights check 1386 if(!Permissions.CanEditObject(part.UUID, remoteClient.AgentId))
1374 if (!Permissions.CanDeleteObject(part.UUID, remoteClient.AgentId))
1375 return; 1387 return;
1376 } 1388 }
1377 1389
@@ -1449,29 +1461,9 @@ namespace OpenSim.Region.Framework.Scenes
1449 return; 1461 return;
1450 } 1462 }
1451 1463
1452 // Can't transfer this 1464 if(!Permissions.CanDoObjectInvToObjectInv(srcTaskItem, part, destPart))
1453 //
1454 if (part.OwnerID != destPart.OwnerID && (srcTaskItem.CurrentPermissions & (uint)PermissionMask.Transfer) == 0)
1455 return; 1465 return;
1456 1466
1457 bool overrideNoMod = false;
1458 if ((part.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) != 0)
1459 overrideNoMod = true;
1460
1461 if (part.OwnerID != destPart.OwnerID && (destPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0)
1462 {
1463 // object cannot copy items to an object owned by a different owner
1464 // unless llAllowInventoryDrop has been called
1465
1466 return;
1467 }
1468
1469 // must have both move and modify permission to put an item in an object
1470 if (((part.OwnerMask & (uint)PermissionMask.Modify) == 0) && (!overrideNoMod))
1471 {
1472 return;
1473 }
1474
1475 TaskInventoryItem destTaskItem = new TaskInventoryItem(); 1467 TaskInventoryItem destTaskItem = new TaskInventoryItem();
1476 1468
1477 destTaskItem.ItemID = UUID.Random(); 1469 destTaskItem.ItemID = UUID.Random();
@@ -1512,9 +1504,10 @@ namespace OpenSim.Region.Framework.Scenes
1512 destTaskItem.Type = srcTaskItem.Type; 1504 destTaskItem.Type = srcTaskItem.Type;
1513 1505
1514 destPart.Inventory.AddInventoryItem(destTaskItem, part.OwnerID != destPart.OwnerID); 1506 destPart.Inventory.AddInventoryItem(destTaskItem, part.OwnerID != destPart.OwnerID);
1515
1516 if ((srcTaskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0) 1507 if ((srcTaskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
1508 {
1517 part.Inventory.RemoveInventoryItem(itemId); 1509 part.Inventory.RemoveInventoryItem(itemId);
1510 }
1518 1511
1519 ScenePresence avatar; 1512 ScenePresence avatar;
1520 1513
@@ -1652,76 +1645,79 @@ namespace OpenSim.Region.Framework.Scenes
1652 uint primLocalID) 1645 uint primLocalID)
1653 { 1646 {
1654 UUID itemID = itemInfo.ItemID; 1647 UUID itemID = itemInfo.ItemID;
1648 if (itemID == UUID.Zero)
1649 {
1650 m_log.ErrorFormat(
1651 "[PRIM INVENTORY]: UpdateTaskInventory called with item ID Zero on update for {1}!",
1652 remoteClient.Name);
1653 return;
1654 }
1655 1655
1656 // Find the prim we're dealing with 1656 // Find the prim we're dealing with
1657 SceneObjectPart part = GetSceneObjectPart(primLocalID); 1657 SceneObjectPart part = GetSceneObjectPart(primLocalID);
1658 if(part == null)
1659 {
1660 m_log.WarnFormat(
1661 "[PRIM INVENTORY]: " +
1662 "Update with item {0} requested of prim {1} for {2} but this prim does not exist",
1663 itemID, primLocalID, remoteClient.Name);
1664 return;
1665 }
1658 1666
1659 if (part != null) 1667 TaskInventoryItem currentItem = part.Inventory.GetInventoryItem(itemID);
1668
1669 if (currentItem == null)
1660 { 1670 {
1661 TaskInventoryItem currentItem = part.Inventory.GetInventoryItem(itemID); 1671 InventoryItemBase item = InventoryService.GetItem(remoteClient.AgentId, itemID);
1662 bool allowInventoryDrop = (part.GetEffectiveObjectFlags()
1663 & (uint)PrimFlags.AllowInventoryDrop) != 0;
1664 1672
1665 // Explicity allow anyone to add to the inventory if the 1673 // if not found Try library
1666 // AllowInventoryDrop flag has been set. Don't however let 1674 if (item == null && LibraryService != null && LibraryService.LibraryRootFolder != null)
1667 // them update an item unless they pass the external checks 1675 item = LibraryService.LibraryRootFolder.FindItem(itemID);
1668 //
1669 if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)
1670 && (currentItem != null || !allowInventoryDrop))
1671 return;
1672 1676
1673 if (currentItem == null) 1677 if(item == null)
1674 { 1678 {
1675 UUID copyID = UUID.Random(); 1679 m_log.ErrorFormat(
1676 if (itemID != UUID.Zero) 1680 "[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!",
1677 { 1681 itemID, remoteClient.Name);
1678 InventoryItemBase item = InventoryService.GetItem(remoteClient.AgentId, itemID); 1682 return;
1683 }
1679 1684
1680 // Try library 1685 if (!Permissions.CanDropInObjectInv(item, remoteClient, part))
1681 if (null == item && LibraryService != null && LibraryService.LibraryRootFolder != null) 1686 return;
1682 {
1683 item = LibraryService.LibraryRootFolder.FindItem(itemID);
1684 }
1685 1687
1686 // If we've found the item in the user's inventory or in the library 1688 UUID copyID = UUID.Random();
1687 if (item != null) 1689 bool modrights = Permissions.CanEditObject(part.ParentGroup, remoteClient);
1688 { 1690 part.ParentGroup.AddInventoryItem(remoteClient.AgentId, primLocalID, item, copyID, modrights);
1689 part.ParentGroup.AddInventoryItem(remoteClient.AgentId, primLocalID, item, copyID); 1691 m_log.InfoFormat(
1690 m_log.InfoFormat( 1692 "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
1691 "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}", 1693 item.Name, primLocalID, remoteClient.Name);
1692 item.Name, primLocalID, remoteClient.Name); 1694 part.SendPropertiesToClient(remoteClient);
1693 part.SendPropertiesToClient(remoteClient); 1695 if (!Permissions.BypassPermissions())
1694 if (!Permissions.BypassPermissions()) 1696 {
1695 { 1697 if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
1696 if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) 1698 {
1697 { 1699 List<UUID> uuids = new List<UUID>();
1698 List<UUID> uuids = new List<UUID>(); 1700 uuids.Add(itemID);
1699 uuids.Add(itemID); 1701 RemoveInventoryItem(remoteClient, uuids);
1700 RemoveInventoryItem(remoteClient, uuids);
1701 }
1702 }
1703 }
1704 else
1705 {
1706 m_log.ErrorFormat(
1707 "[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!",
1708 itemID, remoteClient.Name);
1709 }
1710 } 1702 }
1711 } 1703 }
1712 else // Updating existing item with new perms etc 1704 }
1713 { 1705 else // Updating existing item with new perms etc
1706 {
1714// m_log.DebugFormat( 1707// m_log.DebugFormat(
1715// "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()", 1708// "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()",
1716// currentItem.Name, part.Name); 1709// currentItem.Name, part.Name);
1717 1710
1718 // Only look for an uploaded updated asset if we are passed a transaction ID. This is only the 1711 if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
1719 // case for updates uploded through UDP. Updates uploaded via a capability (e.g. a script update) 1712 return;
1720 // will not pass in a transaction ID in the update message. 1713
1721 if (transactionID != UUID.Zero && AgentTransactionsModule != null) 1714 // Only look for an uploaded updated asset if we are passed a transaction ID. This is only the
1722 { 1715 // case for updates uploded through UDP. Updates uploaded via a capability (e.g. a script update)
1723 AgentTransactionsModule.HandleTaskItemUpdateFromTransaction( 1716 // will not pass in a transaction ID in the update message.
1724 remoteClient, part, transactionID, currentItem); 1717 if (transactionID != UUID.Zero && AgentTransactionsModule != null)
1718 {
1719 AgentTransactionsModule.HandleTaskItemUpdateFromTransaction(
1720 remoteClient, part, transactionID, currentItem);
1725 1721
1726// if ((InventoryType)itemInfo.InvType == InventoryType.Notecard) 1722// if ((InventoryType)itemInfo.InvType == InventoryType.Notecard)
1727// remoteClient.SendAgentAlertMessage("Notecard saved", false); 1723// remoteClient.SendAgentAlertMessage("Notecard saved", false);
@@ -1729,49 +1725,30 @@ namespace OpenSim.Region.Framework.Scenes
1729// remoteClient.SendAgentAlertMessage("Script saved", false); 1725// remoteClient.SendAgentAlertMessage("Script saved", false);
1730// else 1726// else
1731// remoteClient.SendAgentAlertMessage("Item saved", false); 1727// remoteClient.SendAgentAlertMessage("Item saved", false);
1732 } 1728 }
1733 1729
1734 // Base ALWAYS has move 1730 // Base ALWAYS has move
1735 currentItem.BasePermissions |= (uint)PermissionMask.Move; 1731 currentItem.BasePermissions |= (uint)PermissionMask.Move;
1736 1732
1737 itemInfo.Flags = currentItem.Flags; 1733 itemInfo.Flags = currentItem.Flags;
1738 1734
1739 // Check if we're allowed to mess with permissions 1735 // Check if we're allowed to mess with permissions
1740 if (!Permissions.IsGod(remoteClient.AgentId)) // Not a god 1736 if (!Permissions.IsGod(remoteClient.AgentId)) // Not a god
1737 {
1738 if (remoteClient.AgentId != part.OwnerID) // Not owner
1741 { 1739 {
1742 if (remoteClient.AgentId != part.OwnerID) // Not owner 1740 // Friends and group members can't change any perms
1743 { 1741 itemInfo.BasePermissions = currentItem.BasePermissions;
1744 // Friends and group members can't change any perms 1742 itemInfo.EveryonePermissions = currentItem.EveryonePermissions;
1745 itemInfo.BasePermissions = currentItem.BasePermissions; 1743 itemInfo.GroupPermissions = currentItem.GroupPermissions;
1746 itemInfo.EveryonePermissions = currentItem.EveryonePermissions; 1744 itemInfo.NextPermissions = currentItem.NextPermissions;
1747 itemInfo.GroupPermissions = currentItem.GroupPermissions; 1745 itemInfo.CurrentPermissions = currentItem.CurrentPermissions;
1748 itemInfo.NextPermissions = currentItem.NextPermissions;
1749 itemInfo.CurrentPermissions = currentItem.CurrentPermissions;
1750 }
1751 else
1752 {
1753 // Owner can't change base, and can change other
1754 // only up to base
1755 itemInfo.BasePermissions = currentItem.BasePermissions;
1756 if (itemInfo.EveryonePermissions != currentItem.EveryonePermissions)
1757 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteEveryone;
1758 if (itemInfo.GroupPermissions != currentItem.GroupPermissions)
1759 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
1760 if (itemInfo.CurrentPermissions != currentItem.CurrentPermissions)
1761 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteOwner;
1762 if (itemInfo.NextPermissions != currentItem.NextPermissions)
1763 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
1764 itemInfo.EveryonePermissions &= currentItem.BasePermissions;
1765 itemInfo.GroupPermissions &= currentItem.BasePermissions;
1766 itemInfo.CurrentPermissions &= currentItem.BasePermissions;
1767 itemInfo.NextPermissions &= currentItem.BasePermissions;
1768 }
1769
1770 } 1746 }
1771 else 1747 else
1772 { 1748 {
1773 if (itemInfo.BasePermissions != currentItem.BasePermissions) 1749 // Owner can't change base, and can change other
1774 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteBase; 1750 // only up to base
1751 itemInfo.BasePermissions = currentItem.BasePermissions;
1775 if (itemInfo.EveryonePermissions != currentItem.EveryonePermissions) 1752 if (itemInfo.EveryonePermissions != currentItem.EveryonePermissions)
1776 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteEveryone; 1753 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteEveryone;
1777 if (itemInfo.GroupPermissions != currentItem.GroupPermissions) 1754 if (itemInfo.GroupPermissions != currentItem.GroupPermissions)
@@ -1780,24 +1757,35 @@ namespace OpenSim.Region.Framework.Scenes
1780 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteOwner; 1757 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteOwner;
1781 if (itemInfo.NextPermissions != currentItem.NextPermissions) 1758 if (itemInfo.NextPermissions != currentItem.NextPermissions)
1782 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner; 1759 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
1760 itemInfo.EveryonePermissions &= currentItem.BasePermissions;
1761 itemInfo.GroupPermissions &= currentItem.BasePermissions;
1762 itemInfo.CurrentPermissions &= currentItem.BasePermissions;
1763 itemInfo.NextPermissions &= currentItem.BasePermissions;
1783 } 1764 }
1784 1765
1785 // Next ALWAYS has move 1766 }
1786 itemInfo.NextPermissions |= (uint)PermissionMask.Move; 1767 else
1768 {
1769 if (itemInfo.BasePermissions != currentItem.BasePermissions)
1770 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteBase;
1771 if (itemInfo.EveryonePermissions != currentItem.EveryonePermissions)
1772 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteEveryone;
1773 if (itemInfo.GroupPermissions != currentItem.GroupPermissions)
1774 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
1775 if (itemInfo.CurrentPermissions != currentItem.CurrentPermissions)
1776 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteOwner;
1777 if (itemInfo.NextPermissions != currentItem.NextPermissions)
1778 itemInfo.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
1779 }
1787 1780
1788 if (part.Inventory.UpdateInventoryItem(itemInfo)) 1781 // Next ALWAYS has move
1789 { 1782 itemInfo.NextPermissions |= (uint)PermissionMask.Move;
1790 part.SendPropertiesToClient(remoteClient); 1783
1791 } 1784 if (part.Inventory.UpdateInventoryItem(itemInfo))
1785 {
1786 part.SendPropertiesToClient(remoteClient);
1792 } 1787 }
1793 } 1788 }
1794 else
1795 {
1796 m_log.WarnFormat(
1797 "[PRIM INVENTORY]: " +
1798 "Update with item {0} requested of prim {1} for {2} but this prim does not exist",
1799 itemID, primLocalID, remoteClient.Name);
1800 }
1801 } 1789 }
1802 1790
1803 /// <summary> 1791 /// <summary>
@@ -1960,6 +1948,8 @@ namespace OpenSim.Region.Framework.Scenes
1960 part.Inventory.AddInventoryItem(taskItem, false); 1948 part.Inventory.AddInventoryItem(taskItem, false);
1961 part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0); 1949 part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0);
1962 1950
1951 part.ParentGroup.AggregatePerms();
1952
1963 // tell anyone managing scripts that a new script exists 1953 // tell anyone managing scripts that a new script exists
1964 EventManager.TriggerNewScript(agentID, part, taskItem.ItemID); 1954 EventManager.TriggerNewScript(agentID, part, taskItem.ItemID);
1965 1955
@@ -2095,13 +2085,20 @@ namespace OpenSim.Region.Framework.Scenes
2095 /// <param name='action'>DeRezAction</param> 2085 /// <param name='action'>DeRezAction</param>
2096 /// <param name='destinationID'>User folder ID to place derezzed object</param> 2086 /// <param name='destinationID'>User folder ID to place derezzed object</param>
2097 public virtual void DeRezObjects( 2087 public virtual void DeRezObjects(
2098 IClientAPI remoteClient, List<uint> localIDs, UUID groupID, DeRezAction action, UUID destinationID) 2088 IClientAPI remoteClient, List<uint> localIDs, UUID groupID, DeRezAction action, UUID destinationID, bool AddToReturns = true)
2099 { 2089 {
2100 // First, see of we can perform the requested action and 2090 // First, see of we can perform the requested action and
2101 // build a list of eligible objects 2091 // build a list of eligible objects
2102 List<uint> deleteIDs = new List<uint>(); 2092 List<uint> deleteIDs = new List<uint>();
2103 List<SceneObjectGroup> deleteGroups = new List<SceneObjectGroup>(); 2093 List<SceneObjectGroup> deleteGroups = new List<SceneObjectGroup>();
2104 List<SceneObjectGroup> takeGroups = new List<SceneObjectGroup>(); 2094 List<SceneObjectGroup> takeGroups = new List<SceneObjectGroup>();
2095 List<SceneObjectGroup> takeDeleteGroups = new List<SceneObjectGroup>();
2096
2097 ScenePresence sp = null;
2098 if(remoteClient != null)
2099 sp = remoteClient.SceneAgent as ScenePresence;
2100 else if(action != DeRezAction.Return)
2101 return; // only Return can be called without a client
2105 2102
2106 // Start with true for both, then remove the flags if objects 2103 // Start with true for both, then remove the flags if objects
2107 // that we can't derez are part of the selection 2104 // that we can't derez are part of the selection
@@ -2157,17 +2154,17 @@ namespace OpenSim.Region.Framework.Scenes
2157 { 2154 {
2158 if (action == DeRezAction.TakeCopy) 2155 if (action == DeRezAction.TakeCopy)
2159 { 2156 {
2160 if (!Permissions.CanTakeCopyObject(grp.UUID, remoteClient.AgentId)) 2157 if (!Permissions.CanTakeCopyObject(grp, sp))
2161 permissionToTakeCopy = false; 2158 permissionToTakeCopy = false;
2162 } 2159 }
2163 else 2160 else
2164 { 2161 {
2165 permissionToTakeCopy = false; 2162 permissionToTakeCopy = false;
2166 } 2163 }
2167 if (!Permissions.CanTakeObject(grp.UUID, remoteClient.AgentId)) 2164 if (!Permissions.CanTakeObject(grp, sp))
2168 permissionToTake = false; 2165 permissionToTake = false;
2169 2166
2170 if (!Permissions.CanDeleteObject(grp.UUID, remoteClient.AgentId)) 2167 if (!Permissions.CanDeleteObject(grp, remoteClient))
2171 permissionToDelete = false; 2168 permissionToDelete = false;
2172 } 2169 }
2173 2170
@@ -2208,13 +2205,14 @@ namespace OpenSim.Region.Framework.Scenes
2208 { 2205 {
2209 if (Permissions.CanReturnObjects( 2206 if (Permissions.CanReturnObjects(
2210 null, 2207 null,
2211 remoteClient.AgentId, 2208 remoteClient,
2212 new List<SceneObjectGroup>() {grp})) 2209 new List<SceneObjectGroup>() {grp}))
2213 { 2210 {
2214 permissionToTake = true; 2211 permissionToTake = true;
2215 permissionToDelete = true; 2212 permissionToDelete = true;
2216 2213 if(AddToReturns)
2217 AddReturn(grp.OwnerID == grp.GroupID ? grp.LastOwnerID : grp.OwnerID, grp.Name, grp.AbsolutePosition, "parcel owner return"); 2214 AddReturn(grp.OwnerID == grp.GroupID ? grp.LastOwnerID : grp.OwnerID, grp.Name, grp.AbsolutePosition,
2215 "parcel owner return");
2218 } 2216 }
2219 } 2217 }
2220 else // Auto return passes through here with null agent 2218 else // Auto return passes through here with null agent
@@ -2224,26 +2222,24 @@ namespace OpenSim.Region.Framework.Scenes
2224 } 2222 }
2225 } 2223 }
2226 2224
2227 if (permissionToTake && (!permissionToDelete))
2228 takeGroups.Add(grp);
2229
2230 if (permissionToDelete) 2225 if (permissionToDelete)
2231 { 2226 {
2232 if (permissionToTake) 2227 if (permissionToTake)
2228 takeDeleteGroups.Add(grp);
2229 else
2233 deleteGroups.Add(grp); 2230 deleteGroups.Add(grp);
2234 deleteIDs.Add(grp.LocalId); 2231 deleteIDs.Add(grp.LocalId);
2235 } 2232 }
2233 else if(permissionToTake)
2234 takeGroups.Add(grp);
2236 } 2235 }
2237 2236
2238 SendKillObject(deleteIDs); 2237 SendKillObject(deleteIDs);
2239 2238
2240 if (deleteGroups.Count > 0) 2239 if (takeDeleteGroups.Count > 0)
2241 { 2240 {
2242 foreach (SceneObjectGroup g in deleteGroups)
2243 deleteIDs.Remove(g.LocalId);
2244
2245 m_asyncSceneObjectDeleter.DeleteToInventory( 2241 m_asyncSceneObjectDeleter.DeleteToInventory(
2246 action, destinationID, deleteGroups, remoteClient, 2242 action, destinationID, takeDeleteGroups, remoteClient,
2247 true); 2243 true);
2248 } 2244 }
2249 if (takeGroups.Count > 0) 2245 if (takeGroups.Count > 0)
@@ -2252,7 +2248,7 @@ namespace OpenSim.Region.Framework.Scenes
2252 action, destinationID, takeGroups, remoteClient, 2248 action, destinationID, takeGroups, remoteClient,
2253 false); 2249 false);
2254 } 2250 }
2255 if (deleteIDs.Count > 0) 2251 if (deleteGroups.Count > 0)
2256 { 2252 {
2257 foreach (SceneObjectGroup g in deleteGroups) 2253 foreach (SceneObjectGroup g in deleteGroups)
2258 DeleteSceneObject(g, true); 2254 DeleteSceneObject(g, true);
@@ -2640,6 +2636,7 @@ namespace OpenSim.Region.Framework.Scenes
2640 2636
2641 // We can only call this after adding the scene object, since the scene object references the scene 2637 // We can only call this after adding the scene object, since the scene object references the scene
2642 // to find out if scripts should be activated at all. 2638 // to find out if scripts should be activated at all.
2639 group.AggregatePerms();
2643 group.CreateScriptInstances(param, true, DefaultScriptEngine, 3); 2640 group.CreateScriptInstances(param, true, DefaultScriptEngine, 3);
2644 2641
2645 group.ScheduleGroupForFullUpdate(); 2642 group.ScheduleGroupForFullUpdate();
@@ -2649,7 +2646,7 @@ namespace OpenSim.Region.Framework.Scenes
2649 } 2646 }
2650 2647
2651 public virtual bool returnObjects(SceneObjectGroup[] returnobjects, 2648 public virtual bool returnObjects(SceneObjectGroup[] returnobjects,
2652 UUID AgentId) 2649 IClientAPI client)
2653 { 2650 {
2654 List<uint> localIDs = new List<uint>(); 2651 List<uint> localIDs = new List<uint>();
2655 2652
@@ -2659,8 +2656,8 @@ namespace OpenSim.Region.Framework.Scenes
2659 "parcel owner return"); 2656 "parcel owner return");
2660 localIDs.Add(grp.RootPart.LocalId); 2657 localIDs.Add(grp.RootPart.LocalId);
2661 } 2658 }
2662 DeRezObjects(null, localIDs, UUID.Zero, DeRezAction.Return, 2659 DeRezObjects(client, localIDs, UUID.Zero, DeRezAction.Return,
2663 UUID.Zero); 2660 UUID.Zero, false);
2664 2661
2665 return true; 2662 return true;
2666 } 2663 }
@@ -2691,9 +2688,6 @@ namespace OpenSim.Region.Framework.Scenes
2691 { 2688 {
2692 if (ownerID != UUID.Zero) 2689 if (ownerID != UUID.Zero)
2693 return; 2690 return;
2694
2695 if (!Permissions.CanDeedObject(remoteClient.AgentId, groupID))
2696 return;
2697 } 2691 }
2698 2692
2699 List<SceneObjectGroup> groups = new List<SceneObjectGroup>(); 2693 List<SceneObjectGroup> groups = new List<SceneObjectGroup>();
@@ -2724,21 +2718,22 @@ namespace OpenSim.Region.Framework.Scenes
2724 child.TriggerScriptChangedEvent(Changed.OWNER); 2718 child.TriggerScriptChangedEvent(Changed.OWNER);
2725 } 2719 }
2726 } 2720 }
2727 else // The object was deeded to the group 2721 else // The object deeded to the group
2728 { 2722 {
2729 if (!Permissions.IsGod(remoteClient.AgentId) && sog.OwnerID != remoteClient.AgentId) 2723 if (!Permissions.CanDeedObject(remoteClient, sog, groupID))
2730 continue; 2724 continue;
2731 2725
2732 if (!Permissions.CanTransferObject(sog.UUID, groupID)) 2726 sog.SetOwnerId(groupID);
2733 continue;
2734 2727
2735 if (sog.GroupID != groupID) 2728 // this is wrong, GroupMask is used for group sharing, still possible to set
2736 continue; 2729 // this whould give owner rights to users that are member of group but don't have role powers to edit
2730// sog.RootPart.GroupMask = sog.RootPart.OwnerMask;
2737 2731
2738 sog.SetOwnerId(groupID); 2732 // we should keep all permissions on deed to group
2739 // Make the group mask be the previous owner mask 2733 // and with this comented code, if user does not set next permissions on the object
2740 sog.RootPart.GroupMask = sog.RootPart.OwnerMask; 2734 // and on ALL contents of ALL prims, he may loose rights, making the object useless
2741 sog.ApplyNextOwnerPermissions(); 2735 sog.ApplyNextOwnerPermissions();
2736 sog.AggregatePerms();
2742 2737
2743 sog.ScheduleGroupForFullUpdate(); 2738 sog.ScheduleGroupForFullUpdate();
2744 2739
@@ -2748,8 +2743,6 @@ namespace OpenSim.Region.Framework.Scenes
2748 child.Inventory.ChangeInventoryOwner(groupID); 2743 child.Inventory.ChangeInventoryOwner(groupID);
2749 child.TriggerScriptChangedEvent(Changed.OWNER); 2744 child.TriggerScriptChangedEvent(Changed.OWNER);
2750 } 2745 }
2751
2752
2753 } 2746 }
2754 } 2747 }
2755 2748
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 2d62b50..4fef9c3 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -183,11 +183,12 @@ namespace OpenSim.Region.Framework.Scenes
183 part.SendFullUpdate(remoteClient); 183 part.SendFullUpdate(remoteClient);
184 184
185 // A prim is only tainted if it's allowed to be edited by the person clicking it. 185 // A prim is only tainted if it's allowed to be edited by the person clicking it.
186 if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) 186 if (Permissions.CanChangeSelectedState(part, (ScenePresence)remoteClient.SceneAgent))
187 || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId))
188 { 187 {
188 bool oldsel = part.IsSelected;
189 part.IsSelected = true; 189 part.IsSelected = true;
190 EventManager.TriggerParcelPrimCountTainted(); 190 if(!oldsel)
191 EventManager.TriggerParcelPrimCountTainted();
191 } 192 }
192 193
193 part.SendPropertiesToClient(remoteClient); 194 part.SendPropertiesToClient(remoteClient);
@@ -229,6 +230,7 @@ namespace OpenSim.Region.Framework.Scenes
229 if (so.OwnerID == remoteClient.AgentId) 230 if (so.OwnerID == remoteClient.AgentId)
230 { 231 {
231 so.SetGroup(groupID, remoteClient); 232 so.SetGroup(groupID, remoteClient);
233 EventManager.TriggerParcelPrimCountTainted();
232 } 234 }
233 } 235 }
234 } 236 }
@@ -250,8 +252,7 @@ namespace OpenSim.Region.Framework.Scenes
250 // handled by group, but by prim. Legacy cruft. 252 // handled by group, but by prim. Legacy cruft.
251 // TODO: Make selection flagging per prim! 253 // TODO: Make selection flagging per prim!
252 // 254 //
253 if (Permissions.CanEditObject(part.ParentGroup.UUID, remoteClient.AgentId) 255 if (Permissions.CanChangeSelectedState(part, (ScenePresence)remoteClient.SceneAgent))
254 || Permissions.CanMoveObject(part.ParentGroup.UUID, remoteClient.AgentId))
255 { 256 {
256 part.IsSelected = false; 257 part.IsSelected = false;
257 if (!part.ParentGroup.IsAttachment && oldgprSelect != part.ParentGroup.IsSelected) 258 if (!part.ParentGroup.IsAttachment && oldgprSelect != part.ParentGroup.IsSelected)
@@ -327,7 +328,7 @@ namespace OpenSim.Region.Framework.Scenes
327 if(group == null || group.IsDeleted) 328 if(group == null || group.IsDeleted)
328 return; 329 return;
329 330
330 if (Permissions.CanMoveObject(group.UUID, remoteClient.AgentId))// && PermissionsMngr.) 331 if (Permissions.CanMoveObject(group, remoteClient))// && PermissionsMngr.)
331 { 332 {
332 group.GrabMovement(objectID, offset, pos, remoteClient); 333 group.GrabMovement(objectID, offset, pos, remoteClient);
333 } 334 }
@@ -388,7 +389,7 @@ namespace OpenSim.Region.Framework.Scenes
388 SceneObjectGroup group = GetGroupByPrim(objectID); 389 SceneObjectGroup group = GetGroupByPrim(objectID);
389 if (group != null) 390 if (group != null)
390 { 391 {
391 if (Permissions.CanMoveObject(group.UUID, remoteClient.AgentId))// && PermissionsMngr.) 392 if (Permissions.CanMoveObject(group, remoteClient))// && PermissionsMngr.)
392 { 393 {
393 group.SpinStart(remoteClient); 394 group.SpinStart(remoteClient);
394 } 395 }
@@ -406,7 +407,7 @@ namespace OpenSim.Region.Framework.Scenes
406 SceneObjectGroup group = GetGroupByPrim(objectID); 407 SceneObjectGroup group = GetGroupByPrim(objectID);
407 if (group != null) 408 if (group != null)
408 { 409 {
409 if (Permissions.CanMoveObject(group.UUID, remoteClient.AgentId))// && PermissionsMngr.) 410 if (Permissions.CanMoveObject(group, remoteClient))// && PermissionsMngr.)
410 { 411 {
411 group.SpinMovement(rotation, remoteClient); 412 group.SpinMovement(rotation, remoteClient);
412 } 413 }
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
index 893b38c..c55a7a6 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
@@ -37,52 +37,60 @@ using OpenSim.Region.Framework.Interfaces;
37namespace OpenSim.Region.Framework.Scenes 37namespace OpenSim.Region.Framework.Scenes
38{ 38{
39 #region Delegates 39 #region Delegates
40 public delegate uint GenerateClientFlagsHandler(UUID userID, UUID objectID); 40 public delegate uint GenerateClientFlagsHandler(SceneObjectPart part, ScenePresence sp, uint curEffectivePerms);
41 public delegate void SetBypassPermissionsHandler(bool value); 41 public delegate void SetBypassPermissionsHandler(bool value);
42 public delegate bool BypassPermissionsHandler(); 42 public delegate bool BypassPermissionsHandler();
43 public delegate bool PropagatePermissionsHandler(); 43 public delegate bool PropagatePermissionsHandler();
44 public delegate bool RezObjectHandler(int objectCount, UUID owner, Vector3 objectPosition, Scene scene); 44 public delegate bool RezObjectHandler(int objectCount, UUID owner, Vector3 objectPosition);
45 public delegate bool DeleteObjectHandler(UUID objectID, UUID deleter, Scene scene); 45 public delegate bool DeleteObjectHandlerByIDs(UUID objectID, UUID deleter);
46 public delegate bool TransferObjectHandler(UUID objectID, UUID recipient, Scene scene); 46 public delegate bool DeleteObjectHandler(SceneObjectGroup sog, ScenePresence sp);
47 public delegate bool TakeObjectHandler(UUID objectID, UUID stealer, Scene scene); 47 public delegate bool TransferObjectHandler(UUID objectID, UUID recipient);
48 public delegate bool SellGroupObjectHandler(UUID userID, UUID groupID, Scene scene); 48 public delegate bool TakeObjectHandler(SceneObjectGroup sog, ScenePresence sp);
49 public delegate bool TakeCopyObjectHandler(UUID objectID, UUID userID, Scene inScene); 49 public delegate bool SellGroupObjectHandler(UUID userID, UUID groupID);
50 public delegate bool DuplicateObjectHandler(int objectCount, UUID objectID, UUID owner, Scene scene, Vector3 objectPosition); 50 public delegate bool SellObjectHandlerByUserID(SceneObjectGroup sog, UUID userID, byte saleType);
51 public delegate bool EditObjectHandler(UUID objectID, UUID editorID, Scene scene); 51 public delegate bool SellObjectHandler(SceneObjectGroup sog, ScenePresence sp, byte saleType);
52 public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID, Scene scene); 52 public delegate bool TakeCopyObjectHandler(SceneObjectGroup sog, ScenePresence sp);
53 public delegate bool MoveObjectHandler(UUID objectID, UUID moverID, Scene scene); 53 public delegate bool DuplicateObjectHandler(SceneObjectGroup sog, ScenePresence sp);
54 public delegate bool ObjectEntryHandler(UUID objectID, bool enteringRegion, Vector3 newPoint, Scene scene); 54 public delegate bool EditObjectByIDsHandler(UUID objectID, UUID editorID);
55 public delegate bool ReturnObjectsHandler(ILandObject land, UUID user, List<SceneObjectGroup> objects, Scene scene); 55 public delegate bool EditObjectHandler(SceneObjectGroup sog, ScenePresence sp);
56 public delegate bool InstantMessageHandler(UUID user, UUID target, Scene startScene); 56 public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
57 public delegate bool InventoryTransferHandler(UUID user, UUID target, Scene startScene); 57 public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
58 public delegate bool ViewScriptHandler(UUID script, UUID objectID, UUID user, Scene scene); 58 public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
59 public delegate bool ViewNotecardHandler(UUID script, UUID objectID, UUID user, Scene scene); 59 public delegate bool ObjectEnterWithScriptsHandler(SceneObjectGroup sog, ILandObject land);
60 public delegate bool EditScriptHandler(UUID script, UUID objectID, UUID user, Scene scene); 60 public delegate bool ReturnObjectsHandler(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects);
61 public delegate bool EditNotecardHandler(UUID notecard, UUID objectID, UUID user, Scene scene); 61 public delegate bool InstantMessageHandler(UUID user, UUID target);
62 public delegate bool RunScriptHandler(UUID script, UUID objectID, UUID user, Scene scene); 62 public delegate bool InventoryTransferHandler(UUID user, UUID target);
63 public delegate bool CompileScriptHandler(UUID ownerUUID, int scriptType, Scene scene); 63 public delegate bool ViewScriptHandler(UUID script, UUID objectID, UUID user);
64 public delegate bool StartScriptHandler(UUID script, UUID user, Scene scene); 64 public delegate bool ViewNotecardHandler(UUID script, UUID objectID, UUID user);
65 public delegate bool StopScriptHandler(UUID script, UUID user, Scene scene); 65 public delegate bool EditScriptHandler(UUID script, UUID objectID, UUID user);
66 public delegate bool ResetScriptHandler(UUID prim, UUID script, UUID user, Scene scene); 66 public delegate bool EditNotecardHandler(UUID notecard, UUID objectID, UUID user);
67 public delegate bool TerraformLandHandler(UUID user, Vector3 position, Scene requestFromScene); 67 public delegate bool RunScriptHandlerByIDs(UUID script, UUID objectID, UUID user);
68 public delegate bool RunConsoleCommandHandler(UUID user, Scene requestFromScene); 68 public delegate bool RunScriptHandler(TaskInventoryItem item, SceneObjectPart part);
69 public delegate bool IssueEstateCommandHandler(UUID user, Scene requestFromScene, bool ownerCommand); 69 public delegate bool CompileScriptHandler(UUID ownerUUID, int scriptType);
70 public delegate bool IsGodHandler(UUID user, Scene requestFromScene); 70 public delegate bool StartScriptHandler(UUID script, UUID user);
71 public delegate bool IsGridGodHandler(UUID user, Scene requestFromScene); 71 public delegate bool StopScriptHandler(UUID script, UUID user);
72 public delegate bool ResetScriptHandler(UUID prim, UUID script, UUID user);
73 public delegate bool TerraformLandHandler(UUID user, Vector3 position);
74 public delegate bool RunConsoleCommandHandler(UUID user);
75 public delegate bool IssueEstateCommandHandler(UUID user, bool ownerCommand);
76 public delegate bool IsGodHandler(UUID user);
77 public delegate bool IsGridGodHandler(UUID user);
72 public delegate bool IsAdministratorHandler(UUID user); 78 public delegate bool IsAdministratorHandler(UUID user);
73 public delegate bool IsEstateManagerHandler(UUID user); 79 public delegate bool IsEstateManagerHandler(UUID user);
74 public delegate bool EditParcelHandler(UUID user, ILandObject parcel, Scene scene); 80 public delegate bool EditParcelHandler(UUID user, ILandObject parcel);
75 public delegate bool EditParcelPropertiesHandler(UUID user, ILandObject parcel, GroupPowers p, Scene scene, bool allowManager); 81 public delegate bool EditParcelPropertiesHandler(UUID user, ILandObject parcel, GroupPowers p, bool allowManager);
76 public delegate bool SellParcelHandler(UUID user, ILandObject parcel, Scene scene); 82 public delegate bool SellParcelHandler(UUID user, ILandObject parcel);
77 public delegate bool AbandonParcelHandler(UUID user, ILandObject parcel, Scene scene); 83 public delegate bool AbandonParcelHandler(UUID user, ILandObject parcel);
78 public delegate bool ReclaimParcelHandler(UUID user, ILandObject parcel, Scene scene); 84 public delegate bool ReclaimParcelHandler(UUID user, ILandObject parcel);
79 public delegate bool DeedParcelHandler(UUID user, ILandObject parcel, Scene scene); 85 public delegate bool DeedParcelHandler(UUID user, ILandObject parcel);
80 public delegate bool DeedObjectHandler(UUID user, UUID group, Scene scene); 86 public delegate bool DeedObjectHandler(ScenePresence sp, SceneObjectGroup sog, UUID targetGroupID);
81 public delegate bool BuyLandHandler(UUID user, ILandObject parcel, Scene scene); 87 public delegate bool BuyLandHandler(UUID user, ILandObject parcel);
82 public delegate bool LinkObjectHandler(UUID user, UUID objectID); 88 public delegate bool LinkObjectHandler(UUID user, UUID objectID);
83 public delegate bool DelinkObjectHandler(UUID user, UUID objectID); 89 public delegate bool DelinkObjectHandler(UUID user, UUID objectID);
84 public delegate bool CreateObjectInventoryHandler(int invType, UUID objectID, UUID userID); 90 public delegate bool CreateObjectInventoryHandler(int invType, UUID objectID, UUID userID);
85 public delegate bool CopyObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID); 91 public delegate bool CopyObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
92 public delegate bool DoObjectInvToObjectInv(TaskInventoryItem item, SceneObjectPart sourcePart, SceneObjectPart destPart);
93 public delegate bool DoDropInObjectInv(InventoryItemBase item, ScenePresence sp, SceneObjectPart destPart);
86 public delegate bool DeleteObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID); 94 public delegate bool DeleteObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
87 public delegate bool TransferObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID); 95 public delegate bool TransferObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
88 public delegate bool CreateUserInventoryHandler(int invType, UUID userID); 96 public delegate bool CreateUserInventoryHandler(int invType, UUID userID);
@@ -112,16 +120,23 @@ namespace OpenSim.Region.Framework.Scenes
112 public event BypassPermissionsHandler OnBypassPermissions; 120 public event BypassPermissionsHandler OnBypassPermissions;
113 public event PropagatePermissionsHandler OnPropagatePermissions; 121 public event PropagatePermissionsHandler OnPropagatePermissions;
114 public event RezObjectHandler OnRezObject; 122 public event RezObjectHandler OnRezObject;
123 public event DeleteObjectHandlerByIDs OnDeleteObjectByIDs;
115 public event DeleteObjectHandler OnDeleteObject; 124 public event DeleteObjectHandler OnDeleteObject;
116 public event TransferObjectHandler OnTransferObject; 125 public event TransferObjectHandler OnTransferObject;
117 public event TakeObjectHandler OnTakeObject; 126 public event TakeObjectHandler OnTakeObject;
127
118 public event SellGroupObjectHandler OnSellGroupObject; 128 public event SellGroupObjectHandler OnSellGroupObject;
129 public event SellObjectHandlerByUserID OnSellObjectByUserID;
130 public event SellObjectHandler OnSellObject;
131
119 public event TakeCopyObjectHandler OnTakeCopyObject; 132 public event TakeCopyObjectHandler OnTakeCopyObject;
120 public event DuplicateObjectHandler OnDuplicateObject; 133 public event DuplicateObjectHandler OnDuplicateObject;
134 public event EditObjectByIDsHandler OnEditObjectByIDs;
121 public event EditObjectHandler OnEditObject; 135 public event EditObjectHandler OnEditObject;
122 public event EditObjectInventoryHandler OnEditObjectInventory; 136 public event EditObjectInventoryHandler OnEditObjectInventory;
123 public event MoveObjectHandler OnMoveObject; 137 public event MoveObjectHandler OnMoveObject;
124 public event ObjectEntryHandler OnObjectEntry; 138 public event ObjectEntryHandler OnObjectEntry;
139 public event ObjectEnterWithScriptsHandler OnObjectEnterWithScripts;
125 public event ReturnObjectsHandler OnReturnObjects; 140 public event ReturnObjectsHandler OnReturnObjects;
126 public event InstantMessageHandler OnInstantMessage; 141 public event InstantMessageHandler OnInstantMessage;
127 public event InventoryTransferHandler OnInventoryTransfer; 142 public event InventoryTransferHandler OnInventoryTransfer;
@@ -129,6 +144,7 @@ namespace OpenSim.Region.Framework.Scenes
129 public event ViewNotecardHandler OnViewNotecard; 144 public event ViewNotecardHandler OnViewNotecard;
130 public event EditScriptHandler OnEditScript; 145 public event EditScriptHandler OnEditScript;
131 public event EditNotecardHandler OnEditNotecard; 146 public event EditNotecardHandler OnEditNotecard;
147 public event RunScriptHandlerByIDs OnRunScriptByIDs;
132 public event RunScriptHandler OnRunScript; 148 public event RunScriptHandler OnRunScript;
133 public event CompileScriptHandler OnCompileScript; 149 public event CompileScriptHandler OnCompileScript;
134 public event StartScriptHandler OnStartScript; 150 public event StartScriptHandler OnStartScript;
@@ -137,7 +153,6 @@ namespace OpenSim.Region.Framework.Scenes
137 public event TerraformLandHandler OnTerraformLand; 153 public event TerraformLandHandler OnTerraformLand;
138 public event RunConsoleCommandHandler OnRunConsoleCommand; 154 public event RunConsoleCommandHandler OnRunConsoleCommand;
139 public event IssueEstateCommandHandler OnIssueEstateCommand; 155 public event IssueEstateCommandHandler OnIssueEstateCommand;
140 public event IsGodHandler OnIsGod;
141 public event IsGridGodHandler OnIsGridGod; 156 public event IsGridGodHandler OnIsGridGod;
142 public event IsAdministratorHandler OnIsAdministrator; 157 public event IsAdministratorHandler OnIsAdministrator;
143 public event IsEstateManagerHandler OnIsEstateManager; 158 public event IsEstateManagerHandler OnIsEstateManager;
@@ -153,6 +168,8 @@ namespace OpenSim.Region.Framework.Scenes
153 public event DelinkObjectHandler OnDelinkObject; 168 public event DelinkObjectHandler OnDelinkObject;
154 public event CreateObjectInventoryHandler OnCreateObjectInventory; 169 public event CreateObjectInventoryHandler OnCreateObjectInventory;
155 public event CopyObjectInventoryHandler OnCopyObjectInventory; 170 public event CopyObjectInventoryHandler OnCopyObjectInventory;
171 public event DoObjectInvToObjectInv OnDoObjectInvToObjectInv;
172 public event DoDropInObjectInv OnDropInObjectInv;
156 public event DeleteObjectInventoryHandler OnDeleteObjectInventory; 173 public event DeleteObjectInventoryHandler OnDeleteObjectInventory;
157 public event TransferObjectInventoryHandler OnTransferObjectInventory; 174 public event TransferObjectInventoryHandler OnTransferObjectInventory;
158 public event CreateUserInventoryHandler OnCreateUserInventory; 175 public event CreateUserInventoryHandler OnCreateUserInventory;
@@ -167,7 +184,7 @@ namespace OpenSim.Region.Framework.Scenes
167 184
168 #region Object Permission Checks 185 #region Object Permission Checks
169 186
170 public uint GenerateClientFlags(UUID userID, UUID objectID) 187 public uint GenerateClientFlags( SceneObjectPart part, ScenePresence sp)
171 { 188 {
172 // libomv will moan about PrimFlags.ObjectYouOfficer being 189 // libomv will moan about PrimFlags.ObjectYouOfficer being
173 // obsolete... 190 // obsolete...
@@ -179,12 +196,9 @@ namespace OpenSim.Region.Framework.Scenes
179 PrimFlags.ObjectTransfer | 196 PrimFlags.ObjectTransfer |
180 PrimFlags.ObjectYouOwner | 197 PrimFlags.ObjectYouOwner |
181 PrimFlags.ObjectAnyOwner | 198 PrimFlags.ObjectAnyOwner |
182 PrimFlags.ObjectOwnerModify | 199 PrimFlags.ObjectOwnerModify;
183 PrimFlags.ObjectYouOfficer;
184#pragma warning restore 0612 200#pragma warning restore 0612
185 201
186 SceneObjectPart part = m_scene.GetSceneObjectPart(objectID);
187
188 if (part == null) 202 if (part == null)
189 return 0; 203 return 0;
190 204
@@ -196,7 +210,7 @@ namespace OpenSim.Region.Framework.Scenes
196 Delegate[] list = handlerGenerateClientFlags.GetInvocationList(); 210 Delegate[] list = handlerGenerateClientFlags.GetInvocationList();
197 foreach (GenerateClientFlagsHandler check in list) 211 foreach (GenerateClientFlagsHandler check in list)
198 { 212 {
199 perms &= check(userID, objectID); 213 perms &= check(part, sp, perms);
200 } 214 }
201 } 215 }
202 return perms; 216 return perms;
@@ -248,7 +262,7 @@ namespace OpenSim.Region.Framework.Scenes
248 Delegate[] list = handler.GetInvocationList(); 262 Delegate[] list = handler.GetInvocationList();
249 foreach (RezObjectHandler h in list) 263 foreach (RezObjectHandler h in list)
250 { 264 {
251 if (h(objectCount, owner,objectPosition, m_scene) == false) 265 if (h(objectCount, owner,objectPosition) == false)
252 return false; 266 return false;
253 } 267 }
254 } 268 }
@@ -262,141 +276,183 @@ namespace OpenSim.Region.Framework.Scenes
262 { 276 {
263 bool result = true; 277 bool result = true;
264 278
265 DeleteObjectHandler handler = OnDeleteObject; 279 DeleteObjectHandlerByIDs handler = OnDeleteObjectByIDs;
266 if (handler != null) 280 if (handler != null)
267 { 281 {
268 Delegate[] list = handler.GetInvocationList(); 282 Delegate[] list = handler.GetInvocationList();
269 foreach (DeleteObjectHandler h in list) 283 foreach (DeleteObjectHandlerByIDs h in list)
270 { 284 {
271 if (h(objectID, deleter, m_scene) == false) 285 if (h(objectID, deleter) == false)
272 { 286 {
273 result = false; 287 result = false;
274 break; 288 break;
275 } 289 }
276 } 290 }
277 } 291 }
278
279 return result; 292 return result;
280 } 293 }
281 294
282 public bool CanTransferObject(UUID objectID, UUID recipient) 295 public bool CanDeleteObject(SceneObjectGroup sog, IClientAPI client)
283 { 296 {
284 bool result = true; 297 DeleteObjectHandler handler = OnDeleteObject;
298 if (handler != null)
299 {
300 if(sog == null || client == null || client.SceneAgent == null)
301 return false;
302
303 ScenePresence sp = client.SceneAgent as ScenePresence;
304
305 Delegate[] list = handler.GetInvocationList();
306 foreach (DeleteObjectHandler h in list)
307 {
308 if (h(sog, sp) == false)
309 return false;
310 }
311 }
312
313 return true;
314 }
285 315
316 public bool CanTransferObject(UUID objectID, UUID recipient)
317 {
286 TransferObjectHandler handler = OnTransferObject; 318 TransferObjectHandler handler = OnTransferObject;
287 if (handler != null) 319 if (handler != null)
288 { 320 {
289 Delegate[] list = handler.GetInvocationList(); 321 Delegate[] list = handler.GetInvocationList();
290 foreach (TransferObjectHandler h in list) 322 foreach (TransferObjectHandler h in list)
291 { 323 {
292 if (h(objectID, recipient, m_scene) == false) 324 if (h(objectID, recipient) == false)
293 { 325 return false;
294 result = false;
295 break;
296 }
297 } 326 }
298 } 327 }
299 328 return true;
300 return result;
301 } 329 }
302 330
303 #endregion 331 #endregion
304 332
305 #region TAKE OBJECT 333 #region TAKE OBJECT
306 public bool CanTakeObject(UUID objectID, UUID AvatarTakingUUID) 334 public bool CanTakeObject(SceneObjectGroup sog, ScenePresence sp)
307 { 335 {
308 bool result = true;
309
310 TakeObjectHandler handler = OnTakeObject; 336 TakeObjectHandler handler = OnTakeObject;
311 if (handler != null) 337 if (handler != null)
312 { 338 {
339 if(sog == null || sp == null)
340 return false;
341
313 Delegate[] list = handler.GetInvocationList(); 342 Delegate[] list = handler.GetInvocationList();
314 foreach (TakeObjectHandler h in list) 343 foreach (TakeObjectHandler h in list)
315 { 344 {
316 if (h(objectID, AvatarTakingUUID, m_scene) == false) 345 if (h(sog, sp) == false)
317 { 346 return false;
318 result = false;
319 break;
320 }
321 } 347 }
322 } 348 }
323
324// m_log.DebugFormat( 349// m_log.DebugFormat(
325// "[SCENE PERMISSIONS]: CanTakeObject() fired for object {0}, taker {1}, result {2}", 350// "[SCENE PERMISSIONS]: CanTakeObject() fired for object {0}, taker {1}, result {2}",
326// objectID, AvatarTakingUUID, result); 351// objectID, AvatarTakingUUID, result);
327 352 return true;
328 return result;
329 } 353 }
330 354
331 #endregion 355 #endregion
332 356
333 #region SELL GROUP OBJECT 357 #region SELL GROUP OBJECT
334 public bool CanSellGroupObject(UUID userID, UUID groupID, Scene scene) 358 public bool CanSellGroupObject(UUID userID, UUID groupID)
335 { 359 {
336 bool result = true;
337
338 SellGroupObjectHandler handler = OnSellGroupObject; 360 SellGroupObjectHandler handler = OnSellGroupObject;
339 if (handler != null) 361 if (handler != null)
340 { 362 {
341 Delegate[] list = handler.GetInvocationList(); 363 Delegate[] list = handler.GetInvocationList();
342 foreach (SellGroupObjectHandler h in list) 364 foreach (SellGroupObjectHandler h in list)
343 { 365 {
344 if (h(userID, groupID, scene) == false) 366 if (h(userID, groupID) == false)
345 { 367 return false;
346 result = false;
347 break;
348 }
349 } 368 }
350 } 369 }
351
352 //m_log.DebugFormat( 370 //m_log.DebugFormat(
353 // "[SCENE PERMISSIONS]: CanSellGroupObject() fired for user {0}, group {1}, result {2}", 371 // "[SCENE PERMISSIONS]: CanSellGroupObject() fired for user {0}, group {1}, result {2}",
354 // userID, groupID, result); 372 // userID, groupID, result);
373 return true;
374 }
355 375
356 return result; 376 #endregion
377
378 #region SELL OBJECT
379 public bool CanSellObject(IClientAPI client, SceneObjectGroup sog, byte saleType)
380 {
381 SellObjectHandler handler = OnSellObject;
382 if (handler != null)
383 {
384 if(sog == null || client == null || client.SceneAgent == null)
385 return false;
386
387 ScenePresence sp = client.SceneAgent as ScenePresence;
388 Delegate[] list = handler.GetInvocationList();
389 foreach (SellObjectHandler h in list)
390 {
391 if (h(sog, sp, saleType) == false)
392 return false;
393 }
394 }
395 return true;
396 }
397
398 public bool CanSellObject(UUID userID, SceneObjectGroup sog, byte saleType)
399 {
400 SellObjectHandlerByUserID handler = OnSellObjectByUserID;
401 if (handler != null)
402 {
403 if(sog == null)
404 return false;
405 Delegate[] list = handler.GetInvocationList();
406 foreach (SellObjectHandlerByUserID h in list)
407 {
408 if (h(sog, userID, saleType) == false)
409 return false;
410 }
411 }
412 return true;
357 } 413 }
358 414
359 #endregion 415 #endregion
360 416
361 417
362 #region TAKE COPY OBJECT 418 #region TAKE COPY OBJECT
363 public bool CanTakeCopyObject(UUID objectID, UUID userID) 419 public bool CanTakeCopyObject(SceneObjectGroup sog, ScenePresence sp)
364 { 420 {
365 bool result = true;
366
367 TakeCopyObjectHandler handler = OnTakeCopyObject; 421 TakeCopyObjectHandler handler = OnTakeCopyObject;
368 if (handler != null) 422 if (handler != null)
369 { 423 {
424 if(sog == null || sp == null)
425 return false;
370 Delegate[] list = handler.GetInvocationList(); 426 Delegate[] list = handler.GetInvocationList();
371 foreach (TakeCopyObjectHandler h in list) 427 foreach (TakeCopyObjectHandler h in list)
372 { 428 {
373 if (h(objectID, userID, m_scene) == false) 429 if (h(sog, sp) == false)
374 { 430 return false;
375 result = false;
376 break;
377 }
378 } 431 }
379 } 432 }
380
381// m_log.DebugFormat( 433// m_log.DebugFormat(
382// "[SCENE PERMISSIONS]: CanTakeCopyObject() fired for object {0}, user {1}, result {2}", 434// "[SCENE PERMISSIONS]: CanTakeCopyObject() fired for object {0}, user {1}, result {2}",
383// objectID, userID, result); 435// objectID, userID, result);
384 436 return true;
385 return result;
386 } 437 }
387 438
388 #endregion 439 #endregion
389 440
390 #region DUPLICATE OBJECT 441 #region DUPLICATE OBJECT
391 public bool CanDuplicateObject(int objectCount, UUID objectID, UUID owner, Vector3 objectPosition) 442 public bool CanDuplicateObject(SceneObjectGroup sog, UUID agentID)
392 { 443 {
393 DuplicateObjectHandler handler = OnDuplicateObject; 444 DuplicateObjectHandler handler = OnDuplicateObject;
394 if (handler != null) 445 if (handler != null)
395 { 446 {
447 if(sog == null || sog.IsDeleted)
448 return false;
449 ScenePresence sp = m_scene.GetScenePresence(agentID);
450 if(sp == null || sp.IsDeleted)
451 return false;
396 Delegate[] list = handler.GetInvocationList(); 452 Delegate[] list = handler.GetInvocationList();
397 foreach (DuplicateObjectHandler h in list) 453 foreach (DuplicateObjectHandler h in list)
398 { 454 {
399 if (h(objectCount, objectID, owner, m_scene, objectPosition) == false) 455 if (h(sog, sp) == false)
400 return false; 456 return false;
401 } 457 }
402 } 458 }
@@ -405,16 +461,50 @@ namespace OpenSim.Region.Framework.Scenes
405 461
406 #endregion 462 #endregion
407 463
464 #region persence EDIT or MOVE OBJECT
465 private const uint CANSELECTMASK = (uint)(
466 PrimFlags.ObjectMove |
467 PrimFlags.ObjectModify |
468 PrimFlags.ObjectOwnerModify
469 );
470
471 public bool CanChangeSelectedState(SceneObjectPart part, ScenePresence sp)
472 {
473 uint perms = GenerateClientFlags(part, sp);
474 return (perms & CANSELECTMASK) != 0;
475 }
476
477 #endregion
408 #region EDIT OBJECT 478 #region EDIT OBJECT
409 public bool CanEditObject(UUID objectID, UUID editorID) 479 public bool CanEditObject(UUID objectID, UUID editorID)
410 { 480 {
481 EditObjectByIDsHandler handler = OnEditObjectByIDs;
482 if (handler != null)
483 {
484 Delegate[] list = handler.GetInvocationList();
485 foreach (EditObjectByIDsHandler h in list)
486 {
487 if (h(objectID, editorID) == false)
488 return false;
489 }
490 }
491 return true;
492 }
493
494 public bool CanEditObject(SceneObjectGroup sog, IClientAPI client)
495 {
411 EditObjectHandler handler = OnEditObject; 496 EditObjectHandler handler = OnEditObject;
412 if (handler != null) 497 if (handler != null)
413 { 498 {
499 if(sog == null || client == null || client.SceneAgent == null)
500 return false;
501
502 ScenePresence sp = client.SceneAgent as ScenePresence;
503
414 Delegate[] list = handler.GetInvocationList(); 504 Delegate[] list = handler.GetInvocationList();
415 foreach (EditObjectHandler h in list) 505 foreach (EditObjectHandler h in list)
416 { 506 {
417 if (h(objectID, editorID, m_scene) == false) 507 if (h(sog, sp) == false)
418 return false; 508 return false;
419 } 509 }
420 } 510 }
@@ -429,7 +519,7 @@ namespace OpenSim.Region.Framework.Scenes
429 Delegate[] list = handler.GetInvocationList(); 519 Delegate[] list = handler.GetInvocationList();
430 foreach (EditObjectInventoryHandler h in list) 520 foreach (EditObjectInventoryHandler h in list)
431 { 521 {
432 if (h(objectID, editorID, m_scene) == false) 522 if (h(objectID, editorID) == false)
433 return false; 523 return false;
434 } 524 }
435 } 525 }
@@ -439,15 +529,20 @@ namespace OpenSim.Region.Framework.Scenes
439 #endregion 529 #endregion
440 530
441 #region MOVE OBJECT 531 #region MOVE OBJECT
442 public bool CanMoveObject(UUID objectID, UUID moverID) 532 public bool CanMoveObject(SceneObjectGroup sog, IClientAPI client)
443 { 533 {
444 MoveObjectHandler handler = OnMoveObject; 534 MoveObjectHandler handler = OnMoveObject;
445 if (handler != null) 535 if (handler != null)
446 { 536 {
537 if(sog == null || client == null || client.SceneAgent == null)
538 return false;
539
540 ScenePresence sp = client.SceneAgent as ScenePresence;
541
447 Delegate[] list = handler.GetInvocationList(); 542 Delegate[] list = handler.GetInvocationList();
448 foreach (MoveObjectHandler h in list) 543 foreach (MoveObjectHandler h in list)
449 { 544 {
450 if (h(objectID, moverID, m_scene) == false) 545 if (h(sog, sp) == false)
451 return false; 546 return false;
452 } 547 }
453 } 548 }
@@ -457,7 +552,7 @@ namespace OpenSim.Region.Framework.Scenes
457 #endregion 552 #endregion
458 553
459 #region OBJECT ENTRY 554 #region OBJECT ENTRY
460 public bool CanObjectEntry(UUID objectID, bool enteringRegion, Vector3 newPoint) 555 public bool CanObjectEntry(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint)
461 { 556 {
462 ObjectEntryHandler handler = OnObjectEntry; 557 ObjectEntryHandler handler = OnObjectEntry;
463 if (handler != null) 558 if (handler != null)
@@ -465,7 +560,22 @@ namespace OpenSim.Region.Framework.Scenes
465 Delegate[] list = handler.GetInvocationList(); 560 Delegate[] list = handler.GetInvocationList();
466 foreach (ObjectEntryHandler h in list) 561 foreach (ObjectEntryHandler h in list)
467 { 562 {
468 if (h(objectID, enteringRegion, newPoint, m_scene) == false) 563 if (h(sog, enteringRegion, newPoint) == false)
564 return false;
565 }
566 }
567 return true;
568 }
569
570 public bool CanObjectEnterWithScripts(SceneObjectGroup sog, ILandObject land)
571 {
572 ObjectEnterWithScriptsHandler handler = OnObjectEnterWithScripts;
573 if (handler != null)
574 {
575 Delegate[] list = handler.GetInvocationList();
576 foreach (ObjectEnterWithScriptsHandler h in list)
577 {
578 if (h(sog, land) == false)
469 return false; 579 return false;
470 } 580 }
471 } 581 }
@@ -475,29 +585,30 @@ namespace OpenSim.Region.Framework.Scenes
475 #endregion 585 #endregion
476 586
477 #region RETURN OBJECT 587 #region RETURN OBJECT
478 public bool CanReturnObjects(ILandObject land, UUID user, List<SceneObjectGroup> objects) 588 public bool CanReturnObjects(ILandObject land, IClientAPI client, List<SceneObjectGroup> objects)
479 { 589 {
480 bool result = true;
481
482 ReturnObjectsHandler handler = OnReturnObjects; 590 ReturnObjectsHandler handler = OnReturnObjects;
483 if (handler != null) 591 if (handler != null)
484 { 592 {
593 if(objects == null)
594 return false;
595
596 ScenePresence sp = null;
597 if(client != null && client.SceneAgent != null)
598 sp = client.SceneAgent as ScenePresence;
599
485 Delegate[] list = handler.GetInvocationList(); 600 Delegate[] list = handler.GetInvocationList();
486 foreach (ReturnObjectsHandler h in list) 601 foreach (ReturnObjectsHandler h in list)
487 { 602 {
488 if (h(land, user, objects, m_scene) == false) 603 if (h(land, sp, objects) == false)
489 { 604 return false;
490 result = false;
491 break;
492 }
493 } 605 }
494 } 606 }
495
496// m_log.DebugFormat( 607// m_log.DebugFormat(
497// "[SCENE PERMISSIONS]: CanReturnObjects() fired for user {0} for {1} objects on {2}, result {3}", 608// "[SCENE PERMISSIONS]: CanReturnObjects() fired for user {0} for {1} objects on {2}, result {3}",
498// user, objects.Count, land.LandData.Name, result); 609// user, objects.Count, land.LandData.Name, result);
499 610
500 return result; 611 return true;
501 } 612 }
502 613
503 #endregion 614 #endregion
@@ -511,7 +622,7 @@ namespace OpenSim.Region.Framework.Scenes
511 Delegate[] list = handler.GetInvocationList(); 622 Delegate[] list = handler.GetInvocationList();
512 foreach (InstantMessageHandler h in list) 623 foreach (InstantMessageHandler h in list)
513 { 624 {
514 if (h(user, target, m_scene) == false) 625 if (h(user, target) == false)
515 return false; 626 return false;
516 } 627 }
517 } 628 }
@@ -529,7 +640,7 @@ namespace OpenSim.Region.Framework.Scenes
529 Delegate[] list = handler.GetInvocationList(); 640 Delegate[] list = handler.GetInvocationList();
530 foreach (InventoryTransferHandler h in list) 641 foreach (InventoryTransferHandler h in list)
531 { 642 {
532 if (h(user, target, m_scene) == false) 643 if (h(user, target) == false)
533 return false; 644 return false;
534 } 645 }
535 } 646 }
@@ -547,7 +658,7 @@ namespace OpenSim.Region.Framework.Scenes
547 Delegate[] list = handler.GetInvocationList(); 658 Delegate[] list = handler.GetInvocationList();
548 foreach (ViewScriptHandler h in list) 659 foreach (ViewScriptHandler h in list)
549 { 660 {
550 if (h(script, objectID, user, m_scene) == false) 661 if (h(script, objectID, user) == false)
551 return false; 662 return false;
552 } 663 }
553 } 664 }
@@ -562,7 +673,7 @@ namespace OpenSim.Region.Framework.Scenes
562 Delegate[] list = handler.GetInvocationList(); 673 Delegate[] list = handler.GetInvocationList();
563 foreach (ViewNotecardHandler h in list) 674 foreach (ViewNotecardHandler h in list)
564 { 675 {
565 if (h(script, objectID, user, m_scene) == false) 676 if (h(script, objectID, user) == false)
566 return false; 677 return false;
567 } 678 }
568 } 679 }
@@ -580,7 +691,7 @@ namespace OpenSim.Region.Framework.Scenes
580 Delegate[] list = handler.GetInvocationList(); 691 Delegate[] list = handler.GetInvocationList();
581 foreach (EditScriptHandler h in list) 692 foreach (EditScriptHandler h in list)
582 { 693 {
583 if (h(script, objectID, user, m_scene) == false) 694 if (h(script, objectID, user) == false)
584 return false; 695 return false;
585 } 696 }
586 } 697 }
@@ -595,7 +706,7 @@ namespace OpenSim.Region.Framework.Scenes
595 Delegate[] list = handler.GetInvocationList(); 706 Delegate[] list = handler.GetInvocationList();
596 foreach (EditNotecardHandler h in list) 707 foreach (EditNotecardHandler h in list)
597 { 708 {
598 if (h(script, objectID, user, m_scene) == false) 709 if (h(script, objectID, user) == false)
599 return false; 710 return false;
600 } 711 }
601 } 712 }
@@ -607,19 +718,37 @@ namespace OpenSim.Region.Framework.Scenes
607 #region RUN SCRIPT (When Script Placed in Object) 718 #region RUN SCRIPT (When Script Placed in Object)
608 public bool CanRunScript(UUID script, UUID objectID, UUID user) 719 public bool CanRunScript(UUID script, UUID objectID, UUID user)
609 { 720 {
721 RunScriptHandlerByIDs handler = OnRunScriptByIDs;
722 if (handler != null)
723 {
724 Delegate[] list = handler.GetInvocationList();
725 foreach (RunScriptHandlerByIDs h in list)
726 {
727 if (h(script, objectID, user) == false)
728 return false;
729 }
730 }
731 return true;
732 }
733
734 public bool CanRunScript(TaskInventoryItem item, SceneObjectPart part)
735 {
610 RunScriptHandler handler = OnRunScript; 736 RunScriptHandler handler = OnRunScript;
611 if (handler != null) 737 if (handler != null)
612 { 738 {
739 if(item == null || part == null)
740 return false;
613 Delegate[] list = handler.GetInvocationList(); 741 Delegate[] list = handler.GetInvocationList();
614 foreach (RunScriptHandler h in list) 742 foreach (RunScriptHandler h in list)
615 { 743 {
616 if (h(script, objectID, user, m_scene) == false) 744 if (h(item, part) == false)
617 return false; 745 return false;
618 } 746 }
619 } 747 }
620 return true; 748 return true;
621 } 749 }
622 750
751
623 #endregion 752 #endregion
624 753
625 #region COMPILE SCRIPT (When Script needs to get (re)compiled) 754 #region COMPILE SCRIPT (When Script needs to get (re)compiled)
@@ -631,7 +760,7 @@ namespace OpenSim.Region.Framework.Scenes
631 Delegate[] list = handler.GetInvocationList(); 760 Delegate[] list = handler.GetInvocationList();
632 foreach (CompileScriptHandler h in list) 761 foreach (CompileScriptHandler h in list)
633 { 762 {
634 if (h(ownerUUID, scriptType, m_scene) == false) 763 if (h(ownerUUID, scriptType) == false)
635 return false; 764 return false;
636 } 765 }
637 } 766 }
@@ -649,7 +778,7 @@ namespace OpenSim.Region.Framework.Scenes
649 Delegate[] list = handler.GetInvocationList(); 778 Delegate[] list = handler.GetInvocationList();
650 foreach (StartScriptHandler h in list) 779 foreach (StartScriptHandler h in list)
651 { 780 {
652 if (h(script, user, m_scene) == false) 781 if (h(script, user) == false)
653 return false; 782 return false;
654 } 783 }
655 } 784 }
@@ -667,7 +796,7 @@ namespace OpenSim.Region.Framework.Scenes
667 Delegate[] list = handler.GetInvocationList(); 796 Delegate[] list = handler.GetInvocationList();
668 foreach (StopScriptHandler h in list) 797 foreach (StopScriptHandler h in list)
669 { 798 {
670 if (h(script, user, m_scene) == false) 799 if (h(script, user) == false)
671 return false; 800 return false;
672 } 801 }
673 } 802 }
@@ -685,7 +814,7 @@ namespace OpenSim.Region.Framework.Scenes
685 Delegate[] list = handler.GetInvocationList(); 814 Delegate[] list = handler.GetInvocationList();
686 foreach (ResetScriptHandler h in list) 815 foreach (ResetScriptHandler h in list)
687 { 816 {
688 if (h(prim, script, user, m_scene) == false) 817 if (h(prim, script, user) == false)
689 return false; 818 return false;
690 } 819 }
691 } 820 }
@@ -703,7 +832,7 @@ namespace OpenSim.Region.Framework.Scenes
703 Delegate[] list = handler.GetInvocationList(); 832 Delegate[] list = handler.GetInvocationList();
704 foreach (TerraformLandHandler h in list) 833 foreach (TerraformLandHandler h in list)
705 { 834 {
706 if (h(user, pos, m_scene) == false) 835 if (h(user, pos) == false)
707 return false; 836 return false;
708 } 837 }
709 } 838 }
@@ -721,7 +850,7 @@ namespace OpenSim.Region.Framework.Scenes
721 Delegate[] list = handler.GetInvocationList(); 850 Delegate[] list = handler.GetInvocationList();
722 foreach (RunConsoleCommandHandler h in list) 851 foreach (RunConsoleCommandHandler h in list)
723 { 852 {
724 if (h(user, m_scene) == false) 853 if (h(user) == false)
725 return false; 854 return false;
726 } 855 }
727 } 856 }
@@ -739,7 +868,7 @@ namespace OpenSim.Region.Framework.Scenes
739 Delegate[] list = handler.GetInvocationList(); 868 Delegate[] list = handler.GetInvocationList();
740 foreach (IssueEstateCommandHandler h in list) 869 foreach (IssueEstateCommandHandler h in list)
741 { 870 {
742 if (h(user, m_scene, ownerCommand) == false) 871 if (h(user, ownerCommand) == false)
743 return false; 872 return false;
744 } 873 }
745 } 874 }
@@ -750,13 +879,13 @@ namespace OpenSim.Region.Framework.Scenes
750 #region CAN BE GODLIKE 879 #region CAN BE GODLIKE
751 public bool IsGod(UUID user) 880 public bool IsGod(UUID user)
752 { 881 {
753 IsGodHandler handler = OnIsGod; 882 IsAdministratorHandler handler = OnIsAdministrator;
754 if (handler != null) 883 if (handler != null)
755 { 884 {
756 Delegate[] list = handler.GetInvocationList(); 885 Delegate[] list = handler.GetInvocationList();
757 foreach (IsGodHandler h in list) 886 foreach (IsAdministratorHandler h in list)
758 { 887 {
759 if (h(user, m_scene) == false) 888 if (h(user) == false)
760 return false; 889 return false;
761 } 890 }
762 } 891 }
@@ -771,7 +900,7 @@ namespace OpenSim.Region.Framework.Scenes
771 Delegate[] list = handler.GetInvocationList(); 900 Delegate[] list = handler.GetInvocationList();
772 foreach (IsGridGodHandler h in list) 901 foreach (IsGridGodHandler h in list)
773 { 902 {
774 if (h(user, m_scene) == false) 903 if (h(user) == false)
775 return false; 904 return false;
776 } 905 }
777 } 906 }
@@ -819,7 +948,7 @@ namespace OpenSim.Region.Framework.Scenes
819 Delegate[] list = handler.GetInvocationList(); 948 Delegate[] list = handler.GetInvocationList();
820 foreach (EditParcelPropertiesHandler h in list) 949 foreach (EditParcelPropertiesHandler h in list)
821 { 950 {
822 if (h(user, parcel, p, m_scene, allowManager) == false) 951 if (h(user, parcel, p, allowManager) == false)
823 return false; 952 return false;
824 } 953 }
825 } 954 }
@@ -836,7 +965,7 @@ namespace OpenSim.Region.Framework.Scenes
836 Delegate[] list = handler.GetInvocationList(); 965 Delegate[] list = handler.GetInvocationList();
837 foreach (SellParcelHandler h in list) 966 foreach (SellParcelHandler h in list)
838 { 967 {
839 if (h(user, parcel, m_scene) == false) 968 if (h(user, parcel) == false)
840 return false; 969 return false;
841 } 970 }
842 } 971 }
@@ -853,7 +982,7 @@ namespace OpenSim.Region.Framework.Scenes
853 Delegate[] list = handler.GetInvocationList(); 982 Delegate[] list = handler.GetInvocationList();
854 foreach (AbandonParcelHandler h in list) 983 foreach (AbandonParcelHandler h in list)
855 { 984 {
856 if (h(user, parcel, m_scene) == false) 985 if (h(user, parcel) == false)
857 return false; 986 return false;
858 } 987 }
859 } 988 }
@@ -869,7 +998,7 @@ namespace OpenSim.Region.Framework.Scenes
869 Delegate[] list = handler.GetInvocationList(); 998 Delegate[] list = handler.GetInvocationList();
870 foreach (ReclaimParcelHandler h in list) 999 foreach (ReclaimParcelHandler h in list)
871 { 1000 {
872 if (h(user, parcel, m_scene) == false) 1001 if (h(user, parcel) == false)
873 return false; 1002 return false;
874 } 1003 }
875 } 1004 }
@@ -884,22 +1013,27 @@ namespace OpenSim.Region.Framework.Scenes
884 Delegate[] list = handler.GetInvocationList(); 1013 Delegate[] list = handler.GetInvocationList();
885 foreach (DeedParcelHandler h in list) 1014 foreach (DeedParcelHandler h in list)
886 { 1015 {
887 if (h(user, parcel, m_scene) == false) 1016 if (h(user, parcel) == false)
888 return false; 1017 return false;
889 } 1018 }
890 } 1019 }
891 return true; 1020 return true;
892 } 1021 }
893 1022
894 public bool CanDeedObject(UUID user, UUID group) 1023 public bool CanDeedObject(IClientAPI client, SceneObjectGroup sog, UUID targetGroupID)
895 { 1024 {
896 DeedObjectHandler handler = OnDeedObject; 1025 DeedObjectHandler handler = OnDeedObject;
897 if (handler != null) 1026 if (handler != null)
898 { 1027 {
1028 if(sog == null || client == null || client.SceneAgent == null || targetGroupID == UUID.Zero)
1029 return false;
1030
1031 ScenePresence sp = client.SceneAgent as ScenePresence;
1032
899 Delegate[] list = handler.GetInvocationList(); 1033 Delegate[] list = handler.GetInvocationList();
900 foreach (DeedObjectHandler h in list) 1034 foreach (DeedObjectHandler h in list)
901 { 1035 {
902 if (h(user, group, m_scene) == false) 1036 if (h(sp, sog, targetGroupID) == false)
903 return false; 1037 return false;
904 } 1038 }
905 } 1039 }
@@ -914,7 +1048,7 @@ namespace OpenSim.Region.Framework.Scenes
914 Delegate[] list = handler.GetInvocationList(); 1048 Delegate[] list = handler.GetInvocationList();
915 foreach (BuyLandHandler h in list) 1049 foreach (BuyLandHandler h in list)
916 { 1050 {
917 if (h(user, parcel, m_scene) == false) 1051 if (h(user, parcel) == false)
918 return false; 1052 return false;
919 } 1053 }
920 } 1054 }
@@ -990,6 +1124,45 @@ namespace OpenSim.Region.Framework.Scenes
990 return true; 1124 return true;
991 } 1125 }
992 1126
1127 public bool CanDoObjectInvToObjectInv(TaskInventoryItem item, SceneObjectPart sourcePart, SceneObjectPart destPart)
1128 {
1129 DoObjectInvToObjectInv handler = OnDoObjectInvToObjectInv;
1130 if (handler != null)
1131 {
1132 if (sourcePart == null || destPart == null || item == null)
1133 return false;
1134 Delegate[] list = handler.GetInvocationList();
1135 foreach (DoObjectInvToObjectInv h in list)
1136 {
1137 if (h(item, sourcePart, destPart) == false)
1138 return false;
1139 }
1140 }
1141 return true;
1142 }
1143
1144 public bool CanDropInObjectInv(InventoryItemBase item, IClientAPI client, SceneObjectPart destPart)
1145 {
1146 DoDropInObjectInv handler = OnDropInObjectInv;
1147 if (handler != null)
1148 {
1149 if (client == null || client.SceneAgent == null|| destPart == null || item == null)
1150 return false;
1151
1152 ScenePresence sp = client.SceneAgent as ScenePresence;
1153 if(sp == null || sp.IsDeleted)
1154 return false;
1155
1156 Delegate[] list = handler.GetInvocationList();
1157 foreach (DoDropInObjectInv h in list)
1158 {
1159 if (h(item, sp, destPart) == false)
1160 return false;
1161 }
1162 }
1163 return true;
1164 }
1165
993 public bool CanDeleteObjectInventory(UUID itemID, UUID objectID, UUID userID) 1166 public bool CanDeleteObjectInventory(UUID itemID, UUID objectID, UUID userID)
994 { 1167 {
995 DeleteObjectInventoryHandler handler = OnDeleteObjectInventory; 1168 DeleteObjectInventoryHandler handler = OnDeleteObjectInventory;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 2137b42..715ae5c 100755
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -540,6 +540,9 @@ namespace OpenSim.Region.Framework.Scenes
540 private Timer m_mapGenerationTimer = new Timer(); 540 private Timer m_mapGenerationTimer = new Timer();
541 private bool m_generateMaptiles; 541 private bool m_generateMaptiles;
542 542
543 protected int m_lastHealth = -1;
544 protected int m_lastUsers = -1;
545
543 #endregion Fields 546 #endregion Fields
544 547
545 #region Properties 548 #region Properties
@@ -805,6 +808,8 @@ namespace OpenSim.Region.Framework.Scenes
805 private float m_minReprioritizationDistance = 32f; 808 private float m_minReprioritizationDistance = 32f;
806 public bool ObjectsCullingByDistance = false; 809 public bool ObjectsCullingByDistance = false;
807 810
811 private ExpiringCache<UUID, UUID> TeleportTargetsCoolDown = new ExpiringCache<UUID, UUID>();
812
808 public AgentCircuitManager AuthenticateHandler 813 public AgentCircuitManager AuthenticateHandler
809 { 814 {
810 get { return m_authenticateHandler; } 815 get { return m_authenticateHandler; }
@@ -1212,6 +1217,30 @@ namespace OpenSim.Region.Framework.Scenes
1212 StatsReporter.OnSendStatsResult += SendSimStatsPackets; 1217 StatsReporter.OnSendStatsResult += SendSimStatsPackets;
1213 StatsReporter.OnStatsIncorrect += m_sceneGraph.RecalculateStats; 1218 StatsReporter.OnStatsIncorrect += m_sceneGraph.RecalculateStats;
1214 1219
1220 IConfig restartConfig = config.Configs["RestartModule"];
1221 if (restartConfig != null)
1222 {
1223 string markerPath = restartConfig.GetString("MarkerPath", String.Empty);
1224
1225 if (markerPath != String.Empty)
1226 {
1227 string path = Path.Combine(markerPath, RegionInfo.RegionID.ToString() + ".started");
1228 try
1229 {
1230 string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
1231 FileStream fs = File.Create(path);
1232 System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
1233 Byte[] buf = enc.GetBytes(pidstring);
1234 fs.Write(buf, 0, buf.Length);
1235 fs.Close();
1236 }
1237 catch (Exception)
1238 {
1239 }
1240 }
1241 }
1242
1243 StartTimerWatchdog();
1215 } 1244 }
1216 1245
1217 public Scene(RegionInfo regInfo) 1246 public Scene(RegionInfo regInfo)
@@ -1482,6 +1511,14 @@ namespace OpenSim.Region.Framework.Scenes
1482 return; 1511 return;
1483 } 1512 }
1484 1513
1514 IEtcdModule etcd = RequestModuleInterface<IEtcdModule>();
1515 if (etcd != null)
1516 {
1517 etcd.Delete("Health");
1518 etcd.Delete("HealthFlags");
1519 etcd.Delete("RootAgents");
1520 }
1521
1485 m_log.InfoFormat("[SCENE]: Closing down the single simulator: {0}", RegionInfo.RegionName); 1522 m_log.InfoFormat("[SCENE]: Closing down the single simulator: {0}", RegionInfo.RegionName);
1486 1523
1487 1524
@@ -1520,6 +1557,8 @@ namespace OpenSim.Region.Framework.Scenes
1520 m_log.Debug("[SCENE]: Persisting changed objects"); 1557 m_log.Debug("[SCENE]: Persisting changed objects");
1521 Backup(true); 1558 Backup(true);
1522 1559
1560 m_log.Debug("[SCENE]: Closing scene");
1561
1523 m_sceneGraph.Close(); 1562 m_sceneGraph.Close();
1524 1563
1525 base.Close(); 1564 base.Close();
@@ -2351,6 +2390,7 @@ namespace OpenSim.Region.Framework.Scenes
2351 EventManager.TriggerOnSceneObjectLoaded(group); 2390 EventManager.TriggerOnSceneObjectLoaded(group);
2352 SceneObjectPart rootPart = group.GetPart(group.UUID); 2391 SceneObjectPart rootPart = group.GetPart(group.UUID);
2353 rootPart.Flags &= ~PrimFlags.Scripted; 2392 rootPart.Flags &= ~PrimFlags.Scripted;
2393 group.AggregateDeepPerms();
2354 rootPart.TrimPermissions(); 2394 rootPart.TrimPermissions();
2355 2395
2356 // Don't do this here - it will get done later on when sculpt data is loaded. 2396 // Don't do this here - it will get done later on when sculpt data is loaded.
@@ -2603,8 +2643,8 @@ namespace OpenSim.Region.Framework.Scenes
2603 { 2643 {
2604 // Otherwise, use this default creation code; 2644 // Otherwise, use this default creation code;
2605 sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape); 2645 sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape);
2606 AddNewSceneObject(sceneObject, true);
2607 sceneObject.SetGroup(groupID, null); 2646 sceneObject.SetGroup(groupID, null);
2647 AddNewSceneObject(sceneObject, true);
2608 2648
2609 if (AgentPreferencesService != null) // This will override the brave new full perm world! 2649 if (AgentPreferencesService != null) // This will override the brave new full perm world!
2610 { 2650 {
@@ -2622,6 +2662,7 @@ namespace OpenSim.Region.Framework.Scenes
2622 if (UserManagementModule != null) 2662 if (UserManagementModule != null)
2623 sceneObject.RootPart.CreatorIdentification = UserManagementModule.GetUserUUI(ownerID); 2663 sceneObject.RootPart.CreatorIdentification = UserManagementModule.GetUserUUI(ownerID);
2624 2664
2665 sceneObject.AggregateDeepPerms();
2625 sceneObject.ScheduleGroupForFullUpdate(); 2666 sceneObject.ScheduleGroupForFullUpdate();
2626 2667
2627 return sceneObject; 2668 return sceneObject;
@@ -2768,7 +2809,7 @@ namespace OpenSim.Region.Framework.Scenes
2768 SceneObjectGroup sog = (SceneObjectGroup)e; 2809 SceneObjectGroup sog = (SceneObjectGroup)e;
2769 if (sog != null && !sog.IsAttachment) 2810 if (sog != null && !sog.IsAttachment)
2770 { 2811 {
2771 if (!exceptNoCopy || ((sog.GetEffectivePermissions() & (uint)PermissionMask.Copy) != 0)) 2812 if (!exceptNoCopy || ((sog.EffectiveOwnerPerms & (uint)PermissionMask.Copy) != 0))
2772 { 2813 {
2773 DeleteSceneObject((SceneObjectGroup)e, false); 2814 DeleteSceneObject((SceneObjectGroup)e, false);
2774 } 2815 }
@@ -2782,7 +2823,7 @@ namespace OpenSim.Region.Framework.Scenes
2782 } 2823 }
2783 if (toReturn.Count > 0) 2824 if (toReturn.Count > 0)
2784 { 2825 {
2785 returnObjects(toReturn.ToArray(), UUID.Zero); 2826 returnObjects(toReturn.ToArray(), null);
2786 } 2827 }
2787 } 2828 }
2788 2829
@@ -2944,15 +2985,15 @@ namespace OpenSim.Region.Framework.Scenes
2944 // Return 'true' if position inside region. 2985 // Return 'true' if position inside region.
2945 public bool PositionIsInCurrentRegion(Vector3 pos) 2986 public bool PositionIsInCurrentRegion(Vector3 pos)
2946 { 2987 {
2947 bool ret = false; 2988 float t = pos.X;
2948 int xx = (int)Math.Floor(pos.X); 2989 if (t < 0 || t >= RegionInfo.RegionSizeX)
2949 int yy = (int)Math.Floor(pos.Y);
2950 if (xx < 0 || yy < 0)
2951 return false; 2990 return false;
2952 2991
2953 if (xx < RegionInfo.RegionSizeX && yy < RegionInfo.RegionSizeY ) 2992 t = pos.Y;
2954 ret = true; 2993 if (t < 0 || t >= RegionInfo.RegionSizeY)
2955 return ret; 2994 return false;
2995
2996 return true;
2956 } 2997 }
2957 2998
2958 /// <summary> 2999 /// <summary>
@@ -3603,7 +3644,9 @@ namespace OpenSim.Region.Framework.Scenes
3603 /// <param name="GroupID">Group of new object</param> 3644 /// <param name="GroupID">Group of new object</param>
3604 public void DuplicateObject(uint originalPrim, Vector3 offset, uint flags, UUID AgentID, UUID GroupID) 3645 public void DuplicateObject(uint originalPrim, Vector3 offset, uint flags, UUID AgentID, UUID GroupID)
3605 { 3646 {
3606 SceneObjectGroup copy = SceneGraph.DuplicateObject(originalPrim, offset, flags, AgentID, GroupID, Quaternion.Identity); 3647 bool createSelected = (flags & (uint)PrimFlags.CreateSelected) != 0;
3648 SceneObjectGroup copy = SceneGraph.DuplicateObject(originalPrim, offset, AgentID,
3649 GroupID, Quaternion.Identity, createSelected);
3607 if (copy != null) 3650 if (copy != null)
3608 EventManager.TriggerObjectAddedToScene(copy); 3651 EventManager.TriggerObjectAddedToScene(copy);
3609 } 3652 }
@@ -3633,6 +3676,8 @@ namespace OpenSim.Region.Framework.Scenes
3633 SceneObjectPart target = GetSceneObjectPart(localID); 3676 SceneObjectPart target = GetSceneObjectPart(localID);
3634 SceneObjectPart target2 = GetSceneObjectPart(RayTargetObj); 3677 SceneObjectPart target2 = GetSceneObjectPart(RayTargetObj);
3635 3678
3679 bool createSelected = (dupeFlags & (uint)PrimFlags.CreateSelected) != 0;
3680
3636 if (target != null && target2 != null) 3681 if (target != null && target2 != null)
3637 { 3682 {
3638 Vector3 direction = Vector3.Normalize(RayEnd - RayStart); 3683 Vector3 direction = Vector3.Normalize(RayEnd - RayStart);
@@ -3674,13 +3719,13 @@ namespace OpenSim.Region.Framework.Scenes
3674 Quaternion worldRot = target2.GetWorldRotation(); 3719 Quaternion worldRot = target2.GetWorldRotation();
3675 3720
3676 // SceneObjectGroup obj = m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); 3721 // SceneObjectGroup obj = m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot);
3677 copy = m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); 3722 copy = m_sceneGraph.DuplicateObject(localID, pos, AgentID, GroupID, worldRot, createSelected);
3678 //obj.Rotation = worldRot; 3723 //obj.Rotation = worldRot;
3679 //obj.UpdateGroupRotationR(worldRot); 3724 //obj.UpdateGroupRotationR(worldRot);
3680 } 3725 }
3681 else 3726 else
3682 { 3727 {
3683 copy = m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, Quaternion.Identity); 3728 copy = m_sceneGraph.DuplicateObject(localID, pos, AgentID, GroupID, Quaternion.Identity, createSelected);
3684 } 3729 }
3685 3730
3686 if (copy != null) 3731 if (copy != null)
@@ -3983,7 +4028,7 @@ namespace OpenSim.Region.Framework.Scenes
3983 4028
3984 if (!LoginsEnabled) 4029 if (!LoginsEnabled)
3985 { 4030 {
3986 reason = "Logins Disabled"; 4031 reason = "Logins to this region are disabled";
3987 return false; 4032 return false;
3988 } 4033 }
3989 4034
@@ -5077,65 +5122,59 @@ Label_GroupsDone:
5077 #endregion 5122 #endregion
5078 5123
5079 #region Script Engine 5124 #region Script Engine
5080 5125 public bool LSLScriptDanger(SceneObjectPart part, Vector3 pos)
5081 private bool ScriptDanger(SceneObjectPart part, Vector3 pos)
5082 { 5126 {
5127
5083 ILandObject parcel = LandChannel.GetLandObject(pos.X, pos.Y); 5128 ILandObject parcel = LandChannel.GetLandObject(pos.X, pos.Y);
5084 if (part != null) 5129 if (parcel == null)
5085 { 5130 return true;
5086 if (parcel != null) 5131
5087 { 5132 LandData ldata = parcel.LandData;
5088 if ((parcel.LandData.Flags & (uint)ParcelFlags.AllowOtherScripts) != 0) 5133 if (ldata == null)
5089 { 5134 return true;
5090 return true; 5135
5091 } 5136 uint landflags = ldata.Flags;
5092 else if ((part.OwnerID == parcel.LandData.OwnerID) || Permissions.IsGod(part.OwnerID)) 5137
5093 { 5138 uint mask = (uint)(ParcelFlags.CreateObjects | ParcelFlags.AllowAPrimitiveEntry);
5094 return true; 5139 if((landflags & mask) != mask)
5095 } 5140 return true;
5096 else if (((parcel.LandData.Flags & (uint)ParcelFlags.AllowGroupScripts) != 0) 5141
5097 && (parcel.LandData.GroupID != UUID.Zero) && (parcel.LandData.GroupID == part.GroupID)) 5142 if((landflags & (uint)ParcelFlags.AllowOtherScripts) != 0)
5098 { 5143 return false;
5099 return true;
5100 }
5101 else
5102 {
5103 return false;
5104 }
5105 }
5106 else
5107 {
5108 5144
5109 if (pos.X > 0f && pos.X < RegionInfo.RegionSizeX && pos.Y > 0f && pos.Y < RegionInfo.RegionSizeY) 5145 if(part == null)
5110 { 5146 return true;
5111 // The only time parcel != null when an object is inside a region is when 5147 if(part.GroupID == ldata.GroupID && (landflags & (uint)ParcelFlags.AllowGroupScripts) != 0)
5112 // there is nothing behind the landchannel. IE, no land plugin loaded.
5113 return true;
5114 }
5115 else
5116 {
5117 // The object is outside of this region. Stop piping events to it.
5118 return false;
5119 }
5120 }
5121 }
5122 else
5123 {
5124 return false; 5148 return false;
5125 } 5149
5150 return true;
5126 } 5151 }
5127 5152
5128 public bool ScriptDanger(uint localID, Vector3 pos) 5153 private bool ScriptDanger(SceneObjectPart part, Vector3 pos)
5129 { 5154 {
5130 SceneObjectPart part = GetSceneObjectPart(localID); 5155 if (part == null)
5131 if (part != null) 5156 return false;
5157
5158 ILandObject parcel = LandChannel.GetLandObject(pos.X, pos.Y);
5159 if (parcel != null)
5132 { 5160 {
5133 return ScriptDanger(part, pos); 5161 if ((parcel.LandData.Flags & (uint)ParcelFlags.AllowOtherScripts) != 0)
5162 return true;
5163
5164 if ((part.OwnerID == parcel.LandData.OwnerID) || Permissions.IsGod(part.OwnerID))
5165 return true;
5166
5167 if (((parcel.LandData.Flags & (uint)ParcelFlags.AllowGroupScripts) != 0)
5168 && (parcel.LandData.GroupID != UUID.Zero) && (parcel.LandData.GroupID == part.GroupID))
5169 return true;
5134 } 5170 }
5135 else 5171 else
5136 { 5172 {
5137 return false; 5173 if (pos.X > 0f && pos.X < RegionInfo.RegionSizeX && pos.Y > 0f && pos.Y < RegionInfo.RegionSizeY)
5174 return true;
5138 } 5175 }
5176
5177 return false;
5139 } 5178 }
5140 5179
5141 public bool PipeEventsForScript(uint localID) 5180 public bool PipeEventsForScript(uint localID)
@@ -5512,23 +5551,24 @@ Label_GroupsDone:
5512 return 0; 5551 return 0;
5513 } 5552 }
5514 5553
5515 if ((Util.EnvironmentTickCountSubtract(m_lastFrameTick)) < 1000) 5554 if ((Util.EnvironmentTickCountSubtract(m_lastFrameTick)) < 2000)
5516 { 5555 {
5517 health+=1; 5556 health+=1;
5518 flags |= 1; 5557 flags |= 1;
5519 } 5558 }
5520 5559
5521 if (Util.EnvironmentTickCountSubtract(m_lastIncoming) < 1000) 5560 if (Util.EnvironmentTickCountSubtract(m_lastIncoming) < 2000)
5522 { 5561 {
5523 health+=1; 5562 health+=1;
5524 flags |= 2; 5563 flags |= 2;
5525 } 5564 }
5526 5565
5527 if (Util.EnvironmentTickCountSubtract(m_lastOutgoing) < 1000) 5566 if (Util.EnvironmentTickCountSubtract(m_lastOutgoing) < 2000)
5528 { 5567 {
5529 health+=1; 5568 health+=1;
5530 flags |= 4; 5569 flags |= 4;
5531 } 5570 }
5571 /*
5532 else 5572 else
5533 { 5573 {
5534int pid = System.Diagnostics.Process.GetCurrentProcess().Id; 5574int pid = System.Diagnostics.Process.GetCurrentProcess().Id;
@@ -5541,6 +5581,7 @@ proc.WaitForExit();
5541Thread.Sleep(1000); 5581Thread.Sleep(1000);
5542Environment.Exit(1); 5582Environment.Exit(1);
5543 } 5583 }
5584 */
5544 5585
5545 if (flags != 7) 5586 if (flags != 7)
5546 return health; 5587 return health;
@@ -6305,6 +6346,32 @@ Environment.Exit(1);
6305 public void TimerWatchdog(object sender, ElapsedEventArgs e) 6346 public void TimerWatchdog(object sender, ElapsedEventArgs e)
6306 { 6347 {
6307 CheckHeartbeat(); 6348 CheckHeartbeat();
6349
6350 IEtcdModule etcd = RequestModuleInterface<IEtcdModule>();
6351 int flags;
6352 string message;
6353 if (etcd != null)
6354 {
6355 int health = GetHealth(out flags, out message);
6356 if (health != m_lastHealth)
6357 {
6358 m_lastHealth = health;
6359
6360 etcd.Store("Health", health.ToString(), 300000);
6361 etcd.Store("HealthFlags", flags.ToString(), 300000);
6362 }
6363
6364 int roots = 0;
6365 foreach (ScenePresence sp in GetScenePresences())
6366 if (!sp.IsChildAgent && !sp.IsNPC)
6367 roots++;
6368
6369 if (m_lastUsers != roots)
6370 {
6371 m_lastUsers = roots;
6372 etcd.Store("RootAgents", roots.ToString(), 300000);
6373 }
6374 }
6308 } 6375 }
6309 6376
6310 /// This method deals with movement when an avatar is automatically moving (but this is distinct from the 6377 /// This method deals with movement when an avatar is automatically moving (but this is distinct from the
@@ -6461,5 +6528,21 @@ Environment.Exit(1);
6461 6528
6462 m_eventManager.TriggerExtraSettingChanged(this, name, String.Empty); 6529 m_eventManager.TriggerExtraSettingChanged(this, name, String.Empty);
6463 } 6530 }
6531
6532 public bool InTeleportTargetsCoolDown(UUID sourceID, UUID targetID, double timeout)
6533 {
6534 lock(TeleportTargetsCoolDown)
6535 {
6536 UUID lastSource = UUID.Zero;
6537 TeleportTargetsCoolDown.TryGetValue(targetID, out lastSource);
6538 if(lastSource == UUID.Zero)
6539 {
6540 TeleportTargetsCoolDown.Add(targetID, sourceID, timeout);
6541 return false;
6542 }
6543 TeleportTargetsCoolDown.AddOrUpdate(targetID, sourceID, timeout);
6544 return lastSource == sourceID;
6545 }
6546 }
6464 } 6547 }
6465} 6548}
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 2f65ce2..a005068 100755
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -343,7 +343,7 @@ namespace OpenSim.Region.Framework.Scenes
343 sceneObject.ForceInventoryPersistence(); 343 sceneObject.ForceInventoryPersistence();
344 sceneObject.HasGroupChanged = true; 344 sceneObject.HasGroupChanged = true;
345 } 345 }
346 346 sceneObject.AggregateDeepPerms();
347 return ret; 347 return ret;
348 } 348 }
349 349
@@ -549,6 +549,8 @@ namespace OpenSim.Region.Framework.Scenes
549 // that are part of the Scene Object being removed 549 // that are part of the Scene Object being removed
550 m_numTotalPrim -= grp.PrimCount; 550 m_numTotalPrim -= grp.PrimCount;
551 551
552 bool isPh = (grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics;
553 int nphysparts = 0;
552 // Go through all parts (primitives and meshes) of this Scene Object 554 // Go through all parts (primitives and meshes) of this Scene Object
553 foreach (SceneObjectPart part in grp.Parts) 555 foreach (SceneObjectPart part in grp.Parts)
554 { 556 {
@@ -559,10 +561,13 @@ namespace OpenSim.Region.Framework.Scenes
559 m_numMesh--; 561 m_numMesh--;
560 else 562 else
561 m_numPrim--; 563 m_numPrim--;
564
565 if(isPh && part.PhysicsShapeType != (byte)PhysShapeType.none)
566 nphysparts++;
562 } 567 }
563 568
564 if ((grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics) 569 if (nphysparts > 0 )
565 RemovePhysicalPrim(grp.PrimCount); 570 RemovePhysicalPrim(nphysparts);
566 } 571 }
567 572
568 bool ret = Entities.Remove(uuid); 573 bool ret = Entities.Remove(uuid);
@@ -1358,7 +1363,7 @@ namespace OpenSim.Region.Framework.Scenes
1358 SceneObjectGroup grp = part.ParentGroup; 1363 SceneObjectGroup grp = part.ParentGroup;
1359 if (grp != null) 1364 if (grp != null)
1360 { 1365 {
1361 if (m_parentScene.Permissions.CanEditObject(grp.UUID, remoteClient.AgentId)) 1366 if (m_parentScene.Permissions.CanEditObject(grp, remoteClient))
1362 { 1367 {
1363 // These two are exceptions SL makes in the interpretation 1368 // These two are exceptions SL makes in the interpretation
1364 // of the change flags. Must check them here because otherwise 1369 // of the change flags. Must check them here because otherwise
@@ -1379,7 +1384,7 @@ namespace OpenSim.Region.Framework.Scenes
1379 if ((data.change & (ObjectChangeType.Position | ObjectChangeType.Rotation)) != 0) 1384 if ((data.change & (ObjectChangeType.Position | ObjectChangeType.Rotation)) != 0)
1380 { 1385 {
1381 // Are we allowed to move it? 1386 // Are we allowed to move it?
1382 if (m_parentScene.Permissions.CanMoveObject(grp.UUID, remoteClient.AgentId)) 1387 if (m_parentScene.Permissions.CanMoveObject(grp, remoteClient))
1383 { 1388 {
1384 // Strip all but move and rotation from request 1389 // Strip all but move and rotation from request
1385 data.change &= (ObjectChangeType.Group | ObjectChangeType.Position | ObjectChangeType.Rotation); 1390 data.change &= (ObjectChangeType.Group | ObjectChangeType.Position | ObjectChangeType.Rotation);
@@ -1406,7 +1411,7 @@ namespace OpenSim.Region.Framework.Scenes
1406 1411
1407 if (part != null) 1412 if (part != null)
1408 { 1413 {
1409 if (m_parentScene.Permissions.CanEditObject(part.ParentGroup.UUID, remoteClient.AgentId)) 1414 if (m_parentScene.Permissions.CanEditObject(part.ParentGroup, remoteClient))
1410 { 1415 {
1411 bool physbuild = false; 1416 bool physbuild = false;
1412 if (part.ParentGroup.RootPart.PhysActor != null) 1417 if (part.ParentGroup.RootPart.PhysActor != null)
@@ -1428,7 +1433,7 @@ namespace OpenSim.Region.Framework.Scenes
1428 SceneObjectGroup group = GetGroupByPrim(localID); 1433 SceneObjectGroup group = GetGroupByPrim(localID);
1429 if (group != null) 1434 if (group != null)
1430 { 1435 {
1431 if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId)) 1436 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1432 { 1437 {
1433 bool physbuild = false; 1438 bool physbuild = false;
1434 if (group.RootPart.PhysActor != null) 1439 if (group.RootPart.PhysActor != null)
@@ -1474,7 +1479,7 @@ namespace OpenSim.Region.Framework.Scenes
1474 SceneObjectGroup group = GetGroupByPrim(localID); 1479 SceneObjectGroup group = GetGroupByPrim(localID);
1475 if (group != null) 1480 if (group != null)
1476 { 1481 {
1477 if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId)) 1482 if (m_parentScene.Permissions.CanMoveObject(group, remoteClient))
1478 { 1483 {
1479 group.UpdateSingleRotation(rot, localID); 1484 group.UpdateSingleRotation(rot, localID);
1480 } 1485 }
@@ -1492,7 +1497,7 @@ namespace OpenSim.Region.Framework.Scenes
1492 SceneObjectGroup group = GetGroupByPrim(localID); 1497 SceneObjectGroup group = GetGroupByPrim(localID);
1493 if (group != null) 1498 if (group != null)
1494 { 1499 {
1495 if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId)) 1500 if (m_parentScene.Permissions.CanMoveObject(group, remoteClient))
1496 { 1501 {
1497 group.UpdateSingleRotation(rot, pos, localID); 1502 group.UpdateSingleRotation(rot, pos, localID);
1498 } 1503 }
@@ -1510,7 +1515,7 @@ namespace OpenSim.Region.Framework.Scenes
1510 SceneObjectGroup group = GetGroupByPrim(localID); 1515 SceneObjectGroup group = GetGroupByPrim(localID);
1511 if (group != null) 1516 if (group != null)
1512 { 1517 {
1513 if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId)) 1518 if (m_parentScene.Permissions.CanMoveObject(group, remoteClient))
1514 { 1519 {
1515 group.UpdateGroupRotationR(rot); 1520 group.UpdateGroupRotationR(rot);
1516 } 1521 }
@@ -1529,7 +1534,7 @@ namespace OpenSim.Region.Framework.Scenes
1529 SceneObjectGroup group = GetGroupByPrim(localID); 1534 SceneObjectGroup group = GetGroupByPrim(localID);
1530 if (group != null) 1535 if (group != null)
1531 { 1536 {
1532 if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId)) 1537 if (m_parentScene.Permissions.CanMoveObject(group, remoteClient))
1533 { 1538 {
1534 group.UpdateGroupRotationPR(pos, rot); 1539 group.UpdateGroupRotationPR(pos, rot);
1535 } 1540 }
@@ -1547,7 +1552,7 @@ namespace OpenSim.Region.Framework.Scenes
1547 SceneObjectGroup group = GetGroupByPrim(localID); 1552 SceneObjectGroup group = GetGroupByPrim(localID);
1548 if (group != null) 1553 if (group != null)
1549 { 1554 {
1550 if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId) || group.IsAttachment) 1555 if (m_parentScene.Permissions.CanMoveObject(group, remoteClient) || group.IsAttachment)
1551 { 1556 {
1552 group.UpdateSinglePosition(pos, localID); 1557 group.UpdateSinglePosition(pos, localID);
1553 } 1558 }
@@ -1562,17 +1567,6 @@ namespace OpenSim.Region.Framework.Scenes
1562 /// <param name="remoteClient"></param> 1567 /// <param name="remoteClient"></param>
1563 public void UpdatePrimGroupPosition(uint localId, Vector3 pos, IClientAPI remoteClient) 1568 public void UpdatePrimGroupPosition(uint localId, Vector3 pos, IClientAPI remoteClient)
1564 { 1569 {
1565 UpdatePrimGroupPosition(localId, pos, remoteClient.AgentId);
1566 }
1567
1568 /// <summary>
1569 /// Update the position of the given group.
1570 /// </summary>
1571 /// <param name="localId"></param>
1572 /// <param name="pos"></param>
1573 /// <param name="updatingAgentId"></param>
1574 public void UpdatePrimGroupPosition(uint localId, Vector3 pos, UUID updatingAgentId)
1575 {
1576 SceneObjectGroup group = GetGroupByPrim(localId); 1570 SceneObjectGroup group = GetGroupByPrim(localId);
1577 1571
1578 if (group != null) 1572 if (group != null)
@@ -1580,7 +1574,7 @@ namespace OpenSim.Region.Framework.Scenes
1580 if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) 1574 if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0))
1581 { 1575 {
1582 // Set the new attachment point data in the object 1576 // Set the new attachment point data in the object
1583 byte attachmentPoint = group.GetAttachmentPoint(); 1577 byte attachmentPoint = (byte)group.AttachmentPoint;
1584 group.UpdateGroupPosition(pos); 1578 group.UpdateGroupPosition(pos);
1585 group.IsAttachment = false; 1579 group.IsAttachment = false;
1586 group.AbsolutePosition = group.RootPart.AttachedPos; 1580 group.AbsolutePosition = group.RootPart.AttachedPos;
@@ -1589,8 +1583,8 @@ namespace OpenSim.Region.Framework.Scenes
1589 } 1583 }
1590 else 1584 else
1591 { 1585 {
1592 if (m_parentScene.Permissions.CanMoveObject(group.UUID, updatingAgentId) 1586 if (m_parentScene.Permissions.CanMoveObject(group, remoteClient)
1593 && m_parentScene.Permissions.CanObjectEntry(group.UUID, false, pos)) 1587 && m_parentScene.Permissions.CanObjectEntry(group, false, pos))
1594 { 1588 {
1595 group.UpdateGroupPosition(pos); 1589 group.UpdateGroupPosition(pos);
1596 } 1590 }
@@ -1614,7 +1608,7 @@ namespace OpenSim.Region.Framework.Scenes
1614 1608
1615 if (group != null) 1609 if (group != null)
1616 { 1610 {
1617 if (m_parentScene.Permissions.CanEditObject(group.UUID,remoteClient.AgentId)) 1611 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1618 { 1612 {
1619 group.UpdateTextureEntry(localID, texture); 1613 group.UpdateTextureEntry(localID, texture);
1620 } 1614 }
@@ -1638,7 +1632,7 @@ namespace OpenSim.Region.Framework.Scenes
1638 SceneObjectGroup group = GetGroupByPrim(localID); 1632 SceneObjectGroup group = GetGroupByPrim(localID);
1639 if (group != null) 1633 if (group != null)
1640 { 1634 {
1641 if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId)) 1635 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1642 { 1636 {
1643 // VolumeDetect can't be set via UI and will always be off when a change is made there 1637 // VolumeDetect can't be set via UI and will always be off when a change is made there
1644 // now only change volume dtc if phantom off 1638 // now only change volume dtc if phantom off
@@ -1685,7 +1679,7 @@ namespace OpenSim.Region.Framework.Scenes
1685 SceneObjectGroup group = GetGroupByPrim(primLocalID); 1679 SceneObjectGroup group = GetGroupByPrim(primLocalID);
1686 if (group != null) 1680 if (group != null)
1687 { 1681 {
1688 if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId)) 1682 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1689 { 1683 {
1690 group.SetPartName(Util.CleanString(name), primLocalID); 1684 group.SetPartName(Util.CleanString(name), primLocalID);
1691 group.HasGroupChanged = true; 1685 group.HasGroupChanged = true;
@@ -1703,7 +1697,7 @@ namespace OpenSim.Region.Framework.Scenes
1703 SceneObjectGroup group = GetGroupByPrim(primLocalID); 1697 SceneObjectGroup group = GetGroupByPrim(primLocalID);
1704 if (group != null) 1698 if (group != null)
1705 { 1699 {
1706 if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId)) 1700 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1707 { 1701 {
1708 group.SetPartDescription(Util.CleanString(description), primLocalID); 1702 group.SetPartDescription(Util.CleanString(description), primLocalID);
1709 group.HasGroupChanged = true; 1703 group.HasGroupChanged = true;
@@ -1725,7 +1719,7 @@ namespace OpenSim.Region.Framework.Scenes
1725 SceneObjectGroup group = GetGroupByPrim(primLocalID); 1719 SceneObjectGroup group = GetGroupByPrim(primLocalID);
1726 if (group != null) 1720 if (group != null)
1727 { 1721 {
1728 if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId)) 1722 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1729 { 1723 {
1730 SceneObjectPart part = m_parentScene.GetSceneObjectPart(primLocalID); 1724 SceneObjectPart part = m_parentScene.GetSceneObjectPart(primLocalID);
1731 if (part != null) 1725 if (part != null)
@@ -1742,7 +1736,7 @@ namespace OpenSim.Region.Framework.Scenes
1742 SceneObjectGroup group = GetGroupByPrim(primLocalID); 1736 SceneObjectGroup group = GetGroupByPrim(primLocalID);
1743 if (group != null) 1737 if (group != null)
1744 { 1738 {
1745 if (m_parentScene.Permissions.CanEditObject(group.UUID, remoteClient.AgentId)) 1739 if (m_parentScene.Permissions.CanEditObject(group, remoteClient))
1746 { 1740 {
1747 SceneObjectPart part = m_parentScene.GetSceneObjectPart(primLocalID); 1741 SceneObjectPart part = m_parentScene.GetSceneObjectPart(primLocalID);
1748 if (part != null) 1742 if (part != null)
@@ -1996,6 +1990,7 @@ namespace OpenSim.Region.Framework.Scenes
1996 { 1990 {
1997 newRoot.TriggerScriptChangedEvent(Changed.LINK); 1991 newRoot.TriggerScriptChangedEvent(Changed.LINK);
1998 newRoot.ParentGroup.HasGroupChanged = true; 1992 newRoot.ParentGroup.HasGroupChanged = true;
1993 newRoot.ParentGroup.InvalidatePartsLinkMaps();
1999 newRoot.ParentGroup.ScheduleGroupForFullUpdate(); 1994 newRoot.ParentGroup.ScheduleGroupForFullUpdate();
2000 } 1995 }
2001 } 1996 }
@@ -2012,6 +2007,7 @@ namespace OpenSim.Region.Framework.Scenes
2012 // from the database. They will be rewritten immediately, 2007 // from the database. They will be rewritten immediately,
2013 // minus the rows for the unlinked child prims. 2008 // minus the rows for the unlinked child prims.
2014 m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID); 2009 m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID);
2010 g.InvalidatePartsLinkMaps();
2015 g.TriggerScriptChangedEvent(Changed.LINK); 2011 g.TriggerScriptChangedEvent(Changed.LINK);
2016 g.HasGroupChanged = true; // Persist 2012 g.HasGroupChanged = true; // Persist
2017 g.ScheduleGroupForFullUpdate(); 2013 g.ScheduleGroupForFullUpdate();
@@ -2025,27 +2021,9 @@ namespace OpenSim.Region.Framework.Scenes
2025 2021
2026 protected internal void MakeObjectSearchable(IClientAPI remoteClient, bool IncludeInSearch, uint localID) 2022 protected internal void MakeObjectSearchable(IClientAPI remoteClient, bool IncludeInSearch, uint localID)
2027 { 2023 {
2028 UUID user = remoteClient.AgentId; 2024 SceneObjectGroup sog = GetGroupByPrim(localID);
2029 UUID objid = UUID.Zero; 2025 if(sog == null)
2030 SceneObjectPart obj = null; 2026 return;
2031
2032 EntityBase[] entityList = GetEntities();
2033 foreach (EntityBase ent in entityList)
2034 {
2035 if (ent is SceneObjectGroup)
2036 {
2037 SceneObjectGroup sog = ent as SceneObjectGroup;
2038
2039 foreach (SceneObjectPart part in sog.Parts)
2040 {
2041 if (part.LocalId == localID)
2042 {
2043 objid = part.UUID;
2044 obj = part;
2045 }
2046 }
2047 }
2048 }
2049 2027
2050 //Protip: In my day, we didn't call them searchable objects, we called them limited point-to-point joints 2028 //Protip: In my day, we didn't call them searchable objects, we called them limited point-to-point joints
2051 //aka ObjectFlags.JointWheel = IncludeInSearch 2029 //aka ObjectFlags.JointWheel = IncludeInSearch
@@ -2062,15 +2040,15 @@ namespace OpenSim.Region.Framework.Scenes
2062 // libomv will complain about PrimFlags.JointWheel being 2040 // libomv will complain about PrimFlags.JointWheel being
2063 // deprecated, so we 2041 // deprecated, so we
2064 #pragma warning disable 0612 2042 #pragma warning disable 0612
2065 if (IncludeInSearch && m_parentScene.Permissions.CanEditObject(objid, user)) 2043 if (IncludeInSearch && m_parentScene.Permissions.CanEditObject(sog, remoteClient))
2066 { 2044 {
2067 obj.ParentGroup.RootPart.AddFlag(PrimFlags.JointWheel); 2045 sog.RootPart.AddFlag(PrimFlags.JointWheel);
2068 obj.ParentGroup.HasGroupChanged = true; 2046 sog.HasGroupChanged = true;
2069 } 2047 }
2070 else if (!IncludeInSearch && m_parentScene.Permissions.CanMoveObject(objid,user)) 2048 else if (!IncludeInSearch && m_parentScene.Permissions.CanMoveObject(sog, remoteClient))
2071 { 2049 {
2072 obj.ParentGroup.RootPart.RemFlag(PrimFlags.JointWheel); 2050 sog.RootPart.RemFlag(PrimFlags.JointWheel);
2073 obj.ParentGroup.HasGroupChanged = true; 2051 sog.HasGroupChanged = true;
2074 } 2052 }
2075 #pragma warning restore 0612 2053 #pragma warning restore 0612
2076 } 2054 }
@@ -2086,7 +2064,7 @@ namespace OpenSim.Region.Framework.Scenes
2086 /// <param name="rot"></param> 2064 /// <param name="rot"></param>
2087 /// <returns>null if duplication fails, otherwise the duplicated object</returns> 2065 /// <returns>null if duplication fails, otherwise the duplicated object</returns>
2088 /// <summary> 2066 /// <summary>
2089 public SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot) 2067 public SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, UUID AgentID, UUID GroupID, Quaternion rot, bool createSelected)
2090 { 2068 {
2091// m_log.DebugFormat( 2069// m_log.DebugFormat(
2092// "[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", 2070// "[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}",
@@ -2095,27 +2073,28 @@ namespace OpenSim.Region.Framework.Scenes
2095 SceneObjectGroup original = GetGroupByPrim(originalPrimID); 2073 SceneObjectGroup original = GetGroupByPrim(originalPrimID);
2096 if (original != null) 2074 if (original != null)
2097 { 2075 {
2098 if (m_parentScene.Permissions.CanDuplicateObject( 2076 if (m_parentScene.Permissions.CanDuplicateObject(original, AgentID))
2099 original.PrimCount, original.UUID, AgentID, original.AbsolutePosition))
2100 { 2077 {
2101 SceneObjectGroup copy = original.Copy(true); 2078 SceneObjectGroup copy = original.Copy(true);
2102 copy.AbsolutePosition = copy.AbsolutePosition + offset; 2079 copy.AbsolutePosition = copy.AbsolutePosition + offset;
2103 2080
2081 SceneObjectPart[] parts = copy.Parts;
2082
2083 m_numTotalPrim += parts.Length;
2084
2104 if (original.OwnerID != AgentID) 2085 if (original.OwnerID != AgentID)
2105 { 2086 {
2106 copy.SetOwnerId(AgentID); 2087 copy.SetOwner(AgentID, GroupID);
2107 copy.SetRootPartOwner(copy.RootPart, AgentID, GroupID);
2108
2109 SceneObjectPart[] partList = copy.Parts;
2110 2088
2111 if (m_parentScene.Permissions.PropagatePermissions()) 2089 if (m_parentScene.Permissions.PropagatePermissions())
2112 { 2090 {
2113 foreach (SceneObjectPart child in partList) 2091 foreach (SceneObjectPart child in parts)
2114 { 2092 {
2115 child.Inventory.ChangeInventoryOwner(AgentID); 2093 child.Inventory.ChangeInventoryOwner(AgentID);
2116 child.TriggerScriptChangedEvent(Changed.OWNER); 2094 child.TriggerScriptChangedEvent(Changed.OWNER);
2117 child.ApplyNextOwnerPermissions(); 2095 child.ApplyNextOwnerPermissions();
2118 } 2096 }
2097 copy.AggregatePerms();
2119 } 2098 }
2120 } 2099 }
2121 2100
@@ -2125,10 +2104,6 @@ namespace OpenSim.Region.Framework.Scenes
2125 lock (SceneObjectGroupsByFullID) 2104 lock (SceneObjectGroupsByFullID)
2126 SceneObjectGroupsByFullID[copy.UUID] = copy; 2105 SceneObjectGroupsByFullID[copy.UUID] = copy;
2127 2106
2128 SceneObjectPart[] parts = copy.Parts;
2129
2130 m_numTotalPrim += parts.Length;
2131
2132 foreach (SceneObjectPart part in parts) 2107 foreach (SceneObjectPart part in parts)
2133 { 2108 {
2134 if (part.GetPrimType() == PrimType.SCULPT) 2109 if (part.GetPrimType() == PrimType.SCULPT)
@@ -2144,28 +2119,19 @@ namespace OpenSim.Region.Framework.Scenes
2144 2119
2145 // PROBABLE END OF FIXME 2120 // PROBABLE END OF FIXME
2146 2121
2147 // Since we copy from a source group that is in selected 2122 copy.IsSelected = createSelected;
2148 // state, but the copy is shown deselected in the viewer,
2149 // We need to clear the selection flag here, else that
2150 // prim never gets persisted at all. The client doesn't
2151 // think it's selected, so it will never send a deselect...
2152 copy.IsSelected = false;
2153
2154 m_numPrim += copy.Parts.Length;
2155 2123
2156 if (rot != Quaternion.Identity) 2124 if (rot != Quaternion.Identity)
2157 {
2158 copy.UpdateGroupRotationR(rot); 2125 copy.UpdateGroupRotationR(rot);
2159 } 2126
2127 // required for physics to update it's position
2128 copy.ResetChildPrimPhysicsPositions();
2160 2129
2161 copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1); 2130 copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1);
2162 copy.HasGroupChanged = true;
2163 copy.ScheduleGroupForFullUpdate();
2164 copy.ResumeScripts(); 2131 copy.ResumeScripts();
2165 2132
2166 // required for physics to update it's position 2133 copy.HasGroupChanged = true;
2167 copy.AbsolutePosition = copy.AbsolutePosition; 2134 copy.ScheduleGroupForFullUpdate();
2168
2169 return copy; 2135 return copy;
2170 } 2136 }
2171 } 2137 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index 9f98554..12e53a8 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -111,7 +111,7 @@ namespace OpenSim.Region.Framework.Scenes
111 /// <param name="item">The user inventory item being added.</param> 111 /// <param name="item">The user inventory item being added.</param>
112 /// <param name="copyItemID">The item UUID that should be used by the new item.</param> 112 /// <param name="copyItemID">The item UUID that should be used by the new item.</param>
113 /// <returns></returns> 113 /// <returns></returns>
114 public bool AddInventoryItem(UUID agentID, uint localID, InventoryItemBase item, UUID copyItemID) 114 public bool AddInventoryItem(UUID agentID, uint localID, InventoryItemBase item, UUID copyItemID, bool withModRights = true)
115 { 115 {
116// m_log.DebugFormat( 116// m_log.DebugFormat(
117// "[PRIM INVENTORY]: Adding inventory item {0} from {1} to part with local ID {2}", 117// "[PRIM INVENTORY]: Adding inventory item {0} from {1} to part with local ID {2}",
@@ -120,69 +120,72 @@ namespace OpenSim.Region.Framework.Scenes
120 UUID newItemId = (copyItemID != UUID.Zero) ? copyItemID : item.ID; 120 UUID newItemId = (copyItemID != UUID.Zero) ? copyItemID : item.ID;
121 121
122 SceneObjectPart part = GetPart(localID); 122 SceneObjectPart part = GetPart(localID);
123 if (part != null) 123 if (part == null)
124 { 124 {
125 TaskInventoryItem taskItem = new TaskInventoryItem(); 125 m_log.ErrorFormat(
126 126 "[PRIM INVENTORY]: " +
127 taskItem.ItemID = newItemId; 127 "Couldn't find prim local ID {0} in group {1}, {2} to add inventory item ID {3}",
128 taskItem.AssetID = item.AssetID; 128 localID, Name, UUID, newItemId);
129 taskItem.Name = item.Name; 129 return false;
130 taskItem.Description = item.Description; 130 }
131 taskItem.OwnerID = part.OwnerID; // Transfer ownership 131
132 taskItem.CreatorID = item.CreatorIdAsUuid; 132 TaskInventoryItem taskItem = new TaskInventoryItem();
133 taskItem.Type = item.AssetType;
134 taskItem.InvType = item.InvType;
135
136 if (agentID != part.OwnerID && m_scene.Permissions.PropagatePermissions())
137 {
138 taskItem.BasePermissions = item.BasePermissions &
139 item.NextPermissions;
140 taskItem.CurrentPermissions = item.CurrentPermissions &
141 item.NextPermissions;
142 taskItem.EveryonePermissions = item.EveryOnePermissions &
143 item.NextPermissions;
144 taskItem.GroupPermissions = item.GroupPermissions &
145 item.NextPermissions;
146 taskItem.NextPermissions = item.NextPermissions;
147 // We're adding this to a prim we don't own. Force
148 // owner change
149 taskItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm;
150 }
151 else
152 {
153 taskItem.BasePermissions = item.BasePermissions;
154 taskItem.CurrentPermissions = item.CurrentPermissions;
155 taskItem.EveryonePermissions = item.EveryOnePermissions;
156 taskItem.GroupPermissions = item.GroupPermissions;
157 taskItem.NextPermissions = item.NextPermissions;
158 }
159 133
160 taskItem.Flags = item.Flags; 134 taskItem.ItemID = newItemId;
135 taskItem.AssetID = item.AssetID;
136 taskItem.Name = item.Name;
137 taskItem.Description = item.Description;
138 taskItem.OwnerID = part.OwnerID; // Transfer ownership
139 taskItem.CreatorID = item.CreatorIdAsUuid;
140 taskItem.Type = item.AssetType;
141 taskItem.InvType = item.InvType;
142
143 if (agentID != part.OwnerID && m_scene.Permissions.PropagatePermissions())
144 {
145 taskItem.BasePermissions = item.BasePermissions &
146 item.NextPermissions;
147 taskItem.CurrentPermissions = item.CurrentPermissions &
148 item.NextPermissions;
149 taskItem.EveryonePermissions = item.EveryOnePermissions &
150 item.NextPermissions;
151 taskItem.GroupPermissions = item.GroupPermissions &
152 item.NextPermissions;
153 taskItem.NextPermissions = item.NextPermissions;
154 // We're adding this to a prim we don't own. Force
155 // owner change
156 taskItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm;
157
158 }
159 else
160 {
161 taskItem.BasePermissions = item.BasePermissions;
162 taskItem.CurrentPermissions = item.CurrentPermissions;
163 taskItem.EveryonePermissions = item.EveryOnePermissions;
164 taskItem.GroupPermissions = item.GroupPermissions;
165 taskItem.NextPermissions = item.NextPermissions;
166 }
167
168 taskItem.Flags = item.Flags;
161 169
162// m_log.DebugFormat( 170// m_log.DebugFormat(
163// "[PRIM INVENTORY]: Flags are 0x{0:X} for item {1} added to part {2} by {3}", 171// "[PRIM INVENTORY]: Flags are 0x{0:X} for item {1} added to part {2} by {3}",
164// taskItem.Flags, taskItem.Name, localID, remoteClient.Name); 172// taskItem.Flags, taskItem.Name, localID, remoteClient.Name);
165 173
166 // TODO: These are pending addition of those fields to TaskInventoryItem 174 // TODO: These are pending addition of those fields to TaskInventoryItem
167// taskItem.SalePrice = item.SalePrice; 175// taskItem.SalePrice = item.SalePrice;
168// taskItem.SaleType = item.SaleType; 176// taskItem.SaleType = item.SaleType;
169 taskItem.CreationDate = (uint)item.CreationDate; 177 taskItem.CreationDate = (uint)item.CreationDate;
170 178
171 bool addFromAllowedDrop = agentID != part.OwnerID; 179 bool addFromAllowedDrop;
172 180 if(withModRights)
173 part.Inventory.AddInventoryItem(taskItem, addFromAllowedDrop); 181 addFromAllowedDrop = false;
174
175 return true;
176 }
177 else 182 else
178 { 183 addFromAllowedDrop = (part.ParentGroup.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) != 0;
179 m_log.ErrorFormat( 184
180 "[PRIM INVENTORY]: " + 185 part.Inventory.AddInventoryItem(taskItem, addFromAllowedDrop);
181 "Couldn't find prim local ID {0} in group {1}, {2} to add inventory item ID {3}", 186 part.ParentGroup.AggregatePerms();
182 localID, Name, UUID, newItemId); 187 return true;
183 }
184 188
185 return false;
186 } 189 }
187 190
188 /// <summary> 191 /// <summary>
@@ -248,6 +251,194 @@ namespace OpenSim.Region.Framework.Scenes
248 return -1; 251 return -1;
249 } 252 }
250 253
254 // new test code, to place in better place later
255 private object PermissionsLock = new object();
256
257 private uint m_EffectiveEveryOnePerms;
258 public uint EffectiveEveryOnePerms
259 {
260 get
261 {
262 // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc)
263 // bc this is on heavy duty code paths
264 // but for now we need to test the concept
265// AggregateDeepPerms();
266 return m_EffectiveEveryOnePerms;
267 }
268 }
269
270 private uint m_EffectiveGroupPerms;
271 public uint EffectiveGroupPerms
272 {
273 get
274 {
275 // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc)
276 // bc this is on heavy duty code paths
277 // but for now we need to test the concept
278// AggregateDeepPerms();
279 return m_EffectiveGroupPerms;
280 }
281 }
282
283 private uint m_EffectiveGroupOrEveryOnePerms;
284 public uint EffectiveGroupOrEveryOnePerms
285 {
286 get
287 {
288 // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc)
289 // bc this is on heavy duty code paths
290 // but for now we need to test the concept
291// AggregateDeepPerms();
292 return m_EffectiveGroupOrEveryOnePerms;
293 }
294 }
295
296 private uint m_EffectiveOwnerPerms;
297 public uint EffectiveOwnerPerms
298 {
299 get
300 {
301 // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc)
302 // bc this is on heavy duty code paths
303 // but for now we need to test the concept
304 // AggregateDeepPerms();
305 return m_EffectiveOwnerPerms;
306 }
307 }
308
309 // aggregates perms scanning parts and their contents
310 // AggregatePerms does same using cached parts content perms
311 public void AggregateDeepPerms()
312 {
313 lock(PermissionsLock)
314 {
315 // aux
316 const uint allmask = (uint)PermissionMask.AllEffective;
317 const uint movemodmask = (uint)(PermissionMask.Move | PermissionMask.Modify);
318 const uint copytransfermast = (uint)(PermissionMask.Copy | PermissionMask.Transfer);
319
320 uint basePerms = (RootPart.BaseMask & allmask) | (uint)PermissionMask.Move;
321 bool noBaseTransfer = (basePerms & (uint)PermissionMask.Transfer) == 0;
322
323 uint rootOwnerPerms = RootPart.OwnerMask;
324 uint owner = rootOwnerPerms;
325 uint rootGroupPerms = RootPart.GroupMask;
326 uint group = rootGroupPerms;
327 uint rootEveryonePerms = RootPart.EveryoneMask;
328 uint everyone = rootEveryonePerms;
329
330 SceneObjectPart[] parts = m_parts.GetArray();
331 for (int i = 0; i < parts.Length; i++)
332 {
333 SceneObjectPart part = parts[i];
334 part.AggregateInnerPerms();
335 owner &= part.AggregatedInnerOwnerPerms;
336 group &= part.AggregatedInnerGroupPerms;
337 everyone &= part.AggregatedInnerEveryonePerms;
338 }
339 // recover modify and move
340 rootOwnerPerms &= movemodmask;
341 owner |= rootOwnerPerms;
342 if((owner & copytransfermast) == 0)
343 owner |= (uint)PermissionMask.Transfer;
344
345 owner &= basePerms;
346 m_EffectiveOwnerPerms = owner;
347 uint ownertransfermask = owner & (uint)PermissionMask.Transfer;
348
349 // recover modify and move
350 rootGroupPerms &= movemodmask;
351 group |= rootGroupPerms;
352 if(noBaseTransfer)
353 group &=~(uint)PermissionMask.Copy;
354 else
355 group |= ownertransfermask;
356
357 uint groupOrEveryone = group;
358 m_EffectiveGroupPerms = group & owner;
359
360 // recover move
361 rootEveryonePerms &= (uint)PermissionMask.Move;
362 everyone |= rootEveryonePerms;
363 everyone &= ~(uint)PermissionMask.Modify;
364 if(noBaseTransfer)
365 everyone &=~(uint)PermissionMask.Copy;
366 else
367 everyone |= ownertransfermask;
368
369 groupOrEveryone |= everyone;
370
371 m_EffectiveEveryOnePerms = everyone & owner;
372 m_EffectiveGroupOrEveryOnePerms = groupOrEveryone & owner;
373 }
374 }
375
376 // aggregates perms scanning parts, assuming their contents was already aggregated and cached
377 // ie is AggregateDeepPerms without the part.AggregateInnerPerms() call on parts loop
378 public void AggregatePerms()
379 {
380 lock(PermissionsLock)
381 {
382 // aux
383 const uint allmask = (uint)PermissionMask.AllEffective;
384 const uint movemodmask = (uint)(PermissionMask.Move | PermissionMask.Modify);
385 const uint copytransfermast = (uint)(PermissionMask.Copy | PermissionMask.Transfer);
386
387 uint basePerms = (RootPart.BaseMask & allmask) | (uint)PermissionMask.Move;
388 bool noBaseTransfer = (basePerms & (uint)PermissionMask.Transfer) == 0;
389
390 uint rootOwnerPerms = RootPart.OwnerMask;
391 uint owner = rootOwnerPerms;
392 uint rootGroupPerms = RootPart.GroupMask;
393 uint group = rootGroupPerms;
394 uint rootEveryonePerms = RootPart.EveryoneMask;
395 uint everyone = rootEveryonePerms;
396
397 SceneObjectPart[] parts = m_parts.GetArray();
398 for (int i = 0; i < parts.Length; i++)
399 {
400 SceneObjectPart part = parts[i];
401 owner &= part.AggregatedInnerOwnerPerms;
402 group &= part.AggregatedInnerGroupPerms;
403 everyone &= part.AggregatedInnerEveryonePerms;
404 }
405 // recover modify and move
406 rootOwnerPerms &= movemodmask;
407 owner |= rootOwnerPerms;
408 if((owner & copytransfermast) == 0)
409 owner |= (uint)PermissionMask.Transfer;
410
411 owner &= basePerms;
412 m_EffectiveOwnerPerms = owner;
413 uint ownertransfermask = owner & (uint)PermissionMask.Transfer;
414
415 // recover modify and move
416 rootGroupPerms &= movemodmask;
417 group |= rootGroupPerms;
418 if(noBaseTransfer)
419 group &=~(uint)PermissionMask.Copy;
420 else
421 group |= ownertransfermask;
422
423 uint groupOrEveryone = group;
424 m_EffectiveGroupPerms = group & owner;
425
426 // recover move
427 rootEveryonePerms &= (uint)PermissionMask.Move;
428 everyone |= rootEveryonePerms;
429 everyone &= ~(uint)PermissionMask.Modify;
430 if(noBaseTransfer)
431 everyone &=~(uint)PermissionMask.Copy;
432 else
433 everyone |= ownertransfermask;
434
435 groupOrEveryone |= everyone;
436
437 m_EffectiveEveryOnePerms = everyone & owner;
438 m_EffectiveGroupOrEveryOnePerms = groupOrEveryone & owner;
439 }
440 }
441
251 public uint GetEffectivePermissions() 442 public uint GetEffectivePermissions()
252 { 443 {
253 return GetEffectivePermissions(false); 444 return GetEffectivePermissions(false);
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 5928764..e73795e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -117,9 +117,6 @@ namespace OpenSim.Region.Framework.Scenes
117 NOT_STATUS_ROTATE_Z = 0xF7 117 NOT_STATUS_ROTATE_Z = 0xF7
118 } 118 }
119 119
120 // This flag has the same purpose as InventoryItemFlags.ObjectSlamPerm
121 public static readonly uint SLAM = 16;
122
123 // private PrimCountTaintedDelegate handlerPrimCountTainted = null; 120 // private PrimCountTaintedDelegate handlerPrimCountTainted = null;
124 121
125 /// <summary> 122 /// <summary>
@@ -156,7 +153,7 @@ namespace OpenSim.Region.Framework.Scenes
156 timeLastChanged = DateTime.UtcNow.Ticks; 153 timeLastChanged = DateTime.UtcNow.Ticks;
157 if (!m_hasGroupChanged) 154 if (!m_hasGroupChanged)
158 timeFirstChanged = DateTime.UtcNow.Ticks; 155 timeFirstChanged = DateTime.UtcNow.Ticks;
159 if (m_rootPart != null && m_rootPart.UUID != null && m_scene != null) 156 if (m_rootPart != null && m_scene != null)
160 { 157 {
161/* 158/*
162 if (m_rand == null) 159 if (m_rand == null)
@@ -379,6 +376,8 @@ namespace OpenSim.Region.Framework.Scenes
379 public bool m_dupeInProgress = false; 376 public bool m_dupeInProgress = false;
380 internal Dictionary<UUID, string> m_savedScriptState; 377 internal Dictionary<UUID, string> m_savedScriptState;
381 378
379 public UUID MonitoringObject { get; set; }
380
382 #region Properties 381 #region Properties
383 382
384 /// <summary> 383 /// <summary>
@@ -539,7 +538,7 @@ namespace OpenSim.Region.Framework.Scenes
539 538
540 539
541 public bool inTransit = false; 540 public bool inTransit = false;
542 public delegate SceneObjectGroup SOGCrossDelegate(SceneObjectGroup sog,Vector3 pos); 541 private delegate SceneObjectGroup SOGCrossDelegate(SceneObjectGroup sog,Vector3 pos, TeleportObjectData tpData);
543 542
544 /// <summary> 543 /// <summary>
545 /// The absolute position of this scene object in the scene 544 /// The absolute position of this scene object in the scene
@@ -561,7 +560,7 @@ namespace OpenSim.Region.Framework.Scenes
561 { 560 {
562 inTransit = true; 561 inTransit = true;
563 SOGCrossDelegate d = CrossAsync; 562 SOGCrossDelegate d = CrossAsync;
564 d.BeginInvoke(this, val, CrossAsyncCompleted, d); 563 d.BeginInvoke(this, val, null, CrossAsyncCompleted, d);
565 } 564 }
566 return; 565 return;
567 } 566 }
@@ -602,7 +601,6 @@ namespace OpenSim.Region.Framework.Scenes
602 av.sitSOGmoved(); 601 av.sitSOGmoved();
603 } 602 }
604 603
605
606 // now that position is changed tell it to scripts 604 // now that position is changed tell it to scripts
607 if (triggerScriptEvent) 605 if (triggerScriptEvent)
608 { 606 {
@@ -618,64 +616,75 @@ namespace OpenSim.Region.Framework.Scenes
618 } 616 }
619 } 617 }
620 618
621 public SceneObjectGroup CrossAsync(SceneObjectGroup sog, Vector3 val) 619 private SceneObjectGroup CrossAsync(SceneObjectGroup sog, Vector3 val, TeleportObjectData tpdata)
622 { 620 {
623 Scene sogScene = sog.m_scene; 621 Scene sogScene = sog.m_scene;
624 IEntityTransferModule entityTransfer = sogScene.RequestModuleInterface<IEntityTransferModule>(); 622 SceneObjectPart root = sog.RootPart;
625 623
626 Vector3 newpos = Vector3.Zero; 624 bool isTeleport = tpdata != null;
627 OpenSim.Services.Interfaces.GridRegion destination = null;
628 625
629 if (sog.RootPart.DIE_AT_EDGE) 626 if(!isTeleport)
630 { 627 {
631 try 628 if (root.DIE_AT_EDGE)
632 {
633 sogScene.DeleteSceneObject(sog, false);
634 }
635 catch (Exception)
636 { 629 {
637 m_log.Warn("[SCENE]: exception when trying to remove the prim that crossed the border."); 630 try
631 {
632 sogScene.DeleteSceneObject(sog, false);
633 }
634 catch (Exception)
635 {
636 m_log.Warn("[SCENE]: exception when trying to remove the prim that crossed the border.");
637 }
638 return sog;
638 } 639 }
639 return sog;
640 }
641 640
642 if (sog.RootPart.RETURN_AT_EDGE) 641 if (root.RETURN_AT_EDGE)
643 {
644 // We remove the object here
645 try
646 {
647 List<uint> localIDs = new List<uint>();
648 localIDs.Add(sog.RootPart.LocalId);
649 sogScene.AddReturn(sog.OwnerID, sog.Name, sog.AbsolutePosition,
650 "Returned at region cross");
651 sogScene.DeRezObjects(null, localIDs, UUID.Zero, DeRezAction.Return, UUID.Zero);
652 }
653 catch (Exception)
654 { 642 {
655 m_log.Warn("[SCENE]: exception when trying to return the prim that crossed the border."); 643 // We remove the object here
644 try
645 {
646 List<uint> localIDs = new List<uint>();
647 localIDs.Add(root.LocalId);
648 sogScene.AddReturn(sog.OwnerID, sog.Name, sog.AbsolutePosition,
649 "Returned at region cross");
650 sogScene.DeRezObjects(null, localIDs, UUID.Zero, DeRezAction.Return, UUID.Zero, false);
651 }
652 catch (Exception)
653 {
654 m_log.Warn("[SCENE]: exception when trying to return the prim that crossed the border.");
655 }
656 return sog;
656 } 657 }
657 return sog;
658 } 658 }
659 659
660 if (sog.m_rootPart.KeyframeMotion != null) 660 if (root.KeyframeMotion != null)
661 sog.m_rootPart.KeyframeMotion.StartCrossingCheck(); 661 root.KeyframeMotion.StartCrossingCheck();
662
663 if(root.PhysActor != null)
664 root.PhysActor.CrossingStart();
665
666 IEntityTransferModule entityTransfer = sogScene.RequestModuleInterface<IEntityTransferModule>();
662 667
663 if (entityTransfer == null) 668 if (entityTransfer == null)
664 return sog; 669 return sog;
665 670
671 Vector3 newpos = Vector3.Zero;
672 OpenSim.Services.Interfaces.GridRegion destination = null;
673
666 destination = entityTransfer.GetObjectDestination(sog, val, out newpos); 674 destination = entityTransfer.GetObjectDestination(sog, val, out newpos);
667 if (destination == null) 675 if (destination == null)
668 return sog; 676 return sog;
669 677
670 if (sog.m_sittingAvatars.Count == 0) 678 if (sog.m_sittingAvatars.Count == 0)
671 { 679 {
672 entityTransfer.CrossPrimGroupIntoNewRegion(destination, newpos, sog, true, true); 680 entityTransfer.CrossPrimGroupIntoNewRegion(destination, newpos, sog, !isTeleport, true);
673 return sog; 681 return sog;
674 } 682 }
675 683
676 string reason = String.Empty; 684 string reason = String.Empty;
677 EntityTransferContext ctx = new EntityTransferContext(); 685 EntityTransferContext ctx = new EntityTransferContext();
678 686
687 Vector3 curPos = root.GroupPosition;
679 foreach (ScenePresence av in sog.m_sittingAvatars) 688 foreach (ScenePresence av in sog.m_sittingAvatars)
680 { 689 {
681 // We need to cross these agents. First, let's find 690 // We need to cross these agents. First, let's find
@@ -686,10 +695,15 @@ namespace OpenSim.Region.Framework.Scenes
686 695
687 // We set the avatar position as being the object 696 // We set the avatar position as being the object
688 // position to get the region to send to 697 // position to get the region to send to
698 if(av.IsNPC)
699 continue;
700
701 if(av.IsInTransit)
702 return sog;
703
689 if(!entityTransfer.checkAgentAccessToRegion(av, destination, newpos, ctx, out reason)) 704 if(!entityTransfer.checkAgentAccessToRegion(av, destination, newpos, ctx, out reason))
690 {
691 return sog; 705 return sog;
692 } 706
693 m_log.DebugFormat("[SCENE OBJECT]: Avatar {0} needs to be crossed to {1}", av.Name, destination.RegionName); 707 m_log.DebugFormat("[SCENE OBJECT]: Avatar {0} needs to be crossed to {1}", av.Name, destination.RegionName);
694 } 708 }
695 709
@@ -697,8 +711,10 @@ namespace OpenSim.Region.Framework.Scenes
697 // be made to stand up 711 // be made to stand up
698 712
699 List<avtocrossInfo> avsToCross = new List<avtocrossInfo>(); 713 List<avtocrossInfo> avsToCross = new List<avtocrossInfo>();
700 714 List<ScenePresence> avsToCrossFar = new List<ScenePresence>();
701 foreach (ScenePresence av in sog.m_sittingAvatars) 715 ulong destHandle = destination.RegionHandle;
716 List<ScenePresence> sittingAvatars = GetSittingAvatars();
717 foreach (ScenePresence av in sittingAvatars)
702 { 718 {
703 byte cflags = 1; 719 byte cflags = 1;
704 720
@@ -712,68 +728,175 @@ namespace OpenSim.Region.Framework.Scenes
712 else 728 else
713 cflags = 3; 729 cflags = 3;
714 } 730 }
731 if(!av.knowsNeighbourRegion(destHandle))
732 cflags |= 8;
715 733
716 // 1 is crossing 734 // 1 is crossing
717 // 2 is sitting 735 // 2 is sitting
718 // 4 is sitting at sittarget 736 // 4 is sitting at sittarget
719 av.crossingFlags = cflags; 737 // 8 far crossing
720 738
721 avinfo.av = av; 739 avinfo.av = av;
722 avinfo.ParentID = av.ParentID; 740 avinfo.ParentID = av.ParentID;
723 avsToCross.Add(avinfo); 741 avsToCross.Add(avinfo);
724 742
743 if(!av.knowsNeighbourRegion(destHandle))
744 {
745 cflags |= 8;
746 avsToCrossFar.Add(av);
747 }
748
749 if(av.IsNPC)
750 av.crossingFlags = 0;
751 else
752 av.crossingFlags = cflags;
753
725 av.PrevSitOffset = av.OffsetPosition; 754 av.PrevSitOffset = av.OffsetPosition;
726 av.ParentID = 0; 755 av.ParentID = 0;
727 } 756 }
728 757
758 Vector3 vel = root.Velocity;
759 Vector3 avel = root.AngularVelocity;
760 Vector3 acc = root.Acceleration;
761 Quaternion ori = root.RotationOffset;
762
763 if(isTeleport)
764 {
765 root.Stop();
766 sogScene.ForEachScenePresence(delegate(ScenePresence av)
767 {
768 av.ControllingClient.SendEntityUpdate(root,PrimUpdateFlags.SendInTransit);
769 av.ControllingClient.SendEntityTerseUpdateImmediate(root);
770 });
771
772 root.Velocity = tpdata.vel;
773 root.AngularVelocity = tpdata.avel;
774 root.Acceleration = tpdata.acc;
775 root.RotationOffset = tpdata.ori;
776 }
777
729 if (entityTransfer.CrossPrimGroupIntoNewRegion(destination, newpos, sog, true, false)) 778 if (entityTransfer.CrossPrimGroupIntoNewRegion(destination, newpos, sog, true, false))
730 { 779 {
780 if(isTeleport)
781 {
782 sogScene.ForEachScenePresence(delegate(ScenePresence oav)
783 {
784 if(sittingAvatars.Contains(oav))
785 return;
786 if(oav.knowsNeighbourRegion(destHandle))
787 return;
788 oav.ControllingClient.SendEntityUpdate(root, PrimUpdateFlags.Kill);
789 foreach (ScenePresence sav in sittingAvatars)
790 {
791 sav.SendKillTo(oav);
792 }
793 });
794 }
795 bool crossedfar = false;
796 foreach (ScenePresence av in avsToCrossFar)
797 {
798 if(entityTransfer.CrossAgentCreateFarChild(av,destination, newpos, ctx))
799 crossedfar = true;
800 else
801 av.crossingFlags = 0;
802 }
803
804 if(crossedfar)
805 Thread.Sleep(1000);
806
731 foreach (avtocrossInfo avinfo in avsToCross) 807 foreach (avtocrossInfo avinfo in avsToCross)
732 { 808 {
733 ScenePresence av = avinfo.av; 809 ScenePresence av = avinfo.av;
734 if (!av.IsInTransit) // just in case... 810 av.IsInTransit = true;
735 { 811 m_log.DebugFormat("[SCENE OBJECT]: Crossing avatar {0} to {1}", av.Name, val);
736 m_log.DebugFormat("[SCENE OBJECT]: Crossing avatar {0} to {1}", av.Name, val);
737 812
738 av.IsInTransit = true; 813 if(av.crossingFlags > 0)
814 entityTransfer.CrossAgentToNewRegionAsync(av, newpos, destination, false, ctx);
739 815
740// CrossAgentToNewRegionDelegate d = entityTransfer.CrossAgentToNewRegionAsync; 816 if (av.IsChildAgent)
741// d.BeginInvoke(av, val, destination, av.Flying, version, CrossAgentToNewRegionCompleted, d); 817 {
742 entityTransfer.CrossAgentToNewRegionAsync(av, newpos, destination, av.Flying, ctx); 818 // avatar crossed do some extra cleanup
743 if (av.IsChildAgent) 819 if (av.ParentUUID != UUID.Zero)
744 {
745 // avatar crossed do some extra cleanup
746 if (av.ParentUUID != UUID.Zero)
747 {
748 av.ClearControls();
749 av.ParentPart = null;
750 }
751 }
752 else
753 { 820 {
754 // avatar cross failed we need do dedicated standUp 821 av.ClearControls();
755 // part of it was done at CrossAgentToNewRegionAsync 822 av.ParentPart = null;
756 // so for now just remove the sog controls
757 // this may need extra care
758 av.UnRegisterSeatControls(sog.UUID);
759 } 823 }
760
761 av.ParentUUID = UUID.Zero; 824 av.ParentUUID = UUID.Zero;
825 av.ParentPart = null;
762 // In any case 826 // In any case
763 av.IsInTransit = false; 827 av.IsInTransit = false;
764 av.crossingFlags = 0; 828 av.crossingFlags = 0;
765 m_log.DebugFormat("[SCENE OBJECT]: Crossing agent {0} {1} completed.", av.Firstname, av.Lastname); 829 m_log.DebugFormat("[SCENE OBJECT]: Crossing agent {0} {1} completed.", av.Firstname, av.Lastname);
766 } 830 }
767 else 831 else
768 m_log.DebugFormat("[SCENE OBJECT]: Crossing avatar already in transit {0} to {1}", av.Name, val); 832 {
833 // avatar cross failed we need do dedicated standUp
834 // part of it was done at CrossAgentToNewRegionAsync
835 // so for now just remove the sog controls
836 // this may need extra care
837 av.UnRegisterSeatControls(sog.UUID);
838 av.ParentUUID = UUID.Zero;
839 av.ParentPart = null;
840 Vector3 oldp = curPos;
841 oldp.X = Util.Clamp<float>(oldp.X, 0.5f, sog.m_scene.RegionInfo.RegionSizeX - 0.5f);
842 oldp.Y = Util.Clamp<float>(oldp.Y, 0.5f, sog.m_scene.RegionInfo.RegionSizeY - 0.5f);
843 av.AbsolutePosition = oldp;
844 av.crossingFlags = 0;
845 av.sitAnimation = "SIT";
846 av.IsInTransit = false;
847 if(av.Animator!= null)
848 av.Animator.SetMovementAnimations("STAND");
849 av.AddToPhysicalScene(false);
850 sogScene.ForEachScenePresence(delegate(ScenePresence oav)
851 {
852 if(sittingAvatars.Contains(oav))
853 return;
854 if(oav.knowsNeighbourRegion(destHandle))
855 av.SendAvatarDataToAgent(oav);
856 else
857 {
858 av.SendAvatarDataToAgent(oav);
859 av.SendAppearanceToAgent(oav);
860 if (av.Animator != null)
861 av.Animator.SendAnimPackToClient(oav.ControllingClient);
862 av.SendAttachmentsToAgentNF(oav); // not ok
863 }
864 });
865 m_log.DebugFormat("[SCENE OBJECT]: Crossing agent {0} {1} failed.", av.Firstname, av.Lastname);
866 }
769 } 867 }
868
869 if(crossedfar)
870 {
871 Thread.Sleep(10000);
872 foreach (ScenePresence av in avsToCrossFar)
873 {
874 if(av.IsChildAgent)
875 {
876 av.Scene.CloseAgent(av.UUID, false);
877 }
878 else
879 av.RemoveNeighbourRegion(destHandle);
880 }
881 }
882 avsToCrossFar.Clear();
770 avsToCross.Clear(); 883 avsToCross.Clear();
771 sog.RemoveScriptInstances(true); 884 sog.RemoveScriptInstances(true);
772 sog.Clear(); 885 sog.Clear();
773 return sog; 886 return sog;
774 } 887 }
775 else // cross failed, put avas back ?? 888 else
776 { 889 {
890 if(isTeleport)
891 {
892 if((tpdata.flags & OSTPOBJ_STOPONFAIL) == 0)
893 {
894 root.Velocity = vel;
895 root.AngularVelocity = avel;
896 root.Acceleration = acc;
897 }
898 root.RotationOffset = ori;
899 }
777 foreach (avtocrossInfo avinfo in avsToCross) 900 foreach (avtocrossInfo avinfo in avsToCross)
778 { 901 {
779 ScenePresence av = avinfo.av; 902 ScenePresence av = avinfo.av;
@@ -783,7 +906,6 @@ namespace OpenSim.Region.Framework.Scenes
783 } 906 }
784 } 907 }
785 avsToCross.Clear(); 908 avsToCross.Clear();
786
787 return sog; 909 return sog;
788 } 910 }
789 911
@@ -795,11 +917,14 @@ namespace OpenSim.Region.Framework.Scenes
795 if (!sog.IsDeleted) 917 if (!sog.IsDeleted)
796 { 918 {
797 SceneObjectPart rootp = sog.m_rootPart; 919 SceneObjectPart rootp = sog.m_rootPart;
920
798 Vector3 oldp = rootp.GroupPosition; 921 Vector3 oldp = rootp.GroupPosition;
799 oldp.X = Util.Clamp<float>(oldp.X, 0.5f, sog.m_scene.RegionInfo.RegionSizeX - 0.5f); 922 oldp.X = Util.Clamp<float>(oldp.X, 0.5f, sog.m_scene.RegionInfo.RegionSizeX - 0.5f);
800 oldp.Y = Util.Clamp<float>(oldp.Y, 0.5f, sog.m_scene.RegionInfo.RegionSizeY - 0.5f); 923 oldp.Y = Util.Clamp<float>(oldp.Y, 0.5f, sog.m_scene.RegionInfo.RegionSizeY - 0.5f);
801 rootp.GroupPosition = oldp; 924 rootp.GroupPosition = oldp;
802 925
926 rootp.Stop();
927
803 SceneObjectPart[] parts = sog.m_parts.GetArray(); 928 SceneObjectPart[] parts = sog.m_parts.GetArray();
804 929
805 foreach (SceneObjectPart part in parts) 930 foreach (SceneObjectPart part in parts)
@@ -813,47 +938,150 @@ namespace OpenSim.Region.Framework.Scenes
813 av.sitSOGmoved(); 938 av.sitSOGmoved();
814 } 939 }
815 940
816 sog.Velocity = Vector3.Zero;
817
818 if (sog.m_rootPart.KeyframeMotion != null) 941 if (sog.m_rootPart.KeyframeMotion != null)
819 sog.m_rootPart.KeyframeMotion.CrossingFailure(); 942 sog.m_rootPart.KeyframeMotion.CrossingFailure();
820 943
821 if (sog.RootPart.PhysActor != null) 944 if (sog.RootPart.PhysActor != null)
822 {
823 sog.RootPart.PhysActor.CrossingFailure(); 945 sog.RootPart.PhysActor.CrossingFailure();
824 }
825 946
826 sog.inTransit = false; 947 sog.inTransit = false;
948 AttachToBackup();
827 sog.ScheduleGroupForFullUpdate(); 949 sog.ScheduleGroupForFullUpdate();
828 } 950 }
829 } 951 }
830 952
831/* outdated 953 private class TeleportObjectData
832 private void CrossAgentToNewRegionCompleted(ScenePresence agent)
833 { 954 {
834 //// If the cross was successful, this agent is a child agent 955 public int flags;
835 if (agent.IsChildAgent) 956 public Vector3 vel;
957 public Vector3 avel;
958 public Vector3 acc;
959 public Quaternion ori;
960 public UUID sourceID;
961 }
962
963 // copy from LSL_constants.cs
964 const int OSTPOBJ_STOPATTARGET = 0x1; // stops at destination
965 const int OSTPOBJ_STOPONFAIL = 0x2; // stops at start if tp fails
966 const int OSTPOBJ_SETROT = 0x4; // the rotation is the final rotation, otherwise is a added rotation
967
968 public int TeleportObject(UUID sourceID, Vector3 targetPosition, Quaternion rotation, int flags)
969 {
970 if(inTransit || IsDeleted || IsAttachmentCheckFull() || IsSelected || Scene == null)
971 return -1;
972
973 inTransit = true;
974
975 PhysicsActor pa = RootPart.PhysActor;
976 if(pa == null || RootPart.KeyframeMotion != null /*|| m_sittingAvatars.Count == 0*/)
836 { 977 {
837 if (agent.ParentUUID != UUID.Zero) 978 inTransit = false;
979 return -1;
980 }
981
982 bool stop = (flags & OSTPOBJ_STOPATTARGET) != 0;
983 bool setrot = (flags & OSTPOBJ_SETROT) != 0;
984
985 rotation.Normalize();
986
987 Quaternion currentRot = RootPart.RotationOffset;
988 if(setrot)
989 rotation = Quaternion.Conjugate(currentRot) * rotation;
990
991 bool dorot = setrot | (Math.Abs(rotation.W) < 0.99999);
992
993 Vector3 vel = Vector3.Zero;
994 Vector3 avel = Vector3.Zero;
995 Vector3 acc = Vector3.Zero;
996
997 if(!stop)
998 {
999 vel = RootPart.Velocity;
1000 avel = RootPart.AngularVelocity;
1001 acc = RootPart.Acceleration;
1002 }
1003 Quaternion ori = RootPart.RotationOffset;
1004
1005 if(dorot)
1006 {
1007 if(!stop)
838 { 1008 {
839 agent.HandleForceReleaseControls(agent.ControllingClient,agent.UUID); 1009 vel *= rotation;
840 agent.ParentPart = null; 1010 avel *= rotation;
841// agent.ParentPosition = Vector3.Zero; 1011 acc *= rotation;
842// agent.ParentUUID = UUID.Zero;
843 } 1012 }
1013 ori *= rotation;
844 } 1014 }
845 1015
846 agent.ParentUUID = UUID.Zero; 1016 if(Scene.PositionIsInCurrentRegion(targetPosition))
847// agent.Reset(); 1017 {
848// else // Not successful 1018 if(Scene.InTeleportTargetsCoolDown(UUID, sourceID, 1.0))
849// agent.RestoreInCurrentScene(); 1019 {
1020 inTransit = false;
1021 return -2;
1022 }
850 1023
851 // In any case 1024 Vector3 curPos = AbsolutePosition;
852 agent.IsInTransit = false; 1025 ILandObject curLand = Scene.LandChannel.GetLandObject(curPos.X, curPos.Y);
1026 float posX = targetPosition.X;
1027 float posY = targetPosition.Y;
1028 ILandObject land = Scene.LandChannel.GetLandObject(posX, posY);
1029 if(land != null && land != curLand)
1030 {
1031 if(!Scene.Permissions.CanObjectEnterWithScripts(this, land))
1032 {
1033 inTransit = false;
1034 return -3;
1035 }
1036
1037 UUID agentID;
1038 foreach (ScenePresence av in m_sittingAvatars)
1039 {
1040 agentID = av.UUID;
1041 if(land.IsRestrictedFromLand(agentID) || land.IsBannedFromLand(agentID))
1042 {
1043 inTransit = false;
1044 return -4;
1045 }
1046 }
1047 }
1048
1049 RootPart.Velocity = vel;
1050 RootPart.AngularVelocity = avel;
1051 RootPart.Acceleration = acc;
1052 RootPart.RotationOffset = ori;
1053
1054 Vector3 s = RootPart.Scale * RootPart.RotationOffset;
1055 float h = Scene.GetGroundHeight(posX, posY) + 0.5f * (float)Math.Abs(s.Z) + 0.01f;
1056 if(targetPosition.Z < h)
1057 targetPosition.Z = h;
1058
1059 inTransit = false;
1060 AbsolutePosition = targetPosition;
1061 RootPart.ScheduleTerseUpdate();
1062 return 1;
1063 }
1064
1065 if(Scene.InTeleportTargetsCoolDown(UUID, sourceID, 20.0))
1066 {
1067 inTransit = false;
1068 return -1;
1069 }
853 1070
854 m_log.DebugFormat("[SCENE OBJECT]: Crossing agent {0} {1} completed.", agent.Firstname, agent.Lastname); 1071 TeleportObjectData tdata = new TeleportObjectData();
1072 tdata.flags = flags;
1073 tdata.vel = vel;
1074 tdata.avel = avel;
1075 tdata.acc = acc;
1076 tdata.ori = ori;
1077 tdata.sourceID = sourceID;
1078
1079
1080 SOGCrossDelegate d = CrossAsync;
1081 d.BeginInvoke(this, targetPosition, tdata, CrossAsyncCompleted, d);
1082 return 0;
855 } 1083 }
856*/ 1084
857 public override Vector3 Velocity 1085 public override Vector3 Velocity
858 { 1086 {
859 get { return RootPart.Velocity; } 1087 get { return RootPart.Velocity; }
@@ -1786,63 +2014,6 @@ namespace OpenSim.Region.Framework.Scenes
1786 } 2014 }
1787 } 2015 }
1788 2016
1789 /// <summary>
1790 /// Attach this scene object to the given avatar.
1791 /// </summary>
1792 /// <param name="agentID"></param>
1793 /// <param name="attachmentpoint"></param>
1794 /// <param name="AttachOffset"></param>
1795 private void AttachToAgent(
1796 ScenePresence avatar, SceneObjectGroup so, uint attachmentpoint, Vector3 attachOffset, bool silent)
1797 {
1798 if (avatar != null)
1799 {
1800 // don't attach attachments to child agents
1801 if (avatar.IsChildAgent) return;
1802
1803 // Remove from database and parcel prim count
1804 m_scene.DeleteFromStorage(so.UUID);
1805 m_scene.EventManager.TriggerParcelPrimCountTainted();
1806
1807 so.AttachedAvatar = avatar.UUID;
1808
1809 if (so.RootPart.PhysActor != null)
1810 {
1811 m_scene.PhysicsScene.RemovePrim(so.RootPart.PhysActor);
1812 so.RootPart.PhysActor = null;
1813 }
1814
1815 so.AbsolutePosition = attachOffset;
1816 so.RootPart.AttachedPos = attachOffset;
1817 so.IsAttachment = true;
1818 so.RootPart.SetParentLocalId(avatar.LocalId);
1819 so.AttachmentPoint = attachmentpoint;
1820
1821 avatar.AddAttachment(this);
1822
1823 if (!silent)
1824 {
1825 // Killing it here will cause the client to deselect it
1826 // It then reappears on the avatar, deselected
1827 // through the full update below
1828 //
1829 if (IsSelected)
1830 {
1831 m_scene.SendKillObject(new List<uint> { m_rootPart.LocalId });
1832 }
1833
1834 IsSelected = false; // fudge....
1835 ScheduleGroupForFullUpdate();
1836 }
1837 }
1838 else
1839 {
1840 m_log.WarnFormat(
1841 "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present",
1842 UUID, avatar.ControllingClient.AgentId, Scene.RegionInfo.RegionName);
1843 }
1844 }
1845
1846 public byte GetAttachmentPoint() 2017 public byte GetAttachmentPoint()
1847 { 2018 {
1848 return m_rootPart.Shape.State; 2019 return m_rootPart.Shape.State;
@@ -1957,6 +2128,7 @@ namespace OpenSim.Region.Framework.Scenes
1957 2128
1958 if (part.LinkNum == 2) 2129 if (part.LinkNum == 2)
1959 RootPart.LinkNum = 1; 2130 RootPart.LinkNum = 1;
2131 InvalidatePartsLinkMaps();
1960 } 2132 }
1961 2133
1962 /// <summary> 2134 /// <summary>
@@ -2233,7 +2405,8 @@ namespace OpenSim.Region.Framework.Scenes
2233 { 2405 {
2234 if (part.OwnerID != userId) 2406 if (part.OwnerID != userId)
2235 { 2407 {
2236 part.LastOwnerID = part.OwnerID; 2408 if(part.GroupID != part.OwnerID)
2409 part.LastOwnerID = part.OwnerID;
2237 part.OwnerID = userId; 2410 part.OwnerID = userId;
2238 } 2411 }
2239 }); 2412 });
@@ -2313,7 +2486,7 @@ namespace OpenSim.Region.Framework.Scenes
2313 RootPart.UUID); 2486 RootPart.UUID);
2314 m_scene.AddReturn(OwnerID == GroupID ? LastOwnerID : OwnerID, Name, AbsolutePosition, "parcel autoreturn"); 2487 m_scene.AddReturn(OwnerID == GroupID ? LastOwnerID : OwnerID, Name, AbsolutePosition, "parcel autoreturn");
2315 m_scene.DeRezObjects(null, new List<uint>() { RootPart.LocalId }, UUID.Zero, 2488 m_scene.DeRezObjects(null, new List<uint>() { RootPart.LocalId }, UUID.Zero,
2316 DeRezAction.Return, UUID.Zero); 2489 DeRezAction.Return, UUID.Zero, false);
2317 2490
2318 return; 2491 return;
2319 } 2492 }
@@ -2443,17 +2616,16 @@ namespace OpenSim.Region.Framework.Scenes
2443 dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); 2616 dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
2444 dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; 2617 dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
2445 2618
2446
2447 if (userExposed) 2619 if (userExposed)
2448 dupe.m_rootPart.TrimPermissions(); 2620 dupe.m_rootPart.TrimPermissions();
2449 2621
2450 List<SceneObjectPart> partList = new List<SceneObjectPart>(m_parts.GetArray()); 2622 List<SceneObjectPart> partList = new List<SceneObjectPart>(m_parts.GetArray());
2451 2623
2452 partList.Sort(delegate(SceneObjectPart p1, SceneObjectPart p2) 2624 partList.Sort(delegate(SceneObjectPart p1, SceneObjectPart p2)
2453 { 2625 {
2454 return p1.LinkNum.CompareTo(p2.LinkNum); 2626 return p1.LinkNum.CompareTo(p2.LinkNum);
2455 } 2627 }
2456 ); 2628 );
2457 2629
2458 foreach (SceneObjectPart part in partList) 2630 foreach (SceneObjectPart part in partList)
2459 { 2631 {
@@ -2505,12 +2677,15 @@ namespace OpenSim.Region.Framework.Scenes
2505 if (dupe.m_rootPart.PhysActor != null) 2677 if (dupe.m_rootPart.PhysActor != null)
2506 dupe.m_rootPart.PhysActor.Building = false; // tell physics to finish building 2678 dupe.m_rootPart.PhysActor.Building = false; // tell physics to finish building
2507 2679
2680 dupe.AggregateDeepPerms();
2681
2508 dupe.HasGroupChanged = true; 2682 dupe.HasGroupChanged = true;
2509 dupe.AttachToBackup(); 2683 dupe.AttachToBackup();
2510 2684
2511 ScheduleGroupForFullUpdate(); 2685 dupe.ScheduleGroupForFullUpdate();
2512 } 2686 }
2513 2687
2688 dupe.InvalidatePartsLinkMaps();
2514 m_dupeInProgress = false; 2689 m_dupeInProgress = false;
2515 return dupe; 2690 return dupe;
2516 } 2691 }
@@ -2746,25 +2921,33 @@ namespace OpenSim.Region.Framework.Scenes
2746 } 2921 }
2747 2922
2748 /// <summary> 2923 /// <summary>
2749 /// Set the owner of the root part. 2924 /// Set the owner of all linkset.
2750 /// </summary> 2925 /// </summary>
2751 /// <param name="part"></param>
2752 /// <param name="cAgentID"></param> 2926 /// <param name="cAgentID"></param>
2753 /// <param name="cGroupID"></param> 2927 /// <param name="cGroupID"></param>
2754 public void SetRootPartOwner(SceneObjectPart part, UUID cAgentID, UUID cGroupID) 2928 public void SetOwner(UUID cAgentID, UUID cGroupID)
2755 { 2929 {
2756 part.LastOwnerID = part.OwnerID; 2930 SceneObjectPart rpart = RootPart;
2757 part.OwnerID = cAgentID; 2931 UUID oldowner = rpart.OwnerID;
2758 part.GroupID = cGroupID; 2932 ForEachPart(delegate(SceneObjectPart part)
2933 {
2934 if(part.GroupID != part.OwnerID)
2935 part.LastOwnerID = part.OwnerID;
2936 part.OwnerID = cAgentID;
2937 part.GroupID = cGroupID;
2938 });
2759 2939
2760 if (part.OwnerID != cAgentID) 2940 if (oldowner != cAgentID)
2761 { 2941 {
2762 // Apply Next Owner Permissions if we're not bypassing permissions 2942 // Apply Next Owner Permissions if we're not bypassing permissions
2763 if (!m_scene.Permissions.BypassPermissions()) 2943 if (!m_scene.Permissions.BypassPermissions())
2944 {
2764 ApplyNextOwnerPermissions(); 2945 ApplyNextOwnerPermissions();
2946 AggregatePerms();
2947 }
2765 } 2948 }
2766 2949
2767 part.ScheduleFullUpdate(); 2950 rpart.ScheduleFullUpdate();
2768 } 2951 }
2769 2952
2770 /// <summary> 2953 /// <summary>
@@ -3264,6 +3447,7 @@ namespace OpenSim.Region.Framework.Scenes
3264 ResetChildPrimPhysicsPositions(); 3447 ResetChildPrimPhysicsPositions();
3265 3448
3266 InvalidBoundsRadius(); 3449 InvalidBoundsRadius();
3450 InvalidatePartsLinkMaps();
3267 3451
3268 if (m_rootPart.PhysActor != null) 3452 if (m_rootPart.PhysActor != null)
3269 m_rootPart.PhysActor.Building = false; 3453 m_rootPart.PhysActor.Building = false;
@@ -3420,6 +3604,8 @@ namespace OpenSim.Region.Framework.Scenes
3420 objectGroup.HasGroupChangedDueToDelink = true; 3604 objectGroup.HasGroupChangedDueToDelink = true;
3421 3605
3422 InvalidBoundsRadius(); 3606 InvalidBoundsRadius();
3607 InvalidatePartsLinkMaps();
3608 objectGroup.AggregatePerms();
3423 3609
3424 if (sendEvents) 3610 if (sendEvents)
3425 linkPart.TriggerScriptChangedEvent(Changed.LINK); 3611 linkPart.TriggerScriptChangedEvent(Changed.LINK);
@@ -3958,8 +4144,8 @@ namespace OpenSim.Region.Framework.Scenes
3958 4144
3959 public void AdjustChildPrimPermissions(bool forceTaskInventoryPermissive) 4145 public void AdjustChildPrimPermissions(bool forceTaskInventoryPermissive)
3960 { 4146 {
3961 uint newOwnerMask = (uint)(PermissionMask.All | PermissionMask.Export) & 0xfffffff8; // Mask folded bits 4147 uint newOwnerMask = (uint)(PermissionMask.All | PermissionMask.Export) & 0xfffffff0; // Mask folded bits
3962 uint foldedPerms = RootPart.OwnerMask & 3; 4148 uint foldedPerms = RootPart.OwnerMask & (uint)PermissionMask.FoldedMask;
3963 4149
3964 ForEachPart(part => 4150 ForEachPart(part =>
3965 { 4151 {
@@ -3970,14 +4156,14 @@ namespace OpenSim.Region.Framework.Scenes
3970 part.Inventory.ApplyGodPermissions(part.BaseMask); 4156 part.Inventory.ApplyGodPermissions(part.BaseMask);
3971 }); 4157 });
3972 4158
3973 uint lockMask = ~(uint)(PermissionMask.Move | PermissionMask.Modify); 4159 uint lockMask = ~(uint)(PermissionMask.Move);
3974 uint lockBit = RootPart.OwnerMask & (uint)(PermissionMask.Move | PermissionMask.Modify); 4160 uint lockBit = RootPart.OwnerMask & (uint)(PermissionMask.Move);
3975 RootPart.OwnerMask = (RootPart.OwnerMask & lockBit) | ((newOwnerMask | foldedPerms) & lockMask); 4161 RootPart.OwnerMask = (RootPart.OwnerMask & lockBit) | ((newOwnerMask | foldedPerms) & lockMask);
3976 4162
3977// m_log.DebugFormat( 4163// m_log.DebugFormat(
3978// "[SCENE OBJECT GROUP]: RootPart.OwnerMask now {0} for {1} in {2}", 4164// "[SCENE OBJECT GROUP]: RootPart.OwnerMask now {0} for {1} in {2}",
3979// (OpenMetaverse.PermissionMask)RootPart.OwnerMask, Name, Scene.Name); 4165// (OpenMetaverse.PermissionMask)RootPart.OwnerMask, Name, Scene.Name);
3980 4166 AggregatePerms();
3981 RootPart.ScheduleFullUpdate(); 4167 RootPart.ScheduleFullUpdate();
3982 } 4168 }
3983 4169
@@ -4002,6 +4188,7 @@ namespace OpenSim.Region.Framework.Scenes
4002 { 4188 {
4003 foreach (SceneObjectPart part in Parts) 4189 foreach (SceneObjectPart part in Parts)
4004 part.Inventory.ApplyGodPermissions(RootPart.BaseMask); 4190 part.Inventory.ApplyGodPermissions(RootPart.BaseMask);
4191 AggregatePerms();
4005 } 4192 }
4006 4193
4007 HasGroupChanged = true; 4194 HasGroupChanged = true;
@@ -4647,7 +4834,7 @@ namespace OpenSim.Region.Framework.Scenes
4647 } 4834 }
4648 if ((change & ObjectChangeType.Position) != 0) 4835 if ((change & ObjectChangeType.Position) != 0)
4649 { 4836 {
4650 if (IsAttachment || m_scene.Permissions.CanObjectEntry(group.UUID, false, data.position)) 4837 if (IsAttachment || m_scene.Permissions.CanObjectEntry(group, false, data.position))
4651 UpdateGroupPosition(data.position); 4838 UpdateGroupPosition(data.position);
4652 updateType = updatetype.groupterse; 4839 updateType = updatetype.groupterse;
4653 } 4840 }
@@ -5056,6 +5243,49 @@ namespace OpenSim.Region.Framework.Scenes
5056 return Ptot; 5243 return Ptot;
5057 } 5244 }
5058 5245
5246 public void GetInertiaData(out float TotalMass, out Vector3 CenterOfMass, out Vector3 Inertia, out Vector4 aux )
5247 {
5248 PhysicsActor pa = RootPart.PhysActor;
5249
5250 if(((RootPart.Flags & PrimFlags.Physics) !=0) && pa !=null)
5251 {
5252 PhysicsInertiaData inertia;
5253
5254 inertia = pa.GetInertiaData();
5255
5256 TotalMass = inertia.TotalMass;
5257 CenterOfMass = inertia.CenterOfMass;
5258 Inertia = inertia.Inertia;
5259 aux = inertia.InertiaRotation;
5260
5261 return;
5262 }
5263
5264 TotalMass = GetMass();
5265 CenterOfMass = GetCenterOfMass() - AbsolutePosition;
5266 CenterOfMass *= Quaternion.Conjugate(RootPart.RotationOffset);
5267 Inertia = Vector3.Zero;
5268 aux = Vector4.Zero;
5269 }
5270
5271 public void SetInertiaData(float TotalMass, Vector3 CenterOfMass, Vector3 Inertia, Vector4 aux )
5272 {
5273 PhysicsInertiaData inertia = new PhysicsInertiaData();
5274 inertia.TotalMass = TotalMass;
5275 inertia.CenterOfMass = CenterOfMass;
5276 inertia.Inertia = Inertia;
5277 inertia.InertiaRotation = aux;
5278
5279 if(TotalMass < 0)
5280 RootPart.PhysicsInertia = null;
5281 else
5282 RootPart.PhysicsInertia = new PhysicsInertiaData(inertia);
5283
5284 PhysicsActor pa = RootPart.PhysActor;
5285 if(pa !=null)
5286 pa.SetInertiaData(inertia);
5287 }
5288
5059 /// <summary> 5289 /// <summary>
5060 /// Set the user group to which this scene object belongs. 5290 /// Set the user group to which this scene object belongs.
5061 /// </summary> 5291 /// </summary>
@@ -5217,6 +5447,7 @@ namespace OpenSim.Region.Framework.Scenes
5217 { 5447 {
5218 part.ResetOwnerChangeFlag(); 5448 part.ResetOwnerChangeFlag();
5219 }); 5449 });
5450 AggregatePerms();
5220 } 5451 }
5221 5452
5222 // clear some references to easy cg 5453 // clear some references to easy cg
@@ -5230,6 +5461,84 @@ namespace OpenSim.Region.Framework.Scenes
5230 m_PlaySoundSlavePrims.Clear(); 5461 m_PlaySoundSlavePrims.Clear();
5231 m_LoopSoundMasterPrim = null; 5462 m_LoopSoundMasterPrim = null;
5232 m_targets.Clear(); 5463 m_targets.Clear();
5464 m_partsNameToLinkMap.Clear();
5465 }
5466
5467 private Dictionary<string,int> m_partsNameToLinkMap = new Dictionary<string, int>();
5468 private string GetLinkNumber_lastname;
5469 private int GetLinkNumber_lastnumber;
5470
5471 // this scales bad but so does GetLinkNumPart
5472 public int GetLinkNumber(string name)
5473 {
5474 if(String.IsNullOrEmpty(name) || name == "Object")
5475 return -1;
5476
5477 lock(m_partsNameToLinkMap)
5478 {
5479 if(m_partsNameToLinkMap.Count == 0)
5480 {
5481 GetLinkNumber_lastname = String.Empty;
5482 GetLinkNumber_lastnumber = -1;
5483 SceneObjectPart[] parts = m_parts.GetArray();
5484 for (int i = 0; i < parts.Length; i++)
5485 {
5486 string s = parts[i].Name;
5487 if(String.IsNullOrEmpty(s) || s == "Object" || s == "Primitive")
5488 continue;
5489
5490 if(m_partsNameToLinkMap.ContainsKey(s))
5491 {
5492 int ol = parts[i].LinkNum;
5493 if(ol < m_partsNameToLinkMap[s])
5494 m_partsNameToLinkMap[s] = ol;
5495 }
5496 else
5497 m_partsNameToLinkMap[s] = parts[i].LinkNum;
5498 }
5499 }
5500
5501 if(name == GetLinkNumber_lastname)
5502 return GetLinkNumber_lastnumber;
5503
5504 if(m_partsNameToLinkMap.ContainsKey(name))
5505 {
5506 lock(m_partsNameToLinkMap)
5507 {
5508 GetLinkNumber_lastname = name;
5509 GetLinkNumber_lastnumber = m_partsNameToLinkMap[name];
5510 return GetLinkNumber_lastnumber;
5511 }
5512 }
5513 }
5514
5515 if(m_sittingAvatars.Count > 0)
5516 {
5517 int j = m_parts.Count + 1;
5518
5519 ScenePresence[] avs = m_sittingAvatars.ToArray();
5520 for (int i = 0; i < avs.Length; i++, j++)
5521 {
5522 if (avs[i].Name == name)
5523 {
5524 GetLinkNumber_lastname = name;
5525 GetLinkNumber_lastnumber = j;
5526 return j;
5527 }
5528 }
5529 }
5530
5531 return -1;
5532 }
5533
5534 public void InvalidatePartsLinkMaps()
5535 {
5536 lock(m_partsNameToLinkMap)
5537 {
5538 m_partsNameToLinkMap.Clear();
5539 GetLinkNumber_lastname = String.Empty;
5540 GetLinkNumber_lastnumber = -1;
5541 }
5233 } 5542 }
5234 5543
5235 #endregion 5544 #endregion
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index b8ac089..19bf53f 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -244,11 +244,6 @@ namespace OpenSim.Region.Framework.Scenes
244 244
245 public uint TimeStampTerse; 245 public uint TimeStampTerse;
246 246
247 // The following two are to hold the attachment data
248 // while an object is inworld
249 [XmlIgnore]
250 public byte AttachPoint = 0;
251
252 [XmlIgnore] 247 [XmlIgnore]
253 public Quaternion AttachRotation = Quaternion.Identity; 248 public Quaternion AttachRotation = Quaternion.Identity;
254 249
@@ -277,7 +272,11 @@ namespace OpenSim.Region.Framework.Scenes
277 272
278 public scriptEvents AggregateScriptEvents; 273 public scriptEvents AggregateScriptEvents;
279 274
280 public Vector3 AttachedPos; 275 public Vector3 AttachedPos
276 {
277 get;
278 set;
279 }
281 280
282 // rotation locks on local X,Y and or Z axis bit flags 281 // rotation locks on local X,Y and or Z axis bit flags
283 // bits are as in llSetStatus defined in SceneObjectGroup.axisSelect enum 282 // bits are as in llSetStatus defined in SceneObjectGroup.axisSelect enum
@@ -407,6 +406,8 @@ namespace OpenSim.Region.Framework.Scenes
407 406
408 private SOPVehicle m_vehicleParams = null; 407 private SOPVehicle m_vehicleParams = null;
409 408
409 private PhysicsInertiaData m_physicsInertia;
410
410 public KeyframeMotion KeyframeMotion 411 public KeyframeMotion KeyframeMotion
411 { 412 {
412 get; set; 413 get; set;
@@ -476,8 +477,8 @@ namespace OpenSim.Region.Framework.Scenes
476 APIDActive = false; 477 APIDActive = false;
477 Flags = 0; 478 Flags = 0;
478 CreateSelected = true; 479 CreateSelected = true;
479
480 TrimPermissions(); 480 TrimPermissions();
481 AggregateInnerPerms();
481 } 482 }
482 483
483 #endregion Constructors 484 #endregion Constructors
@@ -637,6 +638,8 @@ namespace OpenSim.Region.Framework.Scenes
637 set 638 set
638 { 639 {
639 m_name = value; 640 m_name = value;
641 if(ParentGroup != null)
642 ParentGroup.InvalidatePartsLinkMaps();
640 643
641 PhysicsActor pa = PhysActor; 644 PhysicsActor pa = PhysActor;
642 645
@@ -1063,7 +1066,7 @@ namespace OpenSim.Region.Framework.Scenes
1063 m_angularVelocity = value; 1066 m_angularVelocity = value;
1064 1067
1065 PhysicsActor actor = PhysActor; 1068 PhysicsActor actor = PhysActor;
1066 if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE) 1069 if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this)
1067 { 1070 {
1068 actor.RotationalVelocity = m_angularVelocity; 1071 actor.RotationalVelocity = m_angularVelocity;
1069 } 1072 }
@@ -1089,6 +1092,12 @@ namespace OpenSim.Region.Framework.Scenes
1089 m_acceleration = Vector3.Zero; 1092 m_acceleration = Vector3.Zero;
1090 else 1093 else
1091 m_acceleration = value; 1094 m_acceleration = value;
1095
1096 PhysicsActor actor = PhysActor;
1097 if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this)
1098 {
1099 actor.Acceleration = m_acceleration;
1100 }
1092 } 1101 }
1093 } 1102 }
1094 1103
@@ -2013,7 +2022,7 @@ namespace OpenSim.Region.Framework.Scenes
2013 // SetVelocity for LSL llSetVelocity.. may need revision if having other uses in future 2022 // SetVelocity for LSL llSetVelocity.. may need revision if having other uses in future
2014 public void SetVelocity(Vector3 pVel, bool localGlobalTF) 2023 public void SetVelocity(Vector3 pVel, bool localGlobalTF)
2015 { 2024 {
2016 if (ParentGroup == null || ParentGroup.IsDeleted) 2025 if (ParentGroup == null || ParentGroup.IsDeleted || ParentGroup.inTransit)
2017 return; 2026 return;
2018 2027
2019 if (ParentGroup.IsAttachment) 2028 if (ParentGroup.IsAttachment)
@@ -2040,7 +2049,7 @@ namespace OpenSim.Region.Framework.Scenes
2040 // SetAngularVelocity for LSL llSetAngularVelocity.. may need revision if having other uses in future 2049 // SetAngularVelocity for LSL llSetAngularVelocity.. may need revision if having other uses in future
2041 public void SetAngularVelocity(Vector3 pAngVel, bool localGlobalTF) 2050 public void SetAngularVelocity(Vector3 pAngVel, bool localGlobalTF)
2042 { 2051 {
2043 if (ParentGroup == null || ParentGroup.IsDeleted) 2052 if (ParentGroup == null || ParentGroup.IsDeleted || ParentGroup.inTransit)
2044 return; 2053 return;
2045 2054
2046 if (ParentGroup.IsAttachment) 2055 if (ParentGroup.IsAttachment)
@@ -2074,6 +2083,9 @@ namespace OpenSim.Region.Framework.Scenes
2074 /// <param name="localGlobalTF">true for the local frame, false for the global frame</param> 2083 /// <param name="localGlobalTF">true for the local frame, false for the global frame</param>
2075 public void ApplyAngularImpulse(Vector3 impulsei, bool localGlobalTF) 2084 public void ApplyAngularImpulse(Vector3 impulsei, bool localGlobalTF)
2076 { 2085 {
2086 if (ParentGroup == null || ParentGroup.IsDeleted || ParentGroup.inTransit)
2087 return;
2088
2077 Vector3 impulse = impulsei; 2089 Vector3 impulse = impulsei;
2078 2090
2079 if (localGlobalTF) 2091 if (localGlobalTF)
@@ -2228,7 +2240,11 @@ namespace OpenSim.Region.Framework.Scenes
2228 dupe.LocalId = plocalID; 2240 dupe.LocalId = plocalID;
2229 2241
2230 // This may be wrong... it might have to be applied in SceneObjectGroup to the object that's being duplicated. 2242 // This may be wrong... it might have to be applied in SceneObjectGroup to the object that's being duplicated.
2231 dupe.LastOwnerID = OwnerID; 2243 if(OwnerID != GroupID)
2244 dupe.LastOwnerID = OwnerID;
2245 else
2246 dupe.LastOwnerID = LastOwnerID; // redundant ?
2247
2232 dupe.RezzerID = RezzerID; 2248 dupe.RezzerID = RezzerID;
2233 2249
2234 byte[] extraP = new byte[Shape.ExtraParams.Length]; 2250 byte[] extraP = new byte[Shape.ExtraParams.Length];
@@ -2537,6 +2553,35 @@ namespace OpenSim.Region.Framework.Scenes
2537 return (uint)Flags | (uint)LocalFlags; 2553 return (uint)Flags | (uint)LocalFlags;
2538 } 2554 }
2539 2555
2556 // some of this lines need be moved to other place later
2557
2558 // effective permitions considering only this part inventory contents perms
2559 public uint AggregatedInnerOwnerPerms {get; private set; }
2560 public uint AggregatedInnerGroupPerms {get; private set; }
2561 public uint AggregatedInnerEveryonePerms {get; private set; }
2562 private object InnerPermsLock = new object();
2563
2564 public void AggregateInnerPerms()
2565 {
2566 // assuming child prims permissions masks are irrelevant on a linkset
2567 // root part is handle at SOG since its masks are the sog masks
2568 const uint mask = (uint)PermissionMask.AllEffective;
2569
2570 uint owner = mask;
2571 uint group = mask;
2572 uint everyone = mask;
2573
2574 lock(InnerPermsLock) // do we really need this?
2575 {
2576 if(Inventory != null)
2577 Inventory.AggregateInnerPerms(ref owner, ref group, ref everyone);
2578
2579 AggregatedInnerOwnerPerms = owner & mask;
2580 AggregatedInnerGroupPerms = group & mask;
2581 AggregatedInnerEveryonePerms = everyone & mask;
2582 }
2583 }
2584
2540 public Vector3 GetGeometricCenter() 2585 public Vector3 GetGeometricCenter()
2541 { 2586 {
2542 // this is not real geometric center but a average of positions relative to root prim acording to 2587 // this is not real geometric center but a average of positions relative to root prim acording to
@@ -3340,25 +3385,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3340 /// <param name="remoteClient"></param> 3385 /// <param name="remoteClient"></param>
3341 public void SendFullUpdateToClient(IClientAPI remoteClient) 3386 public void SendFullUpdateToClient(IClientAPI remoteClient)
3342 { 3387 {
3343 SendFullUpdateToClient(remoteClient, OffsetPosition); 3388 if (ParentGroup == null || ParentGroup.IsDeleted)
3344 }
3345
3346 /// <summary>
3347 /// Sends a full update to the client
3348 /// </summary>
3349 /// <param name="remoteClient"></param>
3350 /// <param name="lPos"></param>
3351 public void SendFullUpdateToClient(IClientAPI remoteClient, Vector3 lPos)
3352 {
3353 if (ParentGroup == null)
3354 return;
3355
3356 // Suppress full updates during attachment editing
3357 // sl Does send them
3358 // if (ParentGroup.IsSelected && ParentGroup.IsAttachment)
3359 // return;
3360
3361 if (ParentGroup.IsDeleted)
3362 return; 3389 return;
3363 3390
3364 if (ParentGroup.IsAttachment 3391 if (ParentGroup.IsAttachment
@@ -3516,6 +3543,18 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3516 Force = force; 3543 Force = force;
3517 } 3544 }
3518 3545
3546 public PhysicsInertiaData PhysicsInertia
3547 {
3548 get
3549 {
3550 return m_physicsInertia;
3551 }
3552 set
3553 {
3554 m_physicsInertia = value;
3555 }
3556 }
3557
3519 public SOPVehicle VehicleParams 3558 public SOPVehicle VehicleParams
3520 { 3559 {
3521 get 3560 get
@@ -3689,7 +3728,18 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3689 bool hasDimple; 3728 bool hasDimple;
3690 bool hasProfileCut; 3729 bool hasProfileCut;
3691 3730
3692 PrimType primType = GetPrimType(); 3731 if(Shape.SculptEntry)
3732 {
3733 if (Shape.SculptType != (byte)SculptType.Mesh)
3734 return 1; // sculp
3735
3736 //hack to detect new upload with faces data enconded on pbs
3737 if ((Shape.ProfileCurve & 0xf0) != (byte)HollowShape.Triangle)
3738 // old broken upload TODO
3739 return 8;
3740 }
3741
3742 PrimType primType = GetPrimType(true);
3693 HasCutHollowDimpleProfileCut(primType, Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut); 3743 HasCutHollowDimpleProfileCut(primType, Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut);
3694 3744
3695 switch (primType) 3745 switch (primType)
@@ -3733,13 +3783,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3733 if (hasProfileCut) ret += 2; 3783 if (hasProfileCut) ret += 2;
3734 if (hasHollow) ret += 1; 3784 if (hasHollow) ret += 1;
3735 break; 3785 break;
3736 case PrimType.SCULPT:
3737 // Special mesh handling
3738 if (Shape.SculptType == (byte)SculptType.Mesh)
3739 ret = 8; // if it's a mesh then max 8 faces
3740 else
3741 ret = 1; // if it's a sculpt then max 1 face
3742 break;
3743 } 3786 }
3744 3787
3745 return ret; 3788 return ret;
@@ -3750,9 +3793,9 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
3750 /// </summary> 3793 /// </summary>
3751 /// <param name="primShape"></param> 3794 /// <param name="primShape"></param>
3752 /// <returns></returns> 3795 /// <returns></returns>
3753 public PrimType GetPrimType() 3796 public PrimType GetPrimType(bool ignoreSculpt = false)
3754 { 3797 {
3755 if (Shape.SculptEntry) 3798 if (Shape.SculptEntry && !ignoreSculpt)
3756 return PrimType.SCULPT; 3799 return PrimType.SCULPT;
3757 3800
3758 if ((Shape.ProfileCurve & 0x07) == (byte)ProfileShape.Square) 3801 if ((Shape.ProfileCurve & 0x07) == (byte)ProfileShape.Square)
@@ -4464,7 +4507,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4464 4507
4465 break; 4508 break;
4466 } 4509 }
4467 4510 AggregateInnerPerms();
4468 SendFullUpdateToAllClients(); 4511 SendFullUpdateToAllClients();
4469 } 4512 }
4470 } 4513 }
@@ -4481,6 +4524,8 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4481 EveryoneMask = source.EveryoneMask & BaseMask; 4524 EveryoneMask = source.EveryoneMask & BaseMask;
4482 NextOwnerMask = source.NextOwnerMask & BaseMask; 4525 NextOwnerMask = source.NextOwnerMask & BaseMask;
4483 4526
4527 AggregateInnerPerms();
4528
4484 if (OwnerMask != prevOwnerMask || 4529 if (OwnerMask != prevOwnerMask ||
4485 GroupMask != prevGroupMask || 4530 GroupMask != prevGroupMask ||
4486 EveryoneMask != prevEveryoneMask || 4531 EveryoneMask != prevEveryoneMask ||
@@ -4714,8 +4759,13 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4714 4759
4715 if (VolumeDetectActive) // change if not the default only 4760 if (VolumeDetectActive) // change if not the default only
4716 pa.SetVolumeDetect(1); 4761 pa.SetVolumeDetect(1);
4762
4763 bool isroot = (m_localId == ParentGroup.RootPart.LocalId);
4717 4764
4718 if (m_vehicleParams != null && m_localId == ParentGroup.RootPart.LocalId) 4765 if(isroot && m_physicsInertia != null)
4766 pa.SetInertiaData(m_physicsInertia);
4767
4768 if (isroot && m_vehicleParams != null )
4719 { 4769 {
4720 m_vehicleParams.SetVehicle(pa); 4770 m_vehicleParams.SetVehicle(pa);
4721 if(isPhysical && !isPhantom && m_vehicleParams.CameraDecoupled) 4771 if(isPhysical && !isPhantom && m_vehicleParams.CameraDecoupled)
@@ -5181,7 +5231,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5181 /// <param name="scene">The scene the prim is being rezzed into</param> 5231 /// <param name="scene">The scene the prim is being rezzed into</param>
5182 public void ApplyPermissionsOnRez(InventoryItemBase item, bool userInventory, Scene scene) 5232 public void ApplyPermissionsOnRez(InventoryItemBase item, bool userInventory, Scene scene)
5183 { 5233 {
5184 if ((OwnerID != item.Owner) || ((item.CurrentPermissions & SceneObjectGroup.SLAM) != 0) || ((item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0)) 5234 if ((OwnerID != item.Owner) || ((item.CurrentPermissions & (uint)PermissionMask.Slam) != 0) || ((item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0))
5185 { 5235 {
5186 if (scene.Permissions.PropagatePermissions()) 5236 if (scene.Permissions.PropagatePermissions())
5187 { 5237 {
@@ -5212,16 +5262,13 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5212 5262
5213 if (OwnerID != item.Owner) 5263 if (OwnerID != item.Owner)
5214 { 5264 {
5215 //LogPermissions("Before ApplyNextOwnerPermissions"); 5265 if(OwnerID != GroupID)
5266 LastOwnerID = OwnerID;
5267 OwnerID = item.Owner;
5268 Inventory.ChangeInventoryOwner(item.Owner);
5216 5269
5217 if (scene.Permissions.PropagatePermissions()) 5270 if (scene.Permissions.PropagatePermissions())
5218 ApplyNextOwnerPermissions(); 5271 ApplyNextOwnerPermissions();
5219
5220 //LogPermissions("After ApplyNextOwnerPermissions");
5221
5222 LastOwnerID = OwnerID;
5223 OwnerID = item.Owner;
5224 Inventory.ChangeInventoryOwner(item.Owner);
5225 } 5272 }
5226 } 5273 }
5227 5274
@@ -5245,6 +5292,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5245 GroupMask = 0; // Giving an object zaps group permissions 5292 GroupMask = 0; // Giving an object zaps group permissions
5246 5293
5247 Inventory.ApplyNextOwnerPermissions(); 5294 Inventory.ApplyNextOwnerPermissions();
5295 AggregateInnerPerms();
5248 } 5296 }
5249 5297
5250 public void UpdateLookAt() 5298 public void UpdateLookAt()
@@ -5306,6 +5354,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5306 item.OwnerChanged = false; 5354 item.OwnerChanged = false;
5307 Inventory.UpdateInventoryItem(item, false, false); 5355 Inventory.UpdateInventoryItem(item, false, false);
5308 } 5356 }
5357 AggregateInnerPerms();
5309 } 5358 }
5310 5359
5311 /// <summary> 5360 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 6557003..b53c355 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -360,7 +360,7 @@ namespace OpenSim.Region.Framework.Scenes
360// m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}", 360// m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}",
361// item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName); 361// item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName);
362 362
363 if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID)) 363 if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item, m_part))
364 { 364 {
365 StoreScriptError(item.ItemID, "no permission"); 365 StoreScriptError(item.ItemID, "no permission");
366 return false; 366 return false;
@@ -807,6 +807,7 @@ namespace OpenSim.Region.Framework.Scenes
807 else 807 else
808 m_part.TriggerScriptChangedEvent(Changed.INVENTORY); 808 m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
809 809
810 m_part.AggregateInnerPerms();
810 m_inventorySerial++; 811 m_inventorySerial++;
811 //m_inventorySerial += 2; 812 //m_inventorySerial += 2;
812 HasInventoryChanged = true; 813 HasInventoryChanged = true;
@@ -829,7 +830,7 @@ namespace OpenSim.Region.Framework.Scenes
829// m_part.TriggerScriptChangedEvent(Changed.INVENTORY); 830// m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
830 } 831 }
831 m_items.LockItemsForWrite(false); 832 m_items.LockItemsForWrite(false);
832 833 m_part.AggregateInnerPerms();
833 m_inventorySerial++; 834 m_inventorySerial++;
834 } 835 }
835 836
@@ -943,8 +944,7 @@ namespace OpenSim.Region.Framework.Scenes
943 944
944 group.SetGroup(m_part.GroupID, null); 945 group.SetGroup(m_part.GroupID, null);
945 946
946 // TODO: Remove magic number badness 947 if ((rootPart.OwnerID != item.OwnerID) || (item.CurrentPermissions & (uint)PermissionMask.Slam) != 0 || (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0)
947 if ((rootPart.OwnerID != item.OwnerID) || (item.CurrentPermissions & 16) != 0 || (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0) // Magic number
948 { 948 {
949 if (m_part.ParentGroup.Scene.Permissions.PropagatePermissions()) 949 if (m_part.ParentGroup.Scene.Permissions.PropagatePermissions())
950 { 950 {
@@ -964,10 +964,10 @@ namespace OpenSim.Region.Framework.Scenes
964 964
965 foreach (SceneObjectPart part in partList) 965 foreach (SceneObjectPart part in partList)
966 { 966 {
967 // TODO: Remove magic number badness 967 if ((part.OwnerID != item.OwnerID) || (item.CurrentPermissions & (uint)PermissionMask.Slam) != 0 || (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0)
968 if ((part.OwnerID != item.OwnerID) || (item.CurrentPermissions & 16) != 0 || (item.Flags & (uint)InventoryItemFlags.ObjectSlamPerm) != 0) // Magic number
969 { 968 {
970 part.LastOwnerID = part.OwnerID; 969 if(part.GroupID != part.OwnerID)
970 part.LastOwnerID = part.OwnerID;
971 part.OwnerID = item.OwnerID; 971 part.OwnerID = item.OwnerID;
972 part.Inventory.ChangeInventoryOwner(item.OwnerID); 972 part.Inventory.ChangeInventoryOwner(item.OwnerID);
973 } 973 }
@@ -981,6 +981,7 @@ namespace OpenSim.Region.Framework.Scenes
981 } 981 }
982// old code end 982// old code end
983 rootPart.TrimPermissions(); 983 rootPart.TrimPermissions();
984 group.AggregateDeepPerms();
984 } 985 }
985 986
986 return true; 987 return true;
@@ -1022,16 +1023,20 @@ namespace OpenSim.Region.Framework.Scenes
1022 item.AssetID = m_items[item.ItemID].AssetID; 1023 item.AssetID = m_items[item.ItemID].AssetID;
1023 1024
1024 m_items[item.ItemID] = item; 1025 m_items[item.ItemID] = item;
1026
1025 m_inventorySerial++; 1027 m_inventorySerial++;
1026 if (fireScriptEvents) 1028 if (fireScriptEvents)
1027 m_part.TriggerScriptChangedEvent(Changed.INVENTORY); 1029 m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
1028 1030
1029 if (considerChanged) 1031 if (considerChanged)
1030 { 1032 {
1033 m_part.AggregateInnerPerms();
1034 m_part.ParentGroup.AggregatePerms();
1031 HasInventoryChanged = true; 1035 HasInventoryChanged = true;
1032 m_part.ParentGroup.HasGroupChanged = true; 1036 m_part.ParentGroup.HasGroupChanged = true;
1033 } 1037 }
1034 m_items.LockItemsForWrite(false); 1038 m_items.LockItemsForWrite(false);
1039
1035 return true; 1040 return true;
1036 } 1041 }
1037 else 1042 else
@@ -1068,6 +1073,10 @@ namespace OpenSim.Region.Framework.Scenes
1068 m_items.LockItemsForWrite(true); 1073 m_items.LockItemsForWrite(true);
1069 m_items.Remove(itemID); 1074 m_items.Remove(itemID);
1070 m_items.LockItemsForWrite(false); 1075 m_items.LockItemsForWrite(false);
1076
1077 m_part.AggregateInnerPerms();
1078 m_part.ParentGroup.AggregatePerms();
1079
1071 m_inventorySerial++; 1080 m_inventorySerial++;
1072 m_part.TriggerScriptChangedEvent(Changed.INVENTORY); 1081 m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
1073 1082
@@ -1170,7 +1179,7 @@ namespace OpenSim.Region.Framework.Scenes
1170 foreach (TaskInventoryItem item in m_items.Values) 1179 foreach (TaskInventoryItem item in m_items.Values)
1171 { 1180 {
1172 UUID ownerID = item.OwnerID; 1181 UUID ownerID = item.OwnerID;
1173 uint everyoneMask = 0; 1182 uint everyoneMask = item.EveryonePermissions;
1174 uint baseMask = item.BasePermissions; 1183 uint baseMask = item.BasePermissions;
1175 uint ownerMask = item.CurrentPermissions; 1184 uint ownerMask = item.CurrentPermissions;
1176 uint groupMask = item.GroupPermissions; 1185 uint groupMask = item.GroupPermissions;
@@ -1319,6 +1328,16 @@ namespace OpenSim.Region.Framework.Scenes
1319 } 1328 }
1320 } 1329 }
1321 1330
1331 public void AggregateInnerPerms(ref uint owner, ref uint group, ref uint everyone)
1332 {
1333 foreach (TaskInventoryItem item in m_items.Values)
1334 {
1335 owner &= item.CurrentPermissions;
1336 group &= item.GroupPermissions;
1337 everyone &= item.EveryonePermissions;
1338 }
1339 }
1340
1322 public uint MaskEffectivePermissions() 1341 public uint MaskEffectivePermissions()
1323 { 1342 {
1324 uint mask=0x7fffffff; 1343 uint mask=0x7fffffff;
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 9545c13..6d4cb52 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1778,6 +1778,20 @@ namespace OpenSim.Region.Framework.Scenes
1778 1778
1779 private Dictionary<ulong, spRegionSizeInfo> m_knownChildRegionsSizeInfo = new Dictionary<ulong, spRegionSizeInfo>(); 1779 private Dictionary<ulong, spRegionSizeInfo> m_knownChildRegionsSizeInfo = new Dictionary<ulong, spRegionSizeInfo>();
1780 1780
1781 public void AddNeighbourRegion(GridRegion region, string capsPath)
1782 {
1783 lock (m_knownChildRegions)
1784 {
1785 ulong regionHandle = region.RegionHandle;
1786 m_knownChildRegions.Add(regionHandle,capsPath);
1787
1788 spRegionSizeInfo sizeInfo = new spRegionSizeInfo();
1789 sizeInfo.sizeX = region.RegionSizeX;
1790 sizeInfo.sizeY = region.RegionSizeY;
1791 m_knownChildRegionsSizeInfo[regionHandle] = sizeInfo;
1792 }
1793 }
1794
1781 public void AddNeighbourRegionSizeInfo(GridRegion region) 1795 public void AddNeighbourRegionSizeInfo(GridRegion region)
1782 { 1796 {
1783 lock (m_knownChildRegions) 1797 lock (m_knownChildRegions)
@@ -1826,6 +1840,12 @@ namespace OpenSim.Region.Framework.Scenes
1826 } 1840 }
1827 } 1841 }
1828 1842
1843 public bool knowsNeighbourRegion(ulong regionHandle)
1844 {
1845 lock (m_knownChildRegions)
1846 return m_knownChildRegions.ContainsKey(regionHandle);
1847 }
1848
1829 public void DropOldNeighbours(List<ulong> oldRegions) 1849 public void DropOldNeighbours(List<ulong> oldRegions)
1830 { 1850 {
1831 foreach (ulong handle in oldRegions) 1851 foreach (ulong handle in oldRegions)
@@ -2010,6 +2030,7 @@ namespace OpenSim.Region.Framework.Scenes
2010 return; 2030 return;
2011 } 2031 }
2012 2032
2033
2013 m_log.DebugFormat("[CompleteMovement] MakeRootAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); 2034 m_log.DebugFormat("[CompleteMovement] MakeRootAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2014 2035
2015 if(!haveGroupInformation && !IsChildAgent && !IsNPC) 2036 if(!haveGroupInformation && !IsChildAgent && !IsNPC)
@@ -2029,11 +2050,6 @@ namespace OpenSim.Region.Framework.Scenes
2029 m_log.DebugFormat("[CompleteMovement]: Missing COF for {0} is {1}", client.AgentId, COF); 2050 m_log.DebugFormat("[CompleteMovement]: Missing COF for {0} is {1}", client.AgentId, COF);
2030 } 2051 }
2031 2052
2032 // Tell the client that we're totally ready
2033 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
2034
2035 m_log.DebugFormat("[CompleteMovement] MoveAgentIntoRegion: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2036
2037 if (!string.IsNullOrEmpty(m_callbackURI)) 2053 if (!string.IsNullOrEmpty(m_callbackURI))
2038 { 2054 {
2039 // We cannot sleep here since this would hold up the inbound packet processing thread, as 2055 // We cannot sleep here since this would hold up the inbound packet processing thread, as
@@ -2054,6 +2070,7 @@ namespace OpenSim.Region.Framework.Scenes
2054 2070
2055 Scene.SimulationService.ReleaseAgent(originID, UUID, m_callbackURI); 2071 Scene.SimulationService.ReleaseAgent(originID, UUID, m_callbackURI);
2056 m_callbackURI = null; 2072 m_callbackURI = null;
2073 m_log.DebugFormat("[CompleteMovement] ReleaseAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2057 } 2074 }
2058// else 2075// else
2059// { 2076// {
@@ -2062,19 +2079,58 @@ namespace OpenSim.Region.Framework.Scenes
2062// client.Name, client.AgentId, m_scene.RegionInfo.RegionName); 2079// client.Name, client.AgentId, m_scene.RegionInfo.RegionName);
2063// } 2080// }
2064 2081
2065 m_log.DebugFormat("[CompleteMovement] ReleaseAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); 2082
2083 // Tell the client that we're totally ready
2084 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
2085 m_log.DebugFormat("[CompleteMovement] MoveAgentIntoRegion: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2086
2087 bool isHGTP = (m_teleportFlags & TeleportFlags.ViaHGLogin) != 0;
2088
2089 int delayctnr = Util.EnvironmentTickCount();
2090
2091 if (!IsChildAgent)
2092 {
2093 if( ParentPart != null && !IsNPC && (crossingFlags & 0x08) != 0)
2094 {
2095
2096// SceneObjectPart root = ParentPart.ParentGroup.RootPart;
2097// if(root.LocalId != ParentPart.LocalId)
2098// ControllingClient.SendEntityTerseUpdateImmediate(root);
2099// ControllingClient.SendEntityTerseUpdateImmediate(ParentPart);
2100 ParentPart.ParentGroup.SendFullUpdateToClient(ControllingClient);
2101 }
2102
2103 // verify baked textures and cache
2104 bool cachedbaked = false;
2105
2106 if (IsNPC)
2107 cachedbaked = true;
2108 else
2109 {
2110 if (m_scene.AvatarFactory != null && !isHGTP)
2111 cachedbaked = m_scene.AvatarFactory.ValidateBakedTextureCache(this);
2112
2113 // not sure we need this
2114 if (!cachedbaked)
2115 {
2116 if (m_scene.AvatarFactory != null)
2117 m_scene.AvatarFactory.QueueAppearanceSave(UUID);
2118 }
2119 }
2120 m_log.DebugFormat("[CompleteMovement] Baked check: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2121 }
2066 2122
2067 if(m_teleportFlags > 0) 2123 if(m_teleportFlags > 0)
2068 { 2124 {
2069 gotCrossUpdate = false; // sanity check 2125 gotCrossUpdate = false; // sanity check
2070 Thread.Sleep(500); // let viewers catch us 2126 if(Util.EnvironmentTickCountSubtract(delayctnr)< 500)
2127 Thread.Sleep(500); // let viewers catch us
2071 } 2128 }
2072 2129
2073 if(!gotCrossUpdate) 2130 if(!gotCrossUpdate)
2074 RotateToLookAt(look); 2131 RotateToLookAt(look);
2075 2132
2076 // HG 2133 // HG
2077 bool isHGTP = (m_teleportFlags & TeleportFlags.ViaHGLogin) != 0;
2078 if(isHGTP) 2134 if(isHGTP)
2079 { 2135 {
2080// ControllingClient.SendNameReply(m_uuid, Firstname, Lastname); 2136// ControllingClient.SendNameReply(m_uuid, Firstname, Lastname);
@@ -2101,28 +2157,11 @@ namespace OpenSim.Region.Framework.Scenes
2101 2157
2102 if (!IsChildAgent) 2158 if (!IsChildAgent)
2103 { 2159 {
2104 // verify baked textures and cache
2105 bool cachedbaked = false;
2106
2107 if (IsNPC)
2108 cachedbaked = true;
2109 else
2110 {
2111 if (m_scene.AvatarFactory != null && !isHGTP)
2112 cachedbaked = m_scene.AvatarFactory.ValidateBakedTextureCache(this);
2113
2114 // not sure we need this
2115 if (!cachedbaked)
2116 {
2117 if (m_scene.AvatarFactory != null)
2118 m_scene.AvatarFactory.QueueAppearanceSave(UUID);
2119 }
2120 }
2121
2122 List<ScenePresence> allpresences = m_scene.GetScenePresences(); 2160 List<ScenePresence> allpresences = m_scene.GetScenePresences();
2123 2161
2124 // send avatar object to all presences including us, so they cross it into region 2162 // send avatar object to all presences including us, so they cross it into region
2125 // then hide if necessary 2163 // then hide if necessary
2164
2126 SendInitialAvatarDataToAllAgents(allpresences); 2165 SendInitialAvatarDataToAllAgents(allpresences);
2127 2166
2128 // send this look 2167 // send this look
@@ -2230,13 +2269,18 @@ namespace OpenSim.Region.Framework.Scenes
2230 m_lastChildAgentUpdateDrawDistance = DrawDistance; 2269 m_lastChildAgentUpdateDrawDistance = DrawDistance;
2231 m_lastChildAgentUpdatePosition = AbsolutePosition; 2270 m_lastChildAgentUpdatePosition = AbsolutePosition;
2232 m_childUpdatesBusy = false; // allow them 2271 m_childUpdatesBusy = false; // allow them
2272
2273
2233 } 2274 }
2234 2275
2235 m_log.DebugFormat("[CompleteMovement] openChildAgents: {0}ms", Util.EnvironmentTickCountSubtract(ts)); 2276 m_log.DebugFormat("[CompleteMovement] openChildAgents: {0}ms", Util.EnvironmentTickCountSubtract(ts));
2236 2277
2278
2279
2237 // send the rest of the world 2280 // send the rest of the world
2238 if (m_teleportFlags > 0 && !IsNPC || m_currentParcelHide) 2281 if (m_teleportFlags > 0 && !IsNPC || m_currentParcelHide)
2239 SendInitialDataToMe(); 2282 SendInitialDataToMe();
2283
2240 2284
2241 // priority uses avatar position only 2285 // priority uses avatar position only
2242// m_reprioritizationLastPosition = AbsolutePosition; 2286// m_reprioritizationLastPosition = AbsolutePosition;
@@ -3110,6 +3154,7 @@ namespace OpenSim.Region.Framework.Scenes
3110 3154
3111 Vector3 standPos = sitPartWorldPosition + adjustmentForSitPose; 3155 Vector3 standPos = sitPartWorldPosition + adjustmentForSitPose;
3112 m_pos = standPos; 3156 m_pos = standPos;
3157
3113 } 3158 }
3114 3159
3115 // We need to wait until we have calculated proper stand positions before sitting up the physical 3160 // We need to wait until we have calculated proper stand positions before sitting up the physical
@@ -3124,6 +3169,7 @@ namespace OpenSim.Region.Framework.Scenes
3124 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); 3169 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK);
3125 3170
3126 SendAvatarDataToAllAgents(); 3171 SendAvatarDataToAllAgents();
3172 m_scene.EventManager.TriggerParcelPrimCountTainted(); // update select/ sat on
3127 } 3173 }
3128 3174
3129 // reset to default sitAnimation 3175 // reset to default sitAnimation
@@ -3256,6 +3302,7 @@ namespace OpenSim.Region.Framework.Scenes
3256 // Moved here to avoid a race with default sit anim 3302 // Moved here to avoid a race with default sit anim
3257 // The script event needs to be raised after the default sit anim is set. 3303 // The script event needs to be raised after the default sit anim is set.
3258 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); 3304 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK);
3305 m_scene.EventManager.TriggerParcelPrimCountTainted(); // update select/ sat on
3259 } 3306 }
3260 } 3307 }
3261 3308
@@ -3405,6 +3452,7 @@ namespace OpenSim.Region.Framework.Scenes
3405 3452
3406 Animator.SetMovementAnimations("SIT"); 3453 Animator.SetMovementAnimations("SIT");
3407 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); 3454 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK);
3455 m_scene.EventManager.TriggerParcelPrimCountTainted(); // update select/ sat on
3408 } 3456 }
3409 3457
3410 public void HandleAgentSit(IClientAPI remoteClient, UUID agentID) 3458 public void HandleAgentSit(IClientAPI remoteClient, UUID agentID)
@@ -3968,7 +4016,7 @@ namespace OpenSim.Region.Framework.Scenes
3968 int count = 0; 4016 int count = 0;
3969 foreach (ScenePresence p in presences) 4017 foreach (ScenePresence p in presences)
3970 { 4018 {
3971 p.ControllingClient.SendAvatarDataImmediate(this); 4019 p.ControllingClient.SendEntityFullUpdateImmediate(this);
3972 if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && !p.IsViewerUIGod) 4020 if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && !p.IsViewerUIGod)
3973 // either just kill the object 4021 // either just kill the object
3974 // p.ControllingClient.SendKillObject(new List<uint> {LocalId}); 4022 // p.ControllingClient.SendKillObject(new List<uint> {LocalId});
@@ -3981,7 +4029,7 @@ namespace OpenSim.Region.Framework.Scenes
3981 4029
3982 public void SendInitialAvatarDataToAgent(ScenePresence p) 4030 public void SendInitialAvatarDataToAgent(ScenePresence p)
3983 { 4031 {
3984 p.ControllingClient.SendAvatarDataImmediate(this); 4032 p.ControllingClient.SendEntityFullUpdateImmediate(this);
3985 if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && !p.IsViewerUIGod) 4033 if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && !p.IsViewerUIGod)
3986 // either just kill the object 4034 // either just kill the object
3987 // p.ControllingClient.SendKillObject(new List<uint> {LocalId}); 4035 // p.ControllingClient.SendKillObject(new List<uint> {LocalId});
@@ -3998,12 +4046,12 @@ namespace OpenSim.Region.Framework.Scenes
3998 //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); 4046 //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID);
3999 if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && !avatar.IsViewerUIGod) 4047 if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && !avatar.IsViewerUIGod)
4000 return; 4048 return;
4001 avatar.ControllingClient.SendAvatarDataImmediate(this); 4049 avatar.ControllingClient.SendEntityFullUpdateImmediate(this);
4002 } 4050 }
4003 4051
4004 public void SendAvatarDataToAgentNF(ScenePresence avatar) 4052 public void SendAvatarDataToAgentNF(ScenePresence avatar)
4005 { 4053 {
4006 avatar.ControllingClient.SendAvatarDataImmediate(this); 4054 avatar.ControllingClient.SendEntityFullUpdateImmediate(this);
4007 } 4055 }
4008 4056
4009 /// <summary> 4057 /// <summary>
@@ -6440,7 +6488,7 @@ namespace OpenSim.Region.Framework.Scenes
6440 if (check) 6488 if (check)
6441 { 6489 {
6442 // check is relative to current parcel only 6490 // check is relative to current parcel only
6443 if (currentParcelUUID == null || oldhide == currentParcelHide) 6491 if (oldhide == currentParcelHide)
6444 return; 6492 return;
6445 6493
6446 allpresences = m_scene.GetScenePresences(); 6494 allpresences = m_scene.GetScenePresences();
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index b8d210c..87d1ace 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -114,7 +114,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
114 // Script state may, or may not, exist. Not having any, is NOT 114 // Script state may, or may not, exist. Not having any, is NOT
115 // ever a problem. 115 // ever a problem.
116 sceneObject.LoadScriptState(reader); 116 sceneObject.LoadScriptState(reader);
117 117 sceneObject.AggregateDeepPerms();
118 return sceneObject; 118 return sceneObject;
119 } 119 }
120 120
@@ -278,7 +278,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
278 // Script state may, or may not, exist. Not having any, is NOT 278 // Script state may, or may not, exist. Not having any, is NOT
279 // ever a problem. 279 // ever a problem.
280 sceneObject.LoadScriptState(doc); 280 sceneObject.LoadScriptState(doc);
281 281 sceneObject.AggregatePerms();
282 return sceneObject; 282 return sceneObject;
283 } 283 }
284 catch (Exception e) 284 catch (Exception e)
@@ -453,9 +453,10 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
453 m_SOPXmlProcessors.Add("Torque", ProcessTorque); 453 m_SOPXmlProcessors.Add("Torque", ProcessTorque);
454 m_SOPXmlProcessors.Add("VolumeDetectActive", ProcessVolumeDetectActive); 454 m_SOPXmlProcessors.Add("VolumeDetectActive", ProcessVolumeDetectActive);
455 455
456
457 m_SOPXmlProcessors.Add("Vehicle", ProcessVehicle); 456 m_SOPXmlProcessors.Add("Vehicle", ProcessVehicle);
458 457
458 m_SOPXmlProcessors.Add("PhysicsInertia", ProcessPhysicsInertia);
459
459 m_SOPXmlProcessors.Add("RotationAxisLocks", ProcessRotationAxisLocks); 460 m_SOPXmlProcessors.Add("RotationAxisLocks", ProcessRotationAxisLocks);
460 m_SOPXmlProcessors.Add("PhysicsShapeType", ProcessPhysicsShapeType); 461 m_SOPXmlProcessors.Add("PhysicsShapeType", ProcessPhysicsShapeType);
461 m_SOPXmlProcessors.Add("Density", ProcessDensity); 462 m_SOPXmlProcessors.Add("Density", ProcessDensity);
@@ -781,6 +782,23 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
781 } 782 }
782 } 783 }
783 784
785 private static void ProcessPhysicsInertia(SceneObjectPart obj, XmlReader reader)
786 {
787 PhysicsInertiaData pdata = PhysicsInertiaData.FromXml2(reader);
788
789 if (pdata == null)
790 {
791 obj.PhysicsInertia = null;
792 m_log.DebugFormat(
793 "[SceneObjectSerializer]: Parsing PhysicsInertiaData for object part {0} {1} encountered errors. Please see earlier log entries.",
794 obj.Name, obj.UUID);
795 }
796 else
797 {
798 obj.PhysicsInertia = pdata;
799 }
800 }
801
784 private static void ProcessShape(SceneObjectPart obj, XmlReader reader) 802 private static void ProcessShape(SceneObjectPart obj, XmlReader reader)
785 { 803 {
786 List<string> errorNodeNames; 804 List<string> errorNodeNames;
@@ -1498,6 +1516,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1498 if (sop.VehicleParams != null) 1516 if (sop.VehicleParams != null)
1499 sop.VehicleParams.ToXml2(writer); 1517 sop.VehicleParams.ToXml2(writer);
1500 1518
1519 if (sop.PhysicsInertia != null)
1520 sop.PhysicsInertia.ToXml2(writer);
1521
1501 if(sop.RotationAxisLocks != 0) 1522 if(sop.RotationAxisLocks != 0)
1502 writer.WriteElementString("RotationAxisLocks", sop.RotationAxisLocks.ToString().ToLower()); 1523 writer.WriteElementString("RotationAxisLocks", sop.RotationAxisLocks.ToString().ToLower());
1503 writer.WriteElementString("PhysicsShapeType", sop.PhysicsShapeType.ToString().ToLower()); 1524 writer.WriteElementString("PhysicsShapeType", sop.PhysicsShapeType.ToString().ToLower());
@@ -1739,6 +1760,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1739 1760
1740 reader.ReadEndElement(); // SceneObjectPart 1761 reader.ReadEndElement(); // SceneObjectPart
1741 1762
1763 obj.AggregateInnerPerms();
1742 // m_log.DebugFormat("[SceneObjectSerializer]: parsed SOP {0} {1}", obj.Name, obj.UUID); 1764 // m_log.DebugFormat("[SceneObjectSerializer]: parsed SOP {0} {1}", obj.Name, obj.UUID);
1743 return obj; 1765 return obj;
1744 } 1766 }
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
index 01bc491..0f022dd 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
@@ -70,6 +70,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
70 //obj.RegenerateFullIDs(); 70 //obj.RegenerateFullIDs();
71 71
72 scene.AddNewSceneObject(obj, true); 72 scene.AddNewSceneObject(obj, true);
73 obj.AggregateDeepPerms();
73 } 74 }
74 } 75 }
75 else 76 else
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs
index 56723bf..4d2eb3f 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs
@@ -67,7 +67,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
67 67
68 SceneObjectGroup dupeSo 68 SceneObjectGroup dupeSo
69 = scene.SceneGraph.DuplicateObject( 69 = scene.SceneGraph.DuplicateObject(
70 part1.LocalId, new Vector3(10, 0, 0), 0, ownerId, UUID.Zero, Quaternion.Identity); 70 part1.LocalId, new Vector3(10, 0, 0), ownerId, UUID.Zero, Quaternion.Identity, false);
71 Assert.That(dupeSo.Parts.Length, Is.EqualTo(2)); 71 Assert.That(dupeSo.Parts.Length, Is.EqualTo(2));
72 72
73 SceneObjectPart dupePart1 = dupeSo.GetLinkNumPart(1); 73 SceneObjectPart dupePart1 = dupeSo.GetLinkNumPart(1);
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCrossingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCrossingTests.cs
index e1e973c..abf8c48 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCrossingTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCrossingTests.cs
@@ -157,29 +157,28 @@ namespace OpenSim.Region.Framework.Scenes.Tests
157 157
158 // Cross 158 // Cross
159 sceneA.SceneGraph.UpdatePrimGroupPosition( 159 sceneA.SceneGraph.UpdatePrimGroupPosition(
160 so1.LocalId, new Vector3(so1StartPos.X, so1StartPos.Y - 20, so1StartPos.Z), userId); 160 so1.LocalId, new Vector3(so1StartPos.X, so1StartPos.Y - 20, so1StartPos.Z), sp1SceneA.ControllingClient);
161 161
162 // crossing is async 162 // crossing is async
163 Thread.Sleep(500); 163 Thread.Sleep(500);
164 164
165 SceneObjectGroup so1PostCross; 165 SceneObjectGroup so1PostCross;
166 166
167 { 167 ScenePresence sp1SceneAPostCross = sceneA.GetScenePresence(userId);
168 ScenePresence sp1SceneAPostCross = sceneA.GetScenePresence(userId); 168 Assert.IsTrue(sp1SceneAPostCross.IsChildAgent, "sp1SceneAPostCross.IsChildAgent unexpectedly false");
169 Assert.IsTrue(sp1SceneAPostCross.IsChildAgent, "sp1SceneAPostCross.IsChildAgent unexpectedly false");
170 169
171 ScenePresence sp1SceneBPostCross = sceneB.GetScenePresence(userId); 170 ScenePresence sp1SceneBPostCross = sceneB.GetScenePresence(userId);
172 TestClient sceneBTc = ((TestClient)sp1SceneBPostCross.ControllingClient); 171 TestClient sceneBTc = ((TestClient)sp1SceneBPostCross.ControllingClient);
173 sceneBTc.CompleteMovement(); 172 sceneBTc.CompleteMovement();
174 173
175 Assert.IsFalse(sp1SceneBPostCross.IsChildAgent, "sp1SceneAPostCross.IsChildAgent unexpectedly true"); 174 Assert.IsFalse(sp1SceneBPostCross.IsChildAgent, "sp1SceneAPostCross.IsChildAgent unexpectedly true");
176 Assert.IsTrue(sp1SceneBPostCross.IsSatOnObject); 175 Assert.IsTrue(sp1SceneBPostCross.IsSatOnObject);
176
177 Assert.IsNull(sceneA.GetSceneObjectGroup(so1Id), "uck");
178 so1PostCross = sceneB.GetSceneObjectGroup(so1Id);
179 Assert.NotNull(so1PostCross);
180 Assert.AreEqual(1, so1PostCross.GetSittingAvatarsCount());
177 181
178 Assert.IsNull(sceneA.GetSceneObjectGroup(so1Id), "uck");
179 so1PostCross = sceneB.GetSceneObjectGroup(so1Id);
180 Assert.NotNull(so1PostCross);
181 Assert.AreEqual(1, so1PostCross.GetSittingAvatarsCount());
182 }
183 182
184 Vector3 so1PostCrossPos = so1PostCross.AbsolutePosition; 183 Vector3 so1PostCrossPos = so1PostCross.AbsolutePosition;
185 184
@@ -187,7 +186,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
187 186
188 // Recross 187 // Recross
189 sceneB.SceneGraph.UpdatePrimGroupPosition( 188 sceneB.SceneGraph.UpdatePrimGroupPosition(
190 so1PostCross.LocalId, new Vector3(so1PostCrossPos.X, so1PostCrossPos.Y + 20, so1PostCrossPos.Z), userId); 189 so1PostCross.LocalId, new Vector3(so1PostCrossPos.X, so1PostCrossPos.Y + 20, so1PostCrossPos.Z), sp1SceneBPostCross.ControllingClient);
191 190
192 // crossing is async 191 // crossing is async
193 Thread.Sleep(500); 192 Thread.Sleep(500);
@@ -255,13 +254,19 @@ namespace OpenSim.Region.Framework.Scenes.Tests
255 lmmA.EventManagerOnNoLandDataFromStorage(); 254 lmmA.EventManagerOnNoLandDataFromStorage();
256 lmmB.EventManagerOnNoLandDataFromStorage(); 255 lmmB.EventManagerOnNoLandDataFromStorage();
257 256
257 AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId);
258 TestClient tc = new TestClient(acd, sceneA);
259 List<TestClient> destinationTestClients = new List<TestClient>();
260 EntityTransferHelpers.SetupInformClientOfNeighbourTriggersNeighbourClientCreate(tc, destinationTestClients);
261 ScenePresence sp1SceneA = SceneHelpers.AddScenePresence(sceneA, tc, acd);
262
258 SceneObjectGroup so1 = SceneHelpers.AddSceneObject(sceneA, 1, userId, "", sceneObjectIdTail); 263 SceneObjectGroup so1 = SceneHelpers.AddSceneObject(sceneA, 1, userId, "", sceneObjectIdTail);
259 UUID so1Id = so1.UUID; 264 UUID so1Id = so1.UUID;
260 so1.AbsolutePosition = new Vector3(128, 10, 20); 265 so1.AbsolutePosition = new Vector3(128, 10, 20);
261 266
262 // Cross with a negative value. We must make this call rather than setting AbsolutePosition directly 267 // Cross with a negative value. We must make this call rather than setting AbsolutePosition directly
263 // because only this will execute permission checks in the source region. 268 // because only this will execute permission checks in the source region.
264 sceneA.SceneGraph.UpdatePrimGroupPosition(so1.LocalId, new Vector3(128, -10, 20), userId); 269 sceneA.SceneGraph.UpdatePrimGroupPosition(so1.LocalId, new Vector3(128, -10, 20), sp1SceneA.ControllingClient);
265 270
266 // crossing is async 271 // crossing is async
267 Thread.Sleep(500); 272 Thread.Sleep(500);
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index 83b534b..d39c224 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1097,7 +1097,12 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
1097 1097
1098 } 1098 }
1099 1099
1100 public void SendAvatarDataImmediate(ISceneEntity avatar) 1100 public void SendEntityFullUpdateImmediate(ISceneEntity ent)
1101 {
1102
1103 }
1104
1105 public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
1101 { 1106 {
1102 1107
1103 } 1108 }
diff --git a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs
index ed27385..92b5831 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs
@@ -134,11 +134,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
134 private int llAttachToAvatarTemp(UUID host, UUID script, int attachmentPoint) 134 private int llAttachToAvatarTemp(UUID host, UUID script, int attachmentPoint)
135 { 135 {
136 SceneObjectPart hostPart = m_scene.GetSceneObjectPart(host); 136 SceneObjectPart hostPart = m_scene.GetSceneObjectPart(host);
137
138 if (hostPart == null) 137 if (hostPart == null)
139 return 0; 138 return 0;
140 139
141 if (hostPart.ParentGroup.IsAttachment) 140 SceneObjectGroup hostgroup = hostPart.ParentGroup;
141
142 if (hostgroup== null || hostgroup.IsAttachment)
142 return 0; 143 return 0;
143 144
144 IAttachmentsModule attachmentsModule = m_scene.RequestModuleInterface<IAttachmentsModule>(); 145 IAttachmentsModule attachmentsModule = m_scene.RequestModuleInterface<IAttachmentsModule>();
@@ -156,32 +157,32 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
156 if (!m_scene.TryGetScenePresence(item.PermsGranter, out target)) 157 if (!m_scene.TryGetScenePresence(item.PermsGranter, out target))
157 return 0; 158 return 0;
158 159
159 if (target.UUID != hostPart.ParentGroup.OwnerID) 160 if (target.UUID != hostgroup.OwnerID)
160 { 161 {
161 uint effectivePerms = hostPart.ParentGroup.GetEffectivePermissions(); 162 uint effectivePerms = hostgroup.EffectiveOwnerPerms;
162 163
163 if ((effectivePerms & (uint)PermissionMask.Transfer) == 0) 164 if ((effectivePerms & (uint)PermissionMask.Transfer) == 0)
164 return 0; 165 return 0;
165 166
166 hostPart.ParentGroup.SetOwnerId(target.UUID); 167 hostgroup.SetOwner(target.UUID, target.ControllingClient.ActiveGroupId);
167 hostPart.ParentGroup.SetRootPartOwner(hostPart.ParentGroup.RootPart, target.UUID, target.ControllingClient.ActiveGroupId);
168 168
169 if (m_scene.Permissions.PropagatePermissions()) 169 if (m_scene.Permissions.PropagatePermissions())
170 { 170 {
171 foreach (SceneObjectPart child in hostPart.ParentGroup.Parts) 171 foreach (SceneObjectPart child in hostgroup.Parts)
172 { 172 {
173 child.Inventory.ChangeInventoryOwner(target.UUID); 173 child.Inventory.ChangeInventoryOwner(target.UUID);
174 child.TriggerScriptChangedEvent(Changed.OWNER); 174 child.TriggerScriptChangedEvent(Changed.OWNER);
175 child.ApplyNextOwnerPermissions(); 175 child.ApplyNextOwnerPermissions();
176 } 176 }
177 hostgroup.AggregatePerms();
177 } 178 }
178 179
179 hostPart.ParentGroup.RootPart.ObjectSaleType = 0; 180 hostgroup.RootPart.ObjectSaleType = 0;
180 hostPart.ParentGroup.RootPart.SalePrice = 10; 181 hostgroup.RootPart.SalePrice = 10;
181 182
182 hostPart.ParentGroup.HasGroupChanged = true; 183 hostgroup.HasGroupChanged = true;
183 hostPart.ParentGroup.RootPart.SendPropertiesToClient(target.ControllingClient); 184 hostgroup.RootPart.SendPropertiesToClient(target.ControllingClient);
184 hostPart.ParentGroup.RootPart.ScheduleFullUpdate(); 185 hostgroup.RootPart.ScheduleFullUpdate();
185 } 186 }
186 187
187 return attachmentsModule.AttachObject(target, hostPart.ParentGroup, (uint)attachmentPoint, false, false, true) ? 1 : 0; 188 return attachmentsModule.AttachObject(target, hostPart.ParentGroup, (uint)attachmentPoint, false, false, true) ? 1 : 0;
diff --git a/OpenSim/Region/OptionalModules/Framework/Monitoring/EtcdMonitoringModule.cs b/OpenSim/Region/OptionalModules/Framework/Monitoring/EtcdMonitoringModule.cs
new file mode 100644
index 0000000..921bbfb
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Framework/Monitoring/EtcdMonitoringModule.cs
@@ -0,0 +1,195 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using System.Text;
32using log4net;
33using Mono.Addins;
34using Nini.Config;
35using OpenMetaverse;
36using OpenSim.Framework;
37using OpenSim.Framework.Console;
38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes;
40using netcd;
41using netcd.Serialization;
42using netcd.Advanced;
43using netcd.Advanced.Requests;
44
45namespace OpenSim.Region.OptionalModules.Framework.Monitoring
46{
47 /// <summary>
48 /// Allows to store monitoring data in etcd, a high availability
49 /// name-value store.
50 /// </summary>
51 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "EtcdMonitoringModule")]
52 public class EtcdMonitoringModule : INonSharedRegionModule, IEtcdModule
53 {
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55
56 protected Scene m_scene;
57 protected IEtcdClient m_client;
58 protected bool m_enabled = false;
59 protected string m_etcdBasePath = String.Empty;
60 protected bool m_appendRegionID = true;
61
62 public string Name
63 {
64 get { return "EtcdMonitoringModule"; }
65 }
66
67 public Type ReplaceableInterface
68 {
69 get { return null; }
70 }
71
72 public void Initialise(IConfigSource source)
73 {
74 if (source.Configs["Etcd"] == null)
75 return;
76
77 IConfig etcdConfig = source.Configs["Etcd"];
78
79 string etcdUrls = etcdConfig.GetString("EtcdUrls", String.Empty);
80 if (etcdUrls == String.Empty)
81 return;
82
83 m_etcdBasePath = etcdConfig.GetString("BasePath", m_etcdBasePath);
84 m_appendRegionID = etcdConfig.GetBoolean("AppendRegionID", m_appendRegionID);
85
86 if (!m_etcdBasePath.EndsWith("/"))
87 m_etcdBasePath += "/";
88
89 try
90 {
91 string[] endpoints = etcdUrls.Split(new char[] {','});
92 List<Uri> uris = new List<Uri>();
93 foreach (string endpoint in endpoints)
94 uris.Add(new Uri(endpoint.Trim()));
95
96 m_client = new EtcdClient(uris.ToArray(), new DefaultSerializer(), new DefaultSerializer());
97 }
98 catch (Exception e)
99 {
100 m_log.DebugFormat("[ETCD]: Error initializing connection: " + e.ToString());
101 return;
102 }
103
104 m_log.DebugFormat("[ETCD]: Etcd module configured");
105 m_enabled = true;
106 }
107
108 public void Close()
109 {
110 //m_client = null;
111 m_scene = null;
112 }
113
114 public void AddRegion(Scene scene)
115 {
116 m_scene = scene;
117
118 if (m_enabled)
119 {
120 if (m_appendRegionID)
121 m_etcdBasePath += m_scene.RegionInfo.RegionID.ToString() + "/";
122
123 m_log.DebugFormat("[ETCD]: Using base path {0} for all keys", m_etcdBasePath);
124
125 try
126 {
127 m_client.Advanced.CreateDirectory(new CreateDirectoryRequest() {Key = m_etcdBasePath});
128 }
129 catch (Exception e)
130 {
131 m_log.ErrorFormat("Exception trying to create base path {0}: " + e.ToString(), m_etcdBasePath);
132 }
133
134 scene.RegisterModuleInterface<IEtcdModule>(this);
135 }
136 }
137
138 public void RemoveRegion(Scene scene)
139 {
140 }
141
142 public void RegionLoaded(Scene scene)
143 {
144 }
145
146 public bool Store(string k, string v)
147 {
148 return Store(k, v, 0);
149 }
150
151 public bool Store(string k, string v, int ttl)
152 {
153 Response resp = m_client.Advanced.SetKey(new SetKeyRequest() { Key = m_etcdBasePath + k, Value = v, TimeToLive = ttl });
154
155 if (resp == null)
156 return false;
157
158 if (resp.ErrorCode.HasValue)
159 {
160 m_log.DebugFormat("[ETCD]: Error {0} ({1}) storing {2} => {3}", resp.Cause, (int)resp.ErrorCode, m_etcdBasePath + k, v);
161
162 return false;
163 }
164
165 return true;
166 }
167
168 public string Get(string k)
169 {
170 Response resp = m_client.Advanced.GetKey(new GetKeyRequest() { Key = m_etcdBasePath + k });
171
172 if (resp == null)
173 return String.Empty;
174
175 if (resp.ErrorCode.HasValue)
176 {
177 m_log.DebugFormat("[ETCD]: Error {0} ({1}) getting {2}", resp.Cause, (int)resp.ErrorCode, m_etcdBasePath + k);
178
179 return String.Empty;
180 }
181
182 return resp.Node.Value;
183 }
184
185 public void Delete(string k)
186 {
187 m_client.Advanced.DeleteKey(new DeleteKeyRequest() { Key = m_etcdBasePath + k });
188 }
189
190 public void Watch(string k, Action<string> callback)
191 {
192 m_client.Advanced.WatchKey(new WatchKeyRequest() { Key = m_etcdBasePath + k, Callback = (x) => { callback(x.Node.Value); } });
193 }
194 }
195}
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs
index 52fa908..e8cb052 100644
--- a/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs
+++ b/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs
@@ -329,7 +329,7 @@ namespace OpenSim.Region.OptionalModules.Materials
329 AssetBase matAsset = m_scene.AssetService.Get(id.ToString()); 329 AssetBase matAsset = m_scene.AssetService.Get(id.ToString());
330 if (matAsset == null || matAsset.Data == null || matAsset.Data.Length == 0 ) 330 if (matAsset == null || matAsset.Data == null || matAsset.Data.Length == 0 )
331 { 331 {
332 m_log.WarnFormat("[Materials]: Prim \"{0}\" ({1}) contains unknown material ID {2}", part.Name, part.UUID, id); 332 //m_log.WarnFormat("[Materials]: Prim \"{0}\" ({1}) contains unknown material ID {2}", part.Name, part.UUID, id);
333 return; 333 return;
334 } 334 }
335 335
diff --git a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs
index 9c0fa75..61b6d68 100644
--- a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs
+++ b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs
@@ -52,6 +52,7 @@ namespace OpenSim.Region.OptionalModules
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53 private bool m_enabled; 53 private bool m_enabled;
54 54
55 private Scene m_scene;
55 public string Name { get { return "PrimLimitsModule"; } } 56 public string Name { get { return "PrimLimitsModule"; } }
56 57
57 public Type ReplaceableInterface { get { return null; } } 58 public Type ReplaceableInterface { get { return null; } }
@@ -77,11 +78,12 @@ namespace OpenSim.Region.OptionalModules
77 public void AddRegion(Scene scene) 78 public void AddRegion(Scene scene)
78 { 79 {
79 if (!m_enabled) 80 if (!m_enabled)
80 {
81 return; 81 return;
82 } 82
83 m_scene = scene;
83 scene.Permissions.OnRezObject += CanRezObject; 84 scene.Permissions.OnRezObject += CanRezObject;
84 scene.Permissions.OnObjectEntry += CanObjectEnter; 85 scene.Permissions.OnObjectEntry += CanObjectEnter;
86 scene.Permissions.OnObjectEnterWithScripts += CanObjectEnterWithScripts;
85 scene.Permissions.OnDuplicateObject += CanDuplicateObject; 87 scene.Permissions.OnDuplicateObject += CanDuplicateObject;
86 88
87 m_log.DebugFormat("[PRIM LIMITS]: Region {0} added", scene.RegionInfo.RegionName); 89 m_log.DebugFormat("[PRIM LIMITS]: Region {0} added", scene.RegionInfo.RegionName);
@@ -89,14 +91,13 @@ namespace OpenSim.Region.OptionalModules
89 91
90 public void RemoveRegion(Scene scene) 92 public void RemoveRegion(Scene scene)
91 { 93 {
92 if (m_enabled) 94 if (!m_enabled)
93 {
94 return; 95 return;
95 }
96 96
97 scene.Permissions.OnRezObject -= CanRezObject; 97 m_scene.Permissions.OnRezObject -= CanRezObject;
98 scene.Permissions.OnObjectEntry -= CanObjectEnter; 98 m_scene.Permissions.OnObjectEntry -= CanObjectEnter;
99 scene.Permissions.OnDuplicateObject -= CanDuplicateObject; 99 scene.Permissions.OnObjectEnterWithScripts -= CanObjectEnterWithScripts;
100 m_scene.Permissions.OnDuplicateObject -= CanDuplicateObject;
100 } 101 }
101 102
102 public void RegionLoaded(Scene scene) 103 public void RegionLoaded(Scene scene)
@@ -104,11 +105,12 @@ namespace OpenSim.Region.OptionalModules
104 m_dialogModule = scene.RequestModuleInterface<IDialogModule>(); 105 m_dialogModule = scene.RequestModuleInterface<IDialogModule>();
105 } 106 }
106 107
107 private bool CanRezObject(int objectCount, UUID ownerID, Vector3 objectPosition, Scene scene) 108 private bool CanRezObject(int objectCount, UUID ownerID, Vector3 objectPosition)
108 { 109 {
109 ILandObject lo = scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y); 110
111 ILandObject lo = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y);
110 112
111 string response = DoCommonChecks(objectCount, ownerID, lo, scene); 113 string response = DoCommonChecks(objectCount, ownerID, lo);
112 114
113 if (response != null) 115 if (response != null)
114 { 116 {
@@ -119,88 +121,99 @@ namespace OpenSim.Region.OptionalModules
119 } 121 }
120 122
121 //OnDuplicateObject 123 //OnDuplicateObject
122 private bool CanDuplicateObject(int objectCount, UUID objectID, UUID ownerID, Scene scene, Vector3 objectPosition) 124 private bool CanDuplicateObject(SceneObjectGroup sog, ScenePresence sp)
123 { 125 {
124 ILandObject lo = scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y); 126 Vector3 objectPosition = sog.AbsolutePosition;
127 ILandObject lo = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y);
125 128
126 string response = DoCommonChecks(objectCount, ownerID, lo, scene); 129 string response = DoCommonChecks(sog.PrimCount, sp.UUID, lo);
127 130
128 if (response != null) 131 if (response != null)
129 { 132 {
130 m_dialogModule.SendAlertToUser(ownerID, response); 133 m_dialogModule.SendAlertToUser(sp.UUID, response);
131 return false; 134 return false;
132 } 135 }
133 return true; 136 return true;
134 } 137 }
135 138
136 private bool CanObjectEnter(UUID objectID, bool enteringRegion, Vector3 newPoint, Scene scene) 139 private bool CanObjectEnter(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint)
137 { 140 {
138 if (newPoint.X < -1f || newPoint.X > (scene.RegionInfo.RegionSizeX + 1) || 141 float newX = newPoint.X;
139 newPoint.Y < -1f || newPoint.Y > (scene.RegionInfo.RegionSizeY) ) 142 float newY = newPoint.Y;
143 if (newX < -1.0f || newX > (m_scene.RegionInfo.RegionSizeX + 1.0f) ||
144 newY < -1.0f || newY > (m_scene.RegionInfo.RegionSizeY + 1.0f) )
140 return true; 145 return true;
141 146
142 SceneObjectPart obj = scene.GetSceneObjectPart(objectID); 147 if (sog == null)
143
144 if (obj == null)
145 return false; 148 return false;
146 149
147 // Prim counts are determined by the location of the root prim. if we're 150 ILandObject newParcel = m_scene.LandChannel.GetLandObject(newX, newY);
148 // moving a child prim, just let it pass
149 if (!obj.IsRoot)
150 {
151 return true;
152 }
153
154 ILandObject newParcel = scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y);
155 151
156 if (newParcel == null) 152 if (newParcel == null)
157 return true; 153 return true;
158 154
159 Vector3 oldPoint = obj.GroupPosition; 155 if(!enteringRegion)
160 ILandObject oldParcel = scene.LandChannel.GetLandObject(oldPoint.X, oldPoint.Y);
161
162 // The prim hasn't crossed a region boundry so we don't need to worry
163 // about prim counts here
164 if(oldParcel != null && oldParcel.Equals(newParcel))
165 { 156 {
166 return true; 157 Vector3 oldPoint = sog.AbsolutePosition;
158 ILandObject oldParcel = m_scene.LandChannel.GetLandObject(oldPoint.X, oldPoint.Y);
159 if(oldParcel != null && oldParcel.Equals(newParcel))
160 return true;
167 } 161 }
168 162
169 int objectCount = obj.ParentGroup.PrimCount; 163 int objectCount = sog.PrimCount;
170 int usedPrims = newParcel.PrimCounts.Total;
171 int simulatorCapacity = newParcel.GetSimulatorMaxPrimCount();
172 164
173 // TODO: Add Special Case here for temporary prims 165 // TODO: Add Special Case here for temporary prims
174 166
175 string response = DoCommonChecks(objectCount, obj.OwnerID, newParcel, scene); 167 string response = DoCommonChecks(objectCount, sog.OwnerID, newParcel);
176 168
177 if (response != null) 169 if (response != null)
178 { 170 {
179 m_dialogModule.SendAlertToUser(obj.OwnerID, response); 171 if(m_dialogModule != null)
172 m_dialogModule.SendAlertToUser(sog.OwnerID, response);
180 return false; 173 return false;
181 } 174 }
182 return true; 175 return true;
183 } 176 }
184 177
185 private string DoCommonChecks(int objectCount, UUID ownerID, ILandObject lo, Scene scene) 178 private bool CanObjectEnterWithScripts(SceneObjectGroup sog, ILandObject newParcel)
179 {
180 if (sog == null)
181 return false;
182
183 if (newParcel == null)
184 return true;
185
186 int objectCount = sog.PrimCount;
187
188 // TODO: Add Special Case here for temporary prims
189
190 string response = DoCommonChecks(objectCount, sog.OwnerID, newParcel);
191
192 if (response != null)
193 return false;
194
195 return true;
196 }
197
198 private string DoCommonChecks(int objectCount, UUID ownerID, ILandObject lo)
186 { 199 {
187 string response = null; 200 string response = null;
188 201
189 int OwnedParcelsCapacity = lo.GetSimulatorMaxPrimCount(); 202 int OwnedParcelsCapacity = lo.GetSimulatorMaxPrimCount();
190 if ((objectCount + lo.PrimCounts.Total) > OwnedParcelsCapacity) 203 if ((objectCount + lo.PrimCounts.Total) > OwnedParcelsCapacity)
191 { 204 {
192 response = "Unable to rez object because the parcel is too full"; 205 response = "Unable to rez object because the parcel is full";
193 } 206 }
194 else 207 else
195 { 208 {
196 int maxPrimsPerUser = scene.RegionInfo.MaxPrimsPerUser; 209 int maxPrimsPerUser = m_scene.RegionInfo.MaxPrimsPerUser;
197 if (maxPrimsPerUser >= 0) 210 if (maxPrimsPerUser >= 0)
198 { 211 {
199 // per-user prim limit is set 212 // per-user prim limit is set
200 if (ownerID != lo.LandData.OwnerID || lo.LandData.IsGroupOwned) 213 if (ownerID != lo.LandData.OwnerID || lo.LandData.IsGroupOwned)
201 { 214 {
202 // caller is not the sole Parcel owner 215 // caller is not the sole Parcel owner
203 EstateSettings estateSettings = scene.RegionInfo.EstateSettings; 216 EstateSettings estateSettings = m_scene.RegionInfo.EstateSettings;
204 if (ownerID != estateSettings.EstateOwner) 217 if (ownerID != estateSettings.EstateOwner)
205 { 218 {
206 // caller is NOT the Estate owner 219 // caller is NOT the Estate owner
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs
index a9fdb66..6cf0092 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs
@@ -665,7 +665,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
665 taskItem.AssetID = asset.FullID; 665 taskItem.AssetID = asset.FullID;
666 666
667 host.Inventory.AddInventoryItem(taskItem, false); 667 host.Inventory.AddInventoryItem(taskItem, false);
668 668 host.ParentGroup.AggregatePerms();
669 m_comms.DispatchReply(scriptID,1,assetID.ToString(),reqID.ToString()); 669 m_comms.DispatchReply(scriptID,1,assetID.ToString(),reqID.ToString());
670 } 670 }
671 671
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 6a7c735..151a202 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -813,7 +813,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
813 { 813 {
814 } 814 }
815 815
816 public void SendAvatarDataImmediate(ISceneEntity avatar) 816 public void SendEntityFullUpdateImmediate(ISceneEntity avatar)
817 {
818 }
819
820 public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
817 { 821 {
818 } 822 }
819 823
diff --git a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
index e22c6ea..b26fa32 100644
--- a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
+++ b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
@@ -523,9 +523,9 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
523 523
524 rootPart.AddFlag(PrimFlags.Phantom); 524 rootPart.AddFlag(PrimFlags.Phantom);
525 525
526 m_scene.AddNewSceneObject(sceneObject, true);
527 sceneObject.SetGroup(groupID, null); 526 sceneObject.SetGroup(groupID, null);
528 527 m_scene.AddNewSceneObject(sceneObject, true);
528 sceneObject.AggregatePerms();
529 return sceneObject; 529 return sceneObject;
530 } 530 }
531 531
diff --git a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs
index 33f0337..2fa98b5 100644
--- a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs
+++ b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs
@@ -256,6 +256,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase
256 /// </summary> 256 /// </summary>
257 public string SOPName; 257 public string SOPName;
258 258
259 public virtual void CrossingStart() { }
259 public abstract void CrossingFailure(); 260 public abstract void CrossingFailure();
260 261
261 public abstract void link(PhysicsActor obj); 262 public abstract void link(PhysicsActor obj);
@@ -462,6 +463,23 @@ namespace OpenSim.Region.PhysicsModules.SharedBase
462 public abstract bool SubscribedEvents(); 463 public abstract bool SubscribedEvents();
463 464
464 public virtual void AddCollisionEvent(uint CollidedWith, ContactPoint contact) { } 465 public virtual void AddCollisionEvent(uint CollidedWith, ContactPoint contact) { }
466 public virtual void AddVDTCCollisionEvent(uint CollidedWith, ContactPoint contact) { }
467
468 public virtual PhysicsInertiaData GetInertiaData()
469 {
470 PhysicsInertiaData data = new PhysicsInertiaData();
471 data.TotalMass = this.Mass;
472 data.CenterOfMass = CenterOfMass - Position;
473 data.Inertia = Vector3.Zero;
474 data.InertiaRotation = Vector4.Zero;
475 return data;
476 }
477
478 public virtual void SetInertiaData(PhysicsInertiaData inertia)
479 {
480 }
481
482 public virtual float SimulationSuspended { get; set; }
465 483
466 // Warning in a parent part it returns itself, not null 484 // Warning in a parent part it returns itself, not null
467 public virtual PhysicsActor ParentActor { get { return this; } } 485 public virtual PhysicsActor ParentActor { get { return this; } }
diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs
index a2fbf41..9bf71f7 100644
--- a/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs
+++ b/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs
@@ -85,7 +85,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
85 private Vector3 m_lastposition; 85 private Vector3 m_lastposition;
86 private Vector3 m_rotationalVelocity; 86 private Vector3 m_rotationalVelocity;
87 private Vector3 _size; 87 private Vector3 _size;
88 private Vector3 _acceleration; 88 private Vector3 m_acceleration;
89 private IntPtr Amotor; 89 private IntPtr Amotor;
90 90
91 internal Vector3 m_force; 91 internal Vector3 m_force;
@@ -109,8 +109,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
109 private float m_waterHeight; 109 private float m_waterHeight;
110 private float m_buoyancy; //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle. 110 private float m_buoyancy; //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle.
111 111
112 private int body_autodisable_frames; 112 private int m_body_autodisable_frames;
113 public int bodydisablecontrol = 0; 113 public int m_bodydisablecontrol = 0;
114 private float m_gravmod = 1.0f; 114 private float m_gravmod = 1.0f;
115 115
116 // Default we're a Geometry 116 // Default we're a Geometry
@@ -182,18 +182,21 @@ namespace OpenSim.Region.PhysicsModule.ubOde
182 private float m_streamCost; 182 private float m_streamCost;
183 183
184 public d.Mass primdMass; // prim inertia information on it's own referencial 184 public d.Mass primdMass; // prim inertia information on it's own referencial
185 private PhysicsInertiaData m_InertiaOverride;
185 float primMass; // prim own mass 186 float primMass; // prim own mass
186 float primVolume; // prim own volume; 187 float primVolume; // prim own volume;
187 float _mass; // object mass acording to case 188 float m_mass; // object mass acording to case
188 189
189 public int givefakepos; 190 public int givefakepos;
190 private Vector3 fakepos; 191 private Vector3 fakepos;
191 public int givefakeori; 192 public int givefakeori;
192 private Quaternion fakeori; 193 private Quaternion fakeori;
194 private PhysicsInertiaData m_fakeInertiaOverride;
193 195
194 private int m_eventsubscription; 196 private int m_eventsubscription;
195 private int m_cureventsubscription; 197 private int m_cureventsubscription;
196 private CollisionEventUpdate CollisionEventsThisFrame = null; 198 private CollisionEventUpdate CollisionEventsThisFrame = null;
199 private CollisionEventUpdate CollisionVDTCEventsThisFrame = null;
197 private bool SentEmptyCollisionsEvent; 200 private bool SentEmptyCollisionsEvent;
198 201
199 public volatile bool childPrim; 202 public volatile bool childPrim;
@@ -465,6 +468,103 @@ namespace OpenSim.Region.PhysicsModule.ubOde
465 } 468 }
466 } 469 }
467 470
471 public override PhysicsInertiaData GetInertiaData()
472 {
473 PhysicsInertiaData inertia;
474 if(childPrim)
475 {
476 if(_parent != null)
477 return _parent.GetInertiaData();
478 else
479 {
480 inertia = new PhysicsInertiaData();
481 inertia.TotalMass = -1;
482 return inertia;
483 }
484 }
485
486 inertia = new PhysicsInertiaData();
487
488 // double buffering
489 if(m_fakeInertiaOverride != null)
490 {
491 d.Mass objdmass = new d.Mass();
492 objdmass.I.M00 = m_fakeInertiaOverride.Inertia.X;
493 objdmass.I.M11 = m_fakeInertiaOverride.Inertia.Y;
494 objdmass.I.M22 = m_fakeInertiaOverride.Inertia.Z;
495
496 objdmass.mass = m_fakeInertiaOverride.TotalMass;
497
498 if(Math.Abs(m_fakeInertiaOverride.InertiaRotation.W) < 0.999)
499 {
500 d.Matrix3 inertiarotmat = new d.Matrix3();
501 d.Quaternion inertiarot = new d.Quaternion();
502
503 inertiarot.X = m_fakeInertiaOverride.InertiaRotation.X;
504 inertiarot.Y = m_fakeInertiaOverride.InertiaRotation.Y;
505 inertiarot.Z = m_fakeInertiaOverride.InertiaRotation.Z;
506 inertiarot.W = m_fakeInertiaOverride.InertiaRotation.W;
507 d.RfromQ(out inertiarotmat, ref inertiarot);
508 d.MassRotate(ref objdmass, ref inertiarotmat);
509 }
510
511 inertia.TotalMass = m_fakeInertiaOverride.TotalMass;
512 inertia.CenterOfMass = m_fakeInertiaOverride.CenterOfMass;
513 inertia.Inertia.X = objdmass.I.M00;
514 inertia.Inertia.Y = objdmass.I.M11;
515 inertia.Inertia.Z = objdmass.I.M22;
516 inertia.InertiaRotation.X = objdmass.I.M01;
517 inertia.InertiaRotation.Y = objdmass.I.M02;
518 inertia.InertiaRotation.Z = objdmass.I.M12;
519 return inertia;
520 }
521
522 inertia.TotalMass = m_mass;
523
524 if(Body == IntPtr.Zero || prim_geom == IntPtr.Zero)
525 {
526 inertia.CenterOfMass = Vector3.Zero;
527 inertia.Inertia = Vector3.Zero;
528 inertia.InertiaRotation = Vector4.Zero;
529 return inertia;
530 }
531
532 d.Vector3 dtmp;
533 d.Mass m = new d.Mass();
534 lock(_parent_scene.OdeLock)
535 {
536 d.AllocateODEDataForThread(0);
537 dtmp = d.GeomGetOffsetPosition(prim_geom);
538 d.BodyGetMass(Body, out m);
539 }
540
541 Vector3 cm = new Vector3(-dtmp.X, -dtmp.Y, -dtmp.Z);
542 inertia.CenterOfMass = cm;
543 inertia.Inertia = new Vector3(m.I.M00, m.I.M11, m.I.M22);
544 inertia.InertiaRotation = new Vector4(m.I.M01, m.I.M02 , m.I.M12, 0);
545
546 return inertia;
547 }
548
549 public override void SetInertiaData(PhysicsInertiaData inertia)
550 {
551 if(childPrim)
552 {
553 if(_parent != null)
554 _parent.SetInertiaData(inertia);
555 return;
556 }
557
558 if(inertia.TotalMass > 0)
559 m_fakeInertiaOverride = new PhysicsInertiaData(inertia);
560 else
561 m_fakeInertiaOverride = null;
562
563 if (inertia.TotalMass > _parent_scene.maximumMassObject)
564 inertia.TotalMass = _parent_scene.maximumMassObject;
565 AddChange(changes.SetInertia,(object)m_fakeInertiaOverride);
566 }
567
468 public override Vector3 CenterOfMass 568 public override Vector3 CenterOfMass
469 { 569 {
470 get 570 get
@@ -569,7 +669,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde
569 { 669 {
570 if (value.IsFinite()) 670 if (value.IsFinite())
571 { 671 {
572 AddChange(changes.Velocity, value); 672 if(m_outbounds)
673 _velocity = value;
674 else
675 AddChange(changes.Velocity, value);
573 } 676 }
574 else 677 else
575 { 678 {
@@ -642,8 +745,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
642 745
643 public override Vector3 Acceleration 746 public override Vector3 Acceleration
644 { 747 {
645 get { return _acceleration; } 748 get { return m_acceleration; }
646 set { } 749 set
750 {
751 if(m_outbounds)
752 m_acceleration = value;
753 }
647 } 754 }
648 755
649 public override Vector3 RotationalVelocity 756 public override Vector3 RotationalVelocity
@@ -663,7 +770,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde
663 { 770 {
664 if (value.IsFinite()) 771 if (value.IsFinite())
665 { 772 {
666 AddChange(changes.AngVelocity, value); 773 if(m_outbounds)
774 m_rotationalVelocity = value;
775 else
776 AddChange(changes.AngVelocity, value);
667 } 777 }
668 else 778 else
669 { 779 {
@@ -837,7 +947,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
837 } 947 }
838 public void SetAcceleration(Vector3 accel) 948 public void SetAcceleration(Vector3 accel)
839 { 949 {
840 _acceleration = accel; 950 m_acceleration = accel;
841 } 951 }
842 952
843 public override void AddForce(Vector3 force, bool pushforce) 953 public override void AddForce(Vector3 force, bool pushforce)
@@ -873,31 +983,68 @@ namespace OpenSim.Region.PhysicsModule.ubOde
873 983
874 public override void CrossingFailure() 984 public override void CrossingFailure()
875 { 985 {
876 if (m_outbounds) 986 lock(_parent_scene.OdeLock)
987 {
988 if (m_outbounds)
989 {
990 _position.X = Util.Clip(_position.X, 0.5f, _parent_scene.WorldExtents.X - 0.5f);
991 _position.Y = Util.Clip(_position.Y, 0.5f, _parent_scene.WorldExtents.Y - 0.5f);
992 _position.Z = Util.Clip(_position.Z + 0.2f, -100f, 50000f);
993
994 m_lastposition = _position;
995 _velocity.X = 0;
996 _velocity.Y = 0;
997 _velocity.Z = 0;
998
999 d.AllocateODEDataForThread(0);
1000
1001 m_lastVelocity = _velocity;
1002 if (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE)
1003 m_vehicle.Stop();
1004
1005 if(Body != IntPtr.Zero)
1006 d.BodySetLinearVel(Body, 0, 0, 0); // stop it
1007 if (prim_geom != IntPtr.Zero)
1008 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
1009
1010 m_outbounds = false;
1011 changeDisable(false);
1012 base.RequestPhysicsterseUpdate();
1013 }
1014 }
1015 }
1016
1017 public override void CrossingStart()
1018 {
1019 lock(_parent_scene.OdeLock)
877 { 1020 {
878 _position.X = Util.Clip(_position.X, 0.5f, _parent_scene.WorldExtents.X - 0.5f); 1021 if (m_outbounds || childPrim)
879 _position.Y = Util.Clip(_position.Y, 0.5f, _parent_scene.WorldExtents.Y - 0.5f); 1022 return;
880 _position.Z = Util.Clip(_position.Z + 0.2f, -100f, 50000f); 1023
1024 m_outbounds = true;
881 1025
882 m_lastposition = _position; 1026 m_lastposition = _position;
883 _velocity.X = 0; 1027 m_lastorientation = _orientation;
884 _velocity.Y = 0;
885 _velocity.Z = 0;
886 1028
887 d.AllocateODEDataForThread(0); 1029 d.AllocateODEDataForThread(0);
1030 if(Body != IntPtr.Zero)
1031 {
1032 d.Vector3 dtmp = d.BodyGetAngularVel(Body);
1033 m_rotationalVelocity.X = dtmp.X;
1034 m_rotationalVelocity.Y = dtmp.Y;
1035 m_rotationalVelocity.Z = dtmp.Z;
888 1036
889 m_lastVelocity = _velocity; 1037 dtmp = d.BodyGetLinearVel(Body);
890 if (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE) 1038 _velocity.X = dtmp.X;
891 m_vehicle.Stop(); 1039 _velocity.Y = dtmp.Y;
1040 _velocity.Z = dtmp.Z;
892 1041
893 if(Body != IntPtr.Zero)
894 d.BodySetLinearVel(Body, 0, 0, 0); // stop it 1042 d.BodySetLinearVel(Body, 0, 0, 0); // stop it
895 if (prim_geom != IntPtr.Zero) 1043 d.BodySetAngularVel(Body, 0, 0, 0);
896 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); 1044 }
897 1045 d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
898 m_outbounds = false; 1046 disableBodySoft(); // stop collisions
899 changeDisable(false); 1047 UnSubscribeEvents();
900 base.RequestPhysicsterseUpdate();
901 } 1048 }
902 } 1049 }
903 1050
@@ -920,8 +1067,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde
920 } 1067 }
921 set 1068 set
922 { 1069 {
1070 float old = m_density;
923 m_density = value / 100f; 1071 m_density = value / 100f;
924 // for not prim mass is not updated since this implies full rebuild of body inertia TODO 1072 // if(m_density != old)
1073 // UpdatePrimBodyData();
925 } 1074 }
926 } 1075 }
927 public override float GravModifier 1076 public override float GravModifier
@@ -989,11 +1138,18 @@ namespace OpenSim.Region.PhysicsModule.ubOde
989 m_cureventsubscription = 0; 1138 m_cureventsubscription = 0;
990 if (CollisionEventsThisFrame == null) 1139 if (CollisionEventsThisFrame == null)
991 CollisionEventsThisFrame = new CollisionEventUpdate(); 1140 CollisionEventsThisFrame = new CollisionEventUpdate();
1141 if (CollisionVDTCEventsThisFrame == null)
1142 CollisionVDTCEventsThisFrame = new CollisionEventUpdate();
992 SentEmptyCollisionsEvent = false; 1143 SentEmptyCollisionsEvent = false;
993 } 1144 }
994 1145
995 public override void UnSubscribeEvents() 1146 public override void UnSubscribeEvents()
996 { 1147 {
1148 if (CollisionVDTCEventsThisFrame != null)
1149 {
1150 CollisionVDTCEventsThisFrame.Clear();
1151 CollisionVDTCEventsThisFrame = null;
1152 }
997 if (CollisionEventsThisFrame != null) 1153 if (CollisionEventsThisFrame != null)
998 { 1154 {
999 CollisionEventsThisFrame.Clear(); 1155 CollisionEventsThisFrame.Clear();
@@ -1012,37 +1168,67 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1012 _parent_scene.AddCollisionEventReporting(this); 1168 _parent_scene.AddCollisionEventReporting(this);
1013 } 1169 }
1014 1170
1171 public override void AddVDTCCollisionEvent(uint CollidedWith, ContactPoint contact)
1172 {
1173 if (CollisionVDTCEventsThisFrame == null)
1174 CollisionVDTCEventsThisFrame = new CollisionEventUpdate();
1175
1176 CollisionVDTCEventsThisFrame.AddCollider(CollidedWith, contact);
1177 _parent_scene.AddCollisionEventReporting(this);
1178 }
1179
1015 internal void SleeperAddCollisionEvents() 1180 internal void SleeperAddCollisionEvents()
1016 { 1181 {
1017 if (CollisionEventsThisFrame == null) 1182 if(CollisionEventsThisFrame != null && CollisionEventsThisFrame.m_objCollisionList.Count != 0)
1018 return; 1183 {
1019 if(CollisionEventsThisFrame.m_objCollisionList.Count == 0) 1184 foreach(KeyValuePair<uint,ContactPoint> kvp in CollisionEventsThisFrame.m_objCollisionList)
1020 return; 1185 {
1021 foreach(KeyValuePair<uint,ContactPoint> kvp in CollisionEventsThisFrame.m_objCollisionList) 1186 if(kvp.Key == 0)
1187 continue;
1188 OdePrim other = _parent_scene.getPrim(kvp.Key);
1189 if(other == null)
1190 continue;
1191 ContactPoint cp = kvp.Value;
1192 cp.SurfaceNormal = - cp.SurfaceNormal;
1193 cp.RelativeSpeed = -cp.RelativeSpeed;
1194 other.AddCollisionEvent(ParentActor.LocalID,cp);
1195 }
1196 }
1197 if(CollisionVDTCEventsThisFrame != null && CollisionVDTCEventsThisFrame.m_objCollisionList.Count != 0)
1022 { 1198 {
1023 OdePrim other = _parent_scene.getPrim(kvp.Key); 1199 foreach(KeyValuePair<uint,ContactPoint> kvp in CollisionVDTCEventsThisFrame.m_objCollisionList)
1024 if(other == null) 1200 {
1025 continue; 1201 OdePrim other = _parent_scene.getPrim(kvp.Key);
1026 ContactPoint cp = kvp.Value; 1202 if(other == null)
1027 cp.SurfaceNormal = - cp.SurfaceNormal; 1203 continue;
1028 cp.RelativeSpeed = -cp.RelativeSpeed; 1204 ContactPoint cp = kvp.Value;
1029 other.AddCollisionEvent(ParentActor.LocalID,cp); 1205 cp.SurfaceNormal = - cp.SurfaceNormal;
1206 cp.RelativeSpeed = -cp.RelativeSpeed;
1207 other.AddCollisionEvent(ParentActor.LocalID,cp);
1208 }
1030 } 1209 }
1031 } 1210 }
1032 1211
1212 internal void clearSleeperCollisions()
1213 {
1214 if(CollisionVDTCEventsThisFrame != null && CollisionVDTCEventsThisFrame.Count >0 )
1215 CollisionVDTCEventsThisFrame.Clear();
1216 }
1217
1033 public void SendCollisions(int timestep) 1218 public void SendCollisions(int timestep)
1034 { 1219 {
1035 if (m_cureventsubscription < 50000) 1220 if (m_cureventsubscription < 50000)
1036 m_cureventsubscription += timestep; 1221 m_cureventsubscription += timestep;
1037 1222
1223
1224 if (m_cureventsubscription < m_eventsubscription)
1225 return;
1226
1038 if (CollisionEventsThisFrame == null) 1227 if (CollisionEventsThisFrame == null)
1039 return; 1228 return;
1040 1229
1041 int ncolisions = CollisionEventsThisFrame.m_objCollisionList.Count; 1230 int ncolisions = CollisionEventsThisFrame.m_objCollisionList.Count;
1042 1231
1043 if (m_cureventsubscription < m_eventsubscription)
1044 return;
1045
1046 if (!SentEmptyCollisionsEvent || ncolisions > 0) 1232 if (!SentEmptyCollisionsEvent || ncolisions > 0)
1047 { 1233 {
1048 base.SendCollisionUpdate(CollisionEventsThisFrame); 1234 base.SendCollisionUpdate(CollisionEventsThisFrame);
@@ -1091,7 +1277,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1091 m_invTimeStep = 1f / m_timeStep; 1277 m_invTimeStep = 1f / m_timeStep;
1092 1278
1093 m_density = parent_scene.geomDefaultDensity; 1279 m_density = parent_scene.geomDefaultDensity;
1094 body_autodisable_frames = parent_scene.bodyFramesAutoDisable; 1280 m_body_autodisable_frames = parent_scene.bodyFramesAutoDisable;
1095 1281
1096 prim_geom = IntPtr.Zero; 1282 prim_geom = IntPtr.Zero;
1097 collide_geom = IntPtr.Zero; 1283 collide_geom = IntPtr.Zero;
@@ -1714,26 +1900,29 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1714 m_log.Warn("[PHYSICS]: MakeBody root geom already had a body"); 1900 m_log.Warn("[PHYSICS]: MakeBody root geom already had a body");
1715 } 1901 }
1716 1902
1717 d.Matrix3 mymat = new d.Matrix3(); 1903 bool noInertiaOverride = (m_InertiaOverride == null);
1718 d.Quaternion myrot = new d.Quaternion();
1719 d.Mass objdmass = new d.Mass { };
1720 1904
1721 Body = d.BodyCreate(_parent_scene.world); 1905 Body = d.BodyCreate(_parent_scene.world);
1722 1906
1723 objdmass = primdMass; 1907 d.Matrix3 mymat = new d.Matrix3();
1908 d.Quaternion myrot = new d.Quaternion();
1909 d.Mass objdmass = new d.Mass { };
1724 1910
1725 // rotate inertia
1726 myrot.X = _orientation.X; 1911 myrot.X = _orientation.X;
1727 myrot.Y = _orientation.Y; 1912 myrot.Y = _orientation.Y;
1728 myrot.Z = _orientation.Z; 1913 myrot.Z = _orientation.Z;
1729 myrot.W = _orientation.W; 1914 myrot.W = _orientation.W;
1730
1731 d.RfromQ(out mymat, ref myrot); 1915 d.RfromQ(out mymat, ref myrot);
1732 d.MassRotate(ref objdmass, ref mymat);
1733 1916
1734 // set the body rotation 1917 // set the body rotation
1735 d.BodySetRotation(Body, ref mymat); 1918 d.BodySetRotation(Body, ref mymat);
1736 1919
1920 if(noInertiaOverride)
1921 {
1922 objdmass = primdMass;
1923 d.MassRotate(ref objdmass, ref mymat);
1924 }
1925
1737 // recompute full object inertia if needed 1926 // recompute full object inertia if needed
1738 if (childrenPrim.Count > 0) 1927 if (childrenPrim.Count > 0)
1739 { 1928 {
@@ -1756,27 +1945,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1756 continue; 1945 continue;
1757 } 1946 }
1758 1947
1759 tmpdmass = prm.primdMass;
1760
1761 // apply prim current rotation to inertia
1762 quat.X = prm._orientation.X; 1948 quat.X = prm._orientation.X;
1763 quat.Y = prm._orientation.Y; 1949 quat.Y = prm._orientation.Y;
1764 quat.Z = prm._orientation.Z; 1950 quat.Z = prm._orientation.Z;
1765 quat.W = prm._orientation.W; 1951 quat.W = prm._orientation.W;
1766 d.RfromQ(out mat, ref quat); 1952 d.RfromQ(out mat, ref quat);
1767 d.MassRotate(ref tmpdmass, ref mat); 1953
1768
1769 Vector3 ppos = prm._position;
1770 ppos.X -= rcm.X;
1771 ppos.Y -= rcm.Y;
1772 ppos.Z -= rcm.Z;
1773 // refer inertia to root prim center of mass position
1774 d.MassTranslate(ref tmpdmass,
1775 ppos.X,
1776 ppos.Y,
1777 ppos.Z);
1778
1779 d.MassAdd(ref objdmass, ref tmpdmass); // add to total object inertia
1780 // fix prim colision cats 1954 // fix prim colision cats
1781 1955
1782 if (d.GeomGetBody(prm.prim_geom) != IntPtr.Zero) 1956 if (d.GeomGetBody(prm.prim_geom) != IntPtr.Zero)
@@ -1789,6 +1963,24 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1789 d.GeomSetBody(prm.prim_geom, Body); 1963 d.GeomSetBody(prm.prim_geom, Body);
1790 prm.Body = Body; 1964 prm.Body = Body;
1791 d.GeomSetOffsetWorldRotation(prm.prim_geom, ref mat); // set relative rotation 1965 d.GeomSetOffsetWorldRotation(prm.prim_geom, ref mat); // set relative rotation
1966
1967 if(noInertiaOverride)
1968 {
1969 tmpdmass = prm.primdMass;
1970
1971 d.MassRotate(ref tmpdmass, ref mat);
1972 Vector3 ppos = prm._position;
1973 ppos.X -= rcm.X;
1974 ppos.Y -= rcm.Y;
1975 ppos.Z -= rcm.Z;
1976 // refer inertia to root prim center of mass position
1977 d.MassTranslate(ref tmpdmass,
1978 ppos.X,
1979 ppos.Y,
1980 ppos.Z);
1981
1982 d.MassAdd(ref objdmass, ref tmpdmass); // add to total object inertia
1983 }
1792 } 1984 }
1793 } 1985 }
1794 } 1986 }
@@ -1797,25 +1989,66 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1797 // associate root geom with body 1989 // associate root geom with body
1798 d.GeomSetBody(prim_geom, Body); 1990 d.GeomSetBody(prim_geom, Body);
1799 1991
1800 d.BodySetPosition(Body, _position.X + objdmass.c.X, _position.Y + objdmass.c.Y, _position.Z + objdmass.c.Z); 1992 if(noInertiaOverride)
1993 d.BodySetPosition(Body, _position.X + objdmass.c.X, _position.Y + objdmass.c.Y, _position.Z + objdmass.c.Z);
1994 else
1995 {
1996 Vector3 ncm = m_InertiaOverride.CenterOfMass * _orientation;
1997 d.BodySetPosition(Body,
1998 _position.X + ncm.X,
1999 _position.Y + ncm.Y,
2000 _position.Z + ncm.Z);
2001 }
2002
1801 d.GeomSetOffsetWorldPosition(prim_geom, _position.X, _position.Y, _position.Z); 2003 d.GeomSetOffsetWorldPosition(prim_geom, _position.X, _position.Y, _position.Z);
1802 2004
1803 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body 2005 if(noInertiaOverride)
1804 myrot.X = -myrot.X; 2006 {
1805 myrot.Y = -myrot.Y; 2007 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body
1806 myrot.Z = -myrot.Z; 2008 myrot.X = -myrot.X;
2009 myrot.Y = -myrot.Y;
2010 myrot.Z = -myrot.Z;
1807 2011
1808 d.RfromQ(out mymat, ref myrot); 2012 d.RfromQ(out mymat, ref myrot);
1809 d.MassRotate(ref objdmass, ref mymat); 2013 d.MassRotate(ref objdmass, ref mymat);
1810 2014
1811 d.BodySetMass(Body, ref objdmass); 2015 d.BodySetMass(Body, ref objdmass);
1812 _mass = objdmass.mass; 2016 m_mass = objdmass.mass;
2017 }
2018 else
2019 {
2020 objdmass.c.X = 0;
2021 objdmass.c.Y = 0;
2022 objdmass.c.Z = 0;
2023
2024 objdmass.I.M00 = m_InertiaOverride.Inertia.X;
2025 objdmass.I.M11 = m_InertiaOverride.Inertia.Y;
2026 objdmass.I.M22 = m_InertiaOverride.Inertia.Z;
2027
2028 objdmass.mass = m_InertiaOverride.TotalMass;
2029
2030 if(Math.Abs(m_InertiaOverride.InertiaRotation.W) < 0.999)
2031 {
2032 d.Matrix3 inertiarotmat = new d.Matrix3();
2033 d.Quaternion inertiarot = new d.Quaternion();
2034
2035 inertiarot.X = m_InertiaOverride.InertiaRotation.X;
2036 inertiarot.Y = m_InertiaOverride.InertiaRotation.Y;
2037 inertiarot.Z = m_InertiaOverride.InertiaRotation.Z;
2038 inertiarot.W = m_InertiaOverride.InertiaRotation.W;
2039 d.RfromQ(out inertiarotmat, ref inertiarot);
2040 d.MassRotate(ref objdmass, ref inertiarotmat);
2041 }
2042 d.BodySetMass(Body, ref objdmass);
2043
2044 m_mass = objdmass.mass;
2045 }
1813 2046
1814 // disconnect from world gravity so we can apply buoyancy 2047 // disconnect from world gravity so we can apply buoyancy
1815 d.BodySetGravityMode(Body, false); 2048 d.BodySetGravityMode(Body, false);
1816 2049
1817 d.BodySetAutoDisableFlag(Body, true); 2050 d.BodySetAutoDisableFlag(Body, true);
1818 d.BodySetAutoDisableSteps(Body, body_autodisable_frames); 2051 d.BodySetAutoDisableSteps(Body, m_body_autodisable_frames);
1819 d.BodySetAutoDisableAngularThreshold(Body, 0.05f); 2052 d.BodySetAutoDisableAngularThreshold(Body, 0.05f);
1820 d.BodySetAutoDisableLinearThreshold(Body, 0.05f); 2053 d.BodySetAutoDisableLinearThreshold(Body, 0.05f);
1821 d.BodySetDamping(Body, .004f, .001f); 2054 d.BodySetDamping(Body, .004f, .001f);
@@ -1909,8 +2142,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1909 { 2142 {
1910 d.BodySetAngularVel(Body, m_rotationalVelocity.X, m_rotationalVelocity.Y, m_rotationalVelocity.Z); 2143 d.BodySetAngularVel(Body, m_rotationalVelocity.X, m_rotationalVelocity.Y, m_rotationalVelocity.Z);
1911 d.BodySetLinearVel(Body, _velocity.X, _velocity.Y, _velocity.Z); 2144 d.BodySetLinearVel(Body, _velocity.X, _velocity.Y, _velocity.Z);
2145
1912 _zeroFlag = false; 2146 _zeroFlag = false;
1913 bodydisablecontrol = 0; 2147 m_bodydisablecontrol = 0;
1914 } 2148 }
1915 _parent_scene.addActiveGroups(this); 2149 _parent_scene.addActiveGroups(this);
1916 } 2150 }
@@ -1988,7 +2222,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1988 SetInStaticSpace(prm); 2222 SetInStaticSpace(prm);
1989 } 2223 }
1990 prm.Body = IntPtr.Zero; 2224 prm.Body = IntPtr.Zero;
1991 prm._mass = prm.primMass; 2225 prm.m_mass = prm.primMass;
1992 prm.m_collisionscore = 0; 2226 prm.m_collisionscore = 0;
1993 } 2227 }
1994 } 2228 }
@@ -2002,7 +2236,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
2002 } 2236 }
2003 Body = IntPtr.Zero; 2237 Body = IntPtr.Zero;
2004 } 2238 }
2005 _mass = primMass; 2239 m_mass = primMass;
2006 m_collisionscore = 0; 2240 m_collisionscore = 0;
2007 } 2241 }
2008 2242
@@ -2079,7 +2313,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
2079 d.BodySetPosition(Body, dobjpos.X + thispos.X, dobjpos.Y + thispos.Y, dobjpos.Z + thispos.Z); 2313 d.BodySetPosition(Body, dobjpos.X + thispos.X, dobjpos.Y + thispos.Y, dobjpos.Z + thispos.Z);
2080 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body 2314 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body
2081 d.BodySetMass(Body, ref objdmass); 2315 d.BodySetMass(Body, ref objdmass);
2082 _mass = objdmass.mass; 2316 m_mass = objdmass.mass;
2083 } 2317 }
2084 2318
2085 private void FixInertia(Vector3 NewPos) 2319 private void FixInertia(Vector3 NewPos)
@@ -2143,7 +2377,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
2143 d.BodySetPosition(Body, dobjpos.X + thispos.X, dobjpos.Y + thispos.Y, dobjpos.Z + thispos.Z); 2377 d.BodySetPosition(Body, dobjpos.X + thispos.X, dobjpos.Y + thispos.Y, dobjpos.Z + thispos.Z);
2144 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body 2378 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body
2145 d.BodySetMass(Body, ref objdmass); 2379 d.BodySetMass(Body, ref objdmass);
2146 _mass = objdmass.mass; 2380 m_mass = objdmass.mass;
2147 } 2381 }
2148 2382
2149 private void FixInertia(Quaternion newrot) 2383 private void FixInertia(Quaternion newrot)
@@ -2209,7 +2443,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
2209 d.BodySetPosition(Body, dobjpos.X + thispos.X, dobjpos.Y + thispos.Y, dobjpos.Z + thispos.Z); 2443 d.BodySetPosition(Body, dobjpos.X + thispos.X, dobjpos.Y + thispos.Y, dobjpos.Z + thispos.Z);
2210 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body 2444 d.MassTranslate(ref objdmass, -objdmass.c.X, -objdmass.c.Y, -objdmass.c.Z); // ode wants inertia at center of body
2211 d.BodySetMass(Body, ref objdmass); 2445 d.BodySetMass(Body, ref objdmass);
2212 _mass = objdmass.mass; 2446 m_mass = objdmass.mass;
2213 } 2447 }
2214 2448
2215 2449
@@ -2224,7 +2458,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
2224 if (primMass > _parent_scene.maximumMassObject) 2458 if (primMass > _parent_scene.maximumMassObject)
2225 primMass = _parent_scene.maximumMassObject; 2459 primMass = _parent_scene.maximumMassObject;
2226 2460
2227 _mass = primMass; // just in case 2461 m_mass = primMass; // just in case
2228 2462
2229 d.MassSetBoxTotal(out primdMass, primMass, 2.0f * m_OBB.X, 2.0f * m_OBB.Y, 2.0f * m_OBB.Z); 2463 d.MassSetBoxTotal(out primdMass, primMass, 2.0f * m_OBB.X, 2.0f * m_OBB.Y, 2.0f * m_OBB.Z);
2230 2464
@@ -2514,7 +2748,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
2514 m_angularForceacc = Vector3.Zero; 2748 m_angularForceacc = Vector3.Zero;
2515// m_torque = Vector3.Zero; 2749// m_torque = Vector3.Zero;
2516 _velocity = Vector3.Zero; 2750 _velocity = Vector3.Zero;
2517 _acceleration = Vector3.Zero; 2751 m_acceleration = Vector3.Zero;
2518 m_rotationalVelocity = Vector3.Zero; 2752 m_rotationalVelocity = Vector3.Zero;
2519 _target_velocity = Vector3.Zero; 2753 _target_velocity = Vector3.Zero;
2520 if (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE) 2754 if (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE)
@@ -2767,8 +3001,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
2767 myrot.W = newOri.W; 3001 myrot.W = newOri.W;
2768 d.GeomSetQuaternion(prim_geom, ref myrot); 3002 d.GeomSetQuaternion(prim_geom, ref myrot);
2769 _orientation = newOri; 3003 _orientation = newOri;
2770 if (Body != IntPtr.Zero && m_angularlocks != 0) 3004
2771 createAMotor(m_angularlocks); 3005 if (Body != IntPtr.Zero)
3006 {
3007 if(m_angularlocks != 0)
3008 createAMotor(m_angularlocks);
3009 }
2772 } 3010 }
2773 if (Body != IntPtr.Zero && !d.BodyIsEnabled(Body)) 3011 if (Body != IntPtr.Zero && !d.BodyIsEnabled(Body))
2774 { 3012 {
@@ -3064,7 +3302,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3064 3302
3065 private void changeSetTorque(Vector3 newtorque) 3303 private void changeSetTorque(Vector3 newtorque)
3066 { 3304 {
3067 if (!m_isSelected) 3305 if (!m_isSelected && !m_outbounds)
3068 { 3306 {
3069 if (m_isphysical && Body != IntPtr.Zero) 3307 if (m_isphysical && Body != IntPtr.Zero)
3070 { 3308 {
@@ -3081,14 +3319,14 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3081 private void changeForce(Vector3 force) 3319 private void changeForce(Vector3 force)
3082 { 3320 {
3083 m_force = force; 3321 m_force = force;
3084 if (Body != IntPtr.Zero && !d.BodyIsEnabled(Body)) 3322 if (!m_isSelected && !m_outbounds && Body != IntPtr.Zero && !d.BodyIsEnabled(Body))
3085 d.BodyEnable(Body); 3323 d.BodyEnable(Body);
3086 } 3324 }
3087 3325
3088 private void changeAddForce(Vector3 theforce) 3326 private void changeAddForce(Vector3 theforce)
3089 { 3327 {
3090 m_forceacc += theforce; 3328 m_forceacc += theforce;
3091 if (!m_isSelected) 3329 if (!m_isSelected && !m_outbounds)
3092 { 3330 {
3093 lock (this) 3331 lock (this)
3094 { 3332 {
@@ -3109,7 +3347,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3109 private void changeAddAngularImpulse(Vector3 aimpulse) 3347 private void changeAddAngularImpulse(Vector3 aimpulse)
3110 { 3348 {
3111 m_angularForceacc += aimpulse * m_invTimeStep; 3349 m_angularForceacc += aimpulse * m_invTimeStep;
3112 if (!m_isSelected) 3350 if (!m_isSelected && !m_outbounds)
3113 { 3351 {
3114 lock (this) 3352 lock (this)
3115 { 3353 {
@@ -3134,7 +3372,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3134 newVel *= len; 3372 newVel *= len;
3135 } 3373 }
3136 3374
3137 if (!m_isSelected) 3375 if (!m_isSelected && !m_outbounds)
3138 { 3376 {
3139 if (Body != IntPtr.Zero) 3377 if (Body != IntPtr.Zero)
3140 { 3378 {
@@ -3142,7 +3380,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3142 enableBodySoft(); 3380 enableBodySoft();
3143 else if (!d.BodyIsEnabled(Body)) 3381 else if (!d.BodyIsEnabled(Body))
3144 d.BodyEnable(Body); 3382 d.BodyEnable(Body);
3145
3146 d.BodySetLinearVel(Body, newVel.X, newVel.Y, newVel.Z); 3383 d.BodySetLinearVel(Body, newVel.X, newVel.Y, newVel.Z);
3147 } 3384 }
3148 //resetCollisionAccounting(); 3385 //resetCollisionAccounting();
@@ -3159,7 +3396,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3159 newAngVel *= len; 3396 newAngVel *= len;
3160 } 3397 }
3161 3398
3162 if (!m_isSelected) 3399 if (!m_isSelected && !m_outbounds)
3163 { 3400 {
3164 if (Body != IntPtr.Zero) 3401 if (Body != IntPtr.Zero)
3165 { 3402 {
@@ -3167,8 +3404,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3167 enableBodySoft(); 3404 enableBodySoft();
3168 else if (!d.BodyIsEnabled(Body)) 3405 else if (!d.BodyIsEnabled(Body))
3169 d.BodyEnable(Body); 3406 d.BodyEnable(Body);
3170
3171
3172 d.BodySetAngularVel(Body, newAngVel.X, newAngVel.Y, newAngVel.Z); 3407 d.BodySetAngularVel(Body, newAngVel.X, newAngVel.Y, newAngVel.Z);
3173 } 3408 }
3174 //resetCollisionAccounting(); 3409 //resetCollisionAccounting();
@@ -3304,6 +3539,15 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3304 m_useHoverPID = active; 3539 m_useHoverPID = active;
3305 } 3540 }
3306 3541
3542 private void changeInertia(PhysicsInertiaData inertia)
3543 {
3544 m_InertiaOverride = inertia;
3545
3546 if (Body != IntPtr.Zero)
3547 DestroyBody();
3548 MakeBody();
3549 }
3550
3307 #endregion 3551 #endregion
3308 3552
3309 public void Move() 3553 public void Move()
@@ -3317,7 +3561,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3317 if (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE) 3561 if (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE)
3318 return; 3562 return;
3319 3563
3320 if (++bodydisablecontrol < 50) 3564 if (++m_bodydisablecontrol < 50)
3321 return; 3565 return;
3322 3566
3323 // clear residuals 3567 // clear residuals
@@ -3325,11 +3569,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3325 d.BodySetLinearVel(Body,0f,0f,0f); 3569 d.BodySetLinearVel(Body,0f,0f,0f);
3326 _zeroFlag = true; 3570 _zeroFlag = true;
3327 d.BodyEnable(Body); 3571 d.BodyEnable(Body);
3328 bodydisablecontrol = -4; 3572 m_bodydisablecontrol = -4;
3329 } 3573 }
3330 3574
3331 if(bodydisablecontrol < 0) 3575 if(m_bodydisablecontrol < 0)
3332 bodydisablecontrol ++; 3576 m_bodydisablecontrol ++;
3333 3577
3334 d.Vector3 lpos = d.GeomGetPosition(prim_geom); // root position that is seem by rest of simulator 3578 d.Vector3 lpos = d.GeomGetPosition(prim_geom); // root position that is seem by rest of simulator
3335 3579
@@ -3344,7 +3588,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3344 float fy = 0; 3588 float fy = 0;
3345 float fz = 0; 3589 float fz = 0;
3346 3590
3347 float m_mass = _mass; 3591 float mass = m_mass;
3348 3592
3349 if (m_usePID && m_PIDTau > 0) 3593 if (m_usePID && m_PIDTau > 0)
3350 { 3594 {
@@ -3451,9 +3695,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3451 fz = _parent_scene.gravityz * b; 3695 fz = _parent_scene.gravityz * b;
3452 } 3696 }
3453 3697
3454 fx *= m_mass; 3698 fx *= mass;
3455 fy *= m_mass; 3699 fy *= mass;
3456 fz *= m_mass; 3700 fz *= mass;
3457 3701
3458 // constant force 3702 // constant force
3459 fx += m_force.X; 3703 fx += m_force.X;
@@ -3498,7 +3742,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3498 { 3742 {
3499 bool bodyenabled = d.BodyIsEnabled(Body); 3743 bool bodyenabled = d.BodyIsEnabled(Body);
3500 3744
3501 if(bodydisablecontrol < 0) 3745 if(m_bodydisablecontrol < 0)
3502 return; 3746 return;
3503 3747
3504 if (bodyenabled || !_zeroFlag) 3748 if (bodyenabled || !_zeroFlag)
@@ -3513,9 +3757,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3513 m_outbounds = true; 3757 m_outbounds = true;
3514 3758
3515 lpos.Z = Util.Clip(lpos.Z, -100f, 100000f); 3759 lpos.Z = Util.Clip(lpos.Z, -100f, 100000f);
3516 _acceleration.X = 0; 3760 m_acceleration.X = 0;
3517 _acceleration.Y = 0; 3761 m_acceleration.Y = 0;
3518 _acceleration.Z = 0; 3762 m_acceleration.Z = 0;
3519 3763
3520 _velocity.X = 0; 3764 _velocity.X = 0;
3521 _velocity.Y = 0; 3765 _velocity.Y = 0;
@@ -3638,19 +3882,19 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3638 _orientation.W = ori.W; 3882 _orientation.W = ori.W;
3639 } 3883 }
3640 3884
3641 // update velocities and aceleration 3885 // update velocities and acceleration
3642 if (_zeroFlag || lastZeroFlag) 3886 if (_zeroFlag || lastZeroFlag)
3643 { 3887 {
3644 // disable interpolators 3888 // disable interpolators
3645 _velocity = Vector3.Zero; 3889 _velocity = Vector3.Zero;
3646 _acceleration = Vector3.Zero; 3890 m_acceleration = Vector3.Zero;
3647 m_rotationalVelocity = Vector3.Zero; 3891 m_rotationalVelocity = Vector3.Zero;
3648 } 3892 }
3649 else 3893 else
3650 { 3894 {
3651 d.Vector3 vel = d.BodyGetLinearVel(Body); 3895 d.Vector3 vel = d.BodyGetLinearVel(Body);
3652 3896
3653 _acceleration = _velocity; 3897 m_acceleration = _velocity;
3654 3898
3655 if ((Math.Abs(vel.X) < 0.005f) && 3899 if ((Math.Abs(vel.X) < 0.005f) &&
3656 (Math.Abs(vel.Y) < 0.005f) && 3900 (Math.Abs(vel.Y) < 0.005f) &&
@@ -3658,28 +3902,28 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3658 { 3902 {
3659 _velocity = Vector3.Zero; 3903 _velocity = Vector3.Zero;
3660 float t = -m_invTimeStep; 3904 float t = -m_invTimeStep;
3661 _acceleration = _acceleration * t; 3905 m_acceleration = m_acceleration * t;
3662 } 3906 }
3663 else 3907 else
3664 { 3908 {
3665 _velocity.X = vel.X; 3909 _velocity.X = vel.X;
3666 _velocity.Y = vel.Y; 3910 _velocity.Y = vel.Y;
3667 _velocity.Z = vel.Z; 3911 _velocity.Z = vel.Z;
3668 _acceleration = (_velocity - _acceleration) * m_invTimeStep; 3912 m_acceleration = (_velocity - m_acceleration) * m_invTimeStep;
3669 } 3913 }
3670 3914
3671 if ((Math.Abs(_acceleration.X) < 0.01f) && 3915 if ((Math.Abs(m_acceleration.X) < 0.01f) &&
3672 (Math.Abs(_acceleration.Y) < 0.01f) && 3916 (Math.Abs(m_acceleration.Y) < 0.01f) &&
3673 (Math.Abs(_acceleration.Z) < 0.01f)) 3917 (Math.Abs(m_acceleration.Z) < 0.01f))
3674 { 3918 {
3675 _acceleration = Vector3.Zero; 3919 m_acceleration = Vector3.Zero;
3676 } 3920 }
3677 3921
3678 vel = d.BodyGetAngularVel(Body); 3922 vel = d.BodyGetAngularVel(Body);
3679 if ((Math.Abs(vel.X) < 0.0001) && 3923 if ((Math.Abs(vel.X) < 0.0001) &&
3680 (Math.Abs(vel.Y) < 0.0001) && 3924 (Math.Abs(vel.Y) < 0.0001) &&
3681 (Math.Abs(vel.Z) < 0.0001) 3925 (Math.Abs(vel.Z) < 0.0001)
3682 ) 3926 )
3683 { 3927 {
3684 m_rotationalVelocity = Vector3.Zero; 3928 m_rotationalVelocity = Vector3.Zero;
3685 } 3929 }
@@ -3939,6 +4183,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3939 changePIDHoverActive((bool)arg); 4183 changePIDHoverActive((bool)arg);
3940 break; 4184 break;
3941 4185
4186 case changes.SetInertia:
4187 changeInertia((PhysicsInertiaData) arg);
4188 break;
4189
3942 case changes.Null: 4190 case changes.Null:
3943 donullchange(); 4191 donullchange();
3944 break; 4192 break;
@@ -3955,7 +4203,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
3955 _parent_scene.AddChange((PhysicsActor) this, what, arg); 4203 _parent_scene.AddChange((PhysicsActor) this, what, arg);
3956 } 4204 }
3957 4205
3958
3959 private struct strVehicleBoolParam 4206 private struct strVehicleBoolParam
3960 { 4207 {
3961 public int param; 4208 public int param;
diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs
index bed66cc..86d41ea 100644
--- a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs
+++ b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs
@@ -155,6 +155,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
155 VehicleRotationParam, 155 VehicleRotationParam,
156 VehicleFlags, 156 VehicleFlags,
157 SetVehicle, 157 SetVehicle,
158 SetInertia,
158 159
159 Null //keep this last used do dim the methods array. does nothing but pulsing the prim 160 Null //keep this last used do dim the methods array. does nothing but pulsing the prim
160 } 161 }
@@ -185,7 +186,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
185 186
186 float frictionMovementMult = 0.8f; 187 float frictionMovementMult = 0.8f;
187 188
188 float TerrainBounce = 0.1f; 189 float TerrainBounce = 0.001f;
189 float TerrainFriction = 0.3f; 190 float TerrainFriction = 0.3f;
190 191
191 public float AvatarFriction = 0;// 0.9f * 0.5f; 192 public float AvatarFriction = 0;// 0.9f * 0.5f;
@@ -502,7 +503,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
502 503
503 d.WorldSetGravity(world, gravityx, gravityy, gravityz); 504 d.WorldSetGravity(world, gravityx, gravityy, gravityz);
504 505
505 d.WorldSetLinearDamping(world, 0.002f); 506 d.WorldSetLinearDamping(world, 0.001f);
506 d.WorldSetAngularDamping(world, 0.002f); 507 d.WorldSetAngularDamping(world, 0.002f);
507 d.WorldSetAngularDampingThreshold(world, 0f); 508 d.WorldSetAngularDampingThreshold(world, 0f);
508 d.WorldSetLinearDampingThreshold(world, 0f); 509 d.WorldSetLinearDampingThreshold(world, 0f);
@@ -528,6 +529,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
528 SharedTmpcontact.surface.mode = comumContactFlags; 529 SharedTmpcontact.surface.mode = comumContactFlags;
529 SharedTmpcontact.surface.mu = 0; 530 SharedTmpcontact.surface.mu = 0;
530 SharedTmpcontact.surface.bounce = 0; 531 SharedTmpcontact.surface.bounce = 0;
532 SharedTmpcontact.surface.bounce_vel = 1.5f;
531 SharedTmpcontact.surface.soft_cfm = comumContactCFM; 533 SharedTmpcontact.surface.soft_cfm = comumContactCFM;
532 SharedTmpcontact.surface.soft_erp = comumContactERP; 534 SharedTmpcontact.surface.soft_erp = comumContactERP;
533 SharedTmpcontact.surface.slip1 = comumContactSLIP; 535 SharedTmpcontact.surface.slip1 = comumContactSLIP;
@@ -726,8 +728,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
726 if (g1 == g2) 728 if (g1 == g2)
727 return; // Can't collide with yourself 729 return; // Can't collide with yourself
728 730
729 if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact)) 731// if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact))
730 return; 732// return;
731 /* 733 /*
732 // debug 734 // debug
733 PhysicsActor dp2; 735 PhysicsActor dp2;
@@ -1082,9 +1084,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1082 case ActorTypes.Prim: 1084 case ActorTypes.Prim:
1083 if (p2events) 1085 if (p2events)
1084 { 1086 {
1085 AddCollisionEventReporting(p2); 1087 //AddCollisionEventReporting(p2);
1086 p2.AddCollisionEvent(p1.ParentActor.LocalID, contact); 1088 p2.AddCollisionEvent(p1.ParentActor.LocalID, contact);
1087 } 1089 }
1090 else if(p1.IsVolumeDtc)
1091 p2.AddVDTCCollisionEvent(p1.ParentActor.LocalID, contact);
1092
1088 obj2LocalID = p2.ParentActor.LocalID; 1093 obj2LocalID = p2.ParentActor.LocalID;
1089 break; 1094 break;
1090 1095
@@ -1098,9 +1103,16 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1098 { 1103 {
1099 contact.SurfaceNormal = -contact.SurfaceNormal; 1104 contact.SurfaceNormal = -contact.SurfaceNormal;
1100 contact.RelativeSpeed = -contact.RelativeSpeed; 1105 contact.RelativeSpeed = -contact.RelativeSpeed;
1101 AddCollisionEventReporting(p1); 1106 //AddCollisionEventReporting(p1);
1102 p1.AddCollisionEvent(obj2LocalID, contact); 1107 p1.AddCollisionEvent(obj2LocalID, contact);
1103 } 1108 }
1109 else if(p2.IsVolumeDtc)
1110 {
1111 contact.SurfaceNormal = -contact.SurfaceNormal;
1112 contact.RelativeSpeed = -contact.RelativeSpeed;
1113 //AddCollisionEventReporting(p1);
1114 p1.AddVDTCCollisionEvent(obj2LocalID, contact);
1115 }
1104 break; 1116 break;
1105 } 1117 }
1106 case ActorTypes.Ground: 1118 case ActorTypes.Ground:
@@ -1109,7 +1121,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1109 { 1121 {
1110 if (p2events && !p2.IsVolumeDtc) 1122 if (p2events && !p2.IsVolumeDtc)
1111 { 1123 {
1112 AddCollisionEventReporting(p2); 1124 //AddCollisionEventReporting(p2);
1113 p2.AddCollisionEvent(0, contact); 1125 p2.AddCollisionEvent(0, contact);
1114 } 1126 }
1115 break; 1127 break;
@@ -1161,8 +1173,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1161 { 1173 {
1162 aprim.CollisionScore = 0; 1174 aprim.CollisionScore = 0;
1163 aprim.IsColliding = false; 1175 aprim.IsColliding = false;
1176 if(!aprim.m_outbounds && d.BodyIsEnabled(aprim.Body))
1177 aprim.clearSleeperCollisions();
1164 } 1178 }
1165 } 1179 }
1180
1166 lock (_activegroups) 1181 lock (_activegroups)
1167 { 1182 {
1168 try 1183 try
@@ -1657,11 +1672,15 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1657 1672
1658// d.WorldSetQuickStepNumIterations(world, curphysiteractions); 1673// d.WorldSetQuickStepNumIterations(world, curphysiteractions);
1659 1674
1660 int loopstartMS = Util.EnvironmentTickCount(); 1675 double loopstartMS = Util.GetTimeStampMS();
1661 int looptimeMS = 0; 1676 double looptimeMS = 0;
1662 int changestimeMS = 0; 1677 double changestimeMS = 0;
1663 int maxChangestime = (int)(reqTimeStep * 500f); // half the time 1678 double maxChangestime = (int)(reqTimeStep * 500f); // half the time
1664 int maxLoopTime = (int)(reqTimeStep * 1200f); // 1.2 the time 1679 double maxLoopTime = (int)(reqTimeStep * 1200f); // 1.2 the time
1680
1681// double collisionTime = 0;
1682// double qstepTIme = 0;
1683// double tmpTime = 0;
1665 1684
1666 d.AllocateODEDataForThread(~0U); 1685 d.AllocateODEDataForThread(~0U);
1667 1686
@@ -1684,7 +1703,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1684 item.actor.Name, item.what.ToString()); 1703 item.actor.Name, item.what.ToString());
1685 } 1704 }
1686 } 1705 }
1687 changestimeMS = Util.EnvironmentTickCountSubtract(loopstartMS); 1706 changestimeMS = Util.GetTimeStampMS() - loopstartMS;
1688 if (changestimeMS > maxChangestime) 1707 if (changestimeMS > maxChangestime)
1689 break; 1708 break;
1690 } 1709 }
@@ -1729,9 +1748,19 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1729 1748
1730 m_rayCastManager.ProcessQueuedRequests(); 1749 m_rayCastManager.ProcessQueuedRequests();
1731 1750
1751// tmpTime = Util.GetTimeStampMS();
1732 collision_optimized(); 1752 collision_optimized();
1733 List<OdePrim> sleepers = new List<OdePrim>(); 1753// collisionTime += Util.GetTimeStampMS() - tmpTime;
1754
1755 lock(_collisionEventPrimRemove)
1756 {
1757 foreach (PhysicsActor obj in _collisionEventPrimRemove)
1758 _collisionEventPrim.Remove(obj);
1734 1759
1760 _collisionEventPrimRemove.Clear();
1761 }
1762
1763 List<OdePrim> sleepers = new List<OdePrim>();
1735 foreach (PhysicsActor obj in _collisionEventPrim) 1764 foreach (PhysicsActor obj in _collisionEventPrim)
1736 { 1765 {
1737 if (obj == null) 1766 if (obj == null)
@@ -1761,18 +1790,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1761 foreach(OdePrim prm in sleepers) 1790 foreach(OdePrim prm in sleepers)
1762 prm.SleeperAddCollisionEvents(); 1791 prm.SleeperAddCollisionEvents();
1763 sleepers.Clear(); 1792 sleepers.Clear();
1764 1793
1765 lock(_collisionEventPrimRemove)
1766 {
1767 foreach (PhysicsActor obj in _collisionEventPrimRemove)
1768 _collisionEventPrim.Remove(obj);
1769
1770 _collisionEventPrimRemove.Clear();
1771 }
1772
1773 // do a ode simulation step 1794 // do a ode simulation step
1795// tmpTime = Util.GetTimeStampMS();
1774 d.WorldQuickStep(world, ODE_STEPSIZE); 1796 d.WorldQuickStep(world, ODE_STEPSIZE);
1775 d.JointGroupEmpty(contactgroup); 1797 d.JointGroupEmpty(contactgroup);
1798// qstepTIme += Util.GetTimeStampMS() - tmpTime;
1776 1799
1777 // update managed ideia of physical data and do updates to core 1800 // update managed ideia of physical data and do updates to core
1778 /* 1801 /*
@@ -1813,7 +1836,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1813 step_time -= ODE_STEPSIZE; 1836 step_time -= ODE_STEPSIZE;
1814 nodeframes++; 1837 nodeframes++;
1815 1838
1816 looptimeMS = Util.EnvironmentTickCountSubtract(loopstartMS); 1839 looptimeMS = Util.GetTimeStampMS() - loopstartMS;
1817 if (looptimeMS > maxLoopTime) 1840 if (looptimeMS > maxLoopTime)
1818 break; 1841 break;
1819 } 1842 }
@@ -1882,6 +1905,14 @@ namespace OpenSim.Region.PhysicsModule.ubOde
1882 int nbodies = d.NTotalBodies; 1905 int nbodies = d.NTotalBodies;
1883 int ngeoms = d.NTotalGeoms; 1906 int ngeoms = d.NTotalGeoms;
1884*/ 1907*/
1908/*
1909 looptimeMS /= nodeframes;
1910 if(looptimeMS > 0.080)
1911 {
1912 collisionTime /= nodeframes;
1913 qstepTIme /= nodeframes;
1914 }
1915*/
1885 // Finished with all sim stepping. If requested, dump world state to file for debugging. 1916 // Finished with all sim stepping. If requested, dump world state to file for debugging.
1886 // TODO: This call to the export function is already inside lock (OdeLock) - but is an extra lock needed? 1917 // TODO: This call to the export function is already inside lock (OdeLock) - but is an extra lock needed?
1887 // TODO: This overwrites all dump files in-place. Should this be a growing logfile, or separate snapshots? 1918 // TODO: This overwrites all dump files in-place. Should this be a growing logfile, or separate snapshots?
diff --git a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
index 163f439..0117800 100644
--- a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
+++ b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
@@ -454,7 +454,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
454 454
455 if (physicsParms == null) 455 if (physicsParms == null)
456 { 456 {
457 m_log.WarnFormat("[MESH]: unknown mesh type for prim {0}",primName); 457 //m_log.WarnFormat("[MESH]: unknown mesh type for prim {0}",primName);
458 return false; 458 return false;
459 } 459 }
460 460
@@ -712,7 +712,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
712 else 712 else
713 { 713 {
714 // if neither mesh or decomposition present, warn and use convex 714 // if neither mesh or decomposition present, warn and use convex
715 m_log.WarnFormat("[MESH]: Data for PRIM shape type ( mesh or decomposition) not found for prim {0}",primName); 715 //m_log.WarnFormat("[MESH]: Data for PRIM shape type ( mesh or decomposition) not found for prim {0}",primName);
716 } 716 }
717 } 717 }
718 vs.Clear(); 718 vs.Clear();
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index ad7fc6c..47c3cb8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -424,6 +424,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
424 return lease; 424 return lease;
425 } 425 }
426 426
427 protected SceneObjectPart MonitoringObject()
428 {
429 UUID m = m_host.ParentGroup.MonitoringObject;
430 if (m == UUID.Zero)
431 return null;
432
433 SceneObjectPart p = m_ScriptEngine.World.GetSceneObjectPart(m);
434 if (p == null)
435 m_host.ParentGroup.MonitoringObject = UUID.Zero;
436
437 return p;
438 }
439
427 protected virtual void ScriptSleep(int delay) 440 protected virtual void ScriptSleep(int delay)
428 { 441 {
429 delay = (int)((float)delay * m_ScriptDelayFactor); 442 delay = (int)((float)delay * m_ScriptDelayFactor);
@@ -481,12 +494,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
481 { 494 {
482 UUID item; 495 UUID item;
483 496
484 m_host.AddScriptLPS(1); 497 if ((item = GetScriptByName(name)) == UUID.Zero)
485 498 {
486 if ((item = GetScriptByName(name)) != UUID.Zero) 499 m_host.AddScriptLPS(1);
487 m_ScriptEngine.ResetScript(item);
488 else
489 Error("llResetOtherScript", "Can't find script '" + name + "'"); 500 Error("llResetOtherScript", "Can't find script '" + name + "'");
501 return;
502 }
503 if(item == m_item.ItemID)
504 llResetScript();
505 else
506 {
507 m_host.AddScriptLPS(1);
508 m_ScriptEngine.ResetScript(item);
509 }
490 } 510 }
491 511
492 public LSL_Integer llGetScriptState(string name) 512 public LSL_Integer llGetScriptState(string name)
@@ -2712,9 +2732,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2712 /// <param name="adjust">if TRUE, will cap the distance to 10m.</param> 2732 /// <param name="adjust">if TRUE, will cap the distance to 10m.</param>
2713 protected void SetPos(SceneObjectPart part, LSL_Vector targetPos, bool adjust) 2733 protected void SetPos(SceneObjectPart part, LSL_Vector targetPos, bool adjust)
2714 { 2734 {
2715 if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) 2735 if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted || part.ParentGroup.inTransit)
2716 return; 2736 return;
2717 2737
2738
2718 LSL_Vector currentPos = GetPartLocalPos(part); 2739 LSL_Vector currentPos = GetPartLocalPos(part);
2719 LSL_Vector toPos = GetSetPosTarget(part, targetPos, currentPos, adjust); 2740 LSL_Vector toPos = GetSetPosTarget(part, targetPos, currentPos, adjust);
2720 2741
@@ -2722,7 +2743,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2722 if (part.ParentGroup.RootPart == part) 2743 if (part.ParentGroup.RootPart == part)
2723 { 2744 {
2724 SceneObjectGroup parent = part.ParentGroup; 2745 SceneObjectGroup parent = part.ParentGroup;
2725 if (!parent.IsAttachment && !World.Permissions.CanObjectEntry(parent.UUID, false, (Vector3)toPos)) 2746 if (!parent.IsAttachment && !World.Permissions.CanObjectEntry(parent, false, (Vector3)toPos))
2726 return; 2747 return;
2727 parent.UpdateGroupPosition((Vector3)toPos); 2748 parent.UpdateGroupPosition((Vector3)toPos);
2728 } 2749 }
@@ -5738,29 +5759,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5738 { 5759 {
5739 m_host.AddScriptLPS(1); 5760 m_host.AddScriptLPS(1);
5740 if (index < 0) 5761 if (index < 0)
5741 {
5742 index = src.Length + index; 5762 index = src.Length + index;
5743 } 5763
5744 if (index >= src.Length || index < 0) 5764 if (index >= src.Length || index < 0)
5745 {
5746 return 0; 5765 return 0;
5747 } 5766
5767 object item = src.Data[index];
5748 5768
5749 // Vectors & Rotations always return zero in SL, but 5769 // Vectors & Rotations always return zero in SL, but
5750 // keys don't always return zero, it seems to be a bit complex. 5770 // keys don't always return zero, it seems to be a bit complex.
5751 else if (src.Data[index] is LSL_Vector || 5771 if (item is LSL_Vector || item is LSL_Rotation)
5752 src.Data[index] is LSL_Rotation)
5753 {
5754 return 0; 5772 return 0;
5755 } 5773
5756 try 5774 try
5757 { 5775 {
5758 5776 if (item is LSL_Integer)
5759 if (src.Data[index] is LSL_Integer) 5777 return (LSL_Integer)item;
5760 return (LSL_Integer)src.Data[index]; 5778 else if (item is LSL_Float)
5761 else if (src.Data[index] is LSL_Float) 5779 return Convert.ToInt32(((LSL_Float)item).value);;
5762 return Convert.ToInt32(((LSL_Float)src.Data[index]).value); 5780 return new LSL_Integer(item.ToString());
5763 return new LSL_Integer(src.Data[index].ToString());
5764 } 5781 }
5765 catch (FormatException) 5782 catch (FormatException)
5766 { 5783 {
@@ -5772,38 +5789,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5772 { 5789 {
5773 m_host.AddScriptLPS(1); 5790 m_host.AddScriptLPS(1);
5774 if (index < 0) 5791 if (index < 0)
5775 {
5776 index = src.Length + index; 5792 index = src.Length + index;
5777 } 5793
5778 if (index >= src.Length || index < 0) 5794 if (index >= src.Length || index < 0)
5779 { 5795 return 0;
5780 return 0.0; 5796
5781 } 5797 object item = src.Data[index];
5782 5798
5783 // Vectors & Rotations always return zero in SL 5799 // Vectors & Rotations always return zero in SL
5784 else if (src.Data[index] is LSL_Vector || 5800 if(item is LSL_Vector || item is LSL_Rotation)
5785 src.Data[index] is LSL_Rotation)
5786 {
5787 return 0; 5801 return 0;
5788 } 5802
5789 // valid keys seem to get parsed as integers then converted to floats 5803 // valid keys seem to get parsed as integers then converted to floats
5790 else 5804 if (item is LSL_Key)
5791 { 5805 {
5792 UUID uuidt; 5806 UUID uuidt;
5793 if (src.Data[index] is LSL_Key && UUID.TryParse(src.Data[index].ToString(), out uuidt)) 5807 string s = item.ToString();
5794 { 5808 if(UUID.TryParse(s, out uuidt))
5795 return Convert.ToDouble(new LSL_Integer(src.Data[index].ToString()).value); 5809 return Convert.ToDouble(new LSL_Integer(s).value);
5796 } 5810// we can't do this because a string is also a LSL_Key for now :(
5811// else
5812// return 0;
5797 } 5813 }
5814
5798 try 5815 try
5799 { 5816 {
5800 if (src.Data[index] is LSL_Integer) 5817 if (item is LSL_Integer)
5801 return Convert.ToDouble(((LSL_Integer)src.Data[index]).value); 5818 return Convert.ToDouble(((LSL_Integer)item).value);
5802 else if (src.Data[index] is LSL_Float) 5819 else if (item is LSL_Float)
5803 return Convert.ToDouble(((LSL_Float)src.Data[index]).value); 5820 return Convert.ToDouble(((LSL_Float)item).value);
5804 else if (src.Data[index] is LSL_String) 5821 else if (item is LSL_String)
5805 { 5822 {
5806 string str = ((LSL_String) src.Data[index]).m_string; 5823 string str = ((LSL_String)item).m_string;
5807 Match m = Regex.Match(str, "^\\s*(-?\\+?[,0-9]+\\.?[0-9]*)"); 5824 Match m = Regex.Match(str, "^\\s*(-?\\+?[,0-9]+\\.?[0-9]*)");
5808 if (m != Match.Empty) 5825 if (m != Match.Empty)
5809 { 5826 {
@@ -5811,12 +5828,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5811 double d = 0.0; 5828 double d = 0.0;
5812 if (!Double.TryParse(str, out d)) 5829 if (!Double.TryParse(str, out d))
5813 return 0.0; 5830 return 0.0;
5814
5815 return d; 5831 return d;
5816 } 5832 }
5817 return 0.0; 5833 return 0.0;
5818 } 5834 }
5819 return Convert.ToDouble(src.Data[index]); 5835 return Convert.ToDouble(item);
5820 } 5836 }
5821 catch (FormatException) 5837 catch (FormatException)
5822 { 5838 {
@@ -5828,13 +5844,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5828 { 5844 {
5829 m_host.AddScriptLPS(1); 5845 m_host.AddScriptLPS(1);
5830 if (index < 0) 5846 if (index < 0)
5831 {
5832 index = src.Length + index; 5847 index = src.Length + index;
5833 } 5848
5834 if (index >= src.Length || index < 0) 5849 if (index >= src.Length || index < 0)
5835 {
5836 return String.Empty; 5850 return String.Empty;
5837 } 5851
5838 return src.Data[index].ToString(); 5852 return src.Data[index].ToString();
5839 } 5853 }
5840 5854
@@ -5842,14 +5856,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5842 { 5856 {
5843 m_host.AddScriptLPS(1); 5857 m_host.AddScriptLPS(1);
5844 if (index < 0) 5858 if (index < 0)
5845 {
5846 index = src.Length + index; 5859 index = src.Length + index;
5847 }
5848 5860
5849 if (index >= src.Length || index < 0) 5861 if (index >= src.Length || index < 0)
5850 { 5862 return String.Empty;
5851 return ""; 5863
5852 } 5864 object item = src.Data[index];
5853 5865
5854 // SL spits out an empty string for types other than key & string 5866 // SL spits out an empty string for types other than key & string
5855 // At the time of patching, LSL_Key is currently LSL_String, 5867 // At the time of patching, LSL_Key is currently LSL_String,
@@ -5858,31 +5870,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5858 // as it's own struct 5870 // as it's own struct
5859 // NOTE: 3rd case is needed because a NULL_KEY comes through as 5871 // NOTE: 3rd case is needed because a NULL_KEY comes through as
5860 // type 'obj' and wrongly returns "" 5872 // type 'obj' and wrongly returns ""
5861 else if (!(src.Data[index] is LSL_String || 5873 if (!(item is LSL_String ||
5862 src.Data[index] is LSL_Key || 5874 item is LSL_Key ||
5863 src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000")) 5875 item.ToString() == "00000000-0000-0000-0000-000000000000"))
5864 { 5876 {
5865 return ""; 5877 return String.Empty;
5866 } 5878 }
5867 5879
5868 return src.Data[index].ToString(); 5880 return item.ToString();
5869 } 5881 }
5870 5882
5871 public LSL_Vector llList2Vector(LSL_List src, int index) 5883 public LSL_Vector llList2Vector(LSL_List src, int index)
5872 { 5884 {
5873 m_host.AddScriptLPS(1); 5885 m_host.AddScriptLPS(1);
5874 if (index < 0) 5886 if (index < 0)
5875 {
5876 index = src.Length + index; 5887 index = src.Length + index;
5877 } 5888
5878 if (index >= src.Length || index < 0) 5889 if (index >= src.Length || index < 0)
5879 {
5880 return new LSL_Vector(0, 0, 0); 5890 return new LSL_Vector(0, 0, 0);
5881 } 5891
5882 if (src.Data[index].GetType() == typeof(LSL_Vector)) 5892 object item = src.Data[index];
5883 { 5893
5884 return (LSL_Vector)src.Data[index]; 5894 if (item.GetType() == typeof(LSL_Vector))
5885 } 5895 return (LSL_Vector)item;
5886 5896
5887 // SL spits always out ZERO_VECTOR for anything other than 5897 // SL spits always out ZERO_VECTOR for anything other than
5888 // strings or vectors. Although keys always return ZERO_VECTOR, 5898 // strings or vectors. Although keys always return ZERO_VECTOR,
@@ -5890,28 +5900,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5890 // a string, a key as string and a string that by coincidence 5900 // a string, a key as string and a string that by coincidence
5891 // is a string, so we're going to leave that up to the 5901 // is a string, so we're going to leave that up to the
5892 // LSL_Vector constructor. 5902 // LSL_Vector constructor.
5893 else if (!(src.Data[index] is LSL_String || 5903 if(item is LSL_Vector)
5894 src.Data[index] is LSL_Vector)) 5904 return (LSL_Vector) item;
5895 { 5905
5896 return new LSL_Vector(0, 0, 0); 5906 if (item is LSL_String)
5897 } 5907 return new LSL_Vector(item.ToString());
5898 else 5908
5899 { 5909 return new LSL_Vector(0, 0, 0);
5900 return new LSL_Vector(src.Data[index].ToString());
5901 }
5902 } 5910 }
5903 5911
5904 public LSL_Rotation llList2Rot(LSL_List src, int index) 5912 public LSL_Rotation llList2Rot(LSL_List src, int index)
5905 { 5913 {
5906 m_host.AddScriptLPS(1); 5914 m_host.AddScriptLPS(1);
5907 if (index < 0) 5915 if (index < 0)
5908 {
5909 index = src.Length + index; 5916 index = src.Length + index;
5910 } 5917
5911 if (index >= src.Length || index < 0) 5918 if (index >= src.Length || index < 0)
5912 {
5913 return new LSL_Rotation(0, 0, 0, 1); 5919 return new LSL_Rotation(0, 0, 0, 1);
5914 } 5920
5921 object item = src.Data[index];
5915 5922
5916 // SL spits always out ZERO_ROTATION for anything other than 5923 // SL spits always out ZERO_ROTATION for anything other than
5917 // strings or vectors. Although keys always return ZERO_ROTATION, 5924 // strings or vectors. Although keys always return ZERO_ROTATION,
@@ -5919,19 +5926,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5919 // a string, a key as string and a string that by coincidence 5926 // a string, a key as string and a string that by coincidence
5920 // is a string, so we're going to leave that up to the 5927 // is a string, so we're going to leave that up to the
5921 // LSL_Rotation constructor. 5928 // LSL_Rotation constructor.
5922 else if (!(src.Data[index] is LSL_String || 5929
5923 src.Data[index] is LSL_Rotation)) 5930 if (item.GetType() == typeof(LSL_Rotation))
5924 { 5931 return (LSL_Rotation)item;
5925 return new LSL_Rotation(0, 0, 0, 1); 5932
5926 } 5933 if (item is LSL_String)
5927 else if (src.Data[index].GetType() == typeof(LSL_Rotation))
5928 {
5929 return (LSL_Rotation)src.Data[index];
5930 }
5931 else
5932 {
5933 return new LSL_Rotation(src.Data[index].ToString()); 5934 return new LSL_Rotation(src.Data[index].ToString());
5934 } 5935
5936 return new LSL_Rotation(0, 0, 0, 1);
5935 } 5937 }
5936 5938
5937 public LSL_List llList2List(LSL_List src, int start, int end) 5939 public LSL_List llList2List(LSL_List src, int start, int end)
@@ -7963,7 +7965,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7963 public LSL_Integer llScriptDanger(LSL_Vector pos) 7965 public LSL_Integer llScriptDanger(LSL_Vector pos)
7964 { 7966 {
7965 m_host.AddScriptLPS(1); 7967 m_host.AddScriptLPS(1);
7966 bool result = World.ScriptDanger(m_host.LocalId, pos); 7968 bool result = World.LSLScriptDanger(m_host, pos);
7967 if (result) 7969 if (result)
7968 { 7970 {
7969 return 1; 7971 return 1;
@@ -7972,7 +7974,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7972 { 7974 {
7973 return 0; 7975 return 0;
7974 } 7976 }
7975
7976 } 7977 }
7977 7978
7978 public void llDialog(string avatar, string message, LSL_List buttons, int chat_channel) 7979 public void llDialog(string avatar, string message, LSL_List buttons, int chat_channel)
@@ -8849,10 +8850,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8849 } 8850 }
8850 8851
8851 public void llSetPhysicsMaterial(int material_bits, 8852 public void llSetPhysicsMaterial(int material_bits,
8852 float material_gravity_modifier, float material_restitution, 8853 LSL_Float material_gravity_modifier, LSL_Float material_restitution,
8853 float material_friction, float material_density) 8854 LSL_Float material_friction, LSL_Float material_density)
8854 { 8855 {
8855 SetPhysicsMaterial(m_host, material_bits, material_density, material_friction, material_restitution, material_gravity_modifier); 8856 SetPhysicsMaterial(m_host, material_bits, (float)material_density, (float)material_friction, (float)material_restitution, (float)material_gravity_modifier);
8856 } 8857 }
8857 8858
8858 // vector up using libomv (c&p from sop ) 8859 // vector up using libomv (c&p from sop )
@@ -11297,6 +11298,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11297 } 11298 }
11298 break; 11299 break;
11299 11300
11301 case (int)ScriptBaseClass.PRIM_NORMAL:
11302 case (int)ScriptBaseClass.PRIM_SPECULAR:
11303 case (int)ScriptBaseClass.PRIM_ALPHA_MODE:
11304 if (remain < 1)
11305 return new LSL_List();
11306
11307 face = (int)rules.GetLSLIntegerItem(idx++);
11308 tex = part.Shape.Textures;
11309 if (face == ScriptBaseClass.ALL_SIDES)
11310 {
11311 for (face = 0; face < GetNumberOfSides(part); face++)
11312 {
11313 Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
11314 getLSLFaceMaterial(ref res, code, part, texface);
11315 }
11316 }
11317 else
11318 {
11319 if (face >= 0 && face < GetNumberOfSides(part))
11320 {
11321 Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
11322 getLSLFaceMaterial(ref res, code, part, texface);
11323 }
11324 }
11325 break;
11326
11300 case (int)ScriptBaseClass.PRIM_LINK_TARGET: 11327 case (int)ScriptBaseClass.PRIM_LINK_TARGET:
11301 11328
11302 // TODO: Should be issuing a runtime script warning in this case. 11329 // TODO: Should be issuing a runtime script warning in this case.
@@ -11310,6 +11337,108 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11310 return new LSL_List(); 11337 return new LSL_List();
11311 } 11338 }
11312 11339
11340/*
11341 private string filterTextureUUIDbyRights(UUID origID, SceneObjectPart part, bool checkTaskInventory, bool returnInvName)
11342 {
11343 if(checkTaskInventory)
11344 {
11345 lock (part.TaskInventory)
11346 {
11347 foreach (KeyValuePair<UUID, TaskInventoryItem> inv in part.TaskInventory)
11348 {
11349 if (inv.Value.AssetID == origID)
11350 {
11351 if(inv.Value.InvType == (int)InventoryType.Texture)
11352 {
11353 if(returnInvName)
11354 return inv.Value.Name;
11355 else
11356 return origID.ToString();
11357 }
11358 else
11359 return UUID.Zero.ToString();
11360 }
11361 }
11362 }
11363 }
11364
11365 if(World.Permissions.CanEditObject(m_host.ParentGroup.UUID, m_host.ParentGroup.RootPart.OwnerID))
11366 return origID.ToString();
11367
11368 return UUID.Zero.ToString();
11369 }
11370*/
11371 private void getLSLFaceMaterial(ref LSL_List res, int code, SceneObjectPart part, Primitive.TextureEntryFace texface)
11372 {
11373 UUID matID = texface.MaterialID;
11374 if(matID != UUID.Zero)
11375 {
11376 AssetBase MatAsset = World.AssetService.Get(matID.ToString());
11377 if(MatAsset != null)
11378 {
11379 Byte[] data = MatAsset.Data;
11380 OSDMap osdmat = (OSDMap)OSDParser.DeserializeLLSDXml(data);
11381 if(osdmat != null && osdmat.ContainsKey("NormMap"))
11382 {
11383 string mapIDstr;
11384 FaceMaterial mat = new FaceMaterial(matID, osdmat);
11385 if(code == ScriptBaseClass.PRIM_NORMAL)
11386 {
11387// mapIDstr = filterTextureUUIDbyRights(mat.NormalMapID, part, true, false);
11388 mapIDstr = mat.NormalMapID.ToString();
11389 res.Add(new LSL_String(mapIDstr));
11390 res.Add(new LSL_Vector(mat.NormalRepeatX, mat.NormalRepeatY, 0));
11391 res.Add(new LSL_Vector(mat.NormalOffsetX, mat.NormalOffsetY, 0));
11392 res.Add(new LSL_Float(mat.NormalRotation));
11393 }
11394 else if(code == ScriptBaseClass.PRIM_SPECULAR )
11395 {
11396// mapIDstr = filterTextureUUIDbyRights(mat.SpecularMapID, part, true, false);
11397 const float colorScale = 1.0f/255f;
11398 mapIDstr = mat.SpecularMapID.ToString();
11399 res.Add(new LSL_String(mapIDstr));
11400 res.Add(new LSL_Vector(mat.SpecularRepeatX, mat.SpecularRepeatY, 0));
11401 res.Add(new LSL_Vector(mat.SpecularOffsetX, mat.SpecularOffsetY, 0));
11402 res.Add(new LSL_Float(mat.SpecularRotation));
11403 res.Add(new LSL_Vector(mat.SpecularLightColor.R * colorScale,
11404 mat.SpecularLightColor.G * colorScale,
11405 mat.SpecularLightColor.B * colorScale));
11406 res.Add(new LSL_Integer(mat.SpecularLightExponent));
11407 res.Add(new LSL_Integer(mat.EnvironmentIntensity));
11408 }
11409 else if(code == ScriptBaseClass.PRIM_ALPHA_MODE)
11410 {
11411 res.Add(new LSL_Integer(mat.DiffuseAlphaMode));
11412 res.Add(new LSL_Integer(mat.AlphaMaskCutoff));
11413 }
11414 return;
11415 }
11416 }
11417 matID = UUID.Zero;
11418 }
11419 if(matID == UUID.Zero)
11420 {
11421 if(code == (int)ScriptBaseClass.PRIM_NORMAL || code == (int)ScriptBaseClass.PRIM_SPECULAR )
11422 {
11423 res.Add(new LSL_String(UUID.Zero.ToString()));
11424 res.Add(new LSL_Vector(1.0, 1.0, 0));
11425 res.Add(new LSL_Vector(0, 0, 0));
11426 res.Add(new LSL_Float(0));
11427
11428 if(code == (int)ScriptBaseClass.PRIM_SPECULAR)
11429 {
11430 res.Add(new LSL_Vector(1.0, 1.0, 1.0));
11431 res.Add(new LSL_Integer(51));
11432 res.Add(new LSL_Integer(0));
11433 }
11434 }
11435 else if(code == (int)ScriptBaseClass.PRIM_ALPHA_MODE)
11436 {
11437 res.Add(new LSL_Integer(1));
11438 res.Add(new LSL_Integer(0));
11439 }
11440 }
11441 }
11313 11442
11314 public LSL_List llGetPrimMediaParams(int face, LSL_List rules) 11443 public LSL_List llGetPrimMediaParams(int face, LSL_List rules)
11315 { 11444 {
@@ -15867,7 +15996,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
15867 return; 15996 return;
15868 } 15997 }
15869 15998
15870 group.RootPart.AttachPoint = group.RootPart.Shape.State;
15871 group.RootPart.AttachedPos = group.AbsolutePosition; 15999 group.RootPart.AttachedPos = group.AbsolutePosition;
15872 16000
15873 group.ResetIDs(); 16001 group.ResetIDs();
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index e769c6d..e12cedf 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -260,7 +260,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
260 wComm.DeliverMessage(ChatTypeEnum.Shout, ScriptBaseClass.DEBUG_CHANNEL, m_host.Name, m_host.UUID, message); 260 wComm.DeliverMessage(ChatTypeEnum.Shout, ScriptBaseClass.DEBUG_CHANNEL, m_host.Name, m_host.UUID, message);
261 } 261 }
262 262
263 // Returns of the function is allowed. Throws a script exception if not allowed. 263 // Returns if OSSL is enabled. Throws a script exception if OSSL is not allowed..
264 // for safe funtions always active
265 public void CheckThreatLevel()
266 {
267 if (!m_OSFunctionsEnabled)
268 OSSLError(String.Format("{0} permission denied. All OS functions are disabled.")); // throws
269 }
270
271 // Returns if the function is allowed. Throws a script exception if not allowed.
264 public void CheckThreatLevel(ThreatLevel level, string function) 272 public void CheckThreatLevel(ThreatLevel level, string function)
265 { 273 {
266 if (!m_OSFunctionsEnabled) 274 if (!m_OSFunctionsEnabled)
@@ -1716,7 +1724,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1716 1724
1717 public LSL_Integer osCheckODE() 1725 public LSL_Integer osCheckODE()
1718 { 1726 {
1727 CheckThreatLevel();
1719 m_host.AddScriptLPS(1); 1728 m_host.AddScriptLPS(1);
1729
1720 LSL_Integer ret = 0; // false 1730 LSL_Integer ret = 0; // false
1721 if (m_ScriptEngine.World.PhysicsScene != null) 1731 if (m_ScriptEngine.World.PhysicsScene != null)
1722 { 1732 {
@@ -1757,10 +1767,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1757 1767
1758 public string osGetPhysicsEngineName() 1768 public string osGetPhysicsEngineName()
1759 { 1769 {
1760 // not doing security checks 1770 CheckThreatLevel();
1761 // this whould limit the use of this
1762
1763 m_host.AddScriptLPS(1); 1771 m_host.AddScriptLPS(1);
1772
1764 string ret = "NoEngine"; 1773 string ret = "NoEngine";
1765 if (m_ScriptEngine.World.PhysicsScene != null) 1774 if (m_ScriptEngine.World.PhysicsScene != null)
1766 { 1775 {
@@ -1771,6 +1780,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1771 } 1780 }
1772 return ret; 1781 return ret;
1773 } 1782 }
1783
1774 public string osGetSimulatorVersion() 1784 public string osGetSimulatorVersion()
1775 { 1785 {
1776 // High because it can be used to target attacks to known weaknesses 1786 // High because it can be used to target attacks to known weaknesses
@@ -2038,6 +2048,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2038 m_host.Inventory.AddInventoryItemExclusive(taskItem, false); 2048 m_host.Inventory.AddInventoryItemExclusive(taskItem, false);
2039 else 2049 else
2040 m_host.Inventory.AddInventoryItem(taskItem, false); 2050 m_host.Inventory.AddInventoryItem(taskItem, false);
2051 m_host.ParentGroup.AggregatePerms();
2041 2052
2042 return taskItem; 2053 return taskItem;
2043 } 2054 }
@@ -3537,7 +3548,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3537 3548
3538 LSL_Float health = new LSL_Float(-1); 3549 LSL_Float health = new LSL_Float(-1);
3539 ScenePresence presence = World.GetScenePresence(new UUID(avatar)); 3550 ScenePresence presence = World.GetScenePresence(new UUID(avatar));
3540 if (presence != null) health = presence.Health; 3551 if (presence != null)
3552 health = presence.Health;
3541 return health; 3553 return health;
3542 } 3554 }
3543 3555
@@ -3577,7 +3589,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3577 UUID avatarId = new UUID(avatar); 3589 UUID avatarId = new UUID(avatar);
3578 ScenePresence presence = World.GetScenePresence(avatarId); 3590 ScenePresence presence = World.GetScenePresence(avatarId);
3579 3591
3580 if (presence != null && World.ScriptDanger(m_host.LocalId, m_host.GetWorldPosition())) 3592 if (presence != null)
3581 { 3593 {
3582 float health = presence.Health; 3594 float health = presence.Health;
3583 health += (float)healing; 3595 health += (float)healing;
@@ -3597,7 +3609,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3597 UUID avatarId = new UUID(avatar); 3609 UUID avatarId = new UUID(avatar);
3598 ScenePresence presence = World.GetScenePresence(avatarId); 3610 ScenePresence presence = World.GetScenePresence(avatarId);
3599 3611
3600 if (presence != null && World.ScriptDanger(m_host.LocalId, m_host.GetWorldPosition())) 3612 if (presence != null)
3601 { 3613 {
3602 if (health > 100.0) 3614 if (health > 100.0)
3603 health = 100.0; 3615 health = 100.0;
@@ -3616,7 +3628,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3616 UUID avatarId = new UUID(avatar); 3628 UUID avatarId = new UUID(avatar);
3617 ScenePresence presence = World.GetScenePresence(avatarId); 3629 ScenePresence presence = World.GetScenePresence(avatarId);
3618 3630
3619 if (presence != null && World.ScriptDanger(m_host.LocalId, m_host.GetWorldPosition())) 3631 if (presence != null)
3620 presence.HealRate = (float)healrate; 3632 presence.HealRate = (float)healrate;
3621 } 3633 }
3622 3634
@@ -4362,6 +4374,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4362 4374
4363 public void osCollisionSound(string impact_sound, double impact_volume) 4375 public void osCollisionSound(string impact_sound, double impact_volume)
4364 { 4376 {
4377 CheckThreatLevel();
4365 m_host.AddScriptLPS(1); 4378 m_host.AddScriptLPS(1);
4366 4379
4367 if(impact_sound == "") 4380 if(impact_sound == "")
@@ -4394,6 +4407,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4394 // still not very usefull, detector is lost on rez, restarts, etc 4407 // still not very usefull, detector is lost on rez, restarts, etc
4395 public void osVolumeDetect(int detect) 4408 public void osVolumeDetect(int detect)
4396 { 4409 {
4410 CheckThreatLevel();
4397 m_host.AddScriptLPS(1); 4411 m_host.AddScriptLPS(1);
4398 4412
4399 if (m_host.ParentGroup == null || m_host.ParentGroup.IsDeleted || m_host.ParentGroup.IsAttachment) 4413 if (m_host.ParentGroup == null || m_host.ParentGroup.IsDeleted || m_host.ParentGroup.IsAttachment)
@@ -4402,5 +4416,285 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4402 m_host.ScriptSetVolumeDetect(detect != 0); 4416 m_host.ScriptSetVolumeDetect(detect != 0);
4403 } 4417 }
4404 4418
4419 /// <summary>
4420 /// Get inertial data
4421 /// </summary>
4422 /// <remarks>
4423 /// </remarks>
4424 /// <returns>
4425 /// a LSL list with contents:
4426 /// LSL_Float mass, the total mass of a linkset
4427 /// LSL_Vector CenterOfMass, center mass relative to root prim
4428 /// LSL_Vector Inertia, elements of diagonal of inertia Ixx,Iyy,Izz divided by total mass
4429 /// LSL_Vector aux, elements of upper triagle of inertia Ixy (= Iyx), Ixz (= Izx), Iyz(= Izy) divided by total mass
4430 /// </returns>
4431 public LSL_List osGetInertiaData()
4432 {
4433 CheckThreatLevel();
4434 m_host.AddScriptLPS(1);
4435
4436 LSL_List result = new LSL_List();
4437 float TotalMass;
4438 Vector3 CenterOfMass;
4439 Vector3 Inertia;
4440 Vector4 aux;
4441
4442 SceneObjectGroup sog = m_host.ParentGroup;
4443 if(sog== null || sog.IsDeleted)
4444 return result;
4445
4446 sog.GetInertiaData(out TotalMass, out CenterOfMass, out Inertia, out aux );
4447 if(TotalMass > 0)
4448 {
4449 float t = 1.0f/TotalMass;
4450 Inertia.X *= t;
4451 Inertia.Y *= t;
4452 Inertia.Z *= t;
4453
4454 aux.X *= t;
4455 aux.Y *= t;
4456 aux.Z *= t;
4457 }
4458
4459 result.Add(new LSL_Float(TotalMass));
4460 result.Add(new LSL_Vector(CenterOfMass.X, CenterOfMass.Y, CenterOfMass.Z));
4461 result.Add(new LSL_Vector(Inertia.X, Inertia.Y, Inertia.Z));
4462 result.Add(new LSL_Vector(aux.X, aux.Y, aux.Z));
4463 return result;
4464 }
4465
4466 /// <summary>
4467 /// set inertial data
4468 /// replaces the automatic calculation of mass, center of mass and inertia
4469 ///
4470 /// </summary>
4471 /// <param name="Mass">total mass of linkset</param>
4472 /// <param name="centerOfMass">location of center of mass relative to root prim in local coords</param>
4473 /// <param name="principalInertiaScaled">moment of inertia relative to principal axis and center of mass,Ixx, Iyy, Izz divided by mass</param>
4474 /// <param name="lslrot">rotation of the inertia, relative to local axis</param>
4475 /// <remarks>
4476 /// the inertia argument is is inertia divided by mass, so corresponds only to the geometric distribution of mass and both can be changed independently.
4477 /// </remarks>
4478
4479 public void osSetInertia(LSL_Float mass, LSL_Vector centerOfMass, LSL_Vector principalInertiaScaled, LSL_Rotation lslrot)
4480 {
4481 CheckThreatLevel();
4482 m_host.AddScriptLPS(1);
4483
4484 SceneObjectGroup sog = m_host.ParentGroup;
4485 if(sog== null || sog.IsDeleted)
4486 return;
4487
4488 if(mass < 0 || principalInertiaScaled.x < 0 || principalInertiaScaled.y < 0 || principalInertiaScaled.z < 0)
4489 return;
4490
4491 // need more checks
4492
4493 Vector3 CenterOfMass = new Vector3((float)centerOfMass.x,(float)centerOfMass.y,(float)centerOfMass.z);
4494 Vector3 Inertia;
4495 float m = (float)mass;
4496
4497 Inertia.X = m * (float)principalInertiaScaled.x;
4498 Inertia.Y = m * (float)principalInertiaScaled.y;
4499 Inertia.Z = m * (float)principalInertiaScaled.z;
4500
4501 Vector4 rot = new Vector4((float)lslrot.x, (float)lslrot.y, (float)lslrot.y, (float)lslrot.s);
4502 rot.Normalize();
4503
4504 sog.SetInertiaData(m, CenterOfMass, Inertia, rot );
4505 }
4506
4507 /// <summary>
4508 /// set inertial data as a sphere
4509 /// replaces the automatic calculation of mass, center of mass and inertia
4510 ///
4511 /// </summary>
4512 /// <param name="Mass">total mass of linkset</param>
4513 /// <param name="boxsize">size of the Box</param>
4514 /// <param name="centerOfMass">location of center of mass relative to root prim in local coords</param>
4515 /// <param name="lslrot">rotation of the box, and so inertia, relative to local axis</param>
4516 /// <remarks>
4517 /// </remarks>
4518 public void osSetInertiaAsBox(LSL_Float mass, LSL_Vector boxSize, LSL_Vector centerOfMass, LSL_Rotation lslrot)
4519 {
4520 CheckThreatLevel();
4521 m_host.AddScriptLPS(1);
4522
4523 SceneObjectGroup sog = m_host.ParentGroup;
4524 if(sog== null || sog.IsDeleted)
4525 return;
4526
4527 if(mass < 0)
4528 return;
4529
4530 // need more checks
4531
4532 Vector3 CenterOfMass = new Vector3((float)centerOfMass.x,(float)centerOfMass.y,(float)centerOfMass.z);
4533 Vector3 Inertia;
4534 float lx = (float)boxSize.x;
4535 float ly = (float)boxSize.y;
4536 float lz = (float)boxSize.z;
4537 float m = (float)mass;
4538 float t = m / 12.0f;
4539
4540 Inertia.X = t * (ly*ly + lz*lz);
4541 Inertia.Y = t * (lx*lx + lz*lz);
4542 Inertia.Z = t * (lx*lx + ly*ly);
4543
4544 Vector4 rot = new Vector4((float)lslrot.x, (float)lslrot.y, (float)lslrot.z, (float)lslrot.s);
4545 rot.Normalize();
4546
4547 sog.SetInertiaData(m, CenterOfMass, Inertia, rot );
4548 }
4549
4550 /// <summary>
4551 /// set inertial data as a sphere
4552 /// replaces the automatic calculation of mass, center of mass and inertia
4553 ///
4554 /// </summary>
4555 /// <param name="Mass">total mass of linkset</param>
4556 /// <param name="radius">radius of the sphere</param>
4557 /// <param name="centerOfMass">location of center of mass relative to root prim in local coords</param>
4558 /// <remarks>
4559 /// </remarks>
4560 public void osSetInertiaAsSphere(LSL_Float mass, LSL_Float radius, LSL_Vector centerOfMass)
4561 {
4562 CheckThreatLevel();
4563 m_host.AddScriptLPS(1);
4564
4565 SceneObjectGroup sog = m_host.ParentGroup;
4566 if(sog== null || sog.IsDeleted)
4567 return;
4568
4569 if(mass < 0)
4570 return;
4571
4572 // need more checks
4573
4574 Vector3 CenterOfMass = new Vector3((float)centerOfMass.x,(float)centerOfMass.y,(float)centerOfMass.z);
4575 Vector3 Inertia;
4576 float r = (float)radius;
4577 float m = (float)mass;
4578 float t = 0.4f * m * r * r;
4579
4580 Inertia.X = t;
4581 Inertia.Y = t;
4582 Inertia.Z = t;
4583
4584 sog.SetInertiaData(m, CenterOfMass, Inertia, new Vector4(0f, 0f, 0f,1.0f));
4585 }
4586
4587 /// <summary>
4588 /// set inertial data as a cylinder
4589 /// replaces the automatic calculation of mass, center of mass and inertia
4590 ///
4591 /// </summary>
4592 /// <param name="Mass">total mass of linkset</param>
4593 /// <param name="radius">radius of the cylinder</param>
4594 /// <param name="lenght">lenght of the cylinder</param>
4595 /// <param name="centerOfMass">location of center of mass relative to root prim in local coords</param>
4596 /// <param name="lslrot">rotation of the cylinder, and so inertia, relative to local axis</param>
4597 /// <remarks>
4598 /// cylinder axis aligned with Z axis. For other orientations provide the rotation.
4599 /// </remarks>
4600 public void osSetInertiaAsCylinder(LSL_Float mass, LSL_Float radius, LSL_Float lenght, LSL_Vector centerOfMass, LSL_Rotation lslrot)
4601 {
4602 CheckThreatLevel();
4603 m_host.AddScriptLPS(1);
4604
4605 SceneObjectGroup sog = m_host.ParentGroup;
4606 if(sog== null || sog.IsDeleted)
4607 return;
4608
4609 if(mass < 0)
4610 return;
4611
4612 // need more checks
4613
4614 Vector3 CenterOfMass = new Vector3((float)centerOfMass.x,(float)centerOfMass.y,(float)centerOfMass.z);
4615 Vector3 Inertia;
4616 float m = (float)mass;
4617 float r = (float)radius;
4618 r *= r;
4619 Inertia.Z = 0.5f * m * r;
4620 float t = (float)lenght;
4621 t *= t;
4622 t += 3.0f * r;
4623 t *= 8.333333e-2f * m;
4624
4625 Inertia.X = t;
4626 Inertia.Y = t;
4627
4628 Vector4 rot = new Vector4((float)lslrot.x, (float)lslrot.y, (float)lslrot.z, (float)lslrot.s);
4629 rot.Normalize();
4630
4631 sog.SetInertiaData(m, CenterOfMass, Inertia, rot);
4632 }
4633
4634 /// <summary>
4635 /// removes inertial data manual override
4636 /// default automatic calculation is used again
4637 ///
4638 /// </summary>
4639 public void osClearInertia()
4640 {
4641 CheckThreatLevel();
4642 m_host.AddScriptLPS(1);
4643
4644 SceneObjectGroup sog = m_host.ParentGroup;
4645 if(sog== null || sog.IsDeleted)
4646 return;
4647
4648 sog.SetInertiaData(-1, Vector3.Zero, Vector3.Zero, Vector4.Zero );
4649 }
4650
4651 /// <summary>
4652 /// teleports a object (full linkset)
4653 /// </summary>
4654 /// <param name="objectUUID">the id of the linkset to teleport</param>
4655 /// <param name="targetPos">target position</param>
4656 /// <param name="rotation"> a rotation to apply</param>
4657 /// <param name="flags">several flags/param>
4658 /// <remarks>
4659 /// only does teleport local to region
4660 /// if object has scripts, owner must have rights to run scripts on target location
4661 /// object owner must have rights to enter ojects on target location
4662 /// target location parcel must have enought free prims capacity for the linkset prims
4663 /// all avatars siting on the object must have access to target location
4664 /// has a cool down time. retries before expire reset it
4665 /// fail conditions are silent ignored
4666 /// </remarks>
4667 public LSL_Integer osTeleportObject(LSL_Key objectUUID, LSL_Vector targetPos, LSL_Rotation rotation, LSL_Integer flags)
4668 {
4669 CheckThreatLevel(ThreatLevel.Severe, "osTeleportObject");
4670 m_host.AddScriptLPS(1);
4671
4672 UUID objUUID;
4673 if (!UUID.TryParse(objectUUID, out objUUID))
4674 {
4675 OSSLShoutError("osTeleportObject() invalid object Key");
4676 return -1;
4677 }
4678
4679 SceneObjectGroup sog = World.GetSceneObjectGroup(objUUID);
4680 if(sog== null || sog.IsDeleted)
4681 return -1;
4682
4683 UUID myid = m_host.ParentGroup.UUID;
4684
4685 return sog.TeleportObject(myid, targetPos, rotation, flags);
4686 // a delay here may break vehicles
4687 }
4688
4689 public LSL_Integer osGetLinkNumber(LSL_String name)
4690 {
4691 CheckThreatLevel();
4692 m_host.AddScriptLPS(1);
4693
4694 SceneObjectGroup sog = m_host.ParentGroup;
4695 if(sog== null || sog.IsDeleted)
4696 return -1;
4697 return sog.GetLinkNumber(name);
4698 }
4405 } 4699 }
4406} 4700}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
index cc52403..17c977f 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
@@ -434,7 +434,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
434 LSL_String llXorBase64Strings(string str1, string str2); 434 LSL_String llXorBase64Strings(string str1, string str2);
435 LSL_String llXorBase64StringsCorrect(string str1, string str2); 435 LSL_String llXorBase64StringsCorrect(string str1, string str2);
436 LSL_Integer llGetLinkNumberOfSides(LSL_Integer link); 436 LSL_Integer llGetLinkNumberOfSides(LSL_Integer link);
437 void llSetPhysicsMaterial(int material_bits, float material_gravity_modifier, float material_restitution, float material_friction, float material_density); 437 void llSetPhysicsMaterial(int material_bits, LSL_Float material_gravity_modifier, LSL_Float material_restitution, LSL_Float material_friction, LSL_Float material_density);
438 438
439 void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc); 439 void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc);
440 void llSetKeyframedMotion(LSL_List frames, LSL_List options); 440 void llSetKeyframedMotion(LSL_List frames, LSL_List options);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index bee060a..bd5d008 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -38,6 +38,7 @@ using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
38using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat; 38using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
39using LSL_Key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString; 39using LSL_Key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
40 40
41
41namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces 42namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
42{ 43{
43 /// <summary> 44 /// <summary>
@@ -50,7 +51,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
50 /// </summary> 51 /// </summary>
51 public enum ThreatLevel 52 public enum ThreatLevel
52 { 53 {
53 // Not documented, presumably means permanently disabled ?
54 NoAccess = -1, 54 NoAccess = -1,
55 55
56 /// <summary> 56 /// <summary>
@@ -486,6 +486,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
486 LSL_String osRequestURL(LSL_List options); 486 LSL_String osRequestURL(LSL_List options);
487 LSL_String osRequestSecureURL(LSL_List options); 487 LSL_String osRequestSecureURL(LSL_List options);
488 void osCollisionSound(string impact_sound, double impact_volume); 488 void osCollisionSound(string impact_sound, double impact_volume);
489
489 void osVolumeDetect(int detect); 490 void osVolumeDetect(int detect);
491
492 LSL_List osGetInertiaData();
493 void osClearInertia();
494 void osSetInertiaAsBox(LSL_Float mass, vector boxSize, vector centerOfMass, rotation rot);
495 void osSetInertiaAsSphere(LSL_Float mass, LSL_Float radius, vector centerOfMass);
496 void osSetInertiaAsCylinder(LSL_Float mass, LSL_Float radius, LSL_Float lenght, vector centerOfMass,rotation lslrot);
497
498 LSL_Integer osTeleportObject(LSL_Key objectUUID, vector targetPos, rotation targetrotation, LSL_Integer flags);
499 LSL_Integer osGetLinkNumber(LSL_String name);
490 } 500 }
491} 501}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
index 3a90c77..ce0fa48 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
@@ -853,5 +853,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
853 /// process message parameter as regex 853 /// process message parameter as regex
854 /// </summary> 854 /// </summary>
855 public const int OS_LISTEN_REGEX_MESSAGE = 0x2; 855 public const int OS_LISTEN_REGEX_MESSAGE = 0x2;
856
857 // for osTeleportObject
858 public const int OSTPOBJ_NONE = 0x0;
859 public const int OSTPOBJ_STOPATTARGET = 0x1; // stops at destination
860 public const int OSTPOBJ_STOPONFAIL = 0x2; // stops at jump point if tp fails
861 public const int OSTPOBJ_SETROT = 0x4; // the rotation is the final rotation, otherwise is a added rotation
862
856 } 863 }
857} 864}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
index 1a42c3a..c39248b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
@@ -2036,7 +2036,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
2036 m_LSL_Functions.llSetKeyframedMotion(frames, options); 2036 m_LSL_Functions.llSetKeyframedMotion(frames, options);
2037 } 2037 }
2038 2038
2039 public void llSetPhysicsMaterial(int material_bits, float material_gravity_modifier, float material_restitution, float material_friction, float material_density) 2039 public void llSetPhysicsMaterial(int material_bits, LSL_Float material_gravity_modifier, LSL_Float material_restitution, LSL_Float material_friction, LSL_Float material_density)
2040 { 2040 {
2041 m_LSL_Functions.llSetPhysicsMaterial(material_bits, material_gravity_modifier, material_restitution, material_friction, material_density); 2041 m_LSL_Functions.llSetPhysicsMaterial(material_bits, material_gravity_modifier, material_restitution, material_friction, material_density);
2042 } 2042 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 6164734..9eac114 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -1114,5 +1114,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
1114 { 1114 {
1115 m_OSSL_Functions.osVolumeDetect(detect); 1115 m_OSSL_Functions.osVolumeDetect(detect);
1116 } 1116 }
1117
1118 public LSL_List osGetInertiaData()
1119 {
1120 return m_OSSL_Functions.osGetInertiaData();
1121 }
1122
1123 public void osSetInertiaAsBox(LSL_Float mass, vector boxSize, vector centerOfMass, rotation rot)
1124 {
1125 m_OSSL_Functions.osSetInertiaAsBox(mass, boxSize, centerOfMass, rot);
1126 }
1127
1128 public void osSetInertiaAsSphere(LSL_Float mass, LSL_Float radius, vector centerOfMass)
1129 {
1130 m_OSSL_Functions.osSetInertiaAsSphere(mass, radius, centerOfMass);
1131 }
1132
1133 public void osSetInertiaAsCylinder(LSL_Float mass, LSL_Float radius, LSL_Float lenght, vector centerOfMass,rotation lslrot)
1134 {
1135 m_OSSL_Functions.osSetInertiaAsCylinder( mass, radius, lenght, centerOfMass, lslrot);
1136 }
1137
1138 public void osClearInertia()
1139 {
1140 m_OSSL_Functions.osClearInertia();
1141 }
1142
1143 public LSL_Integer osTeleportObject(LSL_Key objectUUID, vector targetPos, rotation targetrotation, LSL_Integer flags)
1144 {
1145 return m_OSSL_Functions.osTeleportObject(objectUUID, targetPos, targetrotation, flags);
1146 }
1147
1148 public LSL_Integer osGetLinkNumber(LSL_String name)
1149 {
1150 return m_OSSL_Functions.osGetLinkNumber(name);
1151 }
1117 } 1152 }
1118} 1153}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs
index d652b0d1..16b87b3 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiInventoryTests.cs
@@ -39,6 +39,7 @@ using OpenSim.Framework;
39using OpenSim.Region.CoreModules.Avatar.AvatarFactory; 39using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
40using OpenSim.Region.OptionalModules.World.NPC; 40using OpenSim.Region.OptionalModules.World.NPC;
41using OpenSim.Region.Framework.Scenes; 41using OpenSim.Region.Framework.Scenes;
42using OpenSim.Region.CoreModules.World.Permissions;
42using OpenSim.Region.ScriptEngine.Shared; 43using OpenSim.Region.ScriptEngine.Shared;
43using OpenSim.Region.ScriptEngine.Shared.Api; 44using OpenSim.Region.ScriptEngine.Shared.Api;
44using OpenSim.Region.ScriptEngine.Shared.Instance; 45using OpenSim.Region.ScriptEngine.Shared.Instance;
@@ -63,12 +64,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
63 base.SetUp(); 64 base.SetUp();
64 65
65 IConfigSource initConfigSource = new IniConfigSource(); 66 IConfigSource initConfigSource = new IniConfigSource();
66 IConfig config = initConfigSource.AddConfig("XEngine"); 67 IConfig config = initConfigSource.AddConfig("Startup");
68 config.Set("serverside_object_permissions", true);
69 config =initConfigSource.AddConfig("Permissions");
70 config.Set("permissionmodules", "DefaultPermissionsModule");
71 config.Set("serverside_object_permissions", true);
72 config.Set("propagate_permissions", true);
73
74 config = initConfigSource.AddConfig("XEngine");
67 config.Set("Enabled", "true"); 75 config.Set("Enabled", "true");
68 76
69 m_scene = new SceneHelpers().SetupScene(); 77 m_scene = new SceneHelpers().SetupScene();
70 SceneHelpers.SetupSceneModules(m_scene, initConfigSource); 78 SceneHelpers.SetupSceneModules(m_scene, initConfigSource, new object[] { new DefaultPermissionsModule() });
71
72 m_engine = new XEngine.XEngine(); 79 m_engine = new XEngine.XEngine();
73 m_engine.Initialise(initConfigSource); 80 m_engine.Initialise(initConfigSource);
74 m_engine.AddRegion(m_scene); 81 m_engine.AddRegion(m_scene);
diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs
index f60b5fb..d151de6 100644
--- a/OpenSim/Server/Base/ServicesServerBase.cs
+++ b/OpenSim/Server/Base/ServicesServerBase.cs
@@ -61,6 +61,9 @@ namespace OpenSim.Server.Base
61 // 61 //
62 private bool m_Running = true; 62 private bool m_Running = true;
63 63
64 private static Mono.Unix.UnixSignal[] signals;
65
66
64 // Handle all the automagical stuff 67 // Handle all the automagical stuff
65 // 68 //
66 public ServicesServerBase(string prompt, string[] args) : base() 69 public ServicesServerBase(string prompt, string[] args) : base()
@@ -183,6 +186,39 @@ namespace OpenSim.Server.Base
183 RegisterCommonCommands(); 186 RegisterCommonCommands();
184 RegisterCommonComponents(Config); 187 RegisterCommonComponents(Config);
185 188
189 Thread signal_thread = new Thread (delegate ()
190 {
191 while (true)
192 {
193 // Wait for a signal to be delivered
194 int index = Mono.Unix.UnixSignal.WaitAny (signals, -1);
195
196 //Mono.Unix.Native.Signum signal = signals [index].Signum;
197 ShutdownSpecific();
198 m_Running = false;
199 Environment.Exit(0);
200 }
201 });
202
203 if(!Util.IsWindows())
204 {
205 try
206 {
207 // linux mac os specifics
208 signals = new Mono.Unix.UnixSignal[]
209 {
210 new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM)
211 };
212 signal_thread.Start();
213 }
214 catch (Exception e)
215 {
216 m_log.Info("Could not set up UNIX signal handlers. SIGTERM will not");
217 m_log.InfoFormat("shut down gracefully: {0}", e.Message);
218 m_log.Debug("Exception was: ", e);
219 }
220 }
221
186 // Allow derived classes to perform initialization that 222 // Allow derived classes to perform initialization that
187 // needs to be done after the console has opened 223 // needs to be done after the console has opened
188 Initialise(); 224 Initialise();
diff --git a/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs b/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs
index 3fa8b54..810da2f 100644
--- a/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs
@@ -243,8 +243,12 @@ namespace OpenSim.Services.Connectors
243 string uri = MapServer(id) + "/assets/" + id; 243 string uri = MapServer(id) + "/assets/" + id;
244 244
245 AssetBase asset = null; 245 AssetBase asset = null;
246
246 if (m_Cache != null) 247 if (m_Cache != null)
247 asset = m_Cache.Get(id); 248 {
249 if (!m_Cache.Get(id, out asset))
250 return null;
251 }
248 252
249 if (asset == null || asset.Data == null || asset.Data.Length == 0) 253 if (asset == null || asset.Data == null || asset.Data.Length == 0)
250 { 254 {
@@ -275,17 +279,22 @@ namespace OpenSim.Services.Connectors
275 { 279 {
276// m_log.DebugFormat("[ASSET SERVICE CONNECTOR]: Cache request for {0}", id); 280// m_log.DebugFormat("[ASSET SERVICE CONNECTOR]: Cache request for {0}", id);
277 281
282 AssetBase asset = null;
278 if (m_Cache != null) 283 if (m_Cache != null)
279 return m_Cache.Get(id); 284 {
285 m_Cache.Get(id, out asset);
286 }
280 287
281 return null; 288 return asset;
282 } 289 }
283 290
284 public AssetMetadata GetMetadata(string id) 291 public AssetMetadata GetMetadata(string id)
285 { 292 {
286 if (m_Cache != null) 293 if (m_Cache != null)
287 { 294 {
288 AssetBase fullAsset = m_Cache.Get(id); 295 AssetBase fullAsset;
296 if (!m_Cache.Get(id, out fullAsset))
297 return null;
289 298
290 if (fullAsset != null) 299 if (fullAsset != null)
291 return fullAsset.Metadata; 300 return fullAsset.Metadata;
@@ -301,7 +310,9 @@ namespace OpenSim.Services.Connectors
301 { 310 {
302 if (m_Cache != null) 311 if (m_Cache != null)
303 { 312 {
304 AssetBase fullAsset = m_Cache.Get(id); 313 AssetBase fullAsset;
314 if (!m_Cache.Get(id, out fullAsset))
315 return null;
305 316
306 if (fullAsset != null) 317 if (fullAsset != null)
307 return fullAsset.Data; 318 return fullAsset.Data;
@@ -389,7 +400,10 @@ namespace OpenSim.Services.Connectors
389 400
390 AssetBase asset = null; 401 AssetBase asset = null;
391 if (m_Cache != null) 402 if (m_Cache != null)
392 asset = m_Cache.Get(id); 403 {
404 if (!m_Cache.Get(id, out asset))
405 return false;
406 }
393 407
394 if (asset == null || asset.Data == null || asset.Data.Length == 0) 408 if (asset == null || asset.Data == null || asset.Data.Length == 0)
395 { 409 {
@@ -590,7 +604,7 @@ namespace OpenSim.Services.Connectors
590 AssetBase asset = null; 604 AssetBase asset = null;
591 605
592 if (m_Cache != null) 606 if (m_Cache != null)
593 asset = m_Cache.Get(id); 607 m_Cache.Get(id, out asset);
594 608
595 if (asset == null) 609 if (asset == null)
596 { 610 {
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
index 121e863..953bc2a 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
@@ -136,7 +136,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
136 // Cache fetch 136 // Cache fetch
137 if (m_cache != null) 137 if (m_cache != null)
138 { 138 {
139 AssetBase asset = m_cache.Get(id); 139 AssetBase asset;
140 if (!m_cache.Get(id, out asset))
141 return null;
140 if (asset != null) 142 if (asset != null)
141 return asset; 143 return asset;
142 } 144 }
@@ -147,8 +149,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
147 149
148 public AssetBase GetCached(string id) 150 public AssetBase GetCached(string id)
149 { 151 {
152 AssetBase asset;
150 if (m_cache != null) 153 if (m_cache != null)
151 return m_cache.Get(id); 154 m_cache.Get(id, out asset);
152 155
153 return null; 156 return null;
154 } 157 }
@@ -169,7 +172,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
169 // Cache fetch 172 // Cache fetch
170 if (m_cache != null) 173 if (m_cache != null)
171 { 174 {
172 AssetBase asset = m_cache.Get(id); 175 AssetBase asset;
176 if (!m_cache.Get(id, out asset))
177 return null;
173 if (asset != null) 178 if (asset != null)
174 return asset.Metadata; 179 return asset.Metadata;
175 } 180 }
@@ -212,7 +217,10 @@ namespace OpenSim.Services.Connectors.SimianGrid
212 // Cache fetch 217 // Cache fetch
213 if (m_cache != null) 218 if (m_cache != null)
214 { 219 {
215 AssetBase asset = m_cache.Get(id); 220 AssetBase asset;
221 if (!m_cache.Get(id, out asset))
222 return false;
223
216 if (asset != null) 224 if (asset != null)
217 { 225 {
218 handler(id, sender, asset); 226 handler(id, sender, asset);
diff --git a/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs b/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs
index 5a46201..e188665 100644
--- a/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs
@@ -129,9 +129,9 @@ namespace OpenSim.Tests.Common
129 item.AssetType = asset.Type; 129 item.AssetType = asset.Type;
130 item.InvType = (int)itemType; 130 item.InvType = (int)itemType;
131 item.BasePermissions = (uint)OpenMetaverse.PermissionMask.All | 131 item.BasePermissions = (uint)OpenMetaverse.PermissionMask.All |
132 (uint)(Framework.PermissionMask.foldedMask | Framework.PermissionMask.foldedCopy | Framework.PermissionMask.foldedModify | Framework.PermissionMask.foldedTransfer); 132 (uint)(Framework.PermissionMask.FoldedMask | Framework.PermissionMask.FoldedCopy | Framework.PermissionMask.FoldedModify | Framework.PermissionMask.FoldedTransfer);
133 item.CurrentPermissions = (uint)OpenMetaverse.PermissionMask.All | 133 item.CurrentPermissions = (uint)OpenMetaverse.PermissionMask.All |
134 (uint)(Framework.PermissionMask.foldedMask | Framework.PermissionMask.foldedCopy | Framework.PermissionMask.foldedModify | Framework.PermissionMask.foldedTransfer); 134 (uint)(Framework.PermissionMask.FoldedMask | Framework.PermissionMask.FoldedCopy | Framework.PermissionMask.FoldedModify | Framework.PermissionMask.FoldedTransfer);
135 135
136 InventoryFolderBase folder = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, userId, path)[0]; 136 InventoryFolderBase folder = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, userId, path)[0];
137 137
@@ -371,4 +371,4 @@ namespace OpenSim.Tests.Common
371 return InventoryArchiveUtils.FindItemsByPath(inventoryService, userId, path); 371 return InventoryArchiveUtils.FindItemsByPath(inventoryService, userId, path);
372 } 372 }
373 } 373 }
374} \ No newline at end of file 374}
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index e2f57b5..a835925 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -760,7 +760,11 @@ namespace OpenSim.Tests.Common
760 { 760 {
761 } 761 }
762 762
763 public void SendAvatarDataImmediate(ISceneEntity avatar) 763 public void SendEntityFullUpdateImmediate(ISceneEntity ent)
764 {
765 }
766
767 public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
764 { 768 {
765 } 769 }
766 770
diff --git a/bin/Newtonsoft.Json.dll b/bin/Newtonsoft.Json.dll
new file mode 100644
index 0000000..5931de1
--- /dev/null
+++ b/bin/Newtonsoft.Json.dll
Binary files differ
diff --git a/bin/Newtonsoft.Json.xml b/bin/Newtonsoft.Json.xml
new file mode 100644
index 0000000..2a75b44
--- /dev/null
+++ b/bin/Newtonsoft.Json.xml
@@ -0,0 +1,8626 @@
1<?xml version="1.0"?>
2<doc>
3 <assembly>
4 <name>Newtonsoft.Json</name>
5 </assembly>
6 <members>
7 <member name="T:Newtonsoft.Json.Bson.BsonReader">
8 <summary>
9 Represents a reader that provides fast, non-cached, forward-only access to serialized Json data.
10 </summary>
11 </member>
12 <member name="T:Newtonsoft.Json.JsonReader">
13 <summary>
14 Represents a reader that provides fast, non-cached, forward-only access to serialized Json data.
15 </summary>
16 </member>
17 <member name="M:Newtonsoft.Json.JsonReader.#ctor">
18 <summary>
19 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>.
20 </summary>
21 </member>
22 <member name="M:Newtonsoft.Json.JsonReader.Read">
23 <summary>
24 Reads the next JSON token from the stream.
25 </summary>
26 <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns>
27 </member>
28 <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32">
29 <summary>
30 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
31 </summary>
32 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
33 </member>
34 <member name="M:Newtonsoft.Json.JsonReader.ReadAsString">
35 <summary>
36 Reads the next JSON token from the stream as a <see cref="T:System.String"/>.
37 </summary>
38 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
39 </member>
40 <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes">
41 <summary>
42 Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>.
43 </summary>
44 <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns>
45 </member>
46 <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal">
47 <summary>
48 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
49 </summary>
50 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
51 </member>
52 <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime">
53 <summary>
54 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
55 </summary>
56 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
57 </member>
58 <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset">
59 <summary>
60 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
61 </summary>
62 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
63 </member>
64 <member name="M:Newtonsoft.Json.JsonReader.Skip">
65 <summary>
66 Skips the children of the current token.
67 </summary>
68 </member>
69 <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)">
70 <summary>
71 Sets the current token.
72 </summary>
73 <param name="newToken">The new token.</param>
74 </member>
75 <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)">
76 <summary>
77 Sets the current token and value.
78 </summary>
79 <param name="newToken">The new token.</param>
80 <param name="value">The value.</param>
81 </member>
82 <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent">
83 <summary>
84 Sets the state based on current token type.
85 </summary>
86 </member>
87 <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose">
88 <summary>
89 Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
90 </summary>
91 </member>
92 <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)">
93 <summary>
94 Releases unmanaged and - optionally - managed resources
95 </summary>
96 <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
97 </member>
98 <member name="M:Newtonsoft.Json.JsonReader.Close">
99 <summary>
100 Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed.
101 </summary>
102 </member>
103 <member name="P:Newtonsoft.Json.JsonReader.CurrentState">
104 <summary>
105 Gets the current reader state.
106 </summary>
107 <value>The current reader state.</value>
108 </member>
109 <member name="P:Newtonsoft.Json.JsonReader.CloseInput">
110 <summary>
111 Gets or sets a value indicating whether the underlying stream or
112 <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed.
113 </summary>
114 <value>
115 true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when
116 the reader is closed; otherwise false. The default is true.
117 </value>
118 </member>
119 <member name="P:Newtonsoft.Json.JsonReader.SupportMultipleContent">
120 <summary>
121 Gets or sets a value indicating whether multiple pieces of JSON content can
122 be read from a continuous stream without erroring.
123 </summary>
124 <value>
125 true to support reading multiple pieces of JSON content; otherwise false. The default is false.
126 </value>
127 </member>
128 <member name="P:Newtonsoft.Json.JsonReader.QuoteChar">
129 <summary>
130 Gets the quotation mark character used to enclose the value of a string.
131 </summary>
132 </member>
133 <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling">
134 <summary>
135 Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON.
136 </summary>
137 </member>
138 <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling">
139 <summary>
140 Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
141 </summary>
142 </member>
143 <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling">
144 <summary>
145 Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
146 </summary>
147 </member>
148 <member name="P:Newtonsoft.Json.JsonReader.DateFormatString">
149 <summary>
150 Get or set how custom date formatted strings are parsed when reading JSON.
151 </summary>
152 </member>
153 <member name="P:Newtonsoft.Json.JsonReader.MaxDepth">
154 <summary>
155 Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>.
156 </summary>
157 </member>
158 <member name="P:Newtonsoft.Json.JsonReader.TokenType">
159 <summary>
160 Gets the type of the current JSON token.
161 </summary>
162 </member>
163 <member name="P:Newtonsoft.Json.JsonReader.Value">
164 <summary>
165 Gets the text value of the current JSON token.
166 </summary>
167 </member>
168 <member name="P:Newtonsoft.Json.JsonReader.ValueType">
169 <summary>
170 Gets The Common Language Runtime (CLR) type for the current JSON token.
171 </summary>
172 </member>
173 <member name="P:Newtonsoft.Json.JsonReader.Depth">
174 <summary>
175 Gets the depth of the current token in the JSON document.
176 </summary>
177 <value>The depth of the current token in the JSON document.</value>
178 </member>
179 <member name="P:Newtonsoft.Json.JsonReader.Path">
180 <summary>
181 Gets the path of the current JSON token.
182 </summary>
183 </member>
184 <member name="P:Newtonsoft.Json.JsonReader.Culture">
185 <summary>
186 Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>.
187 </summary>
188 </member>
189 <member name="T:Newtonsoft.Json.JsonReader.State">
190 <summary>
191 Specifies the state of the reader.
192 </summary>
193 </member>
194 <member name="F:Newtonsoft.Json.JsonReader.State.Start">
195 <summary>
196 The Read method has not been called.
197 </summary>
198 </member>
199 <member name="F:Newtonsoft.Json.JsonReader.State.Complete">
200 <summary>
201 The end of the file has been reached successfully.
202 </summary>
203 </member>
204 <member name="F:Newtonsoft.Json.JsonReader.State.Property">
205 <summary>
206 Reader is at a property.
207 </summary>
208 </member>
209 <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart">
210 <summary>
211 Reader is at the start of an object.
212 </summary>
213 </member>
214 <member name="F:Newtonsoft.Json.JsonReader.State.Object">
215 <summary>
216 Reader is in an object.
217 </summary>
218 </member>
219 <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart">
220 <summary>
221 Reader is at the start of an array.
222 </summary>
223 </member>
224 <member name="F:Newtonsoft.Json.JsonReader.State.Array">
225 <summary>
226 Reader is in an array.
227 </summary>
228 </member>
229 <member name="F:Newtonsoft.Json.JsonReader.State.Closed">
230 <summary>
231 The Close method has been called.
232 </summary>
233 </member>
234 <member name="F:Newtonsoft.Json.JsonReader.State.PostValue">
235 <summary>
236 Reader has just read a value.
237 </summary>
238 </member>
239 <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart">
240 <summary>
241 Reader is at the start of a constructor.
242 </summary>
243 </member>
244 <member name="F:Newtonsoft.Json.JsonReader.State.Constructor">
245 <summary>
246 Reader in a constructor.
247 </summary>
248 </member>
249 <member name="F:Newtonsoft.Json.JsonReader.State.Error">
250 <summary>
251 An error occurred that prevents the read operation from continuing.
252 </summary>
253 </member>
254 <member name="F:Newtonsoft.Json.JsonReader.State.Finished">
255 <summary>
256 The end of the file has been reached successfully.
257 </summary>
258 </member>
259 <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)">
260 <summary>
261 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class.
262 </summary>
263 <param name="stream">The stream.</param>
264 </member>
265 <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)">
266 <summary>
267 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class.
268 </summary>
269 <param name="reader">The reader.</param>
270 </member>
271 <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)">
272 <summary>
273 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class.
274 </summary>
275 <param name="stream">The stream.</param>
276 <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param>
277 <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param>
278 </member>
279 <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)">
280 <summary>
281 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class.
282 </summary>
283 <param name="reader">The reader.</param>
284 <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param>
285 <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param>
286 </member>
287 <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes">
288 <summary>
289 Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>.
290 </summary>
291 <returns>
292 A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.
293 </returns>
294 </member>
295 <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal">
296 <summary>
297 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
298 </summary>
299 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
300 </member>
301 <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32">
302 <summary>
303 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
304 </summary>
305 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
306 </member>
307 <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString">
308 <summary>
309 Reads the next JSON token from the stream as a <see cref="T:System.String"/>.
310 </summary>
311 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
312 </member>
313 <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime">
314 <summary>
315 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
316 </summary>
317 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
318 </member>
319 <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset">
320 <summary>
321 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
322 </summary>
323 <returns>
324 A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.
325 </returns>
326 </member>
327 <member name="M:Newtonsoft.Json.Bson.BsonReader.Read">
328 <summary>
329 Reads the next JSON token from the stream.
330 </summary>
331 <returns>
332 true if the next token was read successfully; false if there are no more tokens to read.
333 </returns>
334 </member>
335 <member name="M:Newtonsoft.Json.Bson.BsonReader.Close">
336 <summary>
337 Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed.
338 </summary>
339 </member>
340 <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility">
341 <summary>
342 Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary.
343 </summary>
344 <value>
345 <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>.
346 </value>
347 </member>
348 <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray">
349 <summary>
350 Gets or sets a value indicating whether the root object will be read as a JSON array.
351 </summary>
352 <value>
353 <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>.
354 </value>
355 </member>
356 <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling">
357 <summary>
358 Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.
359 </summary>
360 <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value>
361 </member>
362 <member name="T:Newtonsoft.Json.Bson.BsonWriter">
363 <summary>
364 Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
365 </summary>
366 </member>
367 <member name="T:Newtonsoft.Json.JsonWriter">
368 <summary>
369 Represents a writer that provides a fast, non-cached, forward-only way of generating Json data.
370 </summary>
371 </member>
372 <member name="M:Newtonsoft.Json.JsonWriter.#ctor">
373 <summary>
374 Creates an instance of the <c>JsonWriter</c> class.
375 </summary>
376 </member>
377 <member name="M:Newtonsoft.Json.JsonWriter.Flush">
378 <summary>
379 Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream.
380 </summary>
381 </member>
382 <member name="M:Newtonsoft.Json.JsonWriter.Close">
383 <summary>
384 Closes this stream and the underlying stream.
385 </summary>
386 </member>
387 <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject">
388 <summary>
389 Writes the beginning of a Json object.
390 </summary>
391 </member>
392 <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject">
393 <summary>
394 Writes the end of a Json object.
395 </summary>
396 </member>
397 <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray">
398 <summary>
399 Writes the beginning of a Json array.
400 </summary>
401 </member>
402 <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray">
403 <summary>
404 Writes the end of an array.
405 </summary>
406 </member>
407 <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)">
408 <summary>
409 Writes the start of a constructor with the given name.
410 </summary>
411 <param name="name">The name of the constructor.</param>
412 </member>
413 <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor">
414 <summary>
415 Writes the end constructor.
416 </summary>
417 </member>
418 <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)">
419 <summary>
420 Writes the property name of a name/value pair on a JSON object.
421 </summary>
422 <param name="name">The name of the property.</param>
423 </member>
424 <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)">
425 <summary>
426 Writes the property name of a name/value pair on a JSON object.
427 </summary>
428 <param name="name">The name of the property.</param>
429 <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param>
430 </member>
431 <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd">
432 <summary>
433 Writes the end of the current Json object or array.
434 </summary>
435 </member>
436 <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)">
437 <summary>
438 Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children.
439 </summary>
440 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param>
441 </member>
442 <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)">
443 <summary>
444 Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token.
445 </summary>
446 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param>
447 <param name="writeChildren">A flag indicating whether the current token's children should be written.</param>
448 </member>
449 <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)">
450 <summary>
451 Writes the specified end token.
452 </summary>
453 <param name="token">The end token to write.</param>
454 </member>
455 <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent">
456 <summary>
457 Writes indent characters.
458 </summary>
459 </member>
460 <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter">
461 <summary>
462 Writes the JSON value delimiter.
463 </summary>
464 </member>
465 <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace">
466 <summary>
467 Writes an indent space.
468 </summary>
469 </member>
470 <member name="M:Newtonsoft.Json.JsonWriter.WriteNull">
471 <summary>
472 Writes a null value.
473 </summary>
474 </member>
475 <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined">
476 <summary>
477 Writes an undefined value.
478 </summary>
479 </member>
480 <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)">
481 <summary>
482 Writes raw JSON without changing the writer's state.
483 </summary>
484 <param name="json">The raw JSON to write.</param>
485 </member>
486 <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)">
487 <summary>
488 Writes raw JSON where a value is expected and updates the writer's state.
489 </summary>
490 <param name="json">The raw JSON to write.</param>
491 </member>
492 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)">
493 <summary>
494 Writes a <see cref="T:System.String"/> value.
495 </summary>
496 <param name="value">The <see cref="T:System.String"/> value to write.</param>
497 </member>
498 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)">
499 <summary>
500 Writes a <see cref="T:System.Int32"/> value.
501 </summary>
502 <param name="value">The <see cref="T:System.Int32"/> value to write.</param>
503 </member>
504 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)">
505 <summary>
506 Writes a <see cref="T:System.UInt32"/> value.
507 </summary>
508 <param name="value">The <see cref="T:System.UInt32"/> value to write.</param>
509 </member>
510 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)">
511 <summary>
512 Writes a <see cref="T:System.Int64"/> value.
513 </summary>
514 <param name="value">The <see cref="T:System.Int64"/> value to write.</param>
515 </member>
516 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)">
517 <summary>
518 Writes a <see cref="T:System.UInt64"/> value.
519 </summary>
520 <param name="value">The <see cref="T:System.UInt64"/> value to write.</param>
521 </member>
522 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)">
523 <summary>
524 Writes a <see cref="T:System.Single"/> value.
525 </summary>
526 <param name="value">The <see cref="T:System.Single"/> value to write.</param>
527 </member>
528 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)">
529 <summary>
530 Writes a <see cref="T:System.Double"/> value.
531 </summary>
532 <param name="value">The <see cref="T:System.Double"/> value to write.</param>
533 </member>
534 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)">
535 <summary>
536 Writes a <see cref="T:System.Boolean"/> value.
537 </summary>
538 <param name="value">The <see cref="T:System.Boolean"/> value to write.</param>
539 </member>
540 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)">
541 <summary>
542 Writes a <see cref="T:System.Int16"/> value.
543 </summary>
544 <param name="value">The <see cref="T:System.Int16"/> value to write.</param>
545 </member>
546 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)">
547 <summary>
548 Writes a <see cref="T:System.UInt16"/> value.
549 </summary>
550 <param name="value">The <see cref="T:System.UInt16"/> value to write.</param>
551 </member>
552 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)">
553 <summary>
554 Writes a <see cref="T:System.Char"/> value.
555 </summary>
556 <param name="value">The <see cref="T:System.Char"/> value to write.</param>
557 </member>
558 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)">
559 <summary>
560 Writes a <see cref="T:System.Byte"/> value.
561 </summary>
562 <param name="value">The <see cref="T:System.Byte"/> value to write.</param>
563 </member>
564 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)">
565 <summary>
566 Writes a <see cref="T:System.SByte"/> value.
567 </summary>
568 <param name="value">The <see cref="T:System.SByte"/> value to write.</param>
569 </member>
570 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)">
571 <summary>
572 Writes a <see cref="T:System.Decimal"/> value.
573 </summary>
574 <param name="value">The <see cref="T:System.Decimal"/> value to write.</param>
575 </member>
576 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)">
577 <summary>
578 Writes a <see cref="T:System.DateTime"/> value.
579 </summary>
580 <param name="value">The <see cref="T:System.DateTime"/> value to write.</param>
581 </member>
582 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)">
583 <summary>
584 Writes a <see cref="T:System.DateTimeOffset"/> value.
585 </summary>
586 <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param>
587 </member>
588 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)">
589 <summary>
590 Writes a <see cref="T:System.Guid"/> value.
591 </summary>
592 <param name="value">The <see cref="T:System.Guid"/> value to write.</param>
593 </member>
594 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)">
595 <summary>
596 Writes a <see cref="T:System.TimeSpan"/> value.
597 </summary>
598 <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param>
599 </member>
600 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})">
601 <summary>
602 Writes a <see cref="T:System.Nullable`1"/> value.
603 </summary>
604 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
605 </member>
606 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})">
607 <summary>
608 Writes a <see cref="T:System.Nullable`1"/> value.
609 </summary>
610 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
611 </member>
612 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})">
613 <summary>
614 Writes a <see cref="T:System.Nullable`1"/> value.
615 </summary>
616 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
617 </member>
618 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})">
619 <summary>
620 Writes a <see cref="T:System.Nullable`1"/> value.
621 </summary>
622 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
623 </member>
624 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})">
625 <summary>
626 Writes a <see cref="T:System.Nullable`1"/> value.
627 </summary>
628 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
629 </member>
630 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})">
631 <summary>
632 Writes a <see cref="T:System.Nullable`1"/> value.
633 </summary>
634 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
635 </member>
636 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})">
637 <summary>
638 Writes a <see cref="T:System.Nullable`1"/> value.
639 </summary>
640 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
641 </member>
642 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})">
643 <summary>
644 Writes a <see cref="T:System.Nullable`1"/> value.
645 </summary>
646 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
647 </member>
648 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})">
649 <summary>
650 Writes a <see cref="T:System.Nullable`1"/> value.
651 </summary>
652 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
653 </member>
654 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})">
655 <summary>
656 Writes a <see cref="T:System.Nullable`1"/> value.
657 </summary>
658 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
659 </member>
660 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})">
661 <summary>
662 Writes a <see cref="T:System.Nullable`1"/> value.
663 </summary>
664 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
665 </member>
666 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})">
667 <summary>
668 Writes a <see cref="T:System.Nullable`1"/> value.
669 </summary>
670 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
671 </member>
672 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})">
673 <summary>
674 Writes a <see cref="T:System.Nullable`1"/> value.
675 </summary>
676 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
677 </member>
678 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})">
679 <summary>
680 Writes a <see cref="T:System.Nullable`1"/> value.
681 </summary>
682 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
683 </member>
684 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})">
685 <summary>
686 Writes a <see cref="T:System.Nullable`1"/> value.
687 </summary>
688 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
689 </member>
690 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})">
691 <summary>
692 Writes a <see cref="T:System.Nullable`1"/> value.
693 </summary>
694 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
695 </member>
696 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})">
697 <summary>
698 Writes a <see cref="T:System.Nullable`1"/> value.
699 </summary>
700 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
701 </member>
702 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])">
703 <summary>
704 Writes a <see cref="T:Byte[]"/> value.
705 </summary>
706 <param name="value">The <see cref="T:Byte[]"/> value to write.</param>
707 </member>
708 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)">
709 <summary>
710 Writes a <see cref="T:System.Uri"/> value.
711 </summary>
712 <param name="value">The <see cref="T:System.Uri"/> value to write.</param>
713 </member>
714 <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)">
715 <summary>
716 Writes a <see cref="T:System.Object"/> value.
717 An error will raised if the value cannot be written as a single JSON token.
718 </summary>
719 <param name="value">The <see cref="T:System.Object"/> value to write.</param>
720 </member>
721 <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)">
722 <summary>
723 Writes out a comment <code>/*...*/</code> containing the specified text.
724 </summary>
725 <param name="text">Text to place inside the comment.</param>
726 </member>
727 <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)">
728 <summary>
729 Writes out the given white space.
730 </summary>
731 <param name="ws">The string of white space characters.</param>
732 </member>
733 <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)">
734 <summary>
735 Sets the state of the JsonWriter,
736 </summary>
737 <param name="token">The JsonToken being written.</param>
738 <param name="value">The value being written.</param>
739 </member>
740 <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput">
741 <summary>
742 Gets or sets a value indicating whether the underlying stream or
743 <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed.
744 </summary>
745 <value>
746 true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when
747 the writer is closed; otherwise false. The default is true.
748 </value>
749 </member>
750 <member name="P:Newtonsoft.Json.JsonWriter.Top">
751 <summary>
752 Gets the top.
753 </summary>
754 <value>The top.</value>
755 </member>
756 <member name="P:Newtonsoft.Json.JsonWriter.WriteState">
757 <summary>
758 Gets the state of the writer.
759 </summary>
760 </member>
761 <member name="P:Newtonsoft.Json.JsonWriter.Path">
762 <summary>
763 Gets the path of the writer.
764 </summary>
765 </member>
766 <member name="P:Newtonsoft.Json.JsonWriter.Formatting">
767 <summary>
768 Indicates how JSON text output is formatted.
769 </summary>
770 </member>
771 <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling">
772 <summary>
773 Get or set how dates are written to JSON text.
774 </summary>
775 </member>
776 <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling">
777 <summary>
778 Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text.
779 </summary>
780 </member>
781 <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling">
782 <summary>
783 Get or set how strings are escaped when writing JSON text.
784 </summary>
785 </member>
786 <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling">
787 <summary>
788 Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>,
789 <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>,
790 are written to JSON text.
791 </summary>
792 </member>
793 <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString">
794 <summary>
795 Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text.
796 </summary>
797 </member>
798 <member name="P:Newtonsoft.Json.JsonWriter.Culture">
799 <summary>
800 Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>.
801 </summary>
802 </member>
803 <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)">
804 <summary>
805 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class.
806 </summary>
807 <param name="stream">The stream.</param>
808 </member>
809 <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)">
810 <summary>
811 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class.
812 </summary>
813 <param name="writer">The writer.</param>
814 </member>
815 <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush">
816 <summary>
817 Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream.
818 </summary>
819 </member>
820 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)">
821 <summary>
822 Writes the end.
823 </summary>
824 <param name="token">The token.</param>
825 </member>
826 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)">
827 <summary>
828 Writes out a comment <code>/*...*/</code> containing the specified text.
829 </summary>
830 <param name="text">Text to place inside the comment.</param>
831 </member>
832 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)">
833 <summary>
834 Writes the start of a constructor with the given name.
835 </summary>
836 <param name="name">The name of the constructor.</param>
837 </member>
838 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)">
839 <summary>
840 Writes raw JSON.
841 </summary>
842 <param name="json">The raw JSON to write.</param>
843 </member>
844 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)">
845 <summary>
846 Writes raw JSON where a value is expected and updates the writer's state.
847 </summary>
848 <param name="json">The raw JSON to write.</param>
849 </member>
850 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray">
851 <summary>
852 Writes the beginning of a Json array.
853 </summary>
854 </member>
855 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject">
856 <summary>
857 Writes the beginning of a Json object.
858 </summary>
859 </member>
860 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)">
861 <summary>
862 Writes the property name of a name/value pair on a Json object.
863 </summary>
864 <param name="name">The name of the property.</param>
865 </member>
866 <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close">
867 <summary>
868 Closes this stream and the underlying stream.
869 </summary>
870 </member>
871 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)">
872 <summary>
873 Writes a <see cref="T:System.Object"/> value.
874 An error will raised if the value cannot be written as a single JSON token.
875 </summary>
876 <param name="value">The <see cref="T:System.Object"/> value to write.</param>
877 </member>
878 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull">
879 <summary>
880 Writes a null value.
881 </summary>
882 </member>
883 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined">
884 <summary>
885 Writes an undefined value.
886 </summary>
887 </member>
888 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)">
889 <summary>
890 Writes a <see cref="T:System.String"/> value.
891 </summary>
892 <param name="value">The <see cref="T:System.String"/> value to write.</param>
893 </member>
894 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)">
895 <summary>
896 Writes a <see cref="T:System.Int32"/> value.
897 </summary>
898 <param name="value">The <see cref="T:System.Int32"/> value to write.</param>
899 </member>
900 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)">
901 <summary>
902 Writes a <see cref="T:System.UInt32"/> value.
903 </summary>
904 <param name="value">The <see cref="T:System.UInt32"/> value to write.</param>
905 </member>
906 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)">
907 <summary>
908 Writes a <see cref="T:System.Int64"/> value.
909 </summary>
910 <param name="value">The <see cref="T:System.Int64"/> value to write.</param>
911 </member>
912 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)">
913 <summary>
914 Writes a <see cref="T:System.UInt64"/> value.
915 </summary>
916 <param name="value">The <see cref="T:System.UInt64"/> value to write.</param>
917 </member>
918 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)">
919 <summary>
920 Writes a <see cref="T:System.Single"/> value.
921 </summary>
922 <param name="value">The <see cref="T:System.Single"/> value to write.</param>
923 </member>
924 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)">
925 <summary>
926 Writes a <see cref="T:System.Double"/> value.
927 </summary>
928 <param name="value">The <see cref="T:System.Double"/> value to write.</param>
929 </member>
930 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)">
931 <summary>
932 Writes a <see cref="T:System.Boolean"/> value.
933 </summary>
934 <param name="value">The <see cref="T:System.Boolean"/> value to write.</param>
935 </member>
936 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)">
937 <summary>
938 Writes a <see cref="T:System.Int16"/> value.
939 </summary>
940 <param name="value">The <see cref="T:System.Int16"/> value to write.</param>
941 </member>
942 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)">
943 <summary>
944 Writes a <see cref="T:System.UInt16"/> value.
945 </summary>
946 <param name="value">The <see cref="T:System.UInt16"/> value to write.</param>
947 </member>
948 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)">
949 <summary>
950 Writes a <see cref="T:System.Char"/> value.
951 </summary>
952 <param name="value">The <see cref="T:System.Char"/> value to write.</param>
953 </member>
954 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)">
955 <summary>
956 Writes a <see cref="T:System.Byte"/> value.
957 </summary>
958 <param name="value">The <see cref="T:System.Byte"/> value to write.</param>
959 </member>
960 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)">
961 <summary>
962 Writes a <see cref="T:System.SByte"/> value.
963 </summary>
964 <param name="value">The <see cref="T:System.SByte"/> value to write.</param>
965 </member>
966 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)">
967 <summary>
968 Writes a <see cref="T:System.Decimal"/> value.
969 </summary>
970 <param name="value">The <see cref="T:System.Decimal"/> value to write.</param>
971 </member>
972 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)">
973 <summary>
974 Writes a <see cref="T:System.DateTime"/> value.
975 </summary>
976 <param name="value">The <see cref="T:System.DateTime"/> value to write.</param>
977 </member>
978 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)">
979 <summary>
980 Writes a <see cref="T:System.DateTimeOffset"/> value.
981 </summary>
982 <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param>
983 </member>
984 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])">
985 <summary>
986 Writes a <see cref="T:Byte[]"/> value.
987 </summary>
988 <param name="value">The <see cref="T:Byte[]"/> value to write.</param>
989 </member>
990 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)">
991 <summary>
992 Writes a <see cref="T:System.Guid"/> value.
993 </summary>
994 <param name="value">The <see cref="T:System.Guid"/> value to write.</param>
995 </member>
996 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)">
997 <summary>
998 Writes a <see cref="T:System.TimeSpan"/> value.
999 </summary>
1000 <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param>
1001 </member>
1002 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)">
1003 <summary>
1004 Writes a <see cref="T:System.Uri"/> value.
1005 </summary>
1006 <param name="value">The <see cref="T:System.Uri"/> value to write.</param>
1007 </member>
1008 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])">
1009 <summary>
1010 Writes a <see cref="T:Byte[]"/> value that represents a BSON object id.
1011 </summary>
1012 <param name="value">The Object ID value to write.</param>
1013 </member>
1014 <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)">
1015 <summary>
1016 Writes a BSON regex.
1017 </summary>
1018 <param name="pattern">The regex pattern.</param>
1019 <param name="options">The regex options.</param>
1020 </member>
1021 <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling">
1022 <summary>
1023 Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.
1024 When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur.
1025 </summary>
1026 <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value>
1027 </member>
1028 <member name="T:Newtonsoft.Json.Bson.BsonObjectId">
1029 <summary>
1030 Represents a BSON Oid (object id).
1031 </summary>
1032 </member>
1033 <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])">
1034 <summary>
1035 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class.
1036 </summary>
1037 <param name="value">The Oid value.</param>
1038 </member>
1039 <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value">
1040 <summary>
1041 Gets or sets the value of the Oid.
1042 </summary>
1043 <value>The value of the Oid.</value>
1044 </member>
1045 <member name="T:Newtonsoft.Json.Converters.BinaryConverter">
1046 <summary>
1047 Converts a binary value to and from a base 64 string value.
1048 </summary>
1049 </member>
1050 <member name="T:Newtonsoft.Json.JsonConverter">
1051 <summary>
1052 Converts an object to and from JSON.
1053 </summary>
1054 </member>
1055 <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1056 <summary>
1057 Writes the JSON representation of the object.
1058 </summary>
1059 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1060 <param name="value">The value.</param>
1061 <param name="serializer">The calling serializer.</param>
1062 </member>
1063 <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1064 <summary>
1065 Reads the JSON representation of the object.
1066 </summary>
1067 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1068 <param name="objectType">Type of the object.</param>
1069 <param name="existingValue">The existing value of object being read.</param>
1070 <param name="serializer">The calling serializer.</param>
1071 <returns>The object value.</returns>
1072 </member>
1073 <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)">
1074 <summary>
1075 Determines whether this instance can convert the specified object type.
1076 </summary>
1077 <param name="objectType">Type of the object.</param>
1078 <returns>
1079 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1080 </returns>
1081 </member>
1082 <member name="M:Newtonsoft.Json.JsonConverter.GetSchema">
1083 <summary>
1084 Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.
1085 </summary>
1086 <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns>
1087 </member>
1088 <member name="P:Newtonsoft.Json.JsonConverter.CanRead">
1089 <summary>
1090 Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON.
1091 </summary>
1092 <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value>
1093 </member>
1094 <member name="P:Newtonsoft.Json.JsonConverter.CanWrite">
1095 <summary>
1096 Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON.
1097 </summary>
1098 <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value>
1099 </member>
1100 <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1101 <summary>
1102 Writes the JSON representation of the object.
1103 </summary>
1104 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1105 <param name="value">The value.</param>
1106 <param name="serializer">The calling serializer.</param>
1107 </member>
1108 <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1109 <summary>
1110 Reads the JSON representation of the object.
1111 </summary>
1112 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1113 <param name="objectType">Type of the object.</param>
1114 <param name="existingValue">The existing value of object being read.</param>
1115 <param name="serializer">The calling serializer.</param>
1116 <returns>The object value.</returns>
1117 </member>
1118 <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)">
1119 <summary>
1120 Determines whether this instance can convert the specified object type.
1121 </summary>
1122 <param name="objectType">Type of the object.</param>
1123 <returns>
1124 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1125 </returns>
1126 </member>
1127 <member name="T:Newtonsoft.Json.Converters.DataSetConverter">
1128 <summary>
1129 Converts a <see cref="T:System.Data.DataSet"/> to and from JSON.
1130 </summary>
1131 </member>
1132 <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1133 <summary>
1134 Writes the JSON representation of the object.
1135 </summary>
1136 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1137 <param name="value">The value.</param>
1138 <param name="serializer">The calling serializer.</param>
1139 </member>
1140 <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1141 <summary>
1142 Reads the JSON representation of the object.
1143 </summary>
1144 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1145 <param name="objectType">Type of the object.</param>
1146 <param name="existingValue">The existing value of object being read.</param>
1147 <param name="serializer">The calling serializer.</param>
1148 <returns>The object value.</returns>
1149 </member>
1150 <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)">
1151 <summary>
1152 Determines whether this instance can convert the specified value type.
1153 </summary>
1154 <param name="valueType">Type of the value.</param>
1155 <returns>
1156 <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>.
1157 </returns>
1158 </member>
1159 <member name="T:Newtonsoft.Json.Converters.DataTableConverter">
1160 <summary>
1161 Converts a <see cref="T:System.Data.DataTable"/> to and from JSON.
1162 </summary>
1163 </member>
1164 <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1165 <summary>
1166 Writes the JSON representation of the object.
1167 </summary>
1168 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1169 <param name="value">The value.</param>
1170 <param name="serializer">The calling serializer.</param>
1171 </member>
1172 <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1173 <summary>
1174 Reads the JSON representation of the object.
1175 </summary>
1176 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1177 <param name="objectType">Type of the object.</param>
1178 <param name="existingValue">The existing value of object being read.</param>
1179 <param name="serializer">The calling serializer.</param>
1180 <returns>The object value.</returns>
1181 </member>
1182 <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)">
1183 <summary>
1184 Determines whether this instance can convert the specified value type.
1185 </summary>
1186 <param name="valueType">Type of the value.</param>
1187 <returns>
1188 <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>.
1189 </returns>
1190 </member>
1191 <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1">
1192 <summary>
1193 Create a custom object
1194 </summary>
1195 <typeparam name="T">The object type to convert.</typeparam>
1196 </member>
1197 <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1198 <summary>
1199 Writes the JSON representation of the object.
1200 </summary>
1201 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1202 <param name="value">The value.</param>
1203 <param name="serializer">The calling serializer.</param>
1204 </member>
1205 <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1206 <summary>
1207 Reads the JSON representation of the object.
1208 </summary>
1209 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1210 <param name="objectType">Type of the object.</param>
1211 <param name="existingValue">The existing value of object being read.</param>
1212 <param name="serializer">The calling serializer.</param>
1213 <returns>The object value.</returns>
1214 </member>
1215 <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)">
1216 <summary>
1217 Creates an object which will then be populated by the serializer.
1218 </summary>
1219 <param name="objectType">Type of the object.</param>
1220 <returns>The created object.</returns>
1221 </member>
1222 <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)">
1223 <summary>
1224 Determines whether this instance can convert the specified object type.
1225 </summary>
1226 <param name="objectType">Type of the object.</param>
1227 <returns>
1228 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1229 </returns>
1230 </member>
1231 <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite">
1232 <summary>
1233 Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON.
1234 </summary>
1235 <value>
1236 <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.
1237 </value>
1238 </member>
1239 <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase">
1240 <summary>
1241 Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON.
1242 </summary>
1243 </member>
1244 <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)">
1245 <summary>
1246 Determines whether this instance can convert the specified object type.
1247 </summary>
1248 <param name="objectType">Type of the object.</param>
1249 <returns>
1250 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1251 </returns>
1252 </member>
1253 <member name="T:Newtonsoft.Json.Converters.DiscriminatedUnionConverter">
1254 <summary>
1255 Converts a F# discriminated union type to and from JSON.
1256 </summary>
1257 </member>
1258 <member name="M:Newtonsoft.Json.Converters.DiscriminatedUnionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1259 <summary>
1260 Writes the JSON representation of the object.
1261 </summary>
1262 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1263 <param name="value">The value.</param>
1264 <param name="serializer">The calling serializer.</param>
1265 </member>
1266 <member name="M:Newtonsoft.Json.Converters.DiscriminatedUnionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1267 <summary>
1268 Reads the JSON representation of the object.
1269 </summary>
1270 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1271 <param name="objectType">Type of the object.</param>
1272 <param name="existingValue">The existing value of object being read.</param>
1273 <param name="serializer">The calling serializer.</param>
1274 <returns>The object value.</returns>
1275 </member>
1276 <member name="M:Newtonsoft.Json.Converters.DiscriminatedUnionConverter.CanConvert(System.Type)">
1277 <summary>
1278 Determines whether this instance can convert the specified object type.
1279 </summary>
1280 <param name="objectType">Type of the object.</param>
1281 <returns>
1282 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1283 </returns>
1284 </member>
1285 <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter">
1286 <summary>
1287 Converts an Entity Framework EntityKey to and from JSON.
1288 </summary>
1289 </member>
1290 <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1291 <summary>
1292 Writes the JSON representation of the object.
1293 </summary>
1294 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1295 <param name="value">The value.</param>
1296 <param name="serializer">The calling serializer.</param>
1297 </member>
1298 <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1299 <summary>
1300 Reads the JSON representation of the object.
1301 </summary>
1302 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1303 <param name="objectType">Type of the object.</param>
1304 <param name="existingValue">The existing value of object being read.</param>
1305 <param name="serializer">The calling serializer.</param>
1306 <returns>The object value.</returns>
1307 </member>
1308 <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)">
1309 <summary>
1310 Determines whether this instance can convert the specified object type.
1311 </summary>
1312 <param name="objectType">Type of the object.</param>
1313 <returns>
1314 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1315 </returns>
1316 </member>
1317 <member name="T:Newtonsoft.Json.Converters.ExpandoObjectConverter">
1318 <summary>
1319 Converts an ExpandoObject to and from JSON.
1320 </summary>
1321 </member>
1322 <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1323 <summary>
1324 Writes the JSON representation of the object.
1325 </summary>
1326 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1327 <param name="value">The value.</param>
1328 <param name="serializer">The calling serializer.</param>
1329 </member>
1330 <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1331 <summary>
1332 Reads the JSON representation of the object.
1333 </summary>
1334 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1335 <param name="objectType">Type of the object.</param>
1336 <param name="existingValue">The existing value of object being read.</param>
1337 <param name="serializer">The calling serializer.</param>
1338 <returns>The object value.</returns>
1339 </member>
1340 <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanConvert(System.Type)">
1341 <summary>
1342 Determines whether this instance can convert the specified object type.
1343 </summary>
1344 <param name="objectType">Type of the object.</param>
1345 <returns>
1346 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1347 </returns>
1348 </member>
1349 <member name="P:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanWrite">
1350 <summary>
1351 Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON.
1352 </summary>
1353 <value>
1354 <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.
1355 </value>
1356 </member>
1357 <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter">
1358 <summary>
1359 Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON.
1360 </summary>
1361 </member>
1362 <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1363 <summary>
1364 Writes the JSON representation of the object.
1365 </summary>
1366 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1367 <param name="value">The value.</param>
1368 <param name="serializer">The calling serializer.</param>
1369 </member>
1370 <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1371 <summary>
1372 Reads the JSON representation of the object.
1373 </summary>
1374 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1375 <param name="objectType">Type of the object.</param>
1376 <param name="existingValue">The existing value of object being read.</param>
1377 <param name="serializer">The calling serializer.</param>
1378 <returns>The object value.</returns>
1379 </member>
1380 <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)">
1381 <summary>
1382 Determines whether this instance can convert the specified object type.
1383 </summary>
1384 <param name="objectType">Type of the object.</param>
1385 <returns>
1386 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1387 </returns>
1388 </member>
1389 <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter">
1390 <summary>
1391 Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON.
1392 </summary>
1393 </member>
1394 <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1395 <summary>
1396 Writes the JSON representation of the object.
1397 </summary>
1398 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1399 <param name="value">The value.</param>
1400 <param name="serializer">The calling serializer.</param>
1401 </member>
1402 <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1403 <summary>
1404 Reads the JSON representation of the object.
1405 </summary>
1406 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1407 <param name="objectType">Type of the object.</param>
1408 <param name="existingValue">The existing value of object being read.</param>
1409 <param name="serializer">The calling serializer.</param>
1410 <returns>The object value.</returns>
1411 </member>
1412 <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)">
1413 <summary>
1414 Determines whether this instance can convert the specified object type.
1415 </summary>
1416 <param name="objectType">Type of the object.</param>
1417 <returns>
1418 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1419 </returns>
1420 </member>
1421 <member name="T:Newtonsoft.Json.Converters.RegexConverter">
1422 <summary>
1423 Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON.
1424 </summary>
1425 </member>
1426 <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1427 <summary>
1428 Writes the JSON representation of the object.
1429 </summary>
1430 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1431 <param name="value">The value.</param>
1432 <param name="serializer">The calling serializer.</param>
1433 </member>
1434 <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1435 <summary>
1436 Reads the JSON representation of the object.
1437 </summary>
1438 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1439 <param name="objectType">Type of the object.</param>
1440 <param name="existingValue">The existing value of object being read.</param>
1441 <param name="serializer">The calling serializer.</param>
1442 <returns>The object value.</returns>
1443 </member>
1444 <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)">
1445 <summary>
1446 Determines whether this instance can convert the specified object type.
1447 </summary>
1448 <param name="objectType">Type of the object.</param>
1449 <returns>
1450 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1451 </returns>
1452 </member>
1453 <member name="T:Newtonsoft.Json.Converters.StringEnumConverter">
1454 <summary>
1455 Converts an <see cref="T:System.Enum"/> to and from its name string value.
1456 </summary>
1457 </member>
1458 <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.#ctor">
1459 <summary>
1460 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Converters.StringEnumConverter"/> class.
1461 </summary>
1462 </member>
1463 <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1464 <summary>
1465 Writes the JSON representation of the object.
1466 </summary>
1467 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1468 <param name="value">The value.</param>
1469 <param name="serializer">The calling serializer.</param>
1470 </member>
1471 <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1472 <summary>
1473 Reads the JSON representation of the object.
1474 </summary>
1475 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1476 <param name="objectType">Type of the object.</param>
1477 <param name="existingValue">The existing value of object being read.</param>
1478 <param name="serializer">The calling serializer.</param>
1479 <returns>The object value.</returns>
1480 </member>
1481 <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)">
1482 <summary>
1483 Determines whether this instance can convert the specified object type.
1484 </summary>
1485 <param name="objectType">Type of the object.</param>
1486 <returns>
1487 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1488 </returns>
1489 </member>
1490 <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText">
1491 <summary>
1492 Gets or sets a value indicating whether the written enum text should be camel case.
1493 </summary>
1494 <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value>
1495 </member>
1496 <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.AllowIntegerValues">
1497 <summary>
1498 Gets or sets a value indicating whether integer values are allowed.
1499 </summary>
1500 <value><c>true</c> if integers are allowed; otherwise, <c>false</c>.</value>
1501 </member>
1502 <member name="T:Newtonsoft.Json.ConstructorHandling">
1503 <summary>
1504 Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
1505 </summary>
1506 </member>
1507 <member name="F:Newtonsoft.Json.ConstructorHandling.Default">
1508 <summary>
1509 First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor.
1510 </summary>
1511 </member>
1512 <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor">
1513 <summary>
1514 Json.NET will use a non-public default constructor before falling back to a paramatized constructor.
1515 </summary>
1516 </member>
1517 <member name="T:Newtonsoft.Json.Converters.VersionConverter">
1518 <summary>
1519 Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4").
1520 </summary>
1521 </member>
1522 <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
1523 <summary>
1524 Writes the JSON representation of the object.
1525 </summary>
1526 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
1527 <param name="value">The value.</param>
1528 <param name="serializer">The calling serializer.</param>
1529 </member>
1530 <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
1531 <summary>
1532 Reads the JSON representation of the object.
1533 </summary>
1534 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
1535 <param name="objectType">Type of the object.</param>
1536 <param name="existingValue">The existing property value of the JSON that is being converted.</param>
1537 <param name="serializer">The calling serializer.</param>
1538 <returns>The object value.</returns>
1539 </member>
1540 <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)">
1541 <summary>
1542 Determines whether this instance can convert the specified object type.
1543 </summary>
1544 <param name="objectType">Type of the object.</param>
1545 <returns>
1546 <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
1547 </returns>
1548 </member>
1549 <member name="T:Newtonsoft.Json.FloatFormatHandling">
1550 <summary>
1551 Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>,
1552 <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>.
1553 </summary>
1554 </member>
1555 <member name="F:Newtonsoft.Json.FloatFormatHandling.String">
1556 <summary>
1557 Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity".
1558 </summary>
1559 </member>
1560 <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol">
1561 <summary>
1562 Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity.
1563 Note that this will produce non-valid JSON.
1564 </summary>
1565 </member>
1566 <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue">
1567 <summary>
1568 Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property.
1569 </summary>
1570 </member>
1571 <member name="T:Newtonsoft.Json.FloatParseHandling">
1572 <summary>
1573 Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
1574 </summary>
1575 </member>
1576 <member name="F:Newtonsoft.Json.FloatParseHandling.Double">
1577 <summary>
1578 Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>.
1579 </summary>
1580 </member>
1581 <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal">
1582 <summary>
1583 Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>.
1584 </summary>
1585 </member>
1586 <member name="T:Newtonsoft.Json.JsonDictionaryAttribute">
1587 <summary>
1588 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection.
1589 </summary>
1590 </member>
1591 <member name="T:Newtonsoft.Json.JsonContainerAttribute">
1592 <summary>
1593 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object.
1594 </summary>
1595 </member>
1596 <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor">
1597 <summary>
1598 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class.
1599 </summary>
1600 </member>
1601 <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)">
1602 <summary>
1603 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id.
1604 </summary>
1605 <param name="id">The container Id.</param>
1606 </member>
1607 <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id">
1608 <summary>
1609 Gets or sets the id.
1610 </summary>
1611 <value>The id.</value>
1612 </member>
1613 <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title">
1614 <summary>
1615 Gets or sets the title.
1616 </summary>
1617 <value>The title.</value>
1618 </member>
1619 <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description">
1620 <summary>
1621 Gets or sets the description.
1622 </summary>
1623 <value>The description.</value>
1624 </member>
1625 <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType">
1626 <summary>
1627 Gets the collection's items converter.
1628 </summary>
1629 <value>The collection's items converter.</value>
1630 </member>
1631 <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterParameters">
1632 <summary>
1633 The parameter list to use when constructing the JsonConverter described by ItemConverterType.
1634 If null, the default constructor is used.
1635 When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number,
1636 order, and type of these parameters.
1637 </summary>
1638 <example>
1639 [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
1640 </example>
1641 </member>
1642 <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference">
1643 <summary>
1644 Gets or sets a value that indicates whether to preserve object references.
1645 </summary>
1646 <value>
1647 <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>.
1648 </value>
1649 </member>
1650 <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference">
1651 <summary>
1652 Gets or sets a value that indicates whether to preserve collection's items references.
1653 </summary>
1654 <value>
1655 <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>.
1656 </value>
1657 </member>
1658 <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling">
1659 <summary>
1660 Gets or sets the reference loop handling used when serializing the collection's items.
1661 </summary>
1662 <value>The reference loop handling.</value>
1663 </member>
1664 <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling">
1665 <summary>
1666 Gets or sets the type name handling used when serializing the collection's items.
1667 </summary>
1668 <value>The type name handling.</value>
1669 </member>
1670 <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor">
1671 <summary>
1672 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class.
1673 </summary>
1674 </member>
1675 <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)">
1676 <summary>
1677 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id.
1678 </summary>
1679 <param name="id">The container Id.</param>
1680 </member>
1681 <member name="T:Newtonsoft.Json.JsonException">
1682 <summary>
1683 The exception thrown when an error occurs during Json serialization or deserialization.
1684 </summary>
1685 </member>
1686 <member name="M:Newtonsoft.Json.JsonException.#ctor">
1687 <summary>
1688 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class.
1689 </summary>
1690 </member>
1691 <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)">
1692 <summary>
1693 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class
1694 with a specified error message.
1695 </summary>
1696 <param name="message">The error message that explains the reason for the exception.</param>
1697 </member>
1698 <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)">
1699 <summary>
1700 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class
1701 with a specified error message and a reference to the inner exception that is the cause of this exception.
1702 </summary>
1703 <param name="message">The error message that explains the reason for the exception.</param>
1704 <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
1705 </member>
1706 <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
1707 <summary>
1708 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class.
1709 </summary>
1710 <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
1711 <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
1712 <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>
1713 <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>
1714 </member>
1715 <member name="T:Newtonsoft.Json.DateFormatHandling">
1716 <summary>
1717 Specifies how dates are formatted when writing JSON text.
1718 </summary>
1719 </member>
1720 <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat">
1721 <summary>
1722 Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z".
1723 </summary>
1724 </member>
1725 <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat">
1726 <summary>
1727 Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/".
1728 </summary>
1729 </member>
1730 <member name="T:Newtonsoft.Json.DateParseHandling">
1731 <summary>
1732 Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text.
1733 </summary>
1734 </member>
1735 <member name="F:Newtonsoft.Json.DateParseHandling.None">
1736 <summary>
1737 Date formatted strings are not parsed to a date type and are read as strings.
1738 </summary>
1739 </member>
1740 <member name="F:Newtonsoft.Json.DateParseHandling.DateTime">
1741 <summary>
1742 Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>.
1743 </summary>
1744 </member>
1745 <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset">
1746 <summary>
1747 Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>.
1748 </summary>
1749 </member>
1750 <member name="T:Newtonsoft.Json.DateTimeZoneHandling">
1751 <summary>
1752 Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>.
1753 </summary>
1754 </member>
1755 <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local">
1756 <summary>
1757 Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time.
1758 </summary>
1759 </member>
1760 <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc">
1761 <summary>
1762 Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC.
1763 </summary>
1764 </member>
1765 <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified">
1766 <summary>
1767 Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string.
1768 If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified.
1769 </summary>
1770 </member>
1771 <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind">
1772 <summary>
1773 Time zone information should be preserved when converting.
1774 </summary>
1775 </member>
1776 <member name="T:Newtonsoft.Json.Formatting">
1777 <summary>
1778 Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>.
1779 </summary>
1780 </member>
1781 <member name="F:Newtonsoft.Json.Formatting.None">
1782 <summary>
1783 No special formatting is applied. This is the default.
1784 </summary>
1785 </member>
1786 <member name="F:Newtonsoft.Json.Formatting.Indented">
1787 <summary>
1788 Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings.
1789 </summary>
1790 </member>
1791 <member name="T:Newtonsoft.Json.JsonConstructorAttribute">
1792 <summary>
1793 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object.
1794 </summary>
1795 </member>
1796 <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute">
1797 <summary>
1798 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection
1799 and write values during serialization.
1800 </summary>
1801 </member>
1802 <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor">
1803 <summary>
1804 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class.
1805 </summary>
1806 </member>
1807 <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData">
1808 <summary>
1809 Gets or sets a value that indicates whether to write extension data when serializing the object.
1810 </summary>
1811 <value>
1812 <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>.
1813 </value>
1814 </member>
1815 <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData">
1816 <summary>
1817 Gets or sets a value that indicates whether to read extension data when deserializing the object.
1818 </summary>
1819 <value>
1820 <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>.
1821 </value>
1822 </member>
1823 <member name="T:Newtonsoft.Json.Linq.JsonMergeSettings">
1824 <summary>
1825 Specifies the settings used when merging JSON.
1826 </summary>
1827 </member>
1828 <member name="P:Newtonsoft.Json.Linq.JsonMergeSettings.MergeArrayHandling">
1829 <summary>
1830 Gets or sets the method used when merging JSON arrays.
1831 </summary>
1832 <value>The method used when merging JSON arrays.</value>
1833 </member>
1834 <member name="T:Newtonsoft.Json.Linq.MergeArrayHandling">
1835 <summary>
1836 Specifies how JSON arrays are merged together.
1837 </summary>
1838 </member>
1839 <member name="F:Newtonsoft.Json.Linq.MergeArrayHandling.Concat">
1840 <summary>Concatenate arrays.</summary>
1841 </member>
1842 <member name="F:Newtonsoft.Json.Linq.MergeArrayHandling.Union">
1843 <summary>Union arrays, skipping items that already exist.</summary>
1844 </member>
1845 <member name="F:Newtonsoft.Json.Linq.MergeArrayHandling.Replace">
1846 <summary>Replace all array items.</summary>
1847 </member>
1848 <member name="F:Newtonsoft.Json.Linq.MergeArrayHandling.Merge">
1849 <summary>Merge array items together, matched by index.</summary>
1850 </member>
1851 <member name="T:Newtonsoft.Json.MetadataPropertyHandling">
1852 <summary>
1853 Specifies metadata property handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
1854 </summary>
1855 </member>
1856 <member name="F:Newtonsoft.Json.MetadataPropertyHandling.Default">
1857 <summary>
1858 Read metadata properties located at the start of a JSON object.
1859 </summary>
1860 </member>
1861 <member name="F:Newtonsoft.Json.MetadataPropertyHandling.ReadAhead">
1862 <summary>
1863 Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance.
1864 </summary>
1865 </member>
1866 <member name="F:Newtonsoft.Json.MetadataPropertyHandling.Ignore">
1867 <summary>
1868 Do not try to read metadata properties.
1869 </summary>
1870 </member>
1871 <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter">
1872 <summary>
1873 Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances.
1874 </summary>
1875 </member>
1876 <member name="T:Newtonsoft.Json.Serialization.ITraceWriter">
1877 <summary>
1878 Represents a trace writer.
1879 </summary>
1880 </member>
1881 <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)">
1882 <summary>
1883 Writes the specified trace level, message and optional exception.
1884 </summary>
1885 <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param>
1886 <param name="message">The trace message.</param>
1887 <param name="ex">The trace exception. This parameter is optional.</param>
1888 </member>
1889 <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter">
1890 <summary>
1891 Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.
1892 For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>,
1893 <code>Warning</code> and <code>Error</code> messages.
1894 </summary>
1895 <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value>
1896 </member>
1897 <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)">
1898 <summary>
1899 Writes the specified trace level, message and optional exception.
1900 </summary>
1901 <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param>
1902 <param name="message">The trace message.</param>
1903 <param name="ex">The trace exception. This parameter is optional.</param>
1904 </member>
1905 <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter">
1906 <summary>
1907 Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.
1908 For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>,
1909 <code>Warning</code> and <code>Error</code> messages.
1910 </summary>
1911 <value>
1912 The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.
1913 </value>
1914 </member>
1915 <member name="T:Newtonsoft.Json.Serialization.ExpressionValueProvider">
1916 <summary>
1917 Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods.
1918 </summary>
1919 </member>
1920 <member name="T:Newtonsoft.Json.Serialization.IValueProvider">
1921 <summary>
1922 Provides methods to get and set values.
1923 </summary>
1924 </member>
1925 <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)">
1926 <summary>
1927 Sets the value.
1928 </summary>
1929 <param name="target">The target to set the value on.</param>
1930 <param name="value">The value to set on the target.</param>
1931 </member>
1932 <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)">
1933 <summary>
1934 Gets the value.
1935 </summary>
1936 <param name="target">The target to get the value from.</param>
1937 <returns>The value.</returns>
1938 </member>
1939 <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.#ctor(System.Reflection.MemberInfo)">
1940 <summary>
1941 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"/> class.
1942 </summary>
1943 <param name="memberInfo">The member info.</param>
1944 </member>
1945 <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.SetValue(System.Object,System.Object)">
1946 <summary>
1947 Sets the value.
1948 </summary>
1949 <param name="target">The target to set the value on.</param>
1950 <param name="value">The value to set on the target.</param>
1951 </member>
1952 <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.GetValue(System.Object)">
1953 <summary>
1954 Gets the value.
1955 </summary>
1956 <param name="target">The target to get the value from.</param>
1957 <returns>The value.</returns>
1958 </member>
1959 <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract">
1960 <summary>
1961 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
1962 </summary>
1963 </member>
1964 <member name="T:Newtonsoft.Json.Serialization.JsonContract">
1965 <summary>
1966 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
1967 </summary>
1968 </member>
1969 <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType">
1970 <summary>
1971 Gets the underlying type for the contract.
1972 </summary>
1973 <value>The underlying type for the contract.</value>
1974 </member>
1975 <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType">
1976 <summary>
1977 Gets or sets the type created during deserialization.
1978 </summary>
1979 <value>The type created during deserialization.</value>
1980 </member>
1981 <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference">
1982 <summary>
1983 Gets or sets whether this type contract is serialized as a reference.
1984 </summary>
1985 <value>Whether this type contract is serialized as a reference.</value>
1986 </member>
1987 <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter">
1988 <summary>
1989 Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract.
1990 </summary>
1991 <value>The converter.</value>
1992 </member>
1993 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks">
1994 <summary>
1995 Gets or sets all methods called immediately after deserialization of the object.
1996 </summary>
1997 <value>The methods called immediately after deserialization of the object.</value>
1998 </member>
1999 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks">
2000 <summary>
2001 Gets or sets all methods called during deserialization of the object.
2002 </summary>
2003 <value>The methods called during deserialization of the object.</value>
2004 </member>
2005 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks">
2006 <summary>
2007 Gets or sets all methods called after serialization of the object graph.
2008 </summary>
2009 <value>The methods called after serialization of the object graph.</value>
2010 </member>
2011 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks">
2012 <summary>
2013 Gets or sets all methods called before serialization of the object.
2014 </summary>
2015 <value>The methods called before serialization of the object.</value>
2016 </member>
2017 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks">
2018 <summary>
2019 Gets or sets all method called when an error is thrown during the serialization of the object.
2020 </summary>
2021 <value>The methods called when an error is thrown during the serialization of the object.</value>
2022 </member>
2023 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized">
2024 <summary>
2025 Gets or sets the method called immediately after deserialization of the object.
2026 </summary>
2027 <value>The method called immediately after deserialization of the object.</value>
2028 </member>
2029 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing">
2030 <summary>
2031 Gets or sets the method called during deserialization of the object.
2032 </summary>
2033 <value>The method called during deserialization of the object.</value>
2034 </member>
2035 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized">
2036 <summary>
2037 Gets or sets the method called after serialization of the object graph.
2038 </summary>
2039 <value>The method called after serialization of the object graph.</value>
2040 </member>
2041 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing">
2042 <summary>
2043 Gets or sets the method called before serialization of the object.
2044 </summary>
2045 <value>The method called before serialization of the object.</value>
2046 </member>
2047 <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError">
2048 <summary>
2049 Gets or sets the method called when an error is thrown during the serialization of the object.
2050 </summary>
2051 <value>The method called when an error is thrown during the serialization of the object.</value>
2052 </member>
2053 <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator">
2054 <summary>
2055 Gets or sets the default creator method used to create the object.
2056 </summary>
2057 <value>The default creator method used to create the object.</value>
2058 </member>
2059 <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic">
2060 <summary>
2061 Gets or sets a value indicating whether the default creator is non public.
2062 </summary>
2063 <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value>
2064 </member>
2065 <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)">
2066 <summary>
2067 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class.
2068 </summary>
2069 <param name="underlyingType">The underlying type for the contract.</param>
2070 </member>
2071 <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter">
2072 <summary>
2073 Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>.
2074 </summary>
2075 <value>The converter.</value>
2076 </member>
2077 <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference">
2078 <summary>
2079 Gets or sets a value indicating whether the collection items preserve object references.
2080 </summary>
2081 <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value>
2082 </member>
2083 <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling">
2084 <summary>
2085 Gets or sets the collection item reference loop handling.
2086 </summary>
2087 <value>The reference loop handling.</value>
2088 </member>
2089 <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling">
2090 <summary>
2091 Gets or sets the collection item type name handling.
2092 </summary>
2093 <value>The type name handling.</value>
2094 </member>
2095 <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter">
2096 <summary>
2097 Represents a trace writer that writes to memory. When the trace message limit is
2098 reached then old trace messages will be removed as new messages are added.
2099 </summary>
2100 </member>
2101 <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor">
2102 <summary>
2103 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class.
2104 </summary>
2105 </member>
2106 <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)">
2107 <summary>
2108 Writes the specified trace level, message and optional exception.
2109 </summary>
2110 <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param>
2111 <param name="message">The trace message.</param>
2112 <param name="ex">The trace exception. This parameter is optional.</param>
2113 </member>
2114 <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages">
2115 <summary>
2116 Returns an enumeration of the most recent trace messages.
2117 </summary>
2118 <returns>An enumeration of the most recent trace messages.</returns>
2119 </member>
2120 <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString">
2121 <summary>
2122 Returns a <see cref="T:System.String"/> of the most recent trace messages.
2123 </summary>
2124 <returns>
2125 A <see cref="T:System.String"/> of the most recent trace messages.
2126 </returns>
2127 </member>
2128 <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter">
2129 <summary>
2130 Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.
2131 For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>,
2132 <code>Warning</code> and <code>Error</code> messages.
2133 </summary>
2134 <value>
2135 The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.
2136 </value>
2137 </member>
2138 <member name="T:Newtonsoft.Json.IJsonLineInfo">
2139 <summary>
2140 Provides an interface to enable a class to return line and position information.
2141 </summary>
2142 </member>
2143 <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo">
2144 <summary>
2145 Gets a value indicating whether the class can return line information.
2146 </summary>
2147 <returns>
2148 <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>.
2149 </returns>
2150 </member>
2151 <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber">
2152 <summary>
2153 Gets the current line number.
2154 </summary>
2155 <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value>
2156 </member>
2157 <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition">
2158 <summary>
2159 Gets the current line position.
2160 </summary>
2161 <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value>
2162 </member>
2163 <member name="T:Newtonsoft.Json.StringEscapeHandling">
2164 <summary>
2165 Specifies how strings are escaped when writing JSON text.
2166 </summary>
2167 </member>
2168 <member name="F:Newtonsoft.Json.StringEscapeHandling.Default">
2169 <summary>
2170 Only control characters (e.g. newline) are escaped.
2171 </summary>
2172 </member>
2173 <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii">
2174 <summary>
2175 All non-ASCII and control characters (e.g. newline) are escaped.
2176 </summary>
2177 </member>
2178 <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml">
2179 <summary>
2180 HTML (&lt;, &gt;, &amp;, &apos;, &quot;) and control characters (e.g. newline) are escaped.
2181 </summary>
2182 </member>
2183 <member name="T:Newtonsoft.Json.Linq.JRaw">
2184 <summary>
2185 Represents a raw JSON string.
2186 </summary>
2187 </member>
2188 <member name="T:Newtonsoft.Json.Linq.JValue">
2189 <summary>
2190 Represents a value in JSON (string, integer, date, etc).
2191 </summary>
2192 </member>
2193 <member name="T:Newtonsoft.Json.Linq.JToken">
2194 <summary>
2195 Represents an abstract JSON token.
2196 </summary>
2197 </member>
2198 <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1">
2199 <summary>
2200 Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects.
2201 </summary>
2202 <typeparam name="T">The type of token</typeparam>
2203 </member>
2204 <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)">
2205 <summary>
2206 Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key.
2207 </summary>
2208 <value></value>
2209 </member>
2210 <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)">
2211 <summary>
2212 Compares the values of two tokens, including the values of all descendant tokens.
2213 </summary>
2214 <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param>
2215 <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param>
2216 <returns>true if the tokens are equal; otherwise false.</returns>
2217 </member>
2218 <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)">
2219 <summary>
2220 Adds the specified content immediately after this token.
2221 </summary>
2222 <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param>
2223 </member>
2224 <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)">
2225 <summary>
2226 Adds the specified content immediately before this token.
2227 </summary>
2228 <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param>
2229 </member>
2230 <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors">
2231 <summary>
2232 Returns a collection of the ancestor tokens of this token.
2233 </summary>
2234 <returns>A collection of the ancestor tokens of this token.</returns>
2235 </member>
2236 <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf">
2237 <summary>
2238 Returns a collection of the sibling tokens after this token, in document order.
2239 </summary>
2240 <returns>A collection of the sibling tokens after this tokens, in document order.</returns>
2241 </member>
2242 <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf">
2243 <summary>
2244 Returns a collection of the sibling tokens before this token, in document order.
2245 </summary>
2246 <returns>A collection of the sibling tokens before this token, in document order.</returns>
2247 </member>
2248 <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)">
2249 <summary>
2250 Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type.
2251 </summary>
2252 <typeparam name="T">The type to convert the token to.</typeparam>
2253 <param name="key">The token key.</param>
2254 <returns>The converted token value.</returns>
2255 </member>
2256 <member name="M:Newtonsoft.Json.Linq.JToken.Children">
2257 <summary>
2258 Returns a collection of the child tokens of this token, in document order.
2259 </summary>
2260 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns>
2261 </member>
2262 <member name="M:Newtonsoft.Json.Linq.JToken.Children``1">
2263 <summary>
2264 Returns a collection of the child tokens of this token, in document order, filtered by the specified type.
2265 </summary>
2266 <typeparam name="T">The type to filter the child tokens on.</typeparam>
2267 <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns>
2268 </member>
2269 <member name="M:Newtonsoft.Json.Linq.JToken.Values``1">
2270 <summary>
2271 Returns a collection of the child values of this token, in document order.
2272 </summary>
2273 <typeparam name="T">The type to convert the values to.</typeparam>
2274 <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns>
2275 </member>
2276 <member name="M:Newtonsoft.Json.Linq.JToken.Remove">
2277 <summary>
2278 Removes this token from its parent.
2279 </summary>
2280 </member>
2281 <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)">
2282 <summary>
2283 Replaces this token with the specified token.
2284 </summary>
2285 <param name="value">The value.</param>
2286 </member>
2287 <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])">
2288 <summary>
2289 Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>.
2290 </summary>
2291 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
2292 <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param>
2293 </member>
2294 <member name="M:Newtonsoft.Json.Linq.JToken.ToString">
2295 <summary>
2296 Returns the indented JSON for this token.
2297 </summary>
2298 <returns>
2299 The indented JSON for this token.
2300 </returns>
2301 </member>
2302 <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])">
2303 <summary>
2304 Returns the JSON for this token using the given formatting and converters.
2305 </summary>
2306 <param name="formatting">Indicates how the output is formatted.</param>
2307 <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param>
2308 <returns>The JSON for this token using the given formatting and converters.</returns>
2309 </member>
2310 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean">
2311 <summary>
2312 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>.
2313 </summary>
2314 <param name="value">The value.</param>
2315 <returns>The result of the conversion.</returns>
2316 </member>
2317 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset">
2318 <summary>
2319 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>.
2320 </summary>
2321 <param name="value">The value.</param>
2322 <returns>The result of the conversion.</returns>
2323 </member>
2324 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}">
2325 <summary>
2326 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2327 </summary>
2328 <param name="value">The value.</param>
2329 <returns>The result of the conversion.</returns>
2330 </member>
2331 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64">
2332 <summary>
2333 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>.
2334 </summary>
2335 <param name="value">The value.</param>
2336 <returns>The result of the conversion.</returns>
2337 </member>
2338 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}">
2339 <summary>
2340 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2341 </summary>
2342 <param name="value">The value.</param>
2343 <returns>The result of the conversion.</returns>
2344 </member>
2345 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}">
2346 <summary>
2347 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2348 </summary>
2349 <param name="value">The value.</param>
2350 <returns>The result of the conversion.</returns>
2351 </member>
2352 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}">
2353 <summary>
2354 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2355 </summary>
2356 <param name="value">The value.</param>
2357 <returns>The result of the conversion.</returns>
2358 </member>
2359 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}">
2360 <summary>
2361 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2362 </summary>
2363 <param name="value">The value.</param>
2364 <returns>The result of the conversion.</returns>
2365 </member>
2366 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}">
2367 <summary>
2368 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2369 </summary>
2370 <param name="value">The value.</param>
2371 <returns>The result of the conversion.</returns>
2372 </member>
2373 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32">
2374 <summary>
2375 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>.
2376 </summary>
2377 <param name="value">The value.</param>
2378 <returns>The result of the conversion.</returns>
2379 </member>
2380 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16">
2381 <summary>
2382 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>.
2383 </summary>
2384 <param name="value">The value.</param>
2385 <returns>The result of the conversion.</returns>
2386 </member>
2387 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16">
2388 <summary>
2389 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>.
2390 </summary>
2391 <param name="value">The value.</param>
2392 <returns>The result of the conversion.</returns>
2393 </member>
2394 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char">
2395 <summary>
2396 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>.
2397 </summary>
2398 <param name="value">The value.</param>
2399 <returns>The result of the conversion.</returns>
2400 </member>
2401 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte">
2402 <summary>
2403 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>.
2404 </summary>
2405 <param name="value">The value.</param>
2406 <returns>The result of the conversion.</returns>
2407 </member>
2408 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte">
2409 <summary>
2410 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>.
2411 </summary>
2412 <param name="value">The value.</param>
2413 <returns>The result of the conversion.</returns>
2414 </member>
2415 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}">
2416 <summary>
2417 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2418 </summary>
2419 <param name="value">The value.</param>
2420 <returns>The result of the conversion.</returns>
2421 </member>
2422 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}">
2423 <summary>
2424 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2425 </summary>
2426 <param name="value">The value.</param>
2427 <returns>The result of the conversion.</returns>
2428 </member>
2429 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}">
2430 <summary>
2431 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2432 </summary>
2433 <param name="value">The value.</param>
2434 <returns>The result of the conversion.</returns>
2435 </member>
2436 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}">
2437 <summary>
2438 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2439 </summary>
2440 <param name="value">The value.</param>
2441 <returns>The result of the conversion.</returns>
2442 </member>
2443 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}">
2444 <summary>
2445 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2446 </summary>
2447 <param name="value">The value.</param>
2448 <returns>The result of the conversion.</returns>
2449 </member>
2450 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime">
2451 <summary>
2452 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>.
2453 </summary>
2454 <param name="value">The value.</param>
2455 <returns>The result of the conversion.</returns>
2456 </member>
2457 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}">
2458 <summary>
2459 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2460 </summary>
2461 <param name="value">The value.</param>
2462 <returns>The result of the conversion.</returns>
2463 </member>
2464 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}">
2465 <summary>
2466 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2467 </summary>
2468 <param name="value">The value.</param>
2469 <returns>The result of the conversion.</returns>
2470 </member>
2471 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal">
2472 <summary>
2473 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>.
2474 </summary>
2475 <param name="value">The value.</param>
2476 <returns>The result of the conversion.</returns>
2477 </member>
2478 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}">
2479 <summary>
2480 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2481 </summary>
2482 <param name="value">The value.</param>
2483 <returns>The result of the conversion.</returns>
2484 </member>
2485 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}">
2486 <summary>
2487 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>.
2488 </summary>
2489 <param name="value">The value.</param>
2490 <returns>The result of the conversion.</returns>
2491 </member>
2492 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double">
2493 <summary>
2494 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>.
2495 </summary>
2496 <param name="value">The value.</param>
2497 <returns>The result of the conversion.</returns>
2498 </member>
2499 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single">
2500 <summary>
2501 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>.
2502 </summary>
2503 <param name="value">The value.</param>
2504 <returns>The result of the conversion.</returns>
2505 </member>
2506 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String">
2507 <summary>
2508 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>.
2509 </summary>
2510 <param name="value">The value.</param>
2511 <returns>The result of the conversion.</returns>
2512 </member>
2513 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32">
2514 <summary>
2515 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>.
2516 </summary>
2517 <param name="value">The value.</param>
2518 <returns>The result of the conversion.</returns>
2519 </member>
2520 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64">
2521 <summary>
2522 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>.
2523 </summary>
2524 <param name="value">The value.</param>
2525 <returns>The result of the conversion.</returns>
2526 </member>
2527 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]">
2528 <summary>
2529 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>.
2530 </summary>
2531 <param name="value">The value.</param>
2532 <returns>The result of the conversion.</returns>
2533 </member>
2534 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid">
2535 <summary>
2536 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>.
2537 </summary>
2538 <param name="value">The value.</param>
2539 <returns>The result of the conversion.</returns>
2540 </member>
2541 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}">
2542 <summary>
2543 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>.
2544 </summary>
2545 <param name="value">The value.</param>
2546 <returns>The result of the conversion.</returns>
2547 </member>
2548 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan">
2549 <summary>
2550 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>.
2551 </summary>
2552 <param name="value">The value.</param>
2553 <returns>The result of the conversion.</returns>
2554 </member>
2555 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}">
2556 <summary>
2557 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>.
2558 </summary>
2559 <param name="value">The value.</param>
2560 <returns>The result of the conversion.</returns>
2561 </member>
2562 <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri">
2563 <summary>
2564 Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>.
2565 </summary>
2566 <param name="value">The value.</param>
2567 <returns>The result of the conversion.</returns>
2568 </member>
2569 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken">
2570 <summary>
2571 Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2572 </summary>
2573 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2574 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2575 </member>
2576 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken">
2577 <summary>
2578 Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2579 </summary>
2580 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2581 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2582 </member>
2583 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken">
2584 <summary>
2585 Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2586 </summary>
2587 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2588 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2589 </member>
2590 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken">
2591 <summary>
2592 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2593 </summary>
2594 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2595 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2596 </member>
2597 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken">
2598 <summary>
2599 Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2600 </summary>
2601 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2602 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2603 </member>
2604 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken">
2605 <summary>
2606 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2607 </summary>
2608 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2609 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2610 </member>
2611 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken">
2612 <summary>
2613 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2614 </summary>
2615 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2616 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2617 </member>
2618 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken">
2619 <summary>
2620 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2621 </summary>
2622 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2623 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2624 </member>
2625 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken">
2626 <summary>
2627 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2628 </summary>
2629 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2630 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2631 </member>
2632 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken">
2633 <summary>
2634 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2635 </summary>
2636 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2637 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2638 </member>
2639 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken">
2640 <summary>
2641 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2642 </summary>
2643 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2644 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2645 </member>
2646 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken">
2647 <summary>
2648 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2649 </summary>
2650 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2651 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2652 </member>
2653 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken">
2654 <summary>
2655 Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2656 </summary>
2657 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2658 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2659 </member>
2660 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken">
2661 <summary>
2662 Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2663 </summary>
2664 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2665 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2666 </member>
2667 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken">
2668 <summary>
2669 Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2670 </summary>
2671 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2672 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2673 </member>
2674 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken">
2675 <summary>
2676 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2677 </summary>
2678 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2679 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2680 </member>
2681 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken">
2682 <summary>
2683 Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2684 </summary>
2685 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2686 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2687 </member>
2688 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken">
2689 <summary>
2690 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2691 </summary>
2692 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2693 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2694 </member>
2695 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken">
2696 <summary>
2697 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2698 </summary>
2699 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2700 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2701 </member>
2702 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken">
2703 <summary>
2704 Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2705 </summary>
2706 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2707 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2708 </member>
2709 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken">
2710 <summary>
2711 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2712 </summary>
2713 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2714 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2715 </member>
2716 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken">
2717 <summary>
2718 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2719 </summary>
2720 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2721 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2722 </member>
2723 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken">
2724 <summary>
2725 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2726 </summary>
2727 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2728 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2729 </member>
2730 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken">
2731 <summary>
2732 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2733 </summary>
2734 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2735 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2736 </member>
2737 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken">
2738 <summary>
2739 Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2740 </summary>
2741 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2742 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2743 </member>
2744 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken">
2745 <summary>
2746 Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2747 </summary>
2748 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2749 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2750 </member>
2751 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken">
2752 <summary>
2753 Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2754 </summary>
2755 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2756 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2757 </member>
2758 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken">
2759 <summary>
2760 Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2761 </summary>
2762 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2763 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2764 </member>
2765 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken">
2766 <summary>
2767 Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2768 </summary>
2769 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2770 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2771 </member>
2772 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken">
2773 <summary>
2774 Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2775 </summary>
2776 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2777 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2778 </member>
2779 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken">
2780 <summary>
2781 Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2782 </summary>
2783 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2784 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2785 </member>
2786 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken">
2787 <summary>
2788 Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2789 </summary>
2790 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2791 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2792 </member>
2793 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken">
2794 <summary>
2795 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2796 </summary>
2797 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2798 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2799 </member>
2800 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken">
2801 <summary>
2802 Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2803 </summary>
2804 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2805 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2806 </member>
2807 <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken">
2808 <summary>
2809 Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2810 </summary>
2811 <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param>
2812 <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns>
2813 </member>
2814 <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader">
2815 <summary>
2816 Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token.
2817 </summary>
2818 <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns>
2819 </member>
2820 <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)">
2821 <summary>
2822 Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object.
2823 </summary>
2824 <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param>
2825 <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns>
2826 </member>
2827 <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)">
2828 <summary>
2829 Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
2830 </summary>
2831 <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param>
2832 <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param>
2833 <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns>
2834 </member>
2835 <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1">
2836 <summary>
2837 Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2838 </summary>
2839 <typeparam name="T">The object type that the token will be deserialized to.</typeparam>
2840 <returns>The new object created from the JSON value.</returns>
2841 </member>
2842 <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)">
2843 <summary>
2844 Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2845 </summary>
2846 <param name="objectType">The object type that the token will be deserialized to.</param>
2847 <returns>The new object created from the JSON value.</returns>
2848 </member>
2849 <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)">
2850 <summary>
2851 Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
2852 </summary>
2853 <typeparam name="T">The object type that the token will be deserialized to.</typeparam>
2854 <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param>
2855 <returns>The new object created from the JSON value.</returns>
2856 </member>
2857 <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)">
2858 <summary>
2859 Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
2860 </summary>
2861 <param name="objectType">The object type that the token will be deserialized to.</param>
2862 <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param>
2863 <returns>The new object created from the JSON value.</returns>
2864 </member>
2865 <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)">
2866 <summary>
2867 Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>.
2868 </summary>
2869 <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param>
2870 <returns>
2871 An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens
2872 that were read from the reader. The runtime type of the token is determined
2873 by the token type of the first token encountered in the reader.
2874 </returns>
2875 </member>
2876 <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)">
2877 <summary>
2878 Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON.
2879 </summary>
2880 <param name="json">A <see cref="T:System.String"/> that contains JSON.</param>
2881 <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns>
2882 </member>
2883 <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)">
2884 <summary>
2885 Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>.
2886 </summary>
2887 <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param>
2888 <returns>
2889 An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens
2890 that were read from the reader. The runtime type of the token is determined
2891 by the token type of the first token encountered in the reader.
2892 </returns>
2893 </member>
2894 <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)">
2895 <summary>
2896 Selects a <see cref="T:Newtonsoft.Json.Linq.JToken"/> using a JPath expression. Selects the token that matches the object path.
2897 </summary>
2898 <param name="path">
2899 A <see cref="T:System.String"/> that contains a JPath expression.
2900 </param>
2901 <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/>, or null.</returns>
2902 </member>
2903 <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)">
2904 <summary>
2905 Selects a <see cref="T:Newtonsoft.Json.Linq.JToken"/> using a JPath expression. Selects the token that matches the object path.
2906 </summary>
2907 <param name="path">
2908 A <see cref="T:System.String"/> that contains a JPath expression.
2909 </param>
2910 <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.</param>
2911 <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns>
2912 </member>
2913 <member name="M:Newtonsoft.Json.Linq.JToken.SelectTokens(System.String)">
2914 <summary>
2915 Selects a collection of elements using a JPath expression.
2916 </summary>
2917 <param name="path">
2918 A <see cref="T:System.String"/> that contains a JPath expression.
2919 </param>
2920 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the selected elements.</returns>
2921 </member>
2922 <member name="M:Newtonsoft.Json.Linq.JToken.SelectTokens(System.String,System.Boolean)">
2923 <summary>
2924 Selects a collection of elements using a JPath expression.
2925 </summary>
2926 <param name="path">
2927 A <see cref="T:System.String"/> that contains a JPath expression.
2928 </param>
2929 <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.</param>
2930 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the selected elements.</returns>
2931 </member>
2932 <member name="M:Newtonsoft.Json.Linq.JToken.GetMetaObject(System.Linq.Expressions.Expression)">
2933 <summary>
2934 Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object.
2935 </summary>
2936 <param name="parameter">The expression tree representation of the runtime value.</param>
2937 <returns>
2938 The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object.
2939 </returns>
2940 </member>
2941 <member name="M:Newtonsoft.Json.Linq.JToken.System#Dynamic#IDynamicMetaObjectProvider#GetMetaObject(System.Linq.Expressions.Expression)">
2942 <summary>
2943 Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object.
2944 </summary>
2945 <param name="parameter">The expression tree representation of the runtime value.</param>
2946 <returns>
2947 The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object.
2948 </returns>
2949 </member>
2950 <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone">
2951 <summary>
2952 Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned.
2953 </summary>
2954 <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns>
2955 </member>
2956 <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer">
2957 <summary>
2958 Gets a comparer that can compare two tokens for value equality.
2959 </summary>
2960 <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value>
2961 </member>
2962 <member name="P:Newtonsoft.Json.Linq.JToken.Parent">
2963 <summary>
2964 Gets or sets the parent.
2965 </summary>
2966 <value>The parent.</value>
2967 </member>
2968 <member name="P:Newtonsoft.Json.Linq.JToken.Root">
2969 <summary>
2970 Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2971 </summary>
2972 <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value>
2973 </member>
2974 <member name="P:Newtonsoft.Json.Linq.JToken.Type">
2975 <summary>
2976 Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
2977 </summary>
2978 <value>The type.</value>
2979 </member>
2980 <member name="P:Newtonsoft.Json.Linq.JToken.HasValues">
2981 <summary>
2982 Gets a value indicating whether this token has child tokens.
2983 </summary>
2984 <value>
2985 <c>true</c> if this token has child values; otherwise, <c>false</c>.
2986 </value>
2987 </member>
2988 <member name="P:Newtonsoft.Json.Linq.JToken.Next">
2989 <summary>
2990 Gets the next sibling token of this node.
2991 </summary>
2992 <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value>
2993 </member>
2994 <member name="P:Newtonsoft.Json.Linq.JToken.Previous">
2995 <summary>
2996 Gets the previous sibling token of this node.
2997 </summary>
2998 <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value>
2999 </member>
3000 <member name="P:Newtonsoft.Json.Linq.JToken.Path">
3001 <summary>
3002 Gets the path of the JSON token.
3003 </summary>
3004 </member>
3005 <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)">
3006 <summary>
3007 Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.
3008 </summary>
3009 <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value>
3010 </member>
3011 <member name="P:Newtonsoft.Json.Linq.JToken.First">
3012 <summary>
3013 Get the first child token of this token.
3014 </summary>
3015 <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value>
3016 </member>
3017 <member name="P:Newtonsoft.Json.Linq.JToken.Last">
3018 <summary>
3019 Get the last child token of this token.
3020 </summary>
3021 <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value>
3022 </member>
3023 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)">
3024 <summary>
3025 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object.
3026 </summary>
3027 <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param>
3028 </member>
3029 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)">
3030 <summary>
3031 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3032 </summary>
3033 <param name="value">The value.</param>
3034 </member>
3035 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Decimal)">
3036 <summary>
3037 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3038 </summary>
3039 <param name="value">The value.</param>
3040 </member>
3041 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)">
3042 <summary>
3043 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3044 </summary>
3045 <param name="value">The value.</param>
3046 </member>
3047 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)">
3048 <summary>
3049 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3050 </summary>
3051 <param name="value">The value.</param>
3052 </member>
3053 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)">
3054 <summary>
3055 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3056 </summary>
3057 <param name="value">The value.</param>
3058 </member>
3059 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)">
3060 <summary>
3061 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3062 </summary>
3063 <param name="value">The value.</param>
3064 </member>
3065 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)">
3066 <summary>
3067 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3068 </summary>
3069 <param name="value">The value.</param>
3070 </member>
3071 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTimeOffset)">
3072 <summary>
3073 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3074 </summary>
3075 <param name="value">The value.</param>
3076 </member>
3077 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)">
3078 <summary>
3079 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3080 </summary>
3081 <param name="value">The value.</param>
3082 </member>
3083 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)">
3084 <summary>
3085 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3086 </summary>
3087 <param name="value">The value.</param>
3088 </member>
3089 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)">
3090 <summary>
3091 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3092 </summary>
3093 <param name="value">The value.</param>
3094 </member>
3095 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)">
3096 <summary>
3097 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3098 </summary>
3099 <param name="value">The value.</param>
3100 </member>
3101 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)">
3102 <summary>
3103 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3104 </summary>
3105 <param name="value">The value.</param>
3106 </member>
3107 <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)">
3108 <summary>
3109 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value.
3110 </summary>
3111 <param name="value">The value.</param>
3112 </member>
3113 <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)">
3114 <summary>
3115 Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.
3116 </summary>
3117 <param name="value">The value.</param>
3118 <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns>
3119 </member>
3120 <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)">
3121 <summary>
3122 Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.
3123 </summary>
3124 <param name="value">The value.</param>
3125 <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns>
3126 </member>
3127 <member name="M:Newtonsoft.Json.Linq.JValue.CreateNull">
3128 <summary>
3129 Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> null value.
3130 </summary>
3131 <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> null value.</returns>
3132 </member>
3133 <member name="M:Newtonsoft.Json.Linq.JValue.CreateUndefined">
3134 <summary>
3135 Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> null value.
3136 </summary>
3137 <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> null value.</returns>
3138 </member>
3139 <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])">
3140 <summary>
3141 Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>.
3142 </summary>
3143 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
3144 <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param>
3145 </member>
3146 <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)">
3147 <summary>
3148 Indicates whether the current object is equal to another object of the same type.
3149 </summary>
3150 <returns>
3151 true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.
3152 </returns>
3153 <param name="other">An object to compare with this object.</param>
3154 </member>
3155 <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)">
3156 <summary>
3157 Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>.
3158 </summary>
3159 <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param>
3160 <returns>
3161 true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false.
3162 </returns>
3163 <exception cref="T:System.NullReferenceException">
3164 The <paramref name="obj"/> parameter is null.
3165 </exception>
3166 </member>
3167 <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode">
3168 <summary>
3169 Serves as a hash function for a particular type.
3170 </summary>
3171 <returns>
3172 A hash code for the current <see cref="T:System.Object"/>.
3173 </returns>
3174 </member>
3175 <member name="M:Newtonsoft.Json.Linq.JValue.ToString">
3176 <summary>
3177 Returns a <see cref="T:System.String"/> that represents this instance.
3178 </summary>
3179 <returns>
3180 A <see cref="T:System.String"/> that represents this instance.
3181 </returns>
3182 </member>
3183 <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)">
3184 <summary>
3185 Returns a <see cref="T:System.String"/> that represents this instance.
3186 </summary>
3187 <param name="format">The format.</param>
3188 <returns>
3189 A <see cref="T:System.String"/> that represents this instance.
3190 </returns>
3191 </member>
3192 <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)">
3193 <summary>
3194 Returns a <see cref="T:System.String"/> that represents this instance.
3195 </summary>
3196 <param name="formatProvider">The format provider.</param>
3197 <returns>
3198 A <see cref="T:System.String"/> that represents this instance.
3199 </returns>
3200 </member>
3201 <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)">
3202 <summary>
3203 Returns a <see cref="T:System.String"/> that represents this instance.
3204 </summary>
3205 <param name="format">The format.</param>
3206 <param name="formatProvider">The format provider.</param>
3207 <returns>
3208 A <see cref="T:System.String"/> that represents this instance.
3209 </returns>
3210 </member>
3211 <member name="M:Newtonsoft.Json.Linq.JValue.GetMetaObject(System.Linq.Expressions.Expression)">
3212 <summary>
3213 Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object.
3214 </summary>
3215 <param name="parameter">The expression tree representation of the runtime value.</param>
3216 <returns>
3217 The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object.
3218 </returns>
3219 </member>
3220 <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)">
3221 <summary>
3222 Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
3223 </summary>
3224 <param name="obj">An object to compare with this instance.</param>
3225 <returns>
3226 A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings:
3227 Value
3228 Meaning
3229 Less than zero
3230 This instance is less than <paramref name="obj"/>.
3231 Zero
3232 This instance is equal to <paramref name="obj"/>.
3233 Greater than zero
3234 This instance is greater than <paramref name="obj"/>.
3235 </returns>
3236 <exception cref="T:System.ArgumentException">
3237 <paramref name="obj"/> is not the same type as this instance.
3238 </exception>
3239 </member>
3240 <member name="P:Newtonsoft.Json.Linq.JValue.HasValues">
3241 <summary>
3242 Gets a value indicating whether this token has child tokens.
3243 </summary>
3244 <value>
3245 <c>true</c> if this token has child values; otherwise, <c>false</c>.
3246 </value>
3247 </member>
3248 <member name="P:Newtonsoft.Json.Linq.JValue.Type">
3249 <summary>
3250 Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
3251 </summary>
3252 <value>The type.</value>
3253 </member>
3254 <member name="P:Newtonsoft.Json.Linq.JValue.Value">
3255 <summary>
3256 Gets or sets the underlying token value.
3257 </summary>
3258 <value>The underlying token value.</value>
3259 </member>
3260 <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)">
3261 <summary>
3262 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object.
3263 </summary>
3264 <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param>
3265 </member>
3266 <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)">
3267 <summary>
3268 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class.
3269 </summary>
3270 <param name="rawJson">The raw json.</param>
3271 </member>
3272 <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)">
3273 <summary>
3274 Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.
3275 </summary>
3276 <param name="reader">The reader.</param>
3277 <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns>
3278 </member>
3279 <member name="T:Newtonsoft.Json.Required">
3280 <summary>
3281 Indicating whether a property is required.
3282 </summary>
3283 </member>
3284 <member name="F:Newtonsoft.Json.Required.Default">
3285 <summary>
3286 The property is not required. The default state.
3287 </summary>
3288 </member>
3289 <member name="F:Newtonsoft.Json.Required.AllowNull">
3290 <summary>
3291 The property must be defined in JSON but can be a null value.
3292 </summary>
3293 </member>
3294 <member name="F:Newtonsoft.Json.Required.Always">
3295 <summary>
3296 The property must be defined in JSON and cannot be a null value.
3297 </summary>
3298 </member>
3299 <member name="T:Newtonsoft.Json.Serialization.JsonDynamicContract">
3300 <summary>
3301 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
3302 </summary>
3303 </member>
3304 <member name="M:Newtonsoft.Json.Serialization.JsonDynamicContract.#ctor(System.Type)">
3305 <summary>
3306 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> class.
3307 </summary>
3308 <param name="underlyingType">The underlying type for the contract.</param>
3309 </member>
3310 <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.Properties">
3311 <summary>
3312 Gets the object's properties.
3313 </summary>
3314 <value>The object's properties.</value>
3315 </member>
3316 <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.PropertyNameResolver">
3317 <summary>
3318 Gets or sets the property name resolver.
3319 </summary>
3320 <value>The property name resolver.</value>
3321 </member>
3322 <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract">
3323 <summary>
3324 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
3325 </summary>
3326 </member>
3327 <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)">
3328 <summary>
3329 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class.
3330 </summary>
3331 <param name="underlyingType">The underlying type for the contract.</param>
3332 </member>
3333 <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator">
3334 <summary>
3335 Gets or sets the ISerializable object constructor.
3336 </summary>
3337 <value>The ISerializable object constructor.</value>
3338 </member>
3339 <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract">
3340 <summary>
3341 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
3342 </summary>
3343 </member>
3344 <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)">
3345 <summary>
3346 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class.
3347 </summary>
3348 <param name="underlyingType">The underlying type for the contract.</param>
3349 </member>
3350 <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract">
3351 <summary>
3352 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
3353 </summary>
3354 </member>
3355 <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)">
3356 <summary>
3357 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class.
3358 </summary>
3359 <param name="underlyingType">The underlying type for the contract.</param>
3360 </member>
3361 <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider">
3362 <summary>
3363 Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods.
3364 </summary>
3365 </member>
3366 <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)">
3367 <summary>
3368 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class.
3369 </summary>
3370 <param name="memberInfo">The member info.</param>
3371 </member>
3372 <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)">
3373 <summary>
3374 Sets the value.
3375 </summary>
3376 <param name="target">The target to set the value on.</param>
3377 <param name="value">The value to set on the target.</param>
3378 </member>
3379 <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)">
3380 <summary>
3381 Gets the value.
3382 </summary>
3383 <param name="target">The target to get the value from.</param>
3384 <returns>The value.</returns>
3385 </member>
3386 <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs">
3387 <summary>
3388 Provides data for the Error event.
3389 </summary>
3390 </member>
3391 <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)">
3392 <summary>
3393 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class.
3394 </summary>
3395 <param name="currentObject">The current object.</param>
3396 <param name="errorContext">The error context.</param>
3397 </member>
3398 <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject">
3399 <summary>
3400 Gets the current object the error event is being raised against.
3401 </summary>
3402 <value>The current object the error event is being raised against.</value>
3403 </member>
3404 <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext">
3405 <summary>
3406 Gets the error context.
3407 </summary>
3408 <value>The error context.</value>
3409 </member>
3410 <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor">
3411 <summary>
3412 Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.
3413 </summary>
3414 </member>
3415 <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String)">
3416 <summary>
3417 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class.
3418 </summary>
3419 <param name="name">The name.</param>
3420 </member>
3421 <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)">
3422 <summary>
3423 When overridden in a derived class, returns whether resetting an object changes its value.
3424 </summary>
3425 <returns>
3426 true if resetting the component changes its value; otherwise, false.
3427 </returns>
3428 <param name="component">The component to test for reset capability.
3429 </param>
3430 </member>
3431 <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)">
3432 <summary>
3433 When overridden in a derived class, gets the current value of the property on a component.
3434 </summary>
3435 <returns>
3436 The value of a property for a given component.
3437 </returns>
3438 <param name="component">The component with the property for which to retrieve the value.
3439 </param>
3440 </member>
3441 <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)">
3442 <summary>
3443 When overridden in a derived class, resets the value for this property of the component to the default value.
3444 </summary>
3445 <param name="component">The component with the property value that is to be reset to the default value.
3446 </param>
3447 </member>
3448 <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)">
3449 <summary>
3450 When overridden in a derived class, sets the value of the component to a different value.
3451 </summary>
3452 <param name="component">The component with the property value that is to be set.
3453 </param><param name="value">The new value.
3454 </param>
3455 </member>
3456 <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)">
3457 <summary>
3458 When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted.
3459 </summary>
3460 <returns>
3461 true if the property should be persisted; otherwise, false.
3462 </returns>
3463 <param name="component">The component with the property to be examined for persistence.
3464 </param>
3465 </member>
3466 <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType">
3467 <summary>
3468 When overridden in a derived class, gets the type of the component this property is bound to.
3469 </summary>
3470 <returns>
3471 A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type.
3472 </returns>
3473 </member>
3474 <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly">
3475 <summary>
3476 When overridden in a derived class, gets a value indicating whether this property is read-only.
3477 </summary>
3478 <returns>
3479 true if the property is read-only; otherwise, false.
3480 </returns>
3481 </member>
3482 <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType">
3483 <summary>
3484 When overridden in a derived class, gets the type of the property.
3485 </summary>
3486 <returns>
3487 A <see cref="T:System.Type"/> that represents the type of the property.
3488 </returns>
3489 </member>
3490 <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode">
3491 <summary>
3492 Gets the hash code for the name of the member.
3493 </summary>
3494 <value></value>
3495 <returns>
3496 The hash code for the name of the member.
3497 </returns>
3498 </member>
3499 <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver">
3500 <summary>
3501 Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
3502 </summary>
3503 </member>
3504 <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)">
3505 <summary>
3506 Resolves a reference to its object.
3507 </summary>
3508 <param name="context">The serialization context.</param>
3509 <param name="reference">The reference to resolve.</param>
3510 <returns>The object that</returns>
3511 </member>
3512 <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)">
3513 <summary>
3514 Gets the reference for the sepecified object.
3515 </summary>
3516 <param name="context">The serialization context.</param>
3517 <param name="value">The object to get a reference for.</param>
3518 <returns>The reference to the object.</returns>
3519 </member>
3520 <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)">
3521 <summary>
3522 Determines whether the specified object is referenced.
3523 </summary>
3524 <param name="context">The serialization context.</param>
3525 <param name="value">The object to test for a reference.</param>
3526 <returns>
3527 <c>true</c> if the specified object is referenced; otherwise, <c>false</c>.
3528 </returns>
3529 </member>
3530 <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)">
3531 <summary>
3532 Adds a reference to the specified object.
3533 </summary>
3534 <param name="context">The serialization context.</param>
3535 <param name="reference">The reference.</param>
3536 <param name="value">The object to reference.</param>
3537 </member>
3538 <member name="T:Newtonsoft.Json.PreserveReferencesHandling">
3539 <summary>
3540 Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
3541 Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable.
3542 </summary>
3543 <example>
3544 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/>
3545 </example>
3546 </member>
3547 <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None">
3548 <summary>
3549 Do not preserve references when serializing types.
3550 </summary>
3551 </member>
3552 <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects">
3553 <summary>
3554 Preserve references when serializing into a JSON object structure.
3555 </summary>
3556 </member>
3557 <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays">
3558 <summary>
3559 Preserve references when serializing into a JSON array structure.
3560 </summary>
3561 </member>
3562 <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All">
3563 <summary>
3564 Preserve references when serializing.
3565 </summary>
3566 </member>
3567 <member name="T:Newtonsoft.Json.JsonArrayAttribute">
3568 <summary>
3569 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection.
3570 </summary>
3571 </member>
3572 <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor">
3573 <summary>
3574 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class.
3575 </summary>
3576 </member>
3577 <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)">
3578 <summary>
3579 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items
3580 </summary>
3581 <param name="allowNullItems">A flag indicating whether the array can contain null items.</param>
3582 </member>
3583 <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)">
3584 <summary>
3585 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id.
3586 </summary>
3587 <param name="id">The container Id.</param>
3588 </member>
3589 <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems">
3590 <summary>
3591 Gets or sets a value indicating whether null items are allowed in the collection.
3592 </summary>
3593 <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value>
3594 </member>
3595 <member name="T:Newtonsoft.Json.DefaultValueHandling">
3596 <summary>
3597 Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
3598 </summary>
3599 <example>
3600 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/>
3601 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/>
3602 </example>
3603 </member>
3604 <member name="F:Newtonsoft.Json.DefaultValueHandling.Include">
3605 <summary>
3606 Include members where the member value is the same as the member's default value when serializing objects.
3607 Included members are written to JSON. Has no effect when deserializing.
3608 </summary>
3609 </member>
3610 <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore">
3611 <summary>
3612 Ignore members where the member value is the same as the member's default value when serializing objects
3613 so that is is not written to JSON.
3614 This option will ignore all default values (e.g. <c>null</c> for objects and nullable types; <c>0</c> for integers,
3615 decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by
3616 placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property.
3617 </summary>
3618 </member>
3619 <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate">
3620 <summary>
3621 Members with a default value but no JSON will be set to their default value when deserializing.
3622 </summary>
3623 </member>
3624 <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate">
3625 <summary>
3626 Ignore members where the member value is the same as the member's default value when serializing objects
3627 and sets members to their default value when deserializing.
3628 </summary>
3629 </member>
3630 <member name="T:Newtonsoft.Json.JsonConverterAttribute">
3631 <summary>
3632 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class.
3633 </summary>
3634 </member>
3635 <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)">
3636 <summary>
3637 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class.
3638 </summary>
3639 <param name="converterType">Type of the converter.</param>
3640 </member>
3641 <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type,System.Object[])">
3642 <summary>
3643 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class.
3644 </summary>
3645 <param name="converterType">Type of the converter.</param>
3646 <param name="converterParameters">Parameter list to use when constructing the JsonConverter. Can be null.</param>
3647 </member>
3648 <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType">
3649 <summary>
3650 Gets the type of the converter.
3651 </summary>
3652 <value>The type of the converter.</value>
3653 </member>
3654 <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterParameters">
3655 <summary>
3656 The parameter list to use when constructing the JsonConverter described by ConverterType.
3657 If null, the default constructor is used.
3658 </summary>
3659 </member>
3660 <member name="T:Newtonsoft.Json.JsonObjectAttribute">
3661 <summary>
3662 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object.
3663 </summary>
3664 </member>
3665 <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor">
3666 <summary>
3667 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class.
3668 </summary>
3669 </member>
3670 <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)">
3671 <summary>
3672 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization.
3673 </summary>
3674 <param name="memberSerialization">The member serialization.</param>
3675 </member>
3676 <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)">
3677 <summary>
3678 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id.
3679 </summary>
3680 <param name="id">The container Id.</param>
3681 </member>
3682 <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization">
3683 <summary>
3684 Gets or sets the member serialization.
3685 </summary>
3686 <value>The member serialization.</value>
3687 </member>
3688 <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired">
3689 <summary>
3690 Gets or sets a value that indicates whether the object's properties are required.
3691 </summary>
3692 <value>
3693 A value indicating whether the object's properties are required.
3694 </value>
3695 </member>
3696 <member name="T:Newtonsoft.Json.JsonSerializerSettings">
3697 <summary>
3698 Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object.
3699 </summary>
3700 </member>
3701 <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor">
3702 <summary>
3703 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class.
3704 </summary>
3705 </member>
3706 <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling">
3707 <summary>
3708 Gets or sets how reference loops (e.g. a class referencing itself) is handled.
3709 </summary>
3710 <value>Reference loop handling.</value>
3711 </member>
3712 <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling">
3713 <summary>
3714 Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
3715 </summary>
3716 <value>Missing member handling.</value>
3717 </member>
3718 <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling">
3719 <summary>
3720 Gets or sets how objects are created during deserialization.
3721 </summary>
3722 <value>The object creation handling.</value>
3723 </member>
3724 <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling">
3725 <summary>
3726 Gets or sets how null values are handled during serialization and deserialization.
3727 </summary>
3728 <value>Null value handling.</value>
3729 </member>
3730 <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling">
3731 <summary>
3732 Gets or sets how null default are handled during serialization and deserialization.
3733 </summary>
3734 <value>The default value handling.</value>
3735 </member>
3736 <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters">
3737 <summary>
3738 Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.
3739 </summary>
3740 <value>The converters.</value>
3741 </member>
3742 <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling">
3743 <summary>
3744 Gets or sets how object references are preserved by the serializer.
3745 </summary>
3746 <value>The preserve references handling.</value>
3747 </member>
3748 <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling">
3749 <summary>
3750 Gets or sets how type name writing and reading is handled by the serializer.
3751 </summary>
3752 <value>The type name handling.</value>
3753 </member>
3754 <member name="P:Newtonsoft.Json.JsonSerializerSettings.MetadataPropertyHandling">
3755 <summary>
3756 Gets or sets how metadata properties are used during deserialization.
3757 </summary>
3758 <value>The metadata properties handling.</value>
3759 </member>
3760 <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat">
3761 <summary>
3762 Gets or sets how a type name assembly is written and resolved by the serializer.
3763 </summary>
3764 <value>The type name assembly format.</value>
3765 </member>
3766 <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling">
3767 <summary>
3768 Gets or sets how constructors are used during deserialization.
3769 </summary>
3770 <value>The constructor handling.</value>
3771 </member>
3772 <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver">
3773 <summary>
3774 Gets or sets the contract resolver used by the serializer when
3775 serializing .NET objects to JSON and vice versa.
3776 </summary>
3777 <value>The contract resolver.</value>
3778 </member>
3779 <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver">
3780 <summary>
3781 Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references.
3782 </summary>
3783 <value>The reference resolver.</value>
3784 </member>
3785 <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter">
3786 <summary>
3787 Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages.
3788 </summary>
3789 <value>The trace writer.</value>
3790 </member>
3791 <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder">
3792 <summary>
3793 Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names.
3794 </summary>
3795 <value>The binder.</value>
3796 </member>
3797 <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error">
3798 <summary>
3799 Gets or sets the error handler called during serialization and deserialization.
3800 </summary>
3801 <value>The error handler called during serialization and deserialization.</value>
3802 </member>
3803 <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context">
3804 <summary>
3805 Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods.
3806 </summary>
3807 <value>The context.</value>
3808 </member>
3809 <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString">
3810 <summary>
3811 Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text.
3812 </summary>
3813 </member>
3814 <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth">
3815 <summary>
3816 Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>.
3817 </summary>
3818 </member>
3819 <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting">
3820 <summary>
3821 Indicates how JSON text output is formatted.
3822 </summary>
3823 </member>
3824 <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling">
3825 <summary>
3826 Get or set how dates are written to JSON text.
3827 </summary>
3828 </member>
3829 <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling">
3830 <summary>
3831 Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization.
3832 </summary>
3833 </member>
3834 <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling">
3835 <summary>
3836 Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
3837 </summary>
3838 </member>
3839 <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling">
3840 <summary>
3841 Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>,
3842 <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>,
3843 are written as JSON.
3844 </summary>
3845 </member>
3846 <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling">
3847 <summary>
3848 Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
3849 </summary>
3850 </member>
3851 <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling">
3852 <summary>
3853 Get or set how strings are escaped when writing JSON text.
3854 </summary>
3855 </member>
3856 <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture">
3857 <summary>
3858 Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>.
3859 </summary>
3860 </member>
3861 <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent">
3862 <summary>
3863 Gets a value indicating whether there will be a check for additional content after deserializing an object.
3864 </summary>
3865 <value>
3866 <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>.
3867 </value>
3868 </member>
3869 <member name="T:Newtonsoft.Json.JsonValidatingReader">
3870 <summary>
3871 Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation.
3872 </summary>
3873 </member>
3874 <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)">
3875 <summary>
3876 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that
3877 validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>.
3878 </summary>
3879 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param>
3880 </member>
3881 <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32">
3882 <summary>
3883 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
3884 </summary>
3885 <returns>A <see cref="T:System.Nullable`1"/>.</returns>
3886 </member>
3887 <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes">
3888 <summary>
3889 Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>.
3890 </summary>
3891 <returns>
3892 A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null.
3893 </returns>
3894 </member>
3895 <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal">
3896 <summary>
3897 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
3898 </summary>
3899 <returns>A <see cref="T:System.Nullable`1"/>.</returns>
3900 </member>
3901 <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString">
3902 <summary>
3903 Reads the next JSON token from the stream as a <see cref="T:System.String"/>.
3904 </summary>
3905 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
3906 </member>
3907 <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime">
3908 <summary>
3909 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
3910 </summary>
3911 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
3912 </member>
3913 <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset">
3914 <summary>
3915 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
3916 </summary>
3917 <returns>A <see cref="T:System.Nullable`1"/>.</returns>
3918 </member>
3919 <member name="M:Newtonsoft.Json.JsonValidatingReader.Read">
3920 <summary>
3921 Reads the next JSON token from the stream.
3922 </summary>
3923 <returns>
3924 true if the next token was read successfully; false if there are no more tokens to read.
3925 </returns>
3926 </member>
3927 <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler">
3928 <summary>
3929 Sets an event handler for receiving schema validation errors.
3930 </summary>
3931 </member>
3932 <member name="P:Newtonsoft.Json.JsonValidatingReader.Value">
3933 <summary>
3934 Gets the text value of the current JSON token.
3935 </summary>
3936 <value></value>
3937 </member>
3938 <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth">
3939 <summary>
3940 Gets the depth of the current token in the JSON document.
3941 </summary>
3942 <value>The depth of the current token in the JSON document.</value>
3943 </member>
3944 <member name="P:Newtonsoft.Json.JsonValidatingReader.Path">
3945 <summary>
3946 Gets the path of the current JSON token.
3947 </summary>
3948 </member>
3949 <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar">
3950 <summary>
3951 Gets the quotation mark character used to enclose the value of a string.
3952 </summary>
3953 <value></value>
3954 </member>
3955 <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType">
3956 <summary>
3957 Gets the type of the current JSON token.
3958 </summary>
3959 <value></value>
3960 </member>
3961 <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType">
3962 <summary>
3963 Gets the Common Language Runtime (CLR) type for the current JSON token.
3964 </summary>
3965 <value></value>
3966 </member>
3967 <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema">
3968 <summary>
3969 Gets or sets the schema.
3970 </summary>
3971 <value>The schema.</value>
3972 </member>
3973 <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader">
3974 <summary>
3975 Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>.
3976 </summary>
3977 <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value>
3978 </member>
3979 <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer">
3980 <summary>
3981 Compares tokens to determine whether they are equal.
3982 </summary>
3983 </member>
3984 <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)">
3985 <summary>
3986 Determines whether the specified objects are equal.
3987 </summary>
3988 <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param>
3989 <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param>
3990 <returns>
3991 true if the specified objects are equal; otherwise, false.
3992 </returns>
3993 </member>
3994 <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)">
3995 <summary>
3996 Returns a hash code for the specified object.
3997 </summary>
3998 <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param>
3999 <returns>A hash code for the specified object.</returns>
4000 <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception>
4001 </member>
4002 <member name="T:Newtonsoft.Json.MemberSerialization">
4003 <summary>
4004 Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
4005 </summary>
4006 </member>
4007 <member name="F:Newtonsoft.Json.MemberSerialization.OptOut">
4008 <summary>
4009 All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>.
4010 This is the default member serialization mode.
4011 </summary>
4012 </member>
4013 <member name="F:Newtonsoft.Json.MemberSerialization.OptIn">
4014 <summary>
4015 Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized.
4016 This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>.
4017 </summary>
4018 </member>
4019 <member name="F:Newtonsoft.Json.MemberSerialization.Fields">
4020 <summary>
4021 All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>.
4022 This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/>
4023 and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false.
4024 </summary>
4025 </member>
4026 <member name="T:Newtonsoft.Json.ObjectCreationHandling">
4027 <summary>
4028 Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
4029 </summary>
4030 </member>
4031 <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto">
4032 <summary>
4033 Reuse existing objects, create new objects when needed.
4034 </summary>
4035 </member>
4036 <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse">
4037 <summary>
4038 Only reuse existing objects.
4039 </summary>
4040 </member>
4041 <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace">
4042 <summary>
4043 Always create new objects.
4044 </summary>
4045 </member>
4046 <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter">
4047 <summary>
4048 Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z).
4049 </summary>
4050 </member>
4051 <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
4052 <summary>
4053 Writes the JSON representation of the object.
4054 </summary>
4055 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
4056 <param name="value">The value.</param>
4057 <param name="serializer">The calling serializer.</param>
4058 </member>
4059 <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
4060 <summary>
4061 Reads the JSON representation of the object.
4062 </summary>
4063 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
4064 <param name="objectType">Type of the object.</param>
4065 <param name="existingValue">The existing value of object being read.</param>
4066 <param name="serializer">The calling serializer.</param>
4067 <returns>The object value.</returns>
4068 </member>
4069 <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles">
4070 <summary>
4071 Gets or sets the date time styles used when converting a date to and from JSON.
4072 </summary>
4073 <value>The date time styles used when converting a date to and from JSON.</value>
4074 </member>
4075 <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat">
4076 <summary>
4077 Gets or sets the date time format used when converting a date to and from JSON.
4078 </summary>
4079 <value>The date time format used when converting a date to and from JSON.</value>
4080 </member>
4081 <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture">
4082 <summary>
4083 Gets or sets the culture used when converting a date to and from JSON.
4084 </summary>
4085 <value>The culture used when converting a date to and from JSON.</value>
4086 </member>
4087 <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter">
4088 <summary>
4089 Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)).
4090 </summary>
4091 </member>
4092 <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
4093 <summary>
4094 Writes the JSON representation of the object.
4095 </summary>
4096 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
4097 <param name="value">The value.</param>
4098 <param name="serializer">The calling serializer.</param>
4099 </member>
4100 <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
4101 <summary>
4102 Reads the JSON representation of the object.
4103 </summary>
4104 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
4105 <param name="objectType">Type of the object.</param>
4106 <param name="existingValue">The existing property value of the JSON that is being converted.</param>
4107 <param name="serializer">The calling serializer.</param>
4108 <returns>The object value.</returns>
4109 </member>
4110 <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter">
4111 <summary>
4112 Converts XML to and from JSON.
4113 </summary>
4114 </member>
4115 <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
4116 <summary>
4117 Writes the JSON representation of the object.
4118 </summary>
4119 <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
4120 <param name="serializer">The calling serializer.</param>
4121 <param name="value">The value.</param>
4122 </member>
4123 <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
4124 <summary>
4125 Reads the JSON representation of the object.
4126 </summary>
4127 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
4128 <param name="objectType">Type of the object.</param>
4129 <param name="existingValue">The existing value of object being read.</param>
4130 <param name="serializer">The calling serializer.</param>
4131 <returns>The object value.</returns>
4132 </member>
4133 <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)">
4134 <summary>
4135 Checks if the attributeName is a namespace attribute.
4136 </summary>
4137 <param name="attributeName">Attribute name to test.</param>
4138 <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param>
4139 <returns>True if attribute name is for a namespace attribute, otherwise false.</returns>
4140 </member>
4141 <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)">
4142 <summary>
4143 Determines whether this instance can convert the specified value type.
4144 </summary>
4145 <param name="valueType">Type of the value.</param>
4146 <returns>
4147 <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>.
4148 </returns>
4149 </member>
4150 <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName">
4151 <summary>
4152 Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements.
4153 </summary>
4154 <value>The name of the deserialize root element.</value>
4155 </member>
4156 <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute">
4157 <summary>
4158 Gets or sets a flag to indicate whether to write the Json.NET array attribute.
4159 This attribute helps preserve arrays when converting the written XML back to JSON.
4160 </summary>
4161 <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value>
4162 </member>
4163 <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject">
4164 <summary>
4165 Gets or sets a value indicating whether to write the root JSON object.
4166 </summary>
4167 <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value>
4168 </member>
4169 <member name="T:Newtonsoft.Json.JsonTextReader">
4170 <summary>
4171 Represents a reader that provides fast, non-cached, forward-only access to JSON text data.
4172 </summary>
4173 </member>
4174 <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)">
4175 <summary>
4176 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>.
4177 </summary>
4178 <param name="reader">The <c>TextReader</c> containing the XML data to read.</param>
4179 </member>
4180 <member name="M:Newtonsoft.Json.JsonTextReader.Read">
4181 <summary>
4182 Reads the next JSON token from the stream.
4183 </summary>
4184 <returns>
4185 true if the next token was read successfully; false if there are no more tokens to read.
4186 </returns>
4187 </member>
4188 <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes">
4189 <summary>
4190 Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>.
4191 </summary>
4192 <returns>
4193 A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.
4194 </returns>
4195 </member>
4196 <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal">
4197 <summary>
4198 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
4199 </summary>
4200 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
4201 </member>
4202 <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32">
4203 <summary>
4204 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
4205 </summary>
4206 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
4207 </member>
4208 <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString">
4209 <summary>
4210 Reads the next JSON token from the stream as a <see cref="T:System.String"/>.
4211 </summary>
4212 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
4213 </member>
4214 <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime">
4215 <summary>
4216 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
4217 </summary>
4218 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
4219 </member>
4220 <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset">
4221 <summary>
4222 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
4223 </summary>
4224 <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns>
4225 </member>
4226 <member name="M:Newtonsoft.Json.JsonTextReader.Close">
4227 <summary>
4228 Changes the state to closed.
4229 </summary>
4230 </member>
4231 <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo">
4232 <summary>
4233 Gets a value indicating whether the class can return line information.
4234 </summary>
4235 <returns>
4236 <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>.
4237 </returns>
4238 </member>
4239 <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber">
4240 <summary>
4241 Gets the current line number.
4242 </summary>
4243 <value>
4244 The current line number or 0 if no line information is available (for example, HasLineInfo returns false).
4245 </value>
4246 </member>
4247 <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition">
4248 <summary>
4249 Gets the current line position.
4250 </summary>
4251 <value>
4252 The current line position or 0 if no line information is available (for example, HasLineInfo returns false).
4253 </value>
4254 </member>
4255 <member name="T:Newtonsoft.Json.JsonPropertyAttribute">
4256 <summary>
4257 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name.
4258 </summary>
4259 </member>
4260 <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor">
4261 <summary>
4262 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class.
4263 </summary>
4264 </member>
4265 <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)">
4266 <summary>
4267 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name.
4268 </summary>
4269 <param name="propertyName">Name of the property.</param>
4270 </member>
4271 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType">
4272 <summary>
4273 Gets or sets the converter used when serializing the property's collection items.
4274 </summary>
4275 <value>The collection's items converter.</value>
4276 </member>
4277 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterParameters">
4278 <summary>
4279 The parameter list to use when constructing the JsonConverter described by ItemConverterType.
4280 If null, the default constructor is used.
4281 When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number,
4282 order, and type of these parameters.
4283 </summary>
4284 <example>
4285 [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
4286 </example>
4287 </member>
4288 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling">
4289 <summary>
4290 Gets or sets the null value handling used when serializing this property.
4291 </summary>
4292 <value>The null value handling.</value>
4293 </member>
4294 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling">
4295 <summary>
4296 Gets or sets the default value handling used when serializing this property.
4297 </summary>
4298 <value>The default value handling.</value>
4299 </member>
4300 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling">
4301 <summary>
4302 Gets or sets the reference loop handling used when serializing this property.
4303 </summary>
4304 <value>The reference loop handling.</value>
4305 </member>
4306 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling">
4307 <summary>
4308 Gets or sets the object creation handling used when deserializing this property.
4309 </summary>
4310 <value>The object creation handling.</value>
4311 </member>
4312 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling">
4313 <summary>
4314 Gets or sets the type name handling used when serializing this property.
4315 </summary>
4316 <value>The type name handling.</value>
4317 </member>
4318 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference">
4319 <summary>
4320 Gets or sets whether this property's value is serialized as a reference.
4321 </summary>
4322 <value>Whether this property's value is serialized as a reference.</value>
4323 </member>
4324 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order">
4325 <summary>
4326 Gets or sets the order of serialization and deserialization of a member.
4327 </summary>
4328 <value>The numeric order of serialization or deserialization.</value>
4329 </member>
4330 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required">
4331 <summary>
4332 Gets or sets a value indicating whether this property is required.
4333 </summary>
4334 <value>
4335 A value indicating whether this property is required.
4336 </value>
4337 </member>
4338 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName">
4339 <summary>
4340 Gets or sets the name of the property.
4341 </summary>
4342 <value>The name of the property.</value>
4343 </member>
4344 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling">
4345 <summary>
4346 Gets or sets the the reference loop handling used when serializing the property's collection items.
4347 </summary>
4348 <value>The collection's items reference loop handling.</value>
4349 </member>
4350 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling">
4351 <summary>
4352 Gets or sets the the type name handling used when serializing the property's collection items.
4353 </summary>
4354 <value>The collection's items type name handling.</value>
4355 </member>
4356 <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference">
4357 <summary>
4358 Gets or sets whether this property's collection items are serialized as a reference.
4359 </summary>
4360 <value>Whether this property's collection items are serialized as a reference.</value>
4361 </member>
4362 <member name="T:Newtonsoft.Json.JsonIgnoreAttribute">
4363 <summary>
4364 Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value.
4365 </summary>
4366 </member>
4367 <member name="T:Newtonsoft.Json.JsonTextWriter">
4368 <summary>
4369 Represents a writer that provides a fast, non-cached, forward-only way of generating Json data.
4370 </summary>
4371 </member>
4372 <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)">
4373 <summary>
4374 Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>.
4375 </summary>
4376 <param name="textWriter">The <c>TextWriter</c> to write to.</param>
4377 </member>
4378 <member name="M:Newtonsoft.Json.JsonTextWriter.Flush">
4379 <summary>
4380 Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream.
4381 </summary>
4382 </member>
4383 <member name="M:Newtonsoft.Json.JsonTextWriter.Close">
4384 <summary>
4385 Closes this stream and the underlying stream.
4386 </summary>
4387 </member>
4388 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject">
4389 <summary>
4390 Writes the beginning of a Json object.
4391 </summary>
4392 </member>
4393 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray">
4394 <summary>
4395 Writes the beginning of a Json array.
4396 </summary>
4397 </member>
4398 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)">
4399 <summary>
4400 Writes the start of a constructor with the given name.
4401 </summary>
4402 <param name="name">The name of the constructor.</param>
4403 </member>
4404 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)">
4405 <summary>
4406 Writes the specified end token.
4407 </summary>
4408 <param name="token">The end token to write.</param>
4409 </member>
4410 <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)">
4411 <summary>
4412 Writes the property name of a name/value pair on a Json object.
4413 </summary>
4414 <param name="name">The name of the property.</param>
4415 </member>
4416 <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)">
4417 <summary>
4418 Writes the property name of a name/value pair on a JSON object.
4419 </summary>
4420 <param name="name">The name of the property.</param>
4421 <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param>
4422 </member>
4423 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent">
4424 <summary>
4425 Writes indent characters.
4426 </summary>
4427 </member>
4428 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter">
4429 <summary>
4430 Writes the JSON value delimiter.
4431 </summary>
4432 </member>
4433 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace">
4434 <summary>
4435 Writes an indent space.
4436 </summary>
4437 </member>
4438 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)">
4439 <summary>
4440 Writes a <see cref="T:System.Object"/> value.
4441 An error will raised if the value cannot be written as a single JSON token.
4442 </summary>
4443 <param name="value">The <see cref="T:System.Object"/> value to write.</param>
4444 </member>
4445 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull">
4446 <summary>
4447 Writes a null value.
4448 </summary>
4449 </member>
4450 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined">
4451 <summary>
4452 Writes an undefined value.
4453 </summary>
4454 </member>
4455 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)">
4456 <summary>
4457 Writes raw JSON.
4458 </summary>
4459 <param name="json">The raw JSON to write.</param>
4460 </member>
4461 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)">
4462 <summary>
4463 Writes a <see cref="T:System.String"/> value.
4464 </summary>
4465 <param name="value">The <see cref="T:System.String"/> value to write.</param>
4466 </member>
4467 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)">
4468 <summary>
4469 Writes a <see cref="T:System.Int32"/> value.
4470 </summary>
4471 <param name="value">The <see cref="T:System.Int32"/> value to write.</param>
4472 </member>
4473 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)">
4474 <summary>
4475 Writes a <see cref="T:System.UInt32"/> value.
4476 </summary>
4477 <param name="value">The <see cref="T:System.UInt32"/> value to write.</param>
4478 </member>
4479 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)">
4480 <summary>
4481 Writes a <see cref="T:System.Int64"/> value.
4482 </summary>
4483 <param name="value">The <see cref="T:System.Int64"/> value to write.</param>
4484 </member>
4485 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)">
4486 <summary>
4487 Writes a <see cref="T:System.UInt64"/> value.
4488 </summary>
4489 <param name="value">The <see cref="T:System.UInt64"/> value to write.</param>
4490 </member>
4491 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)">
4492 <summary>
4493 Writes a <see cref="T:System.Single"/> value.
4494 </summary>
4495 <param name="value">The <see cref="T:System.Single"/> value to write.</param>
4496 </member>
4497 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})">
4498 <summary>
4499 Writes a <see cref="T:System.Nullable`1"/> value.
4500 </summary>
4501 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
4502 </member>
4503 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)">
4504 <summary>
4505 Writes a <see cref="T:System.Double"/> value.
4506 </summary>
4507 <param name="value">The <see cref="T:System.Double"/> value to write.</param>
4508 </member>
4509 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})">
4510 <summary>
4511 Writes a <see cref="T:System.Nullable`1"/> value.
4512 </summary>
4513 <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param>
4514 </member>
4515 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)">
4516 <summary>
4517 Writes a <see cref="T:System.Boolean"/> value.
4518 </summary>
4519 <param name="value">The <see cref="T:System.Boolean"/> value to write.</param>
4520 </member>
4521 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)">
4522 <summary>
4523 Writes a <see cref="T:System.Int16"/> value.
4524 </summary>
4525 <param name="value">The <see cref="T:System.Int16"/> value to write.</param>
4526 </member>
4527 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)">
4528 <summary>
4529 Writes a <see cref="T:System.UInt16"/> value.
4530 </summary>
4531 <param name="value">The <see cref="T:System.UInt16"/> value to write.</param>
4532 </member>
4533 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)">
4534 <summary>
4535 Writes a <see cref="T:System.Char"/> value.
4536 </summary>
4537 <param name="value">The <see cref="T:System.Char"/> value to write.</param>
4538 </member>
4539 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)">
4540 <summary>
4541 Writes a <see cref="T:System.Byte"/> value.
4542 </summary>
4543 <param name="value">The <see cref="T:System.Byte"/> value to write.</param>
4544 </member>
4545 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)">
4546 <summary>
4547 Writes a <see cref="T:System.SByte"/> value.
4548 </summary>
4549 <param name="value">The <see cref="T:System.SByte"/> value to write.</param>
4550 </member>
4551 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)">
4552 <summary>
4553 Writes a <see cref="T:System.Decimal"/> value.
4554 </summary>
4555 <param name="value">The <see cref="T:System.Decimal"/> value to write.</param>
4556 </member>
4557 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)">
4558 <summary>
4559 Writes a <see cref="T:System.DateTime"/> value.
4560 </summary>
4561 <param name="value">The <see cref="T:System.DateTime"/> value to write.</param>
4562 </member>
4563 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])">
4564 <summary>
4565 Writes a <see cref="T:Byte[]"/> value.
4566 </summary>
4567 <param name="value">The <see cref="T:Byte[]"/> value to write.</param>
4568 </member>
4569 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)">
4570 <summary>
4571 Writes a <see cref="T:System.DateTimeOffset"/> value.
4572 </summary>
4573 <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param>
4574 </member>
4575 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)">
4576 <summary>
4577 Writes a <see cref="T:System.Guid"/> value.
4578 </summary>
4579 <param name="value">The <see cref="T:System.Guid"/> value to write.</param>
4580 </member>
4581 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)">
4582 <summary>
4583 Writes a <see cref="T:System.TimeSpan"/> value.
4584 </summary>
4585 <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param>
4586 </member>
4587 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)">
4588 <summary>
4589 Writes a <see cref="T:System.Uri"/> value.
4590 </summary>
4591 <param name="value">The <see cref="T:System.Uri"/> value to write.</param>
4592 </member>
4593 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)">
4594 <summary>
4595 Writes out a comment <code>/*...*/</code> containing the specified text.
4596 </summary>
4597 <param name="text">Text to place inside the comment.</param>
4598 </member>
4599 <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)">
4600 <summary>
4601 Writes out the given white space.
4602 </summary>
4603 <param name="ws">The string of white space characters.</param>
4604 </member>
4605 <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation">
4606 <summary>
4607 Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
4608 </summary>
4609 </member>
4610 <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar">
4611 <summary>
4612 Gets or sets which character to use to quote attribute values.
4613 </summary>
4614 </member>
4615 <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar">
4616 <summary>
4617 Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
4618 </summary>
4619 </member>
4620 <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName">
4621 <summary>
4622 Gets or sets a value indicating whether object names will be surrounded with quotes.
4623 </summary>
4624 </member>
4625 <member name="T:Newtonsoft.Json.JsonWriterException">
4626 <summary>
4627 The exception thrown when an error occurs while reading Json text.
4628 </summary>
4629 </member>
4630 <member name="M:Newtonsoft.Json.JsonWriterException.#ctor">
4631 <summary>
4632 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class.
4633 </summary>
4634 </member>
4635 <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)">
4636 <summary>
4637 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class
4638 with a specified error message.
4639 </summary>
4640 <param name="message">The error message that explains the reason for the exception.</param>
4641 </member>
4642 <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)">
4643 <summary>
4644 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class
4645 with a specified error message and a reference to the inner exception that is the cause of this exception.
4646 </summary>
4647 <param name="message">The error message that explains the reason for the exception.</param>
4648 <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
4649 </member>
4650 <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
4651 <summary>
4652 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class.
4653 </summary>
4654 <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
4655 <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
4656 <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>
4657 <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>
4658 </member>
4659 <member name="P:Newtonsoft.Json.JsonWriterException.Path">
4660 <summary>
4661 Gets the path to the JSON where the error occurred.
4662 </summary>
4663 <value>The path to the JSON where the error occurred.</value>
4664 </member>
4665 <member name="T:Newtonsoft.Json.JsonReaderException">
4666 <summary>
4667 The exception thrown when an error occurs while reading Json text.
4668 </summary>
4669 </member>
4670 <member name="M:Newtonsoft.Json.JsonReaderException.#ctor">
4671 <summary>
4672 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class.
4673 </summary>
4674 </member>
4675 <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)">
4676 <summary>
4677 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class
4678 with a specified error message.
4679 </summary>
4680 <param name="message">The error message that explains the reason for the exception.</param>
4681 </member>
4682 <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)">
4683 <summary>
4684 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class
4685 with a specified error message and a reference to the inner exception that is the cause of this exception.
4686 </summary>
4687 <param name="message">The error message that explains the reason for the exception.</param>
4688 <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
4689 </member>
4690 <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
4691 <summary>
4692 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class.
4693 </summary>
4694 <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
4695 <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
4696 <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>
4697 <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>
4698 </member>
4699 <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber">
4700 <summary>
4701 Gets the line number indicating where the error occurred.
4702 </summary>
4703 <value>The line number indicating where the error occurred.</value>
4704 </member>
4705 <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition">
4706 <summary>
4707 Gets the line position indicating where the error occurred.
4708 </summary>
4709 <value>The line position indicating where the error occurred.</value>
4710 </member>
4711 <member name="P:Newtonsoft.Json.JsonReaderException.Path">
4712 <summary>
4713 Gets the path to the JSON where the error occurred.
4714 </summary>
4715 <value>The path to the JSON where the error occurred.</value>
4716 </member>
4717 <member name="T:Newtonsoft.Json.JsonConverterCollection">
4718 <summary>
4719 Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>.
4720 </summary>
4721 </member>
4722 <member name="T:Newtonsoft.Json.JsonConvert">
4723 <summary>
4724 Provides methods for converting between common language runtime types and JSON types.
4725 </summary>
4726 <example>
4727 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" />
4728 </example>
4729 </member>
4730 <member name="F:Newtonsoft.Json.JsonConvert.True">
4731 <summary>
4732 Represents JavaScript's boolean value true as a string. This field is read-only.
4733 </summary>
4734 </member>
4735 <member name="F:Newtonsoft.Json.JsonConvert.False">
4736 <summary>
4737 Represents JavaScript's boolean value false as a string. This field is read-only.
4738 </summary>
4739 </member>
4740 <member name="F:Newtonsoft.Json.JsonConvert.Null">
4741 <summary>
4742 Represents JavaScript's null as a string. This field is read-only.
4743 </summary>
4744 </member>
4745 <member name="F:Newtonsoft.Json.JsonConvert.Undefined">
4746 <summary>
4747 Represents JavaScript's undefined as a string. This field is read-only.
4748 </summary>
4749 </member>
4750 <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity">
4751 <summary>
4752 Represents JavaScript's positive infinity as a string. This field is read-only.
4753 </summary>
4754 </member>
4755 <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity">
4756 <summary>
4757 Represents JavaScript's negative infinity as a string. This field is read-only.
4758 </summary>
4759 </member>
4760 <member name="F:Newtonsoft.Json.JsonConvert.NaN">
4761 <summary>
4762 Represents JavaScript's NaN as a string. This field is read-only.
4763 </summary>
4764 </member>
4765 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)">
4766 <summary>
4767 Converts the <see cref="T:System.DateTime"/> to its JSON string representation.
4768 </summary>
4769 <param name="value">The value to convert.</param>
4770 <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns>
4771 </member>
4772 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)">
4773 <summary>
4774 Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified.
4775 </summary>
4776 <param name="value">The value to convert.</param>
4777 <param name="format">The format the date will be converted to.</param>
4778 <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param>
4779 <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns>
4780 </member>
4781 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)">
4782 <summary>
4783 Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation.
4784 </summary>
4785 <param name="value">The value to convert.</param>
4786 <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns>
4787 </member>
4788 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)">
4789 <summary>
4790 Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified.
4791 </summary>
4792 <param name="value">The value to convert.</param>
4793 <param name="format">The format the date will be converted to.</param>
4794 <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns>
4795 </member>
4796 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)">
4797 <summary>
4798 Converts the <see cref="T:System.Boolean"/> to its JSON string representation.
4799 </summary>
4800 <param name="value">The value to convert.</param>
4801 <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns>
4802 </member>
4803 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)">
4804 <summary>
4805 Converts the <see cref="T:System.Char"/> to its JSON string representation.
4806 </summary>
4807 <param name="value">The value to convert.</param>
4808 <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns>
4809 </member>
4810 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)">
4811 <summary>
4812 Converts the <see cref="T:System.Enum"/> to its JSON string representation.
4813 </summary>
4814 <param name="value">The value to convert.</param>
4815 <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns>
4816 </member>
4817 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)">
4818 <summary>
4819 Converts the <see cref="T:System.Int32"/> to its JSON string representation.
4820 </summary>
4821 <param name="value">The value to convert.</param>
4822 <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns>
4823 </member>
4824 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)">
4825 <summary>
4826 Converts the <see cref="T:System.Int16"/> to its JSON string representation.
4827 </summary>
4828 <param name="value">The value to convert.</param>
4829 <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns>
4830 </member>
4831 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)">
4832 <summary>
4833 Converts the <see cref="T:System.UInt16"/> to its JSON string representation.
4834 </summary>
4835 <param name="value">The value to convert.</param>
4836 <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns>
4837 </member>
4838 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)">
4839 <summary>
4840 Converts the <see cref="T:System.UInt32"/> to its JSON string representation.
4841 </summary>
4842 <param name="value">The value to convert.</param>
4843 <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns>
4844 </member>
4845 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)">
4846 <summary>
4847 Converts the <see cref="T:System.Int64"/> to its JSON string representation.
4848 </summary>
4849 <param name="value">The value to convert.</param>
4850 <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns>
4851 </member>
4852 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)">
4853 <summary>
4854 Converts the <see cref="T:System.UInt64"/> to its JSON string representation.
4855 </summary>
4856 <param name="value">The value to convert.</param>
4857 <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns>
4858 </member>
4859 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)">
4860 <summary>
4861 Converts the <see cref="T:System.Single"/> to its JSON string representation.
4862 </summary>
4863 <param name="value">The value to convert.</param>
4864 <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns>
4865 </member>
4866 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)">
4867 <summary>
4868 Converts the <see cref="T:System.Double"/> to its JSON string representation.
4869 </summary>
4870 <param name="value">The value to convert.</param>
4871 <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns>
4872 </member>
4873 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)">
4874 <summary>
4875 Converts the <see cref="T:System.Byte"/> to its JSON string representation.
4876 </summary>
4877 <param name="value">The value to convert.</param>
4878 <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns>
4879 </member>
4880 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)">
4881 <summary>
4882 Converts the <see cref="T:System.SByte"/> to its JSON string representation.
4883 </summary>
4884 <param name="value">The value to convert.</param>
4885 <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns>
4886 </member>
4887 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)">
4888 <summary>
4889 Converts the <see cref="T:System.Decimal"/> to its JSON string representation.
4890 </summary>
4891 <param name="value">The value to convert.</param>
4892 <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns>
4893 </member>
4894 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)">
4895 <summary>
4896 Converts the <see cref="T:System.Guid"/> to its JSON string representation.
4897 </summary>
4898 <param name="value">The value to convert.</param>
4899 <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns>
4900 </member>
4901 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)">
4902 <summary>
4903 Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation.
4904 </summary>
4905 <param name="value">The value to convert.</param>
4906 <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns>
4907 </member>
4908 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)">
4909 <summary>
4910 Converts the <see cref="T:System.Uri"/> to its JSON string representation.
4911 </summary>
4912 <param name="value">The value to convert.</param>
4913 <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns>
4914 </member>
4915 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)">
4916 <summary>
4917 Converts the <see cref="T:System.String"/> to its JSON string representation.
4918 </summary>
4919 <param name="value">The value to convert.</param>
4920 <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns>
4921 </member>
4922 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)">
4923 <summary>
4924 Converts the <see cref="T:System.String"/> to its JSON string representation.
4925 </summary>
4926 <param name="value">The value to convert.</param>
4927 <param name="delimiter">The string delimiter character.</param>
4928 <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns>
4929 </member>
4930 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char,Newtonsoft.Json.StringEscapeHandling)">
4931 <summary>
4932 Converts the <see cref="T:System.String"/> to its JSON string representation.
4933 </summary>
4934 <param name="value">The value to convert.</param>
4935 <param name="delimiter">The string delimiter character.</param>
4936 <param name="stringEscapeHandling">The string escape handling.</param>
4937 <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns>
4938 </member>
4939 <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)">
4940 <summary>
4941 Converts the <see cref="T:System.Object"/> to its JSON string representation.
4942 </summary>
4943 <param name="value">The value to convert.</param>
4944 <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns>
4945 </member>
4946 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)">
4947 <summary>
4948 Serializes the specified object to a JSON string.
4949 </summary>
4950 <param name="value">The object to serialize.</param>
4951 <returns>A JSON string representation of the object.</returns>
4952 </member>
4953 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)">
4954 <summary>
4955 Serializes the specified object to a JSON string using formatting.
4956 </summary>
4957 <param name="value">The object to serialize.</param>
4958 <param name="formatting">Indicates how the output is formatted.</param>
4959 <returns>
4960 A JSON string representation of the object.
4961 </returns>
4962 </member>
4963 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])">
4964 <summary>
4965 Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>.
4966 </summary>
4967 <param name="value">The object to serialize.</param>
4968 <param name="converters">A collection converters used while serializing.</param>
4969 <returns>A JSON string representation of the object.</returns>
4970 </member>
4971 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])">
4972 <summary>
4973 Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>.
4974 </summary>
4975 <param name="value">The object to serialize.</param>
4976 <param name="formatting">Indicates how the output is formatted.</param>
4977 <param name="converters">A collection converters used while serializing.</param>
4978 <returns>A JSON string representation of the object.</returns>
4979 </member>
4980 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)">
4981 <summary>
4982 Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
4983 </summary>
4984 <param name="value">The object to serialize.</param>
4985 <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object.
4986 If this is null, default serialization settings will be used.</param>
4987 <returns>
4988 A JSON string representation of the object.
4989 </returns>
4990 </member>
4991 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.JsonSerializerSettings)">
4992 <summary>
4993 Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
4994 </summary>
4995 <param name="value">The object to serialize.</param>
4996 <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object.
4997 If this is null, default serialization settings will be used.</param>
4998 <param name="type">
4999 The type of the value being serialized.
5000 This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match.
5001 Specifing the type is optional.
5002 </param>
5003 <returns>
5004 A JSON string representation of the object.
5005 </returns>
5006 </member>
5007 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)">
5008 <summary>
5009 Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5010 </summary>
5011 <param name="value">The object to serialize.</param>
5012 <param name="formatting">Indicates how the output is formatted.</param>
5013 <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object.
5014 If this is null, default serialization settings will be used.</param>
5015 <returns>
5016 A JSON string representation of the object.
5017 </returns>
5018 </member>
5019 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)">
5020 <summary>
5021 Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5022 </summary>
5023 <param name="value">The object to serialize.</param>
5024 <param name="formatting">Indicates how the output is formatted.</param>
5025 <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object.
5026 If this is null, default serialization settings will be used.</param>
5027 <param name="type">
5028 The type of the value being serialized.
5029 This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match.
5030 Specifing the type is optional.
5031 </param>
5032 <returns>
5033 A JSON string representation of the object.
5034 </returns>
5035 </member>
5036 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object)">
5037 <summary>
5038 Asynchronously serializes the specified object to a JSON string.
5039 Serialization will happen on a new thread.
5040 </summary>
5041 <param name="value">The object to serialize.</param>
5042 <returns>
5043 A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object.
5044 </returns>
5045 </member>
5046 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting)">
5047 <summary>
5048 Asynchronously serializes the specified object to a JSON string using formatting.
5049 Serialization will happen on a new thread.
5050 </summary>
5051 <param name="value">The object to serialize.</param>
5052 <param name="formatting">Indicates how the output is formatted.</param>
5053 <returns>
5054 A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object.
5055 </returns>
5056 </member>
5057 <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)">
5058 <summary>
5059 Asynchronously serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>.
5060 Serialization will happen on a new thread.
5061 </summary>
5062 <param name="value">The object to serialize.</param>
5063 <param name="formatting">Indicates how the output is formatted.</param>
5064 <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object.
5065 If this is null, default serialization settings will be used.</param>
5066 <returns>
5067 A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object.
5068 </returns>
5069 </member>
5070 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)">
5071 <summary>
5072 Deserializes the JSON to a .NET object.
5073 </summary>
5074 <param name="value">The JSON to deserialize.</param>
5075 <returns>The deserialized object from the JSON string.</returns>
5076 </member>
5077 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)">
5078 <summary>
5079 Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5080 </summary>
5081 <param name="value">The JSON to deserialize.</param>
5082 <param name="settings">
5083 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5084 If this is null, default serialization settings will be used.
5085 </param>
5086 <returns>The deserialized object from the JSON string.</returns>
5087 </member>
5088 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)">
5089 <summary>
5090 Deserializes the JSON to the specified .NET type.
5091 </summary>
5092 <param name="value">The JSON to deserialize.</param>
5093 <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param>
5094 <returns>The deserialized object from the JSON string.</returns>
5095 </member>
5096 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)">
5097 <summary>
5098 Deserializes the JSON to the specified .NET type.
5099 </summary>
5100 <typeparam name="T">The type of the object to deserialize to.</typeparam>
5101 <param name="value">The JSON to deserialize.</param>
5102 <returns>The deserialized object from the JSON string.</returns>
5103 </member>
5104 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)">
5105 <summary>
5106 Deserializes the JSON to the given anonymous type.
5107 </summary>
5108 <typeparam name="T">
5109 The anonymous type to deserialize to. This can't be specified
5110 traditionally and must be infered from the anonymous type passed
5111 as a parameter.
5112 </typeparam>
5113 <param name="value">The JSON to deserialize.</param>
5114 <param name="anonymousTypeObject">The anonymous type object.</param>
5115 <returns>The deserialized anonymous type from the JSON string.</returns>
5116 </member>
5117 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)">
5118 <summary>
5119 Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5120 </summary>
5121 <typeparam name="T">
5122 The anonymous type to deserialize to. This can't be specified
5123 traditionally and must be infered from the anonymous type passed
5124 as a parameter.
5125 </typeparam>
5126 <param name="value">The JSON to deserialize.</param>
5127 <param name="anonymousTypeObject">The anonymous type object.</param>
5128 <param name="settings">
5129 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5130 If this is null, default serialization settings will be used.
5131 </param>
5132 <returns>The deserialized anonymous type from the JSON string.</returns>
5133 </member>
5134 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])">
5135 <summary>
5136 Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>.
5137 </summary>
5138 <typeparam name="T">The type of the object to deserialize to.</typeparam>
5139 <param name="value">The JSON to deserialize.</param>
5140 <param name="converters">Converters to use while deserializing.</param>
5141 <returns>The deserialized object from the JSON string.</returns>
5142 </member>
5143 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)">
5144 <summary>
5145 Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5146 </summary>
5147 <typeparam name="T">The type of the object to deserialize to.</typeparam>
5148 <param name="value">The object to deserialize.</param>
5149 <param name="settings">
5150 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5151 If this is null, default serialization settings will be used.
5152 </param>
5153 <returns>The deserialized object from the JSON string.</returns>
5154 </member>
5155 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])">
5156 <summary>
5157 Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>.
5158 </summary>
5159 <param name="value">The JSON to deserialize.</param>
5160 <param name="type">The type of the object to deserialize.</param>
5161 <param name="converters">Converters to use while deserializing.</param>
5162 <returns>The deserialized object from the JSON string.</returns>
5163 </member>
5164 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)">
5165 <summary>
5166 Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5167 </summary>
5168 <param name="value">The JSON to deserialize.</param>
5169 <param name="type">The type of the object to deserialize to.</param>
5170 <param name="settings">
5171 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5172 If this is null, default serialization settings will be used.
5173 </param>
5174 <returns>The deserialized object from the JSON string.</returns>
5175 </member>
5176 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String)">
5177 <summary>
5178 Asynchronously deserializes the JSON to the specified .NET type.
5179 Deserialization will happen on a new thread.
5180 </summary>
5181 <typeparam name="T">The type of the object to deserialize to.</typeparam>
5182 <param name="value">The JSON to deserialize.</param>
5183 <returns>
5184 A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string.
5185 </returns>
5186 </member>
5187 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String,Newtonsoft.Json.JsonSerializerSettings)">
5188 <summary>
5189 Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5190 Deserialization will happen on a new thread.
5191 </summary>
5192 <typeparam name="T">The type of the object to deserialize to.</typeparam>
5193 <param name="value">The JSON to deserialize.</param>
5194 <param name="settings">
5195 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5196 If this is null, default serialization settings will be used.
5197 </param>
5198 <returns>
5199 A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string.
5200 </returns>
5201 </member>
5202 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String)">
5203 <summary>
5204 Asynchronously deserializes the JSON to the specified .NET type.
5205 Deserialization will happen on a new thread.
5206 </summary>
5207 <param name="value">The JSON to deserialize.</param>
5208 <returns>
5209 A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string.
5210 </returns>
5211 </member>
5212 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)">
5213 <summary>
5214 Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5215 Deserialization will happen on a new thread.
5216 </summary>
5217 <param name="value">The JSON to deserialize.</param>
5218 <param name="type">The type of the object to deserialize to.</param>
5219 <param name="settings">
5220 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5221 If this is null, default serialization settings will be used.
5222 </param>
5223 <returns>
5224 A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string.
5225 </returns>
5226 </member>
5227 <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)">
5228 <summary>
5229 Populates the object with values from the JSON string.
5230 </summary>
5231 <param name="value">The JSON to populate values from.</param>
5232 <param name="target">The target object to populate values onto.</param>
5233 </member>
5234 <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)">
5235 <summary>
5236 Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5237 </summary>
5238 <param name="value">The JSON to populate values from.</param>
5239 <param name="target">The target object to populate values onto.</param>
5240 <param name="settings">
5241 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5242 If this is null, default serialization settings will be used.
5243 </param>
5244 </member>
5245 <member name="M:Newtonsoft.Json.JsonConvert.PopulateObjectAsync(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)">
5246 <summary>
5247 Asynchronously populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5248 </summary>
5249 <param name="value">The JSON to populate values from.</param>
5250 <param name="target">The target object to populate values onto.</param>
5251 <param name="settings">
5252 The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object.
5253 If this is null, default serialization settings will be used.
5254 </param>
5255 <returns>
5256 A task that represents the asynchronous populate operation.
5257 </returns>
5258 </member>
5259 <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)">
5260 <summary>
5261 Serializes the XML node to a JSON string.
5262 </summary>
5263 <param name="node">The node to serialize.</param>
5264 <returns>A JSON string of the XmlNode.</returns>
5265 </member>
5266 <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)">
5267 <summary>
5268 Serializes the XML node to a JSON string using formatting.
5269 </summary>
5270 <param name="node">The node to serialize.</param>
5271 <param name="formatting">Indicates how the output is formatted.</param>
5272 <returns>A JSON string of the XmlNode.</returns>
5273 </member>
5274 <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)">
5275 <summary>
5276 Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>.
5277 </summary>
5278 <param name="node">The node to serialize.</param>
5279 <param name="formatting">Indicates how the output is formatted.</param>
5280 <param name="omitRootObject">Omits writing the root object.</param>
5281 <returns>A JSON string of the XmlNode.</returns>
5282 </member>
5283 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)">
5284 <summary>
5285 Deserializes the XmlNode from a JSON string.
5286 </summary>
5287 <param name="value">The JSON string.</param>
5288 <returns>The deserialized XmlNode</returns>
5289 </member>
5290 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)">
5291 <summary>
5292 Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>.
5293 </summary>
5294 <param name="value">The JSON string.</param>
5295 <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param>
5296 <returns>The deserialized XmlNode</returns>
5297 </member>
5298 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)">
5299 <summary>
5300 Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>
5301 and writes a .NET array attribute for collections.
5302 </summary>
5303 <param name="value">The JSON string.</param>
5304 <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param>
5305 <param name="writeArrayAttribute">
5306 A flag to indicate whether to write the Json.NET array attribute.
5307 This attribute helps preserve arrays when converting the written XML back to JSON.
5308 </param>
5309 <returns>The deserialized XmlNode</returns>
5310 </member>
5311 <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)">
5312 <summary>
5313 Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string.
5314 </summary>
5315 <param name="node">The node to convert to JSON.</param>
5316 <returns>A JSON string of the XNode.</returns>
5317 </member>
5318 <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)">
5319 <summary>
5320 Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting.
5321 </summary>
5322 <param name="node">The node to convert to JSON.</param>
5323 <param name="formatting">Indicates how the output is formatted.</param>
5324 <returns>A JSON string of the XNode.</returns>
5325 </member>
5326 <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)">
5327 <summary>
5328 Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>.
5329 </summary>
5330 <param name="node">The node to serialize.</param>
5331 <param name="formatting">Indicates how the output is formatted.</param>
5332 <param name="omitRootObject">Omits writing the root object.</param>
5333 <returns>A JSON string of the XNode.</returns>
5334 </member>
5335 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)">
5336 <summary>
5337 Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string.
5338 </summary>
5339 <param name="value">The JSON string.</param>
5340 <returns>The deserialized XNode</returns>
5341 </member>
5342 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)">
5343 <summary>
5344 Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>.
5345 </summary>
5346 <param name="value">The JSON string.</param>
5347 <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param>
5348 <returns>The deserialized XNode</returns>
5349 </member>
5350 <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)">
5351 <summary>
5352 Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>
5353 and writes a .NET array attribute for collections.
5354 </summary>
5355 <param name="value">The JSON string.</param>
5356 <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param>
5357 <param name="writeArrayAttribute">
5358 A flag to indicate whether to write the Json.NET array attribute.
5359 This attribute helps preserve arrays when converting the written XML back to JSON.
5360 </param>
5361 <returns>The deserialized XNode</returns>
5362 </member>
5363 <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings">
5364 <summary>
5365 Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5366 Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>,
5367 and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
5368 To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with
5369 <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>.
5370 </summary>
5371 </member>
5372 <member name="T:Newtonsoft.Json.JsonSerializationException">
5373 <summary>
5374 The exception thrown when an error occurs during Json serialization or deserialization.
5375 </summary>
5376 </member>
5377 <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor">
5378 <summary>
5379 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class.
5380 </summary>
5381 </member>
5382 <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)">
5383 <summary>
5384 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class
5385 with a specified error message.
5386 </summary>
5387 <param name="message">The error message that explains the reason for the exception.</param>
5388 </member>
5389 <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)">
5390 <summary>
5391 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class
5392 with a specified error message and a reference to the inner exception that is the cause of this exception.
5393 </summary>
5394 <param name="message">The error message that explains the reason for the exception.</param>
5395 <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
5396 </member>
5397 <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
5398 <summary>
5399 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class.
5400 </summary>
5401 <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
5402 <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
5403 <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>
5404 <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>
5405 </member>
5406 <member name="T:Newtonsoft.Json.JsonSerializer">
5407 <summary>
5408 Serializes and deserializes objects into and from the JSON format.
5409 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON.
5410 </summary>
5411 </member>
5412 <member name="M:Newtonsoft.Json.JsonSerializer.#ctor">
5413 <summary>
5414 Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class.
5415 </summary>
5416 </member>
5417 <member name="M:Newtonsoft.Json.JsonSerializer.Create">
5418 <summary>
5419 Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance.
5420 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings.
5421 </summary>
5422 <returns>
5423 A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance.
5424 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings.
5425 </returns>
5426 </member>
5427 <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)">
5428 <summary>
5429 Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5430 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings.
5431 </summary>
5432 <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param>
5433 <returns>
5434 A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5435 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings.
5436 </returns>
5437 </member>
5438 <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault">
5439 <summary>
5440 Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance.
5441 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings.
5442 </summary>
5443 <returns>
5444 A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance.
5445 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings.
5446 </returns>
5447 </member>
5448 <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)">
5449 <summary>
5450 Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5451 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings.
5452 </summary>
5453 <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param>
5454 <returns>
5455 A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.
5456 The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings.
5457 </returns>
5458 </member>
5459 <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)">
5460 <summary>
5461 Populates the JSON values onto the target object.
5462 </summary>
5463 <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param>
5464 <param name="target">The target object to populate values onto.</param>
5465 </member>
5466 <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)">
5467 <summary>
5468 Populates the JSON values onto the target object.
5469 </summary>
5470 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param>
5471 <param name="target">The target object to populate values onto.</param>
5472 </member>
5473 <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)">
5474 <summary>
5475 Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.
5476 </summary>
5477 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param>
5478 <returns>The <see cref="T:System.Object"/> being deserialized.</returns>
5479 </member>
5480 <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)">
5481 <summary>
5482 Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/>
5483 into an instance of the specified type.
5484 </summary>
5485 <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param>
5486 <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param>
5487 <returns>The instance of <paramref name="objectType"/> being deserialized.</returns>
5488 </member>
5489 <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)">
5490 <summary>
5491 Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>
5492 into an instance of the specified type.
5493 </summary>
5494 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param>
5495 <typeparam name="T">The type of the object to deserialize.</typeparam>
5496 <returns>The instance of <typeparamref name="T"/> being deserialized.</returns>
5497 </member>
5498 <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)">
5499 <summary>
5500 Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>
5501 into an instance of the specified type.
5502 </summary>
5503 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param>
5504 <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param>
5505 <returns>The instance of <paramref name="objectType"/> being deserialized.</returns>
5506 </member>
5507 <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)">
5508 <summary>
5509 Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
5510 to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>.
5511 </summary>
5512 <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param>
5513 <param name="value">The <see cref="T:System.Object"/> to serialize.</param>
5514 </member>
5515 <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)">
5516 <summary>
5517 Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
5518 to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>.
5519 </summary>
5520 <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param>
5521 <param name="value">The <see cref="T:System.Object"/> to serialize.</param>
5522 <param name="objectType">
5523 The type of the value being serialized.
5524 This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match.
5525 Specifing the type is optional.
5526 </param>
5527 </member>
5528 <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)">
5529 <summary>
5530 Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
5531 to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>.
5532 </summary>
5533 <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param>
5534 <param name="value">The <see cref="T:System.Object"/> to serialize.</param>
5535 <param name="objectType">
5536 The type of the value being serialized.
5537 This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match.
5538 Specifing the type is optional.
5539 </param>
5540 </member>
5541 <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)">
5542 <summary>
5543 Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
5544 to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>.
5545 </summary>
5546 <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param>
5547 <param name="value">The <see cref="T:System.Object"/> to serialize.</param>
5548 </member>
5549 <member name="E:Newtonsoft.Json.JsonSerializer.Error">
5550 <summary>
5551 Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization.
5552 </summary>
5553 </member>
5554 <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver">
5555 <summary>
5556 Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references.
5557 </summary>
5558 </member>
5559 <member name="P:Newtonsoft.Json.JsonSerializer.Binder">
5560 <summary>
5561 Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names.
5562 </summary>
5563 </member>
5564 <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter">
5565 <summary>
5566 Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages.
5567 </summary>
5568 <value>The trace writer.</value>
5569 </member>
5570 <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling">
5571 <summary>
5572 Gets or sets how type name writing and reading is handled by the serializer.
5573 </summary>
5574 </member>
5575 <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat">
5576 <summary>
5577 Gets or sets how a type name assembly is written and resolved by the serializer.
5578 </summary>
5579 <value>The type name assembly format.</value>
5580 </member>
5581 <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling">
5582 <summary>
5583 Gets or sets how object references are preserved by the serializer.
5584 </summary>
5585 </member>
5586 <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling">
5587 <summary>
5588 Get or set how reference loops (e.g. a class referencing itself) is handled.
5589 </summary>
5590 </member>
5591 <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling">
5592 <summary>
5593 Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
5594 </summary>
5595 </member>
5596 <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling">
5597 <summary>
5598 Get or set how null values are handled during serialization and deserialization.
5599 </summary>
5600 </member>
5601 <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling">
5602 <summary>
5603 Get or set how null default are handled during serialization and deserialization.
5604 </summary>
5605 </member>
5606 <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling">
5607 <summary>
5608 Gets or sets how objects are created during deserialization.
5609 </summary>
5610 <value>The object creation handling.</value>
5611 </member>
5612 <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling">
5613 <summary>
5614 Gets or sets how constructors are used during deserialization.
5615 </summary>
5616 <value>The constructor handling.</value>
5617 </member>
5618 <member name="P:Newtonsoft.Json.JsonSerializer.MetadataPropertyHandling">
5619 <summary>
5620 Gets or sets how metadata properties are used during deserialization.
5621 </summary>
5622 <value>The metadata properties handling.</value>
5623 </member>
5624 <member name="P:Newtonsoft.Json.JsonSerializer.Converters">
5625 <summary>
5626 Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.
5627 </summary>
5628 <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value>
5629 </member>
5630 <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver">
5631 <summary>
5632 Gets or sets the contract resolver used by the serializer when
5633 serializing .NET objects to JSON and vice versa.
5634 </summary>
5635 </member>
5636 <member name="P:Newtonsoft.Json.JsonSerializer.Context">
5637 <summary>
5638 Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods.
5639 </summary>
5640 <value>The context.</value>
5641 </member>
5642 <member name="P:Newtonsoft.Json.JsonSerializer.Formatting">
5643 <summary>
5644 Indicates how JSON text output is formatted.
5645 </summary>
5646 </member>
5647 <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling">
5648 <summary>
5649 Get or set how dates are written to JSON text.
5650 </summary>
5651 </member>
5652 <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling">
5653 <summary>
5654 Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization.
5655 </summary>
5656 </member>
5657 <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling">
5658 <summary>
5659 Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
5660 </summary>
5661 </member>
5662 <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling">
5663 <summary>
5664 Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
5665 </summary>
5666 </member>
5667 <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling">
5668 <summary>
5669 Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>,
5670 <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>,
5671 are written as JSON text.
5672 </summary>
5673 </member>
5674 <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling">
5675 <summary>
5676 Get or set how strings are escaped when writing JSON text.
5677 </summary>
5678 </member>
5679 <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString">
5680 <summary>
5681 Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text.
5682 </summary>
5683 </member>
5684 <member name="P:Newtonsoft.Json.JsonSerializer.Culture">
5685 <summary>
5686 Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>.
5687 </summary>
5688 </member>
5689 <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth">
5690 <summary>
5691 Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>.
5692 </summary>
5693 </member>
5694 <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent">
5695 <summary>
5696 Gets a value indicating whether there will be a check for additional JSON content after deserializing an object.
5697 </summary>
5698 <value>
5699 <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>.
5700 </value>
5701 </member>
5702 <member name="T:Newtonsoft.Json.Linq.Extensions">
5703 <summary>
5704 Contains the LINQ to JSON extension methods.
5705 </summary>
5706 </member>
5707 <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})">
5708 <summary>
5709 Returns a collection of tokens that contains the ancestors of every token in the source collection.
5710 </summary>
5711 <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam>
5712 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5713 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns>
5714 </member>
5715 <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})">
5716 <summary>
5717 Returns a collection of tokens that contains the descendants of every token in the source collection.
5718 </summary>
5719 <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam>
5720 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5721 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns>
5722 </member>
5723 <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})">
5724 <summary>
5725 Returns a collection of child properties of every object in the source collection.
5726 </summary>
5727 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param>
5728 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns>
5729 </member>
5730 <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)">
5731 <summary>
5732 Returns a collection of child values of every object in the source collection with the given key.
5733 </summary>
5734 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5735 <param name="key">The token key.</param>
5736 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns>
5737 </member>
5738 <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})">
5739 <summary>
5740 Returns a collection of child values of every object in the source collection.
5741 </summary>
5742 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5743 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns>
5744 </member>
5745 <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)">
5746 <summary>
5747 Returns a collection of converted child values of every object in the source collection with the given key.
5748 </summary>
5749 <typeparam name="U">The type to convert the values to.</typeparam>
5750 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5751 <param name="key">The token key.</param>
5752 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns>
5753 </member>
5754 <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})">
5755 <summary>
5756 Returns a collection of converted child values of every object in the source collection.
5757 </summary>
5758 <typeparam name="U">The type to convert the values to.</typeparam>
5759 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5760 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns>
5761 </member>
5762 <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})">
5763 <summary>
5764 Converts the value.
5765 </summary>
5766 <typeparam name="U">The type to convert the value to.</typeparam>
5767 <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param>
5768 <returns>A converted value.</returns>
5769 </member>
5770 <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})">
5771 <summary>
5772 Converts the value.
5773 </summary>
5774 <typeparam name="T">The source collection type.</typeparam>
5775 <typeparam name="U">The type to convert the value to.</typeparam>
5776 <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param>
5777 <returns>A converted value.</returns>
5778 </member>
5779 <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})">
5780 <summary>
5781 Returns a collection of child tokens of every array in the source collection.
5782 </summary>
5783 <typeparam name="T">The source collection type.</typeparam>
5784 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5785 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns>
5786 </member>
5787 <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})">
5788 <summary>
5789 Returns a collection of converted child tokens of every array in the source collection.
5790 </summary>
5791 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5792 <typeparam name="U">The type to convert the values to.</typeparam>
5793 <typeparam name="T">The source collection type.</typeparam>
5794 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns>
5795 </member>
5796 <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})">
5797 <summary>
5798 Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.
5799 </summary>
5800 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5801 <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns>
5802 </member>
5803 <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})">
5804 <summary>
5805 Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.
5806 </summary>
5807 <typeparam name="T">The source collection type.</typeparam>
5808 <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param>
5809 <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns>
5810 </member>
5811 <member name="T:Newtonsoft.Json.Linq.JConstructor">
5812 <summary>
5813 Represents a JSON constructor.
5814 </summary>
5815 </member>
5816 <member name="T:Newtonsoft.Json.Linq.JContainer">
5817 <summary>
5818 Represents a token that can contain other tokens.
5819 </summary>
5820 </member>
5821 <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)">
5822 <summary>
5823 Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event.
5824 </summary>
5825 <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param>
5826 </member>
5827 <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)">
5828 <summary>
5829 Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event.
5830 </summary>
5831 <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param>
5832 </member>
5833 <member name="M:Newtonsoft.Json.Linq.JContainer.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)">
5834 <summary>
5835 Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"/> event.
5836 </summary>
5837 <param name="e">The <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs"/> instance containing the event data.</param>
5838 </member>
5839 <member name="M:Newtonsoft.Json.Linq.JContainer.Children">
5840 <summary>
5841 Returns a collection of the child tokens of this token, in document order.
5842 </summary>
5843 <returns>
5844 An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.
5845 </returns>
5846 </member>
5847 <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1">
5848 <summary>
5849 Returns a collection of the child values of this token, in document order.
5850 </summary>
5851 <typeparam name="T">The type to convert the values to.</typeparam>
5852 <returns>
5853 A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.
5854 </returns>
5855 </member>
5856 <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants">
5857 <summary>
5858 Returns a collection of the descendant tokens for this token in document order.
5859 </summary>
5860 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns>
5861 </member>
5862 <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)">
5863 <summary>
5864 Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
5865 </summary>
5866 <param name="content">The content to be added.</param>
5867 </member>
5868 <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)">
5869 <summary>
5870 Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
5871 </summary>
5872 <param name="content">The content to be added.</param>
5873 </member>
5874 <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter">
5875 <summary>
5876 Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
5877 </summary>
5878 <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns>
5879 </member>
5880 <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)">
5881 <summary>
5882 Replaces the children nodes of this token with the specified content.
5883 </summary>
5884 <param name="content">The content.</param>
5885 </member>
5886 <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll">
5887 <summary>
5888 Removes the child nodes from this token.
5889 </summary>
5890 </member>
5891 <member name="M:Newtonsoft.Json.Linq.JContainer.Merge(System.Object)">
5892 <summary>
5893 Merge the specified content into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
5894 </summary>
5895 <param name="content">The content to be merged.</param>
5896 </member>
5897 <member name="M:Newtonsoft.Json.Linq.JContainer.Merge(System.Object,Newtonsoft.Json.Linq.JsonMergeSettings)">
5898 <summary>
5899 Merge the specified content into this <see cref="T:Newtonsoft.Json.Linq.JToken"/> using <see cref="T:Newtonsoft.Json.Linq.JsonMergeSettings"/>.
5900 </summary>
5901 <param name="content">The content to be merged.</param>
5902 <param name="settings">The <see cref="T:Newtonsoft.Json.Linq.JsonMergeSettings"/> used to merge the content.</param>
5903 </member>
5904 <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged">
5905 <summary>
5906 Occurs when the list changes or an item in the list changes.
5907 </summary>
5908 </member>
5909 <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew">
5910 <summary>
5911 Occurs before an item is added to the collection.
5912 </summary>
5913 </member>
5914 <member name="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged">
5915 <summary>
5916 Occurs when the items list of the collection has changed, or the collection is reset.
5917 </summary>
5918 </member>
5919 <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens">
5920 <summary>
5921 Gets the container's children tokens.
5922 </summary>
5923 <value>The container's children tokens.</value>
5924 </member>
5925 <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues">
5926 <summary>
5927 Gets a value indicating whether this token has child tokens.
5928 </summary>
5929 <value>
5930 <c>true</c> if this token has child values; otherwise, <c>false</c>.
5931 </value>
5932 </member>
5933 <member name="P:Newtonsoft.Json.Linq.JContainer.First">
5934 <summary>
5935 Get the first child token of this token.
5936 </summary>
5937 <value>
5938 A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
5939 </value>
5940 </member>
5941 <member name="P:Newtonsoft.Json.Linq.JContainer.Last">
5942 <summary>
5943 Get the last child token of this token.
5944 </summary>
5945 <value>
5946 A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
5947 </value>
5948 </member>
5949 <member name="P:Newtonsoft.Json.Linq.JContainer.Count">
5950 <summary>
5951 Gets the count of child JSON tokens.
5952 </summary>
5953 <value>The count of child JSON tokens</value>
5954 </member>
5955 <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor">
5956 <summary>
5957 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class.
5958 </summary>
5959 </member>
5960 <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)">
5961 <summary>
5962 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object.
5963 </summary>
5964 <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param>
5965 </member>
5966 <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])">
5967 <summary>
5968 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content.
5969 </summary>
5970 <param name="name">The constructor name.</param>
5971 <param name="content">The contents of the constructor.</param>
5972 </member>
5973 <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)">
5974 <summary>
5975 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content.
5976 </summary>
5977 <param name="name">The constructor name.</param>
5978 <param name="content">The contents of the constructor.</param>
5979 </member>
5980 <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)">
5981 <summary>
5982 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name.
5983 </summary>
5984 <param name="name">The constructor name.</param>
5985 </member>
5986 <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])">
5987 <summary>
5988 Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>.
5989 </summary>
5990 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
5991 <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param>
5992 </member>
5993 <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)">
5994 <summary>
5995 Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>.
5996 </summary>
5997 <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param>
5998 <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns>
5999 </member>
6000 <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens">
6001 <summary>
6002 Gets the container's children tokens.
6003 </summary>
6004 <value>The container's children tokens.</value>
6005 </member>
6006 <member name="P:Newtonsoft.Json.Linq.JConstructor.Name">
6007 <summary>
6008 Gets or sets the name of this constructor.
6009 </summary>
6010 <value>The constructor name.</value>
6011 </member>
6012 <member name="P:Newtonsoft.Json.Linq.JConstructor.Type">
6013 <summary>
6014 Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
6015 </summary>
6016 <value>The type.</value>
6017 </member>
6018 <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)">
6019 <summary>
6020 Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.
6021 </summary>
6022 <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value>
6023 </member>
6024 <member name="T:Newtonsoft.Json.Linq.JEnumerable`1">
6025 <summary>
6026 Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects.
6027 </summary>
6028 <typeparam name="T">The type of token</typeparam>
6029 </member>
6030 <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty">
6031 <summary>
6032 An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects.
6033 </summary>
6034 </member>
6035 <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
6036 <summary>
6037 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct.
6038 </summary>
6039 <param name="enumerable">The enumerable.</param>
6040 </member>
6041 <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator">
6042 <summary>
6043 Returns an enumerator that iterates through the collection.
6044 </summary>
6045 <returns>
6046 A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
6047 </returns>
6048 </member>
6049 <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator">
6050 <summary>
6051 Returns an enumerator that iterates through a collection.
6052 </summary>
6053 <returns>
6054 An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
6055 </returns>
6056 </member>
6057 <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(Newtonsoft.Json.Linq.JEnumerable{`0})">
6058 <summary>
6059 Determines whether the specified <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> is equal to this instance.
6060 </summary>
6061 <param name="other">The <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> to compare with this instance.</param>
6062 <returns>
6063 <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> is equal to this instance; otherwise, <c>false</c>.
6064 </returns>
6065 </member>
6066 <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)">
6067 <summary>
6068 Determines whether the specified <see cref="T:System.Object"/> is equal to this instance.
6069 </summary>
6070 <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param>
6071 <returns>
6072 <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>.
6073 </returns>
6074 </member>
6075 <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode">
6076 <summary>
6077 Returns a hash code for this instance.
6078 </summary>
6079 <returns>
6080 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
6081 </returns>
6082 </member>
6083 <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)">
6084 <summary>
6085 Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key.
6086 </summary>
6087 <value></value>
6088 </member>
6089 <member name="T:Newtonsoft.Json.Linq.JObject">
6090 <summary>
6091 Represents a JSON object.
6092 </summary>
6093 <example>
6094 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" />
6095 </example>
6096 </member>
6097 <member name="M:Newtonsoft.Json.Linq.JObject.#ctor">
6098 <summary>
6099 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class.
6100 </summary>
6101 </member>
6102 <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)">
6103 <summary>
6104 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object.
6105 </summary>
6106 <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param>
6107 </member>
6108 <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])">
6109 <summary>
6110 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content.
6111 </summary>
6112 <param name="content">The contents of the object.</param>
6113 </member>
6114 <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)">
6115 <summary>
6116 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content.
6117 </summary>
6118 <param name="content">The contents of the object.</param>
6119 </member>
6120 <member name="M:Newtonsoft.Json.Linq.JObject.Properties">
6121 <summary>
6122 Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.
6123 </summary>
6124 <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns>
6125 </member>
6126 <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)">
6127 <summary>
6128 Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name.
6129 </summary>
6130 <param name="name">The property name.</param>
6131 <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns>
6132 </member>
6133 <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues">
6134 <summary>
6135 Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.
6136 </summary>
6137 <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns>
6138 </member>
6139 <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)">
6140 <summary>
6141 Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>.
6142 </summary>
6143 <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param>
6144 <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns>
6145 </member>
6146 <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)">
6147 <summary>
6148 Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON.
6149 </summary>
6150 <param name="json">A <see cref="T:System.String"/> that contains JSON.</param>
6151 <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns>
6152 <example>
6153 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/>
6154 </example>
6155 </member>
6156 <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)">
6157 <summary>
6158 Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object.
6159 </summary>
6160 <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param>
6161 <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns>
6162 </member>
6163 <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)">
6164 <summary>
6165 Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object.
6166 </summary>
6167 <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param>
6168 <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param>
6169 <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns>
6170 </member>
6171 <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])">
6172 <summary>
6173 Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>.
6174 </summary>
6175 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
6176 <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param>
6177 </member>
6178 <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)">
6179 <summary>
6180 Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.
6181 </summary>
6182 <param name="propertyName">Name of the property.</param>
6183 <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns>
6184 </member>
6185 <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)">
6186 <summary>
6187 Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.
6188 The exact property name will be searched for first and if no matching property is found then
6189 the <see cref="T:System.StringComparison"/> will be used to match a property.
6190 </summary>
6191 <param name="propertyName">Name of the property.</param>
6192 <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param>
6193 <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns>
6194 </member>
6195 <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)">
6196 <summary>
6197 Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.
6198 The exact property name will be searched for first and if no matching property is found then
6199 the <see cref="T:System.StringComparison"/> will be used to match a property.
6200 </summary>
6201 <param name="propertyName">Name of the property.</param>
6202 <param name="value">The value.</param>
6203 <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param>
6204 <returns>true if a value was successfully retrieved; otherwise, false.</returns>
6205 </member>
6206 <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)">
6207 <summary>
6208 Adds the specified property name.
6209 </summary>
6210 <param name="propertyName">Name of the property.</param>
6211 <param name="value">The value.</param>
6212 </member>
6213 <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)">
6214 <summary>
6215 Removes the property with the specified name.
6216 </summary>
6217 <param name="propertyName">Name of the property.</param>
6218 <returns>true if item was successfully removed; otherwise, false.</returns>
6219 </member>
6220 <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)">
6221 <summary>
6222 Tries the get value.
6223 </summary>
6224 <param name="propertyName">Name of the property.</param>
6225 <param name="value">The value.</param>
6226 <returns>true if a value was successfully retrieved; otherwise, false.</returns>
6227 </member>
6228 <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator">
6229 <summary>
6230 Returns an enumerator that iterates through the collection.
6231 </summary>
6232 <returns>
6233 A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
6234 </returns>
6235 </member>
6236 <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)">
6237 <summary>
6238 Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments.
6239 </summary>
6240 <param name="propertyName">Name of the property.</param>
6241 </member>
6242 <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)">
6243 <summary>
6244 Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments.
6245 </summary>
6246 <param name="propertyName">Name of the property.</param>
6247 </member>
6248 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties">
6249 <summary>
6250 Returns the properties for this instance of a component.
6251 </summary>
6252 <returns>
6253 A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance.
6254 </returns>
6255 </member>
6256 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])">
6257 <summary>
6258 Returns the properties for this instance of a component using the attribute array as a filter.
6259 </summary>
6260 <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param>
6261 <returns>
6262 A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance.
6263 </returns>
6264 </member>
6265 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes">
6266 <summary>
6267 Returns a collection of custom attributes for this instance of a component.
6268 </summary>
6269 <returns>
6270 An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object.
6271 </returns>
6272 </member>
6273 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName">
6274 <summary>
6275 Returns the class name of this instance of a component.
6276 </summary>
6277 <returns>
6278 The class name of the object, or null if the class does not have a name.
6279 </returns>
6280 </member>
6281 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName">
6282 <summary>
6283 Returns the name of this instance of a component.
6284 </summary>
6285 <returns>
6286 The name of the object, or null if the object does not have a name.
6287 </returns>
6288 </member>
6289 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter">
6290 <summary>
6291 Returns a type converter for this instance of a component.
6292 </summary>
6293 <returns>
6294 A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object.
6295 </returns>
6296 </member>
6297 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent">
6298 <summary>
6299 Returns the default event for this instance of a component.
6300 </summary>
6301 <returns>
6302 An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events.
6303 </returns>
6304 </member>
6305 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty">
6306 <summary>
6307 Returns the default property for this instance of a component.
6308 </summary>
6309 <returns>
6310 A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties.
6311 </returns>
6312 </member>
6313 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)">
6314 <summary>
6315 Returns an editor of the specified type for this instance of a component.
6316 </summary>
6317 <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param>
6318 <returns>
6319 An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found.
6320 </returns>
6321 </member>
6322 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])">
6323 <summary>
6324 Returns the events for this instance of a component using the specified attribute array as a filter.
6325 </summary>
6326 <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param>
6327 <returns>
6328 An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance.
6329 </returns>
6330 </member>
6331 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents">
6332 <summary>
6333 Returns the events for this instance of a component.
6334 </summary>
6335 <returns>
6336 An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance.
6337 </returns>
6338 </member>
6339 <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)">
6340 <summary>
6341 Returns an object that contains the property described by the specified property descriptor.
6342 </summary>
6343 <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param>
6344 <returns>
6345 An <see cref="T:System.Object"/> that represents the owner of the specified property.
6346 </returns>
6347 </member>
6348 <member name="M:Newtonsoft.Json.Linq.JObject.GetMetaObject(System.Linq.Expressions.Expression)">
6349 <summary>
6350 Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object.
6351 </summary>
6352 <param name="parameter">The expression tree representation of the runtime value.</param>
6353 <returns>
6354 The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object.
6355 </returns>
6356 </member>
6357 <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens">
6358 <summary>
6359 Gets the container's children tokens.
6360 </summary>
6361 <value>The container's children tokens.</value>
6362 </member>
6363 <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged">
6364 <summary>
6365 Occurs when a property value changes.
6366 </summary>
6367 </member>
6368 <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging">
6369 <summary>
6370 Occurs when a property value is changing.
6371 </summary>
6372 </member>
6373 <member name="P:Newtonsoft.Json.Linq.JObject.Type">
6374 <summary>
6375 Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
6376 </summary>
6377 <value>The type.</value>
6378 </member>
6379 <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)">
6380 <summary>
6381 Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.
6382 </summary>
6383 <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value>
6384 </member>
6385 <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)">
6386 <summary>
6387 Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.
6388 </summary>
6389 <value></value>
6390 </member>
6391 <member name="T:Newtonsoft.Json.Linq.JArray">
6392 <summary>
6393 Represents a JSON array.
6394 </summary>
6395 <example>
6396 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" />
6397 </example>
6398 </member>
6399 <member name="M:Newtonsoft.Json.Linq.JArray.#ctor">
6400 <summary>
6401 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class.
6402 </summary>
6403 </member>
6404 <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)">
6405 <summary>
6406 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object.
6407 </summary>
6408 <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param>
6409 </member>
6410 <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])">
6411 <summary>
6412 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content.
6413 </summary>
6414 <param name="content">The contents of the array.</param>
6415 </member>
6416 <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)">
6417 <summary>
6418 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content.
6419 </summary>
6420 <param name="content">The contents of the array.</param>
6421 </member>
6422 <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)">
6423 <summary>
6424 Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>.
6425 </summary>
6426 <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param>
6427 <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns>
6428 </member>
6429 <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)">
6430 <summary>
6431 Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON.
6432 </summary>
6433 <param name="json">A <see cref="T:System.String"/> that contains JSON.</param>
6434 <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns>
6435 <example>
6436 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/>
6437 </example>
6438 </member>
6439 <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)">
6440 <summary>
6441 Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object.
6442 </summary>
6443 <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param>
6444 <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns>
6445 </member>
6446 <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)">
6447 <summary>
6448 Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object.
6449 </summary>
6450 <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param>
6451 <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param>
6452 <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns>
6453 </member>
6454 <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])">
6455 <summary>
6456 Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>.
6457 </summary>
6458 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
6459 <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param>
6460 </member>
6461 <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)">
6462 <summary>
6463 Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>.
6464 </summary>
6465 <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param>
6466 <returns>
6467 The index of <paramref name="item"/> if found in the list; otherwise, -1.
6468 </returns>
6469 </member>
6470 <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)">
6471 <summary>
6472 Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index.
6473 </summary>
6474 <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param>
6475 <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param>
6476 <exception cref="T:System.ArgumentOutOfRangeException">
6477 <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception>
6478 <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception>
6479 </member>
6480 <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)">
6481 <summary>
6482 Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index.
6483 </summary>
6484 <param name="index">The zero-based index of the item to remove.</param>
6485 <exception cref="T:System.ArgumentOutOfRangeException">
6486 <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception>
6487 <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception>
6488 </member>
6489 <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator">
6490 <summary>
6491 Returns an enumerator that iterates through the collection.
6492 </summary>
6493 <returns>
6494 A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection.
6495 </returns>
6496 </member>
6497 <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)">
6498 <summary>
6499 Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
6500 </summary>
6501 <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
6502 <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception>
6503 </member>
6504 <member name="M:Newtonsoft.Json.Linq.JArray.Clear">
6505 <summary>
6506 Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
6507 </summary>
6508 <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception>
6509 </member>
6510 <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)">
6511 <summary>
6512 Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value.
6513 </summary>
6514 <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
6515 <returns>
6516 true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false.
6517 </returns>
6518 </member>
6519 <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)">
6520 <summary>
6521 Copies to.
6522 </summary>
6523 <param name="array">The array.</param>
6524 <param name="arrayIndex">Index of the array.</param>
6525 </member>
6526 <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)">
6527 <summary>
6528 Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
6529 </summary>
6530 <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
6531 <returns>
6532 true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>.
6533 </returns>
6534 <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception>
6535 </member>
6536 <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens">
6537 <summary>
6538 Gets the container's children tokens.
6539 </summary>
6540 <value>The container's children tokens.</value>
6541 </member>
6542 <member name="P:Newtonsoft.Json.Linq.JArray.Type">
6543 <summary>
6544 Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
6545 </summary>
6546 <value>The type.</value>
6547 </member>
6548 <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)">
6549 <summary>
6550 Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.
6551 </summary>
6552 <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value>
6553 </member>
6554 <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)">
6555 <summary>
6556 Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index.
6557 </summary>
6558 <value></value>
6559 </member>
6560 <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly">
6561 <summary>
6562 Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.
6563 </summary>
6564 <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns>
6565 </member>
6566 <member name="T:Newtonsoft.Json.Linq.JTokenReader">
6567 <summary>
6568 Represents a reader that provides fast, non-cached, forward-only access to serialized Json data.
6569 </summary>
6570 </member>
6571 <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)">
6572 <summary>
6573 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class.
6574 </summary>
6575 <param name="token">The token to read from.</param>
6576 </member>
6577 <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes">
6578 <summary>
6579 Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>.
6580 </summary>
6581 <returns>
6582 A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.
6583 </returns>
6584 </member>
6585 <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal">
6586 <summary>
6587 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
6588 </summary>
6589 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
6590 </member>
6591 <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32">
6592 <summary>
6593 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
6594 </summary>
6595 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
6596 </member>
6597 <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString">
6598 <summary>
6599 Reads the next JSON token from the stream as a <see cref="T:System.String"/>.
6600 </summary>
6601 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
6602 </member>
6603 <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime">
6604 <summary>
6605 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
6606 </summary>
6607 <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
6608 </member>
6609 <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset">
6610 <summary>
6611 Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
6612 </summary>
6613 <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
6614 </member>
6615 <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read">
6616 <summary>
6617 Reads the next JSON token from the stream.
6618 </summary>
6619 <returns>
6620 true if the next token was read successfully; false if there are no more tokens to read.
6621 </returns>
6622 </member>
6623 <member name="P:Newtonsoft.Json.Linq.JTokenReader.Path">
6624 <summary>
6625 Gets the path of the current JSON token.
6626 </summary>
6627 </member>
6628 <member name="T:Newtonsoft.Json.Linq.JTokenWriter">
6629 <summary>
6630 Represents a writer that provides a fast, non-cached, forward-only way of generating Json data.
6631 </summary>
6632 </member>
6633 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)">
6634 <summary>
6635 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.
6636 </summary>
6637 <param name="container">The container being written to.</param>
6638 </member>
6639 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor">
6640 <summary>
6641 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class.
6642 </summary>
6643 </member>
6644 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush">
6645 <summary>
6646 Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream.
6647 </summary>
6648 </member>
6649 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close">
6650 <summary>
6651 Closes this stream and the underlying stream.
6652 </summary>
6653 </member>
6654 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject">
6655 <summary>
6656 Writes the beginning of a Json object.
6657 </summary>
6658 </member>
6659 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray">
6660 <summary>
6661 Writes the beginning of a Json array.
6662 </summary>
6663 </member>
6664 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)">
6665 <summary>
6666 Writes the start of a constructor with the given name.
6667 </summary>
6668 <param name="name">The name of the constructor.</param>
6669 </member>
6670 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)">
6671 <summary>
6672 Writes the end.
6673 </summary>
6674 <param name="token">The token.</param>
6675 </member>
6676 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)">
6677 <summary>
6678 Writes the property name of a name/value pair on a Json object.
6679 </summary>
6680 <param name="name">The name of the property.</param>
6681 </member>
6682 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)">
6683 <summary>
6684 Writes a <see cref="T:System.Object"/> value.
6685 An error will raised if the value cannot be written as a single JSON token.
6686 </summary>
6687 <param name="value">The <see cref="T:System.Object"/> value to write.</param>
6688 </member>
6689 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull">
6690 <summary>
6691 Writes a null value.
6692 </summary>
6693 </member>
6694 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined">
6695 <summary>
6696 Writes an undefined value.
6697 </summary>
6698 </member>
6699 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)">
6700 <summary>
6701 Writes raw JSON.
6702 </summary>
6703 <param name="json">The raw JSON to write.</param>
6704 </member>
6705 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)">
6706 <summary>
6707 Writes out a comment <code>/*...*/</code> containing the specified text.
6708 </summary>
6709 <param name="text">Text to place inside the comment.</param>
6710 </member>
6711 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)">
6712 <summary>
6713 Writes a <see cref="T:System.String"/> value.
6714 </summary>
6715 <param name="value">The <see cref="T:System.String"/> value to write.</param>
6716 </member>
6717 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)">
6718 <summary>
6719 Writes a <see cref="T:System.Int32"/> value.
6720 </summary>
6721 <param name="value">The <see cref="T:System.Int32"/> value to write.</param>
6722 </member>
6723 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)">
6724 <summary>
6725 Writes a <see cref="T:System.UInt32"/> value.
6726 </summary>
6727 <param name="value">The <see cref="T:System.UInt32"/> value to write.</param>
6728 </member>
6729 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)">
6730 <summary>
6731 Writes a <see cref="T:System.Int64"/> value.
6732 </summary>
6733 <param name="value">The <see cref="T:System.Int64"/> value to write.</param>
6734 </member>
6735 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)">
6736 <summary>
6737 Writes a <see cref="T:System.UInt64"/> value.
6738 </summary>
6739 <param name="value">The <see cref="T:System.UInt64"/> value to write.</param>
6740 </member>
6741 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)">
6742 <summary>
6743 Writes a <see cref="T:System.Single"/> value.
6744 </summary>
6745 <param name="value">The <see cref="T:System.Single"/> value to write.</param>
6746 </member>
6747 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)">
6748 <summary>
6749 Writes a <see cref="T:System.Double"/> value.
6750 </summary>
6751 <param name="value">The <see cref="T:System.Double"/> value to write.</param>
6752 </member>
6753 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)">
6754 <summary>
6755 Writes a <see cref="T:System.Boolean"/> value.
6756 </summary>
6757 <param name="value">The <see cref="T:System.Boolean"/> value to write.</param>
6758 </member>
6759 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)">
6760 <summary>
6761 Writes a <see cref="T:System.Int16"/> value.
6762 </summary>
6763 <param name="value">The <see cref="T:System.Int16"/> value to write.</param>
6764 </member>
6765 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)">
6766 <summary>
6767 Writes a <see cref="T:System.UInt16"/> value.
6768 </summary>
6769 <param name="value">The <see cref="T:System.UInt16"/> value to write.</param>
6770 </member>
6771 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)">
6772 <summary>
6773 Writes a <see cref="T:System.Char"/> value.
6774 </summary>
6775 <param name="value">The <see cref="T:System.Char"/> value to write.</param>
6776 </member>
6777 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)">
6778 <summary>
6779 Writes a <see cref="T:System.Byte"/> value.
6780 </summary>
6781 <param name="value">The <see cref="T:System.Byte"/> value to write.</param>
6782 </member>
6783 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)">
6784 <summary>
6785 Writes a <see cref="T:System.SByte"/> value.
6786 </summary>
6787 <param name="value">The <see cref="T:System.SByte"/> value to write.</param>
6788 </member>
6789 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)">
6790 <summary>
6791 Writes a <see cref="T:System.Decimal"/> value.
6792 </summary>
6793 <param name="value">The <see cref="T:System.Decimal"/> value to write.</param>
6794 </member>
6795 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)">
6796 <summary>
6797 Writes a <see cref="T:System.DateTime"/> value.
6798 </summary>
6799 <param name="value">The <see cref="T:System.DateTime"/> value to write.</param>
6800 </member>
6801 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)">
6802 <summary>
6803 Writes a <see cref="T:System.DateTimeOffset"/> value.
6804 </summary>
6805 <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param>
6806 </member>
6807 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])">
6808 <summary>
6809 Writes a <see cref="T:Byte[]"/> value.
6810 </summary>
6811 <param name="value">The <see cref="T:Byte[]"/> value to write.</param>
6812 </member>
6813 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)">
6814 <summary>
6815 Writes a <see cref="T:System.TimeSpan"/> value.
6816 </summary>
6817 <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param>
6818 </member>
6819 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)">
6820 <summary>
6821 Writes a <see cref="T:System.Guid"/> value.
6822 </summary>
6823 <param name="value">The <see cref="T:System.Guid"/> value to write.</param>
6824 </member>
6825 <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)">
6826 <summary>
6827 Writes a <see cref="T:System.Uri"/> value.
6828 </summary>
6829 <param name="value">The <see cref="T:System.Uri"/> value to write.</param>
6830 </member>
6831 <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token">
6832 <summary>
6833 Gets the token being writen.
6834 </summary>
6835 <value>The token being writen.</value>
6836 </member>
6837 <member name="T:Newtonsoft.Json.Linq.JProperty">
6838 <summary>
6839 Represents a JSON property.
6840 </summary>
6841 </member>
6842 <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)">
6843 <summary>
6844 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object.
6845 </summary>
6846 <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param>
6847 </member>
6848 <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])">
6849 <summary>
6850 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class.
6851 </summary>
6852 <param name="name">The property name.</param>
6853 <param name="content">The property content.</param>
6854 </member>
6855 <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)">
6856 <summary>
6857 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class.
6858 </summary>
6859 <param name="name">The property name.</param>
6860 <param name="content">The property content.</param>
6861 </member>
6862 <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])">
6863 <summary>
6864 Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>.
6865 </summary>
6866 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
6867 <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param>
6868 </member>
6869 <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)">
6870 <summary>
6871 Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>.
6872 </summary>
6873 <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param>
6874 <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns>
6875 </member>
6876 <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens">
6877 <summary>
6878 Gets the container's children tokens.
6879 </summary>
6880 <value>The container's children tokens.</value>
6881 </member>
6882 <member name="P:Newtonsoft.Json.Linq.JProperty.Name">
6883 <summary>
6884 Gets the property name.
6885 </summary>
6886 <value>The property name.</value>
6887 </member>
6888 <member name="P:Newtonsoft.Json.Linq.JProperty.Value">
6889 <summary>
6890 Gets or sets the property value.
6891 </summary>
6892 <value>The property value.</value>
6893 </member>
6894 <member name="P:Newtonsoft.Json.Linq.JProperty.Type">
6895 <summary>
6896 Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
6897 </summary>
6898 <value>The type.</value>
6899 </member>
6900 <member name="T:Newtonsoft.Json.Linq.JTokenType">
6901 <summary>
6902 Specifies the type of token.
6903 </summary>
6904 </member>
6905 <member name="F:Newtonsoft.Json.Linq.JTokenType.None">
6906 <summary>
6907 No token type has been set.
6908 </summary>
6909 </member>
6910 <member name="F:Newtonsoft.Json.Linq.JTokenType.Object">
6911 <summary>
6912 A JSON object.
6913 </summary>
6914 </member>
6915 <member name="F:Newtonsoft.Json.Linq.JTokenType.Array">
6916 <summary>
6917 A JSON array.
6918 </summary>
6919 </member>
6920 <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor">
6921 <summary>
6922 A JSON constructor.
6923 </summary>
6924 </member>
6925 <member name="F:Newtonsoft.Json.Linq.JTokenType.Property">
6926 <summary>
6927 A JSON object property.
6928 </summary>
6929 </member>
6930 <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment">
6931 <summary>
6932 A comment.
6933 </summary>
6934 </member>
6935 <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer">
6936 <summary>
6937 An integer value.
6938 </summary>
6939 </member>
6940 <member name="F:Newtonsoft.Json.Linq.JTokenType.Float">
6941 <summary>
6942 A float value.
6943 </summary>
6944 </member>
6945 <member name="F:Newtonsoft.Json.Linq.JTokenType.String">
6946 <summary>
6947 A string value.
6948 </summary>
6949 </member>
6950 <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean">
6951 <summary>
6952 A boolean value.
6953 </summary>
6954 </member>
6955 <member name="F:Newtonsoft.Json.Linq.JTokenType.Null">
6956 <summary>
6957 A null value.
6958 </summary>
6959 </member>
6960 <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined">
6961 <summary>
6962 An undefined value.
6963 </summary>
6964 </member>
6965 <member name="F:Newtonsoft.Json.Linq.JTokenType.Date">
6966 <summary>
6967 A date value.
6968 </summary>
6969 </member>
6970 <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw">
6971 <summary>
6972 A raw JSON value.
6973 </summary>
6974 </member>
6975 <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes">
6976 <summary>
6977 A collection of bytes value.
6978 </summary>
6979 </member>
6980 <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid">
6981 <summary>
6982 A Guid value.
6983 </summary>
6984 </member>
6985 <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri">
6986 <summary>
6987 A Uri value.
6988 </summary>
6989 </member>
6990 <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan">
6991 <summary>
6992 A TimeSpan value.
6993 </summary>
6994 </member>
6995 <member name="T:Newtonsoft.Json.Schema.Extensions">
6996 <summary>
6997 Contains the JSON schema extension methods.
6998 </summary>
6999 </member>
7000 <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)">
7001 <summary>
7002 Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid.
7003 </summary>
7004 <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
7005 <param name="schema">The schema to test with.</param>
7006 <returns>
7007 <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>.
7008 </returns>
7009 </member>
7010 <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)">
7011 <summary>
7012 Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid.
7013 </summary>
7014 <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
7015 <param name="schema">The schema to test with.</param>
7016 <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param>
7017 <returns>
7018 <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>.
7019 </returns>
7020 </member>
7021 <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)">
7022 <summary>
7023 Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
7024 </summary>
7025 <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
7026 <param name="schema">The schema to test with.</param>
7027 </member>
7028 <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)">
7029 <summary>
7030 Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
7031 </summary>
7032 <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
7033 <param name="schema">The schema to test with.</param>
7034 <param name="validationEventHandler">The validation event handler.</param>
7035 </member>
7036 <member name="T:Newtonsoft.Json.Schema.JsonSchemaException">
7037 <summary>
7038 Returns detailed information about the schema exception.
7039 </summary>
7040 </member>
7041 <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor">
7042 <summary>
7043 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class.
7044 </summary>
7045 </member>
7046 <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)">
7047 <summary>
7048 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class
7049 with a specified error message.
7050 </summary>
7051 <param name="message">The error message that explains the reason for the exception.</param>
7052 </member>
7053 <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)">
7054 <summary>
7055 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class
7056 with a specified error message and a reference to the inner exception that is the cause of this exception.
7057 </summary>
7058 <param name="message">The error message that explains the reason for the exception.</param>
7059 <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
7060 </member>
7061 <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
7062 <summary>
7063 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class.
7064 </summary>
7065 <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
7066 <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
7067 <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>
7068 <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>
7069 </member>
7070 <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber">
7071 <summary>
7072 Gets the line number indicating where the error occurred.
7073 </summary>
7074 <value>The line number indicating where the error occurred.</value>
7075 </member>
7076 <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition">
7077 <summary>
7078 Gets the line position indicating where the error occurred.
7079 </summary>
7080 <value>The line position indicating where the error occurred.</value>
7081 </member>
7082 <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path">
7083 <summary>
7084 Gets the path to the JSON where the error occurred.
7085 </summary>
7086 <value>The path to the JSON where the error occurred.</value>
7087 </member>
7088 <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver">
7089 <summary>
7090 Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id.
7091 </summary>
7092 </member>
7093 <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor">
7094 <summary>
7095 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class.
7096 </summary>
7097 </member>
7098 <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)">
7099 <summary>
7100 Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.
7101 </summary>
7102 <param name="reference">The id.</param>
7103 <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns>
7104 </member>
7105 <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas">
7106 <summary>
7107 Gets or sets the loaded schemas.
7108 </summary>
7109 <value>The loaded schemas.</value>
7110 </member>
7111 <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling">
7112 <summary>
7113 Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>.
7114 </summary>
7115 </member>
7116 <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None">
7117 <summary>
7118 Do not infer a schema Id.
7119 </summary>
7120 </member>
7121 <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName">
7122 <summary>
7123 Use the .NET type name as the schema Id.
7124 </summary>
7125 </member>
7126 <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName">
7127 <summary>
7128 Use the assembly qualified .NET type name as the schema Id.
7129 </summary>
7130 </member>
7131 <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs">
7132 <summary>
7133 Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>.
7134 </summary>
7135 </member>
7136 <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception">
7137 <summary>
7138 Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error.
7139 </summary>
7140 <value>The JsonSchemaException associated with the validation error.</value>
7141 </member>
7142 <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path">
7143 <summary>
7144 Gets the path of the JSON location where the validation error occurred.
7145 </summary>
7146 <value>The path of the JSON location where the validation error occurred.</value>
7147 </member>
7148 <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message">
7149 <summary>
7150 Gets the text description corresponding to the validation error.
7151 </summary>
7152 <value>The text description.</value>
7153 </member>
7154 <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler">
7155 <summary>
7156 Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>.
7157 </summary>
7158 </member>
7159 <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver">
7160 <summary>
7161 Resolves member mappings for a type, camel casing property names.
7162 </summary>
7163 </member>
7164 <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver">
7165 <summary>
7166 Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>.
7167 </summary>
7168 </member>
7169 <member name="T:Newtonsoft.Json.Serialization.IContractResolver">
7170 <summary>
7171 Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>.
7172 </summary>
7173 <example>
7174 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/>
7175 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/>
7176 </example>
7177 </member>
7178 <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)">
7179 <summary>
7180 Resolves the contract for a given type.
7181 </summary>
7182 <param name="type">The type to resolve a contract for.</param>
7183 <returns>The contract for a given type.</returns>
7184 </member>
7185 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor">
7186 <summary>
7187 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class.
7188 </summary>
7189 </member>
7190 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)">
7191 <summary>
7192 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class.
7193 </summary>
7194 <param name="shareCache">
7195 If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type.
7196 Sharing the cache will significantly improve performance with multiple resolver instances because expensive reflection will only
7197 happen once. This setting can cause unexpected behavior if different instances of the resolver are suppose to produce different
7198 results. When set to false it is highly recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
7199 </param>
7200 </member>
7201 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)">
7202 <summary>
7203 Resolves the contract for a given type.
7204 </summary>
7205 <param name="type">The type to resolve a contract for.</param>
7206 <returns>The contract for a given type.</returns>
7207 </member>
7208 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)">
7209 <summary>
7210 Gets the serializable members for the type.
7211 </summary>
7212 <param name="objectType">The type to get serializable members for.</param>
7213 <returns>The serializable members for the type.</returns>
7214 </member>
7215 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)">
7216 <summary>
7217 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.
7218 </summary>
7219 <param name="objectType">Type of the object.</param>
7220 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns>
7221 </member>
7222 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)">
7223 <summary>
7224 Creates the constructor parameters.
7225 </summary>
7226 <param name="constructor">The constructor to create properties for.</param>
7227 <param name="memberProperties">The type's member properties.</param>
7228 <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns>
7229 </member>
7230 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)">
7231 <summary>
7232 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.
7233 </summary>
7234 <param name="matchingMemberProperty">The matching member property.</param>
7235 <param name="parameterInfo">The constructor parameter.</param>
7236 <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns>
7237 </member>
7238 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)">
7239 <summary>
7240 Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract.
7241 </summary>
7242 <param name="objectType">Type of the object.</param>
7243 <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns>
7244 </member>
7245 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)">
7246 <summary>
7247 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.
7248 </summary>
7249 <param name="objectType">Type of the object.</param>
7250 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns>
7251 </member>
7252 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)">
7253 <summary>
7254 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.
7255 </summary>
7256 <param name="objectType">Type of the object.</param>
7257 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns>
7258 </member>
7259 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)">
7260 <summary>
7261 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.
7262 </summary>
7263 <param name="objectType">Type of the object.</param>
7264 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns>
7265 </member>
7266 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)">
7267 <summary>
7268 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.
7269 </summary>
7270 <param name="objectType">Type of the object.</param>
7271 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns>
7272 </member>
7273 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)">
7274 <summary>
7275 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.
7276 </summary>
7277 <param name="objectType">Type of the object.</param>
7278 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns>
7279 </member>
7280 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDynamicContract(System.Type)">
7281 <summary>
7282 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type.
7283 </summary>
7284 <param name="objectType">Type of the object.</param>
7285 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type.</returns>
7286 </member>
7287 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)">
7288 <summary>
7289 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.
7290 </summary>
7291 <param name="objectType">Type of the object.</param>
7292 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns>
7293 </member>
7294 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)">
7295 <summary>
7296 Determines which contract type is created for the given type.
7297 </summary>
7298 <param name="objectType">Type of the object.</param>
7299 <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns>
7300 </member>
7301 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)">
7302 <summary>
7303 Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.
7304 </summary>
7305 <param name="type">The type to create properties for.</param>
7306 /// <param name="memberSerialization">The member serialization mode for the type.</param>
7307 <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns>
7308 </member>
7309 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)">
7310 <summary>
7311 Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.
7312 </summary>
7313 <param name="member">The member.</param>
7314 <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns>
7315 </member>
7316 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)">
7317 <summary>
7318 Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.
7319 </summary>
7320 <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param>
7321 <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param>
7322 <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns>
7323 </member>
7324 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)">
7325 <summary>
7326 Resolves the name of the property.
7327 </summary>
7328 <param name="propertyName">Name of the property.</param>
7329 <returns>Name of the property.</returns>
7330 </member>
7331 <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)">
7332 <summary>
7333 Gets the resolved name of the property.
7334 </summary>
7335 <param name="propertyName">Name of the property.</param>
7336 <returns>Name of the property.</returns>
7337 </member>
7338 <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration">
7339 <summary>
7340 Gets a value indicating whether members are being get and set using dynamic code generation.
7341 This value is determined by the runtime permissions available.
7342 </summary>
7343 <value>
7344 <c>true</c> if using dynamic code generation; otherwise, <c>false</c>.
7345 </value>
7346 </member>
7347 <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags">
7348 <summary>
7349 Gets or sets the default members search flags.
7350 </summary>
7351 <value>The default members search flags.</value>
7352 </member>
7353 <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers">
7354 <summary>
7355 Gets or sets a value indicating whether compiler generated members should be serialized.
7356 </summary>
7357 <value>
7358 <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>.
7359 </value>
7360 </member>
7361 <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface">
7362 <summary>
7363 Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types.
7364 </summary>
7365 <value>
7366 <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>.
7367 </value>
7368 </member>
7369 <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute">
7370 <summary>
7371 Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types.
7372 </summary>
7373 <value>
7374 <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>.
7375 </value>
7376 </member>
7377 <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor">
7378 <summary>
7379 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class.
7380 </summary>
7381 </member>
7382 <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)">
7383 <summary>
7384 Resolves the name of the property.
7385 </summary>
7386 <param name="propertyName">Name of the property.</param>
7387 <returns>The property name camel cased.</returns>
7388 </member>
7389 <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder">
7390 <summary>
7391 The default serialization binder used when resolving and loading classes from type names.
7392 </summary>
7393 </member>
7394 <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)">
7395 <summary>
7396 When overridden in a derived class, controls the binding of a serialized object to a type.
7397 </summary>
7398 <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param>
7399 <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param>
7400 <returns>
7401 The type of the object the formatter creates a new instance of.
7402 </returns>
7403 </member>
7404 <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToName(System.Type,System.String@,System.String@)">
7405 <summary>
7406 When overridden in a derived class, controls the binding of a serialized object to a type.
7407 </summary>
7408 <param name="serializedType">The type of the object the formatter creates a new instance of.</param>
7409 <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object. </param>
7410 <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object. </param>
7411 </member>
7412 <member name="T:Newtonsoft.Json.Serialization.ErrorContext">
7413 <summary>
7414 Provides information surrounding an error.
7415 </summary>
7416 </member>
7417 <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error">
7418 <summary>
7419 Gets the error.
7420 </summary>
7421 <value>The error.</value>
7422 </member>
7423 <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject">
7424 <summary>
7425 Gets the original object that caused the error.
7426 </summary>
7427 <value>The original object that caused the error.</value>
7428 </member>
7429 <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member">
7430 <summary>
7431 Gets the member that caused the error.
7432 </summary>
7433 <value>The member that caused the error.</value>
7434 </member>
7435 <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path">
7436 <summary>
7437 Gets the path of the JSON location where the error occurred.
7438 </summary>
7439 <value>The path of the JSON location where the error occurred.</value>
7440 </member>
7441 <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled">
7442 <summary>
7443 Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled.
7444 </summary>
7445 <value><c>true</c> if handled; otherwise, <c>false</c>.</value>
7446 </member>
7447 <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract">
7448 <summary>
7449 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
7450 </summary>
7451 </member>
7452 <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)">
7453 <summary>
7454 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class.
7455 </summary>
7456 <param name="underlyingType">The underlying type for the contract.</param>
7457 </member>
7458 <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType">
7459 <summary>
7460 Gets the <see cref="T:System.Type"/> of the collection items.
7461 </summary>
7462 <value>The <see cref="T:System.Type"/> of the collection items.</value>
7463 </member>
7464 <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray">
7465 <summary>
7466 Gets a value indicating whether the collection type is a multidimensional array.
7467 </summary>
7468 <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value>
7469 </member>
7470 <member name="T:Newtonsoft.Json.Serialization.SerializationCallback">
7471 <summary>
7472 Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events.
7473 </summary>
7474 <param name="o">The object that raised the callback event.</param>
7475 <param name="context">The streaming context.</param>
7476 </member>
7477 <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback">
7478 <summary>
7479 Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events.
7480 </summary>
7481 <param name="o">The object that raised the callback event.</param>
7482 <param name="context">The streaming context.</param>
7483 <param name="errorContext">The error context.</param>
7484 </member>
7485 <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter">
7486 <summary>
7487 Sets extension data for an object during deserialization.
7488 </summary>
7489 <param name="o">The object to set extension data on.</param>
7490 <param name="key">The extension data key.</param>
7491 <param name="value">The extension data value.</param>
7492 </member>
7493 <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter">
7494 <summary>
7495 Gets extension data for an object during serialization.
7496 </summary>
7497 <param name="o">The object to set extension data on.</param>
7498 </member>
7499 <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract">
7500 <summary>
7501 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
7502 </summary>
7503 </member>
7504 <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)">
7505 <summary>
7506 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class.
7507 </summary>
7508 <param name="underlyingType">The underlying type for the contract.</param>
7509 </member>
7510 <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver">
7511 <summary>
7512 Gets or sets the property name resolver.
7513 </summary>
7514 <value>The property name resolver.</value>
7515 </member>
7516 <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType">
7517 <summary>
7518 Gets the <see cref="T:System.Type"/> of the dictionary keys.
7519 </summary>
7520 <value>The <see cref="T:System.Type"/> of the dictionary keys.</value>
7521 </member>
7522 <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType">
7523 <summary>
7524 Gets the <see cref="T:System.Type"/> of the dictionary values.
7525 </summary>
7526 <value>The <see cref="T:System.Type"/> of the dictionary values.</value>
7527 </member>
7528 <member name="T:Newtonsoft.Json.Serialization.JsonProperty">
7529 <summary>
7530 Maps a JSON property to a .NET member or constructor parameter.
7531 </summary>
7532 </member>
7533 <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString">
7534 <summary>
7535 Returns a <see cref="T:System.String"/> that represents this instance.
7536 </summary>
7537 <returns>
7538 A <see cref="T:System.String"/> that represents this instance.
7539 </returns>
7540 </member>
7541 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName">
7542 <summary>
7543 Gets or sets the name of the property.
7544 </summary>
7545 <value>The name of the property.</value>
7546 </member>
7547 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType">
7548 <summary>
7549 Gets or sets the type that declared this property.
7550 </summary>
7551 <value>The type that declared this property.</value>
7552 </member>
7553 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order">
7554 <summary>
7555 Gets or sets the order of serialization and deserialization of a member.
7556 </summary>
7557 <value>The numeric order of serialization or deserialization.</value>
7558 </member>
7559 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName">
7560 <summary>
7561 Gets or sets the name of the underlying member or parameter.
7562 </summary>
7563 <value>The name of the underlying member or parameter.</value>
7564 </member>
7565 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider">
7566 <summary>
7567 Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.
7568 </summary>
7569 <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value>
7570 </member>
7571 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType">
7572 <summary>
7573 Gets or sets the type of the property.
7574 </summary>
7575 <value>The type of the property.</value>
7576 </member>
7577 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter">
7578 <summary>
7579 Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property.
7580 If set this converter takes presidence over the contract converter for the property type.
7581 </summary>
7582 <value>The converter.</value>
7583 </member>
7584 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter">
7585 <summary>
7586 Gets or sets the member converter.
7587 </summary>
7588 <value>The member converter.</value>
7589 </member>
7590 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored">
7591 <summary>
7592 Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored.
7593 </summary>
7594 <value><c>true</c> if ignored; otherwise, <c>false</c>.</value>
7595 </member>
7596 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable">
7597 <summary>
7598 Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable.
7599 </summary>
7600 <value><c>true</c> if readable; otherwise, <c>false</c>.</value>
7601 </member>
7602 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable">
7603 <summary>
7604 Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable.
7605 </summary>
7606 <value><c>true</c> if writable; otherwise, <c>false</c>.</value>
7607 </member>
7608 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute">
7609 <summary>
7610 Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute.
7611 </summary>
7612 <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value>
7613 </member>
7614 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue">
7615 <summary>
7616 Gets the default value.
7617 </summary>
7618 <value>The default value.</value>
7619 </member>
7620 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required">
7621 <summary>
7622 Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.
7623 </summary>
7624 <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value>
7625 </member>
7626 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference">
7627 <summary>
7628 Gets or sets a value indicating whether this property preserves object references.
7629 </summary>
7630 <value>
7631 <c>true</c> if this instance is reference; otherwise, <c>false</c>.
7632 </value>
7633 </member>
7634 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling">
7635 <summary>
7636 Gets or sets the property null value handling.
7637 </summary>
7638 <value>The null value handling.</value>
7639 </member>
7640 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling">
7641 <summary>
7642 Gets or sets the property default value handling.
7643 </summary>
7644 <value>The default value handling.</value>
7645 </member>
7646 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling">
7647 <summary>
7648 Gets or sets the property reference loop handling.
7649 </summary>
7650 <value>The reference loop handling.</value>
7651 </member>
7652 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling">
7653 <summary>
7654 Gets or sets the property object creation handling.
7655 </summary>
7656 <value>The object creation handling.</value>
7657 </member>
7658 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling">
7659 <summary>
7660 Gets or sets or sets the type name handling.
7661 </summary>
7662 <value>The type name handling.</value>
7663 </member>
7664 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize">
7665 <summary>
7666 Gets or sets a predicate used to determine whether the property should be serialize.
7667 </summary>
7668 <value>A predicate used to determine whether the property should be serialize.</value>
7669 </member>
7670 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified">
7671 <summary>
7672 Gets or sets a predicate used to determine whether the property should be serialized.
7673 </summary>
7674 <value>A predicate used to determine whether the property should be serialized.</value>
7675 </member>
7676 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified">
7677 <summary>
7678 Gets or sets an action used to set whether the property has been deserialized.
7679 </summary>
7680 <value>An action used to set whether the property has been deserialized.</value>
7681 </member>
7682 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter">
7683 <summary>
7684 Gets or sets the converter used when serializing the property's collection items.
7685 </summary>
7686 <value>The collection's items converter.</value>
7687 </member>
7688 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference">
7689 <summary>
7690 Gets or sets whether this property's collection items are serialized as a reference.
7691 </summary>
7692 <value>Whether this property's collection items are serialized as a reference.</value>
7693 </member>
7694 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling">
7695 <summary>
7696 Gets or sets the the type name handling used when serializing the property's collection items.
7697 </summary>
7698 <value>The collection's items type name handling.</value>
7699 </member>
7700 <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling">
7701 <summary>
7702 Gets or sets the the reference loop handling used when serializing the property's collection items.
7703 </summary>
7704 <value>The collection's items reference loop handling.</value>
7705 </member>
7706 <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection">
7707 <summary>
7708 A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects.
7709 </summary>
7710 </member>
7711 <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)">
7712 <summary>
7713 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class.
7714 </summary>
7715 <param name="type">The type.</param>
7716 </member>
7717 <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)">
7718 <summary>
7719 When implemented in a derived class, extracts the key from the specified element.
7720 </summary>
7721 <param name="item">The element from which to extract the key.</param>
7722 <returns>The key for the specified element.</returns>
7723 </member>
7724 <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)">
7725 <summary>
7726 Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object.
7727 </summary>
7728 <param name="property">The property to add to the collection.</param>
7729 </member>
7730 <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)">
7731 <summary>
7732 Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object.
7733 First attempts to get an exact case match of propertyName and then
7734 a case insensitive match.
7735 </summary>
7736 <param name="propertyName">Name of the property.</param>
7737 <returns>A matching property if found.</returns>
7738 </member>
7739 <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)">
7740 <summary>
7741 Gets a property by property name.
7742 </summary>
7743 <param name="propertyName">The name of the property to get.</param>
7744 <param name="comparisonType">Type property name string comparison.</param>
7745 <returns>A matching property if found.</returns>
7746 </member>
7747 <member name="T:Newtonsoft.Json.MissingMemberHandling">
7748 <summary>
7749 Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
7750 </summary>
7751 </member>
7752 <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore">
7753 <summary>
7754 Ignore a missing member and do not attempt to deserialize it.
7755 </summary>
7756 </member>
7757 <member name="F:Newtonsoft.Json.MissingMemberHandling.Error">
7758 <summary>
7759 Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization.
7760 </summary>
7761 </member>
7762 <member name="T:Newtonsoft.Json.NullValueHandling">
7763 <summary>
7764 Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
7765 </summary>
7766 <example>
7767 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/>
7768 <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/>
7769 </example>
7770 </member>
7771 <member name="F:Newtonsoft.Json.NullValueHandling.Include">
7772 <summary>
7773 Include null values when serializing and deserializing objects.
7774 </summary>
7775 </member>
7776 <member name="F:Newtonsoft.Json.NullValueHandling.Ignore">
7777 <summary>
7778 Ignore null values when serializing and deserializing objects.
7779 </summary>
7780 </member>
7781 <member name="T:Newtonsoft.Json.ReferenceLoopHandling">
7782 <summary>
7783 Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
7784 </summary>
7785 </member>
7786 <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error">
7787 <summary>
7788 Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered.
7789 </summary>
7790 </member>
7791 <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore">
7792 <summary>
7793 Ignore loop references and do not serialize.
7794 </summary>
7795 </member>
7796 <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize">
7797 <summary>
7798 Serialize loop references.
7799 </summary>
7800 </member>
7801 <member name="T:Newtonsoft.Json.Schema.JsonSchema">
7802 <summary>
7803 An in-memory representation of a JSON Schema.
7804 </summary>
7805 </member>
7806 <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor">
7807 <summary>
7808 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class.
7809 </summary>
7810 </member>
7811 <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)">
7812 <summary>
7813 Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.
7814 </summary>
7815 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param>
7816 <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns>
7817 </member>
7818 <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)">
7819 <summary>
7820 Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.
7821 </summary>
7822 <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param>
7823 <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param>
7824 <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns>
7825 </member>
7826 <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)">
7827 <summary>
7828 Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON.
7829 </summary>
7830 <param name="json">A <see cref="T:System.String"/> that contains JSON.</param>
7831 <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns>
7832 </member>
7833 <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)">
7834 <summary>
7835 Parses the specified json.
7836 </summary>
7837 <param name="json">The json.</param>
7838 <param name="resolver">The resolver.</param>
7839 <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns>
7840 </member>
7841 <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)">
7842 <summary>
7843 Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>.
7844 </summary>
7845 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
7846 </member>
7847 <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)">
7848 <summary>
7849 Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>.
7850 </summary>
7851 <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param>
7852 <param name="resolver">The resolver used.</param>
7853 </member>
7854 <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString">
7855 <summary>
7856 Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
7857 </summary>
7858 <returns>
7859 A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
7860 </returns>
7861 </member>
7862 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id">
7863 <summary>
7864 Gets or sets the id.
7865 </summary>
7866 </member>
7867 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title">
7868 <summary>
7869 Gets or sets the title.
7870 </summary>
7871 </member>
7872 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required">
7873 <summary>
7874 Gets or sets whether the object is required.
7875 </summary>
7876 </member>
7877 <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly">
7878 <summary>
7879 Gets or sets whether the object is read only.
7880 </summary>
7881 </member>
7882 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden">
7883 <summary>
7884 Gets or sets whether the object is visible to users.
7885 </summary>
7886 </member>
7887 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient">
7888 <summary>
7889 Gets or sets whether the object is transient.
7890 </summary>
7891 </member>
7892 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description">
7893 <summary>
7894 Gets or sets the description of the object.
7895 </summary>
7896 </member>
7897 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type">
7898 <summary>
7899 Gets or sets the types of values allowed by the object.
7900 </summary>
7901 <value>The type.</value>
7902 </member>
7903 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern">
7904 <summary>
7905 Gets or sets the pattern.
7906 </summary>
7907 <value>The pattern.</value>
7908 </member>
7909 <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength">
7910 <summary>
7911 Gets or sets the minimum length.
7912 </summary>
7913 <value>The minimum length.</value>
7914 </member>
7915 <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength">
7916 <summary>
7917 Gets or sets the maximum length.
7918 </summary>
7919 <value>The maximum length.</value>
7920 </member>
7921 <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy">
7922 <summary>
7923 Gets or sets a number that the value should be divisble by.
7924 </summary>
7925 <value>A number that the value should be divisble by.</value>
7926 </member>
7927 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum">
7928 <summary>
7929 Gets or sets the minimum.
7930 </summary>
7931 <value>The minimum.</value>
7932 </member>
7933 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum">
7934 <summary>
7935 Gets or sets the maximum.
7936 </summary>
7937 <value>The maximum.</value>
7938 </member>
7939 <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum">
7940 <summary>
7941 Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute.
7942 </summary>
7943 <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value>
7944 </member>
7945 <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum">
7946 <summary>
7947 Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute.
7948 </summary>
7949 <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value>
7950 </member>
7951 <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems">
7952 <summary>
7953 Gets or sets the minimum number of items.
7954 </summary>
7955 <value>The minimum number of items.</value>
7956 </member>
7957 <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems">
7958 <summary>
7959 Gets or sets the maximum number of items.
7960 </summary>
7961 <value>The maximum number of items.</value>
7962 </member>
7963 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items">
7964 <summary>
7965 Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.
7966 </summary>
7967 <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value>
7968 </member>
7969 <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation">
7970 <summary>
7971 Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>.
7972 </summary>
7973 <value>
7974 <c>true</c> if items are validated using their array position; otherwise, <c>false</c>.
7975 </value>
7976 </member>
7977 <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems">
7978 <summary>
7979 Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.
7980 </summary>
7981 <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value>
7982 </member>
7983 <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems">
7984 <summary>
7985 Gets or sets a value indicating whether additional items are allowed.
7986 </summary>
7987 <value>
7988 <c>true</c> if additional items are allowed; otherwise, <c>false</c>.
7989 </value>
7990 </member>
7991 <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems">
7992 <summary>
7993 Gets or sets whether the array items must be unique.
7994 </summary>
7995 </member>
7996 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties">
7997 <summary>
7998 Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.
7999 </summary>
8000 <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value>
8001 </member>
8002 <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties">
8003 <summary>
8004 Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.
8005 </summary>
8006 <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value>
8007 </member>
8008 <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties">
8009 <summary>
8010 Gets or sets the pattern properties.
8011 </summary>
8012 <value>The pattern properties.</value>
8013 </member>
8014 <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties">
8015 <summary>
8016 Gets or sets a value indicating whether additional properties are allowed.
8017 </summary>
8018 <value>
8019 <c>true</c> if additional properties are allowed; otherwise, <c>false</c>.
8020 </value>
8021 </member>
8022 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires">
8023 <summary>
8024 Gets or sets the required property if this property is present.
8025 </summary>
8026 <value>The required property if this property is present.</value>
8027 </member>
8028 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum">
8029 <summary>
8030 Gets or sets the a collection of valid enum values allowed.
8031 </summary>
8032 <value>A collection of valid enum values allowed.</value>
8033 </member>
8034 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow">
8035 <summary>
8036 Gets or sets disallowed types.
8037 </summary>
8038 <value>The disallow types.</value>
8039 </member>
8040 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default">
8041 <summary>
8042 Gets or sets the default value.
8043 </summary>
8044 <value>The default value.</value>
8045 </member>
8046 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends">
8047 <summary>
8048 Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.
8049 </summary>
8050 <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value>
8051 </member>
8052 <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format">
8053 <summary>
8054 Gets or sets the format.
8055 </summary>
8056 <value>The format.</value>
8057 </member>
8058 <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator">
8059 <summary>
8060 Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>.
8061 </summary>
8062 </member>
8063 <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)">
8064 <summary>
8065 Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type.
8066 </summary>
8067 <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param>
8068 <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns>
8069 </member>
8070 <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)">
8071 <summary>
8072 Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type.
8073 </summary>
8074 <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param>
8075 <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param>
8076 <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns>
8077 </member>
8078 <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)">
8079 <summary>
8080 Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type.
8081 </summary>
8082 <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param>
8083 <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param>
8084 <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns>
8085 </member>
8086 <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)">
8087 <summary>
8088 Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type.
8089 </summary>
8090 <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param>
8091 <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param>
8092 <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param>
8093 <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns>
8094 </member>
8095 <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling">
8096 <summary>
8097 Gets or sets how undefined schemas are handled by the serializer.
8098 </summary>
8099 </member>
8100 <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver">
8101 <summary>
8102 Gets or sets the contract resolver.
8103 </summary>
8104 <value>The contract resolver.</value>
8105 </member>
8106 <member name="T:Newtonsoft.Json.Schema.JsonSchemaType">
8107 <summary>
8108 The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>.
8109 </summary>
8110 </member>
8111 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None">
8112 <summary>
8113 No type specified.
8114 </summary>
8115 </member>
8116 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String">
8117 <summary>
8118 String type.
8119 </summary>
8120 </member>
8121 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float">
8122 <summary>
8123 Float type.
8124 </summary>
8125 </member>
8126 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer">
8127 <summary>
8128 Integer type.
8129 </summary>
8130 </member>
8131 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean">
8132 <summary>
8133 Boolean type.
8134 </summary>
8135 </member>
8136 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object">
8137 <summary>
8138 Object type.
8139 </summary>
8140 </member>
8141 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array">
8142 <summary>
8143 Array type.
8144 </summary>
8145 </member>
8146 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null">
8147 <summary>
8148 Null type.
8149 </summary>
8150 </member>
8151 <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any">
8152 <summary>
8153 Any type.
8154 </summary>
8155 </member>
8156 <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract">
8157 <summary>
8158 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
8159 </summary>
8160 </member>
8161 <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)">
8162 <summary>
8163 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class.
8164 </summary>
8165 <param name="underlyingType">The underlying type for the contract.</param>
8166 </member>
8167 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization">
8168 <summary>
8169 Gets or sets the object member serialization.
8170 </summary>
8171 <value>The member object serialization.</value>
8172 </member>
8173 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired">
8174 <summary>
8175 Gets or sets a value that indicates whether the object's properties are required.
8176 </summary>
8177 <value>
8178 A value indicating whether the object's properties are required.
8179 </value>
8180 </member>
8181 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties">
8182 <summary>
8183 Gets the object's properties.
8184 </summary>
8185 <value>The object's properties.</value>
8186 </member>
8187 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters">
8188 <summary>
8189 Gets the constructor parameters required for any non-default constructor
8190 </summary>
8191 </member>
8192 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.CreatorParameters">
8193 <summary>
8194 Gets a collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> instances that define the parameters used with <see cref="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideCreator"/>.
8195 </summary>
8196 </member>
8197 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor">
8198 <summary>
8199 Gets or sets the override constructor used to create the object.
8200 This is set when a constructor is marked up using the
8201 JsonConstructor attribute.
8202 </summary>
8203 <value>The override constructor.</value>
8204 </member>
8205 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor">
8206 <summary>
8207 Gets or sets the parametrized constructor used to create the object.
8208 </summary>
8209 <value>The parametrized constructor.</value>
8210 </member>
8211 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideCreator">
8212 <summary>
8213 Gets or sets the function used to create the object. When set this function will override <see cref="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"/>.
8214 This function is called with a collection of arguments which are defined by the <see cref="P:Newtonsoft.Json.Serialization.JsonObjectContract.CreatorParameters"/> collection.
8215 </summary>
8216 <value>The function used to create the object.</value>
8217 </member>
8218 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter">
8219 <summary>
8220 Gets or sets the extension data setter.
8221 </summary>
8222 </member>
8223 <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter">
8224 <summary>
8225 Gets or sets the extension data getter.
8226 </summary>
8227 </member>
8228 <member name="T:Newtonsoft.Json.Serialization.JsonStringContract">
8229 <summary>
8230 Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
8231 </summary>
8232 </member>
8233 <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)">
8234 <summary>
8235 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class.
8236 </summary>
8237 <param name="underlyingType">The underlying type for the contract.</param>
8238 </member>
8239 <member name="M:Newtonsoft.Json.Serialization.JsonTypeReflector.CreateJsonConverterInstance(System.Type,System.Object[])">
8240 <summary>
8241 Lookup and create an instance of the JsonConverter type described by the argument.
8242 </summary>
8243 <param name="converterType">The JsonConverter type to create.</param>
8244 <param name="converterArgs">Optional arguments to pass to an initializing constructor of the JsonConverter.
8245 If null, the default constructor is used.</param>
8246 </member>
8247 <member name="M:Newtonsoft.Json.Serialization.JsonTypeReflector.GetJsonConverterCreator(System.Type)">
8248 <summary>
8249 Create a factory function that can be used to create instances of a JsonConverter described by the
8250 argument type. The returned function can then be used to either invoke the converter's default ctor, or any
8251 parameterized constructors by way of an object array.
8252 </summary>
8253 </member>
8254 <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider">
8255 <summary>
8256 Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection.
8257 </summary>
8258 </member>
8259 <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)">
8260 <summary>
8261 Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class.
8262 </summary>
8263 <param name="memberInfo">The member info.</param>
8264 </member>
8265 <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)">
8266 <summary>
8267 Sets the value.
8268 </summary>
8269 <param name="target">The target to set the value on.</param>
8270 <param name="value">The value to set on the target.</param>
8271 </member>
8272 <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)">
8273 <summary>
8274 Gets the value.
8275 </summary>
8276 <param name="target">The target to get the value from.</param>
8277 <returns>The value.</returns>
8278 </member>
8279 <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute">
8280 <summary>
8281 When applied to a method, specifies that the method is called when an error occurs serializing an object.
8282 </summary>
8283 </member>
8284 <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodWithResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback,Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)">
8285 <summary>
8286 Helper method for generating a MetaObject which calls a
8287 specific method on Dynamic that returns a result
8288 </summary>
8289 </member>
8290 <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodReturnLast(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)">
8291 <summary>
8292 Helper method for generating a MetaObject which calls a
8293 specific method on Dynamic, but uses one of the arguments for
8294 the result.
8295 </summary>
8296 </member>
8297 <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodNoResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)">
8298 <summary>
8299 Helper method for generating a MetaObject which calls a
8300 specific method on Dynamic, but uses one of the arguments for
8301 the result.
8302 </summary>
8303 </member>
8304 <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.GetRestrictions">
8305 <summary>
8306 Returns a Restrictions object which includes our current restrictions merged
8307 with a restriction limiting our type
8308 </summary>
8309 </member>
8310 <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1">
8311 <summary>
8312 Represents a method that constructs an object.
8313 </summary>
8314 <typeparam name="T">The object type to create.</typeparam>
8315 </member>
8316 <member name="T:Newtonsoft.Json.TypeNameHandling">
8317 <summary>
8318 Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.
8319 </summary>
8320 </member>
8321 <member name="F:Newtonsoft.Json.TypeNameHandling.None">
8322 <summary>
8323 Do not include the .NET type name when serializing types.
8324 </summary>
8325 </member>
8326 <member name="F:Newtonsoft.Json.TypeNameHandling.Objects">
8327 <summary>
8328 Include the .NET type name when serializing into a JSON object structure.
8329 </summary>
8330 </member>
8331 <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays">
8332 <summary>
8333 Include the .NET type name when serializing into a JSON array structure.
8334 </summary>
8335 </member>
8336 <member name="F:Newtonsoft.Json.TypeNameHandling.All">
8337 <summary>
8338 Always include the .NET type name when serializing.
8339 </summary>
8340 </member>
8341 <member name="F:Newtonsoft.Json.TypeNameHandling.Auto">
8342 <summary>
8343 Include the .NET type name when the type of the object being serialized is not the same as its declared type.
8344 </summary>
8345 </member>
8346 <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)">
8347 <summary>
8348 Converts the value to the specified type. If the value is unable to be converted, the
8349 value is checked whether it assignable to the specified type.
8350 </summary>
8351 <param name="initialValue">The value to convert.</param>
8352 <param name="culture">The culture to use when converting.</param>
8353 <param name="targetType">The type to convert or cast the value to.</param>
8354 <returns>
8355 The converted type. If conversion was unsuccessful, the initial value
8356 is returned if assignable to the target type.
8357 </returns>
8358 </member>
8359 <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1">
8360 <summary>
8361 Gets a dictionary of the names and values of an Enum type.
8362 </summary>
8363 <returns></returns>
8364 </member>
8365 <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)">
8366 <summary>
8367 Gets a dictionary of the names and values of an Enum type.
8368 </summary>
8369 <param name="enumType">The enum type to get names and values for.</param>
8370 <returns></returns>
8371 </member>
8372 <member name="T:Newtonsoft.Json.JsonToken">
8373 <summary>
8374 Specifies the type of Json token.
8375 </summary>
8376 </member>
8377 <member name="F:Newtonsoft.Json.JsonToken.None">
8378 <summary>
8379 This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called.
8380 </summary>
8381 </member>
8382 <member name="F:Newtonsoft.Json.JsonToken.StartObject">
8383 <summary>
8384 An object start token.
8385 </summary>
8386 </member>
8387 <member name="F:Newtonsoft.Json.JsonToken.StartArray">
8388 <summary>
8389 An array start token.
8390 </summary>
8391 </member>
8392 <member name="F:Newtonsoft.Json.JsonToken.StartConstructor">
8393 <summary>
8394 A constructor start token.
8395 </summary>
8396 </member>
8397 <member name="F:Newtonsoft.Json.JsonToken.PropertyName">
8398 <summary>
8399 An object property name.
8400 </summary>
8401 </member>
8402 <member name="F:Newtonsoft.Json.JsonToken.Comment">
8403 <summary>
8404 A comment.
8405 </summary>
8406 </member>
8407 <member name="F:Newtonsoft.Json.JsonToken.Raw">
8408 <summary>
8409 Raw JSON.
8410 </summary>
8411 </member>
8412 <member name="F:Newtonsoft.Json.JsonToken.Integer">
8413 <summary>
8414 An integer.
8415 </summary>
8416 </member>
8417 <member name="F:Newtonsoft.Json.JsonToken.Float">
8418 <summary>
8419 A float.
8420 </summary>
8421 </member>
8422 <member name="F:Newtonsoft.Json.JsonToken.String">
8423 <summary>
8424 A string.
8425 </summary>
8426 </member>
8427 <member name="F:Newtonsoft.Json.JsonToken.Boolean">
8428 <summary>
8429 A boolean.
8430 </summary>
8431 </member>
8432 <member name="F:Newtonsoft.Json.JsonToken.Null">
8433 <summary>
8434 A null token.
8435 </summary>
8436 </member>
8437 <member name="F:Newtonsoft.Json.JsonToken.Undefined">
8438 <summary>
8439 An undefined token.
8440 </summary>
8441 </member>
8442 <member name="F:Newtonsoft.Json.JsonToken.EndObject">
8443 <summary>
8444 An object end token.
8445 </summary>
8446 </member>
8447 <member name="F:Newtonsoft.Json.JsonToken.EndArray">
8448 <summary>
8449 An array end token.
8450 </summary>
8451 </member>
8452 <member name="F:Newtonsoft.Json.JsonToken.EndConstructor">
8453 <summary>
8454 A constructor end token.
8455 </summary>
8456 </member>
8457 <member name="F:Newtonsoft.Json.JsonToken.Date">
8458 <summary>
8459 A Date.
8460 </summary>
8461 </member>
8462 <member name="F:Newtonsoft.Json.JsonToken.Bytes">
8463 <summary>
8464 Byte data.
8465 </summary>
8466 </member>
8467 <member name="T:Newtonsoft.Json.Utilities.StringBuffer">
8468 <summary>
8469 Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer.
8470 </summary>
8471 </member>
8472 <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})">
8473 <summary>
8474 Determines whether the collection is null or empty.
8475 </summary>
8476 <param name="collection">The collection.</param>
8477 <returns>
8478 <c>true</c> if the collection is null or empty; otherwise, <c>false</c>.
8479 </returns>
8480 </member>
8481 <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})">
8482 <summary>
8483 Adds the elements of the specified collection to the specified generic IList.
8484 </summary>
8485 <param name="initial">The list to add to.</param>
8486 <param name="collection">The collection of elements to add.</param>
8487 </member>
8488 <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})">
8489 <summary>
8490 Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer.
8491 </summary>
8492 <typeparam name="TSource">The type of the elements of source.</typeparam>
8493 <param name="list">A sequence in which to locate a value.</param>
8494 <param name="value">The object to locate in the sequence</param>
8495 <param name="comparer">An equality comparer to compare values.</param>
8496 <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns>
8497 </member>
8498 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)">
8499 <summary>
8500 Gets the type of the typed collection's items.
8501 </summary>
8502 <param name="type">The type.</param>
8503 <returns>The type of the typed collection's items.</returns>
8504 </member>
8505 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)">
8506 <summary>
8507 Gets the member's underlying type.
8508 </summary>
8509 <param name="member">The member.</param>
8510 <returns>The underlying type of the member.</returns>
8511 </member>
8512 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)">
8513 <summary>
8514 Determines whether the member is an indexed property.
8515 </summary>
8516 <param name="member">The member.</param>
8517 <returns>
8518 <c>true</c> if the member is an indexed property; otherwise, <c>false</c>.
8519 </returns>
8520 </member>
8521 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)">
8522 <summary>
8523 Determines whether the property is an indexed property.
8524 </summary>
8525 <param name="property">The property.</param>
8526 <returns>
8527 <c>true</c> if the property is an indexed property; otherwise, <c>false</c>.
8528 </returns>
8529 </member>
8530 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)">
8531 <summary>
8532 Gets the member's value on the object.
8533 </summary>
8534 <param name="member">The member.</param>
8535 <param name="target">The target object.</param>
8536 <returns>The member's value on the object.</returns>
8537 </member>
8538 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)">
8539 <summary>
8540 Sets the member's value on the target object.
8541 </summary>
8542 <param name="member">The member.</param>
8543 <param name="target">The target.</param>
8544 <param name="value">The value.</param>
8545 </member>
8546 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)">
8547 <summary>
8548 Determines whether the specified MemberInfo can be read.
8549 </summary>
8550 <param name="member">The MemberInfo to determine whether can be read.</param>
8551 /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param>
8552 <returns>
8553 <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>.
8554 </returns>
8555 </member>
8556 <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)">
8557 <summary>
8558 Determines whether the specified MemberInfo can be set.
8559 </summary>
8560 <param name="member">The MemberInfo to determine whether can be set.</param>
8561 <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param>
8562 <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param>
8563 <returns>
8564 <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>.
8565 </returns>
8566 </member>
8567 <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)">
8568 <summary>
8569 Determines whether the string is all white space. Empty string will return false.
8570 </summary>
8571 <param name="s">The string to test whether it is all white space.</param>
8572 <returns>
8573 <c>true</c> if the string is all white space; otherwise, <c>false</c>.
8574 </returns>
8575 </member>
8576 <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)">
8577 <summary>
8578 Nulls an empty string.
8579 </summary>
8580 <param name="s">The string.</param>
8581 <returns>Null if the string was null, otherwise the string unchanged.</returns>
8582 </member>
8583 <member name="T:Newtonsoft.Json.WriteState">
8584 <summary>
8585 Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>.
8586 </summary>
8587 </member>
8588 <member name="F:Newtonsoft.Json.WriteState.Error">
8589 <summary>
8590 An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state.
8591 You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state.
8592 Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown.
8593 </summary>
8594 </member>
8595 <member name="F:Newtonsoft.Json.WriteState.Closed">
8596 <summary>
8597 The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called.
8598 </summary>
8599 </member>
8600 <member name="F:Newtonsoft.Json.WriteState.Object">
8601 <summary>
8602 An object is being written.
8603 </summary>
8604 </member>
8605 <member name="F:Newtonsoft.Json.WriteState.Array">
8606 <summary>
8607 A array is being written.
8608 </summary>
8609 </member>
8610 <member name="F:Newtonsoft.Json.WriteState.Constructor">
8611 <summary>
8612 A constructor is being written.
8613 </summary>
8614 </member>
8615 <member name="F:Newtonsoft.Json.WriteState.Property">
8616 <summary>
8617 A property is being written.
8618 </summary>
8619 </member>
8620 <member name="F:Newtonsoft.Json.WriteState.Start">
8621 <summary>
8622 A write method has not been called.
8623 </summary>
8624 </member>
8625 </members>
8626</doc>
diff --git a/bin/OpenSim.exe.config b/bin/OpenSim.exe.config
index b01191e..f1bf8a0 100755
--- a/bin/OpenSim.exe.config
+++ b/bin/OpenSim.exe.config
@@ -39,7 +39,8 @@
39 <acceptOnMatch value="false"/> 39 <acceptOnMatch value="false"/>
40 </filter> 40 </filter>
41 <layout type="log4net.Layout.PatternLayout"> 41 <layout type="log4net.Layout.PatternLayout">
42 <conversionPattern value="%date %-5level (%thread) - %logger %message%newline" /> 42 <!-- <conversionPattern value="%date %-5level (%thread) - %logger %message%newline" /> -->
43 <conversionPattern value="%date %-5level %message%newline" />
43 </layout> 44 </layout>
44 </appender> 45 </appender>
45 46
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 0544f36..a9e368a 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -66,6 +66,9 @@
66 66
67 ;grid default private port 8003, not used in standalone 67 ;grid default private port 8003, not used in standalone
68 ;# {PrivatePort} {} {PrivatePort} {8003} "8003" 68 ;# {PrivatePort} {} {PrivatePort} {8003} "8003"
69 ; port to access private grid services.
70 ; grids that run all their regions should deny access to this port
71 ; from outside their networks, using firewalls
69 PrivatePort = "8003" 72 PrivatePort = "8003"
70 73
71[Startup] 74[Startup]
diff --git a/bin/RestSharp.dll b/bin/RestSharp.dll
new file mode 100644
index 0000000..ea01262
--- /dev/null
+++ b/bin/RestSharp.dll
Binary files differ
diff --git a/bin/RestSharp.xml b/bin/RestSharp.xml
new file mode 100644
index 0000000..27a71c7
--- /dev/null
+++ b/bin/RestSharp.xml
@@ -0,0 +1,3024 @@
1<?xml version="1.0"?>
2<doc>
3 <assembly>
4 <name>RestSharp</name>
5 </assembly>
6 <members>
7 <member name="T:RestSharp.NtlmAuthenticator">
8 <summary>
9 Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user
10 </summary>
11 </member>
12 <member name="M:RestSharp.NtlmAuthenticator.#ctor">
13 <summary>
14 Authenticate with the credentials of the currently logged in user
15 </summary>
16 </member>
17 <member name="M:RestSharp.NtlmAuthenticator.#ctor(System.String,System.String)">
18 <summary>
19 Authenticate by impersonation
20 </summary>
21 <param name="username"></param>
22 <param name="password"></param>
23 </member>
24 <member name="M:RestSharp.NtlmAuthenticator.#ctor(System.Net.ICredentials)">
25 <summary>
26 Authenticate by impersonation, using an existing <c>ICredentials</c> instance
27 </summary>
28 <param name="credentials"></param>
29 </member>
30 <member name="T:RestSharp.Authenticators.OAuth1Authenticator">
31 <seealso href="http://tools.ietf.org/html/rfc5849"/>
32 </member>
33 <member name="T:RestSharp.OAuth2Authenticator">
34 <summary>
35 Base class for OAuth 2 Authenticators.
36 </summary>
37 <remarks>
38 Since there are many ways to authenticate in OAuth2,
39 this is used as a base class to differentiate between
40 other authenticators.
41
42 Any other OAuth2 authenticators must derive from this
43 abstract class.
44 </remarks>
45 </member>
46 <member name="F:RestSharp.OAuth2Authenticator._accessToken">
47 <summary>
48 Access token to be used when authenticating.
49 </summary>
50 </member>
51 <member name="M:RestSharp.OAuth2Authenticator.#ctor(System.String)">
52 <summary>
53 Initializes a new instance of the <see cref="T:RestSharp.OAuth2Authenticator"/> class.
54 </summary>
55 <param name="accessToken">
56 The access token.
57 </param>
58 </member>
59 <member name="P:RestSharp.OAuth2Authenticator.AccessToken">
60 <summary>
61 Gets the access token.
62 </summary>
63 </member>
64 <member name="T:RestSharp.OAuth2UriQueryParameterAuthenticator">
65 <summary>
66 The OAuth 2 authenticator using URI query parameter.
67 </summary>
68 <remarks>
69 Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2
70 </remarks>
71 </member>
72 <member name="M:RestSharp.OAuth2UriQueryParameterAuthenticator.#ctor(System.String)">
73 <summary>
74 Initializes a new instance of the <see cref="T:RestSharp.OAuth2UriQueryParameterAuthenticator"/> class.
75 </summary>
76 <param name="accessToken">
77 The access token.
78 </param>
79 </member>
80 <member name="T:RestSharp.OAuth2AuthorizationRequestHeaderAuthenticator">
81 <summary>
82 The OAuth 2 authenticator using the authorization request header field.
83 </summary>
84 <remarks>
85 Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1
86 </remarks>
87 </member>
88 <member name="F:RestSharp.OAuth2AuthorizationRequestHeaderAuthenticator._authorizationValue">
89 <summary>
90 Stores the Authorization header value as "[tokenType] accessToken". used for performance.
91 </summary>
92 </member>
93 <member name="M:RestSharp.OAuth2AuthorizationRequestHeaderAuthenticator.#ctor(System.String)">
94 <summary>
95 Initializes a new instance of the <see cref="T:RestSharp.OAuth2AuthorizationRequestHeaderAuthenticator"/> class.
96 </summary>
97 <param name="accessToken">
98 The access token.
99 </param>
100 </member>
101 <member name="M:RestSharp.OAuth2AuthorizationRequestHeaderAuthenticator.#ctor(System.String,System.String)">
102 <summary>
103 Initializes a new instance of the <see cref="T:RestSharp.OAuth2AuthorizationRequestHeaderAuthenticator"/> class.
104 </summary>
105 <param name="accessToken">
106 The access token.
107 </param>
108 <param name="tokenType">
109 The token type.
110 </param>
111 </member>
112 <member name="F:RestSharp.Authenticators.OAuth.OAuthTools._encoding">
113 <summary>
114 All text parameters are UTF-8 encoded (per section 5.1).
115 </summary>
116 <seealso cref="!:http://www.hueniverse.com/hueniverse/2008/10/beginners-gui-1.html"/>
117 </member>
118 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.GetNonce">
119 <summary>
120 Generates a random 16-byte lowercase alphanumeric string.
121 </summary>
122 <seealso cref="!:http://oauth.net/core/1.0#nonce"/>
123 <returns></returns>
124 </member>
125 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.GetTimestamp">
126 <summary>
127 Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT"
128 </summary>
129 <seealso cref="!:http://oauth.net/core/1.0#nonce"/>
130 <returns></returns>
131 </member>
132 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.GetTimestamp(System.DateTime)">
133 <summary>
134 Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT"
135 </summary>
136 <seealso cref="!:http://oauth.net/core/1.0#nonce"/>
137 <param name="dateTime">A specified point in time.</param>
138 <returns></returns>
139 </member>
140 <member name="F:RestSharp.Authenticators.OAuth.OAuthTools.UriRfc3986CharsToEscape">
141 <summary>
142 The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986.
143 </summary>
144 <seealso cref="!:http://stackoverflow.com/questions/846487/how-to-get-uri-escapedatastring-to-comply-with-rfc-3986"/>
145 </member>
146 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.UrlEncodeRelaxed(System.String)">
147 <summary>
148 URL encodes a string based on section 5.1 of the OAuth spec.
149 Namely, percent encoding with [RFC3986], avoiding unreserved characters,
150 upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs.
151 </summary>
152 <param name="value">The value to escape.</param>
153 <returns>The escaped value.</returns>
154 <remarks>
155 The <see cref="M:System.Uri.EscapeDataString(System.String)"/> method is <i>supposed</i> to take on
156 RFC 3986 behavior if certain elements are present in a .config file. Even if this
157 actually worked (which in my experiments it <i>doesn't</i>), we can't rely on every
158 host actually having this configuration element present.
159 </remarks>
160 <seealso cref="!:http://oauth.net/core/1.0#encoding_parameters"/>
161 <seealso cref="!:http://stackoverflow.com/questions/846487/how-to-get-uri-escapedatastring-to-comply-with-rfc-3986"/>
162 </member>
163 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.UrlEncodeStrict(System.String)">
164 <summary>
165 URL encodes a string based on section 5.1 of the OAuth spec.
166 Namely, percent encoding with [RFC3986], avoiding unreserved characters,
167 upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs.
168 </summary>
169 <param name="value"></param>
170 <seealso cref="!:http://oauth.net/core/1.0#encoding_parameters"/>
171 </member>
172 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.NormalizeRequestParameters(RestSharp.Authenticators.OAuth.WebParameterCollection)">
173 <summary>
174 Sorts a collection of key-value pairs by name, and then value if equal,
175 concatenating them into a single string. This string should be encoded
176 prior to, or after normalization is run.
177 </summary>
178 <seealso cref="!:http://oauth.net/core/1.0#rfc.section.9.1.1"/>
179 <param name="parameters"></param>
180 <returns></returns>
181 </member>
182 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.SortParametersExcludingSignature(RestSharp.Authenticators.OAuth.WebParameterCollection)">
183 <summary>
184 Sorts a <see cref="T:RestSharp.Authenticators.OAuth.WebParameterCollection"/> by name, and then value if equal.
185 </summary>
186 <param name="parameters">A collection of parameters to sort</param>
187 <returns>A sorted parameter collection</returns>
188 </member>
189 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.ConstructRequestUrl(System.Uri)">
190 <summary>
191 Creates a request URL suitable for making OAuth requests.
192 Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively.
193 Resulting URLs must be lower case.
194 </summary>
195 <seealso cref="!:http://oauth.net/core/1.0#rfc.section.9.1.2"/>
196 <param name="url">The original request URL</param>
197 <returns></returns>
198 </member>
199 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.ConcatenateRequestElements(System.String,System.String,RestSharp.Authenticators.OAuth.WebParameterCollection)">
200 <summary>
201 Creates a request elements concatentation value to send with a request.
202 This is also known as the signature base.
203 </summary>
204 <seealso cref="!:http://oauth.net/core/1.0#rfc.section.9.1.3"/>
205 <seealso cref="!:http://oauth.net/core/1.0#sig_base_example"/>
206 <param name="method">The request's HTTP method type</param>
207 <param name="url">The request URL</param>
208 <param name="parameters">The request's parameters</param>
209 <returns>A signature base string</returns>
210 </member>
211 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.GetSignature(RestSharp.Authenticators.OAuth.OAuthSignatureMethod,System.String,System.String)">
212 <summary>
213 Creates a signature value given a signature base and the consumer secret.
214 This method is used when the token secret is currently unknown.
215 </summary>
216 <seealso cref="!:http://oauth.net/core/1.0#rfc.section.9.2"/>
217 <param name="signatureMethod">The hashing method</param>
218 <param name="signatureBase">The signature base</param>
219 <param name="consumerSecret">The consumer key</param>
220 <returns></returns>
221 </member>
222 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.GetSignature(RestSharp.Authenticators.OAuth.OAuthSignatureMethod,RestSharp.Authenticators.OAuth.OAuthSignatureTreatment,System.String,System.String)">
223 <summary>
224 Creates a signature value given a signature base and the consumer secret.
225 This method is used when the token secret is currently unknown.
226 </summary>
227 <seealso cref="!:http://oauth.net/core/1.0#rfc.section.9.2"/>
228 <param name="signatureMethod">The hashing method</param>
229 <param name="signatureTreatment">The treatment to use on a signature value</param>
230 <param name="signatureBase">The signature base</param>
231 <param name="consumerSecret">The consumer key</param>
232 <returns></returns>
233 </member>
234 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.GetSignature(RestSharp.Authenticators.OAuth.OAuthSignatureMethod,System.String,System.String,System.String)">
235 <summary>
236 Creates a signature value given a signature base and the consumer secret and a known token secret.
237 </summary>
238 <seealso cref="!:http://oauth.net/core/1.0#rfc.section.9.2"/>
239 <param name="signatureMethod">The hashing method</param>
240 <param name="signatureBase">The signature base</param>
241 <param name="consumerSecret">The consumer secret</param>
242 <param name="tokenSecret">The token secret</param>
243 <returns></returns>
244 </member>
245 <member name="M:RestSharp.Authenticators.OAuth.OAuthTools.GetSignature(RestSharp.Authenticators.OAuth.OAuthSignatureMethod,RestSharp.Authenticators.OAuth.OAuthSignatureTreatment,System.String,System.String,System.String)">
246 <summary>
247 Creates a signature value given a signature base and the consumer secret and a known token secret.
248 </summary>
249 <seealso cref="!:http://oauth.net/core/1.0#rfc.section.9.2"/>
250 <param name="signatureMethod">The hashing method</param>
251 <param name="signatureTreatment">The treatment to use on a signature value</param>
252 <param name="signatureBase">The signature base</param>
253 <param name="consumerSecret">The consumer secret</param>
254 <param name="tokenSecret">The token secret</param>
255 <returns></returns>
256 </member>
257 <member name="T:RestSharp.Authenticators.OAuth.OAuthWorkflow">
258 <summary>
259 A class to encapsulate OAuth authentication flow.
260 <seealso cref="!:http://oauth.net/core/1.0#anchor9"/>
261 </summary>
262 </member>
263 <member name="M:RestSharp.Authenticators.OAuth.OAuthWorkflow.BuildRequestTokenInfo(System.String)">
264 <summary>
265 Generates a <see cref="T:RestSharp.Authenticators.OAuth.OAuthWebQueryInfo"/> instance to pass to an
266 <see cref="T:RestSharp.IAuthenticator"/> for the purpose of requesting an
267 unauthorized request token.
268 </summary>
269 <param name="method">The HTTP method for the intended request</param>
270 <seealso cref="!:http://oauth.net/core/1.0#anchor9"/>
271 <returns></returns>
272 </member>
273 <member name="M:RestSharp.Authenticators.OAuth.OAuthWorkflow.BuildRequestTokenInfo(System.String,RestSharp.Authenticators.OAuth.WebParameterCollection)">
274 <summary>
275 Generates a <see cref="T:RestSharp.Authenticators.OAuth.OAuthWebQueryInfo"/> instance to pass to an
276 <see cref="T:RestSharp.IAuthenticator"/> for the purpose of requesting an
277 unauthorized request token.
278 </summary>
279 <param name="method">The HTTP method for the intended request</param>
280 <param name="parameters">Any existing, non-OAuth query parameters desired in the request</param>
281 <seealso cref="!:http://oauth.net/core/1.0#anchor9"/>
282 <returns></returns>
283 </member>
284 <member name="M:RestSharp.Authenticators.OAuth.OAuthWorkflow.BuildAccessTokenInfo(System.String)">
285 <summary>
286 Generates a <see cref="T:RestSharp.Authenticators.OAuth.OAuthWebQueryInfo"/> instance to pass to an
287 <see cref="T:RestSharp.IAuthenticator"/> for the purpose of exchanging a request token
288 for an access token authorized by the user at the Service Provider site.
289 </summary>
290 <param name="method">The HTTP method for the intended request</param>
291 <seealso cref="!:http://oauth.net/core/1.0#anchor9"/>
292 </member>
293 <member name="M:RestSharp.Authenticators.OAuth.OAuthWorkflow.BuildAccessTokenInfo(System.String,RestSharp.Authenticators.OAuth.WebParameterCollection)">
294 <summary>
295 Generates a <see cref="T:RestSharp.Authenticators.OAuth.OAuthWebQueryInfo"/> instance to pass to an
296 <see cref="T:RestSharp.IAuthenticator"/> for the purpose of exchanging a request token
297 for an access token authorized by the user at the Service Provider site.
298 </summary>
299 <param name="method">The HTTP method for the intended request</param>
300 <seealso cref="!:http://oauth.net/core/1.0#anchor9"/>
301 <param name="parameters">Any existing, non-OAuth query parameters desired in the request</param>
302 </member>
303 <member name="M:RestSharp.Authenticators.OAuth.OAuthWorkflow.BuildClientAuthAccessTokenInfo(System.String,RestSharp.Authenticators.OAuth.WebParameterCollection)">
304 <summary>
305 Generates a <see cref="T:RestSharp.Authenticators.OAuth.OAuthWebQueryInfo"/> instance to pass to an
306 <see cref="T:RestSharp.IAuthenticator"/> for the purpose of exchanging user credentials
307 for an access token authorized by the user at the Service Provider site.
308 </summary>
309 <param name="method">The HTTP method for the intended request</param>
310 <seealso cref="!:http://tools.ietf.org/html/draft-dehora-farrell-oauth-accesstoken-creds-00#section-4"/>
311 <param name="parameters">Any existing, non-OAuth query parameters desired in the request</param>
312 </member>
313 <member name="P:RestSharp.Authenticators.OAuth.OAuthWorkflow.RequestTokenUrl">
314 <seealso cref="!:http://oauth.net/core/1.0#request_urls"/>
315 </member>
316 <member name="P:RestSharp.Authenticators.OAuth.OAuthWorkflow.AccessTokenUrl">
317 <seealso cref="!:http://oauth.net/core/1.0#request_urls"/>
318 </member>
319 <member name="P:RestSharp.Authenticators.OAuth.OAuthWorkflow.AuthorizationUrl">
320 <seealso cref="!:http://oauth.net/core/1.0#request_urls"/>
321 </member>
322 <member name="T:RestSharp.Deserializers.DeserializeAsAttribute">
323 <summary>
324 Allows control how class and property names and values are deserialized by XmlAttributeDeserializer
325 </summary>
326 </member>
327 <member name="P:RestSharp.Deserializers.DeserializeAsAttribute.Name">
328 <summary>
329 The name to use for the serialized element
330 </summary>
331 </member>
332 <member name="P:RestSharp.Deserializers.DeserializeAsAttribute.Attribute">
333 <summary>
334 Sets if the property to Deserialize is an Attribute or Element (Default: false)
335 </summary>
336 </member>
337 <member name="T:RestSharp.Deserializers.DotNetXmlDeserializer">
338 <summary>
339 Wrapper for System.Xml.Serialization.XmlSerializer.
340 </summary>
341 </member>
342 <member name="T:RestSharp.ParameterType">
343 <summary>
344 Types of parameters that can be added to requests
345 </summary>
346 </member>
347 <member name="T:RestSharp.DataFormat">
348 <summary>
349 Data formats
350 </summary>
351 </member>
352 <member name="T:RestSharp.Method">
353 <summary>
354 HTTP method to use when making requests
355 </summary>
356 </member>
357 <member name="T:RestSharp.DateFormat">
358 <summary>
359 Format strings for commonly-used date formats
360 </summary>
361 </member>
362 <member name="F:RestSharp.DateFormat.Iso8601">
363 <summary>
364 .NET format string for ISO 8601 date format
365 </summary>
366 </member>
367 <member name="F:RestSharp.DateFormat.RoundTrip">
368 <summary>
369 .NET format string for roundtrip date format
370 </summary>
371 </member>
372 <member name="T:RestSharp.ResponseStatus">
373 <summary>
374 Status for responses (surprised?)
375 </summary>
376 </member>
377 <member name="T:RestSharp.Extensions.MiscExtensions">
378 <summary>
379 Extension method overload!
380 </summary>
381 </member>
382 <member name="M:RestSharp.Extensions.MiscExtensions.SaveAs(System.Byte[],System.String)">
383 <summary>
384 Save a byte array to a file
385 </summary>
386 <param name="input">Bytes to save</param>
387 <param name="path">Full path to save file to</param>
388 </member>
389 <member name="M:RestSharp.Extensions.MiscExtensions.ReadAsBytes(System.IO.Stream)">
390 <summary>
391 Read a stream into a byte array
392 </summary>
393 <param name="input">Stream to read</param>
394 <returns>byte[]</returns>
395 </member>
396 <member name="M:RestSharp.Extensions.MiscExtensions.CopyTo(System.IO.Stream,System.IO.Stream)">
397 <summary>
398 Copies bytes from one stream to another
399 </summary>
400 <param name="input">The input stream.</param>
401 <param name="output">The output stream.</param>
402 </member>
403 <member name="M:RestSharp.Extensions.MiscExtensions.AsString(System.Byte[])">
404 <summary>
405 Converts a byte array to a string, using its byte order mark to convert it to the right encoding.
406 http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx
407 </summary>
408 <param name="buffer">An array of bytes to convert</param>
409 <returns>The byte as a string.</returns>
410 </member>
411 <member name="M:RestSharp.Contrib.HttpUtility.HtmlDecode(System.String)">
412 <summary>
413 Decodes an HTML-encoded string and returns the decoded string.
414 </summary>
415 <param name="s">The HTML string to decode. </param>
416 <returns>The decoded text.</returns>
417 </member>
418 <member name="M:RestSharp.Contrib.HttpUtility.HtmlDecode(System.String,System.IO.TextWriter)">
419 <summary>
420 Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream.
421 </summary>
422 <param name="s">The HTML string to decode</param>
423 <param name="output">The TextWriter output stream containing the decoded string. </param>
424 </member>
425 <member name="M:RestSharp.Contrib.HttpUtility.HtmlEncode(System.String,System.IO.TextWriter)">
426 <summary>
427 HTML-encodes a string and sends the resulting output to a TextWriter output stream.
428 </summary>
429 <param name="s">The string to encode. </param>
430 <param name="output">The TextWriter output stream containing the encoded string. </param>
431 </member>
432 <member name="T:RestSharp.Extensions.ReflectionExtensions">
433 <summary>
434 Reflection extensions
435 </summary>
436 </member>
437 <member name="M:RestSharp.Extensions.ReflectionExtensions.GetAttribute``1(System.Reflection.MemberInfo)">
438 <summary>
439 Retrieve an attribute from a member (property)
440 </summary>
441 <typeparam name="T">Type of attribute to retrieve</typeparam>
442 <param name="prop">Member to retrieve attribute from</param>
443 <returns></returns>
444 </member>
445 <member name="M:RestSharp.Extensions.ReflectionExtensions.GetAttribute``1(System.Type)">
446 <summary>
447 Retrieve an attribute from a type
448 </summary>
449 <typeparam name="T">Type of attribute to retrieve</typeparam>
450 <param name="type">Type to retrieve attribute from</param>
451 <returns></returns>
452 </member>
453 <member name="M:RestSharp.Extensions.ReflectionExtensions.IsSubclassOfRawGeneric(System.Type,System.Type)">
454 <summary>
455 Checks a type to see if it derives from a raw generic (e.g. List[[]])
456 </summary>
457 <param name="toCheck"></param>
458 <param name="generic"></param>
459 <returns></returns>
460 </member>
461 <member name="M:RestSharp.Extensions.ReflectionExtensions.FindEnumValue(System.Type,System.String,System.Globalization.CultureInfo)">
462 <summary>
463 Find a value from a System.Enum by trying several possible variants
464 of the string value of the enum.
465 </summary>
466 <param name="type">Type of enum</param>
467 <param name="value">Value for which to search</param>
468 <param name="culture">The culture used to calculate the name variants</param>
469 <returns></returns>
470 </member>
471 <member name="M:RestSharp.Extensions.ResponseStatusExtensions.ToWebException(RestSharp.ResponseStatus)">
472 <summary>
473 Convert a <see cref="T:RestSharp.ResponseStatus"/> to a <see cref="T:System.Net.WebException"/> instance.
474 </summary>
475 <param name="responseStatus">The response status.</param>
476 <returns></returns>
477 <exception cref="T:System.ArgumentOutOfRangeException">responseStatus</exception>
478 </member>
479 <member name="M:RestSharp.Extensions.StringExtensions.UrlEncode(System.String)">
480 <summary>
481 Uses Uri.EscapeDataString() based on recommendations on MSDN
482 http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx
483 </summary>
484 </member>
485 <member name="M:RestSharp.Extensions.StringExtensions.HasValue(System.String)">
486 <summary>
487 Check that a string is not null or empty
488 </summary>
489 <param name="input">String to check</param>
490 <returns>bool</returns>
491 </member>
492 <member name="M:RestSharp.Extensions.StringExtensions.RemoveUnderscoresAndDashes(System.String)">
493 <summary>
494 Remove underscores from a string
495 </summary>
496 <param name="input">String to process</param>
497 <returns>string</returns>
498 </member>
499 <member name="M:RestSharp.Extensions.StringExtensions.ParseJsonDate(System.String,System.Globalization.CultureInfo)">
500 <summary>
501 Parses most common JSON date formats
502 </summary>
503 <param name="input">JSON value to parse</param>
504 <param name="culture"></param>
505 <returns>DateTime</returns>
506 </member>
507 <member name="M:RestSharp.Extensions.StringExtensions.RemoveSurroundingQuotes(System.String)">
508 <summary>
509 Remove leading and trailing " from a string
510 </summary>
511 <param name="input">String to parse</param>
512 <returns>String</returns>
513 </member>
514 <member name="M:RestSharp.Extensions.StringExtensions.Matches(System.String,System.String)">
515 <summary>
516 Checks a string to see if it matches a regex
517 </summary>
518 <param name="input">String to check</param>
519 <param name="pattern">Pattern to match</param>
520 <returns>bool</returns>
521 </member>
522 <member name="M:RestSharp.Extensions.StringExtensions.ToPascalCase(System.String,System.Globalization.CultureInfo)">
523 <summary>
524 Converts a string to pascal case
525 </summary>
526 <param name="lowercaseAndUnderscoredWord">String to convert</param>
527 <param name="culture"></param>
528 <returns>string</returns>
529 </member>
530 <member name="M:RestSharp.Extensions.StringExtensions.ToPascalCase(System.String,System.Boolean,System.Globalization.CultureInfo)">
531 <summary>
532 Converts a string to pascal case with the option to remove underscores
533 </summary>
534 <param name="text">String to convert</param>
535 <param name="removeUnderscores">Option to remove underscores</param>
536 <param name="culture"></param>
537 <returns></returns>
538 </member>
539 <member name="M:RestSharp.Extensions.StringExtensions.ToCamelCase(System.String,System.Globalization.CultureInfo)">
540 <summary>
541 Converts a string to camel case
542 </summary>
543 <param name="lowercaseAndUnderscoredWord">String to convert</param>
544 <param name="culture"></param>
545 <returns>String</returns>
546 </member>
547 <member name="M:RestSharp.Extensions.StringExtensions.MakeInitialLowerCase(System.String)">
548 <summary>
549 Convert the first letter of a string to lower case
550 </summary>
551 <param name="word">String to convert</param>
552 <returns>string</returns>
553 </member>
554 <member name="M:RestSharp.Extensions.StringExtensions.IsUpperCase(System.String)">
555 <summary>
556 Checks to see if a string is all uppper case
557 </summary>
558 <param name="inputString">String to check</param>
559 <returns>bool</returns>
560 </member>
561 <member name="M:RestSharp.Extensions.StringExtensions.AddUnderscores(System.String)">
562 <summary>
563 Add underscores to a pascal-cased string
564 </summary>
565 <param name="pascalCasedWord">String to convert</param>
566 <returns>string</returns>
567 </member>
568 <member name="M:RestSharp.Extensions.StringExtensions.AddDashes(System.String)">
569 <summary>
570 Add dashes to a pascal-cased string
571 </summary>
572 <param name="pascalCasedWord">String to convert</param>
573 <returns>string</returns>
574 </member>
575 <member name="M:RestSharp.Extensions.StringExtensions.AddUnderscorePrefix(System.String)">
576 <summary>
577 Add an undescore prefix to a pascasl-cased string
578 </summary>
579 <param name="pascalCasedWord"></param>
580 <returns></returns>
581 </member>
582 <member name="M:RestSharp.Extensions.StringExtensions.AddSpaces(System.String)">
583 <summary>
584 Add spaces to a pascal-cased string
585 </summary>
586 <param name="pascalCasedWord">String to convert</param>
587 <returns>string</returns>
588 </member>
589 <member name="M:RestSharp.Extensions.StringExtensions.GetNameVariants(System.String,System.Globalization.CultureInfo)">
590 <summary>
591 Return possible variants of a name for name matching.
592 </summary>
593 <param name="name">String to convert</param>
594 <param name="culture">The culture to use for conversion</param>
595 <returns>IEnumerable&lt;string&gt;</returns>
596 </member>
597 <member name="T:RestSharp.Extensions.XmlExtensions">
598 <summary>
599 XML Extension Methods
600 </summary>
601 </member>
602 <member name="M:RestSharp.Extensions.XmlExtensions.AsNamespaced(System.String,System.String)">
603 <summary>
604 Returns the name of an element with the namespace if specified
605 </summary>
606 <param name="name">Element name</param>
607 <param name="namespace">XML Namespace</param>
608 <returns></returns>
609 </member>
610 <member name="T:RestSharp.FileParameter">
611 <summary>
612 Container for files to be uploaded with requests
613 </summary>
614 </member>
615 <member name="M:RestSharp.FileParameter.Create(System.String,System.Byte[],System.String,System.String)">
616 <summary>
617 Creates a file parameter from an array of bytes.
618 </summary>
619 <param name="name">The parameter name to use in the request.</param>
620 <param name="data">The data to use as the file's contents.</param>
621 <param name="filename">The filename to use in the request.</param>
622 <param name="contentType">The content type to use in the request.</param>
623 <returns>The <see cref="T:RestSharp.FileParameter"/></returns>
624 </member>
625 <member name="M:RestSharp.FileParameter.Create(System.String,System.Byte[],System.String)">
626 <summary>
627 Creates a file parameter from an array of bytes.
628 </summary>
629 <param name="name">The parameter name to use in the request.</param>
630 <param name="data">The data to use as the file's contents.</param>
631 <param name="filename">The filename to use in the request.</param>
632 <returns>The <see cref="T:RestSharp.FileParameter"/> using the default content type.</returns>
633 </member>
634 <member name="P:RestSharp.FileParameter.ContentLength">
635 <summary>
636 The length of data to be sent
637 </summary>
638 </member>
639 <member name="P:RestSharp.FileParameter.Writer">
640 <summary>
641 Provides raw data for file
642 </summary>
643 </member>
644 <member name="P:RestSharp.FileParameter.FileName">
645 <summary>
646 Name of the file to use when uploading
647 </summary>
648 </member>
649 <member name="P:RestSharp.FileParameter.ContentType">
650 <summary>
651 MIME content type of file
652 </summary>
653 </member>
654 <member name="P:RestSharp.FileParameter.Name">
655 <summary>
656 Name of the parameter
657 </summary>
658 </member>
659 <member name="T:RestSharp.Http">
660 <summary>
661 HttpWebRequest wrapper (async methods)
662 </summary>
663 <summary>
664 HttpWebRequest wrapper
665 </summary>
666 <summary>
667 HttpWebRequest wrapper (sync methods)
668 </summary>
669 </member>
670 <member name="P:RestSharp.IHttp.AlwaysMultipartFormData">
671 <summary>
672 Always send a multipart/form-data request - even when no Files are present.
673 </summary>
674 </member>
675 <member name="P:RestSharp.IHttp.RequestBodyBytes">
676 <summary>
677 An alternative to RequestBody, for when the caller already has the byte array.
678 </summary>
679 </member>
680 <member name="M:RestSharp.Http.AsPostAsync(System.Action{RestSharp.HttpResponse},System.String)">
681 <summary>
682 Execute an async POST-style request with the specified HTTP Method.
683 </summary>
684 <param name="action"></param>
685 <param name="httpMethod">The HTTP method to execute.</param>
686 <returns></returns>
687 </member>
688 <member name="M:RestSharp.Http.AsGetAsync(System.Action{RestSharp.HttpResponse},System.String)">
689 <summary>
690 Execute an async GET-style request with the specified HTTP Method.
691 </summary>
692 <param name="action"></param>
693 <param name="httpMethod">The HTTP method to execute.</param>
694 <returns></returns>
695 </member>
696 <member name="M:RestSharp.Http.Create">
697 <summary>
698 Creates an IHttp
699 </summary>
700 <returns></returns>
701 </member>
702 <member name="M:RestSharp.Http.#ctor">
703 <summary>
704 Default constructor
705 </summary>
706 </member>
707 <member name="M:RestSharp.Http.Post">
708 <summary>
709 Execute a POST request
710 </summary>
711 </member>
712 <member name="M:RestSharp.Http.Put">
713 <summary>
714 Execute a PUT request
715 </summary>
716 </member>
717 <member name="M:RestSharp.Http.Get">
718 <summary>
719 Execute a GET request
720 </summary>
721 </member>
722 <member name="M:RestSharp.Http.Head">
723 <summary>
724 Execute a HEAD request
725 </summary>
726 </member>
727 <member name="M:RestSharp.Http.Options">
728 <summary>
729 Execute an OPTIONS request
730 </summary>
731 </member>
732 <member name="M:RestSharp.Http.Delete">
733 <summary>
734 Execute a DELETE request
735 </summary>
736 </member>
737 <member name="M:RestSharp.Http.Patch">
738 <summary>
739 Execute a PATCH request
740 </summary>
741 </member>
742 <member name="M:RestSharp.Http.Merge">
743 <summary>
744 Execute a MERGE request
745 </summary>
746 </member>
747 <member name="M:RestSharp.Http.AsGet(System.String)">
748 <summary>
749 Execute a GET-style request with the specified HTTP Method.
750 </summary>
751 <param name="httpMethod">The HTTP method to execute.</param>
752 <returns></returns>
753 </member>
754 <member name="M:RestSharp.Http.AsPost(System.String)">
755 <summary>
756 Execute a POST-style request with the specified HTTP Method.
757 </summary>
758 <param name="httpMethod">The HTTP method to execute.</param>
759 <returns></returns>
760 </member>
761 <member name="P:RestSharp.Http.HasParameters">
762 <summary>
763 True if this HTTP request has any HTTP parameters
764 </summary>
765 </member>
766 <member name="P:RestSharp.Http.HasCookies">
767 <summary>
768 True if this HTTP request has any HTTP cookies
769 </summary>
770 </member>
771 <member name="P:RestSharp.Http.HasBody">
772 <summary>
773 True if a request body has been specified
774 </summary>
775 </member>
776 <member name="P:RestSharp.Http.HasFiles">
777 <summary>
778 True if files have been set to be uploaded
779 </summary>
780 </member>
781 <member name="P:RestSharp.Http.AlwaysMultipartFormData">
782 <summary>
783 Always send a multipart/form-data request - even when no Files are present.
784 </summary>
785 </member>
786 <member name="P:RestSharp.Http.UserAgent">
787 <summary>
788 UserAgent to be sent with request
789 </summary>
790 </member>
791 <member name="P:RestSharp.Http.Timeout">
792 <summary>
793 Timeout in milliseconds to be used for the request
794 </summary>
795 </member>
796 <member name="P:RestSharp.Http.ReadWriteTimeout">
797 <summary>
798 The number of milliseconds before the writing or reading times out.
799 </summary>
800 </member>
801 <member name="P:RestSharp.Http.Credentials">
802 <summary>
803 System.Net.ICredentials to be sent with request
804 </summary>
805 </member>
806 <member name="P:RestSharp.Http.CookieContainer">
807 <summary>
808 The System.Net.CookieContainer to be used for the request
809 </summary>
810 </member>
811 <member name="P:RestSharp.Http.ResponseWriter">
812 <summary>
813 The method to use to write the response instead of reading into RawBytes
814 </summary>
815 </member>
816 <member name="P:RestSharp.Http.Files">
817 <summary>
818 Collection of files to be sent with request
819 </summary>
820 </member>
821 <member name="P:RestSharp.Http.FollowRedirects">
822 <summary>
823 Whether or not HTTP 3xx response redirects should be automatically followed
824 </summary>
825 </member>
826 <member name="P:RestSharp.Http.ClientCertificates">
827 <summary>
828 X509CertificateCollection to be sent with request
829 </summary>
830 </member>
831 <member name="P:RestSharp.Http.MaxRedirects">
832 <summary>
833 Maximum number of automatic redirects to follow if FollowRedirects is true
834 </summary>
835 </member>
836 <member name="P:RestSharp.Http.UseDefaultCredentials">
837 <summary>
838 Determine whether or not the "default credentials" (e.g. the user account under which the current process is running)
839 will be sent along to the server.
840 </summary>
841 </member>
842 <member name="P:RestSharp.Http.Headers">
843 <summary>
844 HTTP headers to be sent with request
845 </summary>
846 </member>
847 <member name="P:RestSharp.Http.Parameters">
848 <summary>
849 HTTP parameters (QueryString or Form values) to be sent with request
850 </summary>
851 </member>
852 <member name="P:RestSharp.Http.Cookies">
853 <summary>
854 HTTP cookies to be sent with request
855 </summary>
856 </member>
857 <member name="P:RestSharp.Http.RequestBody">
858 <summary>
859 Request body to be sent with request
860 </summary>
861 </member>
862 <member name="P:RestSharp.Http.RequestContentType">
863 <summary>
864 Content type of the request body.
865 </summary>
866 </member>
867 <member name="P:RestSharp.Http.RequestBodyBytes">
868 <summary>
869 An alternative to RequestBody, for when the caller already has the byte array.
870 </summary>
871 </member>
872 <member name="P:RestSharp.Http.Url">
873 <summary>
874 URL to call for this request
875 </summary>
876 </member>
877 <member name="P:RestSharp.Http.PreAuthenticate">
878 <summary>
879 Flag to send authorisation header with the HttpWebRequest
880 </summary>
881 </member>
882 <member name="P:RestSharp.Http.Proxy">
883 <summary>
884 Proxy info to be sent with request
885 </summary>
886 </member>
887 <member name="T:RestSharp.HttpCookie">
888 <summary>
889 Representation of an HTTP cookie
890 </summary>
891 </member>
892 <member name="P:RestSharp.HttpCookie.Comment">
893 <summary>
894 Comment of the cookie
895 </summary>
896 </member>
897 <member name="P:RestSharp.HttpCookie.CommentUri">
898 <summary>
899 Comment of the cookie
900 </summary>
901 </member>
902 <member name="P:RestSharp.HttpCookie.Discard">
903 <summary>
904 Indicates whether the cookie should be discarded at the end of the session
905 </summary>
906 </member>
907 <member name="P:RestSharp.HttpCookie.Domain">
908 <summary>
909 Domain of the cookie
910 </summary>
911 </member>
912 <member name="P:RestSharp.HttpCookie.Expired">
913 <summary>
914 Indicates whether the cookie is expired
915 </summary>
916 </member>
917 <member name="P:RestSharp.HttpCookie.Expires">
918 <summary>
919 Date and time that the cookie expires
920 </summary>
921 </member>
922 <member name="P:RestSharp.HttpCookie.HttpOnly">
923 <summary>
924 Indicates that this cookie should only be accessed by the server
925 </summary>
926 </member>
927 <member name="P:RestSharp.HttpCookie.Name">
928 <summary>
929 Name of the cookie
930 </summary>
931 </member>
932 <member name="P:RestSharp.HttpCookie.Path">
933 <summary>
934 Path of the cookie
935 </summary>
936 </member>
937 <member name="P:RestSharp.HttpCookie.Port">
938 <summary>
939 Port of the cookie
940 </summary>
941 </member>
942 <member name="P:RestSharp.HttpCookie.Secure">
943 <summary>
944 Indicates that the cookie should only be sent over secure channels
945 </summary>
946 </member>
947 <member name="P:RestSharp.HttpCookie.TimeStamp">
948 <summary>
949 Date and time the cookie was created
950 </summary>
951 </member>
952 <member name="P:RestSharp.HttpCookie.Value">
953 <summary>
954 Value of the cookie
955 </summary>
956 </member>
957 <member name="P:RestSharp.HttpCookie.Version">
958 <summary>
959 Version of the cookie
960 </summary>
961 </member>
962 <member name="T:RestSharp.HttpFile">
963 <summary>
964 Container for HTTP file
965 </summary>
966 </member>
967 <member name="P:RestSharp.HttpFile.ContentLength">
968 <summary>
969 The length of data to be sent
970 </summary>
971 </member>
972 <member name="P:RestSharp.HttpFile.Writer">
973 <summary>
974 Provides raw data for file
975 </summary>
976 </member>
977 <member name="P:RestSharp.HttpFile.FileName">
978 <summary>
979 Name of the file to use when uploading
980 </summary>
981 </member>
982 <member name="P:RestSharp.HttpFile.ContentType">
983 <summary>
984 MIME content type of file
985 </summary>
986 </member>
987 <member name="P:RestSharp.HttpFile.Name">
988 <summary>
989 Name of the parameter
990 </summary>
991 </member>
992 <member name="T:RestSharp.HttpHeader">
993 <summary>
994 Representation of an HTTP header
995 </summary>
996 </member>
997 <member name="P:RestSharp.HttpHeader.Name">
998 <summary>
999 Name of the header
1000 </summary>
1001 </member>
1002 <member name="P:RestSharp.HttpHeader.Value">
1003 <summary>
1004 Value of the header
1005 </summary>
1006 </member>
1007 <member name="T:RestSharp.HttpParameter">
1008 <summary>
1009 Representation of an HTTP parameter (QueryString or Form value)
1010 </summary>
1011 </member>
1012 <member name="P:RestSharp.HttpParameter.Name">
1013 <summary>
1014 Name of the parameter
1015 </summary>
1016 </member>
1017 <member name="P:RestSharp.HttpParameter.Value">
1018 <summary>
1019 Value of the parameter
1020 </summary>
1021 </member>
1022 <member name="T:RestSharp.HttpResponse">
1023 <summary>
1024 HTTP response data
1025 </summary>
1026 </member>
1027 <member name="T:RestSharp.IHttpResponse">
1028 <summary>
1029 HTTP response data
1030 </summary>
1031 </member>
1032 <member name="P:RestSharp.IHttpResponse.ContentType">
1033 <summary>
1034 MIME content type of response
1035 </summary>
1036 </member>
1037 <member name="P:RestSharp.IHttpResponse.ContentLength">
1038 <summary>
1039 Length in bytes of the response content
1040 </summary>
1041 </member>
1042 <member name="P:RestSharp.IHttpResponse.ContentEncoding">
1043 <summary>
1044 Encoding of the response content
1045 </summary>
1046 </member>
1047 <member name="P:RestSharp.IHttpResponse.Content">
1048 <summary>
1049 String representation of response content
1050 </summary>
1051 </member>
1052 <member name="P:RestSharp.IHttpResponse.StatusCode">
1053 <summary>
1054 HTTP response status code
1055 </summary>
1056 </member>
1057 <member name="P:RestSharp.IHttpResponse.StatusDescription">
1058 <summary>
1059 Description of HTTP status returned
1060 </summary>
1061 </member>
1062 <member name="P:RestSharp.IHttpResponse.RawBytes">
1063 <summary>
1064 Response content
1065 </summary>
1066 </member>
1067 <member name="P:RestSharp.IHttpResponse.ResponseUri">
1068 <summary>
1069 The URL that actually responded to the content (different from request if redirected)
1070 </summary>
1071 </member>
1072 <member name="P:RestSharp.IHttpResponse.Server">
1073 <summary>
1074 HttpWebResponse.Server
1075 </summary>
1076 </member>
1077 <member name="P:RestSharp.IHttpResponse.Headers">
1078 <summary>
1079 Headers returned by server with the response
1080 </summary>
1081 </member>
1082 <member name="P:RestSharp.IHttpResponse.Cookies">
1083 <summary>
1084 Cookies returned by server with the response
1085 </summary>
1086 </member>
1087 <member name="P:RestSharp.IHttpResponse.ResponseStatus">
1088 <summary>
1089 Status of the request. Will return Error for transport errors.
1090 HTTP errors will still return ResponseStatus.Completed, check StatusCode instead
1091 </summary>
1092 </member>
1093 <member name="P:RestSharp.IHttpResponse.ErrorMessage">
1094 <summary>
1095 Transport or other non-HTTP error generated while attempting request
1096 </summary>
1097 </member>
1098 <member name="P:RestSharp.IHttpResponse.ErrorException">
1099 <summary>
1100 Exception thrown when error is encountered.
1101 </summary>
1102 </member>
1103 <member name="M:RestSharp.HttpResponse.#ctor">
1104 <summary>
1105 Default constructor
1106 </summary>
1107 </member>
1108 <member name="P:RestSharp.HttpResponse.ContentType">
1109 <summary>
1110 MIME content type of response
1111 </summary>
1112 </member>
1113 <member name="P:RestSharp.HttpResponse.ContentLength">
1114 <summary>
1115 Length in bytes of the response content
1116 </summary>
1117 </member>
1118 <member name="P:RestSharp.HttpResponse.ContentEncoding">
1119 <summary>
1120 Encoding of the response content
1121 </summary>
1122 </member>
1123 <member name="P:RestSharp.HttpResponse.Content">
1124 <summary>
1125 Lazy-loaded string representation of response content
1126 </summary>
1127 </member>
1128 <member name="P:RestSharp.HttpResponse.StatusCode">
1129 <summary>
1130 HTTP response status code
1131 </summary>
1132 </member>
1133 <member name="P:RestSharp.HttpResponse.StatusDescription">
1134 <summary>
1135 Description of HTTP status returned
1136 </summary>
1137 </member>
1138 <member name="P:RestSharp.HttpResponse.RawBytes">
1139 <summary>
1140 Response content
1141 </summary>
1142 </member>
1143 <member name="P:RestSharp.HttpResponse.ResponseUri">
1144 <summary>
1145 The URL that actually responded to the content (different from request if redirected)
1146 </summary>
1147 </member>
1148 <member name="P:RestSharp.HttpResponse.Server">
1149 <summary>
1150 HttpWebResponse.Server
1151 </summary>
1152 </member>
1153 <member name="P:RestSharp.HttpResponse.Headers">
1154 <summary>
1155 Headers returned by server with the response
1156 </summary>
1157 </member>
1158 <member name="P:RestSharp.HttpResponse.Cookies">
1159 <summary>
1160 Cookies returned by server with the response
1161 </summary>
1162 </member>
1163 <member name="P:RestSharp.HttpResponse.ResponseStatus">
1164 <summary>
1165 Status of the request. Will return Error for transport errors.
1166 HTTP errors will still return ResponseStatus.Completed, check StatusCode instead
1167 </summary>
1168 </member>
1169 <member name="P:RestSharp.HttpResponse.ErrorMessage">
1170 <summary>
1171 Transport or other non-HTTP error generated while attempting request
1172 </summary>
1173 </member>
1174 <member name="P:RestSharp.HttpResponse.ErrorException">
1175 <summary>
1176 Exception thrown when error is encountered.
1177 </summary>
1178 </member>
1179 <member name="T:RestSharp.IRestClient">
1180 <summary>
1181
1182 </summary>
1183 </member>
1184 <member name="M:RestSharp.IRestClient.ExecuteAsync(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse,RestSharp.RestRequestAsyncHandle})">
1185 <summary>
1186
1187 </summary>
1188 <param name="request"></param>
1189 <param name="callback"></param>
1190 </member>
1191 <member name="M:RestSharp.IRestClient.ExecuteAsync``1(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse{``0},RestSharp.RestRequestAsyncHandle})">
1192 <summary>
1193
1194 </summary>
1195 <param name="request"></param>
1196 <param name="callback"></param>
1197 </member>
1198 <member name="M:RestSharp.IRestClient.ExecuteAsyncGet(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse,RestSharp.RestRequestAsyncHandle},System.String)">
1199 <summary>
1200 Executes a GET-style request and callback asynchronously, authenticating if needed
1201 </summary>
1202 <param name="request">Request to be executed</param>
1203 <param name="callback">Callback function to be executed upon completion providing access to the async handle.</param>
1204 <param name="httpMethod">The HTTP method to execute</param>
1205 </member>
1206 <member name="M:RestSharp.IRestClient.ExecuteAsyncPost(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse,RestSharp.RestRequestAsyncHandle},System.String)">
1207 <summary>
1208 Executes a POST-style request and callback asynchronously, authenticating if needed
1209 </summary>
1210 <param name="request">Request to be executed</param>
1211 <param name="callback">Callback function to be executed upon completion providing access to the async handle.</param>
1212 <param name="httpMethod">The HTTP method to execute</param>
1213 </member>
1214 <member name="M:RestSharp.IRestClient.ExecuteAsyncGet``1(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse{``0},RestSharp.RestRequestAsyncHandle},System.String)">
1215 <summary>
1216 Executes a GET-style request and callback asynchronously, authenticating if needed
1217 </summary>
1218 <typeparam name="T">Target deserialization type</typeparam>
1219 <param name="request">Request to be executed</param>
1220 <param name="callback">Callback function to be executed upon completion</param>
1221 <param name="httpMethod">The HTTP method to execute</param>
1222 </member>
1223 <member name="M:RestSharp.IRestClient.ExecuteAsyncPost``1(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse{``0},RestSharp.RestRequestAsyncHandle},System.String)">
1224 <summary>
1225 Executes a GET-style request and callback asynchronously, authenticating if needed
1226 </summary>
1227 <typeparam name="T">Target deserialization type</typeparam>
1228 <param name="request">Request to be executed</param>
1229 <param name="callback">Callback function to be executed upon completion</param>
1230 <param name="httpMethod">The HTTP method to execute</param>
1231 </member>
1232 <member name="M:RestSharp.IRestClient.ExecuteTaskAsync``1(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1233 <summary>
1234 Executes the request and callback asynchronously, authenticating if needed
1235 </summary>
1236 <typeparam name="T">Target deserialization type</typeparam>
1237 <param name="request">Request to be executed</param>
1238 <param name="token">The cancellation token</param>
1239 </member>
1240 <member name="M:RestSharp.IRestClient.ExecuteTaskAsync``1(RestSharp.IRestRequest)">
1241 <summary>
1242 Executes the request asynchronously, authenticating if needed
1243 </summary>
1244 <typeparam name="T">Target deserialization type</typeparam>
1245 <param name="request">Request to be executed</param>
1246 </member>
1247 <member name="M:RestSharp.IRestClient.ExecuteGetTaskAsync``1(RestSharp.IRestRequest)">
1248 <summary>
1249 Executes a GET-style request asynchronously, authenticating if needed
1250 </summary>
1251 <typeparam name="T">Target deserialization type</typeparam>
1252 <param name="request">Request to be executed</param>
1253 </member>
1254 <member name="M:RestSharp.IRestClient.ExecuteGetTaskAsync``1(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1255 <summary>
1256 Executes a GET-style request asynchronously, authenticating if needed
1257 </summary>
1258 <typeparam name="T">Target deserialization type</typeparam>
1259 <param name="request">Request to be executed</param>
1260 <param name="token">The cancellation token</param>
1261 </member>
1262 <member name="M:RestSharp.IRestClient.ExecutePostTaskAsync``1(RestSharp.IRestRequest)">
1263 <summary>
1264 Executes a POST-style request asynchronously, authenticating if needed
1265 </summary>
1266 <typeparam name="T">Target deserialization type</typeparam>
1267 <param name="request">Request to be executed</param>
1268 </member>
1269 <member name="M:RestSharp.IRestClient.ExecutePostTaskAsync``1(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1270 <summary>
1271 Executes a POST-style request asynchronously, authenticating if needed
1272 </summary>
1273 <typeparam name="T">Target deserialization type</typeparam>
1274 <param name="request">Request to be executed</param>
1275 <param name="token">The cancellation token</param>
1276 </member>
1277 <member name="M:RestSharp.IRestClient.ExecuteTaskAsync(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1278 <summary>
1279 Executes the request and callback asynchronously, authenticating if needed
1280 </summary>
1281 <param name="request">Request to be executed</param>
1282 <param name="token">The cancellation token</param>
1283 </member>
1284 <member name="M:RestSharp.IRestClient.ExecuteTaskAsync(RestSharp.IRestRequest)">
1285 <summary>
1286 Executes the request asynchronously, authenticating if needed
1287 </summary>
1288 <param name="request">Request to be executed</param>
1289 </member>
1290 <member name="M:RestSharp.IRestClient.ExecuteGetTaskAsync(RestSharp.IRestRequest)">
1291 <summary>
1292 Executes a GET-style asynchronously, authenticating if needed
1293 </summary>
1294 <param name="request">Request to be executed</param>
1295 </member>
1296 <member name="M:RestSharp.IRestClient.ExecuteGetTaskAsync(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1297 <summary>
1298 Executes a GET-style asynchronously, authenticating if needed
1299 </summary>
1300 <param name="request">Request to be executed</param>
1301 <param name="token">The cancellation token</param>
1302 </member>
1303 <member name="M:RestSharp.IRestClient.ExecutePostTaskAsync(RestSharp.IRestRequest)">
1304 <summary>
1305 Executes a POST-style asynchronously, authenticating if needed
1306 </summary>
1307 <param name="request">Request to be executed</param>
1308 </member>
1309 <member name="M:RestSharp.IRestClient.ExecutePostTaskAsync(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1310 <summary>
1311 Executes a POST-style asynchronously, authenticating if needed
1312 </summary>
1313 <param name="request">Request to be executed</param>
1314 <param name="token">The cancellation token</param>
1315 </member>
1316 <member name="P:RestSharp.IRestClient.CookieContainer">
1317 <summary>
1318
1319 </summary>
1320 </member>
1321 <member name="P:RestSharp.IRestClient.UserAgent">
1322 <summary>
1323
1324 </summary>
1325 </member>
1326 <member name="P:RestSharp.IRestClient.Timeout">
1327 <summary>
1328
1329 </summary>
1330 </member>
1331 <member name="P:RestSharp.IRestClient.ReadWriteTimeout">
1332 <summary>
1333
1334 </summary>
1335 </member>
1336 <member name="P:RestSharp.IRestClient.UseSynchronizationContext">
1337 <summary>
1338
1339 </summary>
1340 </member>
1341 <member name="P:RestSharp.IRestClient.Authenticator">
1342 <summary>
1343
1344 </summary>
1345 </member>
1346 <member name="P:RestSharp.IRestClient.BaseUrl">
1347 <summary>
1348
1349 </summary>
1350 </member>
1351 <member name="P:RestSharp.IRestClient.PreAuthenticate">
1352 <summary>
1353
1354 </summary>
1355 </member>
1356 <member name="P:RestSharp.IRestClient.DefaultParameters">
1357 <summary>
1358
1359 </summary>
1360 </member>
1361 <member name="P:RestSharp.IRestClient.ClientCertificates">
1362 <summary>
1363 X509CertificateCollection to be sent with request
1364 </summary>
1365 </member>
1366 <member name="M:RestSharp.IRestRequest.AddFile(System.String,System.String)">
1367 <summary>
1368 Adds a file to the Files collection to be included with a POST or PUT request
1369 (other methods do not support file uploads).
1370 </summary>
1371 <param name="name">The parameter name to use in the request</param>
1372 <param name="path">Full path to file to upload</param>
1373 <returns>This request</returns>
1374 </member>
1375 <member name="M:RestSharp.IRestRequest.AddFile(System.String,System.Byte[],System.String)">
1376 <summary>
1377 Adds the bytes to the Files collection with the specified file name
1378 </summary>
1379 <param name="name">The parameter name to use in the request</param>
1380 <param name="bytes">The file data</param>
1381 <param name="fileName">The file name to use for the uploaded file</param>
1382 <returns>This request</returns>
1383 </member>
1384 <member name="M:RestSharp.IRestRequest.AddFile(System.String,System.Byte[],System.String,System.String)">
1385 <summary>
1386 Adds the bytes to the Files collection with the specified file name and content type
1387 </summary>
1388 <param name="name">The parameter name to use in the request</param>
1389 <param name="bytes">The file data</param>
1390 <param name="fileName">The file name to use for the uploaded file</param>
1391 <param name="contentType">The MIME type of the file to upload</param>
1392 <returns>This request</returns>
1393 </member>
1394 <member name="M:RestSharp.IRestRequest.AddBody(System.Object,System.String)">
1395 <summary>
1396 Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer
1397 The default format is XML. Change RequestFormat if you wish to use a different serialization format.
1398 </summary>
1399 <param name="obj">The object to serialize</param>
1400 <param name="xmlNamespace">The XML namespace to use when serializing</param>
1401 <returns>This request</returns>
1402 </member>
1403 <member name="M:RestSharp.IRestRequest.AddBody(System.Object)">
1404 <summary>
1405 Serializes obj to data format specified by RequestFormat and adds it to the request body.
1406 The default format is XML. Change RequestFormat if you wish to use a different serialization format.
1407 </summary>
1408 <param name="obj">The object to serialize</param>
1409 <returns>This request</returns>
1410 </member>
1411 <member name="M:RestSharp.IRestRequest.AddJsonBody(System.Object)">
1412 <summary>
1413 Serializes obj to JSON format and adds it to the request body.
1414 </summary>
1415 <param name="obj">The object to serialize</param>
1416 <returns>This request</returns>
1417 </member>
1418 <member name="M:RestSharp.IRestRequest.AddXmlBody(System.Object)">
1419 <summary>
1420 Serializes obj to XML format and adds it to the request body.
1421 </summary>
1422 <param name="obj">The object to serialize</param>
1423 <returns>This request</returns>
1424 </member>
1425 <member name="M:RestSharp.IRestRequest.AddXmlBody(System.Object,System.String)">
1426 <summary>
1427 Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer
1428 Serializes obj to XML format and passes xmlNamespace then adds it to the request body.
1429 </summary>
1430 <param name="obj">The object to serialize</param>
1431 <param name="xmlNamespace">The XML namespace to use when serializing</param>
1432 <returns>This request</returns>
1433 </member>
1434 <member name="M:RestSharp.IRestRequest.AddObject(System.Object,System.String[])">
1435 <summary>
1436 Calls AddParameter() for all public, readable properties specified in the includedProperties list
1437 </summary>
1438 <example>
1439 request.AddObject(product, "ProductId", "Price", ...);
1440 </example>
1441 <param name="obj">The object with properties to add as parameters</param>
1442 <param name="includedProperties">The names of the properties to include</param>
1443 <returns>This request</returns>
1444 </member>
1445 <member name="M:RestSharp.IRestRequest.AddObject(System.Object)">
1446 <summary>
1447 Calls AddParameter() for all public, readable properties of obj
1448 </summary>
1449 <param name="obj">The object with properties to add as parameters</param>
1450 <returns>This request</returns>
1451 </member>
1452 <member name="M:RestSharp.IRestRequest.AddParameter(RestSharp.Parameter)">
1453 <summary>
1454 Add the parameter to the request
1455 </summary>
1456 <param name="p">Parameter to add</param>
1457 <returns></returns>
1458 </member>
1459 <member name="M:RestSharp.IRestRequest.AddParameter(System.String,System.Object)">
1460 <summary>
1461 Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
1462 </summary>
1463 <param name="name">Name of the parameter</param>
1464 <param name="value">Value of the parameter</param>
1465 <returns>This request</returns>
1466 </member>
1467 <member name="M:RestSharp.IRestRequest.AddParameter(System.String,System.Object,RestSharp.ParameterType)">
1468 <summary>
1469 Adds a parameter to the request. There are five types of parameters:
1470 - GetOrPost: Either a QueryString value or encoded form value based on method
1471 - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection
1472 - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId}
1473 - Cookie: Adds the name/value pair to the HTTP request's Cookies collection
1474 - RequestBody: Used by AddBody() (not recommended to use directly)
1475 </summary>
1476 <param name="name">Name of the parameter</param>
1477 <param name="value">Value of the parameter</param>
1478 <param name="type">The type of parameter to add</param>
1479 <returns>This request</returns>
1480 </member>
1481 <member name="M:RestSharp.IRestRequest.AddHeader(System.String,System.String)">
1482 <summary>
1483 Shortcut to AddParameter(name, value, HttpHeader) overload
1484 </summary>
1485 <param name="name">Name of the header to add</param>
1486 <param name="value">Value of the header to add</param>
1487 <returns></returns>
1488 </member>
1489 <member name="M:RestSharp.IRestRequest.AddCookie(System.String,System.String)">
1490 <summary>
1491 Shortcut to AddParameter(name, value, Cookie) overload
1492 </summary>
1493 <param name="name">Name of the cookie to add</param>
1494 <param name="value">Value of the cookie to add</param>
1495 <returns></returns>
1496 </member>
1497 <member name="M:RestSharp.IRestRequest.AddUrlSegment(System.String,System.String)">
1498 <summary>
1499 Shortcut to AddParameter(name, value, UrlSegment) overload
1500 </summary>
1501 <param name="name">Name of the segment to add</param>
1502 <param name="value">Value of the segment to add</param>
1503 <returns></returns>
1504 </member>
1505 <member name="M:RestSharp.IRestRequest.AddQueryParameter(System.String,System.String)">
1506 <summary>
1507 Shortcut to AddParameter(name, value, QueryString) overload
1508 </summary>
1509 <param name="name">Name of the parameter to add</param>
1510 <param name="value">Value of the parameter to add</param>
1511 <returns></returns>
1512 </member>
1513 <member name="P:RestSharp.IRestRequest.AlwaysMultipartFormData">
1514 <summary>
1515 Always send a multipart/form-data request - even when no Files are present.
1516 </summary>
1517 </member>
1518 <member name="P:RestSharp.IRestRequest.JsonSerializer">
1519 <summary>
1520 Serializer to use when writing JSON request bodies. Used if RequestFormat is Json.
1521 By default the included JsonSerializer is used (currently using JSON.NET default serialization).
1522 </summary>
1523 </member>
1524 <member name="P:RestSharp.IRestRequest.XmlSerializer">
1525 <summary>
1526 Serializer to use when writing XML request bodies. Used if RequestFormat is Xml.
1527 By default the included XmlSerializer is used.
1528 </summary>
1529 </member>
1530 <member name="P:RestSharp.IRestRequest.ResponseWriter">
1531 <summary>
1532 Set this to write response to Stream rather than reading into memory.
1533 </summary>
1534 </member>
1535 <member name="P:RestSharp.IRestRequest.Parameters">
1536 <summary>
1537 Container of all HTTP parameters to be passed with the request.
1538 See AddParameter() for explanation of the types of parameters that can be passed
1539 </summary>
1540 </member>
1541 <member name="P:RestSharp.IRestRequest.Files">
1542 <summary>
1543 Container of all the files to be uploaded with the request.
1544 </summary>
1545 </member>
1546 <member name="P:RestSharp.IRestRequest.Method">
1547 <summary>
1548 Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS
1549 Default is GET
1550 </summary>
1551 </member>
1552 <member name="P:RestSharp.IRestRequest.Resource">
1553 <summary>
1554 The Resource URL to make the request against.
1555 Tokens are substituted with UrlSegment parameters and match by name.
1556 Should not include the scheme or domain. Do not include leading slash.
1557 Combined with RestClient.BaseUrl to assemble final URL:
1558 {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com)
1559 </summary>
1560 <example>
1561 // example for url token replacement
1562 request.Resource = "Products/{ProductId}";
1563 request.AddParameter("ProductId", 123, ParameterType.UrlSegment);
1564 </example>
1565 </member>
1566 <member name="P:RestSharp.IRestRequest.RequestFormat">
1567 <summary>
1568 Serializer to use when writing XML request bodies. Used if RequestFormat is Xml.
1569 By default XmlSerializer is used.
1570 </summary>
1571 </member>
1572 <member name="P:RestSharp.IRestRequest.RootElement">
1573 <summary>
1574 Used by the default deserializers to determine where to start deserializing from.
1575 Can be used to skip container or root elements that do not have corresponding deserialzation targets.
1576 </summary>
1577 </member>
1578 <member name="P:RestSharp.IRestRequest.DateFormat">
1579 <summary>
1580 Used by the default deserializers to explicitly set which date format string to use when parsing dates.
1581 </summary>
1582 </member>
1583 <member name="P:RestSharp.IRestRequest.XmlNamespace">
1584 <summary>
1585 Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names.
1586 </summary>
1587 </member>
1588 <member name="P:RestSharp.IRestRequest.Credentials">
1589 <summary>
1590 In general you would not need to set this directly. Used by the NtlmAuthenticator.
1591 </summary>
1592 </member>
1593 <member name="P:RestSharp.IRestRequest.Timeout">
1594 <summary>
1595 Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient.
1596 </summary>
1597 </member>
1598 <member name="P:RestSharp.IRestRequest.ReadWriteTimeout">
1599 <summary>
1600 The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient.
1601 </summary>
1602 </member>
1603 <member name="P:RestSharp.IRestRequest.Attempts">
1604 <summary>
1605 How many attempts were made to send this Request?
1606 </summary>
1607 <remarks>
1608 This Number is incremented each time the RestClient sends the request.
1609 Useful when using Asynchronous Execution with Callbacks
1610 </remarks>
1611 </member>
1612 <member name="P:RestSharp.IRestRequest.UseDefaultCredentials">
1613 <summary>
1614 Determine whether or not the "default credentials" (e.g. the user account under which the current process is running)
1615 will be sent along to the server. The default is false.
1616 </summary>
1617 </member>
1618 <member name="T:RestSharp.IRestResponse">
1619 <summary>
1620 Container for data sent back from API
1621 </summary>
1622 </member>
1623 <member name="P:RestSharp.IRestResponse.Request">
1624 <summary>
1625 The RestRequest that was made to get this RestResponse
1626 </summary>
1627 <remarks>
1628 Mainly for debugging if ResponseStatus is not OK
1629 </remarks>
1630 </member>
1631 <member name="P:RestSharp.IRestResponse.ContentType">
1632 <summary>
1633 MIME content type of response
1634 </summary>
1635 </member>
1636 <member name="P:RestSharp.IRestResponse.ContentLength">
1637 <summary>
1638 Length in bytes of the response content
1639 </summary>
1640 </member>
1641 <member name="P:RestSharp.IRestResponse.ContentEncoding">
1642 <summary>
1643 Encoding of the response content
1644 </summary>
1645 </member>
1646 <member name="P:RestSharp.IRestResponse.Content">
1647 <summary>
1648 String representation of response content
1649 </summary>
1650 </member>
1651 <member name="P:RestSharp.IRestResponse.StatusCode">
1652 <summary>
1653 HTTP response status code
1654 </summary>
1655 </member>
1656 <member name="P:RestSharp.IRestResponse.StatusDescription">
1657 <summary>
1658 Description of HTTP status returned
1659 </summary>
1660 </member>
1661 <member name="P:RestSharp.IRestResponse.RawBytes">
1662 <summary>
1663 Response content
1664 </summary>
1665 </member>
1666 <member name="P:RestSharp.IRestResponse.ResponseUri">
1667 <summary>
1668 The URL that actually responded to the content (different from request if redirected)
1669 </summary>
1670 </member>
1671 <member name="P:RestSharp.IRestResponse.Server">
1672 <summary>
1673 HttpWebResponse.Server
1674 </summary>
1675 </member>
1676 <member name="P:RestSharp.IRestResponse.Cookies">
1677 <summary>
1678 Cookies returned by server with the response
1679 </summary>
1680 </member>
1681 <member name="P:RestSharp.IRestResponse.Headers">
1682 <summary>
1683 Headers returned by server with the response
1684 </summary>
1685 </member>
1686 <member name="P:RestSharp.IRestResponse.ResponseStatus">
1687 <summary>
1688 Status of the request. Will return Error for transport errors.
1689 HTTP errors will still return ResponseStatus.Completed, check StatusCode instead
1690 </summary>
1691 </member>
1692 <member name="P:RestSharp.IRestResponse.ErrorMessage">
1693 <summary>
1694 Transport or other non-HTTP error generated while attempting request
1695 </summary>
1696 </member>
1697 <member name="P:RestSharp.IRestResponse.ErrorException">
1698 <summary>
1699 Exceptions thrown during the request, if any.
1700 </summary>
1701 <remarks>Will contain only network transport or framework exceptions thrown during the request.
1702 HTTP protocol errors are handled by RestSharp and will not appear here.</remarks>
1703 </member>
1704 <member name="T:RestSharp.IRestResponse`1">
1705 <summary>
1706 Container for data sent back from API including deserialized data
1707 </summary>
1708 <typeparam name="T">Type of data to deserialize to</typeparam>
1709 </member>
1710 <member name="P:RestSharp.IRestResponse`1.Data">
1711 <summary>
1712 Deserialized entity data
1713 </summary>
1714 </member>
1715 <member name="T:RestSharp.Parameter">
1716 <summary>
1717 Parameter container for REST requests
1718 </summary>
1719 </member>
1720 <member name="M:RestSharp.Parameter.ToString">
1721 <summary>
1722 Return a human-readable representation of this parameter
1723 </summary>
1724 <returns>String</returns>
1725 </member>
1726 <member name="P:RestSharp.Parameter.Name">
1727 <summary>
1728 Name of the parameter
1729 </summary>
1730 </member>
1731 <member name="P:RestSharp.Parameter.Value">
1732 <summary>
1733 Value of the parameter
1734 </summary>
1735 </member>
1736 <member name="P:RestSharp.Parameter.Type">
1737 <summary>
1738 Type of the parameter
1739 </summary>
1740 </member>
1741 <member name="T:RestSharp.RestClient">
1742 <summary>
1743 Client to translate RestRequests into Http requests and process response result
1744 </summary>
1745 </member>
1746 <member name="M:RestSharp.RestClient.ExecuteAsync(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse,RestSharp.RestRequestAsyncHandle})">
1747 <summary>
1748 Executes the request and callback asynchronously, authenticating if needed
1749 </summary>
1750 <param name="request">Request to be executed</param>
1751 <param name="callback">Callback function to be executed upon completion providing access to the async handle.</param>
1752 </member>
1753 <member name="M:RestSharp.RestClient.ExecuteAsyncGet(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse,RestSharp.RestRequestAsyncHandle},System.String)">
1754 <summary>
1755 Executes a GET-style request and callback asynchronously, authenticating if needed
1756 </summary>
1757 <param name="request">Request to be executed</param>
1758 <param name="callback">Callback function to be executed upon completion providing access to the async handle.</param>
1759 <param name="httpMethod">The HTTP method to execute</param>
1760 </member>
1761 <member name="M:RestSharp.RestClient.ExecuteAsyncPost(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse,RestSharp.RestRequestAsyncHandle},System.String)">
1762 <summary>
1763 Executes a POST-style request and callback asynchronously, authenticating if needed
1764 </summary>
1765 <param name="request">Request to be executed</param>
1766 <param name="callback">Callback function to be executed upon completion providing access to the async handle.</param>
1767 <param name="httpMethod">The HTTP method to execute</param>
1768 </member>
1769 <member name="M:RestSharp.RestClient.ExecuteAsync``1(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse{``0},RestSharp.RestRequestAsyncHandle})">
1770 <summary>
1771 Executes the request and callback asynchronously, authenticating if needed
1772 </summary>
1773 <typeparam name="T">Target deserialization type</typeparam>
1774 <param name="request">Request to be executed</param>
1775 <param name="callback">Callback function to be executed upon completion</param>
1776 </member>
1777 <member name="M:RestSharp.RestClient.ExecuteAsyncGet``1(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse{``0},RestSharp.RestRequestAsyncHandle},System.String)">
1778 <summary>
1779 Executes a GET-style request and callback asynchronously, authenticating if needed
1780 </summary>
1781 <typeparam name="T">Target deserialization type</typeparam>
1782 <param name="request">Request to be executed</param>
1783 <param name="callback">Callback function to be executed upon completion</param>
1784 <param name="httpMethod">The HTTP method to execute</param>
1785 </member>
1786 <member name="M:RestSharp.RestClient.ExecuteAsyncPost``1(RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse{``0},RestSharp.RestRequestAsyncHandle},System.String)">
1787 <summary>
1788 Executes a POST-style request and callback asynchronously, authenticating if needed
1789 </summary>
1790 <typeparam name="T">Target deserialization type</typeparam>
1791 <param name="request">Request to be executed</param>
1792 <param name="callback">Callback function to be executed upon completion</param>
1793 <param name="httpMethod">The HTTP method to execute</param>
1794 </member>
1795 <member name="M:RestSharp.RestClient.ExecuteGetTaskAsync``1(RestSharp.IRestRequest)">
1796 <summary>
1797 Executes a GET-style request asynchronously, authenticating if needed
1798 </summary>
1799 <typeparam name="T">Target deserialization type</typeparam>
1800 <param name="request">Request to be executed</param>
1801 </member>
1802 <member name="M:RestSharp.RestClient.ExecuteGetTaskAsync``1(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1803 <summary>
1804 Executes a GET-style request asynchronously, authenticating if needed
1805 </summary>
1806 <typeparam name="T">Target deserialization type</typeparam>
1807 <param name="request">Request to be executed</param>
1808 <param name="token">The cancellation token</param>
1809 </member>
1810 <member name="M:RestSharp.RestClient.ExecutePostTaskAsync``1(RestSharp.IRestRequest)">
1811 <summary>
1812 Executes a POST-style request asynchronously, authenticating if needed
1813 </summary>
1814 <typeparam name="T">Target deserialization type</typeparam>
1815 <param name="request">Request to be executed</param>
1816 </member>
1817 <member name="M:RestSharp.RestClient.ExecutePostTaskAsync``1(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1818 <summary>
1819 Executes a POST-style request asynchronously, authenticating if needed
1820 </summary>
1821 <typeparam name="T">Target deserialization type</typeparam>
1822 <param name="request">Request to be executed</param>
1823 <param name="token">The cancellation token</param>
1824 </member>
1825 <member name="M:RestSharp.RestClient.ExecuteTaskAsync``1(RestSharp.IRestRequest)">
1826 <summary>
1827 Executes the request asynchronously, authenticating if needed
1828 </summary>
1829 <typeparam name="T">Target deserialization type</typeparam>
1830 <param name="request">Request to be executed</param>
1831 </member>
1832 <member name="M:RestSharp.RestClient.ExecuteTaskAsync``1(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1833 <summary>
1834 Executes the request asynchronously, authenticating if needed
1835 </summary>
1836 <typeparam name="T">Target deserialization type</typeparam>
1837 <param name="request">Request to be executed</param>
1838 <param name="token">The cancellation token</param>
1839 </member>
1840 <member name="M:RestSharp.RestClient.ExecuteTaskAsync(RestSharp.IRestRequest)">
1841 <summary>
1842 Executes the request asynchronously, authenticating if needed
1843 </summary>
1844 <param name="request">Request to be executed</param>
1845 </member>
1846 <member name="M:RestSharp.RestClient.ExecuteGetTaskAsync(RestSharp.IRestRequest)">
1847 <summary>
1848 Executes a GET-style asynchronously, authenticating if needed
1849 </summary>
1850 <param name="request">Request to be executed</param>
1851 </member>
1852 <member name="M:RestSharp.RestClient.ExecuteGetTaskAsync(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1853 <summary>
1854 Executes a GET-style asynchronously, authenticating if needed
1855 </summary>
1856 <param name="request">Request to be executed</param>
1857 <param name="token">The cancellation token</param>
1858 </member>
1859 <member name="M:RestSharp.RestClient.ExecutePostTaskAsync(RestSharp.IRestRequest)">
1860 <summary>
1861 Executes a POST-style asynchronously, authenticating if needed
1862 </summary>
1863 <param name="request">Request to be executed</param>
1864 </member>
1865 <member name="M:RestSharp.RestClient.ExecutePostTaskAsync(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1866 <summary>
1867 Executes a POST-style asynchronously, authenticating if needed
1868 </summary>
1869 <param name="request">Request to be executed</param>
1870 <param name="token">The cancellation token</param>
1871 </member>
1872 <member name="M:RestSharp.RestClient.ExecuteTaskAsync(RestSharp.IRestRequest,System.Threading.CancellationToken)">
1873 <summary>
1874 Executes the request asynchronously, authenticating if needed
1875 </summary>
1876 <param name="request">Request to be executed</param>
1877 <param name="token">The cancellation token</param>
1878 </member>
1879 <member name="M:RestSharp.RestClient.#ctor">
1880 <summary>
1881 Default constructor that registers default content handlers
1882 </summary>
1883 </member>
1884 <member name="M:RestSharp.RestClient.#ctor(System.Uri)">
1885 <summary>
1886 Sets the BaseUrl property for requests made by this client instance
1887 </summary>
1888 <param name="baseUrl"></param>
1889 </member>
1890 <member name="M:RestSharp.RestClient.#ctor(System.String)">
1891 <summary>
1892 Sets the BaseUrl property for requests made by this client instance
1893 </summary>
1894 <param name="baseUrl"></param>
1895 </member>
1896 <member name="M:RestSharp.RestClient.AddHandler(System.String,RestSharp.Deserializers.IDeserializer)">
1897 <summary>
1898 Registers a content handler to process response content
1899 </summary>
1900 <param name="contentType">MIME content type of the response content</param>
1901 <param name="deserializer">Deserializer to use to process content</param>
1902 </member>
1903 <member name="M:RestSharp.RestClient.RemoveHandler(System.String)">
1904 <summary>
1905 Remove a content handler for the specified MIME content type
1906 </summary>
1907 <param name="contentType">MIME content type to remove</param>
1908 </member>
1909 <member name="M:RestSharp.RestClient.ClearHandlers">
1910 <summary>
1911 Remove all content handlers
1912 </summary>
1913 </member>
1914 <member name="M:RestSharp.RestClient.GetHandler(System.String)">
1915 <summary>
1916 Retrieve the handler for the specified MIME content type
1917 </summary>
1918 <param name="contentType">MIME content type to retrieve</param>
1919 <returns>IDeserializer instance</returns>
1920 </member>
1921 <member name="M:RestSharp.RestClient.BuildUri(RestSharp.IRestRequest)">
1922 <summary>
1923 Assembles URL to call based on parameters, method and resource
1924 </summary>
1925 <param name="request">RestRequest to execute</param>
1926 <returns>Assembled System.Uri</returns>
1927 </member>
1928 <member name="M:RestSharp.RestClient.DownloadData(RestSharp.IRestRequest)">
1929 <summary>
1930 Executes the specified request and downloads the response data
1931 </summary>
1932 <param name="request">Request to execute</param>
1933 <returns>Response data</returns>
1934 </member>
1935 <member name="M:RestSharp.RestClient.Execute(RestSharp.IRestRequest)">
1936 <summary>
1937 Executes the request and returns a response, authenticating if needed
1938 </summary>
1939 <param name="request">Request to be executed</param>
1940 <returns>RestResponse</returns>
1941 </member>
1942 <member name="M:RestSharp.RestClient.Execute``1(RestSharp.IRestRequest)">
1943 <summary>
1944 Executes the specified request and deserializes the response content using the appropriate content handler
1945 </summary>
1946 <typeparam name="T">Target deserialization type</typeparam>
1947 <param name="request">Request to execute</param>
1948 <returns>RestResponse[[T]] with deserialized data in Data property</returns>
1949 </member>
1950 <member name="P:RestSharp.RestClient.DefaultParameters">
1951 <summary>
1952 Parameters included with every request made with this instance of RestClient
1953 If specified in both client and request, the request wins
1954 </summary>
1955 </member>
1956 <member name="P:RestSharp.RestClient.MaxRedirects">
1957 <summary>
1958 Maximum number of redirects to follow if FollowRedirects is true
1959 </summary>
1960 </member>
1961 <member name="P:RestSharp.RestClient.ClientCertificates">
1962 <summary>
1963 X509CertificateCollection to be sent with request
1964 </summary>
1965 </member>
1966 <member name="P:RestSharp.RestClient.Proxy">
1967 <summary>
1968 Proxy to use for requests made by this client instance.
1969 Passed on to underlying WebRequest if set.
1970 </summary>
1971 </member>
1972 <member name="P:RestSharp.RestClient.FollowRedirects">
1973 <summary>
1974 Default is true. Determine whether or not requests that result in
1975 HTTP status codes of 3xx should follow returned redirect
1976 </summary>
1977 </member>
1978 <member name="P:RestSharp.RestClient.CookieContainer">
1979 <summary>
1980 The CookieContainer used for requests made by this client instance
1981 </summary>
1982 </member>
1983 <member name="P:RestSharp.RestClient.UserAgent">
1984 <summary>
1985 UserAgent to use for requests made by this client instance
1986 </summary>
1987 </member>
1988 <member name="P:RestSharp.RestClient.Timeout">
1989 <summary>
1990 Timeout in milliseconds to use for requests made by this client instance
1991 </summary>
1992 </member>
1993 <member name="P:RestSharp.RestClient.ReadWriteTimeout">
1994 <summary>
1995 The number of milliseconds before the writing or reading times out.
1996 </summary>
1997 </member>
1998 <member name="P:RestSharp.RestClient.UseSynchronizationContext">
1999 <summary>
2000 Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked
2001 </summary>
2002 </member>
2003 <member name="P:RestSharp.RestClient.Authenticator">
2004 <summary>
2005 Authenticator to use for requests made by this client instance
2006 </summary>
2007 </member>
2008 <member name="P:RestSharp.RestClient.BaseUrl">
2009 <summary>
2010 Combined with Request.Resource to construct URL for request
2011 Should include scheme and domain without trailing slash.
2012 </summary>
2013 <example>
2014 client.BaseUrl = new Uri("http://example.com");
2015 </example>
2016 </member>
2017 <member name="M:RestSharp.RestClientExtensions.ExecuteAsync(RestSharp.IRestClient,RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse})">
2018 <summary>
2019 Executes the request and callback asynchronously, authenticating if needed
2020 </summary>
2021 <param name="client">The IRestClient this method extends</param>
2022 <param name="request">Request to be executed</param>
2023 <param name="callback">Callback function to be executed upon completion</param>
2024 </member>
2025 <member name="M:RestSharp.RestClientExtensions.ExecuteAsync``1(RestSharp.IRestClient,RestSharp.IRestRequest,System.Action{RestSharp.IRestResponse{``0}})">
2026 <summary>
2027 Executes the request and callback asynchronously, authenticating if needed
2028 </summary>
2029 <param name="client">The IRestClient this method extends</param>
2030 <typeparam name="T">Target deserialization type</typeparam>
2031 <param name="request">Request to be executed</param>
2032 <param name="callback">Callback function to be executed upon completion providing access to the async handle</param>
2033 </member>
2034 <member name="M:RestSharp.RestClientExtensions.AddDefaultParameter(RestSharp.IRestClient,RestSharp.Parameter)">
2035 <summary>
2036 Add a parameter to use on every request made with this client instance
2037 </summary>
2038 <param name="restClient">The IRestClient instance</param>
2039 <param name="p">Parameter to add</param>
2040 <returns></returns>
2041 </member>
2042 <member name="M:RestSharp.RestClientExtensions.RemoveDefaultParameter(RestSharp.IRestClient,System.String)">
2043 <summary>
2044 Removes a parameter from the default parameters that are used on every request made with this client instance
2045 </summary>
2046 <param name="restClient">The IRestClient instance</param>
2047 <param name="name">The name of the parameter that needs to be removed</param>
2048 <returns></returns>
2049 </member>
2050 <member name="M:RestSharp.RestClientExtensions.AddDefaultParameter(RestSharp.IRestClient,System.String,System.Object)">
2051 <summary>
2052 Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
2053 Used on every request made by this client instance
2054 </summary>
2055 <param name="restClient">The IRestClient instance</param>
2056 <param name="name">Name of the parameter</param>
2057 <param name="value">Value of the parameter</param>
2058 <returns>This request</returns>
2059 </member>
2060 <member name="M:RestSharp.RestClientExtensions.AddDefaultParameter(RestSharp.IRestClient,System.String,System.Object,RestSharp.ParameterType)">
2061 <summary>
2062 Adds a parameter to the request. There are four types of parameters:
2063 - GetOrPost: Either a QueryString value or encoded form value based on method
2064 - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection
2065 - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId}
2066 - RequestBody: Used by AddBody() (not recommended to use directly)
2067 </summary>
2068 <param name="restClient">The IRestClient instance</param>
2069 <param name="name">Name of the parameter</param>
2070 <param name="value">Value of the parameter</param>
2071 <param name="type">The type of parameter to add</param>
2072 <returns>This request</returns>
2073 </member>
2074 <member name="M:RestSharp.RestClientExtensions.AddDefaultHeader(RestSharp.IRestClient,System.String,System.String)">
2075 <summary>
2076 Shortcut to AddDefaultParameter(name, value, HttpHeader) overload
2077 </summary>
2078 <param name="restClient">The IRestClient instance</param>
2079 <param name="name">Name of the header to add</param>
2080 <param name="value">Value of the header to add</param>
2081 <returns></returns>
2082 </member>
2083 <member name="M:RestSharp.RestClientExtensions.AddDefaultUrlSegment(RestSharp.IRestClient,System.String,System.String)">
2084 <summary>
2085 Shortcut to AddDefaultParameter(name, value, UrlSegment) overload
2086 </summary>
2087 <param name="restClient">The IRestClient instance</param>
2088 <param name="name">Name of the segment to add</param>
2089 <param name="value">Value of the segment to add</param>
2090 <returns></returns>
2091 </member>
2092 <member name="T:RestSharp.RestRequest">
2093 <summary>
2094 Container for data used to make requests
2095 </summary>
2096 </member>
2097 <member name="M:RestSharp.RestRequest.#ctor">
2098 <summary>
2099 Default constructor
2100 </summary>
2101 </member>
2102 <member name="M:RestSharp.RestRequest.#ctor(RestSharp.Method)">
2103 <summary>
2104 Sets Method property to value of method
2105 </summary>
2106 <param name="method">Method to use for this request</param>
2107 </member>
2108 <member name="M:RestSharp.RestRequest.#ctor(System.String)">
2109 <summary>
2110 Sets Resource property
2111 </summary>
2112 <param name="resource">Resource to use for this request</param>
2113 </member>
2114 <member name="M:RestSharp.RestRequest.#ctor(System.String,RestSharp.Method)">
2115 <summary>
2116 Sets Resource and Method properties
2117 </summary>
2118 <param name="resource">Resource to use for this request</param>
2119 <param name="method">Method to use for this request</param>
2120 </member>
2121 <member name="M:RestSharp.RestRequest.#ctor(System.Uri)">
2122 <summary>
2123 Sets Resource property
2124 </summary>
2125 <param name="resource">Resource to use for this request</param>
2126 </member>
2127 <member name="M:RestSharp.RestRequest.#ctor(System.Uri,RestSharp.Method)">
2128 <summary>
2129 Sets Resource and Method properties
2130 </summary>
2131 <param name="resource">Resource to use for this request</param>
2132 <param name="method">Method to use for this request</param>
2133 </member>
2134 <member name="M:RestSharp.RestRequest.AddFile(System.String,System.String)">
2135 <summary>
2136 Adds a file to the Files collection to be included with a POST or PUT request
2137 (other methods do not support file uploads).
2138 </summary>
2139 <param name="name">The parameter name to use in the request</param>
2140 <param name="path">Full path to file to upload</param>
2141 <returns>This request</returns>
2142 </member>
2143 <member name="M:RestSharp.RestRequest.AddFile(System.String,System.Byte[],System.String)">
2144 <summary>
2145 Adds the bytes to the Files collection with the specified file name
2146 </summary>
2147 <param name="name">The parameter name to use in the request</param>
2148 <param name="bytes">The file data</param>
2149 <param name="fileName">The file name to use for the uploaded file</param>
2150 <returns>This request</returns>
2151 </member>
2152 <member name="M:RestSharp.RestRequest.AddFile(System.String,System.Byte[],System.String,System.String)">
2153 <summary>
2154 Adds the bytes to the Files collection with the specified file name and content type
2155 </summary>
2156 <param name="name">The parameter name to use in the request</param>
2157 <param name="bytes">The file data</param>
2158 <param name="fileName">The file name to use for the uploaded file</param>
2159 <param name="contentType">The MIME type of the file to upload</param>
2160 <returns>This request</returns>
2161 </member>
2162 <member name="M:RestSharp.RestRequest.AddFile(System.String,System.Action{System.IO.Stream},System.String)">
2163 <summary>
2164 Adds the bytes to the Files collection with the specified file name and content type
2165 </summary>
2166 <param name="name">The parameter name to use in the request</param>
2167 <param name="writer">A function that writes directly to the stream. Should NOT close the stream.</param>
2168 <param name="fileName">The file name to use for the uploaded file</param>
2169 <returns>This request</returns>
2170 </member>
2171 <member name="M:RestSharp.RestRequest.AddFile(System.String,System.Action{System.IO.Stream},System.String,System.String)">
2172 <summary>
2173 Adds the bytes to the Files collection with the specified file name and content type
2174 </summary>
2175 <param name="name">The parameter name to use in the request</param>
2176 <param name="writer">A function that writes directly to the stream. Should NOT close the stream.</param>
2177 <param name="fileName">The file name to use for the uploaded file</param>
2178 <param name="contentType">The MIME type of the file to upload</param>
2179 <returns>This request</returns>
2180 </member>
2181 <member name="M:RestSharp.RestRequest.AddBody(System.Object,System.String)">
2182 <summary>
2183 Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer
2184 The default format is XML. Change RequestFormat if you wish to use a different serialization format.
2185 </summary>
2186 <param name="obj">The object to serialize</param>
2187 <param name="xmlNamespace">The XML namespace to use when serializing</param>
2188 <returns>This request</returns>
2189 </member>
2190 <member name="M:RestSharp.RestRequest.AddBody(System.Object)">
2191 <summary>
2192 Serializes obj to data format specified by RequestFormat and adds it to the request body.
2193 The default format is XML. Change RequestFormat if you wish to use a different serialization format.
2194 </summary>
2195 <param name="obj">The object to serialize</param>
2196 <returns>This request</returns>
2197 </member>
2198 <member name="M:RestSharp.RestRequest.AddJsonBody(System.Object)">
2199 <summary>
2200 Serializes obj to JSON format and adds it to the request body.
2201 </summary>
2202 <param name="obj">The object to serialize</param>
2203 <returns>This request</returns>
2204 </member>
2205 <member name="M:RestSharp.RestRequest.AddXmlBody(System.Object)">
2206 <summary>
2207 Serializes obj to XML format and adds it to the request body.
2208 </summary>
2209 <param name="obj">The object to serialize</param>
2210 <returns>This request</returns>
2211 </member>
2212 <member name="M:RestSharp.RestRequest.AddXmlBody(System.Object,System.String)">
2213 <summary>
2214 Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer
2215 Serializes obj to XML format and passes xmlNamespace then adds it to the request body.
2216 </summary>
2217 <param name="obj">The object to serialize</param>
2218 <param name="xmlNamespace">The XML namespace to use when serializing</param>
2219 <returns>This request</returns>
2220 </member>
2221 <member name="M:RestSharp.RestRequest.AddObject(System.Object,System.String[])">
2222 <summary>
2223 Calls AddParameter() for all public, readable properties specified in the includedProperties list
2224 </summary>
2225 <example>
2226 request.AddObject(product, "ProductId", "Price", ...);
2227 </example>
2228 <param name="obj">The object with properties to add as parameters</param>
2229 <param name="includedProperties">The names of the properties to include</param>
2230 <returns>This request</returns>
2231 </member>
2232 <member name="M:RestSharp.RestRequest.AddObject(System.Object)">
2233 <summary>
2234 Calls AddParameter() for all public, readable properties of obj
2235 </summary>
2236 <param name="obj">The object with properties to add as parameters</param>
2237 <returns>This request</returns>
2238 </member>
2239 <member name="M:RestSharp.RestRequest.AddParameter(RestSharp.Parameter)">
2240 <summary>
2241 Add the parameter to the request
2242 </summary>
2243 <param name="p">Parameter to add</param>
2244 <returns></returns>
2245 </member>
2246 <member name="M:RestSharp.RestRequest.AddParameter(System.String,System.Object)">
2247 <summary>
2248 Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
2249 </summary>
2250 <param name="name">Name of the parameter</param>
2251 <param name="value">Value of the parameter</param>
2252 <returns>This request</returns>
2253 </member>
2254 <member name="M:RestSharp.RestRequest.AddParameter(System.String,System.Object,RestSharp.ParameterType)">
2255 <summary>
2256 Adds a parameter to the request. There are four types of parameters:
2257 - GetOrPost: Either a QueryString value or encoded form value based on method
2258 - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection
2259 - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId}
2260 - RequestBody: Used by AddBody() (not recommended to use directly)
2261 </summary>
2262 <param name="name">Name of the parameter</param>
2263 <param name="value">Value of the parameter</param>
2264 <param name="type">The type of parameter to add</param>
2265 <returns>This request</returns>
2266 </member>
2267 <member name="M:RestSharp.RestRequest.AddHeader(System.String,System.String)">
2268 <summary>
2269 Shortcut to AddParameter(name, value, HttpHeader) overload
2270 </summary>
2271 <param name="name">Name of the header to add</param>
2272 <param name="value">Value of the header to add</param>
2273 <returns></returns>
2274 </member>
2275 <member name="M:RestSharp.RestRequest.AddCookie(System.String,System.String)">
2276 <summary>
2277 Shortcut to AddParameter(name, value, Cookie) overload
2278 </summary>
2279 <param name="name">Name of the cookie to add</param>
2280 <param name="value">Value of the cookie to add</param>
2281 <returns></returns>
2282 </member>
2283 <member name="M:RestSharp.RestRequest.AddUrlSegment(System.String,System.String)">
2284 <summary>
2285 Shortcut to AddParameter(name, value, UrlSegment) overload
2286 </summary>
2287 <param name="name">Name of the segment to add</param>
2288 <param name="value">Value of the segment to add</param>
2289 <returns></returns>
2290 </member>
2291 <member name="M:RestSharp.RestRequest.AddQueryParameter(System.String,System.String)">
2292 <summary>
2293 Shortcut to AddParameter(name, value, QueryString) overload
2294 </summary>
2295 <param name="name">Name of the parameter to add</param>
2296 <param name="value">Value of the parameter to add</param>
2297 <returns></returns>
2298 </member>
2299 <member name="M:RestSharp.RestRequest.IncreaseNumAttempts">
2300 <summary>
2301 Internal Method so that RestClient can increase the number of attempts
2302 </summary>
2303 </member>
2304 <member name="P:RestSharp.RestRequest.AlwaysMultipartFormData">
2305 <summary>
2306 Always send a multipart/form-data request - even when no Files are present.
2307 </summary>
2308 </member>
2309 <member name="P:RestSharp.RestRequest.JsonSerializer">
2310 <summary>
2311 Serializer to use when writing JSON request bodies. Used if RequestFormat is Json.
2312 By default the included JsonSerializer is used (currently using JSON.NET default serialization).
2313 </summary>
2314 </member>
2315 <member name="P:RestSharp.RestRequest.XmlSerializer">
2316 <summary>
2317 Serializer to use when writing XML request bodies. Used if RequestFormat is Xml.
2318 By default the included XmlSerializer is used.
2319 </summary>
2320 </member>
2321 <member name="P:RestSharp.RestRequest.ResponseWriter">
2322 <summary>
2323 Set this to write response to Stream rather than reading into memory.
2324 </summary>
2325 </member>
2326 <member name="P:RestSharp.RestRequest.UseDefaultCredentials">
2327 <summary>
2328 Determine whether or not the "default credentials" (e.g. the user account under which the current process is running)
2329 will be sent along to the server. The default is false.
2330 </summary>
2331 </member>
2332 <member name="P:RestSharp.RestRequest.Parameters">
2333 <summary>
2334 Container of all HTTP parameters to be passed with the request.
2335 See AddParameter() for explanation of the types of parameters that can be passed
2336 </summary>
2337 </member>
2338 <member name="P:RestSharp.RestRequest.Files">
2339 <summary>
2340 Container of all the files to be uploaded with the request.
2341 </summary>
2342 </member>
2343 <member name="P:RestSharp.RestRequest.Method">
2344 <summary>
2345 Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS
2346 Default is GET
2347 </summary>
2348 </member>
2349 <member name="P:RestSharp.RestRequest.Resource">
2350 <summary>
2351 The Resource URL to make the request against.
2352 Tokens are substituted with UrlSegment parameters and match by name.
2353 Should not include the scheme or domain. Do not include leading slash.
2354 Combined with RestClient.BaseUrl to assemble final URL:
2355 {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com)
2356 </summary>
2357 <example>
2358 // example for url token replacement
2359 request.Resource = "Products/{ProductId}";
2360 request.AddParameter("ProductId", 123, ParameterType.UrlSegment);
2361 </example>
2362 </member>
2363 <member name="P:RestSharp.RestRequest.RequestFormat">
2364 <summary>
2365 Serializer to use when writing XML request bodies. Used if RequestFormat is Xml.
2366 By default XmlSerializer is used.
2367 </summary>
2368 </member>
2369 <member name="P:RestSharp.RestRequest.RootElement">
2370 <summary>
2371 Used by the default deserializers to determine where to start deserializing from.
2372 Can be used to skip container or root elements that do not have corresponding deserialzation targets.
2373 </summary>
2374 </member>
2375 <member name="P:RestSharp.RestRequest.OnBeforeDeserialization">
2376 <summary>
2377 A function to run prior to deserializing starting (e.g. change settings if error encountered)
2378 </summary>
2379 </member>
2380 <member name="P:RestSharp.RestRequest.DateFormat">
2381 <summary>
2382 Used by the default deserializers to explicitly set which date format string to use when parsing dates.
2383 </summary>
2384 </member>
2385 <member name="P:RestSharp.RestRequest.XmlNamespace">
2386 <summary>
2387 Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names.
2388 </summary>
2389 </member>
2390 <member name="P:RestSharp.RestRequest.Credentials">
2391 <summary>
2392 In general you would not need to set this directly. Used by the NtlmAuthenticator.
2393 </summary>
2394 </member>
2395 <member name="P:RestSharp.RestRequest.UserState">
2396 <summary>
2397 Gets or sets a user-defined state object that contains information about a request and which can be later
2398 retrieved when the request completes.
2399 </summary>
2400 </member>
2401 <member name="P:RestSharp.RestRequest.Timeout">
2402 <summary>
2403 Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient.
2404 </summary>
2405 </member>
2406 <member name="P:RestSharp.RestRequest.ReadWriteTimeout">
2407 <summary>
2408 The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient.
2409 </summary>
2410 </member>
2411 <member name="P:RestSharp.RestRequest.Attempts">
2412 <summary>
2413 How many attempts were made to send this Request?
2414 </summary>
2415 <remarks>
2416 This Number is incremented each time the RestClient sends the request.
2417 Useful when using Asynchronous Execution with Callbacks
2418 </remarks>
2419 </member>
2420 <member name="T:RestSharp.RestResponseBase">
2421 <summary>
2422 Base class for common properties shared by RestResponse and RestResponse[[T]]
2423 </summary>
2424 </member>
2425 <member name="M:RestSharp.RestResponseBase.#ctor">
2426 <summary>
2427 Default constructor
2428 </summary>
2429 </member>
2430 <member name="P:RestSharp.RestResponseBase.Request">
2431 <summary>
2432 The RestRequest that was made to get this RestResponse
2433 </summary>
2434 <remarks>
2435 Mainly for debugging if ResponseStatus is not OK
2436 </remarks>
2437 </member>
2438 <member name="P:RestSharp.RestResponseBase.ContentType">
2439 <summary>
2440 MIME content type of response
2441 </summary>
2442 </member>
2443 <member name="P:RestSharp.RestResponseBase.ContentLength">
2444 <summary>
2445 Length in bytes of the response content
2446 </summary>
2447 </member>
2448 <member name="P:RestSharp.RestResponseBase.ContentEncoding">
2449 <summary>
2450 Encoding of the response content
2451 </summary>
2452 </member>
2453 <member name="P:RestSharp.RestResponseBase.Content">
2454 <summary>
2455 String representation of response content
2456 </summary>
2457 </member>
2458 <member name="P:RestSharp.RestResponseBase.StatusCode">
2459 <summary>
2460 HTTP response status code
2461 </summary>
2462 </member>
2463 <member name="P:RestSharp.RestResponseBase.StatusDescription">
2464 <summary>
2465 Description of HTTP status returned
2466 </summary>
2467 </member>
2468 <member name="P:RestSharp.RestResponseBase.RawBytes">
2469 <summary>
2470 Response content
2471 </summary>
2472 </member>
2473 <member name="P:RestSharp.RestResponseBase.ResponseUri">
2474 <summary>
2475 The URL that actually responded to the content (different from request if redirected)
2476 </summary>
2477 </member>
2478 <member name="P:RestSharp.RestResponseBase.Server">
2479 <summary>
2480 HttpWebResponse.Server
2481 </summary>
2482 </member>
2483 <member name="P:RestSharp.RestResponseBase.Cookies">
2484 <summary>
2485 Cookies returned by server with the response
2486 </summary>
2487 </member>
2488 <member name="P:RestSharp.RestResponseBase.Headers">
2489 <summary>
2490 Headers returned by server with the response
2491 </summary>
2492 </member>
2493 <member name="P:RestSharp.RestResponseBase.ResponseStatus">
2494 <summary>
2495 Status of the request. Will return Error for transport errors.
2496 HTTP errors will still return ResponseStatus.Completed, check StatusCode instead
2497 </summary>
2498 </member>
2499 <member name="P:RestSharp.RestResponseBase.ErrorMessage">
2500 <summary>
2501 Transport or other non-HTTP error generated while attempting request
2502 </summary>
2503 </member>
2504 <member name="P:RestSharp.RestResponseBase.ErrorException">
2505 <summary>
2506 The exception thrown during the request, if any
2507 </summary>
2508 </member>
2509 <member name="T:RestSharp.RestResponse`1">
2510 <summary>
2511 Container for data sent back from API including deserialized data
2512 </summary>
2513 <typeparam name="T">Type of data to deserialize to</typeparam>
2514 </member>
2515 <member name="P:RestSharp.RestResponse`1.Data">
2516 <summary>
2517 Deserialized entity data
2518 </summary>
2519 </member>
2520 <member name="T:RestSharp.RestResponse">
2521 <summary>
2522 Container for data sent back from API
2523 </summary>
2524 </member>
2525 <member name="P:RestSharp.RestResponseCookie.Comment">
2526 <summary>
2527 Comment of the cookie
2528 </summary>
2529 </member>
2530 <member name="P:RestSharp.RestResponseCookie.CommentUri">
2531 <summary>
2532 Comment of the cookie
2533 </summary>
2534 </member>
2535 <member name="P:RestSharp.RestResponseCookie.Discard">
2536 <summary>
2537 Indicates whether the cookie should be discarded at the end of the session
2538 </summary>
2539 </member>
2540 <member name="P:RestSharp.RestResponseCookie.Domain">
2541 <summary>
2542 Domain of the cookie
2543 </summary>
2544 </member>
2545 <member name="P:RestSharp.RestResponseCookie.Expired">
2546 <summary>
2547 Indicates whether the cookie is expired
2548 </summary>
2549 </member>
2550 <member name="P:RestSharp.RestResponseCookie.Expires">
2551 <summary>
2552 Date and time that the cookie expires
2553 </summary>
2554 </member>
2555 <member name="P:RestSharp.RestResponseCookie.HttpOnly">
2556 <summary>
2557 Indicates that this cookie should only be accessed by the server
2558 </summary>
2559 </member>
2560 <member name="P:RestSharp.RestResponseCookie.Name">
2561 <summary>
2562 Name of the cookie
2563 </summary>
2564 </member>
2565 <member name="P:RestSharp.RestResponseCookie.Path">
2566 <summary>
2567 Path of the cookie
2568 </summary>
2569 </member>
2570 <member name="P:RestSharp.RestResponseCookie.Port">
2571 <summary>
2572 Port of the cookie
2573 </summary>
2574 </member>
2575 <member name="P:RestSharp.RestResponseCookie.Secure">
2576 <summary>
2577 Indicates that the cookie should only be sent over secure channels
2578 </summary>
2579 </member>
2580 <member name="P:RestSharp.RestResponseCookie.TimeStamp">
2581 <summary>
2582 Date and time the cookie was created
2583 </summary>
2584 </member>
2585 <member name="P:RestSharp.RestResponseCookie.Value">
2586 <summary>
2587 Value of the cookie
2588 </summary>
2589 </member>
2590 <member name="P:RestSharp.RestResponseCookie.Version">
2591 <summary>
2592 Version of the cookie
2593 </summary>
2594 </member>
2595 <member name="T:RestSharp.Serializers.DotNetXmlSerializer">
2596 <summary>
2597 Wrapper for System.Xml.Serialization.XmlSerializer.
2598 </summary>
2599 </member>
2600 <member name="M:RestSharp.Serializers.DotNetXmlSerializer.#ctor">
2601 <summary>
2602 Default constructor, does not specify namespace
2603 </summary>
2604 </member>
2605 <member name="M:RestSharp.Serializers.DotNetXmlSerializer.#ctor(System.String)">
2606 <summary>
2607 Specify the namespaced to be used when serializing
2608 </summary>
2609 <param name="namespace">XML namespace</param>
2610 </member>
2611 <member name="M:RestSharp.Serializers.DotNetXmlSerializer.Serialize(System.Object)">
2612 <summary>
2613 Serialize the object as XML
2614 </summary>
2615 <param name="obj">Object to serialize</param>
2616 <returns>XML as string</returns>
2617 </member>
2618 <member name="P:RestSharp.Serializers.DotNetXmlSerializer.RootElement">
2619 <summary>
2620 Name of the root element to use when serializing
2621 </summary>
2622 </member>
2623 <member name="P:RestSharp.Serializers.DotNetXmlSerializer.Namespace">
2624 <summary>
2625 XML namespace to use when serializing
2626 </summary>
2627 </member>
2628 <member name="P:RestSharp.Serializers.DotNetXmlSerializer.DateFormat">
2629 <summary>
2630 Format string to use when serializing dates
2631 </summary>
2632 </member>
2633 <member name="P:RestSharp.Serializers.DotNetXmlSerializer.ContentType">
2634 <summary>
2635 Content type for serialized content
2636 </summary>
2637 </member>
2638 <member name="P:RestSharp.Serializers.DotNetXmlSerializer.Encoding">
2639 <summary>
2640 Encoding for serialized content
2641 </summary>
2642 </member>
2643 <member name="T:RestSharp.Serializers.DotNetXmlSerializer.EncodingStringWriter">
2644 <summary>
2645 Need to subclass StringWriter in order to override Encoding
2646 </summary>
2647 </member>
2648 <member name="T:RestSharp.Serializers.JsonSerializer">
2649 <summary>
2650 Default JSON serializer for request bodies
2651 Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes
2652 </summary>
2653 </member>
2654 <member name="M:RestSharp.Serializers.JsonSerializer.#ctor">
2655 <summary>
2656 Default serializer
2657 </summary>
2658 </member>
2659 <member name="M:RestSharp.Serializers.JsonSerializer.Serialize(System.Object)">
2660 <summary>
2661 Serialize the object as JSON
2662 </summary>
2663 <param name="obj">Object to serialize</param>
2664 <returns>JSON as String</returns>
2665 </member>
2666 <member name="P:RestSharp.Serializers.JsonSerializer.DateFormat">
2667 <summary>
2668 Unused for JSON Serialization
2669 </summary>
2670 </member>
2671 <member name="P:RestSharp.Serializers.JsonSerializer.RootElement">
2672 <summary>
2673 Unused for JSON Serialization
2674 </summary>
2675 </member>
2676 <member name="P:RestSharp.Serializers.JsonSerializer.Namespace">
2677 <summary>
2678 Unused for JSON Serialization
2679 </summary>
2680 </member>
2681 <member name="P:RestSharp.Serializers.JsonSerializer.ContentType">
2682 <summary>
2683 Content type for serialized content
2684 </summary>
2685 </member>
2686 <member name="T:RestSharp.Serializers.SerializeAsAttribute">
2687 <summary>
2688 Allows control how class and property names and values are serialized by XmlSerializer
2689 Currently not supported with the JsonSerializer
2690 When specified at the property level the class-level specification is overridden
2691 </summary>
2692 </member>
2693 <member name="M:RestSharp.Serializers.SerializeAsAttribute.TransformName(System.String)">
2694 <summary>
2695 Called by the attribute when NameStyle is speficied
2696 </summary>
2697 <param name="input">The string to transform</param>
2698 <returns>String</returns>
2699 </member>
2700 <member name="P:RestSharp.Serializers.SerializeAsAttribute.Name">
2701 <summary>
2702 The name to use for the serialized element
2703 </summary>
2704 </member>
2705 <member name="P:RestSharp.Serializers.SerializeAsAttribute.Attribute">
2706 <summary>
2707 Sets the value to be serialized as an Attribute instead of an Element
2708 </summary>
2709 </member>
2710 <member name="P:RestSharp.Serializers.SerializeAsAttribute.Culture">
2711 <summary>
2712 The culture to use when serializing
2713 </summary>
2714 </member>
2715 <member name="P:RestSharp.Serializers.SerializeAsAttribute.NameStyle">
2716 <summary>
2717 Transforms the casing of the name based on the selected value.
2718 </summary>
2719 </member>
2720 <member name="P:RestSharp.Serializers.SerializeAsAttribute.Index">
2721 <summary>
2722 The order to serialize the element. Default is int.MaxValue.
2723 </summary>
2724 </member>
2725 <member name="T:RestSharp.Serializers.NameStyle">
2726 <summary>
2727 Options for transforming casing of element names
2728 </summary>
2729 </member>
2730 <member name="T:RestSharp.Serializers.XmlSerializer">
2731 <summary>
2732 Default XML Serializer
2733 </summary>
2734 </member>
2735 <member name="M:RestSharp.Serializers.XmlSerializer.#ctor">
2736 <summary>
2737 Default constructor, does not specify namespace
2738 </summary>
2739 </member>
2740 <member name="M:RestSharp.Serializers.XmlSerializer.#ctor(System.String)">
2741 <summary>
2742 Specify the namespaced to be used when serializing
2743 </summary>
2744 <param name="namespace">XML namespace</param>
2745 </member>
2746 <member name="M:RestSharp.Serializers.XmlSerializer.Serialize(System.Object)">
2747 <summary>
2748 Serialize the object as XML
2749 </summary>
2750 <param name="obj">Object to serialize</param>
2751 <returns>XML as string</returns>
2752 </member>
2753 <member name="M:RestSharp.Serializers.XmlSerializer.IsNumeric(System.Object)">
2754 <summary>
2755 Determines if a given object is numeric in any way
2756 (can be integer, double, null, etc).
2757 </summary>
2758 </member>
2759 <member name="P:RestSharp.Serializers.XmlSerializer.RootElement">
2760 <summary>
2761 Name of the root element to use when serializing
2762 </summary>
2763 </member>
2764 <member name="P:RestSharp.Serializers.XmlSerializer.Namespace">
2765 <summary>
2766 XML namespace to use when serializing
2767 </summary>
2768 </member>
2769 <member name="P:RestSharp.Serializers.XmlSerializer.DateFormat">
2770 <summary>
2771 Format string to use when serializing dates
2772 </summary>
2773 </member>
2774 <member name="P:RestSharp.Serializers.XmlSerializer.ContentType">
2775 <summary>
2776 Content type for serialized content
2777 </summary>
2778 </member>
2779 <member name="T:RestSharp.Validation.Require">
2780 <summary>
2781 Helper methods for validating required values
2782 </summary>
2783 </member>
2784 <member name="M:RestSharp.Validation.Require.Argument(System.String,System.Object)">
2785 <summary>
2786 Require a parameter to not be null
2787 </summary>
2788 <param name="argumentName">Name of the parameter</param>
2789 <param name="argumentValue">Value of the parameter</param>
2790 </member>
2791 <member name="T:RestSharp.JsonArray">
2792 <summary>
2793 Represents the json array.
2794 </summary>
2795 </member>
2796 <member name="M:RestSharp.JsonArray.#ctor">
2797 <summary>
2798 Initializes a new instance of the <see cref="T:RestSharp.JsonArray"/> class.
2799 </summary>
2800 </member>
2801 <member name="M:RestSharp.JsonArray.#ctor(System.Int32)">
2802 <summary>
2803 Initializes a new instance of the <see cref="T:RestSharp.JsonArray"/> class.
2804 </summary>
2805 <param name="capacity">The capacity of the json array.</param>
2806 </member>
2807 <member name="M:RestSharp.JsonArray.ToString">
2808 <summary>
2809 The json representation of the array.
2810 </summary>
2811 <returns>The json representation of the array.</returns>
2812 </member>
2813 <member name="T:RestSharp.JsonObject">
2814 <summary>
2815 Represents the json object.
2816 </summary>
2817 </member>
2818 <member name="F:RestSharp.JsonObject._members">
2819 <summary>
2820 The internal member dictionary.
2821 </summary>
2822 </member>
2823 <member name="M:RestSharp.JsonObject.#ctor">
2824 <summary>
2825 Initializes a new instance of <see cref="T:RestSharp.JsonObject"/>.
2826 </summary>
2827 </member>
2828 <member name="M:RestSharp.JsonObject.#ctor(System.Collections.Generic.IEqualityComparer{System.String})">
2829 <summary>
2830 Initializes a new instance of <see cref="T:RestSharp.JsonObject"/>.
2831 </summary>
2832 <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> implementation to use when comparing keys, or null to use the default <see cref="T:System.Collections.Generic.EqualityComparer`1"/> for the type of the key.</param>
2833 </member>
2834 <member name="M:RestSharp.JsonObject.Add(System.String,System.Object)">
2835 <summary>
2836 Adds the specified key.
2837 </summary>
2838 <param name="key">The key.</param>
2839 <param name="value">The value.</param>
2840 </member>
2841 <member name="M:RestSharp.JsonObject.ContainsKey(System.String)">
2842 <summary>
2843 Determines whether the specified key contains key.
2844 </summary>
2845 <param name="key">The key.</param>
2846 <returns>
2847 <c>true</c> if the specified key contains key; otherwise, <c>false</c>.
2848 </returns>
2849 </member>
2850 <member name="M:RestSharp.JsonObject.Remove(System.String)">
2851 <summary>
2852 Removes the specified key.
2853 </summary>
2854 <param name="key">The key.</param>
2855 <returns></returns>
2856 </member>
2857 <member name="M:RestSharp.JsonObject.TryGetValue(System.String,System.Object@)">
2858 <summary>
2859 Tries the get value.
2860 </summary>
2861 <param name="key">The key.</param>
2862 <param name="value">The value.</param>
2863 <returns></returns>
2864 </member>
2865 <member name="M:RestSharp.JsonObject.Add(System.Collections.Generic.KeyValuePair{System.String,System.Object})">
2866 <summary>
2867 Adds the specified item.
2868 </summary>
2869 <param name="item">The item.</param>
2870 </member>
2871 <member name="M:RestSharp.JsonObject.Clear">
2872 <summary>
2873 Clears this instance.
2874 </summary>
2875 </member>
2876 <member name="M:RestSharp.JsonObject.Contains(System.Collections.Generic.KeyValuePair{System.String,System.Object})">
2877 <summary>
2878 Determines whether [contains] [the specified item].
2879 </summary>
2880 <param name="item">The item.</param>
2881 <returns>
2882 <c>true</c> if [contains] [the specified item]; otherwise, <c>false</c>.
2883 </returns>
2884 </member>
2885 <member name="M:RestSharp.JsonObject.CopyTo(System.Collections.Generic.KeyValuePair{System.String,System.Object}[],System.Int32)">
2886 <summary>
2887 Copies to.
2888 </summary>
2889 <param name="array">The array.</param>
2890 <param name="arrayIndex">Index of the array.</param>
2891 </member>
2892 <member name="M:RestSharp.JsonObject.Remove(System.Collections.Generic.KeyValuePair{System.String,System.Object})">
2893 <summary>
2894 Removes the specified item.
2895 </summary>
2896 <param name="item">The item.</param>
2897 <returns></returns>
2898 </member>
2899 <member name="M:RestSharp.JsonObject.GetEnumerator">
2900 <summary>
2901 Gets the enumerator.
2902 </summary>
2903 <returns></returns>
2904 </member>
2905 <member name="M:RestSharp.JsonObject.System#Collections#IEnumerable#GetEnumerator">
2906 <summary>
2907 Returns an enumerator that iterates through a collection.
2908 </summary>
2909 <returns>
2910 An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
2911 </returns>
2912 </member>
2913 <member name="M:RestSharp.JsonObject.ToString">
2914 <summary>
2915 Returns a json <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
2916 </summary>
2917 <returns>
2918 A json <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
2919 </returns>
2920 </member>
2921 <member name="P:RestSharp.JsonObject.Item(System.Int32)">
2922 <summary>
2923 Gets the <see cref="T:System.Object"/> at the specified index.
2924 </summary>
2925 <value></value>
2926 </member>
2927 <member name="P:RestSharp.JsonObject.Keys">
2928 <summary>
2929 Gets the keys.
2930 </summary>
2931 <value>The keys.</value>
2932 </member>
2933 <member name="P:RestSharp.JsonObject.Values">
2934 <summary>
2935 Gets the values.
2936 </summary>
2937 <value>The values.</value>
2938 </member>
2939 <member name="P:RestSharp.JsonObject.Item(System.String)">
2940 <summary>
2941 Gets or sets the <see cref="T:System.Object"/> with the specified key.
2942 </summary>
2943 <value></value>
2944 </member>
2945 <member name="P:RestSharp.JsonObject.Count">
2946 <summary>
2947 Gets the count.
2948 </summary>
2949 <value>The count.</value>
2950 </member>
2951 <member name="P:RestSharp.JsonObject.IsReadOnly">
2952 <summary>
2953 Gets a value indicating whether this instance is read only.
2954 </summary>
2955 <value>
2956 <c>true</c> if this instance is read only; otherwise, <c>false</c>.
2957 </value>
2958 </member>
2959 <member name="T:RestSharp.SimpleJson">
2960 <summary>
2961 This class encodes and decodes JSON strings.
2962 Spec. details, see http://www.json.org/
2963
2964 JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList&lt;object>) and JsonObject(IDictionary&lt;string,object>).
2965 All numbers are parsed to doubles.
2966 </summary>
2967 </member>
2968 <member name="M:RestSharp.SimpleJson.DeserializeObject(System.String)">
2969 <summary>
2970 Parses the string json into a value
2971 </summary>
2972 <param name="json">A JSON string.</param>
2973 <returns>An IList&lt;object>, a IDictionary&lt;string,object>, a double, a string, null, true, or false</returns>
2974 </member>
2975 <member name="M:RestSharp.SimpleJson.TryDeserializeObject(System.String,System.Object@)">
2976 <summary>
2977 Try parsing the json string into a value.
2978 </summary>
2979 <param name="json">
2980 A JSON string.
2981 </param>
2982 <param name="obj">
2983 The object.
2984 </param>
2985 <returns>
2986 Returns true if successfull otherwise false.
2987 </returns>
2988 </member>
2989 <member name="M:RestSharp.SimpleJson.SerializeObject(System.Object,RestSharp.IJsonSerializerStrategy)">
2990 <summary>
2991 Converts a IDictionary&lt;string,object> / IList&lt;object> object into a JSON string
2992 </summary>
2993 <param name="json">A IDictionary&lt;string,object> / IList&lt;object></param>
2994 <param name="jsonSerializerStrategy">Serializer strategy to use</param>
2995 <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
2996 </member>
2997 <member name="M:RestSharp.SimpleJson.IsNumeric(System.Object)">
2998 <summary>
2999 Determines if a given object is numeric in any way
3000 (can be integer, double, null, etc).
3001 </summary>
3002 </member>
3003 <member name="T:RestSharp.Validation.Validate">
3004 <summary>
3005 Helper methods for validating values
3006 </summary>
3007 </member>
3008 <member name="M:RestSharp.Validation.Validate.IsBetween(System.Int32,System.Int32,System.Int32)">
3009 <summary>
3010 Validate an integer value is between the specified values (exclusive of min/max)
3011 </summary>
3012 <param name="value">Value to validate</param>
3013 <param name="min">Exclusive minimum value</param>
3014 <param name="max">Exclusive maximum value</param>
3015 </member>
3016 <member name="M:RestSharp.Validation.Validate.IsValidLength(System.String,System.Int32)">
3017 <summary>
3018 Validate a string length
3019 </summary>
3020 <param name="value">String to be validated</param>
3021 <param name="maxSize">Maximum length of the string</param>
3022 </member>
3023 </members>
3024</doc>
diff --git a/bin/config-include/osslEnable.ini b/bin/config-include/osslEnable.ini
index 45eddf7..dca1c0c 100644
--- a/bin/config-include/osslEnable.ini
+++ b/bin/config-include/osslEnable.ini
@@ -236,4 +236,5 @@
236 Allow_osKickAvatar = ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER 236 Allow_osKickAvatar = ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
237 Allow_osRevokeScriptPermissions = false 237 Allow_osRevokeScriptPermissions = false
238 Allow_osTeleportAgent = ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER 238 Allow_osTeleportAgent = ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
239 Allow_osTeleportObject = ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
239 240
diff --git a/bin/lib32/libode.so b/bin/lib32/libode.so
index daf6a4d..3e08c42 100755
--- a/bin/lib32/libode.so
+++ b/bin/lib32/libode.so
Binary files differ
diff --git a/bin/lib32/ode.dll b/bin/lib32/ode.dll
index 62aa4df..ddffcb3 100755
--- a/bin/lib32/ode.dll
+++ b/bin/lib32/ode.dll
Binary files differ
diff --git a/bin/lib64/libode-x86_64.so b/bin/lib64/libode-x86_64.so
index d8f3c20..2f616dd 100755
--- a/bin/lib64/libode-x86_64.so
+++ b/bin/lib64/libode-x86_64.so
Binary files differ
diff --git a/bin/lib64/ode.dll b/bin/lib64/ode.dll
index 543b900..0d6edbe 100755
--- a/bin/lib64/ode.dll
+++ b/bin/lib64/ode.dll
Binary files differ
diff --git a/bin/netcd.dll b/bin/netcd.dll
new file mode 100644
index 0000000..d1f7330
--- /dev/null
+++ b/bin/netcd.dll
Binary files differ
diff --git a/prebuild.xml b/prebuild.xml
index cb39e18..c087def 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -497,6 +497,7 @@
497 <Reference name="OpenSim.Framework.Monitoring"/> 497 <Reference name="OpenSim.Framework.Monitoring"/>
498 <Reference name="OpenSim.Framework.Servers"/> 498 <Reference name="OpenSim.Framework.Servers"/>
499 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 499 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
500 <Reference name="Mono.Posix" path="../../../bin/"/>
500 <Reference name="Nini" path="../../../bin/"/> 501 <Reference name="Nini" path="../../../bin/"/>
501 <Reference name="log4net" path="../../../bin/"/> 502 <Reference name="log4net" path="../../../bin/"/>
502 503
@@ -1464,6 +1465,7 @@
1464 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/> 1465 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1465 <Reference name="OpenMetaverse" path="../../../bin/"/> 1466 <Reference name="OpenMetaverse" path="../../../bin/"/>
1466 <Reference name="Mono.Data.SqliteClient" path="../../../bin/"/> 1467 <Reference name="Mono.Data.SqliteClient" path="../../../bin/"/>
1468 <Reference name="netcd" path="../../../bin/"/>
1467 <Reference name="OpenSim.Capabilities"/> 1469 <Reference name="OpenSim.Capabilities"/>
1468 <Reference name="OpenSim.Framework"/> 1470 <Reference name="OpenSim.Framework"/>
1469 <Reference name="OpenSim.Data"/> 1471 <Reference name="OpenSim.Data"/>