PageRenderTime 331ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/Aurora/Framework/SceneInfo/ScenePermissions.cs

https://bitbucket.org/VirtualReality/aurora-sim
C# | 1579 lines | 1291 code | 183 blank | 105 comment | 300 complexity | b4aaf55062807d2f89bcf708bfc93617 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. /*
  2. * Copyright (c) Contributors, http://aurora-sim.org/, 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 Aurora-Sim 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. using System;
  28. using System.Collections.Generic;
  29. using System.Linq;
  30. using OpenMetaverse;
  31. namespace Aurora.Framework
  32. {
  33. #region Delegates
  34. public delegate uint GenerateClientFlagsHandler(UUID userID, ISceneChildEntity part);
  35. public delegate void SetBypassPermissionsHandler(bool value);
  36. public delegate bool BypassPermissionsHandler();
  37. public delegate bool PropagatePermissionsHandler();
  38. public delegate bool RezObjectHandler(
  39. int objectCount, UUID owner, Vector3 objectPosition, IScene scene, out string reason);
  40. public delegate bool DeleteObjectHandler(UUID objectID, UUID deleter, IScene scene);
  41. public delegate bool TakeObjectHandler(UUID objectID, UUID stealer, IScene scene);
  42. public delegate bool TakeCopyObjectHandler(UUID objectID, UUID userID, IScene inScene);
  43. public delegate bool DuplicateObjectHandler(
  44. int objectCount, UUID objectID, UUID owner, IScene scene, Vector3 objectPosition);
  45. public delegate bool EditObjectHandler(UUID objectID, UUID editorID, IScene scene);
  46. public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID, IScene scene);
  47. public delegate bool MoveObjectHandler(UUID objectID, UUID moverID, IScene scene);
  48. public delegate bool ObjectEntryHandler(UUID objectID, bool enteringRegion, Vector3 newPoint, UUID OwnerID);
  49. public delegate bool ReturnObjectsHandler(ILandObject land, UUID user, List<ISceneEntity> objects, IScene scene);
  50. public delegate bool InstantMessageHandler(UUID user, UUID target, IScene startScene);
  51. public delegate bool InventoryTransferHandler(UUID user, UUID target, IScene startScene);
  52. public delegate bool ViewScriptHandler(UUID script, UUID objectID, UUID user, IScene scene);
  53. public delegate bool ViewNotecardHandler(UUID script, UUID objectID, UUID user, IScene scene);
  54. public delegate bool EditScriptHandler(UUID script, UUID objectID, UUID user, IScene scene);
  55. public delegate bool EditNotecardHandler(UUID notecard, UUID objectID, UUID user, IScene scene);
  56. public delegate bool RunScriptHandler(UUID script, UUID objectID, UUID user, IScene scene);
  57. public delegate bool CompileScriptHandler(UUID ownerUUID, string scriptType, IScene scene);
  58. public delegate bool StartScriptHandler(UUID script, UUID user, IScene scene);
  59. public delegate bool StopScriptHandler(UUID script, UUID user, IScene scene);
  60. public delegate bool ResetScriptHandler(UUID prim, UUID script, UUID user, IScene scene);
  61. public delegate bool TerraformLandHandler(UUID user, Vector3 position, IScene requestFromScene);
  62. public delegate bool RunConsoleCommandHandler(UUID user, IScene requestFromScene);
  63. public delegate bool IssueEstateCommandHandler(UUID user, IScene requestFromScene, bool ownerCommand);
  64. public delegate bool IsGodHandler(UUID user, IScene requestFromScene);
  65. public delegate bool CanGodTpHandler(UUID user, UUID target);
  66. public delegate bool IsAdministratorHandler(UUID user);
  67. public delegate bool EditParcelPropertiesHandler(UUID user, ILandObject parcel, GroupPowers p, IScene scene);
  68. public delegate bool EditParcelHandler(UUID user, ILandObject parcel, IScene scene);
  69. public delegate bool SellParcelHandler(UUID user, ILandObject parcel, IScene scene);
  70. public delegate bool AbandonParcelHandler(UUID user, ILandObject parcel, IScene scene);
  71. public delegate bool ReclaimParcelHandler(UUID user, ILandObject parcel, IScene scene);
  72. public delegate bool DeedParcelHandler(UUID user, ILandObject parcel, IScene scene);
  73. public delegate bool DeedObjectHandler(UUID user, UUID group, IScene scene);
  74. public delegate bool BuyLandHandler(UUID user, ILandObject parcel, IScene scene);
  75. public delegate bool LinkObjectHandler(UUID user, UUID objectID);
  76. public delegate bool DelinkObjectHandler(UUID user, UUID objectID);
  77. public delegate bool CreateObjectInventoryHandler(int invType, UUID objectID, UUID userID);
  78. public delegate bool CopyObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
  79. public delegate bool DeleteObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
  80. public delegate bool CreateUserInventoryHandler(int invType, UUID userID);
  81. public delegate bool EditUserInventoryHandler(UUID itemID, UUID userID);
  82. public delegate bool CopyUserInventoryHandler(UUID itemID, UUID userID);
  83. public delegate bool DeleteUserInventoryHandler(UUID itemID, UUID userID);
  84. public delegate bool TeleportHandler(
  85. UUID userID, IScene scene, Vector3 Position, uint TeleportFlags, out Vector3 newPosition, out string reason);
  86. public delegate bool OutgoingRemoteTeleport(UUID userID, IScene scene, out string reason);
  87. public delegate bool IncomingAgentHandler(IScene scene, AgentCircuitData agent, bool isRootAgent, out string reason);
  88. public delegate bool PushObjectHandler(UUID userID, ILandObject parcel);
  89. public delegate bool EditParcelAccessListHandler(UUID userID, ILandObject parcel, uint flags);
  90. public delegate bool GenericParcelHandler(UUID user, ILandObject parcel, ulong groupPowers);
  91. public delegate bool TakeLandmark(UUID user);
  92. public delegate bool ControlPrimMediaHandler(UUID userID, UUID primID, int face);
  93. public delegate bool InteractWithPrimMediaHandler(UUID userID, UUID primID, int face);
  94. #endregion
  95. public class ScenePermissions
  96. {
  97. private readonly IScene m_scene;
  98. public ScenePermissions(IScene scene)
  99. {
  100. m_scene = scene;
  101. }
  102. #region Events
  103. public event GenerateClientFlagsHandler OnGenerateClientFlags;
  104. public event SetBypassPermissionsHandler OnSetBypassPermissions;
  105. public event BypassPermissionsHandler OnBypassPermissions;
  106. public event PropagatePermissionsHandler OnPropagatePermissions;
  107. public event RezObjectHandler OnRezObject;
  108. public event DeleteObjectHandler OnDeleteObject;
  109. public event TakeObjectHandler OnTakeObject;
  110. public event TakeCopyObjectHandler OnTakeCopyObject;
  111. public event DuplicateObjectHandler OnDuplicateObject;
  112. public event EditObjectHandler OnEditObject;
  113. public event EditObjectInventoryHandler OnEditObjectInventory;
  114. public event MoveObjectHandler OnMoveObject;
  115. public event ObjectEntryHandler OnObjectEntry;
  116. public event ReturnObjectsHandler OnReturnObjects;
  117. public event InstantMessageHandler OnInstantMessage;
  118. public event CanGodTpHandler OnCanGodTp;
  119. public event InventoryTransferHandler OnInventoryTransfer;
  120. public event ViewScriptHandler OnViewScript;
  121. public event ViewNotecardHandler OnViewNotecard;
  122. public event EditScriptHandler OnEditScript;
  123. public event EditNotecardHandler OnEditNotecard;
  124. public event RunScriptHandler OnRunScript;
  125. public event CompileScriptHandler OnCompileScript;
  126. public event StartScriptHandler OnStartScript;
  127. public event StopScriptHandler OnStopScript;
  128. public event ResetScriptHandler OnResetScript;
  129. public event TerraformLandHandler OnTerraformLand;
  130. public event RunConsoleCommandHandler OnRunConsoleCommand;
  131. public event IssueEstateCommandHandler OnIssueEstateCommand;
  132. public event IsGodHandler OnIsGod;
  133. public event IsAdministratorHandler OnIsAdministrator;
  134. public event EditParcelHandler OnEditParcel;
  135. public event EditParcelHandler OnSubdivideParcel;
  136. public event EditParcelPropertiesHandler OnEditParcelProperties;
  137. public event SellParcelHandler OnSellParcel;
  138. public event AbandonParcelHandler OnAbandonParcel;
  139. public event ReclaimParcelHandler OnReclaimParcel;
  140. public event DeedParcelHandler OnDeedParcel;
  141. public event DeedObjectHandler OnDeedObject;
  142. public event BuyLandHandler OnBuyLand;
  143. public event LinkObjectHandler OnLinkObject;
  144. public event DelinkObjectHandler OnDelinkObject;
  145. public event DelinkObjectHandler OnIsInGroup;
  146. public event CreateObjectInventoryHandler OnCreateObjectInventory;
  147. public event CopyObjectInventoryHandler OnCopyObjectInventory;
  148. public event DeleteObjectInventoryHandler OnDeleteObjectInventory;
  149. public event CreateUserInventoryHandler OnCreateUserInventory;
  150. public event EditUserInventoryHandler OnEditUserInventory;
  151. public event CopyUserInventoryHandler OnCopyUserInventory;
  152. public event DeleteUserInventoryHandler OnDeleteUserInventory;
  153. public event OutgoingRemoteTeleport OnAllowedOutgoingLocalTeleport;
  154. public event OutgoingRemoteTeleport OnAllowedOutgoingRemoteTeleport;
  155. public event IncomingAgentHandler OnAllowIncomingAgent;
  156. public event TeleportHandler OnAllowedIncomingTeleport;
  157. public event PushObjectHandler OnPushObject;
  158. public event PushObjectHandler OnViewObjectOwners;
  159. public event EditParcelAccessListHandler OnEditParcelAccessList;
  160. public event GenericParcelHandler OnGenericParcelHandler;
  161. public event TakeLandmark OnTakeLandmark;
  162. public event TakeLandmark OnSetHomePoint;
  163. public event ControlPrimMediaHandler OnControlPrimMedia;
  164. public event InteractWithPrimMediaHandler OnInteractWithPrimMedia;
  165. #endregion
  166. #region Object Permission Checks
  167. public uint GenerateClientFlags(UUID userID, ISceneChildEntity part)
  168. {
  169. // libomv will moan about PrimFlags.ObjectYouOfficer being
  170. // obsolete...
  171. #pragma warning disable 0612
  172. const PrimFlags DEFAULT_FLAGS =
  173. PrimFlags.ObjectModify |
  174. PrimFlags.ObjectCopy |
  175. PrimFlags.ObjectMove |
  176. PrimFlags.ObjectTransfer |
  177. PrimFlags.ObjectYouOwner |
  178. PrimFlags.ObjectAnyOwner |
  179. PrimFlags.ObjectOwnerModify |
  180. PrimFlags.ObjectYouOfficer;
  181. #pragma warning restore 0612
  182. if (part == null)
  183. return 0;
  184. uint perms = part.GetEffectiveObjectFlags() | (uint) DEFAULT_FLAGS;
  185. GenerateClientFlagsHandler handlerGenerateClientFlags = OnGenerateClientFlags;
  186. if (handlerGenerateClientFlags != null)
  187. {
  188. Delegate[] list = handlerGenerateClientFlags.GetInvocationList();
  189. #if (!ISWIN)
  190. foreach (GenerateClientFlagsHandler handler in list)
  191. perms = perms & handler(userID, part);
  192. #else
  193. perms = list.Cast<GenerateClientFlagsHandler>().Aggregate(perms, (current, check) => current & check(userID, part));
  194. #endif
  195. }
  196. return perms;
  197. }
  198. public void SetBypassPermissions(bool value)
  199. {
  200. SetBypassPermissionsHandler handler = OnSetBypassPermissions;
  201. if (handler != null)
  202. handler(value);
  203. }
  204. public bool BypassPermissions()
  205. {
  206. BypassPermissionsHandler handler = OnBypassPermissions;
  207. if (handler != null)
  208. {
  209. Delegate[] list = handler.GetInvocationList();
  210. #if (!ISWIN)
  211. foreach (BypassPermissionsHandler h in list)
  212. {
  213. if (h() == false) return false;
  214. }
  215. return true;
  216. #else
  217. return list.Cast<BypassPermissionsHandler>().All(h => h() != false);
  218. #endif
  219. }
  220. return true;
  221. }
  222. public bool PropagatePermissions()
  223. {
  224. PropagatePermissionsHandler handler = OnPropagatePermissions;
  225. if (handler != null)
  226. {
  227. Delegate[] list = handler.GetInvocationList();
  228. #if (!ISWIN)
  229. foreach (PropagatePermissionsHandler h in list)
  230. {
  231. if (h() == false) return false;
  232. }
  233. return true;
  234. #else
  235. return list.Cast<PropagatePermissionsHandler>().All(h => h() != false);
  236. #endif
  237. }
  238. return true;
  239. }
  240. public bool CanReclaimParcel(UUID user, ILandObject parcel)
  241. {
  242. ReclaimParcelHandler handler = OnReclaimParcel;
  243. if (handler != null)
  244. {
  245. Delegate[] list = handler.GetInvocationList();
  246. #if (!ISWIN)
  247. foreach (ReclaimParcelHandler h in list)
  248. {
  249. if (h(user, parcel, m_scene) == false) return false;
  250. }
  251. return true;
  252. #else
  253. return list.Cast<ReclaimParcelHandler>().All(h => h(user, parcel, m_scene) != false);
  254. #endif
  255. }
  256. return true;
  257. }
  258. public bool CanDeedParcel(UUID user, ILandObject parcel)
  259. {
  260. DeedParcelHandler handler = OnDeedParcel;
  261. if (handler != null)
  262. {
  263. Delegate[] list = handler.GetInvocationList();
  264. #if (!ISWIN)
  265. foreach (DeedParcelHandler h in list)
  266. {
  267. if (h(user, parcel, m_scene) == false) return false;
  268. }
  269. return true;
  270. #else
  271. return list.Cast<DeedParcelHandler>().All(h => h(user, parcel, m_scene) != false);
  272. #endif
  273. }
  274. return true;
  275. }
  276. public bool CanDeedObject(UUID user, UUID group)
  277. {
  278. DeedObjectHandler handler = OnDeedObject;
  279. if (handler != null)
  280. {
  281. Delegate[] list = handler.GetInvocationList();
  282. #if (!ISWIN)
  283. foreach (DeedObjectHandler h in list)
  284. {
  285. if (h(user, group, m_scene) == false) return false;
  286. }
  287. return true;
  288. #else
  289. return list.Cast<DeedObjectHandler>().All(h => h(user, group, m_scene) != false);
  290. #endif
  291. }
  292. return true;
  293. }
  294. public bool CanBuyLand(UUID user, ILandObject parcel)
  295. {
  296. BuyLandHandler handler = OnBuyLand;
  297. if (handler != null)
  298. {
  299. Delegate[] list = handler.GetInvocationList();
  300. #if (!ISWIN)
  301. foreach (BuyLandHandler h in list)
  302. {
  303. if (h(user, parcel, m_scene) == false) return false;
  304. }
  305. return true;
  306. #else
  307. return list.Cast<BuyLandHandler>().All(h => h(user, parcel, m_scene) != false);
  308. #endif
  309. }
  310. return true;
  311. }
  312. public bool CanLinkObject(UUID user, UUID objectID)
  313. {
  314. LinkObjectHandler handler = OnLinkObject;
  315. if (handler != null)
  316. {
  317. Delegate[] list = handler.GetInvocationList();
  318. #if (!ISWIN)
  319. foreach (LinkObjectHandler h in list)
  320. {
  321. if (h(user, objectID) == false) return false;
  322. }
  323. return true;
  324. #else
  325. return list.Cast<LinkObjectHandler>().All(h => h(user, objectID) != false);
  326. #endif
  327. }
  328. return true;
  329. }
  330. public bool CanDelinkObject(UUID user, UUID objectID)
  331. {
  332. DelinkObjectHandler handler = OnDelinkObject;
  333. if (handler != null)
  334. {
  335. Delegate[] list = handler.GetInvocationList();
  336. #if (!ISWIN)
  337. foreach (DelinkObjectHandler h in list)
  338. {
  339. if (h(user, objectID) == false) return false;
  340. }
  341. return true;
  342. #else
  343. return list.Cast<DelinkObjectHandler>().All(h => h(user, objectID) != false);
  344. #endif
  345. }
  346. return true;
  347. }
  348. public bool IsInGroup(UUID user, UUID groupID)
  349. {
  350. DelinkObjectHandler handler = OnIsInGroup;
  351. if (handler != null)
  352. {
  353. Delegate[] list = handler.GetInvocationList();
  354. #if (!ISWIN)
  355. foreach (DelinkObjectHandler h in list)
  356. {
  357. if (h(user, groupID) == false) return false;
  358. }
  359. return true;
  360. #else
  361. return list.Cast<DelinkObjectHandler>().All(h => h(user, groupID) != false);
  362. #endif
  363. }
  364. return true;
  365. }
  366. #region REZ OBJECT
  367. public bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, out string reason)
  368. {
  369. RezObjectHandler handler = OnRezObject;
  370. if (handler != null)
  371. {
  372. Delegate[] list = handler.GetInvocationList();
  373. foreach (RezObjectHandler h in list)
  374. {
  375. if (h(objectCount, owner, objectPosition, m_scene, out reason) == false)
  376. return false;
  377. }
  378. }
  379. reason = "";
  380. return true;
  381. }
  382. #endregion
  383. #region DELETE OBJECT
  384. public bool CanDeleteObject(UUID objectID, UUID deleter)
  385. {
  386. DeleteObjectHandler handler = OnDeleteObject;
  387. if (handler != null)
  388. {
  389. Delegate[] list = handler.GetInvocationList();
  390. #if (!ISWIN)
  391. foreach (DeleteObjectHandler h in list)
  392. {
  393. if (h(objectID, deleter, m_scene) == false) return false;
  394. }
  395. return true;
  396. #else
  397. return list.Cast<DeleteObjectHandler>().All(h => h(objectID, deleter, m_scene) != false);
  398. #endif
  399. }
  400. return true;
  401. }
  402. #endregion
  403. #region TAKE OBJECT
  404. public bool CanTakeObject(UUID objectID, UUID AvatarTakingUUID)
  405. {
  406. TakeObjectHandler handler = OnTakeObject;
  407. if (handler != null)
  408. {
  409. Delegate[] list = handler.GetInvocationList();
  410. #if (!ISWIN)
  411. foreach (TakeObjectHandler h in list)
  412. {
  413. if (h(objectID, AvatarTakingUUID, m_scene) == false) return false;
  414. }
  415. return true;
  416. #else
  417. return list.Cast<TakeObjectHandler>().All(h => h(objectID, AvatarTakingUUID, m_scene) != false);
  418. #endif
  419. }
  420. return true;
  421. }
  422. #endregion
  423. #region TAKE COPY OBJECT
  424. public bool CanTakeCopyObject(UUID objectID, UUID userID)
  425. {
  426. TakeCopyObjectHandler handler = OnTakeCopyObject;
  427. if (handler != null)
  428. {
  429. Delegate[] list = handler.GetInvocationList();
  430. #if (!ISWIN)
  431. foreach (TakeCopyObjectHandler h in list)
  432. {
  433. if (h(objectID, userID, m_scene) == false) return false;
  434. }
  435. return true;
  436. #else
  437. return list.Cast<TakeCopyObjectHandler>().All(h => h(objectID, userID, m_scene) != false);
  438. #endif
  439. }
  440. return true;
  441. }
  442. #endregion
  443. #region DUPLICATE OBJECT
  444. public bool CanDuplicateObject(int objectCount, UUID objectID, UUID owner, Vector3 objectPosition)
  445. {
  446. DuplicateObjectHandler handler = OnDuplicateObject;
  447. if (handler != null)
  448. {
  449. Delegate[] list = handler.GetInvocationList();
  450. #if (!ISWIN)
  451. foreach (DuplicateObjectHandler h in list)
  452. {
  453. if (h(objectCount, objectID, owner, m_scene, objectPosition) == false) return false;
  454. }
  455. return true;
  456. #else
  457. return list.Cast<DuplicateObjectHandler>().All(h => h(objectCount, objectID, owner, m_scene, objectPosition) != false);
  458. #endif
  459. }
  460. return true;
  461. }
  462. #endregion
  463. #region EDIT OBJECT
  464. public bool CanEditObject(UUID objectID, UUID editorID)
  465. {
  466. EditObjectHandler handler = OnEditObject;
  467. if (handler != null)
  468. {
  469. Delegate[] list = handler.GetInvocationList();
  470. #if (!ISWIN)
  471. foreach (EditObjectHandler h in list)
  472. {
  473. if (h(objectID, editorID, m_scene) == false) return false;
  474. }
  475. return true;
  476. #else
  477. return list.Cast<EditObjectHandler>().All(h => h(objectID, editorID, m_scene) != false);
  478. #endif
  479. }
  480. return true;
  481. }
  482. public bool CanEditObjectInventory(UUID objectID, UUID editorID)
  483. {
  484. EditObjectInventoryHandler handler = OnEditObjectInventory;
  485. if (handler != null)
  486. {
  487. Delegate[] list = handler.GetInvocationList();
  488. #if (!ISWIN)
  489. foreach (EditObjectInventoryHandler h in list)
  490. {
  491. if (h(objectID, editorID, m_scene) == false) return false;
  492. }
  493. return true;
  494. #else
  495. return list.Cast<EditObjectInventoryHandler>().All(h => h(objectID, editorID, m_scene) != false);
  496. #endif
  497. }
  498. return true;
  499. }
  500. #endregion
  501. #region MOVE OBJECT
  502. public bool CanMoveObject(UUID objectID, UUID moverID)
  503. {
  504. MoveObjectHandler handler = OnMoveObject;
  505. if (handler != null)
  506. {
  507. Delegate[] list = handler.GetInvocationList();
  508. #if (!ISWIN)
  509. foreach (MoveObjectHandler h in list)
  510. {
  511. if (h(objectID, moverID, m_scene) == false) return false;
  512. }
  513. return true;
  514. #else
  515. return list.Cast<MoveObjectHandler>().All(h => h(objectID, moverID, m_scene) != false);
  516. #endif
  517. }
  518. return true;
  519. }
  520. #endregion
  521. #region OBJECT ENTRY
  522. public bool CanObjectEntry(UUID objectID, bool enteringRegion, Vector3 newPoint, UUID OwnerID)
  523. {
  524. ObjectEntryHandler handler = OnObjectEntry;
  525. if (handler != null)
  526. {
  527. Delegate[] list = handler.GetInvocationList();
  528. #if (!ISWIN)
  529. foreach (ObjectEntryHandler h in list)
  530. {
  531. if (h(objectID, enteringRegion, newPoint, OwnerID) == false) return false;
  532. }
  533. return true;
  534. #else
  535. return list.Cast<ObjectEntryHandler>().All(h => h(objectID, enteringRegion, newPoint, OwnerID) != false);
  536. #endif
  537. }
  538. return true;
  539. }
  540. #endregion
  541. #region RETURN OBJECT
  542. public bool CanReturnObjects(ILandObject land, UUID user, List<ISceneEntity> objects)
  543. {
  544. ReturnObjectsHandler handler = OnReturnObjects;
  545. if (handler != null)
  546. {
  547. Delegate[] list = handler.GetInvocationList();
  548. #if (!ISWIN)
  549. foreach (ReturnObjectsHandler h in list)
  550. {
  551. if (h(land, user, objects, m_scene) == false) return false;
  552. }
  553. return true;
  554. #else
  555. return list.Cast<ReturnObjectsHandler>().All(h => h(land, user, objects, m_scene) != false);
  556. #endif
  557. }
  558. return true;
  559. }
  560. #endregion
  561. #region INSTANT MESSAGE
  562. public bool CanInstantMessage(UUID user, UUID target)
  563. {
  564. InstantMessageHandler handler = OnInstantMessage;
  565. if (handler != null)
  566. {
  567. Delegate[] list = handler.GetInvocationList();
  568. #if (!ISWIN)
  569. foreach (InstantMessageHandler h in list)
  570. {
  571. if (h(user, target, m_scene) == false) return false;
  572. }
  573. return true;
  574. #else
  575. return list.Cast<InstantMessageHandler>().All(h => h(user, target, m_scene) != false);
  576. #endif
  577. }
  578. return true;
  579. }
  580. /// <summary>
  581. /// Checks whether the user is in god mode
  582. /// </summary>
  583. /// <param name = "user"></param>
  584. /// <returns></returns>
  585. public bool CanGodTeleport(UUID user, UUID target)
  586. {
  587. CanGodTpHandler handler = OnCanGodTp;
  588. if (handler != null)
  589. {
  590. Delegate[] list = handler.GetInvocationList();
  591. #if (!ISWIN)
  592. foreach (CanGodTpHandler h in list)
  593. {
  594. if (h(user, target) == false) return false;
  595. }
  596. return true;
  597. #else
  598. return list.Cast<CanGodTpHandler>().All(h => h(user, target) != false);
  599. #endif
  600. }
  601. return true;
  602. }
  603. #endregion
  604. #region INVENTORY TRANSFER
  605. public bool CanInventoryTransfer(UUID user, UUID target)
  606. {
  607. InventoryTransferHandler handler = OnInventoryTransfer;
  608. if (handler != null)
  609. {
  610. Delegate[] list = handler.GetInvocationList();
  611. #if (!ISWIN)
  612. foreach (InventoryTransferHandler h in list)
  613. {
  614. if (h(user, target, m_scene) == false) return false;
  615. }
  616. return true;
  617. #else
  618. return list.Cast<InventoryTransferHandler>().All(h => h(user, target, m_scene) != false);
  619. #endif
  620. }
  621. return true;
  622. }
  623. #endregion
  624. #region VIEW SCRIPT
  625. public bool CanViewScript(UUID script, UUID objectID, UUID user)
  626. {
  627. ViewScriptHandler handler = OnViewScript;
  628. if (handler != null)
  629. {
  630. Delegate[] list = handler.GetInvocationList();
  631. #if (!ISWIN)
  632. foreach (ViewScriptHandler h in list)
  633. {
  634. if (h(script, objectID, user, m_scene) == false) return false;
  635. }
  636. return true;
  637. #else
  638. return list.Cast<ViewScriptHandler>().All(h => h(script, objectID, user, m_scene) != false);
  639. #endif
  640. }
  641. return true;
  642. }
  643. public bool CanViewNotecard(UUID script, UUID objectID, UUID user)
  644. {
  645. ViewNotecardHandler handler = OnViewNotecard;
  646. if (handler != null)
  647. {
  648. Delegate[] list = handler.GetInvocationList();
  649. #if (!ISWIN)
  650. foreach (ViewNotecardHandler h in list)
  651. {
  652. if (h(script, objectID, user, m_scene) == false) return false;
  653. }
  654. return true;
  655. #else
  656. return list.Cast<ViewNotecardHandler>().All(h => h(script, objectID, user, m_scene) != false);
  657. #endif
  658. }
  659. return true;
  660. }
  661. #endregion
  662. #region EDIT SCRIPT
  663. public bool CanEditScript(UUID script, UUID objectID, UUID user)
  664. {
  665. EditScriptHandler handler = OnEditScript;
  666. if (handler != null)
  667. {
  668. Delegate[] list = handler.GetInvocationList();
  669. #if (!ISWIN)
  670. foreach (EditScriptHandler h in list)
  671. {
  672. if (h(script, objectID, user, m_scene) == false) return false;
  673. }
  674. return true;
  675. #else
  676. return list.Cast<EditScriptHandler>().All(h => h(script, objectID, user, m_scene) != false);
  677. #endif
  678. }
  679. return true;
  680. }
  681. public bool CanEditNotecard(UUID script, UUID objectID, UUID user)
  682. {
  683. EditNotecardHandler handler = OnEditNotecard;
  684. if (handler != null)
  685. {
  686. Delegate[] list = handler.GetInvocationList();
  687. #if (!ISWIN)
  688. foreach (EditNotecardHandler h in list)
  689. {
  690. if (h(script, objectID, user, m_scene) == false) return false;
  691. }
  692. return true;
  693. #else
  694. return list.Cast<EditNotecardHandler>().All(h => h(script, objectID, user, m_scene) != false);
  695. #endif
  696. }
  697. return true;
  698. }
  699. #endregion
  700. #region RUN SCRIPT (When Script Placed in Object)
  701. public bool CanRunScript(UUID script, UUID objectID, UUID user)
  702. {
  703. RunScriptHandler handler = OnRunScript;
  704. if (handler != null)
  705. {
  706. Delegate[] list = handler.GetInvocationList();
  707. #if (!ISWIN)
  708. foreach (RunScriptHandler h in list)
  709. {
  710. if (h(script, objectID, user, m_scene) == false) return false;
  711. }
  712. return true;
  713. #else
  714. return list.Cast<RunScriptHandler>().All(h => h(script, objectID, user, m_scene) != false);
  715. #endif
  716. }
  717. return true;
  718. }
  719. #endregion
  720. #region COMPILE SCRIPT (When Script needs to get (re)compiled)
  721. public bool CanCompileScript(UUID ownerUUID, string scriptType)
  722. {
  723. CompileScriptHandler handler = OnCompileScript;
  724. if (handler != null)
  725. {
  726. Delegate[] list = handler.GetInvocationList();
  727. #if (!ISWIN)
  728. foreach (CompileScriptHandler h in list)
  729. {
  730. if (h(ownerUUID, scriptType, m_scene) == false) return false;
  731. }
  732. return true;
  733. #else
  734. return list.Cast<CompileScriptHandler>().All(h => h(ownerUUID, scriptType, m_scene) != false);
  735. #endif
  736. }
  737. return true;
  738. }
  739. #endregion
  740. #region START SCRIPT (When Script run box is Checked after placed in object)
  741. public bool CanStartScript(UUID script, UUID user)
  742. {
  743. StartScriptHandler handler = OnStartScript;
  744. if (handler != null)
  745. {
  746. Delegate[] list = handler.GetInvocationList();
  747. #if (!ISWIN)
  748. foreach (StartScriptHandler h in list)
  749. {
  750. if (h(script, user, m_scene) == false) return false;
  751. }
  752. return true;
  753. #else
  754. return list.Cast<StartScriptHandler>().All(h => h(script, user, m_scene) != false);
  755. #endif
  756. }
  757. return true;
  758. }
  759. #endregion
  760. #region STOP SCRIPT (When Script run box is unchecked after placed in object)
  761. public bool CanStopScript(UUID script, UUID user)
  762. {
  763. StopScriptHandler handler = OnStopScript;
  764. if (handler != null)
  765. {
  766. Delegate[] list = handler.GetInvocationList();
  767. #if (!ISWIN)
  768. foreach (StopScriptHandler h in list)
  769. {
  770. if (h(script, user, m_scene) == false) return false;
  771. }
  772. return true;
  773. #else
  774. return list.Cast<StopScriptHandler>().All(h => h(script, user, m_scene) != false);
  775. #endif
  776. }
  777. return true;
  778. }
  779. #endregion
  780. #region RESET SCRIPT
  781. public bool CanResetScript(UUID prim, UUID script, UUID user)
  782. {
  783. ResetScriptHandler handler = OnResetScript;
  784. if (handler != null)
  785. {
  786. Delegate[] list = handler.GetInvocationList();
  787. #if (!ISWIN)
  788. foreach (ResetScriptHandler h in list)
  789. {
  790. if (h(prim, script, user, m_scene) == false) return false;
  791. }
  792. return true;
  793. #else
  794. return list.Cast<ResetScriptHandler>().All(h => h(prim, script, user, m_scene) != false);
  795. #endif
  796. }
  797. return true;
  798. }
  799. #endregion
  800. #region TERRAFORM LAND
  801. public bool CanTerraformLand(UUID user, Vector3 pos)
  802. {
  803. TerraformLandHandler handler = OnTerraformLand;
  804. if (handler != null)
  805. {
  806. Delegate[] list = handler.GetInvocationList();
  807. #if (!ISWIN)
  808. foreach (TerraformLandHandler h in list)
  809. {
  810. if (h(user, pos, m_scene) == false) return false;
  811. }
  812. return true;
  813. #else
  814. return list.Cast<TerraformLandHandler>().All(h => h(user, pos, m_scene) != false);
  815. #endif
  816. }
  817. return true;
  818. }
  819. #endregion
  820. #region RUN CONSOLE COMMAND
  821. public bool CanRunConsoleCommand(UUID user)
  822. {
  823. RunConsoleCommandHandler handler = OnRunConsoleCommand;
  824. if (handler != null)
  825. {
  826. Delegate[] list = handler.GetInvocationList();
  827. #if (!ISWIN)
  828. foreach (RunConsoleCommandHandler h in list)
  829. {
  830. if (h(user, m_scene) == false) return false;
  831. }
  832. return true;
  833. #else
  834. return list.Cast<RunConsoleCommandHandler>().All(h => h(user, m_scene) != false);
  835. #endif
  836. }
  837. return true;
  838. }
  839. #endregion
  840. #region CAN ISSUE ESTATE COMMAND
  841. public bool CanIssueEstateCommand(UUID user, bool ownerCommand)
  842. {
  843. IssueEstateCommandHandler handler = OnIssueEstateCommand;
  844. if (handler != null)
  845. {
  846. Delegate[] list = handler.GetInvocationList();
  847. #if (!ISWIN)
  848. foreach (IssueEstateCommandHandler h in list)
  849. {
  850. if (h(user, m_scene, ownerCommand) == false) return false;
  851. }
  852. return true;
  853. #else
  854. return list.Cast<IssueEstateCommandHandler>().All(h => h(user, m_scene, ownerCommand) != false);
  855. #endif
  856. }
  857. return true;
  858. }
  859. #endregion
  860. #region CAN BE GODLIKE
  861. /// <summary>
  862. /// Checks whether the user is in god mode
  863. /// </summary>
  864. /// <param name = "user"></param>
  865. /// <returns></returns>
  866. public bool IsGod(UUID user)
  867. {
  868. IsGodHandler handler = OnIsGod;
  869. if (handler != null)
  870. {
  871. Delegate[] list = handler.GetInvocationList();
  872. #if (!ISWIN)
  873. foreach (IsGodHandler h in list)
  874. {
  875. if (h(user, m_scene) == false) return false;
  876. }
  877. return true;
  878. #else
  879. return list.Cast<IsGodHandler>().All(h => h(user, m_scene) != false);
  880. #endif
  881. }
  882. return true;
  883. }
  884. /// <summary>
  885. /// Checks whether the user can be in god mode
  886. /// </summary>
  887. /// <param name = "user"></param>
  888. /// <returns></returns>
  889. public bool IsAdministrator(UUID user)
  890. {
  891. IsAdministratorHandler handler = OnIsAdministrator;
  892. if (handler != null)
  893. {
  894. Delegate[] list = handler.GetInvocationList();
  895. #if (!ISWIN)
  896. foreach (IsAdministratorHandler h in list)
  897. {
  898. if (h(user) == false) return false;
  899. }
  900. return true;
  901. #else
  902. return list.Cast<IsAdministratorHandler>().All(h => h(user) != false);
  903. #endif
  904. }
  905. return true;
  906. }
  907. #endregion
  908. #region EDIT PARCEL
  909. public bool CanEditParcelProperties(UUID user, ILandObject parcel, GroupPowers groupPowers)
  910. {
  911. EditParcelPropertiesHandler handler = OnEditParcelProperties;
  912. if (handler != null)
  913. {
  914. Delegate[] list = handler.GetInvocationList();
  915. #if (!ISWIN)
  916. foreach (EditParcelPropertiesHandler h in list)
  917. {
  918. if (h(user, parcel, groupPowers, m_scene) == false) return false;
  919. }
  920. return true;
  921. #else
  922. return list.Cast<EditParcelPropertiesHandler>().All(h => h(user, parcel, groupPowers, m_scene) != false);
  923. #endif
  924. }
  925. return true;
  926. }
  927. public bool CanEditParcel(UUID user, ILandObject parcel)
  928. {
  929. EditParcelHandler handler = OnEditParcel;
  930. if (handler != null)
  931. {
  932. Delegate[] list = handler.GetInvocationList();
  933. #if (!ISWIN)
  934. foreach (EditParcelHandler h in list)
  935. {
  936. if (h(user, parcel, m_scene) == false) return false;
  937. }
  938. return true;
  939. #else
  940. return list.Cast<EditParcelHandler>().All(h => h(user, parcel, m_scene) != false);
  941. #endif
  942. }
  943. return true;
  944. }
  945. public bool CanSubdivideParcel(UUID user, ILandObject parcel)
  946. {
  947. EditParcelHandler handler = OnSubdivideParcel;
  948. if (handler != null)
  949. {
  950. Delegate[] list = handler.GetInvocationList();
  951. #if (!ISWIN)
  952. foreach (EditParcelHandler h in list)
  953. {
  954. if (h(user, parcel, m_scene) == false) return false;
  955. }
  956. return true;
  957. #else
  958. return list.Cast<EditParcelHandler>().All(h => h(user, parcel, m_scene) != false);
  959. #endif
  960. }
  961. return true;
  962. }
  963. #endregion
  964. #region SELL PARCEL
  965. public bool CanSellParcel(UUID user, ILandObject parcel)
  966. {
  967. SellParcelHandler handler = OnSellParcel;
  968. if (handler != null)
  969. {
  970. Delegate[] list = handler.GetInvocationList();
  971. #if (!ISWIN)
  972. foreach (SellParcelHandler h in list)
  973. {
  974. if (h(user, parcel, m_scene) == false) return false;
  975. }
  976. return true;
  977. #else
  978. return list.Cast<SellParcelHandler>().All(h => h(user, parcel, m_scene) != false);
  979. #endif
  980. }
  981. return true;
  982. }
  983. #endregion
  984. #region ABANDON PARCEL
  985. public bool CanAbandonParcel(UUID user, ILandObject parcel)
  986. {
  987. AbandonParcelHandler handler = OnAbandonParcel;
  988. if (handler != null)
  989. {
  990. Delegate[] list = handler.GetInvocationList();
  991. #if (!ISWIN)
  992. foreach (AbandonParcelHandler h in list)
  993. {
  994. if (h(user, parcel, m_scene) == false) return false;
  995. }
  996. return true;
  997. #else
  998. return list.Cast<AbandonParcelHandler>().All(h => h(user, parcel, m_scene) != false);
  999. #endif
  1000. }
  1001. return true;
  1002. }
  1003. #endregion
  1004. #endregion
  1005. /// Check whether the specified user is allowed to directly create the given inventory type in a prim's
  1006. /// inventory (e.g. the New Script button in the 1.21 Linden Lab client).
  1007. /// </summary>
  1008. /// <param name = "invType"></param>
  1009. /// <param name = "objectID"></param>
  1010. /// <param name = "userID"></param>
  1011. /// <returns></returns>
  1012. public bool CanCreateObjectInventory(int invType, UUID objectID, UUID userID)
  1013. {
  1014. CreateObjectInventoryHandler handler = OnCreateObjectInventory;
  1015. if (handler != null)
  1016. {
  1017. Delegate[] list = handler.GetInvocationList();
  1018. #if (!ISWIN)
  1019. foreach (CreateObjectInventoryHandler h in list)
  1020. {
  1021. if (h(invType, objectID, userID) == false) return false;
  1022. }
  1023. return true;
  1024. #else
  1025. return list.Cast<CreateObjectInventoryHandler>().All(h => h(invType, objectID, userID) != false);
  1026. #endif
  1027. }
  1028. return true;
  1029. }
  1030. public bool CanCopyObjectInventory(UUID itemID, UUID objectID, UUID userID)
  1031. {
  1032. CopyObjectInventoryHandler handler = OnCopyObjectInventory;
  1033. if (handler != null)
  1034. {
  1035. Delegate[] list = handler.GetInvocationList();
  1036. #if (!ISWIN)
  1037. foreach (CopyObjectInventoryHandler h in list)
  1038. {
  1039. if (h(itemID, objectID, userID) == false) return false;
  1040. }
  1041. return true;
  1042. #else
  1043. return list.Cast<CopyObjectInventoryHandler>().All(h => h(itemID, objectID, userID) != false);
  1044. #endif
  1045. }
  1046. return true;
  1047. }
  1048. public bool CanDeleteObjectInventory(UUID itemID, UUID objectID, UUID userID)
  1049. {
  1050. DeleteObjectInventoryHandler handler = OnDeleteObjectInventory;
  1051. if (handler != null)
  1052. {
  1053. Delegate[] list = handler.GetInvocationList();
  1054. #if (!ISWIN)
  1055. foreach (DeleteObjectInventoryHandler h in list)
  1056. {
  1057. if (h(itemID, objectID, userID) == false) return false;
  1058. }
  1059. return true;
  1060. #else
  1061. return list.Cast<DeleteObjectInventoryHandler>().All(h => h(itemID, objectID, userID) != false);
  1062. #endif
  1063. }
  1064. return true;
  1065. }
  1066. /// <summary>
  1067. /// Check whether the specified user is allowed to create the given inventory type in their inventory.
  1068. /// </summary>
  1069. /// <param name = "invType"></param>
  1070. /// <param name = "userID"></param>
  1071. /// <returns></returns>
  1072. public bool CanCreateUserInventory(int invType, UUID userID)
  1073. {
  1074. CreateUserInventoryHandler handler = OnCreateUserInventory;
  1075. if (handler != null)
  1076. {
  1077. Delegate[] list = handler.GetInvocationList();
  1078. #if (!ISWIN)
  1079. foreach (CreateUserInventoryHandler h in list)
  1080. {
  1081. if (h(invType, userID) == false) return false;
  1082. }
  1083. return true;
  1084. #else
  1085. return list.Cast<CreateUserInventoryHandler>().All(h => h(invType, userID) != false);
  1086. #endif
  1087. }
  1088. return true;
  1089. }
  1090. /// <summary>
  1091. /// Check whether the specified user is allowed to edit the given inventory item within their own inventory.
  1092. /// </summary>
  1093. /// <param name = "itemID"></param>
  1094. /// <param name = "userID"></param>
  1095. /// <returns></returns>
  1096. public bool CanEditUserInventory(UUID itemID, UUID userID)
  1097. {
  1098. EditUserInventoryHandler handler = OnEditUserInventory;
  1099. if (handler != null)
  1100. {
  1101. Delegate[] list = handler.GetInvocationList();
  1102. #if (!ISWIN)
  1103. foreach (EditUserInventoryHandler h in list)
  1104. {
  1105. if (h(itemID, userID) == false) return false;
  1106. }
  1107. return true;
  1108. #else
  1109. return list.Cast<EditUserInventoryHandler>().All(h => h(itemID, userID) != false);
  1110. #endif
  1111. }
  1112. return true;
  1113. }
  1114. /// <summary>
  1115. /// Check whether the specified user is allowed to copy the given inventory item from their own inventory.
  1116. /// </summary>
  1117. /// <param name = "itemID"></param>
  1118. /// <param name = "userID"></param>
  1119. /// <returns></returns>
  1120. public bool CanCopyUserInventory(UUID itemID, UUID userID)
  1121. {
  1122. CopyUserInventoryHandler handler = OnCopyUserInventory;
  1123. if (handler != null)
  1124. {
  1125. Delegate[] list = handler.GetInvocationList();
  1126. #if (!ISWIN)
  1127. foreach (CopyUserInventoryHandler h in list)
  1128. {
  1129. if (h(itemID, userID) == false) return false;
  1130. }
  1131. return true;
  1132. #else
  1133. return list.Cast<CopyUserInventoryHandler>().All(h => h(itemID, userID) != false);
  1134. #endif
  1135. }
  1136. return true;
  1137. }
  1138. /// <summary>
  1139. /// Check whether the specified user is allowed to edit the given inventory item within their own inventory.
  1140. /// </summary>
  1141. /// <param name = "itemID"></param>
  1142. /// <param name = "userID"></param>
  1143. /// <returns></returns>
  1144. public bool CanDeleteUserInventory(UUID itemID, UUID userID)
  1145. {
  1146. DeleteUserInventoryHandler handler = OnDeleteUserInventory;
  1147. if (handler != null)
  1148. {
  1149. Delegate[] list = handler.GetInvocationList();
  1150. #if (!ISWIN)
  1151. foreach (DeleteUserInventoryHandler h in list)
  1152. {
  1153. if (h(itemID, userID) == false) return false;
  1154. }
  1155. return true;
  1156. #else
  1157. return list.Cast<DeleteUserInventoryHandler>().All(h => h(itemID, userID) != false);
  1158. #endif
  1159. }
  1160. return true;
  1161. }
  1162. /// <summary>
  1163. /// Check to make sure the user is allowed to teleport within this region
  1164. /// </summary>
  1165. /// <param name = "userID">The user that is attempting to leave</param>
  1166. /// <param name = "reason">If this check fails, this is the reason why</param>
  1167. /// <returns>Whether the user is allowed to teleport locally</returns>
  1168. public bool AllowedOutgoingLocalTeleport(UUID userID, out string reason)
  1169. {
  1170. reason = "";
  1171. OutgoingRemoteTeleport handler = OnAllowedOutgoingLocalTeleport;
  1172. if (handler != null)
  1173. {
  1174. Delegate[] list = handler.GetInvocationList();
  1175. foreach (OutgoingRemoteTeleport h in list)
  1176. {
  1177. if (h(userID, m_scene, out reason) == false)
  1178. return false;
  1179. }
  1180. }
  1181. return true;
  1182. }
  1183. /// <summary>
  1184. /// Check to make sure the user can be teleporting out of the region to a remote region.
  1185. /// If this is false, the user is denied the ability to leave the region at all.
  1186. /// </summary>
  1187. /// <param name = "userID">The user that is attempting to leave the region</param>
  1188. /// <param name = "reason">If this fails, this explains why it failed</param>
  1189. /// <returns>Whether the user is allowed to teleport to remote regions</returns>
  1190. public bool AllowedOutgoingRemoteTeleport(UUID userID, out string reason)
  1191. {
  1192. reason = "";
  1193. OutgoingRemoteTeleport handler = OnAllowedOutgoingRemoteTeleport;
  1194. if (handler != null)
  1195. {
  1196. Delegate[] list = handler.GetInvocationList();
  1197. foreach (OutgoingRemoteTeleport h in list)
  1198. {
  1199. if (h(userID, m_scene, out reason) == false)
  1200. return false;
  1201. }
  1202. }
  1203. return true;
  1204. }
  1205. /// <summary>
  1206. /// Check to make sure this user has the ability to have an agent in this region.
  1207. /// This checks whether they exist in the grid, whether they are banned from the region and more.
  1208. /// It is called by the SimulationService in CreateAgent mainly.
  1209. /// </summary>
  1210. /// <param name = "agent">The Agent that is coming in</param>
  1211. /// <param name = "isRootAgent">Whether this agent will be a root agent</param>
  1212. /// <param name = "reason">If it fails, this explains …

Large files files are truncated, but you can click here to view the full file