aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs12
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs4
-rw-r--r--OpenSim/Data/DBGuids.cs31
-rw-r--r--OpenSim/Data/IAssetData.cs11
-rw-r--r--OpenSim/Data/IInventoryData.cs11
-rw-r--r--OpenSim/Data/MSSQL/MSSQLEstateData.cs9
-rw-r--r--OpenSim/Data/MSSQL/MSSQLSimulationData.cs (renamed from OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs)18
-rw-r--r--OpenSim/Data/Migration.cs14
-rw-r--r--OpenSim/Data/MySQL/MySQLAssetData.cs3
-rw-r--r--OpenSim/Data/MySQL/MySQLEstateData.cs9
-rw-r--r--OpenSim/Data/MySQL/MySQLInventoryData.cs2
-rw-r--r--OpenSim/Data/MySQL/MySQLSimulationData.cs (renamed from OpenSim/Data/MySQL/MySQLLegacyRegionData.cs)33
-rw-r--r--OpenSim/Data/Null/NullInventoryData.cs29
-rw-r--r--OpenSim/Data/Null/NullSimulationData.cs (renamed from OpenSim/Data/Null/NullDataStore.cs)3
-rw-r--r--OpenSim/Data/SQLite/SQLiteEstateData.cs9
-rw-r--r--OpenSim/Data/SQLite/SQLiteInventoryStore.cs6
-rw-r--r--OpenSim/Data/SQLite/SQLiteSimulationData.cs (renamed from OpenSim/Data/SQLite/SQLiteRegionData.cs)70
-rw-r--r--OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs9
-rw-r--r--OpenSim/Data/SQLiteLegacy/SQLiteSimulationData.cs (renamed from OpenSim/Data/SQLiteLegacy/SQLiteRegionData.cs)13
-rw-r--r--OpenSim/Data/Tests/BasicDataServiceTest.cs39
-rw-r--r--OpenSim/Data/Tests/DefaultTestConns.cs29
-rw-r--r--OpenSim/Data/Tests/RegionTests.cs12
-rw-r--r--OpenSim/Framework/Capabilities/Caps.cs2
-rw-r--r--OpenSim/Framework/ConfigSettings.cs16
-rw-r--r--OpenSim/Framework/Console/CommandConsole.cs2
-rwxr-xr-xOpenSim/Framework/Console/ConsoleBase.cs51
-rw-r--r--OpenSim/Framework/Console/LocalConsole.cs23
-rw-r--r--OpenSim/Framework/Console/MockConsole.cs29
-rw-r--r--OpenSim/Framework/LandData.cs28
-rw-r--r--OpenSim/Framework/LandUpdateArgs.cs14
-rw-r--r--OpenSim/Framework/Lazy.cs2
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs74
-rw-r--r--OpenSim/Framework/RegionInfo.cs28
-rw-r--r--OpenSim/Framework/SLUtil.cs10
-rw-r--r--OpenSim/Framework/Serialization/ArchiveConstants.cs20
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs121
-rw-r--r--OpenSim/Framework/Servers/VersionInfo.cs2
-rw-r--r--OpenSim/Framework/TaskInventoryItem.cs10
-rw-r--r--OpenSim/Region/Application/Application.cs2
-rw-r--r--OpenSim/Region/Application/ConfigurationLoader.cs4
-rw-r--r--OpenSim/Region/Application/OpenSim.cs25
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs56
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs257
-rw-r--r--OpenSim/Region/ClientStack/RegionApplicationBase.cs33
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs26
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs431
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs6
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs10
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs18
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs10
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs28
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs54
-rw-r--r--OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs18
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs12
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs1
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs15
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs2
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs2
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs2
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs6
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs8
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs7
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs118
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs14
-rw-r--r--OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs98
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs14
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs22
-rw-r--r--OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Wind/WindModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs2
-rw-r--r--OpenSim/Region/DataSnapshot/ObjectSnapshot.cs3
-rw-r--r--OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs2
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEntityInventory.cs2
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEstateDataService.cs45
-rw-r--r--OpenSim/Region/Framework/Interfaces/IGroupsModule.cs6
-rw-r--r--OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs16
-rw-r--r--OpenSim/Region/Framework/Interfaces/IMoapModule.cs2
-rw-r--r--OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs4
-rw-r--r--OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs98
-rw-r--r--OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs (renamed from OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs)2
-rw-r--r--OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/EntityManager.cs261
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs16
-rw-r--r--OpenSim/Region/Framework/Scenes/Prioritizer.cs46
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs13
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs18
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Permissions.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs429
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneBase.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs307
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs32
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneViewer.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs22
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs18
-rw-r--r--OpenSim/Region/Framework/StorageManager.cs96
-rw-r--r--OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs10
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs2
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs39
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs4
-rw-r--r--OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs2
-rw-r--r--OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs2
-rw-r--r--OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs2
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs4
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs4
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs6
-rw-r--r--OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs2
-rw-r--r--OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs3
-rw-r--r--OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs4
-rw-r--r--OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs18
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs2
-rw-r--r--OpenSim/Server/Base/ServerUtils.cs2
-rw-r--r--OpenSim/Server/Handlers/Hypergrid/HeloServerConnector.cs79
-rw-r--r--OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs23
-rw-r--r--OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs2
-rw-r--r--OpenSim/Services/Connectors/Hypergrid/HeloServiceConnector.cs75
-rw-r--r--OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs2
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs13
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs35
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs3
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs3
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs6
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs55
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs4
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs21
-rw-r--r--OpenSim/Services/Connectors/Simulation/EstateDataService.cs112
-rw-r--r--OpenSim/Services/Connectors/Simulation/SimulationDataService.cs140
-rw-r--r--OpenSim/Services/InventoryService/InventoryService.cs4
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs2
-rw-r--r--OpenSim/Services/UserAccountService/UserAccountService.cs24
-rw-r--r--OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs84
-rw-r--r--OpenSim/Tests/Common/Mock/TestScene.cs12
-rw-r--r--OpenSim/Tests/Common/Setup/AssetHelpers.cs4
-rw-r--r--OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs42
-rw-r--r--OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs4
-rw-r--r--OpenSim/Tests/Common/Setup/UserProfileTestUtils.cs8
-rw-r--r--Prebuild/AUTHORS10
-rw-r--r--Prebuild/COPYING65
-rw-r--r--Prebuild/ChangeLog461
-rw-r--r--Prebuild/INSTALL236
-rw-r--r--Prebuild/NEWS200
-rw-r--r--Prebuild/README274
-rw-r--r--Prebuild/THANKS18
-rw-r--r--Prebuild/TODO43
-rwxr-xr-xPrebuild/prebuild2
-rw-r--r--Prebuild/prebuild.xml144
-rw-r--r--Prebuild/scripts/VS2010.bat4
-rw-r--r--Prebuild/src/Core/Kernel.cs83
-rw-r--r--Prebuild/src/Core/Nodes/AuthorNode.cs2
-rw-r--r--Prebuild/src/Core/Nodes/CleanFilesNode.cs80
-rw-r--r--Prebuild/src/Core/Nodes/CleanupNode.cs85
-rw-r--r--Prebuild/src/Core/Nodes/ConfigurationNode.cs49
-rw-r--r--Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs71
-rw-r--r--Prebuild/src/Core/Nodes/DataNode.cs2
-rw-r--r--Prebuild/src/Core/Nodes/DatabaseProjectNode.cs1
-rw-r--r--Prebuild/src/Core/Nodes/DescriptionNode.cs2
-rw-r--r--Prebuild/src/Core/Nodes/FileNode.cs16
-rw-r--r--Prebuild/src/Core/Nodes/FilesNode.cs121
-rw-r--r--Prebuild/src/Core/Nodes/MatchNode.cs145
-rw-r--r--Prebuild/src/Core/Nodes/OptionsNode.cs20
-rw-r--r--Prebuild/src/Core/Nodes/ProcessNode.cs2
-rw-r--r--Prebuild/src/Core/Nodes/ProjectNode.cs37
-rw-r--r--Prebuild/src/Core/Nodes/ReferencePathNode.cs2
-rw-r--r--Prebuild/src/Core/Nodes/SolutionNode.cs74
-rw-r--r--Prebuild/src/Core/Parse/Preprocessor.cs267
-rw-r--r--Prebuild/src/Core/Targets/.NAntTarget.cs.swpbin0 -> 49152 bytes
-rw-r--r--Prebuild/src/Core/Targets/AutotoolsTarget.cs788
-rw-r--r--Prebuild/src/Core/Targets/DebugTarget.cs2
-rw-r--r--Prebuild/src/Core/Targets/MakefileTarget.cs10
-rw-r--r--Prebuild/src/Core/Targets/MonoDevelopTarget.cs61
-rw-r--r--Prebuild/src/Core/Targets/NAntTarget.cs84
-rw-r--r--Prebuild/src/Core/Targets/SharpDevelopTarget.cs3
-rw-r--r--Prebuild/src/Core/Targets/VS2003Target.cs63
-rw-r--r--Prebuild/src/Core/Targets/VS2005Target.cs2
-rw-r--r--Prebuild/src/Core/Targets/VS2008Target.cs7
-rw-r--r--Prebuild/src/Core/Targets/VS2010Target.cs202
-rw-r--r--Prebuild/src/Core/Targets/VSGenericTarget.cs619
-rw-r--r--Prebuild/src/Core/Targets/VSVersion.cs10
-rw-r--r--Prebuild/src/Core/Targets/XcodeTarget.cs2
-rw-r--r--Prebuild/src/Core/Utilities/CommandLineCollection.cs39
-rw-r--r--Prebuild/src/Core/Utilities/CurrentDirectory.cs18
-rw-r--r--Prebuild/src/Core/Utilities/Helper.cs83
-rw-r--r--Prebuild/src/Core/Utilities/Log.cs24
-rw-r--r--Prebuild/src/Core/WarningException.cs2
-rw-r--r--Prebuild/src/Prebuild.cs28
-rw-r--r--Prebuild/src/Properties/AssemblyInfo.cs7
-rw-r--r--Prebuild/src/data/prebuild-1.7.xsd21
-rw-r--r--Prebuild/src/data/prebuild-1.8.xsd331
-rw-r--r--Prebuild/src/data/prebuild-1.9.xsd336
-rw-r--r--bin/OpenSim.ini.example27
-rwxr-xr-xbin/Prebuild.exebin237568 -> 228352 bytes
-rw-r--r--bin/Robust.HG.ini.example2
-rw-r--r--bin/config-include/Grid.ini5
-rw-r--r--bin/config-include/GridCommon.ini.example21
-rw-r--r--bin/config-include/GridHypergrid.ini6
-rw-r--r--bin/config-include/HyperSimianGrid.ini18
-rw-r--r--bin/config-include/SimianGrid.ini22
-rw-r--r--bin/config-include/Standalone.ini6
-rw-r--r--bin/config-include/StandaloneCommon.ini.example2
-rw-r--r--prebuild.xml1181
-rwxr-xr-xrunprebuild.sh3
216 files changed, 6590 insertions, 4488 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 0608f66..a47fc01 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -756,7 +756,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
756 // Set the estate 756 // Set the estate
757 757
758 // Check for an existing estate 758 // Check for an existing estate
759 List<int> estateIDs = m_application.StorageManager.EstateDataStore.GetEstates((string) requestData["estate_name"]); 759 List<int> estateIDs = m_application.EstateDataService.GetEstates((string) requestData["estate_name"]);
760 if (estateIDs.Count < 1) 760 if (estateIDs.Count < 1)
761 { 761 {
762 UUID userID = UUID.Zero; 762 UUID userID = UUID.Zero;
@@ -784,7 +784,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
784 } 784 }
785 785
786 // Create a new estate with the name provided 786 // Create a new estate with the name provided
787 region.EstateSettings = m_application.StorageManager.EstateDataStore.LoadEstateSettings(region.RegionID, true); 787 region.EstateSettings = m_application.EstateDataService.LoadEstateSettings(region.RegionID, true);
788 788
789 region.EstateSettings.EstateName = (string) requestData["estate_name"]; 789 region.EstateSettings.EstateName = (string) requestData["estate_name"];
790 region.EstateSettings.EstateOwner = userID; 790 region.EstateSettings.EstateOwner = userID;
@@ -794,10 +794,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController
794 else 794 else
795 { 795 {
796 int estateID = estateIDs[0]; 796 int estateID = estateIDs[0];
797 797
798 region.EstateSettings = m_application.StorageManager.EstateDataStore.LoadEstateSettings(estateID); 798 region.EstateSettings = m_application.EstateDataService.LoadEstateSettings(estateID);
799 799
800 if (!m_application.StorageManager.EstateDataStore.LinkRegion(region.RegionID, estateID)) 800 if (!m_application.EstateDataService.LinkRegion(region.RegionID, estateID))
801 throw new Exception("Failed to join estate."); 801 throw new Exception("Failed to join estate.");
802 } 802 }
803 803
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs
index 4369216..8271d76 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs
@@ -384,7 +384,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
384// } 384// }
385// 385//
386// rdata.Respond(String.Format("Appearance {0} : Normal completion", rdata.method)); 386// rdata.Respond(String.Format("Appearance {0} : Normal completion", rdata.method));
387// 387//
388// } 388// }
389 389
390 /// <summary> 390 /// <summary>
@@ -449,7 +449,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
449// rdata.userAppearance = new AvatarAppearance(); 449// rdata.userAppearance = new AvatarAppearance();
450// rdata.userAppearance.Owner = old.Owner; 450// rdata.userAppearance.Owner = old.Owner;
451// adata = new AvatarData(rdata.userAppearance); 451// adata = new AvatarData(rdata.userAppearance);
452// 452//
453// Rest.AvatarServices.SetAvatar(rdata.userProfile.ID, adata); 453// Rest.AvatarServices.SetAvatar(rdata.userProfile.ID, adata);
454// 454//
455// rdata.Complete(); 455// rdata.Complete();
diff --git a/OpenSim/Data/DBGuids.cs b/OpenSim/Data/DBGuids.cs
index fb6832b..ad1c19c 100644
--- a/OpenSim/Data/DBGuids.cs
+++ b/OpenSim/Data/DBGuids.cs
@@ -1,4 +1,31 @@
1using System; 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;
2using System.Collections.Generic; 29using System.Collections.Generic;
3using System.Text; 30using System.Text;
4using OpenMetaverse; 31using OpenMetaverse;
@@ -17,7 +44,7 @@ namespace OpenSim.Data
17 /// <returns></returns> 44 /// <returns></returns>
18 public static UUID FromDB(object id) 45 public static UUID FromDB(object id)
19 { 46 {
20 if( (id == null) || (id == DBNull.Value)) 47 if ((id == null) || (id == DBNull.Value))
21 return UUID.Zero; 48 return UUID.Zero;
22 49
23 if (id.GetType() == typeof(Guid)) 50 if (id.GetType() == typeof(Guid))
diff --git a/OpenSim/Data/IAssetData.cs b/OpenSim/Data/IAssetData.cs
index 065d3a5..0c8eadd 100644
--- a/OpenSim/Data/IAssetData.cs
+++ b/OpenSim/Data/IAssetData.cs
@@ -40,15 +40,4 @@ namespace OpenSim.Data
40 void Initialise(string connect); 40 void Initialise(string connect);
41 bool Delete(string id); 41 bool Delete(string id);
42 } 42 }
43
44 public class AssetDataInitialiser : PluginInitialiserBase
45 {
46 private string connect;
47 public AssetDataInitialiser (string s) { connect = s; }
48 public override void Initialise (IPlugin plugin)
49 {
50 IAssetDataPlugin p = plugin as IAssetDataPlugin;
51 p.Initialise (connect);
52 }
53 }
54} 43}
diff --git a/OpenSim/Data/IInventoryData.cs b/OpenSim/Data/IInventoryData.cs
index 90f74b7..74d5d37 100644
--- a/OpenSim/Data/IInventoryData.cs
+++ b/OpenSim/Data/IInventoryData.cs
@@ -155,15 +155,4 @@ namespace OpenSim.Data
155 /// </returns> 155 /// </returns>
156 List<InventoryItemBase> fetchActiveGestures(UUID avatarID); 156 List<InventoryItemBase> fetchActiveGestures(UUID avatarID);
157 } 157 }
158
159 public class InventoryDataInitialiser : PluginInitialiserBase
160 {
161 private string connect;
162 public InventoryDataInitialiser (string s) { connect = s; }
163 public override void Initialise (IPlugin plugin)
164 {
165 IInventoryDataPlugin p = plugin as IInventoryDataPlugin;
166 p.Initialise (connect);
167 }
168 }
169} 158}
diff --git a/OpenSim/Data/MSSQL/MSSQLEstateData.cs b/OpenSim/Data/MSSQL/MSSQLEstateData.cs
index 80bf106..e9a0935 100644
--- a/OpenSim/Data/MSSQL/MSSQLEstateData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLEstateData.cs
@@ -50,6 +50,15 @@ namespace OpenSim.Data.MSSQL
50 50
51 #region Public methods 51 #region Public methods
52 52
53 public MSSQLEstateStore()
54 {
55 }
56
57 public MSSQLEstateStore(string connectionString)
58 {
59 Initialise(connectionString);
60 }
61
53 /// <summary> 62 /// <summary>
54 /// Initialises the estatedata class. 63 /// Initialises the estatedata class.
55 /// </summary> 64 /// </summary>
diff --git a/OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
index 77b8a10..8eae0a2 100644
--- a/OpenSim/Data/MSSQL/MSSQLLegacyRegionData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
@@ -43,7 +43,7 @@ namespace OpenSim.Data.MSSQL
43 /// <summary> 43 /// <summary>
44 /// A MSSQL Interface for the Region Server. 44 /// A MSSQL Interface for the Region Server.
45 /// </summary> 45 /// </summary>
46 public class MSSQLRegionDataStore : IRegionDataStore 46 public class MSSQLSimulationData : ISimulationDataStore
47 { 47 {
48 private const string _migrationStore = "RegionStore"; 48 private const string _migrationStore = "RegionStore";
49 49
@@ -55,6 +55,16 @@ namespace OpenSim.Data.MSSQL
55 /// </summary> 55 /// </summary>
56 private MSSQLManager _Database; 56 private MSSQLManager _Database;
57 private string m_connectionString; 57 private string m_connectionString;
58
59 public MSSQLSimulationData()
60 {
61 }
62
63 public MSSQLSimulationData(string connectionString)
64 {
65 Initialise(connectionString);
66 }
67
58 /// <summary> 68 /// <summary>
59 /// Initialises the region datastore 69 /// Initialises the region datastore
60 /// </summary> 70 /// </summary>
@@ -1126,7 +1136,7 @@ VALUES
1126 prim.LinkNum = Convert.ToInt32(primRow["LinkNumber"]); 1136 prim.LinkNum = Convert.ToInt32(primRow["LinkNumber"]);
1127 1137
1128 if (!(primRow["MediaURL"] is System.DBNull)) 1138 if (!(primRow["MediaURL"] is System.DBNull))
1129 prim.MediaUrl = (string)primRow["MediaURL"]; 1139 prim.MediaUrl = (string)primRow["MediaURL"];
1130 1140
1131 return prim; 1141 return prim;
1132 } 1142 }
@@ -1180,7 +1190,7 @@ VALUES
1180 { 1190 {
1181 } 1191 }
1182 1192
1183 if (!(shapeRow["Media"] is System.DBNull)) 1193 if (!(shapeRow["Media"] is System.DBNull))
1184 baseShape.Media = PrimitiveBaseShape.MediaList.FromXml((string)shapeRow["Media"]); 1194 baseShape.Media = PrimitiveBaseShape.MediaList.FromXml((string)shapeRow["Media"]);
1185 1195
1186 return baseShape; 1196 return baseShape;
@@ -1511,7 +1521,7 @@ VALUES
1511 parameters.Add(_Database.CreateParameter("PassTouches", 1)); 1521 parameters.Add(_Database.CreateParameter("PassTouches", 1));
1512 else 1522 else
1513 parameters.Add(_Database.CreateParameter("PassTouches", 0)); 1523 parameters.Add(_Database.CreateParameter("PassTouches", 0));
1514 parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum)); 1524 parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum));
1515 parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl)); 1525 parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl));
1516 1526
1517 return parameters.ToArray(); 1527 return parameters.ToArray();
diff --git a/OpenSim/Data/Migration.cs b/OpenSim/Data/Migration.cs
index 86531d9..fc9a142 100644
--- a/OpenSim/Data/Migration.cs
+++ b/OpenSim/Data/Migration.cs
@@ -122,7 +122,7 @@ namespace OpenSim.Data
122 int ver = FindVersion(_conn, "migrations"); 122 int ver = FindVersion(_conn, "migrations");
123 if (ver <= 0) // -1 = no table, 0 = no version record 123 if (ver <= 0) // -1 = no table, 0 = no version record
124 { 124 {
125 if( ver < 0 ) 125 if (ver < 0)
126 ExecuteScript("create table migrations(name varchar(100), version int)"); 126 ExecuteScript("create table migrations(name varchar(100), version int)");
127 InsertVersion("migrations", 1); 127 InsertVersion("migrations", 1);
128 } 128 }
@@ -288,7 +288,7 @@ namespace OpenSim.Data
288 SortedList<int, string[]> migrations = new SortedList<int, string[]>(); 288 SortedList<int, string[]> migrations = new SortedList<int, string[]>();
289 289
290 string[] names = _assem.GetManifestResourceNames(); 290 string[] names = _assem.GetManifestResourceNames();
291 if( names.Length == 0 ) // should never happen 291 if (names.Length == 0) // should never happen
292 return migrations; 292 return migrations;
293 293
294 Array.Sort(names); // we want all the migrations ordered 294 Array.Sort(names); // we want all the migrations ordered
@@ -297,7 +297,7 @@ namespace OpenSim.Data
297 Match m = null; 297 Match m = null;
298 string sFile = Array.FindLast(names, nm => { m = _match_new.Match(nm); return m.Success; }); // ; nm.StartsWith(sPrefix, StringComparison.InvariantCultureIgnoreCase 298 string sFile = Array.FindLast(names, nm => { m = _match_new.Match(nm); return m.Success; }); // ; nm.StartsWith(sPrefix, StringComparison.InvariantCultureIgnoreCase
299 299
300 if( (m != null) && !String.IsNullOrEmpty(sFile) ) 300 if ((m != null) && !String.IsNullOrEmpty(sFile))
301 { 301 {
302 /* The filename should be '<StoreName>.migrations[.NNN]' where NNN 302 /* The filename should be '<StoreName>.migrations[.NNN]' where NNN
303 * is the last version number defined in the file. If the '.NNN' part is recognized, the code can skip 303 * is the last version number defined in the file. If the '.NNN' part is recognized, the code can skip
@@ -312,7 +312,7 @@ namespace OpenSim.Data
312 312
313 if (m.Groups.Count > 1 && int.TryParse(m.Groups[1].Value, out nLastVerFound)) 313 if (m.Groups.Count > 1 && int.TryParse(m.Groups[1].Value, out nLastVerFound))
314 { 314 {
315 if( nLastVerFound <= after ) 315 if (nLastVerFound <= after)
316 goto scan_old_style; 316 goto scan_old_style;
317 } 317 }
318 318
@@ -329,7 +329,7 @@ namespace OpenSim.Data
329 sb.Length = 0; 329 sb.Length = 0;
330 } 330 }
331 331
332 if ( (nVersion > 0) && (nVersion > after) && (script.Count > 0) && !migrations.ContainsKey(nVersion)) // script to the versioned script list 332 if ((nVersion > 0) && (nVersion > after) && (script.Count > 0) && !migrations.ContainsKey(nVersion)) // script to the versioned script list
333 { 333 {
334 migrations[nVersion] = script.ToArray(); 334 migrations[nVersion] = script.ToArray();
335 } 335 }
@@ -345,7 +345,7 @@ namespace OpenSim.Data
345 string sLine = resourceReader.ReadLine(); 345 string sLine = resourceReader.ReadLine();
346 nLineNo++; 346 nLineNo++;
347 347
348 if( String.IsNullOrEmpty(sLine) || sLine.StartsWith("#") ) // ignore a comment or empty line 348 if (String.IsNullOrEmpty(sLine) || sLine.StartsWith("#")) // ignore a comment or empty line
349 continue; 349 continue;
350 350
351 if (sLine.Trim().Equals(":GO", StringComparison.InvariantCultureIgnoreCase)) 351 if (sLine.Trim().Equals(":GO", StringComparison.InvariantCultureIgnoreCase))
@@ -392,7 +392,7 @@ scan_old_style:
392 if (m.Success) 392 if (m.Success)
393 { 393 {
394 int version = int.Parse(m.Groups[1].ToString()); 394 int version = int.Parse(m.Groups[1].ToString());
395 if ( (version > after) && !migrations.ContainsKey(version) ) 395 if ((version > after) && !migrations.ContainsKey(version))
396 { 396 {
397 using (Stream resource = _assem.GetManifestResourceStream(s)) 397 using (Stream resource = _assem.GetManifestResourceStream(s))
398 { 398 {
diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs
index f9ce3d9..0b0a638 100644
--- a/OpenSim/Data/MySQL/MySQLAssetData.cs
+++ b/OpenSim/Data/MySQL/MySQLAssetData.cs
@@ -216,9 +216,6 @@ namespace OpenSim.Data.MySQL
216 216
217 private void UpdateAccessTime(AssetBase asset) 217 private void UpdateAccessTime(AssetBase asset)
218 { 218 {
219 // Writing to the database every time Get() is called on an asset is killing us. Seriously. -jph
220 return;
221
222 lock (m_dbLock) 219 lock (m_dbLock)
223 { 220 {
224 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 221 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
diff --git a/OpenSim/Data/MySQL/MySQLEstateData.cs b/OpenSim/Data/MySQL/MySQLEstateData.cs
index 9158f7a..c42c687 100644
--- a/OpenSim/Data/MySQL/MySQLEstateData.cs
+++ b/OpenSim/Data/MySQL/MySQLEstateData.cs
@@ -54,6 +54,15 @@ namespace OpenSim.Data.MySQL
54 private Dictionary<string, FieldInfo> m_FieldMap = 54 private Dictionary<string, FieldInfo> m_FieldMap =
55 new Dictionary<string, FieldInfo>(); 55 new Dictionary<string, FieldInfo>();
56 56
57 public MySQLEstateStore()
58 {
59 }
60
61 public MySQLEstateStore(string connectionString)
62 {
63 Initialise(connectionString);
64 }
65
57 public void Initialise(string connectionString) 66 public void Initialise(string connectionString)
58 { 67 {
59 m_connectionString = connectionString; 68 m_connectionString = connectionString;
diff --git a/OpenSim/Data/MySQL/MySQLInventoryData.cs b/OpenSim/Data/MySQL/MySQLInventoryData.cs
index 0aea30f..2dca3eb 100644
--- a/OpenSim/Data/MySQL/MySQLInventoryData.cs
+++ b/OpenSim/Data/MySQL/MySQLInventoryData.cs
@@ -286,7 +286,7 @@ namespace OpenSim.Data.MySQL
286 InventoryItemBase item = new InventoryItemBase(); 286 InventoryItemBase item = new InventoryItemBase();
287 287
288 // TODO: this is to handle a case where NULLs creep in there, which we are not sure is endemic to the system, or legacy. It would be nice to live fix these. 288 // TODO: this is to handle a case where NULLs creep in there, which we are not sure is endemic to the system, or legacy. It would be nice to live fix these.
289 // ( DBGuid.FromDB() reads db NULLs as well, returns UUID.Zero ) 289 // (DBGuid.FromDB() reads db NULLs as well, returns UUID.Zero)
290 item.CreatorId = reader["creatorID"].ToString(); 290 item.CreatorId = reader["creatorID"].ToString();
291 291
292 // Be a bit safer in parsing these because the 292 // Be a bit safer in parsing these because the
diff --git a/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index a39e68d..87f6d07 100644
--- a/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
+++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs
@@ -45,13 +45,22 @@ namespace OpenSim.Data.MySQL
45 /// <summary> 45 /// <summary>
46 /// A MySQL Interface for the Region Server 46 /// A MySQL Interface for the Region Server
47 /// </summary> 47 /// </summary>
48 public class MySQLDataStore : IRegionDataStore 48 public class MySQLSimulationData : ISimulationDataStore
49 { 49 {
50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
51 51
52 private string m_connectionString; 52 private string m_connectionString;
53 private object m_dbLock = new object(); 53 private object m_dbLock = new object();
54 54
55 public MySQLSimulationData()
56 {
57 }
58
59 public MySQLSimulationData(string connectionString)
60 {
61 Initialise(connectionString);
62 }
63
55 public void Initialise(string connectionString) 64 public void Initialise(string connectionString)
56 { 65 {
57 m_connectionString = connectionString; 66 m_connectionString = connectionString;
@@ -680,7 +689,7 @@ namespace OpenSim.Data.MySQL
680 "UserLocationX, UserLocationY, UserLocationZ, " + 689 "UserLocationX, UserLocationY, UserLocationZ, " +
681 "UserLookAtX, UserLookAtY, UserLookAtZ, " + 690 "UserLookAtX, UserLookAtY, UserLookAtZ, " +
682 "AuthbuyerID, OtherCleanTime, MediaType, MediaDescription, " + 691 "AuthbuyerID, OtherCleanTime, MediaType, MediaDescription, " +
683 "MediaSize, MediaLoop, ObscureMusic, ObscureMedia) values (" + 692 "MediaSize, MediaLoop, ObscureMusic, ObscureMedia) values (" +
684 "?UUID, ?RegionUUID, " + 693 "?UUID, ?RegionUUID, " +
685 "?LocalLandID, ?Bitmap, ?Name, ?Description, " + 694 "?LocalLandID, ?Bitmap, ?Name, ?Description, " +
686 "?OwnerUUID, ?IsGroupOwned, ?Area, ?AuctionID, " + 695 "?OwnerUUID, ?IsGroupOwned, ?Area, ?AuctionID, " +
@@ -691,7 +700,7 @@ namespace OpenSim.Data.MySQL
691 "?UserLocationX, ?UserLocationY, ?UserLocationZ, " + 700 "?UserLocationX, ?UserLocationY, ?UserLocationZ, " +
692 "?UserLookAtX, ?UserLookAtY, ?UserLookAtZ, " + 701 "?UserLookAtX, ?UserLookAtY, ?UserLookAtZ, " +
693 "?AuthbuyerID, ?OtherCleanTime, ?MediaType, ?MediaDescription, "+ 702 "?AuthbuyerID, ?OtherCleanTime, ?MediaType, ?MediaDescription, "+
694 "CONCAT(?MediaWidth, ',', ?MediaHeight), ?MediaLoop, ?ObscureMusic, ?ObscureMedia)"; 703 "CONCAT(?MediaWidth, ',', ?MediaHeight), ?MediaLoop, ?ObscureMusic, ?ObscureMedia)";
695 704
696 FillLandCommand(cmd, parcel.LandData, parcel.RegionUUID); 705 FillLandCommand(cmd, parcel.LandData, parcel.RegionUUID);
697 706
@@ -728,7 +737,7 @@ namespace OpenSim.Data.MySQL
728 737
729 string command = "select * from `regionwindlight` where region_id = ?regionID"; 738 string command = "select * from `regionwindlight` where region_id = ?regionID";
730 739
731 using(MySqlCommand cmd = new MySqlCommand(command)) 740 using (MySqlCommand cmd = new MySqlCommand(command))
732 { 741 {
733 cmd.Connection = dbcon; 742 cmd.Connection = dbcon;
734 743
@@ -1350,13 +1359,13 @@ namespace OpenSim.Data.MySQL
1350 m_log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name); 1359 m_log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name);
1351 } 1360 }
1352 1361
1353 newData.MediaDescription = (string) row["MediaDescription"]; 1362 newData.MediaDescription = (string) row["MediaDescription"];
1354 newData.MediaType = (string) row["MediaType"]; 1363 newData.MediaType = (string) row["MediaType"];
1355 newData.MediaWidth = Convert.ToInt32((((string) row["MediaSize"]).Split(','))[0]); 1364 newData.MediaWidth = Convert.ToInt32((((string) row["MediaSize"]).Split(','))[0]);
1356 newData.MediaHeight = Convert.ToInt32((((string) row["MediaSize"]).Split(','))[1]); 1365 newData.MediaHeight = Convert.ToInt32((((string) row["MediaSize"]).Split(','))[1]);
1357 newData.MediaLoop = Convert.ToBoolean(row["MediaLoop"]); 1366 newData.MediaLoop = Convert.ToBoolean(row["MediaLoop"]);
1358 newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]); 1367 newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]);
1359 newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]); 1368 newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]);
1360 1369
1361 newData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>(); 1370 newData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
1362 1371
@@ -1724,7 +1733,7 @@ namespace OpenSim.Data.MySQL
1724 1733
1725 s.State = (byte)(int)row["State"]; 1734 s.State = (byte)(int)row["State"];
1726 1735
1727 if (!(row["Media"] is System.DBNull)) 1736 if (!(row["Media"] is System.DBNull))
1728 s.Media = PrimitiveBaseShape.MediaList.FromXml((string)row["Media"]); 1737 s.Media = PrimitiveBaseShape.MediaList.FromXml((string)row["Media"]);
1729 1738
1730 return s; 1739 return s;
diff --git a/OpenSim/Data/Null/NullInventoryData.cs b/OpenSim/Data/Null/NullInventoryData.cs
index 8f196e2..fe9ed01 100644
--- a/OpenSim/Data/Null/NullInventoryData.cs
+++ b/OpenSim/Data/Null/NullInventoryData.cs
@@ -1,4 +1,31 @@
1using System; 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;
2using System.Collections.Generic; 29using System.Collections.Generic;
3 30
4using OpenMetaverse; 31using OpenMetaverse;
diff --git a/OpenSim/Data/Null/NullDataStore.cs b/OpenSim/Data/Null/NullSimulationData.cs
index 3ba44bb..34d3a4e 100644
--- a/OpenSim/Data/Null/NullDataStore.cs
+++ b/OpenSim/Data/Null/NullSimulationData.cs
@@ -36,7 +36,7 @@ namespace OpenSim.Data.Null
36 /// <summary> 36 /// <summary>
37 /// NULL DataStore, do not store anything 37 /// NULL DataStore, do not store anything
38 /// </summary> 38 /// </summary>
39 public class NullDataStore : IRegionDataStore 39 public class NullSimulationData : ISimulationDataStore
40 { 40 {
41 public void Initialise(string dbfile) 41 public void Initialise(string dbfile)
42 { 42 {
@@ -73,7 +73,6 @@ namespace OpenSim.Data.Null
73 { 73 {
74 } 74 }
75 75
76 // see IRegionDatastore
77 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) 76 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
78 { 77 {
79 } 78 }
diff --git a/OpenSim/Data/SQLite/SQLiteEstateData.cs b/OpenSim/Data/SQLite/SQLiteEstateData.cs
index fcf041e..d1d67eb 100644
--- a/OpenSim/Data/SQLite/SQLiteEstateData.cs
+++ b/OpenSim/Data/SQLite/SQLiteEstateData.cs
@@ -49,6 +49,15 @@ namespace OpenSim.Data.SQLite
49 private Dictionary<string, FieldInfo> m_FieldMap = 49 private Dictionary<string, FieldInfo> m_FieldMap =
50 new Dictionary<string, FieldInfo>(); 50 new Dictionary<string, FieldInfo>();
51 51
52 public SQLiteEstateStore()
53 {
54 }
55
56 public SQLiteEstateStore(string connectionString)
57 {
58 Initialise(connectionString);
59 }
60
52 public void Initialise(string connectionString) 61 public void Initialise(string connectionString)
53 { 62 {
54 m_connectionString = connectionString; 63 m_connectionString = connectionString;
diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
index ece2495..ecf8e02 100644
--- a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
+++ b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
@@ -731,12 +731,12 @@ namespace OpenSim.Data.SQLite
731 **********************************************************************/ 731 **********************************************************************/
732 732
733 protected void CreateDataSetMapping(IDataAdapter da, string tableName) 733 protected void CreateDataSetMapping(IDataAdapter da, string tableName)
734 { 734 {
735 ITableMapping dbMapping = da.TableMappings.Add(tableName, tableName); 735 ITableMapping dbMapping = da.TableMappings.Add(tableName, tableName);
736 foreach (DataColumn col in ds.Tables[tableName].Columns) 736 foreach (DataColumn col in ds.Tables[tableName].Columns)
737 { 737 {
738 dbMapping.ColumnMappings.Add(col.ColumnName, col.ColumnName); 738 dbMapping.ColumnMappings.Add(col.ColumnName, col.ColumnName);
739 } 739 }
740 } 740 }
741 741
742 /// <summary> 742 /// <summary>
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index 88699a7..3e9bc3f 100644
--- a/OpenSim/Data/SQLite/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -44,7 +44,7 @@ namespace OpenSim.Data.SQLite
44 /// <summary> 44 /// <summary>
45 /// A RegionData Interface to the SQLite database 45 /// A RegionData Interface to the SQLite database
46 /// </summary> 46 /// </summary>
47 public class SQLiteRegionData : IRegionDataStore 47 public class SQLiteSimulationData : ISimulationDataStore
48 { 48 {
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
@@ -70,6 +70,15 @@ namespace OpenSim.Data.SQLite
70 70
71 private String m_connectionString; 71 private String m_connectionString;
72 72
73 public SQLiteSimulationData()
74 {
75 }
76
77 public SQLiteSimulationData(string connectionString)
78 {
79 Initialise(connectionString);
80 }
81
73 // Temporary attribute while this is experimental 82 // Temporary attribute while this is experimental
74 83
75 /*********************************************************************** 84 /***********************************************************************
@@ -79,7 +88,6 @@ namespace OpenSim.Data.SQLite
79 **********************************************************************/ 88 **********************************************************************/
80 89
81 /// <summary> 90 /// <summary>
82 /// See IRegionDataStore
83 /// <list type="bullet"> 91 /// <list type="bullet">
84 /// <item>Initialises RegionData Interface</item> 92 /// <item>Initialises RegionData Interface</item>
85 /// <item>Loads and initialises a new SQLite connection and maintains it.</item> 93 /// <item>Loads and initialises a new SQLite connection and maintains it.</item>
@@ -177,7 +185,7 @@ namespace OpenSim.Data.SQLite
177 { 185 {
178 m_log.Info("[SQLITE REGION DB]: Caught fill error on primitems table"); 186 m_log.Info("[SQLITE REGION DB]: Caught fill error on primitems table");
179 } 187 }
180 188
181 try 189 try
182 { 190 {
183 terrainDa.Fill(ds.Tables["terrain"]); 191 terrainDa.Fill(ds.Tables["terrain"]);
@@ -511,7 +519,7 @@ namespace OpenSim.Data.SQLite
511 "[SQLITE REGION DB]: No shape found for prim in storage, so setting default box shape"); 519 "[SQLITE REGION DB]: No shape found for prim in storage, so setting default box shape");
512 prim.Shape = PrimitiveBaseShape.Default; 520 prim.Shape = PrimitiveBaseShape.Default;
513 } 521 }
514 522
515 createdObjects[new UUID(objID)].AddPart(prim); 523 createdObjects[new UUID(objID)].AddPart(prim);
516 LoadItems(prim); 524 LoadItems(prim);
517 } 525 }
@@ -535,17 +543,17 @@ namespace OpenSim.Data.SQLite
535 /// </summary> 543 /// </summary>
536 /// <param name="prim">the prim</param> 544 /// <param name="prim">the prim</param>
537 private void LoadItems(SceneObjectPart prim) 545 private void LoadItems(SceneObjectPart prim)
538 { 546 {
539// m_log.DebugFormat("[SQLITE REGION DB]: Loading inventory for {0} {1}", prim.Name, prim.UUID); 547// m_log.DebugFormat("[SQLITE REGION DB]: Loading inventory for {0} {1}", prim.Name, prim.UUID);
540 548
541 DataTable dbItems = ds.Tables["primitems"]; 549 DataTable dbItems = ds.Tables["primitems"];
542 String sql = String.Format("primID = '{0}'", prim.UUID.ToString()); 550 String sql = String.Format("primID = '{0}'", prim.UUID.ToString());
543 DataRow[] dbItemRows = dbItems.Select(sql); 551 DataRow[] dbItemRows = dbItems.Select(sql);
544 IList<TaskInventoryItem> inventory = new List<TaskInventoryItem>(); 552 IList<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
545 553
546// m_log.DebugFormat( 554// m_log.DebugFormat(
547// "[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID); 555// "[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID);
548 556
549 foreach (DataRow row in dbItemRows) 557 foreach (DataRow row in dbItemRows)
550 { 558 {
551 TaskInventoryItem item = buildItem(row); 559 TaskInventoryItem item = buildItem(row);
@@ -694,8 +702,6 @@ namespace OpenSim.Data.SQLite
694 { 702 {
695 landaccesslist.Rows.Remove(rowsToDelete[iter]); 703 landaccesslist.Rows.Remove(rowsToDelete[iter]);
696 } 704 }
697
698
699 } 705 }
700 Commit(); 706 Commit();
701 } 707 }
@@ -805,7 +811,7 @@ namespace OpenSim.Data.SQLite
805 try 811 try
806 { 812 {
807 regionSettingsDa.Update(ds, "regionsettings"); 813 regionSettingsDa.Update(ds, "regionsettings");
808 } 814 }
809 catch (SqliteException SqlEx) 815 catch (SqliteException SqlEx)
810 { 816 {
811 throw new Exception( 817 throw new Exception(
@@ -975,7 +981,7 @@ namespace OpenSim.Data.SQLite
975 createCol(prims, "CollisionSoundVolume", typeof(Double)); 981 createCol(prims, "CollisionSoundVolume", typeof(Double));
976 982
977 createCol(prims, "VolumeDetect", typeof(Int16)); 983 createCol(prims, "VolumeDetect", typeof(Int16));
978 984
979 createCol(prims, "MediaURL", typeof(String)); 985 createCol(prims, "MediaURL", typeof(String));
980 986
981 // Add in contraints 987 // Add in contraints
@@ -1192,10 +1198,10 @@ namespace OpenSim.Data.SQLite
1192 private SceneObjectPart buildPrim(DataRow row) 1198 private SceneObjectPart buildPrim(DataRow row)
1193 { 1199 {
1194 // Code commented. Uncomment to test the unit test inline. 1200 // Code commented. Uncomment to test the unit test inline.
1195 1201
1196 // The unit test mentions this commented code for the purposes 1202 // The unit test mentions this commented code for the purposes
1197 // of debugging a unit test failure 1203 // of debugging a unit test failure
1198 1204
1199 // SceneObjectGroup sog = new SceneObjectGroup(); 1205 // SceneObjectGroup sog = new SceneObjectGroup();
1200 // SceneObjectPart sop = new SceneObjectPart(); 1206 // SceneObjectPart sop = new SceneObjectPart();
1201 // sop.LocalId = 1; 1207 // sop.LocalId = 1;
@@ -1212,7 +1218,7 @@ namespace OpenSim.Data.SQLite
1212 // TODO: this doesn't work yet because something more 1218 // TODO: this doesn't work yet because something more
1213 // interesting has to be done to actually get these values 1219 // interesting has to be done to actually get these values
1214 // back out. Not enough time to figure it out yet. 1220 // back out. Not enough time to figure it out yet.
1215 1221
1216 SceneObjectPart prim = new SceneObjectPart(); 1222 SceneObjectPart prim = new SceneObjectPart();
1217 prim.UUID = new UUID((String) row["UUID"]); 1223 prim.UUID = new UUID((String) row["UUID"]);
1218 // explicit conversion of integers is required, which sort 1224 // explicit conversion of integers is required, which sort
@@ -1342,7 +1348,7 @@ namespace OpenSim.Data.SQLite
1342 1348
1343 if (Convert.ToInt16(row["VolumeDetect"]) != 0) 1349 if (Convert.ToInt16(row["VolumeDetect"]) != 0)
1344 prim.VolumeDetectActive = true; 1350 prim.VolumeDetectActive = true;
1345 1351
1346 if (!(row["MediaURL"] is System.DBNull)) 1352 if (!(row["MediaURL"] is System.DBNull))
1347 { 1353 {
1348 //m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType()); 1354 //m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType());
@@ -1681,7 +1687,7 @@ namespace OpenSim.Data.SQLite
1681 row["VolumeDetect"] = 1; 1687 row["VolumeDetect"] = 1;
1682 else 1688 else
1683 row["VolumeDetect"] = 0; 1689 row["VolumeDetect"] = 0;
1684 1690
1685 row["MediaURL"] = prim.MediaUrl; 1691 row["MediaURL"] = prim.MediaUrl;
1686 } 1692 }
1687 1693
@@ -1759,12 +1765,12 @@ namespace OpenSim.Data.SQLite
1759 row["UserLookAtZ"] = land.UserLookAt.Z; 1765 row["UserLookAtZ"] = land.UserLookAt.Z;
1760 row["AuthbuyerID"] = land.AuthBuyerID.ToString(); 1766 row["AuthbuyerID"] = land.AuthBuyerID.ToString();
1761 row["OtherCleanTime"] = land.OtherCleanTime; 1767 row["OtherCleanTime"] = land.OtherCleanTime;
1762 row["MediaType"] = land.MediaType; 1768 row["MediaType"] = land.MediaType;
1763 row["MediaDescription"] = land.MediaDescription; 1769 row["MediaDescription"] = land.MediaDescription;
1764 row["MediaSize"] = land.MediaWidth.ToString() + "," + land.MediaHeight.ToString(); 1770 row["MediaSize"] = land.MediaWidth.ToString() + "," + land.MediaHeight.ToString();
1765 row["MediaLoop"] = land.MediaLoop.ToString(); 1771 row["MediaLoop"] = land.MediaLoop.ToString();
1766 row["ObscureMusic"] = land.ObscureMusic.ToString(); 1772 row["ObscureMusic"] = land.ObscureMusic.ToString();
1767 row["ObscureMedia"] = land.ObscureMedia.ToString(); 1773 row["ObscureMedia"] = land.ObscureMedia.ToString();
1768 } 1774 }
1769 1775
1770 /// <summary> 1776 /// <summary>
@@ -1862,10 +1868,10 @@ namespace OpenSim.Data.SQLite
1862 s.TextureEntry = textureEntry; 1868 s.TextureEntry = textureEntry;
1863 1869
1864 s.ExtraParams = (byte[]) row["ExtraParams"]; 1870 s.ExtraParams = (byte[]) row["ExtraParams"];
1865 1871
1866 if (!(row["Media"] is System.DBNull)) 1872 if (!(row["Media"] is System.DBNull))
1867 s.Media = PrimitiveBaseShape.MediaList.FromXml((string)row["Media"]); 1873 s.Media = PrimitiveBaseShape.MediaList.FromXml((string)row["Media"]);
1868 1874
1869 return s; 1875 return s;
1870 } 1876 }
1871 1877
@@ -1909,7 +1915,7 @@ namespace OpenSim.Data.SQLite
1909 1915
1910 row["Texture"] = s.TextureEntry; 1916 row["Texture"] = s.TextureEntry;
1911 row["ExtraParams"] = s.ExtraParams; 1917 row["ExtraParams"] = s.ExtraParams;
1912 1918
1913 if (s.Media != null) 1919 if (s.Media != null)
1914 row["Media"] = s.Media.ToXml(); 1920 row["Media"] = s.Media.ToXml();
1915 } 1921 }
@@ -1951,7 +1957,6 @@ namespace OpenSim.Data.SQLite
1951 } 1957 }
1952 1958
1953 /// <summary> 1959 /// <summary>
1954 /// see IRegionDatastore
1955 /// </summary> 1960 /// </summary>
1956 /// <param name="primID"></param> 1961 /// <param name="primID"></param>
1957 /// <param name="items"></param> 1962 /// <param name="items"></param>
@@ -2248,7 +2253,6 @@ namespace OpenSim.Data.SQLite
2248 delete.Parameters.Add(createSqliteParameter("AccessUUID", typeof(String))); 2253 delete.Parameters.Add(createSqliteParameter("AccessUUID", typeof(String)));
2249 da.DeleteCommand = delete; 2254 da.DeleteCommand = delete;
2250 da.DeleteCommand.Connection = conn; 2255 da.DeleteCommand.Connection = conn;
2251
2252 } 2256 }
2253 2257
2254 private void setupRegionSettingsCommands(SqliteDataAdapter da, SqliteConnection conn) 2258 private void setupRegionSettingsCommands(SqliteDataAdapter da, SqliteConnection conn)
@@ -2320,7 +2324,7 @@ namespace OpenSim.Data.SQLite
2320 return DbType.String; 2324 return DbType.String;
2321 } 2325 }
2322 } 2326 }
2323 2327
2324 static void PrintDataSet(DataSet ds) 2328 static void PrintDataSet(DataSet ds)
2325 { 2329 {
2326 // Print out any name and extended properties. 2330 // Print out any name and extended properties.
diff --git a/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs b/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs
index bf8ee14..547ea6b 100644
--- a/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs
+++ b/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs
@@ -49,6 +49,15 @@ namespace OpenSim.Data.SQLiteLegacy
49 private Dictionary<string, FieldInfo> m_FieldMap = 49 private Dictionary<string, FieldInfo> m_FieldMap =
50 new Dictionary<string, FieldInfo>(); 50 new Dictionary<string, FieldInfo>();
51 51
52 public SQLiteEstateStore()
53 {
54 }
55
56 public SQLiteEstateStore(string connectionString)
57 {
58 Initialise(connectionString);
59 }
60
52 public void Initialise(string connectionString) 61 public void Initialise(string connectionString)
53 { 62 {
54 m_connectionString = connectionString; 63 m_connectionString = connectionString;
diff --git a/OpenSim/Data/SQLiteLegacy/SQLiteRegionData.cs b/OpenSim/Data/SQLiteLegacy/SQLiteSimulationData.cs
index b5ce4c0..2dde926 100644
--- a/OpenSim/Data/SQLiteLegacy/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLiteLegacy/SQLiteSimulationData.cs
@@ -43,7 +43,7 @@ namespace OpenSim.Data.SQLiteLegacy
43 /// <summary> 43 /// <summary>
44 /// A RegionData Interface to the SQLite database 44 /// A RegionData Interface to the SQLite database
45 /// </summary> 45 /// </summary>
46 public class SQLiteRegionData : IRegionDataStore 46 public class SQLiteSimulationData : ISimulationDataStore
47 { 47 {
48 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 48 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
49 49
@@ -69,6 +69,15 @@ namespace OpenSim.Data.SQLiteLegacy
69 69
70 private String m_connectionString; 70 private String m_connectionString;
71 71
72 public SQLiteSimulationData()
73 {
74 }
75
76 public SQLiteSimulationData(string connectionString)
77 {
78 Initialise(connectionString);
79 }
80
72 // Temporary attribute while this is experimental 81 // Temporary attribute while this is experimental
73 82
74 /*********************************************************************** 83 /***********************************************************************
@@ -78,7 +87,6 @@ namespace OpenSim.Data.SQLiteLegacy
78 **********************************************************************/ 87 **********************************************************************/
79 88
80 /// <summary> 89 /// <summary>
81 /// See IRegionDataStore
82 /// <list type="bullet"> 90 /// <list type="bullet">
83 /// <item>Initialises RegionData Interface</item> 91 /// <item>Initialises RegionData Interface</item>
84 /// <item>Loads and initialises a new SQLite connection and maintains it.</item> 92 /// <item>Loads and initialises a new SQLite connection and maintains it.</item>
@@ -1888,7 +1896,6 @@ namespace OpenSim.Data.SQLiteLegacy
1888 } 1896 }
1889 1897
1890 /// <summary> 1898 /// <summary>
1891 /// see IRegionDatastore
1892 /// </summary> 1899 /// </summary>
1893 /// <param name="primID"></param> 1900 /// <param name="primID"></param>
1894 /// <param name="items"></param> 1901 /// <param name="items"></param>
diff --git a/OpenSim/Data/Tests/BasicDataServiceTest.cs b/OpenSim/Data/Tests/BasicDataServiceTest.cs
index c261126..7d85f0c 100644
--- a/OpenSim/Data/Tests/BasicDataServiceTest.cs
+++ b/OpenSim/Data/Tests/BasicDataServiceTest.cs
@@ -1,4 +1,31 @@
1using System; 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;
2using System.IO; 29using System.IO;
3using System.Collections.Generic; 30using System.Collections.Generic;
4using log4net.Config; 31using log4net.Config;
@@ -41,13 +68,13 @@ namespace OpenSim.Data.Tests
41 { 68 {
42 m_connStr = !String.IsNullOrEmpty(conn) ? conn : DefaultTestConns.Get(typeof(TConn)); 69 m_connStr = !String.IsNullOrEmpty(conn) ? conn : DefaultTestConns.Get(typeof(TConn));
43 70
44 m_log = LogManager.GetLogger(this.GetType()); 71 m_log = LogManager.GetLogger(this.GetType());
45 OpenSim.Tests.Common.TestLogging.LogToConsole(); // TODO: Is that right? 72 OpenSim.Tests.Common.TestLogging.LogToConsole(); // TODO: Is that right?
46 } 73 }
47 74
48 /// <summary> 75 /// <summary>
49 /// To be overridden in derived classes. Do whatever init with the m_service, like setting the conn string to it. 76 /// To be overridden in derived classes. Do whatever init with the m_service, like setting the conn string to it.
50 /// You'd probably want to to cast the 'service' to a more specific type and store it in a member var. 77 /// You'd probably want to to cast the 'service' to a more specific type and store it in a member var.
51 /// This framework takes care of disposing it, if it's disposable. 78 /// This framework takes care of disposing it, if it's disposable.
52 /// </summary> 79 /// </summary>
53 /// <param name="service">The service being tested</param> 80 /// <param name="service">The service being tested</param>
@@ -118,12 +145,12 @@ namespace OpenSim.Data.Tests
118 { 145 {
119 if (m_service != null) 146 if (m_service != null)
120 { 147 {
121 if( m_service is IDisposable) 148 if (m_service is IDisposable)
122 ((IDisposable)m_service).Dispose(); 149 ((IDisposable)m_service).Dispose();
123 m_service = null; 150 m_service = null;
124 } 151 }
125 152
126 if( !String.IsNullOrEmpty(m_file) && File.Exists(m_file) ) 153 if (!String.IsNullOrEmpty(m_file) && File.Exists(m_file))
127 File.Delete(m_file); 154 File.Delete(m_file);
128 } 155 }
129 156
@@ -204,7 +231,7 @@ namespace OpenSim.Data.Tests
204 lst += ", " + s; 231 lst += ", " + s;
205 } 232 }
206 233
207 string sCond = stores.Length > 1 ? ("in (" + lst + ")") : ("=" + lst); 234 string sCond = stores.Length > 1 ? ("in (" + lst + ")") : ("=" + lst);
208 try 235 try
209 { 236 {
210 ExecuteSql("DELETE FROM migrations where name " + sCond); 237 ExecuteSql("DELETE FROM migrations where name " + sCond);
diff --git a/OpenSim/Data/Tests/DefaultTestConns.cs b/OpenSim/Data/Tests/DefaultTestConns.cs
index 7b52af5..7c47bdd 100644
--- a/OpenSim/Data/Tests/DefaultTestConns.cs
+++ b/OpenSim/Data/Tests/DefaultTestConns.cs
@@ -1,4 +1,31 @@
1using System; 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;
2using System.Collections.Generic; 29using System.Collections.Generic;
3using System.Linq; 30using System.Linq;
4using System.Text; 31using System.Text;
diff --git a/OpenSim/Data/Tests/RegionTests.cs b/OpenSim/Data/Tests/RegionTests.cs
index 29bf5a3..a081462 100644
--- a/OpenSim/Data/Tests/RegionTests.cs
+++ b/OpenSim/Data/Tests/RegionTests.cs
@@ -61,17 +61,17 @@ namespace OpenSim.Data.Tests
61#else 61#else
62 62
63 [TestFixture(Description = "Region store tests (SQLite)")] 63 [TestFixture(Description = "Region store tests (SQLite)")]
64 public class SQLiteRegionTests : RegionTests<SqliteConnection, SQLiteRegionData> 64 public class SQLiteRegionTests : RegionTests<SqliteConnection, SQLiteSimulationData>
65 { 65 {
66 } 66 }
67 67
68 [TestFixture(Description = "Region store tests (MySQL)")] 68 [TestFixture(Description = "Region store tests (MySQL)")]
69 public class MySqlRegionTests : RegionTests<MySqlConnection, MySQLDataStore> 69 public class MySqlRegionTests : RegionTests<MySqlConnection, MySQLSimulationData>
70 { 70 {
71 } 71 }
72 72
73 [TestFixture(Description = "Region store tests (MS SQL Server)")] 73 [TestFixture(Description = "Region store tests (MS SQL Server)")]
74 public class MSSQLRegionTests : RegionTests<SqlConnection, MSSQLRegionDataStore> 74 public class MSSQLRegionTests : RegionTests<SqlConnection, MSSQLSimulationData>
75 { 75 {
76 } 76 }
77 77
@@ -79,11 +79,11 @@ namespace OpenSim.Data.Tests
79 79
80 public class RegionTests<TConn, TRegStore> : BasicDataServiceTest<TConn, TRegStore> 80 public class RegionTests<TConn, TRegStore> : BasicDataServiceTest<TConn, TRegStore>
81 where TConn : DbConnection, new() 81 where TConn : DbConnection, new()
82 where TRegStore : class, IRegionDataStore, new() 82 where TRegStore : class, ISimulationDataStore, new()
83 { 83 {
84 bool m_rebuildDB; 84 bool m_rebuildDB;
85 85
86 public IRegionDataStore db; 86 public ISimulationDataStore db;
87 public UUID zero = UUID.Zero; 87 public UUID zero = UUID.Zero;
88 public UUID region1 = UUID.Random(); 88 public UUID region1 = UUID.Random();
89 public UUID region2 = UUID.Random(); 89 public UUID region2 = UUID.Random();
@@ -122,7 +122,7 @@ namespace OpenSim.Data.Tests
122 protected override void InitService(object service) 122 protected override void InitService(object service)
123 { 123 {
124 ClearDB(); 124 ClearDB();
125 db = (IRegionDataStore)service; 125 db = (ISimulationDataStore)service;
126 db.Initialise(m_connStr); 126 db.Initialise(m_connStr);
127 } 127 }
128 128
diff --git a/OpenSim/Framework/Capabilities/Caps.cs b/OpenSim/Framework/Capabilities/Caps.cs
index 8a339fe..6f32adf 100644
--- a/OpenSim/Framework/Capabilities/Caps.cs
+++ b/OpenSim/Framework/Capabilities/Caps.cs
@@ -760,7 +760,7 @@ namespace OpenSim.Framework.Capabilities
760 string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); 760 string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
761 761
762 BakedTextureUploader uploader = 762 BakedTextureUploader uploader =
763 new BakedTextureUploader( capsBase + uploaderPath, 763 new BakedTextureUploader(capsBase + uploaderPath,
764 m_httpListener); 764 m_httpListener);
765 uploader.OnUpLoad += BakedTextureUploaded; 765 uploader.OnUpLoad += BakedTextureUploaded;
766 766
diff --git a/OpenSim/Framework/ConfigSettings.cs b/OpenSim/Framework/ConfigSettings.cs
index 8feaa37..be77341 100644
--- a/OpenSim/Framework/ConfigSettings.cs
+++ b/OpenSim/Framework/ConfigSettings.cs
@@ -124,22 +124,6 @@ namespace OpenSim.Framework
124 set { m_standaloneUserSource = value; } 124 set { m_standaloneUserSource = value; }
125 } 125 }
126 126
127 protected string m_storageConnectionString;
128
129 public string StorageConnectionString
130 {
131 get { return m_storageConnectionString; }
132 set { m_storageConnectionString = value; }
133 }
134
135 protected string m_estateConnectionString;
136
137 public string EstateConnectionString
138 {
139 get { return m_estateConnectionString; }
140 set { m_estateConnectionString = value; }
141 }
142
143 protected string m_librariesXMLFile; 127 protected string m_librariesXMLFile;
144 public string LibrariesXMLFile 128 public string LibrariesXMLFile
145 { 129 {
diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs
index b17dbc0..52bcd55 100644
--- a/OpenSim/Framework/Console/CommandConsole.cs
+++ b/OpenSim/Framework/Console/CommandConsole.cs
@@ -151,7 +151,7 @@ namespace OpenSim.Framework.Console
151 help.Add(commandInfo.descriptive_help); 151 help.Add(commandInfo.descriptive_help);
152 152
153 if (descriptiveHelp != string.Empty) 153 if (descriptiveHelp != string.Empty)
154 help.Add(string.Empty); 154 help.Add(string.Empty);
155 } 155 }
156 else 156 else
157 { 157 {
diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs
index aab920b..22ce880 100755
--- a/OpenSim/Framework/Console/ConsoleBase.cs
+++ b/OpenSim/Framework/Console/ConsoleBase.cs
@@ -89,6 +89,57 @@ namespace OpenSim.Framework.Console
89 89
90 return ret; 90 return ret;
91 } 91 }
92
93 public string CmdPrompt(string p, List<char> excludedCharacters)
94 {
95 bool itisdone = false;
96 string ret = String.Empty;
97 while (!itisdone)
98 {
99 itisdone = true;
100 ret = CmdPrompt(p);
101
102 foreach (char c in excludedCharacters)
103 {
104 if (ret.Contains(c.ToString()))
105 {
106 System.Console.WriteLine("The character \"" + c.ToString() + "\" is not permitted.");
107 itisdone = false;
108 }
109 }
110 }
111
112 return ret;
113 }
114
115 public string CmdPrompt(string p, string def, List<char> excludedCharacters)
116 {
117 bool itisdone = false;
118 string ret = String.Empty;
119 while (!itisdone)
120 {
121 itisdone = true;
122 ret = CmdPrompt(p, def);
123
124 if (ret == String.Empty)
125 {
126 ret = def;
127 }
128 else
129 {
130 foreach (char c in excludedCharacters)
131 {
132 if (ret.Contains(c.ToString()))
133 {
134 System.Console.WriteLine("The character \"" + c.ToString() + "\" is not permitted.");
135 itisdone = false;
136 }
137 }
138 }
139 }
140
141 return ret;
142 }
92 143
93 // Displays a command prompt and returns a default value, user may only enter 1 of 2 options 144 // Displays a command prompt and returns a default value, user may only enter 1 of 2 options
94 public string CmdPrompt(string prompt, string defaultresponse, List<string> options) 145 public string CmdPrompt(string prompt, string defaultresponse, List<string> options)
diff --git a/OpenSim/Framework/Console/LocalConsole.cs b/OpenSim/Framework/Console/LocalConsole.cs
index a3036d0..6043094 100644
--- a/OpenSim/Framework/Console/LocalConsole.cs
+++ b/OpenSim/Framework/Console/LocalConsole.cs
@@ -38,7 +38,7 @@ namespace OpenSim.Framework.Console
38{ 38{
39 /// <summary> 39 /// <summary>
40 /// A console that uses cursor control and color 40 /// A console that uses cursor control and color
41 /// </summary> 41 /// </summary>
42 public class LocalConsole : CommandConsole 42 public class LocalConsole : CommandConsole
43 { 43 {
44// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -100,8 +100,8 @@ namespace OpenSim.Framework.Console
100 private int SetCursorTop(int top) 100 private int SetCursorTop(int top)
101 { 101 {
102 // From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try 102 // From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
103 // to set a cursor row position with a currently invalid column, mono will throw an exception. 103 // to set a cursor row position with a currently invalid column, mono will throw an exception.
104 // Therefore, we need to make sure that the column position is valid first. 104 // Therefore, we need to make sure that the column position is valid first.
105 int left = System.Console.CursorLeft; 105 int left = System.Console.CursorLeft;
106 106
107 if (left < 0) 107 if (left < 0)
@@ -121,7 +121,7 @@ namespace OpenSim.Framework.Console
121 { 121 {
122 top = 0; 122 top = 0;
123 } 123 }
124 else 124 else
125 { 125 {
126 int bh = System.Console.BufferHeight; 126 int bh = System.Console.BufferHeight;
127 127
@@ -133,7 +133,7 @@ namespace OpenSim.Framework.Console
133 System.Console.CursorTop = top; 133 System.Console.CursorTop = top;
134 134
135 return top; 135 return top;
136 } 136 }
137 137
138 /// <summary> 138 /// <summary>
139 /// Set the cursor column. 139 /// Set the cursor column.
@@ -145,12 +145,12 @@ namespace OpenSim.Framework.Console
145 /// </param> 145 /// </param>
146 /// <returns> 146 /// <returns>
147 /// The new cursor column. 147 /// The new cursor column.
148 /// </returns> 148 /// </returns>
149 private int SetCursorLeft(int left) 149 private int SetCursorLeft(int left)
150 { 150 {
151 // From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try 151 // From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
152 // to set a cursor column position with a currently invalid row, mono will throw an exception. 152 // to set a cursor column position with a currently invalid row, mono will throw an exception.
153 // Therefore, we need to make sure that the row position is valid first. 153 // Therefore, we need to make sure that the row position is valid first.
154 int top = System.Console.CursorTop; 154 int top = System.Console.CursorTop;
155 155
156 if (top < 0) 156 if (top < 0)
@@ -214,7 +214,7 @@ namespace OpenSim.Framework.Console
214 System.Console.Write("{0}", prompt); 214 System.Console.Write("{0}", prompt);
215 215
216 SetCursorTop(new_y); 216 SetCursorTop(new_y);
217 SetCursorLeft(new_x); 217 SetCursorLeft(new_x);
218 } 218 }
219 } 219 }
220 220
@@ -461,7 +461,8 @@ namespace OpenSim.Framework.Console
461 SetCursorLeft(0); 461 SetCursorLeft(0);
462 y = SetCursorTop(y); 462 y = SetCursorTop(y);
463 463
464 System.Console.WriteLine("{0}{1}", prompt, cmdline); 464 System.Console.WriteLine();
465 //Show();
465 466
466 lock (cmdline) 467 lock (cmdline)
467 { 468 {
@@ -486,7 +487,7 @@ namespace OpenSim.Framework.Console
486 } 487 }
487 } 488 }
488 489
489 AddToHistory(cmdline.ToString()); 490 //AddToHistory(cmdline.ToString());
490 return cmdline.ToString(); 491 return cmdline.ToString();
491 default: 492 default:
492 break; 493 break;
diff --git a/OpenSim/Framework/Console/MockConsole.cs b/OpenSim/Framework/Console/MockConsole.cs
index 9eb1977..a29b370 100644
--- a/OpenSim/Framework/Console/MockConsole.cs
+++ b/OpenSim/Framework/Console/MockConsole.cs
@@ -1,4 +1,31 @@
1using System; 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;
2using System.Threading; 29using System.Threading;
3using System.Collections.Generic; 30using System.Collections.Generic;
4using System.Text; 31using System.Text;
diff --git a/OpenSim/Framework/LandData.cs b/OpenSim/Framework/LandData.cs
index 5bb0413..3fb2fd6 100644
--- a/OpenSim/Framework/LandData.cs
+++ b/OpenSim/Framework/LandData.cs
@@ -89,13 +89,13 @@ namespace OpenSim.Framework
89 private Vector3 _userLocation = new Vector3(); 89 private Vector3 _userLocation = new Vector3();
90 private Vector3 _userLookAt = new Vector3(); 90 private Vector3 _userLookAt = new Vector3();
91 private int _otherCleanTime = 0; 91 private int _otherCleanTime = 0;
92 private string _mediaType = "none/none"; 92 private string _mediaType = "none/none";
93 private string _mediaDescription = ""; 93 private string _mediaDescription = "";
94 private int _mediaHeight = 0; 94 private int _mediaHeight = 0;
95 private int _mediaWidth = 0; 95 private int _mediaWidth = 0;
96 private bool _mediaLoop = false; 96 private bool _mediaLoop = false;
97 private bool _obscureMusic = false; 97 private bool _obscureMusic = false;
98 private bool _obscureMedia = false; 98 private bool _obscureMedia = false;
99 99
100 /// <summary> 100 /// <summary>
101 /// Whether to obscure parcel media URL 101 /// Whether to obscure parcel media URL
@@ -690,13 +690,13 @@ namespace OpenSim.Framework
690 landData._userLocation = _userLocation; 690 landData._userLocation = _userLocation;
691 landData._userLookAt = _userLookAt; 691 landData._userLookAt = _userLookAt;
692 landData._otherCleanTime = _otherCleanTime; 692 landData._otherCleanTime = _otherCleanTime;
693 landData._mediaType = _mediaType; 693 landData._mediaType = _mediaType;
694 landData._mediaDescription = _mediaDescription; 694 landData._mediaDescription = _mediaDescription;
695 landData._mediaWidth = _mediaWidth; 695 landData._mediaWidth = _mediaWidth;
696 landData._mediaHeight = _mediaHeight; 696 landData._mediaHeight = _mediaHeight;
697 landData._mediaLoop = _mediaLoop; 697 landData._mediaLoop = _mediaLoop;
698 landData._obscureMusic = _obscureMusic; 698 landData._obscureMusic = _obscureMusic;
699 landData._obscureMedia = _obscureMedia; 699 landData._obscureMedia = _obscureMedia;
700 700
701 landData._parcelAccessList.Clear(); 701 landData._parcelAccessList.Clear();
702 foreach (ParcelManager.ParcelAccessEntry entry in _parcelAccessList) 702 foreach (ParcelManager.ParcelAccessEntry entry in _parcelAccessList)
diff --git a/OpenSim/Framework/LandUpdateArgs.cs b/OpenSim/Framework/LandUpdateArgs.cs
index ed496a1..7d6c4f2 100644
--- a/OpenSim/Framework/LandUpdateArgs.cs
+++ b/OpenSim/Framework/LandUpdateArgs.cs
@@ -49,12 +49,12 @@ namespace OpenSim.Framework
49 public UUID SnapshotID; 49 public UUID SnapshotID;
50 public Vector3 UserLocation; 50 public Vector3 UserLocation;
51 public Vector3 UserLookAt; 51 public Vector3 UserLookAt;
52 public string MediaType; 52 public string MediaType;
53 public string MediaDescription; 53 public string MediaDescription;
54 public int MediaHeight; 54 public int MediaHeight;
55 public int MediaWidth; 55 public int MediaWidth;
56 public bool MediaLoop; 56 public bool MediaLoop;
57 public bool ObscureMusic; 57 public bool ObscureMusic;
58 public bool ObscureMedia; 58 public bool ObscureMedia;
59 } 59 }
60} 60}
diff --git a/OpenSim/Framework/Lazy.cs b/OpenSim/Framework/Lazy.cs
index 8a417ac..91de4bd 100644
--- a/OpenSim/Framework/Lazy.cs
+++ b/OpenSim/Framework/Lazy.cs
@@ -1,4 +1,4 @@
1// 1//
2// Lazy.cs 2// Lazy.cs
3// 3//
4// Authors: 4// Authors:
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index a4587d8..f07ab7c 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -175,7 +175,7 @@ namespace OpenSim.Framework
175 } 175 }
176 } 176 }
177 } 177 }
178 178
179 /// <summary> 179 /// <summary>
180 /// Entries to store media textures on each face 180 /// Entries to store media textures on each face
181 /// </summary> 181 /// </summary>
@@ -1216,28 +1216,28 @@ namespace OpenSim.Framework
1216 prim.Properties.Permissions = new Permissions(); 1216 prim.Properties.Permissions = new Permissions();
1217 prim.Properties.SalePrice = 10; 1217 prim.Properties.SalePrice = 10;
1218 prim.Properties.SaleType = new SaleType(); 1218 prim.Properties.SaleType = new SaleType();
1219 1219
1220 return prim; 1220 return prim;
1221 } 1221 }
1222 1222
1223 /// <summary> 1223 /// <summary>
1224 /// Encapsulates a list of media entries. 1224 /// Encapsulates a list of media entries.
1225 /// </summary> 1225 /// </summary>
1226 /// This class is necessary because we want to replace auto-serialization of MediaEntry with something more 1226 /// This class is necessary because we want to replace auto-serialization of MediaEntry with something more
1227 /// OSD like and less vulnerable to change. 1227 /// OSD like and less vulnerable to change.
1228 public class MediaList : List<MediaEntry>, IXmlSerializable 1228 public class MediaList : List<MediaEntry>, IXmlSerializable
1229 { 1229 {
1230 public const string MEDIA_TEXTURE_TYPE = "sl"; 1230 public const string MEDIA_TEXTURE_TYPE = "sl";
1231 1231
1232 public MediaList() : base() {} 1232 public MediaList() : base() {}
1233 public MediaList(IEnumerable<MediaEntry> collection) : base(collection) {} 1233 public MediaList(IEnumerable<MediaEntry> collection) : base(collection) {}
1234 public MediaList(int capacity) : base(capacity) {} 1234 public MediaList(int capacity) : base(capacity) {}
1235 1235
1236 public XmlSchema GetSchema() 1236 public XmlSchema GetSchema()
1237 { 1237 {
1238 return null; 1238 return null;
1239 } 1239 }
1240 1240
1241 public string ToXml() 1241 public string ToXml()
1242 { 1242 {
1243 lock (this) 1243 lock (this)
@@ -1245,78 +1245,78 @@ namespace OpenSim.Framework
1245 using (StringWriter sw = new StringWriter()) 1245 using (StringWriter sw = new StringWriter())
1246 { 1246 {
1247 using (XmlTextWriter xtw = new XmlTextWriter(sw)) 1247 using (XmlTextWriter xtw = new XmlTextWriter(sw))
1248 { 1248 {
1249 xtw.WriteStartElement("OSMedia"); 1249 xtw.WriteStartElement("OSMedia");
1250 xtw.WriteAttributeString("type", MEDIA_TEXTURE_TYPE); 1250 xtw.WriteAttributeString("type", MEDIA_TEXTURE_TYPE);
1251 xtw.WriteAttributeString("version", "0.1"); 1251 xtw.WriteAttributeString("version", "0.1");
1252 1252
1253 OSDArray meArray = new OSDArray(); 1253 OSDArray meArray = new OSDArray();
1254 foreach (MediaEntry me in this) 1254 foreach (MediaEntry me in this)
1255 { 1255 {
1256 OSD osd = (null == me ? new OSD() : me.GetOSD()); 1256 OSD osd = (null == me ? new OSD() : me.GetOSD());
1257 meArray.Add(osd); 1257 meArray.Add(osd);
1258 } 1258 }
1259 1259
1260 xtw.WriteStartElement("OSData"); 1260 xtw.WriteStartElement("OSData");
1261 xtw.WriteRaw(OSDParser.SerializeLLSDXmlString(meArray)); 1261 xtw.WriteRaw(OSDParser.SerializeLLSDXmlString(meArray));
1262 xtw.WriteEndElement(); 1262 xtw.WriteEndElement();
1263 1263
1264 xtw.WriteEndElement(); 1264 xtw.WriteEndElement();
1265 1265
1266 xtw.Flush(); 1266 xtw.Flush();
1267 return sw.ToString(); 1267 return sw.ToString();
1268 } 1268 }
1269 } 1269 }
1270 } 1270 }
1271 } 1271 }
1272 1272
1273 public void WriteXml(XmlWriter writer) 1273 public void WriteXml(XmlWriter writer)
1274 { 1274 {
1275 writer.WriteRaw(ToXml()); 1275 writer.WriteRaw(ToXml());
1276 } 1276 }
1277 1277
1278 public static MediaList FromXml(string rawXml) 1278 public static MediaList FromXml(string rawXml)
1279 { 1279 {
1280 MediaList ml = new MediaList(); 1280 MediaList ml = new MediaList();
1281 ml.ReadXml(rawXml); 1281 ml.ReadXml(rawXml);
1282 return ml; 1282 return ml;
1283 } 1283 }
1284 1284
1285 public void ReadXml(string rawXml) 1285 public void ReadXml(string rawXml)
1286 { 1286 {
1287 using (StringReader sr = new StringReader(rawXml)) 1287 using (StringReader sr = new StringReader(rawXml))
1288 { 1288 {
1289 using (XmlTextReader xtr = new XmlTextReader(sr)) 1289 using (XmlTextReader xtr = new XmlTextReader(sr))
1290 { 1290 {
1291 xtr.MoveToContent(); 1291 xtr.MoveToContent();
1292 1292
1293 string type = xtr.GetAttribute("type"); 1293 string type = xtr.GetAttribute("type");
1294 //m_log.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type); 1294 //m_log.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type);
1295 1295
1296 if (type != MEDIA_TEXTURE_TYPE) 1296 if (type != MEDIA_TEXTURE_TYPE)
1297 return; 1297 return;
1298 1298
1299 xtr.ReadStartElement("OSMedia"); 1299 xtr.ReadStartElement("OSMedia");
1300 1300
1301 OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml()); 1301 OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml());
1302 foreach (OSD osdMe in osdMeArray) 1302 foreach (OSD osdMe in osdMeArray)
1303 { 1303 {
1304 MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry()); 1304 MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry());
1305 Add(me); 1305 Add(me);
1306 } 1306 }
1307 1307
1308 xtr.ReadEndElement(); 1308 xtr.ReadEndElement();
1309 } 1309 }
1310 } 1310 }
1311 } 1311 }
1312 1312
1313 public void ReadXml(XmlReader reader) 1313 public void ReadXml(XmlReader reader)
1314 { 1314 {
1315 if (reader.IsEmptyElement) 1315 if (reader.IsEmptyElement)
1316 return; 1316 return;
1317 1317
1318 ReadXml(reader.ReadInnerXml()); 1318 ReadXml(reader.ReadInnerXml());
1319 } 1319 }
1320 } 1320 }
1321 } 1321 }
1322} \ No newline at end of file 1322}
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index e36a72b..a006f3e 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -98,9 +98,9 @@ namespace OpenSim.Framework
98 98
99 [Serializable] 99 [Serializable]
100 public class SimpleRegionInfo 100 public class SimpleRegionInfo
101 { 101 {
102// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 102// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
103 103
104 /// <summary> 104 /// <summary>
105 /// The port by which http communication occurs with the region (most noticeably, CAPS communication) 105 /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
106 /// </summary> 106 /// </summary>
@@ -345,7 +345,7 @@ namespace OpenSim.Framework
345 public string proxyUrl = ""; 345 public string proxyUrl = "";
346 public int ProxyOffset = 0; 346 public int ProxyOffset = 0;
347 public string regionSecret = UUID.Random().ToString(); 347 public string regionSecret = UUID.Random().ToString();
348 348
349 public string osSecret; 349 public string osSecret;
350 350
351 public UUID lastMapUUID = UUID.Zero; 351 public UUID lastMapUUID = UUID.Zero;
@@ -700,7 +700,7 @@ namespace OpenSim.Framework
700 700
701 RegionID = new UUID(regionUUID); 701 RegionID = new UUID(regionUUID);
702 originRegionID = RegionID; // What IS this?! 702 originRegionID = RegionID; // What IS this?!
703 703
704 RegionName = name; 704 RegionName = name;
705 string location = config.GetString("Location", String.Empty); 705 string location = config.GetString("Location", String.Empty);
706 706
@@ -721,7 +721,7 @@ namespace OpenSim.Framework
721 721
722 // Internal IP 722 // Internal IP
723 IPAddress address; 723 IPAddress address;
724 724
725 if (config.Contains("InternalAddress")) 725 if (config.Contains("InternalAddress"))
726 { 726 {
727 address = IPAddress.Parse(config.GetString("InternalAddress", String.Empty)); 727 address = IPAddress.Parse(config.GetString("InternalAddress", String.Empty));
@@ -775,7 +775,7 @@ namespace OpenSim.Framework
775 { 775 {
776 m_externalHostName = Util.GetLocalHost().ToString(); 776 m_externalHostName = Util.GetLocalHost().ToString();
777 m_log.InfoFormat( 777 m_log.InfoFormat(
778 "[REGIONINFO]: Resolving SYSTEMIP to {0} for external hostname of region {1}", 778 "[REGIONINFO]: Resolving SYSTEMIP to {0} for external hostname of region {1}",
779 m_externalHostName, name); 779 m_externalHostName, name);
780 } 780 }
781 else 781 else
@@ -910,16 +910,16 @@ namespace OpenSim.Framework
910 910
911 configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, 911 configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
912 "Maximum size for nonphysical prims", m_nonphysPrimMax.ToString(), true); 912 "Maximum size for nonphysical prims", m_nonphysPrimMax.ToString(), true);
913 913
914 configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, 914 configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
915 "Maximum size for physical prims", m_physPrimMax.ToString(), true); 915 "Maximum size for physical prims", m_physPrimMax.ToString(), true);
916 916
917 configMember.addConfigurationOption("clamp_prim_size", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN, 917 configMember.addConfigurationOption("clamp_prim_size", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN,
918 "Clamp prims to max size", m_clampPrimSize.ToString(), true); 918 "Clamp prims to max size", m_clampPrimSize.ToString(), true);
919 919
920 configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, 920 configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
921 "Max objects this sim will hold", m_objectCapacity.ToString(), true); 921 "Max objects this sim will hold", m_objectCapacity.ToString(), true);
922 922
923 configMember.addConfigurationOption("scope_id", ConfigurationOption.ConfigurationTypes.TYPE_UUID, 923 configMember.addConfigurationOption("scope_id", ConfigurationOption.ConfigurationTypes.TYPE_UUID,
924 "Scope ID for this region", ScopeID.ToString(), true); 924 "Scope ID for this region", ScopeID.ToString(), true);
925 925
@@ -957,16 +957,16 @@ namespace OpenSim.Framework
957 957
958 configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, 958 configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY,
959 "Last Map Refresh", Util.UnixTimeSinceEpoch().ToString(), true); 959 "Last Map Refresh", Util.UnixTimeSinceEpoch().ToString(), true);
960 960
961 configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, 961 configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
962 "Maximum size for nonphysical prims", "0", true); 962 "Maximum size for nonphysical prims", "0", true);
963 963
964 configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, 964 configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
965 "Maximum size for physical prims", "0", true); 965 "Maximum size for physical prims", "0", true);
966 966
967 configMember.addConfigurationOption("clamp_prim_size", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN, 967 configMember.addConfigurationOption("clamp_prim_size", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN,
968 "Clamp prims to max size", "false", true); 968 "Clamp prims to max size", "false", true);
969 969
970 configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, 970 configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
971 "Max objects this sim will hold", "0", true); 971 "Max objects this sim will hold", "0", true);
972 972
diff --git a/OpenSim/Framework/SLUtil.cs b/OpenSim/Framework/SLUtil.cs
index a489806..9941a7f 100644
--- a/OpenSim/Framework/SLUtil.cs
+++ b/OpenSim/Framework/SLUtil.cs
@@ -46,7 +46,7 @@ namespace OpenSim.Framework
46 case AssetType.Texture: 46 case AssetType.Texture:
47 return "image/x-j2c"; 47 return "image/x-j2c";
48 case AssetType.Sound: 48 case AssetType.Sound:
49 return "application/ogg"; 49 return "audio/ogg";
50 case AssetType.CallingCard: 50 case AssetType.CallingCard:
51 return "application/vnd.ll.callingcard"; 51 return "application/vnd.ll.callingcard";
52 case AssetType.Landmark: 52 case AssetType.Landmark:
@@ -98,8 +98,6 @@ namespace OpenSim.Framework
98 return "application/vnd.ll.outfitfolder"; 98 return "application/vnd.ll.outfitfolder";
99 case AssetType.MyOutfitsFolder: 99 case AssetType.MyOutfitsFolder:
100 return "application/vnd.ll.myoutfitsfolder"; 100 return "application/vnd.ll.myoutfitsfolder";
101 case AssetType.InboxFolder:
102 return "application/vnd.ll.inboxfolder";
103 case AssetType.Unknown: 101 case AssetType.Unknown:
104 default: 102 default:
105 return "application/octet-stream"; 103 return "application/octet-stream";
@@ -128,7 +126,7 @@ namespace OpenSim.Framework
128 case InventoryType.Object: 126 case InventoryType.Object:
129 return "application/vnd.ll.primitive"; 127 return "application/vnd.ll.primitive";
130 case InventoryType.Sound: 128 case InventoryType.Sound:
131 return "application/ogg"; 129 return "audio/ogg";
132 case InventoryType.Snapshot: 130 case InventoryType.Snapshot:
133 case InventoryType.Texture: 131 case InventoryType.Texture:
134 return "image/x-j2c"; 132 return "image/x-j2c";
@@ -147,6 +145,7 @@ namespace OpenSim.Framework
147 case "image/jp2": 145 case "image/jp2":
148 return (sbyte)AssetType.Texture; 146 return (sbyte)AssetType.Texture;
149 case "application/ogg": 147 case "application/ogg":
148 case "audio/ogg":
150 return (sbyte)AssetType.Sound; 149 return (sbyte)AssetType.Sound;
151 case "application/vnd.ll.callingcard": 150 case "application/vnd.ll.callingcard":
152 case "application/x-metaverse-callingcard": 151 case "application/x-metaverse-callingcard":
@@ -209,8 +208,6 @@ namespace OpenSim.Framework
209 return (sbyte)AssetType.OutfitFolder; 208 return (sbyte)AssetType.OutfitFolder;
210 case "application/vnd.ll.myoutfitsfolder": 209 case "application/vnd.ll.myoutfitsfolder":
211 return (sbyte)AssetType.MyOutfitsFolder; 210 return (sbyte)AssetType.MyOutfitsFolder;
212 case "application/vnd.ll.inboxfolder":
213 return (sbyte)AssetType.InboxFolder;
214 case "application/octet-stream": 211 case "application/octet-stream":
215 default: 212 default:
216 return (sbyte)AssetType.Unknown; 213 return (sbyte)AssetType.Unknown;
@@ -227,6 +224,7 @@ namespace OpenSim.Framework
227 case "image/jpeg": 224 case "image/jpeg":
228 return (sbyte)InventoryType.Texture; 225 return (sbyte)InventoryType.Texture;
229 case "application/ogg": 226 case "application/ogg":
227 case "audio/ogg":
230 case "audio/x-wav": 228 case "audio/x-wav":
231 return (sbyte)InventoryType.Sound; 229 return (sbyte)InventoryType.Sound;
232 case "application/vnd.ll.callingcard": 230 case "application/vnd.ll.callingcard":
diff --git a/OpenSim/Framework/Serialization/ArchiveConstants.cs b/OpenSim/Framework/Serialization/ArchiveConstants.cs
index 3143e3b..7a9b33d 100644
--- a/OpenSim/Framework/Serialization/ArchiveConstants.cs
+++ b/OpenSim/Framework/Serialization/ArchiveConstants.cs
@@ -157,9 +157,9 @@ namespace OpenSim.Framework.Serialization
157 public static string CreateOarObjectFilename(string objectName, UUID uuid, Vector3 pos) 157 public static string CreateOarObjectFilename(string objectName, UUID uuid, Vector3 pos)
158 { 158 {
159 return string.Format( 159 return string.Format(
160 OAR_OBJECT_FILENAME_TEMPLATE, objectName, 160 OAR_OBJECT_FILENAME_TEMPLATE, objectName,
161 Math.Round(pos.X), Math.Round(pos.Y), Math.Round(pos.Z), 161 Math.Round(pos.X), Math.Round(pos.Y), Math.Round(pos.Z),
162 uuid); 162 uuid);
163 } 163 }
164 164
165 /// <summary> 165 /// <summary>
@@ -171,9 +171,9 @@ namespace OpenSim.Framework.Serialization
171 /// <returns></returns> 171 /// <returns></returns>
172 public static string CreateOarObjectPath(string objectName, UUID uuid, Vector3 pos) 172 public static string CreateOarObjectPath(string objectName, UUID uuid, Vector3 pos)
173 { 173 {
174 return OBJECTS_PATH + CreateOarObjectFilename(objectName, uuid, pos); 174 return OBJECTS_PATH + CreateOarObjectFilename(objectName, uuid, pos);
175 } 175 }
176 176
177 /// <summary> 177 /// <summary>
178 /// Extract a plain path from an IAR path 178 /// Extract a plain path from an IAR path
179 /// </summary> 179 /// </summary>
@@ -184,18 +184,18 @@ namespace OpenSim.Framework.Serialization
184 List<string> plainDirs = new List<string>(); 184 List<string> plainDirs = new List<string>();
185 185
186 string[] iarDirs = iarPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 186 string[] iarDirs = iarPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
187 187
188 foreach (string iarDir in iarDirs) 188 foreach (string iarDir in iarDirs)
189 { 189 {
190 if (!iarDir.Contains(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR)) 190 if (!iarDir.Contains(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR))
191 plainDirs.Add(iarDir); 191 plainDirs.Add(iarDir);
192 192
193 int i = iarDir.LastIndexOf(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR); 193 int i = iarDir.LastIndexOf(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR);
194 194
195 plainDirs.Add(iarDir.Remove(i)); 195 plainDirs.Add(iarDir.Remove(i));
196 } 196 }
197 197
198 return string.Join("/", plainDirs.ToArray()); 198 return string.Join("/", plainDirs.ToArray());
199 } 199 }
200 } 200 }
201} \ No newline at end of file 201}
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index d20f8c9..452df38 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -51,7 +51,7 @@ namespace OpenSim.Framework.Servers.HttpServer
51 { 51 {
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 HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); 53 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
54 54
55 private volatile int NotSocketErrors = 0; 55 private volatile int NotSocketErrors = 0;
56 public volatile bool HTTPDRunning = false; 56 public volatile bool HTTPDRunning = false;
57 57
@@ -160,7 +160,7 @@ namespace OpenSim.Framework.Servers.HttpServer
160 m_rpcHandlers[method] = handler; 160 m_rpcHandlers[method] = handler;
161 m_rpcHandlersKeepAlive[method] = keepAlive; // default 161 m_rpcHandlersKeepAlive[method] = keepAlive; // default
162 } 162 }
163 163
164 return true; 164 return true;
165 } 165 }
166 166
@@ -182,7 +182,7 @@ namespace OpenSim.Framework.Servers.HttpServer
182 public bool AddHTTPHandler(string methodName, GenericHTTPMethod handler) 182 public bool AddHTTPHandler(string methodName, GenericHTTPMethod handler)
183 { 183 {
184 //m_log.DebugFormat("[BASE HTTP SERVER]: Registering {0}", methodName); 184 //m_log.DebugFormat("[BASE HTTP SERVER]: Registering {0}", methodName);
185 185
186 lock (m_HTTPHandlers) 186 lock (m_HTTPHandlers)
187 { 187 {
188 if (!m_HTTPHandlers.ContainsKey(methodName)) 188 if (!m_HTTPHandlers.ContainsKey(methodName))
@@ -204,14 +204,14 @@ namespace OpenSim.Framework.Servers.HttpServer
204 if (!m_pollHandlers.ContainsKey(methodName)) 204 if (!m_pollHandlers.ContainsKey(methodName))
205 { 205 {
206 m_pollHandlers.Add(methodName,args); 206 m_pollHandlers.Add(methodName,args);
207 pollHandlerResult = true; 207 pollHandlerResult = true;
208 } 208 }
209 } 209 }
210 210
211 if (pollHandlerResult) 211 if (pollHandlerResult)
212 return AddHTTPHandler(methodName, handler); 212 return AddHTTPHandler(methodName, handler);
213 213
214 return false; 214 return false;
215 } 215 }
216 216
217 // Note that the agent string is provided simply to differentiate 217 // Note that the agent string is provided simply to differentiate
@@ -257,51 +257,51 @@ namespace OpenSim.Framework.Servers.HttpServer
257 { 257 {
258 IHttpClientContext context = (IHttpClientContext)source; 258 IHttpClientContext context = (IHttpClientContext)source;
259 IHttpRequest request = args.Request; 259 IHttpRequest request = args.Request;
260 260
261 PollServiceEventArgs psEvArgs; 261 PollServiceEventArgs psEvArgs;
262 262
263 if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs)) 263 if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs))
264 { 264 {
265 PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request); 265 PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request);
266 266
267 if (psEvArgs.Request != null) 267 if (psEvArgs.Request != null)
268 { 268 {
269 OSHttpRequest req = new OSHttpRequest(context, request); 269 OSHttpRequest req = new OSHttpRequest(context, request);
270 270
271 Stream requestStream = req.InputStream; 271 Stream requestStream = req.InputStream;
272 272
273 Encoding encoding = Encoding.UTF8; 273 Encoding encoding = Encoding.UTF8;
274 StreamReader reader = new StreamReader(requestStream, encoding); 274 StreamReader reader = new StreamReader(requestStream, encoding);
275 275
276 string requestBody = reader.ReadToEnd(); 276 string requestBody = reader.ReadToEnd();
277 277
278 Hashtable keysvals = new Hashtable(); 278 Hashtable keysvals = new Hashtable();
279 Hashtable headervals = new Hashtable(); 279 Hashtable headervals = new Hashtable();
280 280
281 string[] querystringkeys = req.QueryString.AllKeys; 281 string[] querystringkeys = req.QueryString.AllKeys;
282 string[] rHeaders = req.Headers.AllKeys; 282 string[] rHeaders = req.Headers.AllKeys;
283 283
284 keysvals.Add("body", requestBody); 284 keysvals.Add("body", requestBody);
285 keysvals.Add("uri", req.RawUrl); 285 keysvals.Add("uri", req.RawUrl);
286 keysvals.Add("content-type", req.ContentType); 286 keysvals.Add("content-type", req.ContentType);
287 keysvals.Add("http-method", req.HttpMethod); 287 keysvals.Add("http-method", req.HttpMethod);
288 288
289 foreach (string queryname in querystringkeys) 289 foreach (string queryname in querystringkeys)
290 { 290 {
291 keysvals.Add(queryname, req.QueryString[queryname]); 291 keysvals.Add(queryname, req.QueryString[queryname]);
292 } 292 }
293 293
294 foreach (string headername in rHeaders) 294 foreach (string headername in rHeaders)
295 { 295 {
296 headervals[headername] = req.Headers[headername]; 296 headervals[headername] = req.Headers[headername];
297 } 297 }
298 298
299 keysvals.Add("headers", headervals); 299 keysvals.Add("headers", headervals);
300 keysvals.Add("querystringkeys", querystringkeys); 300 keysvals.Add("querystringkeys", querystringkeys);
301 301
302 psEvArgs.Request(psreq.RequestID, keysvals); 302 psEvArgs.Request(psreq.RequestID, keysvals);
303 } 303 }
304 304
305 m_PollServiceManager.Enqueue(psreq); 305 m_PollServiceManager.Enqueue(psreq);
306 } 306 }
307 else 307 else
@@ -348,10 +348,10 @@ namespace OpenSim.Framework.Servers.HttpServer
348 { 348 {
349 try 349 try
350 { 350 {
351// m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl); 351// m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl);
352 352
353 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true); 353 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
354 354
355 // This is the REST agent interface. We require an agent to properly identify 355 // This is the REST agent interface. We require an agent to properly identify
356 // itself. If the REST handler recognizes the prefix it will attempt to 356 // itself. If the REST handler recognizes the prefix it will attempt to
357 // satisfy the request. If it is not recognizable, and no damage has occurred 357 // satisfy the request. If it is not recognizable, and no damage has occurred
@@ -456,7 +456,7 @@ namespace OpenSim.Framework.Servers.HttpServer
456 } 456 }
457 457
458 request.InputStream.Close(); 458 request.InputStream.Close();
459 459
460 // HTTP IN support. The script engine taes it from here 460 // HTTP IN support. The script engine taes it from here
461 // Nothing to worry about for us. 461 // Nothing to worry about for us.
462 // 462 //
@@ -540,7 +540,7 @@ namespace OpenSim.Framework.Servers.HttpServer
540 HandleLLSDRequests(request, response); 540 HandleLLSDRequests(request, response);
541 return; 541 return;
542 } 542 }
543 543
544// m_log.DebugFormat("[BASE HTTP SERVER]: Checking for HTTP Handler for request {0}", request.RawUrl); 544// m_log.DebugFormat("[BASE HTTP SERVER]: Checking for HTTP Handler for request {0}", request.RawUrl);
545 if (DoWeHaveAHTTPHandler(request.RawUrl)) 545 if (DoWeHaveAHTTPHandler(request.RawUrl))
546 { 546 {
@@ -594,7 +594,7 @@ namespace OpenSim.Framework.Servers.HttpServer
594 } 594 }
595 } 595 }
596 } 596 }
597 597
598 if (String.IsNullOrEmpty(bestMatch)) 598 if (String.IsNullOrEmpty(bestMatch))
599 { 599 {
600 streamHandler = null; 600 streamHandler = null;
@@ -641,7 +641,7 @@ namespace OpenSim.Framework.Servers.HttpServer
641 private bool TryGetHTTPHandler(string handlerKey, out GenericHTTPMethod HTTPHandler) 641 private bool TryGetHTTPHandler(string handlerKey, out GenericHTTPMethod HTTPHandler)
642 { 642 {
643// m_log.DebugFormat("[BASE HTTP HANDLER]: Looking for HTTP handler for {0}", handlerKey); 643// m_log.DebugFormat("[BASE HTTP HANDLER]: Looking for HTTP handler for {0}", handlerKey);
644 644
645 string bestMatch = null; 645 string bestMatch = null;
646 646
647 lock (m_HTTPHandlers) 647 lock (m_HTTPHandlers)
@@ -727,14 +727,14 @@ namespace OpenSim.Framework.Servers.HttpServer
727 { 727 {
728 xmlRprcRequest.Params.Add(request.RemoteIPEndPoint); // Param[1] 728 xmlRprcRequest.Params.Add(request.RemoteIPEndPoint); // Param[1]
729 XmlRpcResponse xmlRpcResponse; 729 XmlRpcResponse xmlRpcResponse;
730 730
731 XmlRpcMethod method; 731 XmlRpcMethod method;
732 bool methodWasFound; 732 bool methodWasFound;
733 lock (m_rpcHandlers) 733 lock (m_rpcHandlers)
734 { 734 {
735 methodWasFound = m_rpcHandlers.TryGetValue(methodName, out method); 735 methodWasFound = m_rpcHandlers.TryGetValue(methodName, out method);
736 } 736 }
737 737
738 if (methodWasFound) 738 if (methodWasFound)
739 { 739 {
740 xmlRprcRequest.Params.Add(request.Url); // Param[2] 740 xmlRprcRequest.Params.Add(request.Url); // Param[2]
@@ -766,10 +766,10 @@ namespace OpenSim.Framework.Servers.HttpServer
766 else 766 else
767 { 767 {
768 xmlRpcResponse = new XmlRpcResponse(); 768 xmlRpcResponse = new XmlRpcResponse();
769 769
770 // Code set in accordance with http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php 770 // Code set in accordance with http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php
771 xmlRpcResponse.SetFault( 771 xmlRpcResponse.SetFault(
772 XmlRpcErrorCodes.SERVER_ERROR_METHOD, 772 XmlRpcErrorCodes.SERVER_ERROR_METHOD,
773 String.Format("Requested method [{0}] not found", methodName)); 773 String.Format("Requested method [{0}] not found", methodName));
774 } 774 }
775 775
@@ -786,11 +786,11 @@ namespace OpenSim.Framework.Servers.HttpServer
786 response.KeepAlive = false; 786 response.KeepAlive = false;
787 787
788 m_log.ErrorFormat("[BASE HTTP SERVER]: Handler not found for http request {0}", request.RawUrl); 788 m_log.ErrorFormat("[BASE HTTP SERVER]: Handler not found for http request {0}", request.RawUrl);
789 789
790 response.SendChunked = false; 790 response.SendChunked = false;
791 response.ContentLength64 = buf.Length; 791 response.ContentLength64 = buf.Length;
792 response.ContentEncoding = Encoding.UTF8; 792 response.ContentEncoding = Encoding.UTF8;
793 793
794 try 794 try
795 { 795 {
796 response.OutputStream.Write(buf, 0, buf.Length); 796 response.OutputStream.Write(buf, 0, buf.Length);
@@ -872,13 +872,13 @@ namespace OpenSim.Framework.Servers.HttpServer
872 872
873 OSD llsdRequest = null; 873 OSD llsdRequest = null;
874 OSD llsdResponse = null; 874 OSD llsdResponse = null;
875 875
876 bool LegacyLLSDLoginLibOMV = (requestBody.Contains("passwd") && requestBody.Contains("mac") && requestBody.Contains("viewer_digest")); 876 bool LegacyLLSDLoginLibOMV = (requestBody.Contains("passwd") && requestBody.Contains("mac") && requestBody.Contains("viewer_digest"));
877 877
878 if (requestBody.Length == 0) 878 if (requestBody.Length == 0)
879 // Get Request 879 // Get Request
880 { 880 {
881 requestBody = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><llsd><map><key>request</key><string>get</string></map></llsd>"; 881 requestBody = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><llsd><map><key>request</key><string>get</string></map></llsd>";
882 } 882 }
883 try 883 try
884 { 884 {
@@ -1090,7 +1090,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1090 string bestMatch = null; 1090 string bestMatch = null;
1091 1091
1092 //m_log.DebugFormat("[BASE HTTP HANDLER]: Checking if we have an HTTP handler for {0}", searchquery); 1092 //m_log.DebugFormat("[BASE HTTP HANDLER]: Checking if we have an HTTP handler for {0}", searchquery);
1093 1093
1094 lock (m_HTTPHandlers) 1094 lock (m_HTTPHandlers)
1095 { 1095 {
1096 foreach (string pattern in m_HTTPHandlers.Keys) 1096 foreach (string pattern in m_HTTPHandlers.Keys)
@@ -1156,7 +1156,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1156 // You have to specifically register for '/' and to get it, you must specificaly request it 1156 // You have to specifically register for '/' and to get it, you must specificaly request it
1157 // 1157 //
1158 if (pattern == "/" && searchquery == "/" || pattern != "/") 1158 if (pattern == "/" && searchquery == "/" || pattern != "/")
1159 bestMatch = pattern; 1159 bestMatch = pattern;
1160 } 1160 }
1161 } 1161 }
1162 } 1162 }
@@ -1236,11 +1236,11 @@ namespace OpenSim.Framework.Servers.HttpServer
1236 } 1236 }
1237 1237
1238 public void HandleHTTPRequest(OSHttpRequest request, OSHttpResponse response) 1238 public void HandleHTTPRequest(OSHttpRequest request, OSHttpResponse response)
1239 { 1239 {
1240// m_log.DebugFormat( 1240// m_log.DebugFormat(
1241// "[BASE HTTP SERVER]: HandleHTTPRequest for request to {0}, method {1}", 1241// "[BASE HTTP SERVER]: HandleHTTPRequest for request to {0}, method {1}",
1242// request.RawUrl, request.HttpMethod); 1242// request.RawUrl, request.HttpMethod);
1243 1243
1244 switch (request.HttpMethod) 1244 switch (request.HttpMethod)
1245 { 1245 {
1246 case "OPTIONS": 1246 case "OPTIONS":
@@ -1256,7 +1256,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1256 private void HandleContentVerbs(OSHttpRequest request, OSHttpResponse response) 1256 private void HandleContentVerbs(OSHttpRequest request, OSHttpResponse response)
1257 { 1257 {
1258// m_log.DebugFormat("[BASE HTTP SERVER]: HandleContentVerbs for request to {0}", request.RawUrl); 1258// m_log.DebugFormat("[BASE HTTP SERVER]: HandleContentVerbs for request to {0}", request.RawUrl);
1259 1259
1260 // This is a test. There's a workable alternative.. as this way sucks. 1260 // This is a test. There's a workable alternative.. as this way sucks.
1261 // We'd like to put this into a text file parhaps that's easily editable. 1261 // We'd like to put this into a text file parhaps that's easily editable.
1262 // 1262 //
@@ -1391,7 +1391,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1391 1391
1392// m_log.DebugFormat( 1392// m_log.DebugFormat(
1393// "[BASE HTTP HANDLER]: TryGetHTTPHandlerPathBased() looking for HTTP handler to match {0}", searchquery); 1393// "[BASE HTTP HANDLER]: TryGetHTTPHandlerPathBased() looking for HTTP handler to match {0}", searchquery);
1394 1394
1395 lock (m_HTTPHandlers) 1395 lock (m_HTTPHandlers)
1396 { 1396 {
1397 foreach (string pattern in m_HTTPHandlers.Keys) 1397 foreach (string pattern in m_HTTPHandlers.Keys)
@@ -1452,7 +1452,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1452 1452
1453 //Even though only one other part of the entire code uses HTTPHandlers, we shouldn't expect this 1453 //Even though only one other part of the entire code uses HTTPHandlers, we shouldn't expect this
1454 //and should check for NullReferenceExceptions 1454 //and should check for NullReferenceExceptions
1455 1455
1456 if (string.IsNullOrEmpty(contentType)) 1456 if (string.IsNullOrEmpty(contentType))
1457 { 1457 {
1458 contentType = "text/html"; 1458 contentType = "text/html";
@@ -1472,8 +1472,8 @@ namespace OpenSim.Framework.Servers.HttpServer
1472 1472
1473 byte[] buffer; 1473 byte[] buffer;
1474 1474
1475 if (!(contentType.Contains("image") 1475 if (!(contentType.Contains("image")
1476 || contentType.Contains("x-shockwave-flash") 1476 || contentType.Contains("x-shockwave-flash")
1477 || contentType.Contains("application/x-oar"))) 1477 || contentType.Contains("application/x-oar")))
1478 { 1478 {
1479 // Text 1479 // Text
@@ -1504,7 +1504,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1504 { 1504 {
1505 response.OutputStream.Flush(); 1505 response.OutputStream.Flush();
1506 response.Send(); 1506 response.Send();
1507 1507
1508 //if (!response.KeepAlive && response.ReuseContext) 1508 //if (!response.KeepAlive && response.ReuseContext)
1509 // response.FreeContext(); 1509 // response.FreeContext();
1510 } 1510 }
@@ -1611,11 +1611,11 @@ namespace OpenSim.Framework.Servers.HttpServer
1611 m_httpListener2 = CoolHTTPListener.Create(m_listenIPAddress, (int)m_port); 1611 m_httpListener2 = CoolHTTPListener.Create(m_listenIPAddress, (int)m_port);
1612 m_httpListener2.ExceptionThrown += httpServerException; 1612 m_httpListener2.ExceptionThrown += httpServerException;
1613 m_httpListener2.LogWriter = httpserverlog; 1613 m_httpListener2.LogWriter = httpserverlog;
1614 1614
1615 // Uncomment this line in addition to those in HttpServerLogWriter 1615 // Uncomment this line in addition to those in HttpServerLogWriter
1616 // if you want more detailed trace information from the HttpServer 1616 // if you want more detailed trace information from the HttpServer
1617 //m_httpListener2.UseTraceLogs = true; 1617 //m_httpListener2.UseTraceLogs = true;
1618 1618
1619 //m_httpListener2.DisconnectHandler = httpServerDisconnectMonitor; 1619 //m_httpListener2.DisconnectHandler = httpServerDisconnectMonitor;
1620 } 1620 }
1621 else 1621 else
@@ -1643,8 +1643,8 @@ namespace OpenSim.Framework.Servers.HttpServer
1643 { 1643 {
1644 m_log.Error("[BASE HTTP SERVER]: Error - " + e.Message); 1644 m_log.Error("[BASE HTTP SERVER]: Error - " + e.Message);
1645 m_log.Error("[BASE HTTP SERVER]: Tip: Do you have permission to listen on port " + m_port + ", " + m_sslport + "?"); 1645 m_log.Error("[BASE HTTP SERVER]: Tip: Do you have permission to listen on port " + m_port + ", " + m_sslport + "?");
1646 1646
1647 // We want this exception to halt the entire server since in current configurations we aren't too 1647 // We want this exception to halt the entire server since in current configurations we aren't too
1648 // useful without inbound HTTP. 1648 // useful without inbound HTTP.
1649 throw e; 1649 throw e;
1650 } 1650 }
@@ -1656,7 +1656,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1656 { 1656 {
1657 case SocketError.NotSocket: 1657 case SocketError.NotSocket:
1658 NotSocketErrors++; 1658 NotSocketErrors++;
1659 1659
1660 break; 1660 break;
1661 } 1661 }
1662 } 1662 }
@@ -1686,12 +1686,11 @@ namespace OpenSim.Framework.Servers.HttpServer
1686 m_httpListener2.LogWriter = null; 1686 m_httpListener2.LogWriter = null;
1687 m_httpListener2.RequestReceived -= OnRequest; 1687 m_httpListener2.RequestReceived -= OnRequest;
1688 m_httpListener2.Stop(); 1688 m_httpListener2.Stop();
1689 } 1689 }
1690 catch (NullReferenceException) 1690 catch (NullReferenceException)
1691 { 1691 {
1692 m_log.Warn("[BASE HTTP SERVER]: Null Reference when stopping HttpServer."); 1692 m_log.Warn("[BASE HTTP SERVER]: Null Reference when stopping HttpServer.");
1693 } 1693 }
1694
1695 } 1694 }
1696 1695
1697 public void RemoveStreamHandler(string httpMethod, string path) 1696 public void RemoveStreamHandler(string httpMethod, string path)
@@ -1712,7 +1711,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1712 m_HTTPHandlers.Remove(path); 1711 m_HTTPHandlers.Remove(path);
1713 return; 1712 return;
1714 } 1713 }
1715 1714
1716 m_HTTPHandlers.Remove(GetHandlerKey(httpMethod, path)); 1715 m_HTTPHandlers.Remove(GetHandlerKey(httpMethod, path));
1717 } 1716 }
1718 } 1717 }
@@ -1728,7 +1727,6 @@ namespace OpenSim.Framework.Servers.HttpServer
1728 } 1727 }
1729 1728
1730 RemoveHTTPHandler(httpMethod, path); 1729 RemoveHTTPHandler(httpMethod, path);
1731
1732 } 1730 }
1733 1731
1734 public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler) 1732 public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler)
@@ -1759,7 +1757,6 @@ namespace OpenSim.Framework.Servers.HttpServer
1759 } 1757 }
1760 } 1758 }
1761 1759
1762
1763 public bool RemoveLLSDHandler(string path, LLSDMethod handler) 1760 public bool RemoveLLSDHandler(string path, LLSDMethod handler)
1764 { 1761 {
1765 try 1762 try
@@ -1833,7 +1830,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1833 oresp = osresp; 1830 oresp = osresp;
1834 } 1831 }
1835 } 1832 }
1836 1833
1837 /// <summary> 1834 /// <summary>
1838 /// Relays HttpServer log messages to our own logging mechanism. 1835 /// Relays HttpServer log messages to our own logging mechanism.
1839 /// </summary> 1836 /// </summary>
@@ -1852,7 +1849,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1852 { 1849 {
1853 case LogPrio.Trace: 1850 case LogPrio.Trace:
1854 m_log.DebugFormat("[{0}]: {1}", source, message); 1851 m_log.DebugFormat("[{0}]: {1}", source, message);
1855 break; 1852 break;
1856 case LogPrio.Debug: 1853 case LogPrio.Debug:
1857 m_log.DebugFormat("[{0}]: {1}", source, message); 1854 m_log.DebugFormat("[{0}]: {1}", source, message);
1858 break; 1855 break;
@@ -1872,8 +1869,8 @@ namespace OpenSim.Framework.Servers.HttpServer
1872 break; 1869 break;
1873 } 1870 }
1874 */ 1871 */
1875 1872
1876 return; 1873 return;
1877 } 1874 }
1878 } 1875 }
1879} \ No newline at end of file 1876}
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs
index f3ac191..4ae370b 100644
--- a/OpenSim/Framework/Servers/VersionInfo.cs
+++ b/OpenSim/Framework/Servers/VersionInfo.cs
@@ -49,7 +49,7 @@ namespace OpenSim
49 49
50 public static string GetVersionString(string versionNumber, Flavour flavour) 50 public static string GetVersionString(string versionNumber, Flavour flavour)
51 { 51 {
52 string versionString = "OpenSim " + versionNumber + " (" + flavour + ")"; 52 string versionString = "OpenSim " + versionNumber + " " + flavour;
53 return versionString.PadRight(VERSIONINFO_VERSION_LENGTH); 53 return versionString.PadRight(VERSIONINFO_VERSION_LENGTH);
54 } 54 }
55 55
diff --git a/OpenSim/Framework/TaskInventoryItem.cs b/OpenSim/Framework/TaskInventoryItem.cs
index 2cb7895..df5b936 100644
--- a/OpenSim/Framework/TaskInventoryItem.cs
+++ b/OpenSim/Framework/TaskInventoryItem.cs
@@ -348,15 +348,15 @@ namespace OpenSim.Framework
348 /// <param name="partID">The new part ID to which this item belongs</param> 348 /// <param name="partID">The new part ID to which this item belongs</param>
349 public void ResetIDs(UUID partID) 349 public void ResetIDs(UUID partID)
350 { 350 {
351 _oldID = _itemID; 351 OldItemID = ItemID;
352 _itemID = UUID.Random(); 352 ItemID = UUID.Random();
353 _parentPartID = partID; 353 ParentPartID = partID;
354 _parentID = partID; 354 ParentID = partID;
355 } 355 }
356 356
357 public TaskInventoryItem() 357 public TaskInventoryItem()
358 { 358 {
359 _creationDate = (uint)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; 359 CreationDate = (uint)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
360 } 360 }
361 } 361 }
362} 362}
diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs
index b860cf6..d120f03 100644
--- a/OpenSim/Region/Application/Application.cs
+++ b/OpenSim/Region/Application/Application.cs
@@ -225,7 +225,7 @@ namespace OpenSim
225 } 225 }
226 } 226 }
227 MainConsole.Instance = null; 227 MainConsole.Instance = null;
228 } 228 }
229 */ 229 */
230 configSource.Alias.AddAlias("On", true); 230 configSource.Alias.AddAlias("On", true);
231 configSource.Alias.AddAlias("Off", false); 231 configSource.Alias.AddAlias("Off", false);
diff --git a/OpenSim/Region/Application/ConfigurationLoader.cs b/OpenSim/Region/Application/ConfigurationLoader.cs
index e69e3fc..e2e0640 100644
--- a/OpenSim/Region/Application/ConfigurationLoader.cs
+++ b/OpenSim/Region/Application/ConfigurationLoader.cs
@@ -345,10 +345,6 @@ namespace OpenSim
345 345
346 m_configSettings.StorageDll = startupConfig.GetString("storage_plugin"); 346 m_configSettings.StorageDll = startupConfig.GetString("storage_plugin");
347 347
348 m_configSettings.StorageConnectionString
349 = startupConfig.GetString("storage_connection_string");
350 m_configSettings.EstateConnectionString
351 = startupConfig.GetString("estate_connection_string", m_configSettings.StorageConnectionString);
352 m_configSettings.ClientstackDll 348 m_configSettings.ClientstackDll
353 = startupConfig.GetString("clientstack_plugin", "OpenSim.Region.ClientStack.LindenUDP.dll"); 349 = startupConfig.GetString("clientstack_plugin", "OpenSim.Region.ClientStack.LindenUDP.dll");
354 } 350 }
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 945da7d..6094bad 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -152,7 +152,7 @@ namespace OpenSim
152 RegisterConsoleCommands(); 152 RegisterConsoleCommands();
153 153
154 base.StartupSpecific(); 154 base.StartupSpecific();
155 155
156 MainServer.Instance.AddStreamHandler(new OpenSim.SimStatusHandler()); 156 MainServer.Instance.AddStreamHandler(new OpenSim.SimStatusHandler());
157 MainServer.Instance.AddStreamHandler(new OpenSim.XSimStatusHandler(this)); 157 MainServer.Instance.AddStreamHandler(new OpenSim.XSimStatusHandler(this));
158 if (userStatsURI != String.Empty) 158 if (userStatsURI != String.Empty)
@@ -192,7 +192,7 @@ namespace OpenSim
192 // Hook up to the watchdog timer 192 // Hook up to the watchdog timer
193 Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler; 193 Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler;
194 194
195 PrintFileToConsole("startuplogo.txt"); 195 PrintFileToConsole("startuplogo.txt");
196 196
197 // For now, start at the 'root' level by default 197 // For now, start at the 'root' level by default
198 if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it 198 if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it
@@ -218,8 +218,8 @@ namespace OpenSim
218 218
219 m_console.Commands.AddCommand("region", false, "debug packet", 219 m_console.Commands.AddCommand("region", false, "debug packet",
220 "debug packet <level>", 220 "debug packet <level>",
221 "Turn on packet debugging", 221 "Turn on packet debugging",
222 "If level > 255 then all incoming and outgoing packets are logged.\n" 222 "If level > 255 then all incoming and outgoing packets are logged.\n"
223 + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n" 223 + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n"
224 + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n" 224 + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n"
225 + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n" 225 + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n"
@@ -316,7 +316,7 @@ namespace OpenSim
316 m_console.Commands.AddCommand("region", false, "create region", 316 m_console.Commands.AddCommand("region", false, "create region",
317 "create region [\"region name\"] <region_file.ini>", 317 "create region [\"region name\"] <region_file.ini>",
318 "Create a new region.", 318 "Create a new region.",
319 "The settings for \"region name\" are read from <region_file.ini>." 319 "The settings for \"region name\" are read from <region_file.ini> in your Regions directory."
320 + " If \"region name\" does not exist in <region_file.ini>, it will be added." + Environment.NewLine 320 + " If \"region name\" does not exist in <region_file.ini>, it will be added." + Environment.NewLine
321 + "Without \"region name\", the first region found in <region_file.ini> will be created." + Environment.NewLine 321 + "Without \"region name\", the first region found in <region_file.ini> will be created." + Environment.NewLine
322 + "If <region_file.ini> does not exist, it will be created.", 322 + "If <region_file.ini> does not exist, it will be created.",
@@ -552,19 +552,20 @@ namespace OpenSim
552 regionFile = Path.Combine(regionsDir, regionFile); 552 regionFile = Path.Combine(regionsDir, regionFile);
553 } 553 }
554 554
555 RegionInfo regInfo; 555 RegionInfo regInfo;
556 if (isXml) 556 if (isXml)
557 { 557 {
558 regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source); 558 regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source);
559 } 559 }
560 else 560 else
561 { 561 {
562 regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source, regionName); 562 regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source, regionName);
563 } 563 }
564
564 IScene scene; 565 IScene scene;
565 PopulateRegionEstateInfo(regInfo); 566 PopulateRegionEstateInfo(regInfo);
566 CreateRegion(regInfo, true, out scene); 567 CreateRegion(regInfo, true, out scene);
567 regInfo.EstateSettings.Save(); 568 regInfo.EstateSettings.Save();
568 } 569 }
569 570
570 /// <summary> 571 /// <summary>
@@ -942,7 +943,7 @@ namespace OpenSim
942 delegate(Scene scene) 943 delegate(Scene scene)
943 { 944 {
944 MainConsole.Instance.Output(String.Format( 945 MainConsole.Instance.Output(String.Format(
945 "Region Name: {0}, Region XLoc: {1}, Region YLoc: {2}, Region Port: {3}", 946 "Region Name: {0}, Region XLoc: {1}, Region YLoc: {2}, Region Port: {3}",
946 scene.RegionInfo.RegionName, 947 scene.RegionInfo.RegionName,
947 scene.RegionInfo.RegionLocX, 948 scene.RegionInfo.RegionLocX,
948 scene.RegionInfo.RegionLocY, 949 scene.RegionInfo.RegionLocY,
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index ec3193c..c5ee385 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -45,6 +45,7 @@ using OpenSim.Region.Framework;
45using OpenSim.Region.Framework.Interfaces; 45using OpenSim.Region.Framework.Interfaces;
46using OpenSim.Region.Framework.Scenes; 46using OpenSim.Region.Framework.Scenes;
47using OpenSim.Region.Physics.Manager; 47using OpenSim.Region.Physics.Manager;
48using OpenSim.Server.Base;
48 49
49namespace OpenSim 50namespace OpenSim
50{ 51{
@@ -195,6 +196,24 @@ namespace OpenSim
195 m_permsModules = new List<string>(permissionModules.Split(',')); 196 m_permsModules = new List<string>(permissionModules.Split(','));
196 } 197 }
197 198
199 // Load the simulation data service
200 IConfig simDataConfig = m_config.Source.Configs["SimulationDataStore"];
201 if (simDataConfig == null)
202 throw new Exception("Configuration file is missing the [SimulationDataStore] section");
203 string module = simDataConfig.GetString("LocalServiceModule", String.Empty);
204 if (String.IsNullOrEmpty(module))
205 throw new Exception("Configuration file is missing the LocalServiceModule parameter in the [SimulationDataStore] section");
206 m_simulationDataService = ServerUtils.LoadPlugin<ISimulationDataService>(module, new object[] { m_config.Source });
207
208 // Load the estate data service
209 IConfig estateDataConfig = m_config.Source.Configs["EstateDataStore"];
210 if (estateDataConfig == null)
211 throw new Exception("Configuration file is missing the [EstateDataStore] section");
212 module = estateDataConfig.GetString("LocalServiceModule", String.Empty);
213 if (String.IsNullOrEmpty(module))
214 throw new Exception("Configuration file is missing the LocalServiceModule parameter in the [EstateDataStore] section");
215 m_estateDataService = ServerUtils.LoadPlugin<IEstateDataService>(module, new object[] { m_config.Source });
216
198 base.StartupSpecific(); 217 base.StartupSpecific();
199 218
200 m_stats = StatsManager.StartCollectingSimExtraStats(); 219 m_stats = StatsManager.StartCollectingSimExtraStats();
@@ -612,7 +631,7 @@ namespace OpenSim
612 631
613 regionInfo.InternalEndPoint.Port = (int) port; 632 regionInfo.InternalEndPoint.Port = (int) port;
614 633
615 Scene scene = CreateScene(regionInfo, m_storageManager, circuitManager); 634 Scene scene = CreateScene(regionInfo, m_simulationDataService, m_estateDataService, circuitManager);
616 635
617 if (m_autoCreateClientStack) 636 if (m_autoCreateClientStack)
618 { 637 {
@@ -628,30 +647,19 @@ namespace OpenSim
628 return scene; 647 return scene;
629 } 648 }
630 649
631 protected override StorageManager CreateStorageManager()
632 {
633 return
634 CreateStorageManager(m_configSettings.StorageConnectionString, m_configSettings.EstateConnectionString);
635 }
636
637 protected StorageManager CreateStorageManager(string connectionstring, string estateconnectionstring)
638 {
639 return new StorageManager(m_configSettings.StorageDll, connectionstring, estateconnectionstring);
640 }
641
642 protected override ClientStackManager CreateClientStackManager() 650 protected override ClientStackManager CreateClientStackManager()
643 { 651 {
644 return new ClientStackManager(m_configSettings.ClientstackDll); 652 return new ClientStackManager(m_configSettings.ClientstackDll);
645 } 653 }
646 654
647 protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, 655 protected override Scene CreateScene(RegionInfo regionInfo, ISimulationDataService simDataService,
648 AgentCircuitManager circuitManager) 656 IEstateDataService estateDataService, AgentCircuitManager circuitManager)
649 { 657 {
650 SceneCommunicationService sceneGridService = new SceneCommunicationService(); 658 SceneCommunicationService sceneGridService = new SceneCommunicationService();
651 659
652 return new Scene( 660 return new Scene(
653 regionInfo, circuitManager, sceneGridService, 661 regionInfo, circuitManager, sceneGridService,
654 storageManager, m_moduleLoader, false, m_configSettings.PhysicalPrim, 662 simDataService, estateDataService, m_moduleLoader, false, m_configSettings.PhysicalPrim,
655 m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version); 663 m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version);
656 } 664 }
657 665
@@ -868,21 +876,23 @@ namespace OpenSim
868 /// </param> 876 /// </param>
869 public void PopulateRegionEstateInfo(RegionInfo regInfo) 877 public void PopulateRegionEstateInfo(RegionInfo regInfo)
870 { 878 {
871 if (m_storageManager.EstateDataStore != null) 879 IEstateDataService estateDataService = EstateDataService;
880
881 if (estateDataService != null)
872 { 882 {
873 regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(regInfo.RegionID, false); 883 regInfo.EstateSettings = estateDataService.LoadEstateSettings(regInfo.RegionID, false);
874 } 884 }
875 885
876 if (regInfo.EstateSettings.EstateID == 0) // No record at all 886 if (regInfo.EstateSettings.EstateID == 0) // No record at all
877 { 887 {
878 MainConsole.Instance.Output("Your region is not part of an estate."); 888 MainConsole.Instance.Output("Your region is not part of an estate.");
879 while (true) 889 while (true)
880 { 890 {
881 string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate?", "no", new List<string>() {"yes", "no"}); 891 string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate?", "no", new List<string>() { "yes", "no" });
882 if (response == "no") 892 if (response == "no")
883 { 893 {
884 // Create a new estate 894 // Create a new estate
885 regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(regInfo.RegionID, true); 895 regInfo.EstateSettings = estateDataService.LoadEstateSettings(regInfo.RegionID, true);
886 896
887 regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); 897 regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName);
888 //regInfo.EstateSettings.Save(); 898 //regInfo.EstateSettings.Save();
@@ -894,7 +904,7 @@ namespace OpenSim
894 if (response == "None") 904 if (response == "None")
895 continue; 905 continue;
896 906
897 List<int> estateIDs = m_storageManager.EstateDataStore.GetEstates(response); 907 List<int> estateIDs = estateDataService.GetEstates(response);
898 if (estateIDs.Count < 1) 908 if (estateIDs.Count < 1)
899 { 909 {
900 MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again"); 910 MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again");
@@ -903,9 +913,9 @@ namespace OpenSim
903 913
904 int estateID = estateIDs[0]; 914 int estateID = estateIDs[0];
905 915
906 regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(estateID); 916 regInfo.EstateSettings = estateDataService.LoadEstateSettings(estateID);
907 917
908 if (m_storageManager.EstateDataStore.LinkRegion(regInfo.RegionID, estateID)) 918 if (estateDataService.LinkRegion(regInfo.RegionID, estateID))
909 break; 919 break;
910 920
911 MainConsole.Instance.Output("Joining the estate failed. Please try again."); 921 MainConsole.Instance.Output("Joining the estate failed. Please try again.");
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 8a96389..0e17496 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -63,7 +63,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
63 /// Debug packet level. See OpenSim.RegisterConsoleCommands() for more details. 63 /// Debug packet level. See OpenSim.RegisterConsoleCommands() for more details.
64 /// </value> 64 /// </value>
65 protected int m_debugPacketLevel = 0; 65 protected int m_debugPacketLevel = 0;
66 66
67 #region Events 67 #region Events
68 68
69 public event GenericMessage OnGenericMessage; 69 public event GenericMessage OnGenericMessage;
@@ -288,7 +288,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
288 public event MuteListEntryRemove OnRemoveMuteListEntry; 288 public event MuteListEntryRemove OnRemoveMuteListEntry;
289 public event GodlikeMessage onGodlikeMessage; 289 public event GodlikeMessage onGodlikeMessage;
290 public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate; 290 public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate;
291
292 291
293 #endregion Events 292 #endregion Events
294 293
@@ -330,12 +329,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
330 /// ownerless phantom. 329 /// ownerless phantom.
331 /// 330 ///
332 /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock 331 /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock
333 /// 332 ///
334 /// </value> 333 /// </value>
335 protected HashSet<uint> m_killRecord; 334 protected HashSet<uint> m_killRecord;
336 335
337// protected HashSet<uint> m_attachmentsSent; 336// protected HashSet<uint> m_attachmentsSent;
338 337
339 private int m_moneyBalance; 338 private int m_moneyBalance;
340 private bool m_deliverPackets = true; 339 private bool m_deliverPackets = true;
341 private int m_animationSequenceNumber = 1; 340 private int m_animationSequenceNumber = 1;
@@ -395,22 +394,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
395 public string ActiveGroupName { get { return m_activeGroupName; } } 394 public string ActiveGroupName { get { return m_activeGroupName; } }
396 public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } } 395 public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } }
397 public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); } 396 public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); }
398 397
399 /// <summary> 398 /// <summary>
400 /// First name of the agent/avatar represented by the client 399 /// First name of the agent/avatar represented by the client
401 /// </summary> 400 /// </summary>
402 public string FirstName { get { return m_firstName; } } 401 public string FirstName { get { return m_firstName; } }
403 402
404 /// <summary> 403 /// <summary>
405 /// Last name of the agent/avatar represented by the client 404 /// Last name of the agent/avatar represented by the client
406 /// </summary> 405 /// </summary>
407 public string LastName { get { return m_lastName; } } 406 public string LastName { get { return m_lastName; } }
408 407
409 /// <summary> 408 /// <summary>
410 /// Full name of the client (first name and last name) 409 /// Full name of the client (first name and last name)
411 /// </summary> 410 /// </summary>
412 public string Name { get { return FirstName + " " + LastName; } } 411 public string Name { get { return FirstName + " " + LastName; } }
413 412
414 public uint CircuitCode { get { return m_circuitCode; } } 413 public uint CircuitCode { get { return m_circuitCode; } }
415 public int MoneyBalance { get { return m_moneyBalance; } } 414 public int MoneyBalance { get { return m_moneyBalance; } }
416 public int NextAnimationSequenceNumber { get { return m_animationSequenceNumber++; } } 415 public int NextAnimationSequenceNumber { get { return m_animationSequenceNumber++; } }
@@ -453,7 +452,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
453 m_entityUpdates = new PriorityQueue(m_scene.Entities.Count); 452 m_entityUpdates = new PriorityQueue(m_scene.Entities.Count);
454 m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>(); 453 m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>();
455 m_killRecord = new HashSet<uint>(); 454 m_killRecord = new HashSet<uint>();
456// m_attachmentsSent = new HashSet<uint>(); 455// m_attachmentsSent = new HashSet<uint>();
457 456
458 m_assetService = m_scene.RequestModuleInterface<IAssetService>(); 457 m_assetService = m_scene.RequestModuleInterface<IAssetService>();
459 m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>(); 458 m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>();
@@ -679,7 +678,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
679 // Make sure that we see any exception caused by the asynchronous operation. 678 // Make sure that we see any exception caused by the asynchronous operation.
680 m_log.Error( 679 m_log.Error(
681 string.Format("[LLCLIENTVIEW]: Caught exception while processing {0}", packetObject.Pack), e); 680 string.Format("[LLCLIENTVIEW]: Caught exception while processing {0}", packetObject.Pack), e);
682 } 681 }
683 } 682 }
684 683
685 #endregion Packet Handling 684 #endregion Packet Handling
@@ -890,7 +889,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
890 foreach (GroupActiveProposals Proposal in Proposals) 889 foreach (GroupActiveProposals Proposal in Proposals)
891 { 890 {
892 GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); 891 GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket();
893 892
894 GAPIRP.AgentData.AgentID = AgentId; 893 GAPIRP.AgentData.AgentID = AgentId;
895 GAPIRP.AgentData.GroupID = groupID; 894 GAPIRP.AgentData.GroupID = groupID;
896 GAPIRP.TransactionData.TransactionID = transactionID; 895 GAPIRP.TransactionData.TransactionID = transactionID;
@@ -914,7 +913,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
914 if (Proposals.Length == 0) 913 if (Proposals.Length == 0)
915 { 914 {
916 GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); 915 GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket();
917 916
918 GAPIRP.AgentData.AgentID = AgentId; 917 GAPIRP.AgentData.AgentID = AgentId;
919 GAPIRP.AgentData.GroupID = groupID; 918 GAPIRP.AgentData.GroupID = groupID;
920 GAPIRP.TransactionData.TransactionID = transactionID; 919 GAPIRP.TransactionData.TransactionID = transactionID;
@@ -969,7 +968,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
969 if (Votes.Length == 0) 968 if (Votes.Length == 0)
970 { 969 {
971 GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket(); 970 GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket();
972 971
973 GVHIRP.AgentData.AgentID = AgentId; 972 GVHIRP.AgentData.AgentID = AgentId;
974 GVHIRP.AgentData.GroupID = groupID; 973 GVHIRP.AgentData.GroupID = groupID;
975 GVHIRP.TransactionData.TransactionID = transactionID; 974 GVHIRP.TransactionData.TransactionID = transactionID;
@@ -993,7 +992,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
993 OutPacket(GVHIRP, ThrottleOutPacketType.Task); 992 OutPacket(GVHIRP, ThrottleOutPacketType.Task);
994 } 993 }
995 } 994 }
996 995
997 public void SendGroupAccountingDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt) 996 public void SendGroupAccountingDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt)
998 { 997 {
999 GroupAccountDetailsReplyPacket GADRP = new GroupAccountDetailsReplyPacket(); 998 GroupAccountDetailsReplyPacket GADRP = new GroupAccountDetailsReplyPacket();
@@ -1012,13 +1011,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1012 GADRP.HistoryData[0] = History; 1011 GADRP.HistoryData[0] = History;
1013 OutPacket(GADRP, ThrottleOutPacketType.Task); 1012 OutPacket(GADRP, ThrottleOutPacketType.Task);
1014 } 1013 }
1015 1014
1016 public void SendGroupAccountingSummary(IClientAPI sender,UUID groupID, uint moneyAmt, int totalTier, int usedTier) 1015 public void SendGroupAccountingSummary(IClientAPI sender,UUID groupID, uint moneyAmt, int totalTier, int usedTier)
1017 { 1016 {
1018 GroupAccountSummaryReplyPacket GASRP = 1017 GroupAccountSummaryReplyPacket GASRP =
1019 (GroupAccountSummaryReplyPacket)PacketPool.Instance.GetPacket( 1018 (GroupAccountSummaryReplyPacket)PacketPool.Instance.GetPacket(
1020 PacketType.GroupAccountSummaryReply); 1019 PacketType.GroupAccountSummaryReply);
1021 1020
1022 GASRP.AgentData = new GroupAccountSummaryReplyPacket.AgentDataBlock(); 1021 GASRP.AgentData = new GroupAccountSummaryReplyPacket.AgentDataBlock();
1023 GASRP.AgentData.AgentID = sender.AgentId; 1022 GASRP.AgentData.AgentID = sender.AgentId;
1024 GASRP.AgentData.GroupID = groupID; 1023 GASRP.AgentData.GroupID = groupID;
@@ -1045,13 +1044,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1045 GASRP.MoneyData.LightTaxEstimate = 0; 1044 GASRP.MoneyData.LightTaxEstimate = 0;
1046 OutPacket(GASRP, ThrottleOutPacketType.Task); 1045 OutPacket(GASRP, ThrottleOutPacketType.Task);
1047 } 1046 }
1048 1047
1049 public void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt) 1048 public void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt)
1050 { 1049 {
1051 GroupAccountTransactionsReplyPacket GATRP = 1050 GroupAccountTransactionsReplyPacket GATRP =
1052 (GroupAccountTransactionsReplyPacket)PacketPool.Instance.GetPacket( 1051 (GroupAccountTransactionsReplyPacket)PacketPool.Instance.GetPacket(
1053 PacketType.GroupAccountTransactionsReply); 1052 PacketType.GroupAccountTransactionsReply);
1054 1053
1055 GATRP.AgentData = new GroupAccountTransactionsReplyPacket.AgentDataBlock(); 1054 GATRP.AgentData = new GroupAccountTransactionsReplyPacket.AgentDataBlock();
1056 GATRP.AgentData.AgentID = sender.AgentId; 1055 GATRP.AgentData.AgentID = sender.AgentId;
1057 GATRP.AgentData.GroupID = groupID; 1056 GATRP.AgentData.GroupID = groupID;
@@ -1520,7 +1519,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1520 public void SendKillObject(ulong regionHandle, uint localID) 1519 public void SendKillObject(ulong regionHandle, uint localID)
1521 { 1520 {
1522// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle); 1521// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle);
1523 1522
1524 KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); 1523 KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject);
1525 // TODO: don't create new blocks if recycling an old packet 1524 // TODO: don't create new blocks if recycling an old packet
1526 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; 1525 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
@@ -3488,9 +3487,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3488 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(presence); 3487 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(presence);
3489 3488
3490 OutPacket(objupdate, ThrottleOutPacketType.Task); 3489 OutPacket(objupdate, ThrottleOutPacketType.Task);
3491 3490
3492 // We need to record the avatar local id since the root prim of an attachment points to this. 3491 // We need to record the avatar local id since the root prim of an attachment points to this.
3493// m_attachmentsSent.Add(avatar.LocalId); 3492// m_attachmentsSent.Add(avatar.LocalId);
3494 } 3493 }
3495 3494
3496 public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations) 3495 public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
@@ -3538,7 +3537,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3538 #region Primitive Packet/Data Sending Methods 3537 #region Primitive Packet/Data Sending Methods
3539 3538
3540 /// <summary> 3539 /// <summary>
3541 /// Generate one of the object update packets based on PrimUpdateFlags 3540 /// Generate one of the object update packets based on PrimUpdateFlags
3542 /// and broadcast the packet to clients 3541 /// and broadcast the packet to clients
3543 /// </summary> 3542 /// </summary>
3544 public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) 3543 public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
@@ -3555,14 +3554,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3555 double priority = m_prioritizer.GetUpdatePriority(this, entity); 3554 double priority = m_prioritizer.GetUpdatePriority(this, entity);
3556 3555
3557 lock (m_entityUpdates.SyncRoot) 3556 lock (m_entityUpdates.SyncRoot)
3558 m_entityUpdates.Enqueue(priority, new EntityUpdate(entity, updateFlags), entity.LocalId); 3557 m_entityUpdates.Enqueue(priority, new EntityUpdate(entity, updateFlags), entity.LocalId);
3559 } 3558 }
3560 3559
3561 private void ProcessEntityUpdates(int maxUpdates) 3560 private void ProcessEntityUpdates(int maxUpdates)
3562 { 3561 {
3563 Lazy<List<ObjectUpdatePacket.ObjectDataBlock>> objectUpdateBlocks = new Lazy<List<ObjectUpdatePacket.ObjectDataBlock>>(); 3562 OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>> objectUpdateBlocks = new OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>>();
3564 Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>> compressedUpdateBlocks = new Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>>(); 3563 OpenSim.Framework.Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>> compressedUpdateBlocks = new OpenSim.Framework.Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>>();
3565 Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>> terseUpdateBlocks = new Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>>(); 3564 OpenSim.Framework.Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>> terseUpdateBlocks = new OpenSim.Framework.Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>>();
3566 3565
3567 if (maxUpdates <= 0) maxUpdates = Int32.MaxValue; 3566 if (maxUpdates <= 0) maxUpdates = Int32.MaxValue;
3568 int updatesThisCall = 0; 3567 int updatesThisCall = 0;
@@ -3660,28 +3659,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3660// string text = sop.Text; 3659// string text = sop.Text;
3661// if (text.IndexOf("\n") >= 0) 3660// if (text.IndexOf("\n") >= 0)
3662// text = text.Remove(text.IndexOf("\n")); 3661// text = text.Remove(text.IndexOf("\n"));
3663// 3662//
3664// if (m_attachmentsSent.Contains(sop.ParentID)) 3663// if (m_attachmentsSent.Contains(sop.ParentID))
3665// { 3664// {
3666//// m_log.DebugFormat( 3665//// m_log.DebugFormat(
3667//// "[CLIENT]: Sending full info about attached prim {0} text {1}", 3666//// "[CLIENT]: Sending full info about attached prim {0} text {1}",
3668//// sop.LocalId, text); 3667//// sop.LocalId, text);
3669// 3668//
3670// objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock(sop, this.m_agentId)); 3669// objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock(sop, this.m_agentId));
3671// 3670//
3672// m_attachmentsSent.Add(sop.LocalId); 3671// m_attachmentsSent.Add(sop.LocalId);
3673// } 3672// }
3674// else 3673// else
3675// { 3674// {
3676// m_log.DebugFormat( 3675// m_log.DebugFormat(
3677// "[CLIENT]: Requeueing full update of prim {0} text {1} since we haven't sent its parent {2} yet", 3676// "[CLIENT]: Requeueing full update of prim {0} text {1} since we haven't sent its parent {2} yet",
3678// sop.LocalId, text, sop.ParentID); 3677// sop.LocalId, text, sop.ParentID);
3679// 3678//
3680// m_entityUpdates.Enqueue(double.MaxValue, update, sop.LocalId); 3679// m_entityUpdates.Enqueue(double.MaxValue, update, sop.LocalId);
3681// } 3680// }
3682// } 3681// }
3683// else 3682// else
3684// { 3683// {
3685 objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock((SceneObjectPart)update.Entity, this.m_agentId)); 3684 objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock((SceneObjectPart)update.Entity, this.m_agentId));
3686// } 3685// }
3687 } 3686 }
@@ -3995,7 +3994,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3995 m_propertiesPacketTimer.Stop(); 3994 m_propertiesPacketTimer.Stop();
3996 return; 3995 return;
3997 } 3996 }
3998 3997
3999 m_propertiesPacketTimer.Stop(); 3998 m_propertiesPacketTimer.Stop();
4000 m_propertiesPacketTimer.Start(); 3999 m_propertiesPacketTimer.Start();
4001 } 4000 }
@@ -4229,7 +4228,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4229 4228
4230 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 4229 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
4231 { 4230 {
4232 ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage(); 4231 ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage();
4233 4232
4234 updateMessage.AABBMax = landData.AABBMax; 4233 updateMessage.AABBMax = landData.AABBMax;
4235 updateMessage.AABBMin = landData.AABBMin; 4234 updateMessage.AABBMin = landData.AABBMin;
@@ -4273,7 +4272,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4273 updateMessage.PassHours = landData.PassHours; 4272 updateMessage.PassHours = landData.PassHours;
4274 updateMessage.PassPrice = landData.PassPrice; 4273 updateMessage.PassPrice = landData.PassPrice;
4275 updateMessage.PublicCount = 0; //TODO: Unimplemented 4274 updateMessage.PublicCount = 0; //TODO: Unimplemented
4276 4275
4277 updateMessage.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0; 4276 updateMessage.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0;
4278 updateMessage.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0; 4277 updateMessage.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0;
4279 4278
@@ -4303,13 +4302,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4303 updateMessage.UserLocation = landData.UserLocation; 4302 updateMessage.UserLocation = landData.UserLocation;
4304 updateMessage.UserLookAt = landData.UserLookAt; 4303 updateMessage.UserLookAt = landData.UserLookAt;
4305 4304
4306 updateMessage.MediaType = landData.MediaType; 4305 updateMessage.MediaType = landData.MediaType;
4307 updateMessage.MediaDesc = landData.MediaDescription; 4306 updateMessage.MediaDesc = landData.MediaDescription;
4308 updateMessage.MediaWidth = landData.MediaWidth; 4307 updateMessage.MediaWidth = landData.MediaWidth;
4309 updateMessage.MediaHeight = landData.MediaHeight; 4308 updateMessage.MediaHeight = landData.MediaHeight;
4310 updateMessage.MediaLoop = landData.MediaLoop; 4309 updateMessage.MediaLoop = landData.MediaLoop;
4311 updateMessage.ObscureMusic = landData.ObscureMusic; 4310 updateMessage.ObscureMusic = landData.ObscureMusic;
4312 updateMessage.ObscureMedia = landData.ObscureMedia; 4311 updateMessage.ObscureMedia = landData.ObscureMedia;
4313 4312
4314 try 4313 try
4315 { 4314 {
@@ -4318,8 +4317,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4318 { 4317 {
4319 eq.ParcelProperties(updateMessage, this.AgentId); 4318 eq.ParcelProperties(updateMessage, this.AgentId);
4320 } else { 4319 } else {
4321 m_log.Warn("No EQ Interface when sending parcel data."); 4320 m_log.Warn("No EQ Interface when sending parcel data.");
4322 } 4321 }
4323 } 4322 }
4324 catch (Exception ex) 4323 catch (Exception ex)
4325 { 4324 {
@@ -4692,9 +4691,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4692 } 4691 }
4693 4692
4694// m_log.DebugFormat( 4693// m_log.DebugFormat(
4695// "[LLCLIENTVIEW]: Constructing client update for part {0} {1} with flags {2}, localId {3}", 4694// "[LLCLIENTVIEW]: Constructing client update for part {0} {1} with flags {2}, localId {3}",
4696// data.Name, update.FullID, flags, update.ID); 4695// data.Name, update.FullID, flags, update.ID);
4697 4696
4698 update.UpdateFlags = (uint)flags; 4697 update.UpdateFlags = (uint)flags;
4699 4698
4700 #endregion PrimFlags 4699 #endregion PrimFlags
@@ -4827,11 +4826,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4827 AddLocalPacketHandler(PacketType.ObjectScale, HandleObjectScale); 4826 AddLocalPacketHandler(PacketType.ObjectScale, HandleObjectScale);
4828 AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation); 4827 AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation);
4829 AddLocalPacketHandler(PacketType.ObjectFlagUpdate, HandleObjectFlagUpdate); 4828 AddLocalPacketHandler(PacketType.ObjectFlagUpdate, HandleObjectFlagUpdate);
4830 4829
4831 // Handle ObjectImage (TextureEntry) updates synchronously, since when updating multiple prim faces at once, 4830 // Handle ObjectImage (TextureEntry) updates synchronously, since when updating multiple prim faces at once,
4832 // some clients will send out a separate ObjectImage packet for each face 4831 // some clients will send out a separate ObjectImage packet for each face
4833 AddLocalPacketHandler(PacketType.ObjectImage, HandleObjectImage, false); 4832 AddLocalPacketHandler(PacketType.ObjectImage, HandleObjectImage, false);
4834 4833
4835 AddLocalPacketHandler(PacketType.ObjectGrab, HandleObjectGrab, false); 4834 AddLocalPacketHandler(PacketType.ObjectGrab, HandleObjectGrab, false);
4836 AddLocalPacketHandler(PacketType.ObjectGrabUpdate, HandleObjectGrabUpdate, false); 4835 AddLocalPacketHandler(PacketType.ObjectGrabUpdate, HandleObjectGrabUpdate, false);
4837 AddLocalPacketHandler(PacketType.ObjectDeGrab, HandleObjectDeGrab); 4836 AddLocalPacketHandler(PacketType.ObjectDeGrab, HandleObjectDeGrab);
@@ -5088,12 +5087,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5088 5087
5089 return false; 5088 return false;
5090 } 5089 }
5091 5090
5092 private bool HandleParcelGodMarkAsContent(IClientAPI client, Packet Packet) 5091 private bool HandleParcelGodMarkAsContent(IClientAPI client, Packet Packet)
5093 { 5092 {
5094 ParcelGodMarkAsContentPacket ParcelGodMarkAsContent = 5093 ParcelGodMarkAsContentPacket ParcelGodMarkAsContent =
5095 (ParcelGodMarkAsContentPacket)Packet; 5094 (ParcelGodMarkAsContentPacket)Packet;
5096 5095
5097 ParcelGodMark ParcelGodMarkAsContentHandler = OnParcelGodMark; 5096 ParcelGodMark ParcelGodMarkAsContentHandler = OnParcelGodMark;
5098 if (ParcelGodMarkAsContentHandler != null) 5097 if (ParcelGodMarkAsContentHandler != null)
5099 { 5098 {
@@ -5104,11 +5103,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5104 } 5103 }
5105 return false; 5104 return false;
5106 } 5105 }
5107 5106
5108 private bool HandleFreezeUser(IClientAPI client, Packet Packet) 5107 private bool HandleFreezeUser(IClientAPI client, Packet Packet)
5109 { 5108 {
5110 FreezeUserPacket FreezeUser = (FreezeUserPacket)Packet; 5109 FreezeUserPacket FreezeUser = (FreezeUserPacket)Packet;
5111 5110
5112 FreezeUserUpdate FreezeUserHandler = OnParcelFreezeUser; 5111 FreezeUserUpdate FreezeUserHandler = OnParcelFreezeUser;
5113 if (FreezeUserHandler != null) 5112 if (FreezeUserHandler != null)
5114 { 5113 {
@@ -5120,12 +5119,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5120 } 5119 }
5121 return false; 5120 return false;
5122 } 5121 }
5123 5122
5124 private bool HandleEjectUser(IClientAPI client, Packet Packet) 5123 private bool HandleEjectUser(IClientAPI client, Packet Packet)
5125 { 5124 {
5126 EjectUserPacket EjectUser = 5125 EjectUserPacket EjectUser =
5127 (EjectUserPacket)Packet; 5126 (EjectUserPacket)Packet;
5128 5127
5129 EjectUserUpdate EjectUserHandler = OnParcelEjectUser; 5128 EjectUserUpdate EjectUserHandler = OnParcelEjectUser;
5130 if (EjectUserHandler != null) 5129 if (EjectUserHandler != null)
5131 { 5130 {
@@ -5137,12 +5136,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5137 } 5136 }
5138 return false; 5137 return false;
5139 } 5138 }
5140 5139
5141 private bool HandleParcelBuyPass(IClientAPI client, Packet Packet) 5140 private bool HandleParcelBuyPass(IClientAPI client, Packet Packet)
5142 { 5141 {
5143 ParcelBuyPassPacket ParcelBuyPass = 5142 ParcelBuyPassPacket ParcelBuyPass =
5144 (ParcelBuyPassPacket)Packet; 5143 (ParcelBuyPassPacket)Packet;
5145 5144
5146 ParcelBuyPass ParcelBuyPassHandler = OnParcelBuyPass; 5145 ParcelBuyPass ParcelBuyPassHandler = OnParcelBuyPass;
5147 if (ParcelBuyPassHandler != null) 5146 if (ParcelBuyPassHandler != null)
5148 { 5147 {
@@ -5153,7 +5152,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5153 } 5152 }
5154 return false; 5153 return false;
5155 } 5154 }
5156 5155
5157 private bool HandleParcelBuyRequest(IClientAPI sender, Packet Pack) 5156 private bool HandleParcelBuyRequest(IClientAPI sender, Packet Pack)
5158 { 5157 {
5159 ParcelBuyPacket parcel = (ParcelBuyPacket)Pack; 5158 ParcelBuyPacket parcel = (ParcelBuyPacket)Pack;
@@ -5375,7 +5374,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5375 ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack; 5374 ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack;
5376 5375
5377 //m_log.DebugFormat("[CLIENT]: Received ScriptDialogReply from {0}", rdialog.Data.ObjectID); 5376 //m_log.DebugFormat("[CLIENT]: Received ScriptDialogReply from {0}", rdialog.Data.ObjectID);
5378 5377
5379 #region Packet Session and User Check 5378 #region Packet Session and User Check
5380 if (m_checkPackets) 5379 if (m_checkPackets)
5381 { 5380 {
@@ -5521,12 +5520,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5521 } 5520 }
5522 return true; 5521 return true;
5523 } 5522 }
5524 5523
5525 private bool HandleFindAgent(IClientAPI client, Packet Packet) 5524 private bool HandleFindAgent(IClientAPI client, Packet Packet)
5526 { 5525 {
5527 FindAgentPacket FindAgent = 5526 FindAgentPacket FindAgent =
5528 (FindAgentPacket)Packet; 5527 (FindAgentPacket)Packet;
5529 5528
5530 FindAgentUpdate FindAgentHandler = OnFindAgent; 5529 FindAgentUpdate FindAgentHandler = OnFindAgent;
5531 if (FindAgentHandler != null) 5530 if (FindAgentHandler != null)
5532 { 5531 {
@@ -5535,12 +5534,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5535 } 5534 }
5536 return false; 5535 return false;
5537 } 5536 }
5538 5537
5539 private bool HandleTrackAgent(IClientAPI client, Packet Packet) 5538 private bool HandleTrackAgent(IClientAPI client, Packet Packet)
5540 { 5539 {
5541 TrackAgentPacket TrackAgent = 5540 TrackAgentPacket TrackAgent =
5542 (TrackAgentPacket)Packet; 5541 (TrackAgentPacket)Packet;
5543 5542
5544 TrackAgentUpdate TrackAgentHandler = OnTrackAgent; 5543 TrackAgentUpdate TrackAgentHandler = OnTrackAgent;
5545 if (TrackAgentHandler != null) 5544 if (TrackAgentHandler != null)
5546 { 5545 {
@@ -5551,7 +5550,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5551 } 5550 }
5552 return false; 5551 return false;
5553 } 5552 }
5554 5553
5555 private bool HandlerRezObject(IClientAPI sender, Packet Pack) 5554 private bool HandlerRezObject(IClientAPI sender, Packet Pack)
5556 { 5555 {
5557 RezObjectPacket rezPacket = (RezObjectPacket)Pack; 5556 RezObjectPacket rezPacket = (RezObjectPacket)Pack;
@@ -7207,19 +7206,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7207 UUID requestID = new UUID(transfer.TransferInfo.Params, 80); 7206 UUID requestID = new UUID(transfer.TransferInfo.Params, 80);
7208 7207
7209// m_log.DebugFormat( 7208// m_log.DebugFormat(
7210// "[CLIENT]: Got request for asset {0} from item {1} in prim {2} by {3}", 7209// "[CLIENT]: Got request for asset {0} from item {1} in prim {2} by {3}",
7211// requestID, itemID, taskID, Name); 7210// requestID, itemID, taskID, Name);
7212 7211
7213 if (!(((Scene)m_scene).Permissions.BypassPermissions())) 7212 if (!(((Scene)m_scene).Permissions.BypassPermissions()))
7214 { 7213 {
7215 if (taskID != UUID.Zero) // Prim 7214 if (taskID != UUID.Zero) // Prim
7216 { 7215 {
7217 SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); 7216 SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID);
7218 7217
7219 if (part == null) 7218 if (part == null)
7220 { 7219 {
7221 m_log.WarnFormat( 7220 m_log.WarnFormat(
7222 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but prim does not exist", 7221 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but prim does not exist",
7223 Name, requestID, itemID, taskID); 7222 Name, requestID, itemID, taskID);
7224 return true; 7223 return true;
7225 } 7224 }
@@ -7228,11 +7227,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7228 if (tii == null) 7227 if (tii == null)
7229 { 7228 {
7230 m_log.WarnFormat( 7229 m_log.WarnFormat(
7231 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item does not exist", 7230 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item does not exist",
7232 Name, requestID, itemID, taskID); 7231 Name, requestID, itemID, taskID);
7233 return true; 7232 return true;
7234 } 7233 }
7235 7234
7236 if (tii.Type == (int)AssetType.LSLText) 7235 if (tii.Type == (int)AssetType.LSLText)
7237 { 7236 {
7238 if (!((Scene)m_scene).Permissions.CanEditScript(itemID, taskID, AgentId)) 7237 if (!((Scene)m_scene).Permissions.CanEditScript(itemID, taskID, AgentId))
@@ -7251,41 +7250,41 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7251 { 7250 {
7252 m_log.WarnFormat( 7251 m_log.WarnFormat(
7253 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the prim is owned by {4}", 7252 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the prim is owned by {4}",
7254 Name, requestID, itemID, taskID, part.OwnerID); 7253 Name, requestID, itemID, taskID, part.OwnerID);
7255 return true; 7254 return true;
7256 } 7255 }
7257 7256
7258 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) 7257 if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
7259 { 7258 {
7260 m_log.WarnFormat( 7259 m_log.WarnFormat(
7261 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but modify permissions are not set", 7260 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but modify permissions are not set",
7262 Name, requestID, itemID, taskID); 7261 Name, requestID, itemID, taskID);
7263 return true; 7262 return true;
7264 } 7263 }
7265 7264
7266 if (tii.OwnerID != AgentId) 7265 if (tii.OwnerID != AgentId)
7267 { 7266 {
7268 m_log.WarnFormat( 7267 m_log.WarnFormat(
7269 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the item is owned by {4}", 7268 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the item is owned by {4}",
7270 Name, requestID, itemID, taskID, tii.OwnerID); 7269 Name, requestID, itemID, taskID, tii.OwnerID);
7271 return true; 7270 return true;
7272 } 7271 }
7273 7272
7274 if (( 7273 if ((
7275 tii.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) 7274 tii.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer))
7276 != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) 7275 != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer))
7277 { 7276 {
7278 m_log.WarnFormat( 7277 m_log.WarnFormat(
7279 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item permissions are not modify/copy/transfer", 7278 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item permissions are not modify/copy/transfer",
7280 Name, requestID, itemID, taskID); 7279 Name, requestID, itemID, taskID);
7281 return true; 7280 return true;
7282 } 7281 }
7283 7282
7284 if (tii.AssetID != requestID) 7283 if (tii.AssetID != requestID)
7285 { 7284 {
7286 m_log.WarnFormat( 7285 m_log.WarnFormat(
7287 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but this does not match item's asset {4}", 7286 "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but this does not match item's asset {4}",
7288 Name, requestID, itemID, taskID, tii.AssetID); 7287 Name, requestID, itemID, taskID, tii.AssetID);
7289 return true; 7288 return true;
7290 } 7289 }
7291 } 7290 }
@@ -7889,7 +7888,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7889 newTaskItem, updatetask.UpdateData.LocalID); 7888 newTaskItem, updatetask.UpdateData.LocalID);
7890 } 7889 }
7891 } 7890 }
7892 } 7891 }
7893 7892
7894 return true; 7893 return true;
7895 } 7894 }
@@ -8884,7 +8883,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
8884 8883
8885// return true; 8884// return true;
8886 } 8885 }
8887 8886
8888 private bool HandleRequestRegionInfo(IClientAPI sender, Packet Pack) 8887 private bool HandleRequestRegionInfo(IClientAPI sender, Packet Pack)
8889 { 8888 {
8890 RequestRegionInfoPacket.AgentDataBlock mPacket = ((RequestRegionInfoPacket)Pack).AgentData; 8889 RequestRegionInfoPacket.AgentDataBlock mPacket = ((RequestRegionInfoPacket)Pack).AgentData;
@@ -8905,7 +8904,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
8905 } 8904 }
8906 return true; 8905 return true;
8907 } 8906 }
8908 8907
8909 private bool HandleEstateCovenantRequest(IClientAPI sender, Packet Pack) 8908 private bool HandleEstateCovenantRequest(IClientAPI sender, Packet Pack)
8910 { 8909 {
8911 8910
@@ -8942,7 +8941,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
8942 8941
8943 return true; 8942 return true;
8944 } 8943 }
8945 8944
8946 private bool HandleGodUpdateRegionInfoUpdate(IClientAPI client, Packet Packet) 8945 private bool HandleGodUpdateRegionInfoUpdate(IClientAPI client, Packet Packet)
8947 { 8946 {
8948 GodUpdateRegionInfoPacket GodUpdateRegionInfo = 8947 GodUpdateRegionInfoPacket GodUpdateRegionInfo =
@@ -8962,7 +8961,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
8962 } 8961 }
8963 return false; 8962 return false;
8964 } 8963 }
8965 8964
8966 private bool HandleSimWideDeletes(IClientAPI client, Packet Packet) 8965 private bool HandleSimWideDeletes(IClientAPI client, Packet Packet)
8967 { 8966 {
8968 SimWideDeletesPacket SimWideDeletesRequest = 8967 SimWideDeletesPacket SimWideDeletesRequest =
@@ -8975,7 +8974,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
8975 } 8974 }
8976 return false; 8975 return false;
8977 } 8976 }
8978 8977
8979 private bool HandleGodlikeMessage(IClientAPI client, Packet Packet) 8978 private bool HandleGodlikeMessage(IClientAPI client, Packet Packet)
8980 { 8979 {
8981 GodlikeMessagePacket GodlikeMessage = 8980 GodlikeMessagePacket GodlikeMessage =
@@ -8992,7 +8991,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
8992 } 8991 }
8993 return false; 8992 return false;
8994 } 8993 }
8995 8994
8996 private bool HandleSaveStatePacket(IClientAPI client, Packet Packet) 8995 private bool HandleSaveStatePacket(IClientAPI client, Packet Packet)
8997 { 8996 {
8998 StateSavePacket SaveStateMessage = 8997 StateSavePacket SaveStateMessage =
@@ -9005,7 +9004,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9005 } 9004 }
9006 return false; 9005 return false;
9007 } 9006 }
9008 9007
9009 private bool HandleGodKickUser(IClientAPI sender, Packet Pack) 9008 private bool HandleGodKickUser(IClientAPI sender, Packet Pack)
9010 { 9009 {
9011 GodKickUserPacket gkupack = (GodKickUserPacket)Pack; 9010 GodKickUserPacket gkupack = (GodKickUserPacket)Pack;
@@ -9143,7 +9142,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9143 } 9142 }
9144 return true; 9143 return true;
9145 } 9144 }
9146 9145
9147 #endregion Economy/Transaction Packets 9146 #endregion Economy/Transaction Packets
9148 9147
9149 #region Script Packets 9148 #region Script Packets
@@ -9356,7 +9355,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9356 } 9355 }
9357 return true; 9356 return true;
9358 } 9357 }
9359 9358
9360 private bool HandleUpdateMuteListEntry(IClientAPI client, Packet Packet) 9359 private bool HandleUpdateMuteListEntry(IClientAPI client, Packet Packet)
9361 { 9360 {
9362 UpdateMuteListEntryPacket UpdateMuteListEntry = 9361 UpdateMuteListEntryPacket UpdateMuteListEntry =
@@ -9372,7 +9371,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9372 } 9371 }
9373 return false; 9372 return false;
9374 } 9373 }
9375 9374
9376 private bool HandleRemoveMuteListEntry(IClientAPI client, Packet Packet) 9375 private bool HandleRemoveMuteListEntry(IClientAPI client, Packet Packet)
9377 { 9376 {
9378 RemoveMuteListEntryPacket RemoveMuteListEntry = 9377 RemoveMuteListEntryPacket RemoveMuteListEntry =
@@ -9388,7 +9387,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9388 } 9387 }
9389 return false; 9388 return false;
9390 } 9389 }
9391 9390
9392 private bool HandleUserReport(IClientAPI client, Packet Packet) 9391 private bool HandleUserReport(IClientAPI client, Packet Packet)
9393 { 9392 {
9394 UserReportPacket UserReport = 9393 UserReportPacket UserReport =
@@ -9413,7 +9412,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9413 } 9412 }
9414 return false; 9413 return false;
9415 } 9414 }
9416 9415
9417 private bool HandleSendPostcard(IClientAPI client, Packet packet) 9416 private bool HandleSendPostcard(IClientAPI client, Packet packet)
9418 { 9417 {
9419// SendPostcardPacket SendPostcard = 9418// SendPostcardPacket SendPostcard =
@@ -9726,7 +9725,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9726 return true; 9725 return true;
9727 9726
9728 } 9727 }
9729 9728
9730 private bool HandleGroupVoteHistoryRequest(IClientAPI client, Packet Packet) 9729 private bool HandleGroupVoteHistoryRequest(IClientAPI client, Packet Packet)
9731 { 9730 {
9732 GroupVoteHistoryRequestPacket GroupVoteHistoryRequest = 9731 GroupVoteHistoryRequestPacket GroupVoteHistoryRequest =
@@ -9739,7 +9738,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9739 } 9738 }
9740 return false; 9739 return false;
9741 } 9740 }
9742 9741
9743 private bool HandleGroupActiveProposalsRequest(IClientAPI client, Packet Packet) 9742 private bool HandleGroupActiveProposalsRequest(IClientAPI client, Packet Packet)
9744 { 9743 {
9745 GroupActiveProposalsRequestPacket GroupActiveProposalsRequest = 9744 GroupActiveProposalsRequestPacket GroupActiveProposalsRequest =
@@ -9752,7 +9751,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9752 } 9751 }
9753 return false; 9752 return false;
9754 } 9753 }
9755 9754
9756 private bool HandleGroupAccountDetailsRequest(IClientAPI client, Packet Packet) 9755 private bool HandleGroupAccountDetailsRequest(IClientAPI client, Packet Packet)
9757 { 9756 {
9758 GroupAccountDetailsRequestPacket GroupAccountDetailsRequest = 9757 GroupAccountDetailsRequestPacket GroupAccountDetailsRequest =
@@ -9765,7 +9764,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9765 } 9764 }
9766 return false; 9765 return false;
9767 } 9766 }
9768 9767
9769 private bool HandleGroupAccountSummaryRequest(IClientAPI client, Packet Packet) 9768 private bool HandleGroupAccountSummaryRequest(IClientAPI client, Packet Packet)
9770 { 9769 {
9771 GroupAccountSummaryRequestPacket GroupAccountSummaryRequest = 9770 GroupAccountSummaryRequestPacket GroupAccountSummaryRequest =
@@ -9778,7 +9777,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9778 } 9777 }
9779 return false; 9778 return false;
9780 } 9779 }
9781 9780
9782 private bool HandleGroupTransactionsDetailsRequest(IClientAPI client, Packet Packet) 9781 private bool HandleGroupTransactionsDetailsRequest(IClientAPI client, Packet Packet)
9783 { 9782 {
9784 GroupAccountTransactionsRequestPacket GroupAccountTransactionsRequest = 9783 GroupAccountTransactionsRequestPacket GroupAccountTransactionsRequest =
@@ -9791,7 +9790,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9791 } 9790 }
9792 return false; 9791 return false;
9793 } 9792 }
9794 9793
9795 private bool HandleGroupTitlesRequest(IClientAPI sender, Packet Pack) 9794 private bool HandleGroupTitlesRequest(IClientAPI sender, Packet Pack)
9796 { 9795 {
9797 GroupTitlesRequestPacket groupTitlesRequest = 9796 GroupTitlesRequestPacket groupTitlesRequest =
@@ -11239,26 +11238,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11239 if (m_debugPacketLevel > 0) 11238 if (m_debugPacketLevel > 0)
11240 { 11239 {
11241 bool outputPacket = true; 11240 bool outputPacket = true;
11242 11241
11243 if (m_debugPacketLevel <= 255 11242 if (m_debugPacketLevel <= 255
11244 && (packet.Type == PacketType.SimStats || packet.Type == PacketType.SimulatorViewerTimeMessage)) 11243 && (packet.Type == PacketType.SimStats || packet.Type == PacketType.SimulatorViewerTimeMessage))
11245 outputPacket = false; 11244 outputPacket = false;
11246 11245
11247 if (m_debugPacketLevel <= 200 11246 if (m_debugPacketLevel <= 200
11248 && 11247 && (packet.Type == PacketType.ImagePacket
11249 (packet.Type == PacketType.ImagePacket
11250 || packet.Type == PacketType.ImageData 11248 || packet.Type == PacketType.ImageData
11251 || packet.Type == PacketType.LayerData 11249 || packet.Type == PacketType.LayerData
11252 || packet.Type == PacketType.CoarseLocationUpdate)) 11250 || packet.Type == PacketType.CoarseLocationUpdate))
11253 outputPacket = false; 11251 outputPacket = false;
11254 11252
11255 if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.AvatarAnimation || packet.Type == PacketType.ViewerEffect)) 11253 if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.AvatarAnimation || packet.Type == PacketType.ViewerEffect))
11256 outputPacket = false; 11254 outputPacket = false;
11257 11255
11258 if (outputPacket) 11256 if (outputPacket)
11259 m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type); 11257 m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type);
11260 } 11258 }
11261 11259
11262 m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting); 11260 m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting);
11263 } 11261 }
11264 11262
@@ -11348,16 +11346,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11348 if (m_debugPacketLevel > 0) 11346 if (m_debugPacketLevel > 0)
11349 { 11347 {
11350 bool outputPacket = true; 11348 bool outputPacket = true;
11351 11349
11352 if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate) 11350 if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate)
11353 outputPacket = false; 11351 outputPacket = false;
11354 11352
11355 if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage) 11353 if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage)
11356 outputPacket = false; 11354 outputPacket = false;
11357 11355
11358 if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation)) 11356 if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation))
11359 outputPacket = false; 11357 outputPacket = false;
11360 11358
11361 if (outputPacket) 11359 if (outputPacket)
11362 m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type); 11360 m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type);
11363 } 11361 }
@@ -11623,12 +11621,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11623 11621
11624 UUID requestID = UUID.Zero; 11622 UUID requestID = UUID.Zero;
11625 byte source = (byte)SourceType.Asset; 11623 byte source = (byte)SourceType.Asset;
11626 11624
11627 if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset) 11625 if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset)
11628 { 11626 {
11629 requestID = new UUID(transferRequest.TransferInfo.Params, 0); 11627 requestID = new UUID(transferRequest.TransferInfo.Params, 0);
11630 } 11628 }
11631 else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem) 11629 else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem)
11632 { 11630 {
11633 requestID = new UUID(transferRequest.TransferInfo.Params, 80); 11631 requestID = new UUID(transferRequest.TransferInfo.Params, 80);
11634 source = (byte)SourceType.SimInventoryItem; 11632 source = (byte)SourceType.SimInventoryItem;
@@ -11874,7 +11872,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11874 public PacketMethod method; 11872 public PacketMethod method;
11875 public bool Async; 11873 public bool Async;
11876 } 11874 }
11877 11875
11878 public class AsyncPacketProcess 11876 public class AsyncPacketProcess
11879 { 11877 {
11880 public bool result = false; 11878 public bool result = false;
@@ -11943,8 +11941,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11943 dialog.Data.FirstName = Util.StringToBytes256(ownerFirstName); 11941 dialog.Data.FirstName = Util.StringToBytes256(ownerFirstName);
11944 dialog.Data.LastName = Util.StringToBytes256(ownerLastName); 11942 dialog.Data.LastName = Util.StringToBytes256(ownerLastName);
11945 dialog.Data.Message = Util.StringToBytes256(message); 11943 dialog.Data.Message = Util.StringToBytes256(message);
11946 11944
11947
11948 ScriptDialogPacket.ButtonsBlock[] buttons = new ScriptDialogPacket.ButtonsBlock[1]; 11945 ScriptDialogPacket.ButtonsBlock[] buttons = new ScriptDialogPacket.ButtonsBlock[1];
11949 buttons[0] = new ScriptDialogPacket.ButtonsBlock(); 11946 buttons[0] = new ScriptDialogPacket.ButtonsBlock();
11950 buttons[0].ButtonLabel = Util.StringToBytes256("!!llTextBox!!"); 11947 buttons[0].ButtonLabel = Util.StringToBytes256("!!llTextBox!!");
@@ -11958,7 +11955,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11958 { 11955 {
11959 ScenePresence presence = p as ScenePresence; 11956 ScenePresence presence = p as ScenePresence;
11960 // It turns out to get the agent to stop flying, you have to feed it stop flying velocities 11957 // It turns out to get the agent to stop flying, you have to feed it stop flying velocities
11961 // There's no explicit message to send the client to tell it to stop flying.. it relies on the 11958 // There's no explicit message to send the client to tell it to stop flying.. it relies on the
11962 // velocity, collision plane and avatar height 11959 // velocity, collision plane and avatar height
11963 11960
11964 // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air 11961 // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air
@@ -11975,7 +11972,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11975 11972
11976 // attach a suitable collision plane regardless of the actual situation to force the LLClient to land. 11973 // attach a suitable collision plane regardless of the actual situation to force the LLClient to land.
11977 // Collision plane below the avatar's position a 6th of the avatar's height is suitable. 11974 // Collision plane below the avatar's position a 6th of the avatar's height is suitable.
11978 // Mind you, that this method doesn't get called if the avatar's velocity magnitude is greater then a 11975 // Mind you, that this method doesn't get called if the avatar's velocity magnitude is greater then a
11979 // certain amount.. because the LLClient wouldn't land in that situation anyway. 11976 // certain amount.. because the LLClient wouldn't land in that situation anyway.
11980 11977
11981 // why are we still testing for this really old height value default??? 11978 // why are we still testing for this really old height value default???
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
index 46b68ec..ea1317a 100644
--- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs
+++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
@@ -36,6 +36,7 @@ using OpenSim.Framework.Communications;
36using OpenSim.Framework.Servers; 36using OpenSim.Framework.Servers;
37using OpenSim.Framework.Servers.HttpServer; 37using OpenSim.Framework.Servers.HttpServer;
38using OpenSim.Region.Framework; 38using OpenSim.Region.Framework;
39using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 40using OpenSim.Region.Framework.Scenes;
40using OpenSim.Region.Physics.Manager; 41using OpenSim.Region.Physics.Manager;
41 42
@@ -48,28 +49,16 @@ namespace OpenSim.Region.ClientStack
48 49
49 protected Dictionary<EndPoint, uint> m_clientCircuits = new Dictionary<EndPoint, uint>(); 50 protected Dictionary<EndPoint, uint> m_clientCircuits = new Dictionary<EndPoint, uint>();
50 protected NetworkServersInfo m_networkServersInfo; 51 protected NetworkServersInfo m_networkServersInfo;
51
52 public NetworkServersInfo NetServersInfo
53 {
54 get { return m_networkServersInfo; }
55 }
56
57 protected uint m_httpServerPort; 52 protected uint m_httpServerPort;
58 53 protected ISimulationDataService m_simulationDataService;
59 protected StorageManager m_storageManager; 54 protected IEstateDataService m_estateDataService;
60
61 public StorageManager StorageManager
62 {
63 get { return m_storageManager; }
64 }
65
66 protected ClientStackManager m_clientStackManager; 55 protected ClientStackManager m_clientStackManager;
67
68 public SceneManager SceneManager
69 {
70 get { return m_sceneManager; }
71 }
72 protected SceneManager m_sceneManager = new SceneManager(); 56 protected SceneManager m_sceneManager = new SceneManager();
57
58 public SceneManager SceneManager { get { return m_sceneManager; } }
59 public NetworkServersInfo NetServersInfo { get { return m_networkServersInfo; } }
60 public ISimulationDataService SimulationDataService { get { return m_simulationDataService; } }
61 public IEstateDataService EstateDataService { get { return m_estateDataService; } }
73 62
74 protected abstract void Initialize(); 63 protected abstract void Initialize();
75 64
@@ -83,15 +72,11 @@ namespace OpenSim.Region.ClientStack
83 /// <returns></returns> 72 /// <returns></returns>
84 protected abstract PhysicsScene GetPhysicsScene(string osSceneIdentifier); 73 protected abstract PhysicsScene GetPhysicsScene(string osSceneIdentifier);
85 74
86 protected abstract StorageManager CreateStorageManager();
87 protected abstract ClientStackManager CreateClientStackManager(); 75 protected abstract ClientStackManager CreateClientStackManager();
88 protected abstract Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, 76 protected abstract Scene CreateScene(RegionInfo regionInfo, ISimulationDataService simDataService, IEstateDataService estateDataService, AgentCircuitManager circuitManager);
89 AgentCircuitManager circuitManager);
90 77
91 protected override void StartupSpecific() 78 protected override void StartupSpecific()
92 { 79 {
93 m_storageManager = CreateStorageManager();
94
95 m_clientStackManager = CreateClientStackManager(); 80 m_clientStackManager = CreateClientStackManager();
96 81
97 Initialize(); 82 Initialize();
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 100b55c..e1c0949 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -49,8 +49,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
49 49
50 protected Scene m_scene = null; 50 protected Scene m_scene = null;
51 51
52 public string Name { get { return "Attachments Module"; } } 52 public string Name { get { return "Attachments Module"; } }
53 public Type ReplaceableInterface { get { return null; } } 53 public Type ReplaceableInterface { get { return null; } }
54 54
55 public void Initialise(IConfigSource source) {} 55 public void Initialise(IConfigSource source) {}
56 56
@@ -81,7 +81,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
81 client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachmentsFromInventory; 81 client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachmentsFromInventory;
82 client.OnObjectAttach += AttachObject; 82 client.OnObjectAttach += AttachObject;
83 client.OnObjectDetach += DetachObject; 83 client.OnObjectDetach += DetachObject;
84 client.OnDetachAttachmentIntoInv += ShowDetachInUserInventory; 84 client.OnDetachAttachmentIntoInv += ShowDetachInUserInventory;
85 } 85 }
86 86
87 public void UnsubscribeFromClientEvents(IClientAPI client) 87 public void UnsubscribeFromClientEvents(IClientAPI client)
@@ -90,7 +90,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
90 client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachmentsFromInventory; 90 client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachmentsFromInventory;
91 client.OnObjectAttach -= AttachObject; 91 client.OnObjectAttach -= AttachObject;
92 client.OnObjectDetach -= DetachObject; 92 client.OnObjectDetach -= DetachObject;
93 client.OnDetachAttachmentIntoInv -= ShowDetachInUserInventory; 93 client.OnDetachAttachmentIntoInv -= ShowDetachInUserInventory;
94 } 94 }
95 95
96 /// <summary> 96 /// <summary>
@@ -174,12 +174,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
174 UUID itemID = UUID.Zero; 174 UUID itemID = UUID.Zero;
175 if (sp != null) 175 if (sp != null)
176 { 176 {
177 foreach(SceneObjectGroup grp in sp.GetAttachments(AttachmentPt)) 177 foreach (SceneObjectGroup grp in sp.GetAttachments(AttachmentPt))
178 { 178 {
179 itemID = grp.GetFromItemID(); 179 itemID = grp.GetFromItemID();
180 if (itemID != UUID.Zero) 180 if (itemID != UUID.Zero)
181 DetachSingleAttachmentToInv(itemID, remoteClient); 181 DetachSingleAttachmentToInv(itemID, remoteClient);
182 } 182 }
183 } 183 }
184 184
185 if (group.GetFromItemID() == UUID.Zero) 185 if (group.GetFromItemID() == UUID.Zero)
@@ -232,7 +232,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
232 232
233 public UUID RezSingleAttachmentFromInventory( 233 public UUID RezSingleAttachmentFromInventory(
234 IClientAPI remoteClient, UUID itemID, uint AttachmentPt, bool updateInventoryStatus, XmlDocument doc) 234 IClientAPI remoteClient, UUID itemID, uint AttachmentPt, bool updateInventoryStatus, XmlDocument doc)
235 { 235 {
236 SceneObjectGroup att = RezSingleAttachmentFromInventoryInternal(remoteClient, itemID, AttachmentPt, doc); 236 SceneObjectGroup att = RezSingleAttachmentFromInventoryInternal(remoteClient, itemID, AttachmentPt, doc);
237 237
238 if (updateInventoryStatus) 238 if (updateInventoryStatus)
@@ -248,8 +248,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
248 if (null == att) 248 if (null == att)
249 return UUID.Zero; 249 return UUID.Zero;
250 else 250 else
251 return att.UUID; 251 return att.UUID;
252 } 252 }
253 253
254 protected SceneObjectGroup RezSingleAttachmentFromInventoryInternal( 254 protected SceneObjectGroup RezSingleAttachmentFromInventoryInternal(
255 IClientAPI remoteClient, UUID itemID, uint AttachmentPt, XmlDocument doc) 255 IClientAPI remoteClient, UUID itemID, uint AttachmentPt, XmlDocument doc)
@@ -311,7 +311,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
311 } 311 }
312 312
313 return null; 313 return null;
314 } 314 }
315 315
316 public UUID SetAttachmentInventoryStatus( 316 public UUID SetAttachmentInventoryStatus(
317 SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt) 317 SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt)
@@ -456,7 +456,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
456 456
457 // We can NOT use the dictionries here, as we are looking 457 // We can NOT use the dictionries here, as we are looking
458 // for an entity by the fromAssetID, which is NOT the prim UUID 458 // for an entity by the fromAssetID, which is NOT the prim UUID
459 List<EntityBase> detachEntities = m_scene.GetEntities(); 459 EntityBase[] detachEntities = m_scene.GetEntities();
460 SceneObjectGroup group; 460 SceneObjectGroup group;
461 461
462 foreach (EntityBase entity in detachEntities) 462 foreach (EntityBase entity in detachEntities)
@@ -495,7 +495,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
495 sog.RootPart.IsAttachment = false; 495 sog.RootPart.IsAttachment = false;
496 sog.AbsolutePosition = sog.RootPart.AttachedPos; 496 sog.AbsolutePosition = sog.RootPart.AttachedPos;
497 UpdateKnownItem(client, sog, sog.GetFromItemID(), sog.OwnerID); 497 UpdateKnownItem(client, sog, sog.GetFromItemID(), sog.OwnerID);
498 sog.SetAttachmentPoint(attachmentPoint); 498 sog.SetAttachmentPoint(attachmentPoint);
499 } 499 }
500 500
501 /// <summary> 501 /// <summary>
@@ -622,7 +622,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
622 // In case it is later dropped again, don't let 622 // In case it is later dropped again, don't let
623 // it get cleaned up 623 // it get cleaned up
624 so.RootPart.RemFlag(PrimFlags.TemporaryOnRez); 624 so.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
625 so.HasGroupChanged = false; 625 so.HasGroupChanged = false;
626 } 626 }
627 } 627 }
628} 628}
diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
index 032e55a..25322a1 100644
--- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
@@ -132,7 +132,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
132 try 132 try
133 { 133 {
134 deadAvatar.ControllingClient.SendAgentAlertMessage(deadAvatarMessage, true); 134 deadAvatar.ControllingClient.SendAgentAlertMessage(deadAvatarMessage, true);
135 if(killingAvatar != null) 135 if (killingAvatar != null)
136 killingAvatar.ControllingClient.SendAlertMessage("You fragged " + deadAvatar.Firstname + " " + deadAvatar.Lastname); 136 killingAvatar.ControllingClient.SendAlertMessage("You fragged " + deadAvatar.Firstname + " " + deadAvatar.Lastname);
137 } 137 }
138 catch (InvalidOperationException) 138 catch (InvalidOperationException)
@@ -143,7 +143,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
143 } 143 }
144 144
145 private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) 145 private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID)
146 { 146 {
147 try 147 try
148 { 148 {
149 ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); 149 ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index ca0b7ad..a49e71e 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -54,7 +54,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
54 public UUID PrincipalID; 54 public UUID PrincipalID;
55 public FriendInfo[] Friends; 55 public FriendInfo[] Friends;
56 public int Refcount; 56 public int Refcount;
57 public UUID RegionID;
58 57
59 public bool IsFriend(string friend) 58 public bool IsFriend(string friend)
60 { 59 {
@@ -68,6 +67,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
68 } 67 }
69 } 68 }
70 69
70 private static readonly FriendInfo[] EMPTY_FRIENDS = new FriendInfo[0];
71 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 71 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
72 72
73 protected List<Scene> m_Scenes = new List<Scene>(); 73 protected List<Scene> m_Scenes = new List<Scene>();
@@ -79,7 +79,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
79 protected Dictionary<UUID, UserFriendData> m_Friends = 79 protected Dictionary<UUID, UserFriendData> m_Friends =
80 new Dictionary<UUID, UserFriendData>(); 80 new Dictionary<UUID, UserFriendData>();
81 81
82 protected List<UUID> m_NeedsListOfFriends = new List<UUID>(); 82 protected HashSet<UUID> m_NeedsListOfFriends = new HashSet<UUID>();
83 83
84 protected IPresenceService PresenceService 84 protected IPresenceService PresenceService
85 { 85 {
@@ -146,7 +146,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
146 // Instantiate the request handler 146 // Instantiate the request handler
147 IHttpServer server = MainServer.GetHttpServer((uint)mPort); 147 IHttpServer server = MainServer.GetHttpServer((uint)mPort);
148 server.AddStreamHandler(new FriendsRequestHandler(this)); 148 server.AddStreamHandler(new FriendsRequestHandler(this));
149
150 } 149 }
151 150
152 if (m_FriendsService == null) 151 if (m_FriendsService == null)
@@ -173,7 +172,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
173 scene.EventManager.OnNewClient += OnNewClient; 172 scene.EventManager.OnNewClient += OnNewClient;
174 scene.EventManager.OnClientClosed += OnClientClosed; 173 scene.EventManager.OnClientClosed += OnClientClosed;
175 scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; 174 scene.EventManager.OnMakeRootAgent += OnMakeRootAgent;
176 scene.EventManager.OnMakeChildAgent += OnMakeChildAgent;
177 scene.EventManager.OnClientLogin += OnClientLogin; 175 scene.EventManager.OnClientLogin += OnClientLogin;
178 } 176 }
179 177
@@ -198,17 +196,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
198 196
199 public uint GetFriendPerms(UUID principalID, UUID friendID) 197 public uint GetFriendPerms(UUID principalID, UUID friendID)
200 { 198 {
201 if (!m_Friends.ContainsKey(principalID)) 199 FriendInfo[] friends = GetFriends(principalID);
202 return 0; 200 foreach (FriendInfo fi in friends)
203
204 UserFriendData data = m_Friends[principalID];
205
206 string searchFor = friendID.ToString();
207 foreach (FriendInfo fi in data.Friends)
208 { 201 {
209 if (fi.Friend == searchFor) 202 if (fi.Friend == friendID.ToString())
210 return (uint)fi.TheirFlags; 203 return (uint)fi.TheirFlags;
211 } 204 }
205
212 return 0; 206 return 0;
213 } 207 }
214 208
@@ -218,73 +212,59 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
218 client.OnApproveFriendRequest += OnApproveFriendRequest; 212 client.OnApproveFriendRequest += OnApproveFriendRequest;
219 client.OnDenyFriendRequest += OnDenyFriendRequest; 213 client.OnDenyFriendRequest += OnDenyFriendRequest;
220 client.OnTerminateFriendship += OnTerminateFriendship; 214 client.OnTerminateFriendship += OnTerminateFriendship;
221
222 client.OnGrantUserRights += OnGrantUserRights; 215 client.OnGrantUserRights += OnGrantUserRights;
223 216
224 lock (m_Friends) 217 // Asynchronously fetch the friends list or increment the refcount for the existing
225 { 218 // friends list
226 if (m_Friends.ContainsKey(client.AgentId)) 219 Util.FireAndForget(
220 delegate(object o)
227 { 221 {
228 m_Friends[client.AgentId].Refcount++; 222 lock (m_Friends)
229 return; 223 {
230 } 224 UserFriendData friendsData;
231 225 if (m_Friends.TryGetValue(client.AgentId, out friendsData))
232 UserFriendData newFriends = new UserFriendData(); 226 {
233 227 friendsData.Refcount++;
234 newFriends.PrincipalID = client.AgentId; 228 }
235 newFriends.Friends = m_FriendsService.GetFriends(client.AgentId); 229 else
236 newFriends.Refcount = 1; 230 {
237 newFriends.RegionID = UUID.Zero; 231 friendsData = new UserFriendData();
232 friendsData.PrincipalID = client.AgentId;
233 friendsData.Friends = FriendsService.GetFriends(client.AgentId);
234 friendsData.Refcount = 1;
238 235
239 m_Friends.Add(client.AgentId, newFriends); 236 m_Friends[client.AgentId] = friendsData;
240 } 237 }
241 238 }
239 }
240 );
242 } 241 }
243 242
244 private void OnClientClosed(UUID agentID, Scene scene) 243 private void OnClientClosed(UUID agentID, Scene scene)
245 { 244 {
246 ScenePresence sp = scene.GetScenePresence(agentID); 245 ScenePresence sp = scene.GetScenePresence(agentID);
247 if (sp != null && !sp.IsChildAgent) 246 if (sp != null && !sp.IsChildAgent)
247 {
248 // do this for root agents closing out 248 // do this for root agents closing out
249 StatusChange(agentID, false); 249 StatusChange(agentID, false);
250 }
250 251
251 lock (m_Friends) 252 lock (m_Friends)
252 if (m_Friends.ContainsKey(agentID)) 253 {
254 UserFriendData friendsData;
255 if (m_Friends.TryGetValue(agentID, out friendsData))
253 { 256 {
254 if (m_Friends[agentID].Refcount == 1) 257 friendsData.Refcount--;
258 if (friendsData.Refcount <= 0)
255 m_Friends.Remove(agentID); 259 m_Friends.Remove(agentID);
256 else
257 m_Friends[agentID].Refcount--;
258 } 260 }
259 }
260
261 private void OnMakeRootAgent(ScenePresence sp)
262 {
263 UUID agentID = sp.ControllingClient.AgentId;
264
265 if (m_Friends.ContainsKey(agentID))
266 {
267 // This is probably an overkill, but just
268 // to make sure we have the latest and greatest
269 // friends list -- always pull OnMakeRoot
270 m_Friends[agentID].Friends =
271 m_FriendsService.GetFriends(agentID);
272
273 m_Friends[agentID].RegionID =
274 sp.ControllingClient.Scene.RegionInfo.RegionID;
275 } 261 }
276 } 262 }
277 263
278 264 private void OnMakeRootAgent(ScenePresence sp)
279 private void OnMakeChildAgent(ScenePresence sp)
280 { 265 {
281 UUID agentID = sp.ControllingClient.AgentId; 266 UUID agentID = sp.ControllingClient.AgentId;
282 267 UpdateFriendsCache(agentID);
283 if (m_Friends.ContainsKey(agentID))
284 {
285 if (m_Friends[agentID].RegionID == sp.ControllingClient.Scene.RegionInfo.RegionID)
286 m_Friends[agentID].RegionID = UUID.Zero;
287 }
288 } 268 }
289 269
290 private void OnClientLogin(IClientAPI client) 270 private void OnClientLogin(IClientAPI client)
@@ -296,75 +276,56 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
296 276
297 // Register that we need to send the list of online friends to this user 277 // Register that we need to send the list of online friends to this user
298 lock (m_NeedsListOfFriends) 278 lock (m_NeedsListOfFriends)
299 if (!m_NeedsListOfFriends.Contains(agentID)) 279 m_NeedsListOfFriends.Add(agentID);
300 {
301 m_NeedsListOfFriends.Add(agentID);
302 }
303 } 280 }
304 281
305 public void SendFriendsOnlineIfNeeded(IClientAPI client) 282 public void SendFriendsOnlineIfNeeded(IClientAPI client)
306 { 283 {
307 UUID agentID = client.AgentId; 284 UUID agentID = client.AgentId;
308 if (m_NeedsListOfFriends.Contains(agentID)) 285
286 // Check if the online friends list is needed
287 lock (m_NeedsListOfFriends)
309 { 288 {
310 if (!m_Friends.ContainsKey(agentID)) 289 if (!m_NeedsListOfFriends.Remove(agentID))
311 {
312 m_log.DebugFormat("[FRIENDS MODULE]: agent {0} not found in local cache", agentID);
313 return; 290 return;
314 } 291 }
315
316 //
317 // Send the friends online
318 //
319 List<UUID> online = GetOnlineFriends(agentID);
320 if (online.Count > 0)
321 {
322 m_log.DebugFormat("[FRIENDS MODULE]: User {0} in region {1} has {2} friends online", client.AgentId, client.Scene.RegionInfo.RegionName, online.Count);
323 client.SendAgentOnline(online.ToArray());
324 }
325
326 //
327 // Send outstanding friendship offers
328 //
329 if (m_Friends.ContainsKey(agentID))
330 {
331 List<string> outstanding = new List<string>();
332 292
333 foreach (FriendInfo fi in m_Friends[agentID].Friends) 293 // Send the friends online
334 if (fi.TheirFlags == -1) 294 List<UUID> online = GetOnlineFriends(agentID);
335 outstanding.Add(fi.Friend); 295 if (online.Count > 0)
296 {
297 m_log.DebugFormat("[FRIENDS MODULE]: User {0} in region {1} has {2} friends online", client.AgentId, client.Scene.RegionInfo.RegionName, online.Count);
298 client.SendAgentOnline(online.ToArray());
299 }
336 300
337 GridInstantMessage im = new GridInstantMessage(client.Scene, UUID.Zero, "", agentID, (byte)InstantMessageDialog.FriendshipOffered, "Will you be my friend?", true, Vector3.Zero); 301 // Send outstanding friendship offers
338 foreach (string fid in outstanding) 302 List<string> outstanding = new List<string>();
339 { 303 FriendInfo[] friends = GetFriends(agentID);
340 try 304 foreach (FriendInfo fi in friends)
341 { 305 {
342 im.fromAgentID = new Guid(fid); 306 if (fi.TheirFlags == -1)
343 } 307 outstanding.Add(fi.Friend);
344 catch 308 }
345 {
346 continue;
347 }
348 309
349 UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, new UUID(im.fromAgentID)); 310 GridInstantMessage im = new GridInstantMessage(client.Scene, UUID.Zero, String.Empty, agentID, (byte)InstantMessageDialog.FriendshipOffered,
350 im.fromAgentName = account.FirstName + " " + account.LastName; 311 "Will you be my friend?", true, Vector3.Zero);
351 312
352 PresenceInfo presence = null; 313 foreach (string fid in outstanding)
353 PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid }); 314 {
354 if (presences != null && presences.Length > 0) 315 UUID fromAgentID;
355 presence = presences[0]; 316 if (!UUID.TryParse(fid, out fromAgentID))
356 if (presence != null) 317 continue;
357 im.offline = 0;
358 318
359 im.imSessionID = im.fromAgentID; 319 UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, fromAgentID);
320 PresenceInfo presence = PresenceService.GetAgent(fromAgentID);
360 321
361 // Finally 322 im.fromAgentID = fromAgentID.Guid;
362 LocalFriendshipOffered(agentID, im); 323 im.fromAgentName = account.FirstName + " " + account.LastName;
363 } 324 im.offline = (byte)((presence == null) ? 1 : 0);
364 } 325 im.imSessionID = im.fromAgentID;
365 326
366 lock (m_NeedsListOfFriends) 327 // Finally
367 m_NeedsListOfFriends.Remove(agentID); 328 LocalFriendshipOffered(agentID, im);
368 } 329 }
369 } 330 }
370 331
@@ -373,44 +334,46 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
373 List<string> friendList = new List<string>(); 334 List<string> friendList = new List<string>();
374 List<UUID> online = new List<UUID>(); 335 List<UUID> online = new List<UUID>();
375 336
376 foreach (FriendInfo fi in m_Friends[userID].Friends) 337 FriendInfo[] friends = GetFriends(userID);
338 foreach (FriendInfo fi in friends)
377 { 339 {
378 if (((fi.TheirFlags & 1) != 0) && (fi.TheirFlags != -1)) 340 if (((fi.TheirFlags & 1) != 0) && (fi.TheirFlags != -1))
379 friendList.Add(fi.Friend); 341 friendList.Add(fi.Friend);
380 } 342 }
381 343
382 if (friendList.Count == 0) 344 if (friendList.Count > 0)
383 // no friends whatsoever 345 {
384 return online; 346 PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray());
385 347 foreach (PresenceInfo pi in presence)
386 PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); 348 {
387 349 UUID presenceID;
388 foreach (PresenceInfo pi in presence) 350 if (UUID.TryParse(pi.UserID, out presenceID))
389 online.Add(new UUID(pi.UserID)); 351 online.Add(presenceID);
390 //m_log.DebugFormat("[XXX] {0} friend online {1}", userID, pi.UserID); 352 }
353 }
391 354
392 return online; 355 return online;
393 } 356 }
394 357
395 // 358 /// <summary>
396 // Find the client for a ID 359 /// Find the client for a ID
397 // 360 /// </summary>
398 public IClientAPI LocateClientObject(UUID agentID) 361 public IClientAPI LocateClientObject(UUID agentID)
399 { 362 {
400 Scene scene = GetClientScene(agentID); 363 Scene scene = GetClientScene(agentID);
401 if (scene == null) 364 if (scene != null)
402 return null; 365 {
403 366 ScenePresence presence = scene.GetScenePresence(agentID);
404 ScenePresence presence = scene.GetScenePresence(agentID); 367 if (presence != null)
405 if (presence == null) 368 return presence.ControllingClient;
406 return null; 369 }
407 370
408 return presence.ControllingClient; 371 return null;
409 } 372 }
410 373
411 // 374 /// <summary>
412 // Find the scene for an agent 375 /// Find the scene for an agent
413 // 376 /// </summary>
414 private Scene GetClientScene(UUID agentId) 377 private Scene GetClientScene(UUID agentId)
415 { 378 {
416 lock (m_Scenes) 379 lock (m_Scenes)
@@ -418,13 +381,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
418 foreach (Scene scene in m_Scenes) 381 foreach (Scene scene in m_Scenes)
419 { 382 {
420 ScenePresence presence = scene.GetScenePresence(agentId); 383 ScenePresence presence = scene.GetScenePresence(agentId);
421 if (presence != null) 384 if (presence != null && !presence.IsChildAgent)
422 { 385 return scene;
423 if (!presence.IsChildAgent)
424 return scene;
425 }
426 } 386 }
427 } 387 }
388
428 return null; 389 return null;
429 } 390 }
430 391
@@ -435,35 +396,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
435 /// <param name="online"></param> 396 /// <param name="online"></param>
436 private void StatusChange(UUID agentID, bool online) 397 private void StatusChange(UUID agentID, bool online)
437 { 398 {
438 //m_log.DebugFormat("[FRIENDS]: StatusChange {0}", online); 399 FriendInfo[] friends = GetFriends(agentID);
439 if (m_Friends.ContainsKey(agentID)) 400 if (friends.Length > 0)
440 { 401 {
441 //m_log.DebugFormat("[FRIENDS]: # of friends: {0}", m_Friends[agentID].Friends.Length);
442 List<FriendInfo> friendList = new List<FriendInfo>(); 402 List<FriendInfo> friendList = new List<FriendInfo>();
443 foreach (FriendInfo fi in m_Friends[agentID].Friends) 403 foreach (FriendInfo fi in friends)
444 { 404 {
445 if (((fi.MyFlags & 1) != 0) && (fi.TheirFlags != -1)) 405 if (((fi.MyFlags & 1) != 0) && (fi.TheirFlags != -1))
446 friendList.Add(fi); 406 friendList.Add(fi);
447 } 407 }
448 408
449 Util.FireAndForget(delegate 409 Util.FireAndForget(
450 { 410 delegate
451 foreach (FriendInfo fi in friendList)
452 { 411 {
453 //m_log.DebugFormat("[FRIENDS]: Notifying {0}", fi.PrincipalID); 412 foreach (FriendInfo fi in friendList)
454 // Notify about this user status 413 {
455 StatusNotify(fi, agentID, online); 414 //m_log.DebugFormat("[FRIENDS]: Notifying {0}", fi.PrincipalID);
415 // Notify about this user status
416 StatusNotify(fi, agentID, online);
417 }
456 } 418 }
457 }); 419 );
458 } 420 }
459 else
460 m_log.WarnFormat("[FRIENDS]: {0} not found in cache", agentID);
461 } 421 }
462 422
463 private void StatusNotify(FriendInfo friend, UUID userID, bool online) 423 private void StatusNotify(FriendInfo friend, UUID userID, bool online)
464 { 424 {
465 UUID friendID = UUID.Zero; 425 UUID friendID;
466
467 if (UUID.TryParse(friend.Friend, out friendID)) 426 if (UUID.TryParse(friend.Friend, out friendID))
468 { 427 {
469 // Try local 428 // Try local
@@ -471,35 +430,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
471 return; 430 return;
472 431
473 // The friend is not here [as root]. Let's forward. 432 // The friend is not here [as root]. Let's forward.
474 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); 433 PresenceInfo friendSession = PresenceService.GetAgent(friendID);
475 if (friendSessions != null && friendSessions.Length > 0) 434 if (friendSession != null && friendSession.RegionID != UUID.Zero) // let's guard against sessions-gone-bad with the RegionID check
476 { 435 {
477 PresenceInfo friendSession = null; 436 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
478 foreach (PresenceInfo pinfo in friendSessions) 437 //m_log.DebugFormat("[FRIENDS]: Remote Notify to region {0}", region.RegionName);
479 if (pinfo.RegionID != UUID.Zero) // let's guard against sessions-gone-bad 438 m_FriendsSimConnector.StatusNotify(region, userID, friendID, online);
480 {
481 friendSession = pinfo;
482 break;
483 }
484
485 if (friendSession != null)
486 {
487 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
488 //m_log.DebugFormat("[FRIENDS]: Remote Notify to region {0}", region.RegionName);
489 m_FriendsSimConnector.StatusNotify(region, userID, friendID, online);
490 }
491 } 439 }
492
493 // Friend is not online. Ignore.
494 } 440 }
495 else 441 else
442 {
496 m_log.WarnFormat("[FRIENDS]: Error parsing friend ID {0}", friend.Friend); 443 m_log.WarnFormat("[FRIENDS]: Error parsing friend ID {0}", friend.Friend);
444 }
497 } 445 }
498 446
499 private void OnInstantMessage(IClientAPI client, GridInstantMessage im) 447 private void OnInstantMessage(IClientAPI client, GridInstantMessage im)
500 { 448 {
501 if (im.dialog == (byte)OpenMetaverse.InstantMessageDialog.FriendshipOffered) 449 if ((InstantMessageDialog)im.dialog == InstantMessageDialog.FriendshipOffered)
502 { 450 {
503 // we got a friendship offer 451 // we got a friendship offer
504 UUID principalID = new UUID(im.fromAgentID); 452 UUID principalID = new UUID(im.fromAgentID);
505 UUID friendID = new UUID(im.toAgentID); 453 UUID friendID = new UUID(im.toAgentID);
@@ -529,15 +477,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
529 return; 477 return;
530 478
531 // The prospective friend is not here [as root]. Let's forward. 479 // The prospective friend is not here [as root]. Let's forward.
532 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); 480 PresenceInfo friendSession = PresenceService.GetAgent(friendID);
533 if (friendSessions != null && friendSessions.Length > 0) 481 if (friendSession != null)
534 { 482 {
535 PresenceInfo friendSession = friendSessions[0]; 483 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
536 if (friendSession != null) 484 m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message);
537 {
538 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
539 m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message);
540 }
541 } 485 }
542 // If the prospective friend is not online, he'll get the message upon login. 486 // If the prospective friend is not online, he'll get the message upon login.
543 } 487 }
@@ -548,9 +492,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
548 492
549 FriendsService.StoreFriend(agentID, friendID.ToString(), 1); 493 FriendsService.StoreFriend(agentID, friendID.ToString(), 1);
550 FriendsService.StoreFriend(friendID, agentID.ToString(), 1); 494 FriendsService.StoreFriend(friendID, agentID.ToString(), 1);
551 // update the local cache
552 m_Friends[agentID].Friends = FriendsService.GetFriends(agentID);
553 495
496 // Update the local cache
497 UpdateFriendsCache(agentID);
554 498
555 // 499 //
556 // Notify the friend 500 // Notify the friend
@@ -564,16 +508,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
564 } 508 }
565 509
566 // The friend is not here 510 // The friend is not here
567 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); 511 PresenceInfo friendSession = PresenceService.GetAgent(friendID);
568 if (friendSessions != null && friendSessions.Length > 0) 512 if (friendSession != null)
569 { 513 {
570 PresenceInfo friendSession = friendSessions[0]; 514 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
571 if (friendSession != null) 515 m_FriendsSimConnector.FriendshipApproved(region, agentID, client.Name, friendID);
572 { 516 client.SendAgentOnline(new UUID[] { friendID });
573 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
574 m_FriendsSimConnector.FriendshipApproved(region, agentID, client.Name, friendID);
575 client.SendAgentOnline(new UUID[] { friendID });
576 }
577 } 517 }
578 } 518 }
579 519
@@ -592,18 +532,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
592 if (LocalFriendshipDenied(agentID, client.Name, friendID)) 532 if (LocalFriendshipDenied(agentID, client.Name, friendID))
593 return; 533 return;
594 534
595 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); 535 PresenceInfo friendSession = PresenceService.GetAgent(friendID);
596 if (friendSessions != null && friendSessions.Length > 0) 536 if (friendSession != null)
597 { 537 {
598 PresenceInfo friendSession = friendSessions[0]; 538 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
599 if (friendSession != null) 539 if (region != null)
600 { 540 m_FriendsSimConnector.FriendshipDenied(region, agentID, client.Name, friendID);
601 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); 541 else
602 if (region != null) 542 m_log.WarnFormat("[FRIENDS]: Could not find region {0} in locating {1}", friendSession.RegionID, friendID);
603 m_FriendsSimConnector.FriendshipDenied(region, agentID, client.Name, friendID);
604 else
605 m_log.WarnFormat("[FRIENDS]: Could not find region {0} in locating {1}", friendSession.RegionID, friendID);
606 }
607 } 543 }
608 } 544 }
609 545
@@ -613,7 +549,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
613 FriendsService.Delete(exfriendID, agentID.ToString()); 549 FriendsService.Delete(exfriendID, agentID.ToString());
614 550
615 // Update local cache 551 // Update local cache
616 m_Friends[agentID].Friends = FriendsService.GetFriends(agentID); 552 UpdateFriendsCache(agentID);
617 553
618 client.SendTerminateFriend(exfriendID); 554 client.SendTerminateFriend(exfriendID);
619 555
@@ -625,30 +561,28 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
625 if (LocalFriendshipTerminated(exfriendID)) 561 if (LocalFriendshipTerminated(exfriendID))
626 return; 562 return;
627 563
628 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { exfriendID.ToString() }); 564 PresenceInfo friendSession = PresenceService.GetAgent(exfriendID);
629 if (friendSessions != null && friendSessions.Length > 0) 565 if (friendSession != null)
630 { 566 {
631 PresenceInfo friendSession = friendSessions[0]; 567 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
632 if (friendSession != null) 568 m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID);
633 {
634 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
635 m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID);
636 }
637 } 569 }
638 } 570 }
639 571
640 private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights) 572 private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights)
641 { 573 {
642 if (!m_Friends.ContainsKey(remoteClient.AgentId)) 574 FriendInfo[] friends = GetFriends(remoteClient.AgentId);
575 if (friends.Length == 0)
643 return; 576 return;
644 577
645 m_log.DebugFormat("[FRIENDS MODULE]: User {0} changing rights to {1} for friend {2}", requester, rights, target); 578 m_log.DebugFormat("[FRIENDS MODULE]: User {0} changing rights to {1} for friend {2}", requester, rights, target);
646 // Let's find the friend in this user's friend list 579 // Let's find the friend in this user's friend list
647 UserFriendData fd = m_Friends[remoteClient.AgentId];
648 FriendInfo friend = null; 580 FriendInfo friend = null;
649 foreach (FriendInfo fi in fd.Friends) 581 foreach (FriendInfo fi in friends)
582 {
650 if (fi.Friend == target.ToString()) 583 if (fi.Friend == target.ToString())
651 friend = fi; 584 friend = fi;
585 }
652 586
653 if (friend != null) // Found it 587 if (friend != null) // Found it
654 { 588 {
@@ -670,17 +604,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
670 if (LocalGrantRights(requester, target, myFlags, rights)) 604 if (LocalGrantRights(requester, target, myFlags, rights))
671 return; 605 return;
672 606
673 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { target.ToString() }); 607 PresenceInfo friendSession = PresenceService.GetAgent(target);
674 if (friendSessions != null && friendSessions.Length > 0) 608 if (friendSession != null)
675 { 609 {
676 PresenceInfo friendSession = friendSessions[0]; 610 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
677 if (friendSession != null) 611 // TODO: You might want to send the delta to save the lookup
678 { 612 // on the other end!!
679 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); 613 m_FriendsSimConnector.GrantRights(region, requester, target, myFlags, rights);
680 // TODO: You might want to send the delta to save the lookup
681 // on the other end!!
682 m_FriendsSimConnector.GrantRights(region, requester, target, myFlags, rights);
683 }
684 } 614 }
685 } 615 }
686 } 616 }
@@ -709,8 +639,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
709 GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID, 639 GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID,
710 (byte)OpenMetaverse.InstantMessageDialog.FriendshipAccepted, userID.ToString(), false, Vector3.Zero); 640 (byte)OpenMetaverse.InstantMessageDialog.FriendshipAccepted, userID.ToString(), false, Vector3.Zero);
711 friendClient.SendInstantMessage(im); 641 friendClient.SendInstantMessage(im);
712 // update the local cache 642
713 m_Friends[friendID].Friends = FriendsService.GetFriends(friendID); 643 // Update the local cache
644 UpdateFriendsCache(friendID);
645
714 // we're done 646 // we're done
715 return true; 647 return true;
716 } 648 }
@@ -724,7 +656,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
724 if (friendClient != null) 656 if (friendClient != null)
725 { 657 {
726 // the prospective friend in this sim as root agent 658 // the prospective friend in this sim as root agent
727
728 GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID, 659 GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID,
729 (byte)OpenMetaverse.InstantMessageDialog.FriendshipDeclined, userID.ToString(), false, Vector3.Zero); 660 (byte)OpenMetaverse.InstantMessageDialog.FriendshipDeclined, userID.ToString(), false, Vector3.Zero);
730 friendClient.SendInstantMessage(im); 661 friendClient.SendInstantMessage(im);
@@ -743,7 +674,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
743 // the friend in this sim as root agent 674 // the friend in this sim as root agent
744 friendClient.SendTerminateFriend(exfriendID); 675 friendClient.SendTerminateFriend(exfriendID);
745 // update local cache 676 // update local cache
746 m_Friends[exfriendID].Friends = FriendsService.GetFriends(exfriendID); 677 UpdateFriendsCache(exfriendID);
747 // we're done 678 // we're done
748 return true; 679 return true;
749 } 680 }
@@ -772,11 +703,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
772 703
773 } 704 }
774 705
775 // update local cache 706 // Update local cache
776 //m_Friends[friendID].Friends = m_FriendsService.GetFriends(friendID); 707 lock (m_Friends)
777 foreach (FriendInfo finfo in m_Friends[friendID].Friends) 708 {
778 if (finfo.Friend == userID.ToString()) 709 FriendInfo[] friends = GetFriends(friendID);
779 finfo.TheirFlags = rights; 710 foreach (FriendInfo finfo in friends)
711 {
712 if (finfo.Friend == userID.ToString())
713 finfo.TheirFlags = rights;
714 }
715 }
780 716
781 return true; 717 return true;
782 } 718 }
@@ -802,7 +738,30 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
802 738
803 return false; 739 return false;
804 } 740 }
741
805 #endregion 742 #endregion
806 743
744 private FriendInfo[] GetFriends(UUID agentID)
745 {
746 UserFriendData friendsData;
747
748 lock (m_Friends)
749 {
750 if (m_Friends.TryGetValue(agentID, out friendsData))
751 return friendsData.Friends;
752 }
753
754 return EMPTY_FRIENDS;
755 }
756
757 private void UpdateFriendsCache(UUID agentID)
758 {
759 lock (m_Friends)
760 {
761 UserFriendData friendsData;
762 if (m_Friends.TryGetValue(agentID, out friendsData))
763 friendsData.Friends = FriendsService.GetFriends(agentID);
764 }
765 }
807 } 766 }
808} 767}
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
index 4b30b0d..5ec64d5 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
@@ -58,13 +58,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
58 public void SubscribeToClientEvents(IClientAPI client) 58 public void SubscribeToClientEvents(IClientAPI client)
59 { 59 {
60 client.OnGodKickUser += KickUser; 60 client.OnGodKickUser += KickUser;
61 client.OnRequestGodlikePowers += RequestGodlikePowers; 61 client.OnRequestGodlikePowers += RequestGodlikePowers;
62 } 62 }
63 63
64 public void UnsubscribeFromClientEvents(IClientAPI client) 64 public void UnsubscribeFromClientEvents(IClientAPI client)
65 { 65 {
66 client.OnGodKickUser -= KickUser; 66 client.OnGodKickUser -= KickUser;
67 client.OnRequestGodlikePowers -= RequestGodlikePowers; 67 client.OnRequestGodlikePowers -= RequestGodlikePowers;
68 } 68 }
69 69
70 public void RequestGodlikePowers( 70 public void RequestGodlikePowers(
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index a49faec..a6894ff 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -138,8 +138,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
138 if (scene.Entities.ContainsKey(toAgentID) && 138 if (scene.Entities.ContainsKey(toAgentID) &&
139 scene.Entities[toAgentID] is ScenePresence) 139 scene.Entities[toAgentID] is ScenePresence)
140 { 140 {
141 // m_log.DebugFormat("[INSTANT MESSAGE]: Looking for {0} in {1}", toAgentID.ToString(), scene.RegionInfo.RegionName); 141// m_log.DebugFormat(
142 // Local message 142// "[INSTANT MESSAGE]: Looking for root agent {0} in {1}",
143// toAgentID.ToString(), scene.RegionInfo.RegionName);
144
143 ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; 145 ScenePresence user = (ScenePresence) scene.Entities[toAgentID];
144 if (!user.IsChildAgent) 146 if (!user.IsChildAgent)
145 { 147 {
@@ -495,9 +497,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
495 if (lookupAgent) 497 if (lookupAgent)
496 { 498 {
497 // Non-cached user agent lookup. 499 // Non-cached user agent lookup.
498 PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() }); 500 upd = PresenceService.GetAgent(toAgentID);
499 if (presences != null && presences.Length > 0)
500 upd = presences[0];
501 501
502 if (upd != null) 502 if (upd != null)
503 { 503 {
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index 52342ec..c1df827 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -179,14 +179,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
179 m_log.DebugFormat( 179 m_log.DebugFormat(
180 "[INVENTORY ARCHIVER]: Successfully loaded {0} assets with {1} failures", 180 "[INVENTORY ARCHIVER]: Successfully loaded {0} assets with {1} failures",
181 successfulAssetRestores, failedAssetRestores); 181 successfulAssetRestores, failedAssetRestores);
182 m_log.InfoFormat("[INVENTORY ARCHIVER]: Successfully loaded {0} items", successfulItemRestores); 182 m_log.InfoFormat("[INVENTORY ARCHIVER]: Successfully loaded {0} items", successfulItemRestores);
183 183
184 return loadedNodes; 184 return loadedNodes;
185 } 185 }
186 finally 186 finally
187 { 187 {
188 m_loadStream.Close(); 188 m_loadStream.Close();
189 } 189 }
190 } 190 }
191 191
192 public void Close() 192 public void Close()
@@ -201,7 +201,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
201 /// <param name="iarPath">The item archive path to replicate</param> 201 /// <param name="iarPath">The item archive path to replicate</param>
202 /// <param name="rootDestinationFolder">The root folder for the inventory load</param> 202 /// <param name="rootDestinationFolder">The root folder for the inventory load</param>
203 /// <param name="resolvedFolders"> 203 /// <param name="resolvedFolders">
204 /// The folders that we have resolved so far for a given archive path. 204 /// The folders that we have resolved so far for a given archive path.
205 /// This method will add more folders if necessary 205 /// This method will add more folders if necessary
206 /// </param> 206 /// </param>
207 /// <param name="loadedNodes"> 207 /// <param name="loadedNodes">
@@ -246,17 +246,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
246 /// The root folder for the inventory load 246 /// The root folder for the inventory load
247 /// </param> 247 /// </param>
248 /// <param name="resolvedFolders"> 248 /// <param name="resolvedFolders">
249 /// The folders that we have resolved so far for a given archive path. 249 /// The folders that we have resolved so far for a given archive path.
250 /// </param> 250 /// </param>
251 /// <returns> 251 /// <returns>
252 /// The folder in the user's inventory that matches best the archive path given. If no such folder was found 252 /// The folder in the user's inventory that matches best the archive path given. If no such folder was found
253 /// then the passed in root destination folder is returned. 253 /// then the passed in root destination folder is returned.
254 /// </returns> 254 /// </returns>
255 protected InventoryFolderBase ResolveDestinationFolder( 255 protected InventoryFolderBase ResolveDestinationFolder(
256 InventoryFolderBase rootDestFolder, 256 InventoryFolderBase rootDestFolder,
257 ref string archivePath, 257 ref string archivePath,
258 Dictionary <string, InventoryFolderBase> resolvedFolders) 258 Dictionary <string, InventoryFolderBase> resolvedFolders)
259 { 259 {
260// string originalArchivePath = archivePath; 260// string originalArchivePath = archivePath;
261 261
262 while (archivePath.Length > 0) 262 while (archivePath.Length > 0)
@@ -370,7 +370,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
370 370
371 if (0 == i) 371 if (0 == i)
372 loadedNodes.Add(destFolder); 372 loadedNodes.Add(destFolder);
373 } 373 }
374 } 374 }
375 375
376 /// <summary> 376 /// <summary>
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index 9908018..bae5a7a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -119,7 +119,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
119 protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) 119 protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids)
120 { 120 {
121 Exception reportedException = null; 121 Exception reportedException = null;
122 bool succeeded = true; 122 bool succeeded = true;
123 123
124 try 124 try
125 { 125 {
@@ -136,7 +136,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
136 finally 136 finally
137 { 137 {
138 m_saveStream.Close(); 138 m_saveStream.Close();
139 } 139 }
140 140
141 m_module.TriggerInventoryArchiveSaved( 141 m_module.TriggerInventoryArchiveSaved(
142 m_id, succeeded, m_userInfo, m_invPath, m_saveStream, reportedException); 142 m_id, succeeded, m_userInfo, m_invPath, m_saveStream, reportedException);
@@ -270,7 +270,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
270 { 270 {
271 // We couldn't find the path indicated 271 // We couldn't find the path indicated
272 string errorMessage = string.Format("Aborted save. Could not find inventory path {0}", m_invPath); 272 string errorMessage = string.Format("Aborted save. Could not find inventory path {0}", m_invPath);
273 Exception e = new InventoryArchiverException(errorMessage); 273 Exception e = new InventoryArchiverException(errorMessage);
274 m_module.TriggerInventoryArchiveSaved(m_id, false, m_userInfo, m_invPath, m_saveStream, e); 274 m_module.TriggerInventoryArchiveSaved(m_id, false, m_userInfo, m_invPath, m_saveStream, e);
275 throw e; 275 throw e;
276 } 276 }
@@ -283,7 +283,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
283 "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}", 283 "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}",
284 inventoryFolder.Name, 284 inventoryFolder.Name,
285 inventoryFolder.ID, 285 inventoryFolder.ID,
286 m_invPath == String.Empty ? InventoryFolderImpl.PATH_DELIMITER : m_invPath ); 286 m_invPath == String.Empty ? InventoryFolderImpl.PATH_DELIMITER : m_invPath);
287 287
288 //recurse through all dirs getting dirs and files 288 //recurse through all dirs getting dirs and files
289 SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !saveFolderContentsOnly); 289 SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !saveFolderContentsOnly);
@@ -301,7 +301,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
301 //SaveUsers(); 301 //SaveUsers();
302 302
303 new AssetsRequest( 303 new AssetsRequest(
304 new AssetsArchiver(m_archiveWriter), m_assetUuids, m_scene.AssetService, ReceivedAllAssets).Execute(); 304 new AssetsArchiver(m_archiveWriter), m_assetUuids, m_scene.AssetService, ReceivedAllAssets).Execute();
305 } 305 }
306 catch (Exception) 306 catch (Exception)
307 { 307 {
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs
index e07e2ca..5fd1a7e 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs
@@ -33,7 +33,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
33 /// Signals an inventory archiving problem 33 /// Signals an inventory archiving problem
34 /// </summary> 34 /// </summary>
35 public class InventoryArchiverException : Exception 35 public class InventoryArchiverException : Exception
36 { 36 {
37 public InventoryArchiverException(string message) : base(message) {} 37 public InventoryArchiverException(string message) : base(message) {}
38 public InventoryArchiverException(string message, Exception e) : base(message, e) {} 38 public InventoryArchiverException(string message, Exception e) : base(message, e) {}
39 } 39 }
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index f03f2a1..2eaca49 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -91,12 +91,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
91 91
92 scene.AddCommand( 92 scene.AddCommand(
93 this, "load iar", 93 this, "load iar",
94 "load iar <first> <last> <inventory path> <password> [<IAR path>]", 94 "load iar <first> <last> <inventory path> <password> [<IAR path>]",
95 //"load iar [--merge] <first> <last> <inventory path> <password> [<IAR path>]", 95 //"load iar [--merge] <first> <last> <inventory path> <password> [<IAR path>]",
96 "Load user inventory archive (IAR).", 96 "Load user inventory archive (IAR).",
97 //"--merge is an option which merges the loaded IAR with existing inventory folders where possible, rather than always creating new ones" 97 //"--merge is an option which merges the loaded IAR with existing inventory folders where possible, rather than always creating new ones"
98 //+ "<first> is user's first name." + Environment.NewLine 98 //+ "<first> is user's first name." + Environment.NewLine
99 "<first> is user's first name." + Environment.NewLine 99 "<first> is user's first name." + Environment.NewLine
100 + "<last> is user's last name." + Environment.NewLine 100 + "<last> is user's last name." + Environment.NewLine
101 + "<inventory path> is the path inside the user's inventory where the IAR should be loaded." + Environment.NewLine 101 + "<inventory path> is the path inside the user's inventory where the IAR should be loaded." + Environment.NewLine
102 + "<password> is the user's password." + Environment.NewLine 102 + "<password> is the user's password." + Environment.NewLine
@@ -241,7 +241,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
241 if (CheckPresence(userInfo.PrincipalID)) 241 if (CheckPresence(userInfo.PrincipalID))
242 { 242 {
243 InventoryArchiveReadRequest request; 243 InventoryArchiveReadRequest request;
244 bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false); 244 bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false);
245 245
246 try 246 try
247 { 247 {
@@ -286,10 +286,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
286 if (CheckPresence(userInfo.PrincipalID)) 286 if (CheckPresence(userInfo.PrincipalID))
287 { 287 {
288 InventoryArchiveReadRequest request; 288 InventoryArchiveReadRequest request;
289 bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false); 289 bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false);
290 290
291 try 291 try
292 { 292 {
293 request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath, merge); 293 request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath, merge);
294 } 294 }
295 catch (EntryPointNotFoundException e) 295 catch (EntryPointNotFoundException e)
@@ -325,20 +325,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
325 protected void HandleLoadInvConsoleCommand(string module, string[] cmdparams) 325 protected void HandleLoadInvConsoleCommand(string module, string[] cmdparams)
326 { 326 {
327 try 327 try
328 { 328 {
329 m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME."); 329 m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME.");
330 330
331 Dictionary<string, object> options = new Dictionary<string, object>(); 331 Dictionary<string, object> options = new Dictionary<string, object>();
332 OptionSet optionSet = new OptionSet().Add("m|merge", delegate (string v) { options["merge"] = v != null; }); 332 OptionSet optionSet = new OptionSet().Add("m|merge", delegate (string v) { options["merge"] = v != null; });
333 333
334 List<string> mainParams = optionSet.Parse(cmdparams); 334 List<string> mainParams = optionSet.Parse(cmdparams);
335 335
336 if (mainParams.Count < 6) 336 if (mainParams.Count < 6)
337 { 337 {
338 m_log.Error( 338 m_log.Error(
339 "[INVENTORY ARCHIVER]: usage is load iar [--merge] <first name> <last name> <inventory path> <user password> [<load file path>]"); 339 "[INVENTORY ARCHIVER]: usage is load iar [--merge] <first name> <last name> <inventory path> <user password> [<load file path>]");
340 return; 340 return;
341 } 341 }
342 342
343 string firstName = mainParams[2]; 343 string firstName = mainParams[2];
344 string lastName = mainParams[3]; 344 string lastName = mainParams[3];
@@ -353,7 +353,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
353 if (DearchiveInventory(firstName, lastName, invPath, pass, loadPath, options)) 353 if (DearchiveInventory(firstName, lastName, invPath, pass, loadPath, options))
354 m_log.InfoFormat( 354 m_log.InfoFormat(
355 "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}", 355 "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}",
356 loadPath, firstName, lastName); 356 loadPath, firstName, lastName);
357 } 357 }
358 catch (InventoryArchiverException e) 358 catch (InventoryArchiverException e)
359 { 359 {
@@ -390,7 +390,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
390 "[INVENTORY ARCHIVER]: Saving archive {0} using inventory path {1} for {2} {3}", 390 "[INVENTORY ARCHIVER]: Saving archive {0} using inventory path {1} for {2} {3}",
391 savePath, invPath, firstName, lastName); 391 savePath, invPath, firstName, lastName);
392 392
393 ArchiveInventory(id, firstName, lastName, invPath, pass, savePath, new Dictionary<string, object>()); 393 ArchiveInventory(id, firstName, lastName, invPath, pass, savePath, new Dictionary<string, object>());
394 } 394 }
395 catch (InventoryArchiverException e) 395 catch (InventoryArchiverException e)
396 { 396 {
@@ -398,7 +398,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
398 } 398 }
399 399
400 lock (m_pendingConsoleSaves) 400 lock (m_pendingConsoleSaves)
401 m_pendingConsoleSaves.Add(id); 401 m_pendingConsoleSaves.Add(id);
402 } 402 }
403 403
404 private void SaveInvConsoleCommandCompleted( 404 private void SaveInvConsoleCommandCompleted(
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index d66a1d0..938886b2 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -58,18 +58,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
58 /// <summary> 58 /// <summary>
59 /// Stream of data representing a common IAR that can be reused in load tests. 59 /// Stream of data representing a common IAR that can be reused in load tests.
60 /// </summary> 60 /// </summary>
61 protected MemoryStream m_iarStream; 61 protected MemoryStream m_iarStream;
62 62
63 protected UserAccount m_ua1 63 protected UserAccount m_ua1
64 = new UserAccount { 64 = new UserAccount {
65 PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000555"), 65 PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000555"),
66 FirstName = "Mr", 66 FirstName = "Mr",
67 LastName = "Tiddles" }; 67 LastName = "Tiddles" };
68 protected UserAccount m_ua2 68 protected UserAccount m_ua2
69 = new UserAccount { 69 = new UserAccount {
70 PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000666"), 70 PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000666"),
71 FirstName = "Lord", 71 FirstName = "Lord",
72 LastName = "Lucan" }; 72 LastName = "Lucan" };
73 string m_item1Name = "b.lsl"; 73 string m_item1Name = "b.lsl";
74 74
75 private void SaveCompleted( 75 private void SaveCompleted(
@@ -86,7 +86,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
86 } 86 }
87 87
88 protected void ConstructDefaultIarForTestLoad() 88 protected void ConstructDefaultIarForTestLoad()
89 { 89 {
90 string archiveItemName = InventoryArchiveWriteRequest.CreateArchiveItemName(m_item1Name, UUID.Random()); 90 string archiveItemName = InventoryArchiveWriteRequest.CreateArchiveItemName(m_item1Name, UUID.Random());
91 91
92 MemoryStream archiveWriteStream = new MemoryStream(); 92 MemoryStream archiveWriteStream = new MemoryStream();
@@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
104 string item1FileName 104 string item1FileName
105 = string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, archiveItemName); 105 = string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, archiveItemName);
106 tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); 106 tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1));
107 tar.Close(); 107 tar.Close();
108 m_iarStream = new MemoryStream(archiveWriteStream.ToArray()); 108 m_iarStream = new MemoryStream(archiveWriteStream.ToArray());
109 } 109 }
110 110
@@ -341,7 +341,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
341// Assert.That(gotObject2File, Is.True, "No object2 file in archive"); 341// Assert.That(gotObject2File, Is.True, "No object2 file in archive");
342 342
343 // TODO: Test presence of more files and contents of files. 343 // TODO: Test presence of more files and contents of files.
344 } 344 }
345 345
346 /// <summary> 346 /// <summary>
347 /// Test that things work when the load path specified starts with a slash 347 /// Test that things work when the load path specified starts with a slash
@@ -349,22 +349,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
349 [Test] 349 [Test]
350 public void TestLoadIarPathStartsWithSlash() 350 public void TestLoadIarPathStartsWithSlash()
351 { 351 {
352 TestHelper.InMethod(); 352 TestHelper.InMethod();
353// log4net.Config.XmlConfigurator.Configure(); 353// log4net.Config.XmlConfigurator.Configure();
354 354
355 SerialiserModule serialiserModule = new SerialiserModule(); 355 SerialiserModule serialiserModule = new SerialiserModule();
356 InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); 356 InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
357 Scene scene = SceneSetupHelpers.SetupScene("inventory"); 357 Scene scene = SceneSetupHelpers.SetupScene("inventory");
358 SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); 358 SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
359 359
360 UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "password"); 360 UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "password");
361 archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/Objects", "password", m_iarStream); 361 archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/Objects", "password", m_iarStream);
362 362
363 InventoryItemBase foundItem1 363 InventoryItemBase foundItem1
364 = InventoryArchiveUtils.FindItemByPath( 364 = InventoryArchiveUtils.FindItemByPath(
365 scene.InventoryService, m_ua1.PrincipalID, "/Objects/" + m_item1Name); 365 scene.InventoryService, m_ua1.PrincipalID, "/Objects/" + m_item1Name);
366 366
367 Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1 in TestLoadIarFolderStartsWithSlash()"); 367 Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1 in TestLoadIarFolderStartsWithSlash()");
368 } 368 }
369 369
370 /// <summary> 370 /// <summary>
@@ -376,7 +376,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
376 [Test] 376 [Test]
377 public void TestLoadIarV0_1ExistingUsers() 377 public void TestLoadIarV0_1ExistingUsers()
378 { 378 {
379 TestHelper.InMethod(); 379 TestHelper.InMethod();
380 //log4net.Config.XmlConfigurator.Configure(); 380 //log4net.Config.XmlConfigurator.Configure();
381 381
382 SerialiserModule serialiserModule = new SerialiserModule(); 382 SerialiserModule serialiserModule = new SerialiserModule();
@@ -386,9 +386,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
386 Scene scene = SceneSetupHelpers.SetupScene("inventory"); 386 Scene scene = SceneSetupHelpers.SetupScene("inventory");
387 387
388 SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); 388 SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
389 389
390 UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "meowfood"); 390 UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "meowfood");
391 UserProfileTestUtils.CreateUserWithInventory(scene, m_ua2, "hampshire"); 391 UserProfileTestUtils.CreateUserWithInventory(scene, m_ua2, "hampshire");
392 392
393 archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/", "meowfood", m_iarStream); 393 archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/", "meowfood", m_iarStream);
394 394
@@ -450,7 +450,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
450 string userFirstName = "Jock"; 450 string userFirstName = "Jock";
451 string userLastName = "Stirrup"; 451 string userLastName = "Stirrup";
452 UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020"); 452 UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
453 UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, "meowfood"); 453 UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, "meowfood");
454 454
455 // Create asset 455 // Create asset
456 SceneObjectGroup object1; 456 SceneObjectGroup object1;
@@ -524,7 +524,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
524 [Test] 524 [Test]
525 public void TestLoadIarV0_1AbsentUsers() 525 public void TestLoadIarV0_1AbsentUsers()
526 { 526 {
527 TestHelper.InMethod(); 527 TestHelper.InMethod();
528 //log4net.Config.XmlConfigurator.Configure(); 528 //log4net.Config.XmlConfigurator.Configure();
529 529
530 string userFirstName = "Charlie"; 530 string userFirstName = "Charlie";
@@ -562,7 +562,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
562 Scene scene = SceneSetupHelpers.SetupScene("inventory"); 562 Scene scene = SceneSetupHelpers.SetupScene("inventory");
563 563
564 SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); 564 SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
565 UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userUuid, "meowfood"); 565 UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userUuid, "meowfood");
566 566
567 archiverModule.DearchiveInventory(userFirstName, userLastName, "/", "meowfood", archiveReadStream); 567 archiverModule.DearchiveInventory(userFirstName, userLastName, "/", "meowfood", archiveReadStream);
568 568
@@ -680,8 +680,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
680 string folder2aArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2aName, UUID.Random()); 680 string folder2aArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2aName, UUID.Random());
681 string folder2bArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2bName, UUID.Random()); 681 string folder2bArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2bName, UUID.Random());
682 682
683 string iarPath1 = string.Join("", new string[] { folder1ArchiveName, folder2aArchiveName }); 683 string iarPath1 = string.Join("", new string[] { folder1ArchiveName, folder2aArchiveName });
684 string iarPath2 = string.Join("", new string[] { folder1ArchiveName, folder2bArchiveName }); 684 string iarPath2 = string.Join("", new string[] { folder1ArchiveName, folder2bArchiveName });
685 685
686 { 686 {
687 // Test replication of path1 687 // Test replication of path1
@@ -694,7 +694,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
694 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1Name); 694 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1Name);
695 Assert.That(folder1Candidates.Count, Is.EqualTo(1)); 695 Assert.That(folder1Candidates.Count, Is.EqualTo(1));
696 696
697 InventoryFolderBase folder1 = folder1Candidates[0]; 697 InventoryFolderBase folder1 = folder1Candidates[0];
698 List<InventoryFolderBase> folder2aCandidates 698 List<InventoryFolderBase> folder2aCandidates
699 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); 699 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName);
700 Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); 700 Assert.That(folder2aCandidates.Count, Is.EqualTo(1));
@@ -715,11 +715,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
715 715
716 List<InventoryFolderBase> folder2aCandidates 716 List<InventoryFolderBase> folder2aCandidates
717 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); 717 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName);
718 Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); 718 Assert.That(folder2aCandidates.Count, Is.EqualTo(1));
719 719
720 List<InventoryFolderBase> folder2bCandidates 720 List<InventoryFolderBase> folder2bCandidates
721 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2bName); 721 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2bName);
722 Assert.That(folder2bCandidates.Count, Is.EqualTo(1)); 722 Assert.That(folder2bCandidates.Count, Is.EqualTo(1));
723 } 723 }
724 } 724 }
725 725
@@ -741,7 +741,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
741 741
742 InventoryFolderBase folder1 742 InventoryFolderBase folder1
743 = UserInventoryTestUtils.CreateInventoryFolder( 743 = UserInventoryTestUtils.CreateInventoryFolder(
744 scene.InventoryService, ua1.PrincipalID, folder1ExistingName); 744 scene.InventoryService, ua1.PrincipalID, folder1ExistingName);
745 745
746 string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); 746 string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random());
747 string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); 747 string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random());
@@ -772,7 +772,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
772 List<InventoryFolderBase> folder2PostCandidates 772 List<InventoryFolderBase> folder2PostCandidates
773 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); 773 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b");
774 Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); 774 Assert.That(folder2PostCandidates.Count, Is.EqualTo(1));
775 } 775 }
776 776
777 /// <summary> 777 /// <summary>
778 /// Test replication of a partly existing archive path to the user's inventory. This should create 778 /// Test replication of a partly existing archive path to the user's inventory. This should create
@@ -792,7 +792,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
792 792
793 InventoryFolderBase folder1 793 InventoryFolderBase folder1
794 = UserInventoryTestUtils.CreateInventoryFolder( 794 = UserInventoryTestUtils.CreateInventoryFolder(
795 scene.InventoryService, ua1.PrincipalID, folder1ExistingName); 795 scene.InventoryService, ua1.PrincipalID, folder1ExistingName);
796 796
797 string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); 797 string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random());
798 string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); 798 string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random());
@@ -812,6 +812,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
812 List<InventoryFolderBase> folder2PostCandidates 812 List<InventoryFolderBase> folder2PostCandidates
813 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1PostCandidates[0], "b"); 813 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1PostCandidates[0], "b");
814 Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); 814 Assert.That(folder2PostCandidates.Count, Is.EqualTo(1));
815 } 815 }
816 } 816 }
817} \ No newline at end of file 817} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs
index 35b70de..05fe3ee 100644
--- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs
@@ -138,7 +138,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
138 { 138 {
139 if (!queues.ContainsKey(agentId)) 139 if (!queues.ContainsKey(agentId))
140 { 140 {
141 /* 141 /*
142 m_log.DebugFormat( 142 m_log.DebugFormat(
143 "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", 143 "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}",
144 agentId, m_scene.RegionInfo.RegionName); 144 agentId, m_scene.RegionInfo.RegionName);
@@ -701,7 +701,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
701 701
702 public void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID) 702 public void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID)
703 { 703 {
704 OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesMessage); 704 OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesMessage);
705 Enqueue(item, avatarID); 705 Enqueue(item, avatarID);
706 } 706 }
707 707
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs
index b62df18..0d7d16a 100644
--- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs
+++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs
@@ -55,7 +55,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
55 } 55 }
56 56
57// private static byte[] uintToByteArray(uint uIntValue) 57// private static byte[] uintToByteArray(uint uIntValue)
58// { 58// {
59// byte[] result = new byte[4]; 59// byte[] result = new byte[4];
60// Utils.UIntToBytesBig(uIntValue, result, 0); 60// Utils.UIntToBytesBig(uIntValue, result, 0);
61// return result; 61// return result;
@@ -386,14 +386,14 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
386 return placesReply; 386 return placesReply;
387 } 387 }
388 388
389 public static OSD ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage) 389 public static OSD ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage)
390 { 390 {
391 OSDMap message = new OSDMap(); 391 OSDMap message = new OSDMap();
392 message.Add("message", OSD.FromString("ParcelProperties")); 392 message.Add("message", OSD.FromString("ParcelProperties"));
393 OSD message_body = parcelPropertiesMessage.Serialize(); 393 OSD message_body = parcelPropertiesMessage.Serialize();
394 message.Add("body", message_body); 394 message.Add("body", message_body);
395 return message; 395 return message;
396 } 396 }
397 397
398 } 398 }
399} 399}
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 37f6ea0..a2ba498 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -629,7 +629,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
629 rootPart.Name = item.Name; 629 rootPart.Name = item.Name;
630 rootPart.Description = item.Description; 630 rootPart.Description = item.Description;
631 631
632 List<SceneObjectPart> partList = null; 632 List<SceneObjectPart> partList = null;
633 lock (group.Children) 633 lock (group.Children)
634 partList = new List<SceneObjectPart>(group.Children.Values); 634 partList = new List<SceneObjectPart>(group.Children.Values);
635 635
diff --git a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs
index b75a700..a75ff62 100644
--- a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs
@@ -49,8 +49,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
49 protected bool m_collectStats; 49 protected bool m_collectStats;
50 protected Scene m_scene = null; 50 protected Scene m_scene = null;
51 51
52 public string Name { get { return "Binary Statistics Logging Module"; } } 52 public string Name { get { return "Binary Statistics Logging Module"; } }
53 public Type ReplaceableInterface { get { return null; } } 53 public Type ReplaceableInterface { get { return null; } }
54 54
55 public void Initialise(IConfigSource source) 55 public void Initialise(IConfigSource source)
56 { 56 {
@@ -79,7 +79,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
79 catch 79 catch
80 { 80 {
81 // if it doesn't work, we don't collect anything 81 // if it doesn't work, we don't collect anything
82 } 82 }
83 } 83 }
84 84
85 public void AddRegion(Scene scene) 85 public void AddRegion(Scene scene)
@@ -94,12 +94,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
94 public void RegionLoaded(Scene scene) 94 public void RegionLoaded(Scene scene)
95 { 95 {
96 if (m_collectStats) 96 if (m_collectStats)
97 m_scene.StatsReporter.OnSendStatsResult += LogSimStats; 97 m_scene.StatsReporter.OnSendStatsResult += LogSimStats;
98 } 98 }
99 99
100 public void Close() 100 public void Close()
101 { 101 {
102 } 102 }
103 103
104 public class StatLogger 104 public class StatLogger
105 { 105 {
@@ -164,6 +164,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
164 } 164 }
165 } 165 }
166 return; 166 return;
167 } 167 }
168 } 168 }
169} 169}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs
index 235914a..2f96bcb 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs
@@ -115,6 +115,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Hypergrid
115 m_HypergridHandler = new GatekeeperServiceInConnector(m_Config, MainServer.Instance, simService); 115 m_HypergridHandler = new GatekeeperServiceInConnector(m_Config, MainServer.Instance, simService);
116 116
117 new UserAgentServerConnector(m_Config, MainServer.Instance); 117 new UserAgentServerConnector(m_Config, MainServer.Instance);
118 new HeloServiceInConnector(m_Config, MainServer.Instance, "HeloService");
118 } 119 }
119 scene.RegisterModuleInterface<IGatekeeperService>(m_HypergridHandler.GateKeeper); 120 scene.RegisterModuleInterface<IGatekeeperService>(m_HypergridHandler.GateKeeper);
120 } 121 }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
index 5b4fecb..39410b5 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -37,6 +37,7 @@ using OpenSim.Region.Framework.Interfaces;
37using OpenSim.Region.Framework.Scenes; 37using OpenSim.Region.Framework.Scenes;
38using OpenSim.Services.Interfaces; 38using OpenSim.Services.Interfaces;
39using OpenSim.Services.Connectors; 39using OpenSim.Services.Connectors;
40using OpenSim.Services.Connectors.SimianGrid;
40using OpenMetaverse; 41using OpenMetaverse;
41 42
42namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory 43namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
@@ -538,12 +539,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
538 } 539 }
539 else 540 else
540 { 541 {
541 // We're instantiating this class explicitly, but this won't 542 // Still not as flexible as I would like this to be,
542 // work in general, because the remote grid may be running 543 // but good enough for now
543 // an inventory server that has a different protocol. 544 string connectorType = new HeloServicesConnector(url).Helo();
544 // Eventually we will want a piece of protocol asking 545 m_log.DebugFormat("[HG INVENTORY SERVICE]: HELO returned {0}", connectorType);
545 // the remote server about its kind. Definitely cool thing to do! 546 if (connectorType == "opensim-simian")
546 connector = new RemoteXInventoryServicesConnector(url); 547 connector = new SimianInventoryServiceConnector(url);
548 else
549 connector = new RemoteXInventoryServicesConnector(url);
547 m_connectors.Add(url, connector); 550 m_connectors.Add(url, connector);
548 } 551 }
549 } 552 }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs
index 4e2f602..2322d7c 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs
@@ -185,7 +185,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
185 return folders[type]; 185 return folders[type];
186 } 186 }
187 187
188 m_log.WarnFormat("[INVENTORY CACHE]: Could not find folder for system type {0} for {1}", type, userID); 188 m_log.WarnFormat("[INVENTORY CACHE]: Could not find folder for system type {0} for {1}", type, userID);
189 189
190 return null; 190 return null;
191 } 191 }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
index cbd9e05..ab6be50 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
@@ -220,7 +220,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
220 { 220 {
221// m_log.DebugFormat( 221// m_log.DebugFormat(
222// "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}", 222// "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}",
223// item.Name, item.Owner, item.Folder); 223// item.Name, item.Owner, item.Folder);
224 224
225 return m_InventoryService.AddItem(item); 225 return m_InventoryService.AddItem(item);
226 } 226 }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
index 4ab6947..34205e3 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
@@ -227,7 +227,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
227 public bool AddItem(InventoryItemBase item) 227 public bool AddItem(InventoryItemBase item)
228 { 228 {
229 if (item == null) 229 if (item == null)
230 return false; 230 return false;
231 231
232 return m_RemoteConnector.AddItem(item); 232 return m_RemoteConnector.AddItem(item);
233 } 233 }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs
index fb2edb9..64788db 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs
@@ -36,6 +36,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
36{ 36{
37 public class UserAccountCache 37 public class UserAccountCache
38 { 38 {
39 private const double CACHE_EXPIRATION_SECONDS = 120.0;
40
39 private static readonly ILog m_log = 41 private static readonly ILog m_log =
40 LogManager.GetLogger( 42 LogManager.GetLogger(
41 MethodBase.GetCurrentMethod().DeclaringType); 43 MethodBase.GetCurrentMethod().DeclaringType);
@@ -51,9 +53,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
51 public void Cache(UUID userID, UserAccount account) 53 public void Cache(UUID userID, UserAccount account)
52 { 54 {
53 // Cache even null accounts 55 // Cache even null accounts
54 m_UUIDCache.AddOrUpdate(userID, account, DateTime.Now + TimeSpan.FromMinutes(2.0d)); 56 m_UUIDCache.AddOrUpdate(userID, account, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
55 if (account != null) 57 if (account != null)
56 m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, DateTime.Now + TimeSpan.FromMinutes(2.0d)); 58 m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
57 59
58 // m_log.DebugFormat("[USER CACHE]: cached user {0}", userID); 60 // m_log.DebugFormat("[USER CACHE]: cached user {0}", userID);
59 } 61 }
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs
index ddc3dd7..c72acc3 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs
@@ -33,7 +33,7 @@ using OpenSim.Framework.Serialization;
33using OpenSim.Region.Framework.Scenes; 33using OpenSim.Region.Framework.Scenes;
34 34
35namespace OpenSim.Region.CoreModules.World.Archiver 35namespace OpenSim.Region.CoreModules.World.Archiver
36{ 36{
37 /// <summary> 37 /// <summary>
38 /// Helper methods for archive manipulation 38 /// Helper methods for archive manipulation
39 /// </summary> 39 /// </summary>
@@ -50,7 +50,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
50 public static string CreateObjectFilename(SceneObjectGroup sog) 50 public static string CreateObjectFilename(SceneObjectGroup sog)
51 { 51 {
52 return ArchiveConstants.CreateOarObjectFilename(sog.Name, sog.UUID, sog.AbsolutePosition); 52 return ArchiveConstants.CreateOarObjectFilename(sog.Name, sog.UUID, sog.AbsolutePosition);
53 } 53 }
54 54
55 /// <summary> 55 /// <summary>
56 /// Create the path used to store an object in an OpenSim Archive. 56 /// Create the path used to store an object in an OpenSim Archive.
@@ -62,7 +62,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
62 public static string CreateObjectPath(SceneObjectGroup sog) 62 public static string CreateObjectPath(SceneObjectGroup sog)
63 { 63 {
64 return ArchiveConstants.CreateOarObjectPath(sog.Name, sog.UUID, sog.AbsolutePosition); 64 return ArchiveConstants.CreateOarObjectPath(sog.Name, sog.UUID, sog.AbsolutePosition);
65 } 65 }
66 66
67 /// <summary> 67 /// <summary>
68 /// Resolve path to a working FileStream 68 /// Resolve path to a working FileStream
@@ -123,6 +123,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
123 123
124 // return new BufferedStream(file, (int) response.ContentLength); 124 // return new BufferedStream(file, (int) response.ContentLength);
125 return new BufferedStream(file, 1000000); 125 return new BufferedStream(file, 1000000);
126 } 126 }
127 } 127 }
128} \ No newline at end of file 128} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
index b25636f..283b33b 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
@@ -102,7 +102,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
102 { 102 {
103 Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>(); 103 Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>();
104 104
105 List<EntityBase> entities = m_scene.GetEntities(); 105 EntityBase[] entities = m_scene.GetEntities();
106 List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); 106 List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>();
107 107
108 /* 108 /*
diff --git a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
index 58698ee..3342164 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
@@ -48,6 +48,7 @@ using OpenSim.Tests.Common.Setup;
48using ArchiveConstants = OpenSim.Framework.Serialization.ArchiveConstants; 48using ArchiveConstants = OpenSim.Framework.Serialization.ArchiveConstants;
49using TarArchiveReader = OpenSim.Framework.Serialization.TarArchiveReader; 49using TarArchiveReader = OpenSim.Framework.Serialization.TarArchiveReader;
50using TarArchiveWriter = OpenSim.Framework.Serialization.TarArchiveWriter; 50using TarArchiveWriter = OpenSim.Framework.Serialization.TarArchiveWriter;
51using RegionSettings = OpenSim.Framework.RegionSettings;
51 52
52namespace OpenSim.Region.CoreModules.World.Archiver.Tests 53namespace OpenSim.Region.CoreModules.World.Archiver.Tests
53{ 54{
@@ -135,7 +136,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
135 136
136 SceneObjectPart part2 = CreateSceneObjectPart2(); 137 SceneObjectPart part2 = CreateSceneObjectPart2();
137 138
138 AssetNotecard nc = new AssetNotecard("Hello World!"); 139 AssetNotecard nc = new AssetNotecard();
140 nc.BodyText = "Hello World!";
141 nc.Encode();
139 UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); 142 UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000");
140 UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); 143 UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000");
141 AssetBase ncAsset 144 AssetBase ncAsset
@@ -215,7 +218,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
215 public void TestLoadOarV0_2() 218 public void TestLoadOarV0_2()
216 { 219 {
217 TestHelper.InMethod(); 220 TestHelper.InMethod();
218 //log4net.Config.XmlConfigurator.Configure(); 221// log4net.Config.XmlConfigurator.Configure();
219 222
220 MemoryStream archiveWriteStream = new MemoryStream(); 223 MemoryStream archiveWriteStream = new MemoryStream();
221 TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); 224 TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index f62ec1b..5bd72ee 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -72,12 +72,12 @@ namespace OpenSim.Region.CoreModules.World.Land
72 #pragma warning restore 0429 72 #pragma warning restore 0429
73 73
74 /// <value> 74 /// <value>
75 /// Local land ids at specified region co-ordinates (region size / 4) 75 /// Local land ids at specified region co-ordinates (region size / 4)
76 /// </value> 76 /// </value>
77 private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax]; 77 private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax];
78 78
79 /// <value> 79 /// <value>
80 /// Land objects keyed by local id 80 /// Land objects keyed by local id
81 /// </value> 81 /// </value>
82 private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>(); 82 private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>();
83 83
@@ -94,8 +94,8 @@ namespace OpenSim.Region.CoreModules.World.Land
94 94
95 #region INonSharedRegionModule Members 95 #region INonSharedRegionModule Members
96 96
97 public Type ReplaceableInterface 97 public Type ReplaceableInterface
98 { 98 {
99 get { return null; } 99 get { return null; }
100 } 100 }
101 101
@@ -200,7 +200,7 @@ namespace OpenSim.Region.CoreModules.World.Land
200 Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); 200 Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition));
201 forcedPosition = null; 201 forcedPosition = null;
202 } 202 }
203 //if we are far away, teleport 203 //if we are far away, teleport
204 else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) > 3) 204 else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) > 3)
205 { 205 {
206 Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); 206 Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition));
@@ -329,8 +329,6 @@ namespace OpenSim.Region.CoreModules.World.Land
329 } 329 }
330 } 330 }
331 331
332
333
334 private void ForceAvatarToPosition(ScenePresence avatar, Vector3? position) 332 private void ForceAvatarToPosition(ScenePresence avatar, Vector3? position)
335 { 333 {
336 if (m_scene.Permissions.IsGod(avatar.UUID)) return; 334 if (m_scene.Permissions.IsGod(avatar.UUID)) return;
@@ -344,7 +342,6 @@ namespace OpenSim.Region.CoreModules.World.Land
344 { 342 {
345 avatar.ControllingClient.SendAlertMessage( 343 avatar.ControllingClient.SendAlertMessage(
346 "You are not allowed on this parcel because the land owner has restricted access."); 344 "You are not allowed on this parcel because the land owner has restricted access.");
347
348 } 345 }
349 346
350 public void EventManagerOnAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID) 347 public void EventManagerOnAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID)
@@ -456,7 +453,7 @@ namespace OpenSim.Region.CoreModules.World.Land
456 if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && 453 if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT &&
457 clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) 454 clientAvatar.sentMessageAboutRestrictedParcelFlyingDown)
458 { 455 {
459 EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID, 456 EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID,
460 m_scene.RegionInfo.RegionID); 457 m_scene.RegionInfo.RegionID);
461 //They are going under the safety line! 458 //They are going under the safety line!
462 if (!parcel.IsBannedFromLand(clientAvatar.UUID)) 459 if (!parcel.IsBannedFromLand(clientAvatar.UUID))
@@ -660,7 +657,7 @@ namespace OpenSim.Region.CoreModules.World.Land
660 657
661 if (x_float > Constants.RegionSize || x_float < 0 || y_float > Constants.RegionSize || y_float < 0) 658 if (x_float > Constants.RegionSize || x_float < 0 || y_float > Constants.RegionSize || y_float < 0)
662 return null; 659 return null;
663 660
664 try 661 try
665 { 662 {
666 x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0)); 663 x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0));
@@ -675,7 +672,7 @@ namespace OpenSim.Region.CoreModules.World.Land
675 { 672 {
676 return null; 673 return null;
677 } 674 }
678 675
679 lock (m_landList) 676 lock (m_landList)
680 { 677 {
681 // Corner case. If an autoreturn happens during sim startup 678 // Corner case. If an autoreturn happens during sim startup
@@ -695,7 +692,7 @@ namespace OpenSim.Region.CoreModules.World.Land
695 // they happen every time at border crossings 692 // they happen every time at border crossings
696 throw new Exception("Error: Parcel not found at point " + x + ", " + y); 693 throw new Exception("Error: Parcel not found at point " + x + ", " + y);
697 } 694 }
698 695
699 lock (m_landIDList) 696 lock (m_landIDList)
700 { 697 {
701 try 698 try
@@ -749,7 +746,6 @@ namespace OpenSim.Region.CoreModules.World.Land
749 746
750 public void EventManagerOnObjectBeingRemovedFromScene(SceneObjectGroup obj) 747 public void EventManagerOnObjectBeingRemovedFromScene(SceneObjectGroup obj)
751 { 748 {
752
753 lock (m_landList) 749 lock (m_landList)
754 { 750 {
755 foreach (LandObject p in m_landList.Values) 751 foreach (LandObject p in m_landList.Values)
@@ -802,7 +798,8 @@ namespace OpenSim.Region.CoreModules.World.Land
802 public void EventManagerOnParcelPrimCountUpdate() 798 public void EventManagerOnParcelPrimCountUpdate()
803 { 799 {
804 ResetAllLandPrimCounts(); 800 ResetAllLandPrimCounts();
805 foreach (EntityBase obj in m_scene.Entities) 801 EntityBase[] entities = m_scene.Entities.GetEntities();
802 foreach (EntityBase obj in entities)
806 { 803 {
807 if (obj != null) 804 if (obj != null)
808 { 805 {
@@ -943,7 +940,7 @@ namespace OpenSim.Region.CoreModules.World.Land
943 return; 940 return;
944 } 941 }
945 } 942 }
946 943
947 lock (m_landList) 944 lock (m_landList)
948 { 945 {
949 foreach (ILandObject slaveLandObject in selectedLandObjects) 946 foreach (ILandObject slaveLandObject in selectedLandObjects)
@@ -1089,7 +1086,6 @@ namespace OpenSim.Region.CoreModules.World.Land
1089 temp.Add(currentParcel); 1086 temp.Add(currentParcel);
1090 } 1087 }
1091 } 1088 }
1092
1093 } 1089 }
1094 } 1090 }
1095 1091
@@ -1132,7 +1128,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1132 join(west, south, east, north, remote_client.AgentId); 1128 join(west, south, east, north, remote_client.AgentId);
1133 } 1129 }
1134 1130
1135 public void ClientOnParcelSelectObjects(int local_id, int request_type, 1131 public void ClientOnParcelSelectObjects(int local_id, int request_type,
1136 List<UUID> returnIDs, IClientAPI remote_client) 1132 List<UUID> returnIDs, IClientAPI remote_client)
1137 { 1133 {
1138 m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client); 1134 m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client);
@@ -1382,31 +1378,31 @@ namespace OpenSim.Region.CoreModules.World.Land
1382 { 1378 {
1383 return RemoteParcelRequest(request, path, param, agentID, caps); 1379 return RemoteParcelRequest(request, path, param, agentID, caps);
1384 })); 1380 }));
1385 UUID parcelCapID = UUID.Random(); 1381 UUID parcelCapID = UUID.Random();
1386 caps.RegisterHandler("ParcelPropertiesUpdate", 1382 caps.RegisterHandler("ParcelPropertiesUpdate",
1387 new RestStreamHandler("POST", "/CAPS/" + parcelCapID, 1383 new RestStreamHandler("POST", "/CAPS/" + parcelCapID,
1388 delegate(string request, string path, string param, 1384 delegate(string request, string path, string param,
1389 OSHttpRequest httpRequest, OSHttpResponse httpResponse) 1385 OSHttpRequest httpRequest, OSHttpResponse httpResponse)
1390 { 1386 {
1391 return ProcessPropertiesUpdate(request, path, param, agentID, caps); 1387 return ProcessPropertiesUpdate(request, path, param, agentID, caps);
1392 })); 1388 }));
1393 } 1389 }
1394 private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps) 1390 private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps)
1395 { 1391 {
1396 IClientAPI client; 1392 IClientAPI client;
1397 if ( ! m_scene.TryGetClient(agentID, out client) ) { 1393 if (! m_scene.TryGetClient(agentID, out client)) {
1398 m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString() ); 1394 m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString());
1399 return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); 1395 return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
1400 } 1396 }
1401 1397
1402 ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage(); 1398 ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage();
1403 OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request); 1399 OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request);
1404 1400
1405 properties.Deserialize(args); 1401 properties.Deserialize(args);
1406 1402
1407 LandUpdateArgs land_update = new LandUpdateArgs(); 1403 LandUpdateArgs land_update = new LandUpdateArgs();
1408 int parcelID = properties.LocalID; 1404 int parcelID = properties.LocalID;
1409 land_update.AuthBuyerID = properties.AuthBuyerID; 1405 land_update.AuthBuyerID = properties.AuthBuyerID;
1410 land_update.Category = properties.Category; 1406 land_update.Category = properties.Category;
1411 land_update.Desc = properties.Desc; 1407 land_update.Desc = properties.Desc;
1412 land_update.GroupID = properties.GroupID; 1408 land_update.GroupID = properties.GroupID;
@@ -1423,15 +1419,15 @@ namespace OpenSim.Region.CoreModules.World.Land
1423 land_update.SnapshotID = properties.SnapshotID; 1419 land_update.SnapshotID = properties.SnapshotID;
1424 land_update.UserLocation = properties.UserLocation; 1420 land_update.UserLocation = properties.UserLocation;
1425 land_update.UserLookAt = properties.UserLookAt; 1421 land_update.UserLookAt = properties.UserLookAt;
1426 land_update.MediaDescription = properties.MediaDesc; 1422 land_update.MediaDescription = properties.MediaDesc;
1427 land_update.MediaType = properties.MediaType; 1423 land_update.MediaType = properties.MediaType;
1428 land_update.MediaWidth = properties.MediaWidth; 1424 land_update.MediaWidth = properties.MediaWidth;
1429 land_update.MediaHeight = properties.MediaHeight; 1425 land_update.MediaHeight = properties.MediaHeight;
1430 land_update.MediaLoop = properties.MediaLoop; 1426 land_update.MediaLoop = properties.MediaLoop;
1431 land_update.ObscureMusic = properties.ObscureMusic; 1427 land_update.ObscureMusic = properties.ObscureMusic;
1432 land_update.ObscureMedia = properties.ObscureMedia; 1428 land_update.ObscureMedia = properties.ObscureMedia;
1433 1429
1434 ILandObject land; 1430 ILandObject land;
1435 lock (m_landList) 1431 lock (m_landList)
1436 { 1432 {
1437 m_landList.TryGetValue(parcelID, out land); 1433 m_landList.TryGetValue(parcelID, out land);
@@ -1439,15 +1435,15 @@ namespace OpenSim.Region.CoreModules.World.Land
1439 1435
1440 if (land != null) 1436 if (land != null)
1441 { 1437 {
1442 land.UpdateLandProperties(land_update, client); 1438 land.UpdateLandProperties(land_update, client);
1443 m_scene.EventManager.TriggerOnParcelPropertiesUpdateRequest(land_update, parcelID, client); 1439 m_scene.EventManager.TriggerOnParcelPropertiesUpdateRequest(land_update, parcelID, client);
1444 } 1440 }
1445 else 1441 else
1446 { 1442 {
1447 m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID); 1443 m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID);
1448 } 1444 }
1449 return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); 1445 return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
1450 } 1446 }
1451 // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the 1447 // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the
1452 // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. 1448 // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to.
1453 // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x 1449 // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x
@@ -1524,19 +1520,19 @@ namespace OpenSim.Region.CoreModules.World.Land
1524 if (parcelID == UUID.Zero) 1520 if (parcelID == UUID.Zero)
1525 return; 1521 return;
1526 1522
1527 ExtendedLandData data = 1523 ExtendedLandData data =
1528 (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), 1524 (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(),
1529 delegate(string id) 1525 delegate(string id)
1530 { 1526 {
1531 UUID parcel = UUID.Zero; 1527 UUID parcel = UUID.Zero;
1532 UUID.TryParse(id, out parcel); 1528 UUID.TryParse(id, out parcel);
1533 // assume we've got the parcelID we just computed in RemoteParcelRequest 1529 // assume we've got the parcelID we just computed in RemoteParcelRequest
1534 ExtendedLandData extLandData = new ExtendedLandData(); 1530 ExtendedLandData extLandData = new ExtendedLandData();
1535 Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, 1531 Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle,
1536 out extLandData.X, out extLandData.Y); 1532 out extLandData.X, out extLandData.Y);
1537 m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", 1533 m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}",
1538 extLandData.RegionHandle, extLandData.X, extLandData.Y); 1534 extLandData.RegionHandle, extLandData.X, extLandData.Y);
1539 1535
1540 // for this region or for somewhere else? 1536 // for this region or for somewhere else?
1541 if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) 1537 if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle)
1542 { 1538 {
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 1b2cabb..bd1dd66 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -229,13 +229,13 @@ namespace OpenSim.Region.CoreModules.World.Land
229 newData.SnapshotID = args.SnapshotID; 229 newData.SnapshotID = args.SnapshotID;
230 newData.UserLocation = args.UserLocation; 230 newData.UserLocation = args.UserLocation;
231 newData.UserLookAt = args.UserLookAt; 231 newData.UserLookAt = args.UserLookAt;
232 newData.MediaType = args.MediaType; 232 newData.MediaType = args.MediaType;
233 newData.MediaDescription = args.MediaDescription; 233 newData.MediaDescription = args.MediaDescription;
234 newData.MediaWidth = args.MediaWidth; 234 newData.MediaWidth = args.MediaWidth;
235 newData.MediaHeight = args.MediaHeight; 235 newData.MediaHeight = args.MediaHeight;
236 newData.MediaLoop = args.MediaLoop; 236 newData.MediaLoop = args.MediaLoop;
237 newData.ObscureMusic = args.ObscureMusic; 237 newData.ObscureMusic = args.ObscureMusic;
238 newData.ObscureMedia = args.ObscureMedia; 238 newData.ObscureMedia = args.ObscureMedia;
239 239
240 m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); 240 m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
241 241
diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
index 82ad109..7c5d044 100644
--- a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
+++ b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
@@ -54,11 +54,11 @@ namespace OpenSim.Region.CoreModules.Media.Moap
54{ 54{
55 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MoapModule")] 55 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MoapModule")]
56 public class MoapModule : INonSharedRegionModule, IMoapModule 56 public class MoapModule : INonSharedRegionModule, IMoapModule
57 { 57 {
58 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 58 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
59 59
60 public string Name { get { return "MoapModule"; } } 60 public string Name { get { return "MoapModule"; } }
61 public Type ReplaceableInterface { get { return null; } } 61 public Type ReplaceableInterface { get { return null; } }
62 62
63 /// <summary> 63 /// <summary>
64 /// Is this module enabled? 64 /// Is this module enabled?
@@ -78,17 +78,17 @@ namespace OpenSim.Region.CoreModules.Media.Moap
78 /// <summary> 78 /// <summary>
79 /// Track the ObjectMedia capabilities given to users keyed by agent. Lock m_omCapUsers to manipulate. 79 /// Track the ObjectMedia capabilities given to users keyed by agent. Lock m_omCapUsers to manipulate.
80 /// </summary> 80 /// </summary>
81 protected Dictionary<UUID, string> m_omCapUrls = new Dictionary<UUID, string>(); 81 protected Dictionary<UUID, string> m_omCapUrls = new Dictionary<UUID, string>();
82 82
83 /// <summary> 83 /// <summary>
84 /// Track the ObjectMediaUpdate capabilities given to users keyed by path 84 /// Track the ObjectMediaUpdate capabilities given to users keyed by path
85 /// </summary> 85 /// </summary>
86 protected Dictionary<string, UUID> m_omuCapUsers = new Dictionary<string, UUID>(); 86 protected Dictionary<string, UUID> m_omuCapUsers = new Dictionary<string, UUID>();
87 87
88 /// <summary> 88 /// <summary>
89 /// Track the ObjectMediaUpdate capabilities given to users keyed by agent. Lock m_omuCapUsers to manipulate 89 /// Track the ObjectMediaUpdate capabilities given to users keyed by agent. Lock m_omuCapUsers to manipulate
90 /// </summary> 90 /// </summary>
91 protected Dictionary<UUID, string> m_omuCapUrls = new Dictionary<UUID, string>(); 91 protected Dictionary<UUID, string> m_omuCapUrls = new Dictionary<UUID, string>();
92 92
93 public void Initialise(IConfigSource configSource) 93 public void Initialise(IConfigSource configSource)
94 { 94 {
@@ -129,7 +129,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
129 m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps; 129 m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
130 m_scene.EventManager.OnDeregisterCaps -= OnDeregisterCaps; 130 m_scene.EventManager.OnDeregisterCaps -= OnDeregisterCaps;
131 m_scene.EventManager.OnSceneObjectPartCopy -= OnSceneObjectPartCopy; 131 m_scene.EventManager.OnSceneObjectPartCopy -= OnSceneObjectPartCopy;
132 } 132 }
133 133
134 public void OnRegisterCaps(UUID agentID, Caps caps) 134 public void OnRegisterCaps(UUID agentID, Caps caps)
135 { 135 {
@@ -159,7 +159,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
159 caps.RegisterHandler( 159 caps.RegisterHandler(
160 "ObjectMediaNavigate", new RestStreamHandler("POST", omuCapUrl, HandleObjectMediaNavigateMessage)); 160 "ObjectMediaNavigate", new RestStreamHandler("POST", omuCapUrl, HandleObjectMediaNavigateMessage));
161 } 161 }
162 } 162 }
163 163
164 public void OnDeregisterCaps(UUID agentID, Caps caps) 164 public void OnDeregisterCaps(UUID agentID, Caps caps)
165 { 165 {
@@ -179,7 +179,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
179 } 179 }
180 180
181 protected void OnSceneObjectPartCopy(SceneObjectPart copy, SceneObjectPart original, bool userExposed) 181 protected void OnSceneObjectPartCopy(SceneObjectPart copy, SceneObjectPart original, bool userExposed)
182 { 182 {
183 if (original.Shape.Media != null) 183 if (original.Shape.Media != null)
184 { 184 {
185 PrimitiveBaseShape.MediaList dupeMedia = new PrimitiveBaseShape.MediaList(); 185 PrimitiveBaseShape.MediaList dupeMedia = new PrimitiveBaseShape.MediaList();
@@ -195,7 +195,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
195 } 195 }
196 196
197 copy.Shape.Media = dupeMedia; 197 copy.Shape.Media = dupeMedia;
198 } 198 }
199 } 199 }
200 200
201 public MediaEntry GetMediaEntry(SceneObjectPart part, int face) 201 public MediaEntry GetMediaEntry(SceneObjectPart part, int face)
@@ -211,9 +211,9 @@ namespace OpenSim.Region.CoreModules.Media.Moap
211 me = null; 211 me = null;
212 } 212 }
213 else 213 else
214 { 214 {
215 lock (media) 215 lock (media)
216 me = media[face]; 216 me = media[face];
217 217
218 // TODO: Really need a proper copy constructor down in libopenmetaverse 218 // TODO: Really need a proper copy constructor down in libopenmetaverse
219 if (me != null) 219 if (me != null)
@@ -227,17 +227,17 @@ namespace OpenSim.Region.CoreModules.Media.Moap
227 227
228 public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me) 228 public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me)
229 { 229 {
230 CheckFaceParam(part, face); 230 CheckFaceParam(part, face);
231 231
232 if (null == part.Shape.Media) 232 if (null == part.Shape.Media)
233 part.Shape.Media = new PrimitiveBaseShape.MediaList(new MediaEntry[part.GetNumberOfSides()]); 233 part.Shape.Media = new PrimitiveBaseShape.MediaList(new MediaEntry[part.GetNumberOfSides()]);
234 234
235 lock (part.Shape.Media) 235 lock (part.Shape.Media)
236 part.Shape.Media[face] = me; 236 part.Shape.Media[face] = me;
237 237
238 UpdateMediaUrl(part, UUID.Zero); 238 UpdateMediaUrl(part, UUID.Zero);
239 part.ScheduleFullUpdate(); 239 part.ScheduleFullUpdate();
240 part.TriggerScriptChangedEvent(Changed.MEDIA); 240 part.TriggerScriptChangedEvent(Changed.MEDIA);
241 } 241 }
242 242
243 public void ClearMediaEntry(SceneObjectPart part, int face) 243 public void ClearMediaEntry(SceneObjectPart part, int face)
@@ -256,7 +256,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
256 /// <returns></returns> 256 /// <returns></returns>
257 protected string HandleObjectMediaMessage( 257 protected string HandleObjectMediaMessage(
258 string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) 258 string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
259 { 259 {
260// m_log.DebugFormat("[MOAP]: Got ObjectMedia path [{0}], raw request [{1}]", path, request); 260// m_log.DebugFormat("[MOAP]: Got ObjectMedia path [{0}], raw request [{1}]", path, request);
261 261
262 OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request); 262 OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request);
@@ -266,12 +266,12 @@ namespace OpenSim.Region.CoreModules.Media.Moap
266 if (omm.Request is ObjectMediaRequest) 266 if (omm.Request is ObjectMediaRequest)
267 return HandleObjectMediaRequest(omm.Request as ObjectMediaRequest); 267 return HandleObjectMediaRequest(omm.Request as ObjectMediaRequest);
268 else if (omm.Request is ObjectMediaUpdate) 268 else if (omm.Request is ObjectMediaUpdate)
269 return HandleObjectMediaUpdate(path, omm.Request as ObjectMediaUpdate); 269 return HandleObjectMediaUpdate(path, omm.Request as ObjectMediaUpdate);
270 270
271 throw new Exception( 271 throw new Exception(
272 string.Format( 272 string.Format(
273 "[MOAP]: ObjectMediaMessage has unrecognized ObjectMediaBlock of {0}", 273 "[MOAP]: ObjectMediaMessage has unrecognized ObjectMediaBlock of {0}",
274 omm.Request.GetType())); 274 omm.Request.GetType()));
275 } 275 }
276 276
277 /// <summary> 277 /// <summary>
@@ -279,7 +279,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
279 /// </summary> 279 /// </summary>
280 /// <param name="omr"></param> 280 /// <param name="omr"></param>
281 /// <returns></returns> 281 /// <returns></returns>
282 protected string HandleObjectMediaRequest(ObjectMediaRequest omr) 282 protected string HandleObjectMediaRequest(ObjectMediaRequest omr)
283 { 283 {
284 UUID primId = omr.PrimID; 284 UUID primId = omr.PrimID;
285 285
@@ -318,7 +318,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
318 /// <param name="path">Path on which this request was made</param> 318 /// <param name="path">Path on which this request was made</param>
319 /// <param name="omu">/param> 319 /// <param name="omu">/param>
320 /// <returns></returns> 320 /// <returns></returns>
321 protected string HandleObjectMediaUpdate(string path, ObjectMediaUpdate omu) 321 protected string HandleObjectMediaUpdate(string path, ObjectMediaUpdate omu)
322 { 322 {
323 UUID primId = omu.PrimID; 323 UUID primId = omu.PrimID;
324 324
@@ -330,9 +330,9 @@ namespace OpenSim.Region.CoreModules.Media.Moap
330 "[MOAP]: Received an UPDATE ObjectMediaRequest for prim {0} but this doesn't exist in region {1}", 330 "[MOAP]: Received an UPDATE ObjectMediaRequest for prim {0} but this doesn't exist in region {1}",
331 primId, m_scene.RegionInfo.RegionName); 331 primId, m_scene.RegionInfo.RegionName);
332 return string.Empty; 332 return string.Empty;
333 } 333 }
334 334
335// m_log.DebugFormat("[MOAP]: Received {0} media entries for prim {1}", omu.FaceMedia.Length, primId); 335// m_log.DebugFormat("[MOAP]: Received {0} media entries for prim {1}", omu.FaceMedia.Length, primId);
336 336
337// for (int i = 0; i < omu.FaceMedia.Length; i++) 337// for (int i = 0; i < omu.FaceMedia.Length; i++)
338// { 338// {
@@ -374,14 +374,14 @@ namespace OpenSim.Region.CoreModules.Media.Moap
374 part.Shape.Textures = te; 374 part.Shape.Textures = te;
375// m_log.DebugFormat( 375// m_log.DebugFormat(
376// "[MOAP]: Media flags for face {0} is {1}", 376// "[MOAP]: Media flags for face {0} is {1}",
377// i, part.Shape.Textures.FaceTextures[i].MediaFlags); 377// i, part.Shape.Textures.FaceTextures[i].MediaFlags);
378 } 378 }
379 } 379 }
380 } 380 }
381 else 381 else
382 { 382 {
383 // We need to go through the media textures one at a time to make sure that we have permission 383 // We need to go through the media textures one at a time to make sure that we have permission
384 // to change them 384 // to change them
385 385
386 // FIXME: Race condition here since some other texture entry manipulator may overwrite/get 386 // FIXME: Race condition here since some other texture entry manipulator may overwrite/get
387 // overwritten. Unfortunately, PrimitiveBaseShape does not allow us to change texture entry 387 // overwritten. Unfortunately, PrimitiveBaseShape does not allow us to change texture entry
@@ -391,18 +391,18 @@ namespace OpenSim.Region.CoreModules.Media.Moap
391 lock (media) 391 lock (media)
392 { 392 {
393 for (int i = 0; i < media.Count; i++) 393 for (int i = 0; i < media.Count; i++)
394 { 394 {
395 if (m_scene.Permissions.CanControlPrimMedia(agentId, part.UUID, i)) 395 if (m_scene.Permissions.CanControlPrimMedia(agentId, part.UUID, i))
396 { 396 {
397 media[i] = omu.FaceMedia[i]; 397 media[i] = omu.FaceMedia[i];
398 398
399 // When a face is cleared this is done by setting the MediaFlags in the TextureEntry via a normal 399 // When a face is cleared this is done by setting the MediaFlags in the TextureEntry via a normal
400 // texture update, so we don't need to worry about clearing MediaFlags here. 400 // texture update, so we don't need to worry about clearing MediaFlags here.
401 if (null == media[i]) 401 if (null == media[i])
402 continue; 402 continue;
403 403
404 Primitive.TextureEntryFace face = te.CreateFace((uint)i); 404 Primitive.TextureEntryFace face = te.CreateFace((uint)i);
405 face.MediaFlags = true; 405 face.MediaFlags = true;
406 406
407 // m_log.DebugFormat( 407 // m_log.DebugFormat(
408 // "[MOAP]: Media flags for face {0} is {1}", 408 // "[MOAP]: Media flags for face {0} is {1}",
@@ -414,11 +414,11 @@ namespace OpenSim.Region.CoreModules.Media.Moap
414 414
415 part.Shape.Textures = te; 415 part.Shape.Textures = te;
416 416
417// for (int i2 = 0; i2 < part.Shape.Textures.FaceTextures.Length; i2++) 417// for (int i2 = 0; i2 < part.Shape.Textures.FaceTextures.Length; i2++)
418// m_log.DebugFormat("[MOAP]: FaceTexture[{0}] is {1}", i2, part.Shape.Textures.FaceTextures[i2]); 418// m_log.DebugFormat("[MOAP]: FaceTexture[{0}] is {1}", i2, part.Shape.Textures.FaceTextures[i2]);
419 } 419 }
420 420
421 UpdateMediaUrl(part, agentId); 421 UpdateMediaUrl(part, agentId);
422 422
423 // Arguably, we could avoid sending a full update to the avatar that just changed the texture. 423 // Arguably, we could avoid sending a full update to the avatar that just changed the texture.
424 part.ScheduleFullUpdate(); 424 part.ScheduleFullUpdate();
@@ -439,16 +439,16 @@ namespace OpenSim.Region.CoreModules.Media.Moap
439 /// <returns></returns> 439 /// <returns></returns>
440 protected string HandleObjectMediaNavigateMessage( 440 protected string HandleObjectMediaNavigateMessage(
441 string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) 441 string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
442 { 442 {
443// m_log.DebugFormat("[MOAP]: Got ObjectMediaNavigate request [{0}]", request); 443// m_log.DebugFormat("[MOAP]: Got ObjectMediaNavigate request [{0}]", request);
444 444
445 OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request); 445 OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request);
446 ObjectMediaNavigateMessage omn = new ObjectMediaNavigateMessage(); 446 ObjectMediaNavigateMessage omn = new ObjectMediaNavigateMessage();
447 omn.Deserialize(osd); 447 omn.Deserialize(osd);
448 448
449 UUID primId = omn.PrimID; 449 UUID primId = omn.PrimID;
450 450
451 SceneObjectPart part = m_scene.GetSceneObjectPart(primId); 451 SceneObjectPart part = m_scene.GetSceneObjectPart(primId);
452 452
453 if (null == part) 453 if (null == part)
454 { 454 {
@@ -456,12 +456,12 @@ namespace OpenSim.Region.CoreModules.Media.Moap
456 "[MOAP]: Received an ObjectMediaNavigateMessage for prim {0} but this doesn't exist in region {1}", 456 "[MOAP]: Received an ObjectMediaNavigateMessage for prim {0} but this doesn't exist in region {1}",
457 primId, m_scene.RegionInfo.RegionName); 457 primId, m_scene.RegionInfo.RegionName);
458 return string.Empty; 458 return string.Empty;
459 } 459 }
460 460
461 UUID agentId = default(UUID); 461 UUID agentId = default(UUID);
462 462
463 lock (m_omuCapUsers) 463 lock (m_omuCapUsers)
464 agentId = m_omuCapUsers[path]; 464 agentId = m_omuCapUsers[path];
465 465
466 if (!m_scene.Permissions.CanInteractWithPrimMedia(agentId, part.UUID, omn.Face)) 466 if (!m_scene.Permissions.CanInteractWithPrimMedia(agentId, part.UUID, omn.Face))
467 return string.Empty; 467 return string.Empty;
@@ -484,7 +484,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
484 return string.Empty; 484 return string.Empty;
485 485
486 if (me.EnableWhiteList) 486 if (me.EnableWhiteList)
487 { 487 {
488 if (!CheckUrlAgainstWhitelist(omn.URL, me.WhiteList)) 488 if (!CheckUrlAgainstWhitelist(omn.URL, me.WhiteList))
489 { 489 {
490// m_log.DebugFormat( 490// m_log.DebugFormat(
@@ -493,18 +493,18 @@ namespace OpenSim.Region.CoreModules.Media.Moap
493 493
494 return string.Empty; 494 return string.Empty;
495 } 495 }
496 } 496 }
497 497
498 me.CurrentURL = omn.URL; 498 me.CurrentURL = omn.URL;
499 499
500 UpdateMediaUrl(part, agentId); 500 UpdateMediaUrl(part, agentId);
501 501
502 part.ScheduleFullUpdate(); 502 part.ScheduleFullUpdate();
503 503
504 part.TriggerScriptChangedEvent(Changed.MEDIA); 504 part.TriggerScriptChangedEvent(Changed.MEDIA);
505 505
506 return OSDParser.SerializeLLSDXmlString(new OSD()); 506 return OSDParser.SerializeLLSDXmlString(new OSD());
507 } 507 }
508 508
509 /// <summary> 509 /// <summary>
510 /// Check that the face number is valid for the given prim. 510 /// Check that the face number is valid for the given prim.
@@ -519,7 +519,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
519 int maxFaces = part.GetNumberOfSides() - 1; 519 int maxFaces = part.GetNumberOfSides() - 1;
520 if (face > maxFaces) 520 if (face > maxFaces)
521 throw new ArgumentException( 521 throw new ArgumentException(
522 string.Format("Face argument was {0} but max is {1}", face, maxFaces)); 522 string.Format("Face argument was {0} but max is {1}", face, maxFaces));
523 } 523 }
524 524
525 /// <summary> 525 /// <summary>
@@ -542,9 +542,9 @@ namespace OpenSim.Region.CoreModules.Media.Moap
542 string rawVersion = part.MediaUrl.Substring(5, 10); 542 string rawVersion = part.MediaUrl.Substring(5, 10);
543 int version = int.Parse(rawVersion); 543 int version = int.Parse(rawVersion);
544 part.MediaUrl = string.Format("x-mv:{0:D10}/{1}", ++version, updateId); 544 part.MediaUrl = string.Format("x-mv:{0:D10}/{1}", ++version, updateId);
545 } 545 }
546 546
547// m_log.DebugFormat("[MOAP]: Storing media url [{0}] in prim {1} {2}", part.MediaUrl, part.Name, part.UUID); 547// m_log.DebugFormat("[MOAP]: Storing media url [{0}] in prim {1} {2}", part.MediaUrl, part.Name, part.UUID);
548 } 548 }
549 549
550 /// <summary> 550 /// <summary>
@@ -554,7 +554,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
554 /// <param name="whitelist"></param> 554 /// <param name="whitelist"></param>
555 /// <returns>true if the url matches an entry on the whitelist, false otherwise</returns> 555 /// <returns>true if the url matches an entry on the whitelist, false otherwise</returns>
556 protected bool CheckUrlAgainstWhitelist(string rawUrl, string[] whitelist) 556 protected bool CheckUrlAgainstWhitelist(string rawUrl, string[] whitelist)
557 { 557 {
558 Uri url = new Uri(rawUrl); 558 Uri url = new Uri(rawUrl);
559 559
560 foreach (string origWlUrl in whitelist) 560 foreach (string origWlUrl in whitelist)
@@ -575,7 +575,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
575 if (url.Host.Contains(wlUrl)) 575 if (url.Host.Contains(wlUrl))
576 { 576 {
577// m_log.DebugFormat("[MOAP]: Whitelist URL {0} matches {1}", origWlUrl, rawUrl); 577// m_log.DebugFormat("[MOAP]: Whitelist URL {0} matches {1}", origWlUrl, rawUrl);
578 return true; 578 return true;
579 } 579 }
580 } 580 }
581 else 581 else
@@ -588,7 +588,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
588 return true; 588 return true;
589 } 589 }
590 } 590 }
591 } 591 }
592 592
593 return false; 593 return false;
594 } 594 }
diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
index 12750c5..db50339 100644
--- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
@@ -49,8 +49,8 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
49 protected Scene m_scene = null; 49 protected Scene m_scene = null;
50 protected IDialogModule m_dialogModule; 50 protected IDialogModule m_dialogModule;
51 51
52 public string Name { get { return "Object BuySell Module"; } } 52 public string Name { get { return "Object BuySell Module"; } }
53 public Type ReplaceableInterface { get { return null; } } 53 public Type ReplaceableInterface { get { return null; } }
54 54
55 public void Initialise(IConfigSource source) {} 55 public void Initialise(IConfigSource source) {}
56 56
@@ -78,8 +78,8 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
78 78
79 public void SubscribeToClientEvents(IClientAPI client) 79 public void SubscribeToClientEvents(IClientAPI client)
80 { 80 {
81 client.OnObjectSaleInfo += ObjectSaleInfo; 81 client.OnObjectSaleInfo += ObjectSaleInfo;
82 } 82 }
83 83
84 protected void ObjectSaleInfo( 84 protected void ObjectSaleInfo(
85 IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice) 85 IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice)
@@ -99,7 +99,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
99 part.ParentGroup.HasGroupChanged = true; 99 part.ParentGroup.HasGroupChanged = true;
100 100
101 part.GetProperties(client); 101 part.GetProperties(client);
102 } 102 }
103 103
104 public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType) 104 public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType)
105 { 105 {
@@ -225,7 +225,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
225 } 225 }
226 else 226 else
227 { 227 {
228 if (m_dialogModule != null) 228 if (m_dialogModule != null)
229 m_dialogModule.SendAlertToUser(remoteClient, "Cannot buy now. Your inventory is unavailable"); 229 m_dialogModule.SendAlertToUser(remoteClient, "Cannot buy now. Your inventory is unavailable");
230 return false; 230 return false;
231 } 231 }
@@ -261,6 +261,6 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
261 } 261 }
262 262
263 return true; 263 return true;
264 } 264 }
265 } 265 }
266} \ No newline at end of file 266} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index b1747ef..ecfd211 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -397,13 +397,13 @@ namespace OpenSim.Region.CoreModules.World.Permissions
397 m_groupsModule = m_scene.RequestModuleInterface<IGroupsModule>(); 397 m_groupsModule = m_scene.RequestModuleInterface<IGroupsModule>();
398 398
399 if (m_groupsModule == null) 399 if (m_groupsModule == null)
400 m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work"); 400 m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work");
401 401
402 m_moapModule = m_scene.RequestModuleInterface<IMoapModule>(); 402 m_moapModule = m_scene.RequestModuleInterface<IMoapModule>();
403 403
404 // This log line will be commented out when no longer required for debugging 404 // This log line will be commented out when no longer required for debugging
405// if (m_moapModule == null) 405// if (m_moapModule == null)
406// m_log.Warn("[PERMISSIONS]: Media on a prim module not found, media on a prim permissions will not work"); 406// m_log.Warn("[PERMISSIONS]: Media on a prim module not found, media on a prim permissions will not work");
407 } 407 }
408 408
409 public void Close() 409 public void Close()
@@ -1906,7 +1906,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1906 } 1906 }
1907 1907
1908 private bool CanControlPrimMedia(UUID agentID, UUID primID, int face) 1908 private bool CanControlPrimMedia(UUID agentID, UUID primID, int face)
1909 { 1909 {
1910// m_log.DebugFormat( 1910// m_log.DebugFormat(
1911// "[PERMISSONS]: Performing CanControlPrimMedia check with agentID {0}, primID {1}, face {2}", 1911// "[PERMISSONS]: Performing CanControlPrimMedia check with agentID {0}, primID {1}, face {2}",
1912// agentID, primID, face); 1912// agentID, primID, face);
@@ -1918,7 +1918,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1918 if (null == part) 1918 if (null == part)
1919 return false; 1919 return false;
1920 1920
1921 MediaEntry me = m_moapModule.GetMediaEntry(part, face); 1921 MediaEntry me = m_moapModule.GetMediaEntry(part, face);
1922 1922
1923 // If there is no existing media entry then it can be controlled (in this context, created). 1923 // If there is no existing media entry then it can be controlled (in this context, created).
1924 if (null == me) 1924 if (null == me)
@@ -1929,7 +1929,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1929// agentID, primID, face, me.ControlPermissions); 1929// agentID, primID, face, me.ControlPermissions);
1930 1930
1931 return GenericPrimMediaPermission(part, agentID, me.ControlPermissions); 1931 return GenericPrimMediaPermission(part, agentID, me.ControlPermissions);
1932 } 1932 }
1933 1933
1934 private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face) 1934 private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face)
1935 { 1935 {
@@ -1952,15 +1952,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1952 1952
1953// m_log.DebugFormat( 1953// m_log.DebugFormat(
1954// "[PERMISSIONS]: Checking CanInteractWithPrimMedia for {0} on {1} face {2} with interact permissions {3}", 1954// "[PERMISSIONS]: Checking CanInteractWithPrimMedia for {0} on {1} face {2} with interact permissions {3}",
1955// agentID, primID, face, me.InteractPermissions); 1955// agentID, primID, face, me.InteractPermissions);
1956 1956
1957 return GenericPrimMediaPermission(part, agentID, me.InteractPermissions); 1957 return GenericPrimMediaPermission(part, agentID, me.InteractPermissions);
1958 } 1958 }
1959 1959
1960 private bool GenericPrimMediaPermission(SceneObjectPart part, UUID agentID, MediaPermission perms) 1960 private bool GenericPrimMediaPermission(SceneObjectPart part, UUID agentID, MediaPermission perms)
1961 { 1961 {
1962// if (IsAdministrator(agentID)) 1962// if (IsAdministrator(agentID))
1963// return true; 1963// return true;
1964 1964
1965 if ((perms & MediaPermission.Anyone) == MediaPermission.Anyone) 1965 if ((perms & MediaPermission.Anyone) == MediaPermission.Anyone)
1966 return true; 1966 return true;
@@ -1969,15 +1969,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1969 { 1969 {
1970 if (agentID == part.OwnerID) 1970 if (agentID == part.OwnerID)
1971 return true; 1971 return true;
1972 } 1972 }
1973 1973
1974 if ((perms & MediaPermission.Group) == MediaPermission.Group) 1974 if ((perms & MediaPermission.Group) == MediaPermission.Group)
1975 { 1975 {
1976 if (IsGroupMember(part.GroupID, agentID, 0)) 1976 if (IsGroupMember(part.GroupID, agentID, 0))
1977 return true; 1977 return true;
1978 } 1978 }
1979 1979
1980 return false; 1980 return false;
1981 } 1981 }
1982 } 1982 }
1983} \ No newline at end of file 1983} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs b/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs
index bef7fe4..5067ebd 100644
--- a/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs
+++ b/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs
@@ -80,7 +80,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser
80 { 80 {
81 string xmlstream = "<scene>"; 81 string xmlstream = "<scene>";
82 82
83 List<EntityBase> EntityList = scene.GetEntities(); 83 EntityBase[] EntityList = scene.GetEntities();
84 List<string> EntityXml = new List<string>(); 84 List<string> EntityXml = new List<string>();
85 85
86 foreach (EntityBase ent in EntityList) 86 foreach (EntityBase ent in EntityList)
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs
index 58e4261..98fe493 100644
--- a/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs
+++ b/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs
@@ -165,12 +165,12 @@ namespace OpenSim.Region.CoreModules.World.Serialiser
165 return SceneXmlLoader.SaveGroupToXml2(grp); 165 return SceneXmlLoader.SaveGroupToXml2(grp);
166 } 166 }
167 167
168 public void SavePrimListToXml2(List<EntityBase> entityList, string fileName) 168 public void SavePrimListToXml2(EntityBase[] entityList, string fileName)
169 { 169 {
170 SceneXmlLoader.SavePrimListToXml2(entityList, fileName); 170 SceneXmlLoader.SavePrimListToXml2(entityList, fileName);
171 } 171 }
172 172
173 public void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, Vector3 min, Vector3 max) 173 public void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max)
174 { 174 {
175 SceneXmlLoader.SavePrimListToXml2(entityList, stream, min, max); 175 SceneXmlLoader.SavePrimListToXml2(entityList, stream, min, max);
176 } 176 }
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
index d4166d0..4611352 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
@@ -816,7 +816,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
816 { 816 {
817 //m_log.Debug("Terrain packet unacked, resending patch: " + patchX + " , " + patchY); 817 //m_log.Debug("Terrain packet unacked, resending patch: " + patchX + " , " + patchY);
818 client.SendLayerData(patchX, patchY, m_scene.Heightmap.GetFloatsSerialised()); 818 client.SendLayerData(patchX, patchY, m_scene.Heightmap.GetFloatsSerialised());
819 } 819 }
820 820
821 private void StoreUndoState() 821 private void StoreUndoState()
822 { 822 {
diff --git a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
index 9736b73..6bac555 100644
--- a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
+++ b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
@@ -425,7 +425,7 @@ namespace OpenSim.Region.CoreModules
425 { 425 {
426 if (m_ready) 426 if (m_ready)
427 { 427 {
428 if(m_scene.GetRootAgentCount() > 0) 428 if (m_scene.GetRootAgentCount() > 0)
429 { 429 {
430 // Ask wind plugin to generate a LL wind array to be cached locally 430 // Ask wind plugin to generate a LL wind array to be cached locally
431 // Try not to update this too often, as it may involve array copies 431 // Try not to update this too often, as it may involve array copies
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs
index 57eff8a..1bd1371 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs
@@ -212,7 +212,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
212 double[,] hm = whichScene.Heightmap.GetDoubles(); 212 double[,] hm = whichScene.Heightmap.GetDoubles();
213 tc = Environment.TickCount; 213 tc = Environment.TickCount;
214 m_log.Info("[MAPTILE]: Generating Maptile Step 2: Object Volume Profile"); 214 m_log.Info("[MAPTILE]: Generating Maptile Step 2: Object Volume Profile");
215 List<EntityBase> objs = whichScene.GetEntities(); 215 EntityBase[] objs = whichScene.GetEntities();
216 Dictionary<uint, DrawStruct> z_sort = new Dictionary<uint, DrawStruct>(); 216 Dictionary<uint, DrawStruct> z_sort = new Dictionary<uint, DrawStruct>();
217 //SortedList<float, RectangleDrawStruct> z_sort = new SortedList<float, RectangleDrawStruct>(); 217 //SortedList<float, RectangleDrawStruct> z_sort = new SortedList<float, RectangleDrawStruct>();
218 List<float> z_sortheights = new List<float>(); 218 List<float> z_sortheights = new List<float>();
@@ -228,7 +228,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
228 SceneObjectGroup mapdot = (SceneObjectGroup)obj; 228 SceneObjectGroup mapdot = (SceneObjectGroup)obj;
229 Color mapdotspot = Color.Gray; // Default color when prim color is white 229 Color mapdotspot = Color.Gray; // Default color when prim color is white
230 230
231 // Loop over prim in group 231 // Loop over prim in group
232 List<SceneObjectPart> partList = null; 232 List<SceneObjectPart> partList = null;
233 lock (mapdot.Children) 233 lock (mapdot.Children)
234 partList = new List<SceneObjectPart>(mapdot.Children.Values); 234 partList = new List<SceneObjectPart>(mapdot.Children.Values);
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index f036d85..fbc8a50 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -307,7 +307,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
307 lock (m_rootAgents) 307 lock (m_rootAgents)
308 { 308 {
309 m_rootAgents.Remove(AgentId); 309 m_rootAgents.Remove(AgentId);
310 if(m_rootAgents.Count == 0) 310 if (m_rootAgents.Count == 0)
311 StopThread(); 311 StopThread();
312 } 312 }
313 } 313 }
diff --git a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs
index 3c39f9e..5e75cae 100644
--- a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs
+++ b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs
@@ -101,7 +101,8 @@ namespace OpenSim.Region.DataSnapshot.Providers
101 XmlNode parent = nodeFactory.CreateNode(XmlNodeType.Element, "objectdata", ""); 101 XmlNode parent = nodeFactory.CreateNode(XmlNodeType.Element, "objectdata", "");
102 XmlNode node; 102 XmlNode node;
103 103
104 foreach (EntityBase entity in m_scene.Entities) 104 EntityBase[] entities = m_scene.Entities.GetEntities();
105 foreach (EntityBase entity in entities)
105 { 106 {
106 // only objects, not avatars 107 // only objects, not avatars
107 if (entity is SceneObjectGroup) 108 if (entity is SceneObjectGroup)
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
index 59c035f..6a0fb63 100644
--- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
@@ -56,7 +56,7 @@ namespace OpenSim.Region.Framework.Interfaces
56 /// <param name="rot"></param> 56 /// <param name="rot"></param>
57 /// <param name="attachPos"></param> 57 /// <param name="attachPos"></param>
58 /// <param name="silent"></param> 58 /// <param name="silent"></param>
59 /// <returns>true if the object was successfully attached, false otherwise</returns> 59 /// <returns>true if the object was successfully attached, false otherwise</returns>
60 bool AttachObject( 60 bool AttachObject(
61 IClientAPI remoteClient, SceneObjectGroup grp, uint AttachmentPt, bool silent); 61 IClientAPI remoteClient, SceneObjectGroup grp, uint AttachmentPt, bool silent);
62 62
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index f5cd528..6289f7a 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -202,7 +202,7 @@ namespace OpenSim.Region.Framework.Interfaces
202 /// Backup the inventory to the given data store 202 /// Backup the inventory to the given data store
203 /// </summary> 203 /// </summary>
204 /// <param name="datastore"></param> 204 /// <param name="datastore"></param>
205 void ProcessInventoryBackup(IRegionDataStore datastore); 205 void ProcessInventoryBackup(ISimulationDataService datastore);
206 206
207 uint MaskEffectivePermissions(); 207 uint MaskEffectivePermissions();
208 208
diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs
new file mode 100644
index 0000000..95c9659
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs
@@ -0,0 +1,45 @@
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 OpenSim.Framework;
31using OpenMetaverse;
32
33namespace OpenSim.Region.Framework.Interfaces
34{
35 public interface IEstateDataService
36 {
37 EstateSettings LoadEstateSettings(UUID regionID, bool create);
38 EstateSettings LoadEstateSettings(int estateID);
39 void StoreEstateSettings(EstateSettings es);
40 List<int> GetEstates(string search);
41 bool LinkRegion(UUID regionID, int estateID);
42 List<UUID> GetRegions(int estateID);
43 bool DeleteEstate(int estateID);
44 }
45}
diff --git a/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs b/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs
index 2c091e7..4c501f6 100644
--- a/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs
@@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
65 /// Get a group 65 /// Get a group
66 /// </summary> 66 /// </summary>
67 /// <param name="GroupID">ID of the group</param> 67 /// <param name="GroupID">ID of the group</param>
68 /// <returns>The group's data. Null if there is no such group.</returns> 68 /// <returns>The group's data. Null if there is no such group.</returns>
69 GroupRecord GetGroupRecord(UUID GroupID); 69 GroupRecord GetGroupRecord(UUID GroupID);
70 70
71 void ActivateGroup(IClientAPI remoteClient, UUID groupID); 71 void ActivateGroup(IClientAPI remoteClient, UUID groupID);
@@ -74,14 +74,14 @@ namespace OpenSim.Region.Framework.Interfaces
74 List<GroupRolesData> GroupRoleDataRequest(IClientAPI remoteClient, UUID groupID); 74 List<GroupRolesData> GroupRoleDataRequest(IClientAPI remoteClient, UUID groupID);
75 List<GroupRoleMembersData> GroupRoleMembersRequest(IClientAPI remoteClient, UUID groupID); 75 List<GroupRoleMembersData> GroupRoleMembersRequest(IClientAPI remoteClient, UUID groupID);
76 GroupProfileData GroupProfileRequest(IClientAPI remoteClient, UUID groupID); 76 GroupProfileData GroupProfileRequest(IClientAPI remoteClient, UUID groupID);
77 GroupMembershipData[] GetMembershipData(UUID UserID); 77 GroupMembershipData[] GetMembershipData(UUID UserID);
78 GroupMembershipData GetMembershipData(UUID GroupID, UUID UserID); 78 GroupMembershipData GetMembershipData(UUID GroupID, UUID UserID);
79 79
80 void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish); 80 void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish);
81 81
82 void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile); 82 void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile);
83 83
84 void GroupTitleUpdate(IClientAPI remoteClient, UUID GroupID, UUID TitleRoleID); 84 void GroupTitleUpdate(IClientAPI remoteClient, UUID GroupID, UUID TitleRoleID);
85 85
86 GroupNoticeData[] GroupNoticesListRequest(IClientAPI remoteClient, UUID GroupID); 86 GroupNoticeData[] GroupNoticesListRequest(IClientAPI remoteClient, UUID GroupID);
87 string GetGroupTitle(UUID avatarID); 87 string GetGroupTitle(UUID avatarID);
diff --git a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs
index 01066e6..ddf7565 100644
--- a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs
@@ -43,14 +43,14 @@ namespace OpenSim.Region.Framework.Interfaces
43 /// <param name="reportedException">Contains the exception generated if the save did not succeed</param> 43 /// <param name="reportedException">Contains the exception generated if the save did not succeed</param>
44 public delegate void InventoryArchiveSaved( 44 public delegate void InventoryArchiveSaved(
45 Guid id, bool succeeded, UserAccount userInfo, string invPath, Stream saveStream, Exception reportedException); 45 Guid id, bool succeeded, UserAccount userInfo, string invPath, Stream saveStream, Exception reportedException);
46 46
47 public interface IInventoryArchiverModule 47 public interface IInventoryArchiverModule
48 { 48 {
49 /// <summary> 49 /// <summary>
50 /// Fired when an archive inventory save has been completed. 50 /// Fired when an archive inventory save has been completed.
51 /// </summary> 51 /// </summary>
52 event InventoryArchiveSaved OnInventoryArchiveSaved; 52 event InventoryArchiveSaved OnInventoryArchiveSaved;
53 53
54 /// <summary> 54 /// <summary>
55 /// Dearchive a user's inventory folder from the given stream 55 /// Dearchive a user's inventory folder from the given stream
56 /// </summary> 56 /// </summary>
@@ -60,7 +60,7 @@ namespace OpenSim.Region.Framework.Interfaces
60 /// <param name="loadStream">The stream from which the inventory archive will be loaded</param> 60 /// <param name="loadStream">The stream from which the inventory archive will be loaded</param>
61 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> 61 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns>
62 bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, Stream loadStream); 62 bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, Stream loadStream);
63 63
64 /// <summary> 64 /// <summary>
65 /// Dearchive a user's inventory folder from the given stream 65 /// Dearchive a user's inventory folder from the given stream
66 /// </summary> 66 /// </summary>
@@ -72,8 +72,8 @@ namespace OpenSim.Region.Framework.Interfaces
72 /// the loaded IAR with existing folders where possible.</param> 72 /// the loaded IAR with existing folders where possible.</param>
73 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> 73 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns>
74 bool DearchiveInventory( 74 bool DearchiveInventory(
75 string firstName, string lastName, string invPath, string pass, Stream loadStream, 75 string firstName, string lastName, string invPath, string pass, Stream loadStream,
76 Dictionary<string, object> options); 76 Dictionary<string, object> options);
77 77
78 /// <summary> 78 /// <summary>
79 /// Archive a user's inventory folder to the given stream 79 /// Archive a user's inventory folder to the given stream
@@ -85,7 +85,7 @@ namespace OpenSim.Region.Framework.Interfaces
85 /// <param name="saveStream">The stream to which the inventory archive will be saved</param> 85 /// <param name="saveStream">The stream to which the inventory archive will be saved</param>
86 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> 86 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns>
87 bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream); 87 bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream);
88 88
89 /// <summary> 89 /// <summary>
90 /// Archive a user's inventory folder to the given stream 90 /// Archive a user's inventory folder to the given stream
91 /// </summary> 91 /// </summary>
@@ -97,7 +97,7 @@ namespace OpenSim.Region.Framework.Interfaces
97 /// <param name="options">Archiving options. Currently, there are none.</param> 97 /// <param name="options">Archiving options. Currently, there are none.</param>
98 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> 98 /// <returns>true if the first stage of the operation succeeded, false otherwise</returns>
99 bool ArchiveInventory( 99 bool ArchiveInventory(
100 Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream, 100 Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream,
101 Dictionary<string, object> options); 101 Dictionary<string, object> options);
102 } 102 }
103} 103}
diff --git a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
index 24b6860..1d3d240 100644
--- a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
@@ -63,5 +63,5 @@ namespace OpenSim.Region.Framework.Interfaces
63 /// <param name="part"></param> 63 /// <param name="part"></param>
64 /// <param name="face">/param> 64 /// <param name="face">/param>
65 void ClearMediaEntry(SceneObjectPart part, int face); 65 void ClearMediaEntry(SceneObjectPart part, int face);
66 } 66 }
67} \ No newline at end of file 67} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs
index e7562a5..18758c8 100644
--- a/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs
@@ -90,7 +90,7 @@ namespace OpenSim.Region.Framework.Interfaces
90 /// </summary> 90 /// </summary>
91 /// <param name="entityList"></param> 91 /// <param name="entityList"></param>
92 /// <param name="fileName"></param> 92 /// <param name="fileName"></param>
93 void SavePrimListToXml2(List<EntityBase> entityList, string fileName); 93 void SavePrimListToXml2(EntityBase[] entityList, string fileName);
94 94
95 /// <summary> 95 /// <summary>
96 /// Save a set of prims in the xml2 format, optionally specifying a bounding box for which 96 /// Save a set of prims in the xml2 format, optionally specifying a bounding box for which
@@ -101,7 +101,7 @@ namespace OpenSim.Region.Framework.Interfaces
101 /// <param name="stream"></param> 101 /// <param name="stream"></param>
102 /// <param name="min"></param> 102 /// <param name="min"></param>
103 /// <param name="max"></param> 103 /// <param name="max"></param>
104 void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, Vector3 min, Vector3 max); 104 void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max);
105 105
106 void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName); 106 void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName);
107 107
diff --git a/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs
new file mode 100644
index 0000000..edaa07c
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs
@@ -0,0 +1,98 @@
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 OpenSim.Framework;
32using OpenSim.Region.Framework.Scenes;
33
34namespace OpenSim.Region.Framework.Interfaces
35{
36 public interface ISimulationDataService
37 {
38 /// <summary>
39 /// Stores all object's details apart from inventory
40 /// </summary>
41 /// <param name="obj"></param>
42 /// <param name="regionUUID"></param>
43 void StoreObject(SceneObjectGroup obj, UUID regionUUID);
44
45 /// <summary>
46 /// Entirely removes the object, including inventory
47 /// </summary>
48 /// <param name="uuid"></param>
49 /// <param name="regionUUID"></param>
50 /// <returns></returns>
51 void RemoveObject(UUID uuid, UUID regionUUID);
52
53 /// <summary>
54 /// Store a prim's inventory
55 /// </summary>
56 /// <returns></returns>
57 void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items);
58
59 /// <summary>
60 /// Load persisted objects from region storage.
61 /// </summary>
62 /// <param name="regionUUID">the Region UUID</param>
63 /// <returns>List of loaded groups</returns>
64 List<SceneObjectGroup> LoadObjects(UUID regionUUID);
65
66 /// <summary>
67 /// Store a terrain revision in region storage
68 /// </summary>
69 /// <param name="ter">HeightField data</param>
70 /// <param name="regionID">region UUID</param>
71 void StoreTerrain(double[,] terrain, UUID regionID);
72
73 /// <summary>
74 /// Load the latest terrain revision from region storage
75 /// </summary>
76 /// <param name="regionID">the region UUID</param>
77 /// <returns>Heightfield data</returns>
78 double[,] LoadTerrain(UUID regionID);
79
80 void StoreLandObject(ILandObject Parcel);
81
82 /// <summary>
83 /// <list type="bullet">
84 /// <item>delete from land where UUID=globalID</item>
85 /// <item>delete from landaccesslist where LandUUID=globalID</item>
86 /// </list>
87 /// </summary>
88 /// <param name="globalID"></param>
89 void RemoveLandObject(UUID globalID);
90
91 List<LandData> LoadLandObjects(UUID regionUUID);
92
93 void StoreRegionSettings(RegionSettings rs);
94 RegionSettings LoadRegionSettings(UUID regionUUID);
95 RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID);
96 void StoreRegionWindlightSettings(RegionLightShareData wl);
97 }
98}
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs
index 3e8e196..0a4d531 100644
--- a/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs
+++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs
@@ -32,7 +32,7 @@ using OpenSim.Region.Framework.Scenes;
32 32
33namespace OpenSim.Region.Framework.Interfaces 33namespace OpenSim.Region.Framework.Interfaces
34{ 34{
35 public interface IRegionDataStore 35 public interface ISimulationDataStore
36 { 36 {
37 /// <summary> 37 /// <summary>
38 /// Initialises the data storage engine 38 /// Initialises the data storage engine
diff --git a/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs b/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs
index d6e31f4..65c57a6 100644
--- a/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs
@@ -31,7 +31,7 @@ namespace OpenSim.Region.Framework.Interfaces
31 { 31 {
32 /// <summary> 32 /// <summary>
33 /// Generate a map tile for the scene. a terrain texture for this scene 33 /// Generate a map tile for the scene. a terrain texture for this scene
34 /// </summary> 34 /// </summary>
35 void GenerateMaptile(); 35 void GenerateMaptile();
36 } 36 }
37} 37}
diff --git a/OpenSim/Region/Framework/Scenes/EntityManager.cs b/OpenSim/Region/Framework/Scenes/EntityManager.cs
index c246e32..0defa93 100644
--- a/OpenSim/Region/Framework/Scenes/EntityManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EntityManager.cs
@@ -34,227 +34,89 @@ using OpenMetaverse;
34 34
35namespace OpenSim.Region.Framework.Scenes 35namespace OpenSim.Region.Framework.Scenes
36{ 36{
37 public class EntityManager : IEnumerable<EntityBase> 37 public class EntityManager
38 { 38 {
39 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 39 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
40 private readonly Dictionary<UUID,EntityBase> m_eb_uuid = new Dictionary<UUID, EntityBase>(); 40 private readonly DoubleDictionary<UUID, uint, EntityBase> m_entities = new DoubleDictionary<UUID, uint, EntityBase>();
41 private readonly Dictionary<uint, EntityBase> m_eb_localID = new Dictionary<uint, EntityBase>();
42 //private readonly Dictionary<UUID, ScenePresence> m_pres_uuid = new Dictionary<UUID, ScenePresence>();
43 private System.Threading.ReaderWriterLockSlim m_lock = new System.Threading.ReaderWriterLockSlim();
44 41
45 [Obsolete("Use Add() instead.")] 42 public int Count
46 public void Add(UUID id, EntityBase eb)
47 { 43 {
48 Add(eb); 44 get { return m_entities.Count; }
49 } 45 }
50 46
51 public void Add(EntityBase entity) 47 public void Add(EntityBase entity)
52 { 48 {
53 m_lock.EnterWriteLock(); 49 m_entities.Add(entity.UUID, entity.LocalId, entity);
54 try
55 {
56 try
57 {
58 m_eb_uuid.Add(entity.UUID, entity);
59 m_eb_localID.Add(entity.LocalId, entity);
60 }
61 catch(Exception e)
62 {
63 m_log.ErrorFormat("Add Entity failed: {0}", e.Message);
64 }
65 }
66 finally
67 {
68 m_lock.ExitWriteLock();
69 }
70 }
71
72 public void InsertOrReplace(EntityBase entity)
73 {
74 m_lock.EnterWriteLock();
75 try
76 {
77 try
78 {
79 m_eb_uuid[entity.UUID] = entity;
80 m_eb_localID[entity.LocalId] = entity;
81 }
82 catch(Exception e)
83 {
84 m_log.ErrorFormat("Insert or Replace Entity failed: {0}", e.Message);
85 }
86 }
87 finally
88 {
89 m_lock.ExitWriteLock();
90 }
91 } 50 }
92 51
93 public void Clear() 52 public void Clear()
94 { 53 {
95 m_lock.EnterWriteLock(); 54 m_entities.Clear();
96 try
97 {
98 m_eb_uuid.Clear();
99 m_eb_localID.Clear();
100 }
101 finally
102 {
103 m_lock.ExitWriteLock();
104 }
105 }
106
107 public int Count
108 {
109 get
110 {
111 return m_eb_uuid.Count;
112 }
113 } 55 }
114 56
115 public bool ContainsKey(UUID id) 57 public bool ContainsKey(UUID id)
116 { 58 {
117 try 59 return m_entities.ContainsKey(id);
118 {
119 return m_eb_uuid.ContainsKey(id);
120 }
121 catch
122 {
123 return false;
124 }
125 } 60 }
126 61
127 public bool ContainsKey(uint localID) 62 public bool ContainsKey(uint localID)
128 { 63 {
129 try 64 return m_entities.ContainsKey(localID);
130 {
131 return m_eb_localID.ContainsKey(localID);
132 }
133 catch
134 {
135 return false;
136 }
137 } 65 }
138 66
139 public bool Remove(uint localID) 67 public bool Remove(uint localID)
140 { 68 {
141 m_lock.EnterWriteLock(); 69 return m_entities.Remove(localID);
142 try
143 {
144 try
145 {
146 bool a = false;
147 EntityBase entity;
148 if (m_eb_localID.TryGetValue(localID, out entity))
149 a = m_eb_uuid.Remove(entity.UUID);
150
151 bool b = m_eb_localID.Remove(localID);
152 return a && b;
153 }
154 catch (Exception e)
155 {
156 m_log.ErrorFormat("Remove Entity failed for {0}", localID, e);
157 return false;
158 }
159 }
160 finally
161 {
162 m_lock.ExitWriteLock();
163 }
164 } 70 }
165 71
166 public bool Remove(UUID id) 72 public bool Remove(UUID id)
167 { 73 {
168 m_lock.EnterWriteLock(); 74 return m_entities.Remove(id);
169 try
170 {
171 try
172 {
173 bool a = false;
174 EntityBase entity;
175 if (m_eb_uuid.TryGetValue(id, out entity))
176 a = m_eb_localID.Remove(entity.LocalId);
177
178 bool b = m_eb_uuid.Remove(id);
179 return a && b;
180 }
181 catch (Exception e)
182 {
183 m_log.ErrorFormat("Remove Entity failed for {0}", id, e);
184 return false;
185 }
186 }
187 finally
188 {
189 m_lock.ExitWriteLock();
190 }
191 } 75 }
192 76
193 public List<EntityBase> GetAllByType<T>() 77 public EntityBase[] GetAllByType<T>()
194 { 78 {
195 List<EntityBase> tmp = new List<EntityBase>(); 79 List<EntityBase> tmp = new List<EntityBase>();
196 80
197 m_lock.EnterReadLock(); 81 m_entities.ForEach(
198 try 82 delegate(EntityBase entity)
199 {
200 try
201 {
202 foreach (KeyValuePair<UUID, EntityBase> pair in m_eb_uuid)
203 {
204 if (pair.Value is T)
205 {
206 tmp.Add(pair.Value);
207 }
208 }
209 }
210 catch (Exception e)
211 { 83 {
212 m_log.ErrorFormat("GetAllByType failed for {0}", e); 84 if (entity is T)
213 tmp = null; 85 tmp.Add(entity);
214 } 86 }
215 } 87 );
216 finally
217 {
218 m_lock.ExitReadLock();
219 }
220 88
221 return tmp; 89 return tmp.ToArray();
222 } 90 }
223 91
224 public List<EntityBase> GetEntities() 92 public EntityBase[] GetEntities()
225 { 93 {
226 m_lock.EnterReadLock(); 94 List<EntityBase> tmp = new List<EntityBase>(m_entities.Count);
227 try 95 m_entities.ForEach(delegate(EntityBase entity) { tmp.Add(entity); });
228 { 96 return tmp.ToArray();
229 return new List<EntityBase>(m_eb_uuid.Values); 97 }
230 } 98
231 finally 99 public void ForEach(Action<EntityBase> action)
232 { 100 {
233 m_lock.ExitReadLock(); 101 m_entities.ForEach(action);
234 } 102 }
103
104 public EntityBase Find(Predicate<EntityBase> predicate)
105 {
106 return m_entities.FindValue(predicate);
235 } 107 }
236 108
237 public EntityBase this[UUID id] 109 public EntityBase this[UUID id]
238 { 110 {
239 get 111 get
240 { 112 {
241 m_lock.EnterReadLock(); 113 EntityBase entity;
242 try 114 m_entities.TryGetValue(id, out entity);
243 { 115 return entity;
244 EntityBase entity;
245 if (m_eb_uuid.TryGetValue(id, out entity))
246 return entity;
247 else
248 return null;
249 }
250 finally
251 {
252 m_lock.ExitReadLock();
253 }
254 } 116 }
255 set 117 set
256 { 118 {
257 InsertOrReplace(value); 119 Add(value);
258 } 120 }
259 } 121 }
260 122
@@ -262,65 +124,24 @@ namespace OpenSim.Region.Framework.Scenes
262 { 124 {
263 get 125 get
264 { 126 {
265 m_lock.EnterReadLock(); 127 EntityBase entity;
266 try 128 m_entities.TryGetValue(localID, out entity);
267 { 129 return entity;
268 EntityBase entity;
269 if (m_eb_localID.TryGetValue(localID, out entity))
270 return entity;
271 else
272 return null;
273 }
274 finally
275 {
276 m_lock.ExitReadLock();
277 }
278 } 130 }
279 set 131 set
280 { 132 {
281 InsertOrReplace(value); 133 Add(value);
282 } 134 }
283 } 135 }
284 136
285 public bool TryGetValue(UUID key, out EntityBase obj) 137 public bool TryGetValue(UUID key, out EntityBase obj)
286 { 138 {
287 m_lock.EnterReadLock(); 139 return m_entities.TryGetValue(key, out obj);
288 try
289 {
290 return m_eb_uuid.TryGetValue(key, out obj);
291 }
292 finally
293 {
294 m_lock.ExitReadLock();
295 }
296 } 140 }
297 141
298 public bool TryGetValue(uint key, out EntityBase obj) 142 public bool TryGetValue(uint key, out EntityBase obj)
299 { 143 {
300 m_lock.EnterReadLock(); 144 return m_entities.TryGetValue(key, out obj);
301 try
302 {
303 return m_eb_localID.TryGetValue(key, out obj);
304 }
305 finally
306 {
307 m_lock.ExitReadLock();
308 }
309 }
310
311 /// <summary>
312 /// This could be optimised to work on the list 'live' rather than making a safe copy and iterating that.
313 /// </summary>
314 /// <returns></returns>
315 public IEnumerator<EntityBase> GetEnumerator()
316 {
317 return GetEntities().GetEnumerator();
318 }
319
320 IEnumerator IEnumerable.GetEnumerator()
321 {
322 return GetEnumerator();
323 } 145 }
324
325 } 146 }
326} 147}
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 3fae5e6..e923932 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -61,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes
61 61
62 public event OnTerrainUpdateDelegate OnTerrainUpdate; 62 public event OnTerrainUpdateDelegate OnTerrainUpdate;
63 63
64 public delegate void OnBackupDelegate(IRegionDataStore datastore, bool forceBackup); 64 public delegate void OnBackupDelegate(ISimulationDataService datastore, bool forceBackup);
65 65
66 public event OnBackupDelegate OnBackup; 66 public event OnBackupDelegate OnBackup;
67 67
@@ -336,7 +336,7 @@ namespace OpenSim.Region.Framework.Scenes
336 /// If the object is being attached, then the avatarID will be present. If the object is being detached then 336 /// If the object is being attached, then the avatarID will be present. If the object is being detached then
337 /// the avatarID is UUID.Zero (I know, this doesn't make much sense but now it's historical). 337 /// the avatarID is UUID.Zero (I know, this doesn't make much sense but now it's historical).
338 public delegate void Attach(uint localID, UUID itemID, UUID avatarID); 338 public delegate void Attach(uint localID, UUID itemID, UUID avatarID);
339 public event Attach OnAttach; 339 public event Attach OnAttach;
340 340
341 /// <summary> 341 /// <summary>
342 /// Called immediately after an object is loaded from storage. 342 /// Called immediately after an object is loaded from storage.
@@ -348,7 +348,7 @@ namespace OpenSim.Region.Framework.Scenes
348 /// Called immediately before an object is saved to storage. 348 /// Called immediately before an object is saved to storage.
349 /// </summary> 349 /// </summary>
350 /// <param name="persistingSo"> 350 /// <param name="persistingSo">
351 /// The scene object being persisted. 351 /// The scene object being persisted.
352 /// This is actually a copy of the original scene object so changes made here will be saved to storage but will not be kept in memory. 352 /// This is actually a copy of the original scene object so changes made here will be saved to storage but will not be kept in memory.
353 /// </param> 353 /// </param>
354 /// <param name="originalSo"> 354 /// <param name="originalSo">
@@ -367,7 +367,7 @@ namespace OpenSim.Region.Framework.Scenes
367 public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original, bool userExposed); 367 public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original, bool userExposed);
368 368
369 public delegate void RegionUp(GridRegion region); 369 public delegate void RegionUp(GridRegion region);
370 public event RegionUp OnRegionUp; 370 public event RegionUp OnRegionUp;
371 371
372 public class MoneyTransferArgs : EventArgs 372 public class MoneyTransferArgs : EventArgs
373 { 373 {
@@ -688,7 +688,7 @@ namespace OpenSim.Region.Framework.Scenes
688 } 688 }
689 } 689 }
690 690
691 public void TriggerOnBackup(IRegionDataStore dstore, bool forced) 691 public void TriggerOnBackup(ISimulationDataService dstore, bool forced)
692 { 692 {
693 OnBackupDelegate handlerOnAttach = OnBackup; 693 OnBackupDelegate handlerOnAttach = OnBackup;
694 if (handlerOnAttach != null) 694 if (handlerOnAttach != null)
@@ -2087,7 +2087,7 @@ namespace OpenSim.Region.Framework.Scenes
2087 } 2087 }
2088 } 2088 }
2089 } 2089 }
2090 } 2090 }
2091 2091
2092 public void TriggerOnSceneObjectPreSave(SceneObjectGroup persistingSo, SceneObjectGroup originalSo) 2092 public void TriggerOnSceneObjectPreSave(SceneObjectGroup persistingSo, SceneObjectGroup originalSo)
2093 { 2093 {
@@ -2129,7 +2129,7 @@ namespace OpenSim.Region.Framework.Scenes
2129 } 2129 }
2130 } 2130 }
2131 } 2131 }
2132 } 2132 }
2133 2133
2134 public void TriggerOnParcelPropertiesUpdateRequest(LandUpdateArgs args, 2134 public void TriggerOnParcelPropertiesUpdateRequest(LandUpdateArgs args,
2135 int local_id, IClientAPI remote_client) 2135 int local_id, IClientAPI remote_client)
@@ -2151,6 +2151,6 @@ namespace OpenSim.Region.Framework.Scenes
2151 } 2151 }
2152 } 2152 }
2153 } 2153 }
2154 } 2154 }
2155 } 2155 }
2156} 2156}
diff --git a/OpenSim/Region/Framework/Scenes/Prioritizer.cs b/OpenSim/Region/Framework/Scenes/Prioritizer.cs
index 3a3ec2b..c75f8ba 100644
--- a/OpenSim/Region/Framework/Scenes/Prioritizer.cs
+++ b/OpenSim/Region/Framework/Scenes/Prioritizer.cs
@@ -1,3 +1,30 @@
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
1using System; 28using System;
2using System.Collections.Generic; 29using System.Collections.Generic;
3using log4net; 30using log4net;
@@ -35,7 +62,7 @@ namespace OpenSim.Region.Framework.Scenes
35 62
36 /// <summary> 63 /// <summary>
37 /// This is added to the priority of all child prims, to make sure that the root prim update is sent to the 64 /// This is added to the priority of all child prims, to make sure that the root prim update is sent to the
38 /// viewer before child prim updates. 65 /// viewer before child prim updates.
39 /// The adjustment is added to child prims and subtracted from root prims, so the gap ends up 66 /// The adjustment is added to child prims and subtracted from root prims, so the gap ends up
40 /// being double. We do it both ways so that there is a still a priority delta even if the priority is already 67 /// being double. We do it both ways so that there is a still a priority delta even if the priority is already
41 /// double.MinValue or double.MaxValue. 68 /// double.MinValue or double.MaxValue.
@@ -123,9 +150,9 @@ namespace OpenSim.Region.Framework.Scenes
123 if (entity is SceneObjectPart) 150 if (entity is SceneObjectPart)
124 { 151 {
125 // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene 152 // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene
126 // before its scheduled update was triggered 153 // before its scheduled update was triggered
127 //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; 154 //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition;
128 entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition; 155 entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition;
129 } 156 }
130 else 157 else
131 { 158 {
@@ -152,15 +179,10 @@ namespace OpenSim.Region.Framework.Scenes
152 Vector3 entityPos = entity.AbsolutePosition; 179 Vector3 entityPos = entity.AbsolutePosition;
153 if (entity is SceneObjectPart) 180 if (entity is SceneObjectPart)
154 { 181 {
155 SceneObjectGroup group = m_scene.GetGroupByPrim(entity.LocalId); 182 // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene
156 if (group == null) 183 // before its scheduled update was triggered
157 { 184 //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition;
158 entityPos = entity.AbsolutePosition; 185 entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition;
159 }
160 else
161 {
162 entityPos = group.AbsolutePosition;
163 }
164 } 186 }
165 else 187 else
166 { 188 {
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index ccbd880..867fb10 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -58,7 +58,8 @@ namespace OpenSim.Region.Framework.Scenes
58 { 58 {
59 m_log.Info("[PRIM INVENTORY]: Starting scripts in scene"); 59 m_log.Info("[PRIM INVENTORY]: Starting scripts in scene");
60 60
61 foreach (EntityBase group in Entities) 61 EntityBase[] entities = Entities.GetEntities();
62 foreach (EntityBase group in entities)
62 { 63 {
63 if (group is SceneObjectGroup) 64 if (group is SceneObjectGroup)
64 { 65 {
@@ -132,7 +133,7 @@ namespace OpenSim.Region.Framework.Scenes
132 item.Owner, item.Name, item.ID); 133 item.Owner, item.Name, item.ID);
133 134
134 return false; 135 return false;
135 } 136 }
136 } 137 }
137 138
138 /// <summary> 139 /// <summary>
@@ -1987,7 +1988,7 @@ namespace OpenSim.Region.Framework.Scenes
1987 return null; 1988 return null;
1988 1989
1989 if (!Permissions.CanRezObject(group.PrimCount, item.OwnerID, pos)) 1990 if (!Permissions.CanRezObject(group.PrimCount, item.OwnerID, pos))
1990 return null; 1991 return null;
1991 1992
1992 if (!Permissions.BypassPermissions()) 1993 if (!Permissions.BypassPermissions())
1993 { 1994 {
@@ -2065,7 +2066,7 @@ namespace OpenSim.Region.Framework.Scenes
2065 2066
2066 List<SceneObjectPart> partList = null; 2067 List<SceneObjectPart> partList = null;
2067 lock (sog.Children) 2068 lock (sog.Children)
2068 partList = new List<SceneObjectPart>(sog.Children.Values); 2069 partList = new List<SceneObjectPart>(sog.Children.Values);
2069 2070
2070 foreach (SceneObjectPart child in partList) 2071 foreach (SceneObjectPart child in partList)
2071 child.Inventory.ChangeInventoryOwner(ownerID); 2072 child.Inventory.ChangeInventoryOwner(ownerID);
@@ -2080,7 +2081,7 @@ namespace OpenSim.Region.Framework.Scenes
2080 2081
2081 List<SceneObjectPart> partList = null; 2082 List<SceneObjectPart> partList = null;
2082 lock (sog.Children) 2083 lock (sog.Children)
2083 partList = new List<SceneObjectPart>(sog.Children.Values); 2084 partList = new List<SceneObjectPart>(sog.Children.Values);
2084 2085
2085 foreach (SceneObjectPart child in partList) 2086 foreach (SceneObjectPart child in partList)
2086 { 2087 {
@@ -2090,7 +2091,7 @@ namespace OpenSim.Region.Framework.Scenes
2090 2091
2091 sog.SetOwnerId(groupID); 2092 sog.SetOwnerId(groupID);
2092 sog.ApplyNextOwnerPermissions(); 2093 sog.ApplyNextOwnerPermissions();
2093 } 2094 }
2094 } 2095 }
2095 2096
2096 foreach (uint localID in localIDs) 2097 foreach (uint localID in localIDs)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index c511774..7788e43 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -116,9 +116,8 @@ namespace OpenSim.Region.Framework.Scenes
116 /// <param name="remoteClient"></param> 116 /// <param name="remoteClient"></param>
117 public void RequestPrim(uint primLocalID, IClientAPI remoteClient) 117 public void RequestPrim(uint primLocalID, IClientAPI remoteClient)
118 { 118 {
119 List<EntityBase> EntityList = GetEntities(); 119 EntityBase[] entityList = GetEntities();
120 120 foreach (EntityBase ent in entityList)
121 foreach (EntityBase ent in EntityList)
122 { 121 {
123 if (ent is SceneObjectGroup) 122 if (ent is SceneObjectGroup)
124 { 123 {
@@ -138,9 +137,8 @@ namespace OpenSim.Region.Framework.Scenes
138 /// <param name="remoteClient"></param> 137 /// <param name="remoteClient"></param>
139 public void SelectPrim(uint primLocalID, IClientAPI remoteClient) 138 public void SelectPrim(uint primLocalID, IClientAPI remoteClient)
140 { 139 {
141 List<EntityBase> EntityList = GetEntities(); 140 EntityBase[] entityList = GetEntities();
142 141 foreach (EntityBase ent in entityList)
143 foreach (EntityBase ent in EntityList)
144 { 142 {
145 if (ent is SceneObjectGroup) 143 if (ent is SceneObjectGroup)
146 { 144 {
@@ -166,7 +164,7 @@ namespace OpenSim.Region.Framework.Scenes
166 164
167 List<SceneObjectPart> partList = null; 165 List<SceneObjectPart> partList = null;
168 lock (sog.Children) 166 lock (sog.Children)
169 partList = new List<SceneObjectPart>(sog.Children.Values); 167 partList = new List<SceneObjectPart>(sog.Children.Values);
170 168
171 foreach (SceneObjectPart part in partList) 169 foreach (SceneObjectPart part in partList)
172 { 170 {
@@ -259,7 +257,7 @@ namespace OpenSim.Region.Framework.Scenes
259 257
260 public virtual void ProcessObjectGrab(uint localID, Vector3 offsetPos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) 258 public virtual void ProcessObjectGrab(uint localID, Vector3 offsetPos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs)
261 { 259 {
262 List<EntityBase> EntityList = GetEntities(); 260 EntityBase[] EntityList = GetEntities();
263 261
264 SurfaceTouchEventArgs surfaceArg = null; 262 SurfaceTouchEventArgs surfaceArg = null;
265 if (surfaceArgs != null && surfaceArgs.Count > 0) 263 if (surfaceArgs != null && surfaceArgs.Count > 0)
@@ -303,7 +301,7 @@ namespace OpenSim.Region.Framework.Scenes
303 301
304 public virtual void ProcessObjectGrabUpdate(UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) 302 public virtual void ProcessObjectGrabUpdate(UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs)
305 { 303 {
306 List<EntityBase> EntityList = GetEntities(); 304 EntityBase[] EntityList = GetEntities();
307 305
308 SurfaceTouchEventArgs surfaceArg = null; 306 SurfaceTouchEventArgs surfaceArg = null;
309 if (surfaceArgs != null && surfaceArgs.Count > 0) 307 if (surfaceArgs != null && surfaceArgs.Count > 0)
@@ -343,7 +341,7 @@ namespace OpenSim.Region.Framework.Scenes
343 341
344 public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) 342 public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs)
345 { 343 {
346 List<EntityBase> EntityList = GetEntities(); 344 EntityBase[] EntityList = GetEntities();
347 345
348 SurfaceTouchEventArgs surfaceArg = null; 346 SurfaceTouchEventArgs surfaceArg = null;
349 if (surfaceArgs != null && surfaceArgs.Count > 0) 347 if (surfaceArgs != null && surfaceArgs.Count > 0)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
index 4e80bf2..06890a0 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
@@ -997,6 +997,6 @@ namespace OpenSim.Region.Framework.Scenes
997 } 997 }
998 } 998 }
999 return true; 999 return true;
1000 } 1000 }
1001 } 1001 }
1002} \ No newline at end of file 1002} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index be342ab..0e1b4b1 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -57,55 +57,21 @@ namespace OpenSim.Region.Framework.Scenes
57 57
58 public partial class Scene : SceneBase 58 public partial class Scene : SceneBase
59 { 59 {
60 public delegate void SynchronizeSceneHandler(Scene scene);
61 public SynchronizeSceneHandler SynchronizeScene = null;
62
63 /* Used by the loadbalancer plugin on GForge */
64 protected int m_splitRegionID = 0;
65 public int SplitRegionID
66 {
67 get { return m_splitRegionID; }
68 set { m_splitRegionID = value; }
69 }
70
71 private const long DEFAULT_MIN_TIME_FOR_PERSISTENCE = 60L; 60 private const long DEFAULT_MIN_TIME_FOR_PERSISTENCE = 60L;
72 private const long DEFAULT_MAX_TIME_FOR_PERSISTENCE = 600L; 61 private const long DEFAULT_MAX_TIME_FOR_PERSISTENCE = 600L;
73 62
74 #region Fields 63 public delegate void SynchronizeSceneHandler(Scene scene);
75 64
76 protected Timer m_restartWaitTimer = new Timer(); 65 #region Fields
77 66
67 public SynchronizeSceneHandler SynchronizeScene;
78 public SimStatsReporter StatsReporter; 68 public SimStatsReporter StatsReporter;
79
80 protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>();
81 protected List<RegionInfo> m_neighbours = new List<RegionInfo>();
82
83 private volatile int m_bordersLocked = 0;
84 public bool BordersLocked
85 {
86 get { return m_bordersLocked == 1; }
87 set
88 {
89 if (value == true)
90 m_bordersLocked = 1;
91 else
92 m_bordersLocked = 0;
93 }
94 }
95 public List<Border> NorthBorders = new List<Border>(); 69 public List<Border> NorthBorders = new List<Border>();
96 public List<Border> EastBorders = new List<Border>(); 70 public List<Border> EastBorders = new List<Border>();
97 public List<Border> SouthBorders = new List<Border>(); 71 public List<Border> SouthBorders = new List<Border>();
98 public List<Border> WestBorders = new List<Border>(); 72 public List<Border> WestBorders = new List<Border>();
99 73
100 /// <value> 74 /// <summary>Are we applying physics to any of the prims in this scene?</summary>
101 /// The scene graph for this scene
102 /// </value>
103 /// TODO: Possibly stop other classes being able to manipulate this directly.
104 private SceneGraph m_sceneGraph;
105
106 /// <summary>
107 /// Are we applying physics to any of the prims in this scene?
108 /// </summary>
109 public bool m_physicalPrim; 75 public bool m_physicalPrim;
110 public float m_maxNonphys = 256; 76 public float m_maxNonphys = 256;
111 public float m_maxPhys = 10; 77 public float m_maxPhys = 10;
@@ -119,25 +85,131 @@ namespace OpenSim.Region.Framework.Scenes
119 // root agents when ACL denies access to root agent 85 // root agents when ACL denies access to root agent
120 public bool m_strictAccessControl = true; 86 public bool m_strictAccessControl = true;
121 public int MaxUndoCount = 5; 87 public int MaxUndoCount = 5;
88 public bool LoginsDisabled = true;
89 public bool LoadingPrims;
90 public IXfer XferManager;
91
92 // the minimum time that must elapse before a changed object will be considered for persisted
93 public long m_dontPersistBefore = DEFAULT_MIN_TIME_FOR_PERSISTENCE * 10000000L;
94 // the maximum time that must elapse before a changed object will be considered for persisted
95 public long m_persistAfter = DEFAULT_MAX_TIME_FOR_PERSISTENCE * 10000000L;
96
97 protected int m_splitRegionID;
98 protected Timer m_restartWaitTimer = new Timer();
99 protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>();
100 protected List<RegionInfo> m_neighbours = new List<RegionInfo>();
101 protected string m_simulatorVersion = "OpenSimulator Server";
102 protected ModuleLoader m_moduleLoader;
103 protected AgentCircuitManager m_authenticateHandler;
104 protected SceneCommunicationService m_sceneGridService;
105 protected ISnmpModule m_snmpService = null;
106
107 protected ISimulationDataService m_SimulationDataService;
108 protected IEstateDataService m_EstateDataService;
109 protected IAssetService m_AssetService;
110 protected IAuthorizationService m_AuthorizationService;
111 protected IInventoryService m_InventoryService;
112 protected IGridService m_GridService;
113 protected ILibraryService m_LibraryService;
114 protected ISimulationService m_simulationService;
115 protected IAuthenticationService m_AuthenticationService;
116 protected IPresenceService m_PresenceService;
117 protected IUserAccountService m_UserAccountService;
118 protected IAvatarService m_AvatarService;
119 protected IGridUserService m_GridUserService;
120
121 protected IXMLRPC m_xmlrpcModule;
122 protected IWorldComm m_worldCommModule;
123 protected IAvatarFactory m_AvatarFactory;
124 protected IConfigSource m_config;
125 protected IRegionSerialiserModule m_serialiser;
126 protected IDialogModule m_dialogModule;
127 protected IEntityTransferModule m_teleportModule;
128 protected ICapabilitiesModule m_capsModule;
129 // Central Update Loop
130 protected int m_fps = 10;
131 protected uint m_frame;
132 protected float m_timespan = 0.089f;
133 protected DateTime m_lastupdate = DateTime.UtcNow;
134
135 // TODO: Possibly stop other classes being able to manipulate this directly.
136 private SceneGraph m_sceneGraph;
137 private volatile int m_bordersLocked;
122 private int m_RestartTimerCounter; 138 private int m_RestartTimerCounter;
123 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing 139 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
124 private int m_incrementsof15seconds; 140 private int m_incrementsof15seconds;
125 private volatile bool m_backingup; 141 private volatile bool m_backingup;
126
127 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>(); 142 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>();
128 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>(); 143 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>();
144 private Object m_heartbeatLock = new Object();
129 145
130 protected string m_simulatorVersion = "OpenSimulator Server"; 146 private int m_update_physics = 1;
147 private int m_update_entitymovement = 1;
148 private int m_update_objects = 1; // Update objects which have scheduled themselves for updates
149 private int m_update_presences = 1; // Update scene presence movements
150 private int m_update_events = 1;
151 private int m_update_backup = 200;
152 private int m_update_terrain = 50;
153 private int m_update_land = 1;
154 private int m_update_coarse_locations = 50;
131 155
132 protected ModuleLoader m_moduleLoader; 156 private int frameMS;
133 protected StorageManager m_storageManager; 157 private int physicsMS2;
134 protected AgentCircuitManager m_authenticateHandler; 158 private int physicsMS;
159 private int otherMS;
160 private int tempOnRezMS;
161 private int eventMS;
162 private int backupMS;
163 private int terrainMS;
164 private int landMS;
165 private int lastCompletedFrame;
135 166
136 protected SceneCommunicationService m_sceneGridService;
137 public bool LoginsDisabled = true;
138 public bool LoadingPrims = false;
139 public bool CombineRegions = false; 167 public bool CombineRegions = false;
168 private bool m_physics_enabled = true;
169 private bool m_scripts_enabled = true;
170 private string m_defaultScriptEngine;
171 private int m_LastLogin;
172 private Thread HeartbeatThread;
173 private volatile bool shuttingdown;
174
175 private int m_lastUpdate;
176 private bool m_firstHeartbeat = true;
177
178 private object m_deleting_scene_object = new object();
179 private object m_cleaningAttachments = new object();
180
181 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
182 private bool m_reprioritizationEnabled = true;
183 private double m_reprioritizationInterval = 5000.0;
184 private double m_rootReprioritizationDistance = 10.0;
185 private double m_childReprioritizationDistance = 20.0;
186
187 private Timer m_mapGenerationTimer = new Timer();
188 private bool m_generateMaptiles;
189
190 #endregion Fields
140 191
192 #region Properties
193
194 /* Used by the loadbalancer plugin on GForge */
195 public int SplitRegionID
196 {
197 get { return m_splitRegionID; }
198 set { m_splitRegionID = value; }
199 }
200
201 public bool BordersLocked
202 {
203 get { return m_bordersLocked == 1; }
204 set
205 {
206 if (value == true)
207 m_bordersLocked = 1;
208 else
209 m_bordersLocked = 0;
210 }
211 }
212
141 public new float TimeDilation 213 public new float TimeDilation
142 { 214 {
143 get { return m_sceneGraph.PhysicsScene.TimeDilation; } 215 get { return m_sceneGraph.PhysicsScene.TimeDilation; }
@@ -148,9 +220,6 @@ namespace OpenSim.Region.Framework.Scenes
148 get { return m_sceneGridService; } 220 get { return m_sceneGridService; }
149 } 221 }
150 222
151 public IXfer XferManager;
152
153 protected ISnmpModule m_snmpService = null;
154 public ISnmpModule SnmpService 223 public ISnmpModule SnmpService
155 { 224 {
156 get 225 get
@@ -164,10 +233,41 @@ namespace OpenSim.Region.Framework.Scenes
164 } 233 }
165 } 234 }
166 235
167 protected IAssetService m_AssetService; 236 public ISimulationDataService SimulationDataService
168 protected IAuthorizationService m_AuthorizationService; 237 {
238 get
239 {
240 if (m_SimulationDataService == null)
241 {
242 m_SimulationDataService = RequestModuleInterface<ISimulationDataService>();
169 243
170 private Object m_heartbeatLock = new Object(); 244 if (m_SimulationDataService == null)
245 {
246 throw new Exception("No ISimulationDataService available.");
247 }
248 }
249
250 return m_SimulationDataService;
251 }
252 }
253
254 public IEstateDataService EstateDataService
255 {
256 get
257 {
258 if (m_EstateDataService == null)
259 {
260 m_EstateDataService = RequestModuleInterface<IEstateDataService>();
261
262 if (m_EstateDataService == null)
263 {
264 throw new Exception("No IEstateDataService available.");
265 }
266 }
267
268 return m_EstateDataService;
269 }
270 }
171 271
172 public IAssetService AssetService 272 public IAssetService AssetService
173 { 273 {
@@ -206,8 +306,6 @@ namespace OpenSim.Region.Framework.Scenes
206 } 306 }
207 } 307 }
208 308
209 protected IInventoryService m_InventoryService;
210
211 public IInventoryService InventoryService 309 public IInventoryService InventoryService
212 { 310 {
213 get 311 get
@@ -226,8 +324,6 @@ namespace OpenSim.Region.Framework.Scenes
226 } 324 }
227 } 325 }
228 326
229 protected IGridService m_GridService;
230
231 public IGridService GridService 327 public IGridService GridService
232 { 328 {
233 get 329 get
@@ -246,8 +342,6 @@ namespace OpenSim.Region.Framework.Scenes
246 } 342 }
247 } 343 }
248 344
249 protected ILibraryService m_LibraryService;
250
251 public ILibraryService LibraryService 345 public ILibraryService LibraryService
252 { 346 {
253 get 347 get
@@ -259,7 +353,6 @@ namespace OpenSim.Region.Framework.Scenes
259 } 353 }
260 } 354 }
261 355
262 protected ISimulationService m_simulationService;
263 public ISimulationService SimulationService 356 public ISimulationService SimulationService
264 { 357 {
265 get 358 get
@@ -270,7 +363,6 @@ namespace OpenSim.Region.Framework.Scenes
270 } 363 }
271 } 364 }
272 365
273 protected IAuthenticationService m_AuthenticationService;
274 public IAuthenticationService AuthenticationService 366 public IAuthenticationService AuthenticationService
275 { 367 {
276 get 368 get
@@ -281,7 +373,6 @@ namespace OpenSim.Region.Framework.Scenes
281 } 373 }
282 } 374 }
283 375
284 protected IPresenceService m_PresenceService;
285 public IPresenceService PresenceService 376 public IPresenceService PresenceService
286 { 377 {
287 get 378 get
@@ -291,7 +382,7 @@ namespace OpenSim.Region.Framework.Scenes
291 return m_PresenceService; 382 return m_PresenceService;
292 } 383 }
293 } 384 }
294 protected IUserAccountService m_UserAccountService; 385
295 public IUserAccountService UserAccountService 386 public IUserAccountService UserAccountService
296 { 387 {
297 get 388 get
@@ -302,8 +393,7 @@ namespace OpenSim.Region.Framework.Scenes
302 } 393 }
303 } 394 }
304 395
305 protected OpenSim.Services.Interfaces.IAvatarService m_AvatarService; 396 public IAvatarService AvatarService
306 public OpenSim.Services.Interfaces.IAvatarService AvatarService
307 { 397 {
308 get 398 get
309 { 399 {
@@ -313,7 +403,6 @@ namespace OpenSim.Region.Framework.Scenes
313 } 403 }
314 } 404 }
315 405
316 protected IGridUserService m_GridUserService;
317 public IGridUserService GridUserService 406 public IGridUserService GridUserService
318 { 407 {
319 get 408 get
@@ -324,58 +413,18 @@ namespace OpenSim.Region.Framework.Scenes
324 } 413 }
325 } 414 }
326 415
327 protected IXMLRPC m_xmlrpcModule;
328 protected IWorldComm m_worldCommModule;
329 public IAttachmentsModule AttachmentsModule { get; set; } 416 public IAttachmentsModule AttachmentsModule { get; set; }
330 protected IAvatarFactory m_AvatarFactory; 417
331 public IAvatarFactory AvatarFactory 418 public IAvatarFactory AvatarFactory
332 { 419 {
333 get { return m_AvatarFactory; } 420 get { return m_AvatarFactory; }
334 } 421 }
335 protected IConfigSource m_config;
336 protected IRegionSerialiserModule m_serialiser;
337 protected IDialogModule m_dialogModule;
338 protected IEntityTransferModule m_teleportModule;
339 422
340 protected ICapabilitiesModule m_capsModule;
341 public ICapabilitiesModule CapsModule 423 public ICapabilitiesModule CapsModule
342 { 424 {
343 get { return m_capsModule; } 425 get { return m_capsModule; }
344 } 426 }
345 427
346 protected override IConfigSource GetConfig()
347 {
348 return m_config;
349 }
350
351 // Central Update Loop
352
353 protected int m_fps = 10;
354 protected uint m_frame;
355 protected float m_timespan = 0.089f;
356 protected DateTime m_lastupdate = DateTime.UtcNow;
357
358 private int m_update_physics = 1;
359 private int m_update_entitymovement = 1;
360 private int m_update_objects = 1; // Update objects which have scheduled themselves for updates
361 private int m_update_presences = 1; // Update scene presence movements
362 private int m_update_events = 1;
363 private int m_update_backup = 200;
364 private int m_update_terrain = 50;
365 private int m_update_land = 1;
366 private int m_update_coarse_locations = 50;
367
368 private int frameMS;
369 private int physicsMS2;
370 private int physicsMS;
371 private int otherMS;
372 private int tempOnRezMS;
373 private int eventMS;
374 private int backupMS;
375 private int terrainMS;
376 private int landMS;
377 private int lastCompletedFrame;
378
379 public int MonitorFrameTime { get { return frameMS; } } 428 public int MonitorFrameTime { get { return frameMS; } }
380 public int MonitorPhysicsUpdateTime { get { return physicsMS; } } 429 public int MonitorPhysicsUpdateTime { get { return physicsMS; } }
381 public int MonitorPhysicsSyncTime { get { return physicsMS2; } } 430 public int MonitorPhysicsSyncTime { get { return physicsMS2; } }
@@ -387,37 +436,6 @@ namespace OpenSim.Region.Framework.Scenes
387 public int MonitorLandTime { get { return landMS; } } 436 public int MonitorLandTime { get { return landMS; } }
388 public int MonitorLastFrameTick { get { return lastCompletedFrame; } } 437 public int MonitorLastFrameTick { get { return lastCompletedFrame; } }
389 438
390 private bool m_physics_enabled = true;
391 private bool m_scripts_enabled = true;
392 private string m_defaultScriptEngine;
393 private int m_LastLogin;
394 private Thread HeartbeatThread;
395 private volatile bool shuttingdown;
396
397 private int m_lastUpdate;
398 private bool m_firstHeartbeat = true;
399
400 private object m_deleting_scene_object = new object();
401 private object m_cleaningAttachments = new object();
402
403 // the minimum time that must elapse before a changed object will be considered for persisted
404 public long m_dontPersistBefore = DEFAULT_MIN_TIME_FOR_PERSISTENCE * 10000000L;
405 // the maximum time that must elapse before a changed object will be considered for persisted
406 public long m_persistAfter = DEFAULT_MAX_TIME_FOR_PERSISTENCE * 10000000L;
407
408 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
409 private bool m_reprioritizationEnabled = true;
410 private double m_reprioritizationInterval = 5000.0;
411 private double m_rootReprioritizationDistance = 10.0;
412 private double m_childReprioritizationDistance = 20.0;
413
414 private Timer m_mapGenerationTimer = new Timer();
415 bool m_generateMaptiles = false;
416
417 #endregion
418
419 #region Properties
420
421 public UpdatePrioritizationSchemes UpdatePrioritizationScheme { get { return m_priorityScheme; } } 439 public UpdatePrioritizationSchemes UpdatePrioritizationScheme { get { return m_priorityScheme; } }
422 public bool IsReprioritizationEnabled { get { return m_reprioritizationEnabled; } } 440 public bool IsReprioritizationEnabled { get { return m_reprioritizationEnabled; } }
423 public double ReprioritizationInterval { get { return m_reprioritizationInterval; } } 441 public double ReprioritizationInterval { get { return m_reprioritizationInterval; } }
@@ -497,13 +515,13 @@ namespace OpenSim.Region.Framework.Scenes
497 set { m_sceneGraph.RestorePresences = value; } 515 set { m_sceneGraph.RestorePresences = value; }
498 } 516 }
499 517
500 #endregion 518 #endregion Properties
501 519
502 #region Constructors 520 #region Constructors
503 521
504 public Scene(RegionInfo regInfo, AgentCircuitManager authen, 522 public Scene(RegionInfo regInfo, AgentCircuitManager authen,
505 SceneCommunicationService sceneGridService, 523 SceneCommunicationService sceneGridService,
506 StorageManager storeManager, 524 ISimulationDataService simDataService, IEstateDataService estateDataService,
507 ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, 525 ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim,
508 bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion) 526 bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion)
509 { 527 {
@@ -539,7 +557,8 @@ namespace OpenSim.Region.Framework.Scenes
539 m_moduleLoader = moduleLoader; 557 m_moduleLoader = moduleLoader;
540 m_authenticateHandler = authen; 558 m_authenticateHandler = authen;
541 m_sceneGridService = sceneGridService; 559 m_sceneGridService = sceneGridService;
542 m_storageManager = storeManager; 560 m_SimulationDataService = simDataService;
561 m_EstateDataService = estateDataService;
543 m_regInfo = regInfo; 562 m_regInfo = regInfo;
544 m_regionHandle = m_regInfo.RegionHandle; 563 m_regionHandle = m_regInfo.RegionHandle;
545 m_regionName = m_regInfo.RegionName; 564 m_regionName = m_regInfo.RegionName;
@@ -558,13 +577,11 @@ namespace OpenSim.Region.Framework.Scenes
558 #region Region Settings 577 #region Region Settings
559 578
560 // Load region settings 579 // Load region settings
561 m_regInfo.RegionSettings = m_storageManager.DataStore.LoadRegionSettings(m_regInfo.RegionID); 580 m_regInfo.WindlightSettings = SimulationDataService.LoadRegionWindlightSettings(m_regInfo.RegionID);
562 m_regInfo.WindlightSettings = m_storageManager.DataStore.LoadRegionWindlightSettings(m_regInfo.RegionID);
563 581
564 if (m_storageManager.EstateDataStore != null) 582 m_regInfo.RegionSettings = simDataService.LoadRegionSettings(m_regInfo.RegionID);
565 { 583 if (estateDataService != null)
566 m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID, false); 584 m_regInfo.EstateSettings = estateDataService.LoadEstateSettings(m_regInfo.RegionID, false);
567 }
568 585
569 #endregion Region Settings 586 #endregion Region Settings
570 587
@@ -574,9 +591,9 @@ namespace OpenSim.Region.Framework.Scenes
574 591
575 //Bind Storage Manager functions to some land manager functions for this scene 592 //Bind Storage Manager functions to some land manager functions for this scene
576 EventManager.OnLandObjectAdded += 593 EventManager.OnLandObjectAdded +=
577 new EventManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject); 594 new EventManager.LandObjectAdded(simDataService.StoreLandObject);
578 EventManager.OnLandObjectRemoved += 595 EventManager.OnLandObjectRemoved +=
579 new EventManager.LandObjectRemoved(m_storageManager.DataStore.RemoveLandObject); 596 new EventManager.LandObjectRemoved(simDataService.RemoveLandObject);
580 597
581 m_sceneGraph = new SceneGraph(this, m_regInfo); 598 m_sceneGraph = new SceneGraph(this, m_regInfo);
582 599
@@ -1062,29 +1079,30 @@ namespace OpenSim.Region.Framework.Scenes
1062 if (ScriptEngine) 1079 if (ScriptEngine)
1063 { 1080 {
1064 m_log.Info("Stopping all Scripts in Scene"); 1081 m_log.Info("Stopping all Scripts in Scene");
1065 foreach (EntityBase ent in Entities) 1082
1083 EntityBase[] entities = Entities.GetEntities();
1084 foreach (EntityBase ent in entities)
1066 { 1085 {
1067 if (ent is SceneObjectGroup) 1086 if (ent is SceneObjectGroup)
1068 { 1087 ((SceneObjectGroup)ent).RemoveScriptInstances(false);
1069 ((SceneObjectGroup) ent).RemoveScriptInstances(false);
1070 }
1071 } 1088 }
1072 } 1089 }
1073 else 1090 else
1074 { 1091 {
1075 m_log.Info("Starting all Scripts in Scene"); 1092 m_log.Info("Starting all Scripts in Scene");
1076 lock (Entities) 1093
1094 EntityBase[] entities = Entities.GetEntities();
1095 foreach (EntityBase ent in entities)
1077 { 1096 {
1078 foreach (EntityBase ent in Entities) 1097 if (ent is SceneObjectGroup)
1079 { 1098 {
1080 if (ent is SceneObjectGroup) 1099 SceneObjectGroup sog = (SceneObjectGroup)ent;
1081 { 1100 sog.CreateScriptInstances(0, false, DefaultScriptEngine, 0);
1082 ((SceneObjectGroup)ent).CreateScriptInstances(0, false, DefaultScriptEngine, 0); 1101 sog.ResumeScripts();
1083 ((SceneObjectGroup)ent).ResumeScripts();
1084 }
1085 } 1102 }
1086 } 1103 }
1087 } 1104 }
1105
1088 m_scripts_enabled = !ScriptEngine; 1106 m_scripts_enabled = !ScriptEngine;
1089 m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine"); 1107 m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine");
1090 } 1108 }
@@ -1131,12 +1149,12 @@ namespace OpenSim.Region.Framework.Scenes
1131 shuttingdown = true; 1149 shuttingdown = true;
1132 1150
1133 m_log.Debug("[SCENE]: Persisting changed objects"); 1151 m_log.Debug("[SCENE]: Persisting changed objects");
1134 List<EntityBase> entities = GetEntities(); 1152 EntityBase[] entities = GetEntities();
1135 foreach (EntityBase entity in entities) 1153 foreach (EntityBase entity in entities)
1136 { 1154 {
1137 if (!entity.IsDeleted && entity is SceneObjectGroup && ((SceneObjectGroup)entity).HasGroupChanged) 1155 if (!entity.IsDeleted && entity is SceneObjectGroup && ((SceneObjectGroup)entity).HasGroupChanged)
1138 { 1156 {
1139 ((SceneObjectGroup)entity).ProcessBackup(m_storageManager.DataStore, false); 1157 ((SceneObjectGroup)entity).ProcessBackup(SimulationDataService, false);
1140 } 1158 }
1141 } 1159 }
1142 1160
@@ -1192,8 +1210,9 @@ namespace OpenSim.Region.Framework.Scenes
1192 while (m_regInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null) 1210 while (m_regInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null)
1193 { 1211 {
1194 MainConsole.Instance.Output("The current estate has no owner set."); 1212 MainConsole.Instance.Output("The current estate has no owner set.");
1195 string first = MainConsole.Instance.CmdPrompt("Estate owner first name", "Test"); 1213 List<char> excluded = new List<char>(new char[1]{' '});
1196 string last = MainConsole.Instance.CmdPrompt("Estate owner last name", "User"); 1214 string first = MainConsole.Instance.CmdPrompt("Estate owner first name", "Test", excluded);
1215 string last = MainConsole.Instance.CmdPrompt("Estate owner last name", "User", excluded);
1197 1216
1198 UserAccount account = UserAccountService.GetUserAccount(m_regInfo.ScopeID, first, last); 1217 UserAccount account = UserAccountService.GetUserAccount(m_regInfo.ScopeID, first, last);
1199 1218
@@ -1577,7 +1596,7 @@ namespace OpenSim.Region.Framework.Scenes
1577 { 1596 {
1578 lock (m_returns) 1597 lock (m_returns)
1579 { 1598 {
1580 EventManager.TriggerOnBackup(m_storageManager.DataStore, forced); 1599 EventManager.TriggerOnBackup(SimulationDataService, forced);
1581 m_backingup = false; 1600 m_backingup = false;
1582 1601
1583 foreach (KeyValuePair<UUID, ReturnInfo> ret in m_returns) 1602 foreach (KeyValuePair<UUID, ReturnInfo> ret in m_returns)
@@ -1618,7 +1637,7 @@ namespace OpenSim.Region.Framework.Scenes
1618 { 1637 {
1619 if (group != null) 1638 if (group != null)
1620 { 1639 {
1621 group.ProcessBackup(m_storageManager.DataStore, true); 1640 group.ProcessBackup(SimulationDataService, true);
1622 } 1641 }
1623 } 1642 }
1624 1643
@@ -1660,20 +1679,19 @@ namespace OpenSim.Region.Framework.Scenes
1660 /// </summary> 1679 /// </summary>
1661 public void SaveTerrain() 1680 public void SaveTerrain()
1662 { 1681 {
1663 m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); 1682 SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID);
1664 } 1683 }
1665 1684
1666 public void StoreWindlightProfile(RegionLightShareData wl) 1685 public void StoreWindlightProfile(RegionLightShareData wl)
1667 { 1686 {
1668 m_regInfo.WindlightSettings = wl; 1687 m_regInfo.WindlightSettings = wl;
1669 wl.Save(); 1688 SimulationDataService.StoreRegionWindlightSettings(wl);
1670 m_storageManager.DataStore.StoreRegionWindlightSettings(wl);
1671 m_eventManager.TriggerOnSaveNewWindlightProfile(); 1689 m_eventManager.TriggerOnSaveNewWindlightProfile();
1672 } 1690 }
1673 1691
1674 public void LoadWindlightProfile() 1692 public void LoadWindlightProfile()
1675 { 1693 {
1676 m_regInfo.WindlightSettings = m_storageManager.DataStore.LoadRegionWindlightSettings(RegionInfo.RegionID); 1694 m_regInfo.WindlightSettings = SimulationDataService.LoadRegionWindlightSettings(RegionInfo.RegionID);
1677 m_eventManager.TriggerOnSaveNewWindlightProfile(); 1695 m_eventManager.TriggerOnSaveNewWindlightProfile();
1678 } 1696 }
1679 1697
@@ -1684,13 +1702,13 @@ namespace OpenSim.Region.Framework.Scenes
1684 { 1702 {
1685 try 1703 try
1686 { 1704 {
1687 double[,] map = m_storageManager.DataStore.LoadTerrain(RegionInfo.RegionID); 1705 double[,] map = SimulationDataService.LoadTerrain(RegionInfo.RegionID);
1688 if (map == null) 1706 if (map == null)
1689 { 1707 {
1690 m_log.Info("[TERRAIN]: No default terrain. Generating a new terrain."); 1708 m_log.Info("[TERRAIN]: No default terrain. Generating a new terrain.");
1691 Heightmap = new TerrainChannel(); 1709 Heightmap = new TerrainChannel();
1692 1710
1693 m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); 1711 SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID);
1694 } 1712 }
1695 else 1713 else
1696 { 1714 {
@@ -1707,7 +1725,7 @@ namespace OpenSim.Region.Framework.Scenes
1707 { 1725 {
1708 Heightmap = new TerrainChannel(); 1726 Heightmap = new TerrainChannel();
1709 1727
1710 m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); 1728 SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID);
1711 } 1729 }
1712 } 1730 }
1713 catch (Exception e) 1731 catch (Exception e)
@@ -1754,7 +1772,7 @@ namespace OpenSim.Region.Framework.Scenes
1754 public void loadAllLandObjectsFromStorage(UUID regionID) 1772 public void loadAllLandObjectsFromStorage(UUID regionID)
1755 { 1773 {
1756 m_log.Info("[SCENE]: Loading land objects from storage"); 1774 m_log.Info("[SCENE]: Loading land objects from storage");
1757 List<LandData> landData = m_storageManager.DataStore.LoadLandObjects(regionID); 1775 List<LandData> landData = SimulationDataService.LoadLandObjects(regionID);
1758 1776
1759 if (LandChannel != null) 1777 if (LandChannel != null)
1760 { 1778 {
@@ -1785,7 +1803,7 @@ namespace OpenSim.Region.Framework.Scenes
1785 LoadingPrims = true; 1803 LoadingPrims = true;
1786 m_log.Info("[SCENE]: Loading objects from datastore"); 1804 m_log.Info("[SCENE]: Loading objects from datastore");
1787 1805
1788 List<SceneObjectGroup> PrimsFromDB = m_storageManager.DataStore.LoadObjects(regionID); 1806 List<SceneObjectGroup> PrimsFromDB = SimulationDataService.LoadObjects(regionID);
1789 1807
1790 m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " objects from the datastore"); 1808 m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " objects from the datastore");
1791 1809
@@ -1978,7 +1996,7 @@ namespace OpenSim.Region.Framework.Scenes
1978 sceneObject.ScheduleGroupForFullUpdate(); 1996 sceneObject.ScheduleGroupForFullUpdate();
1979 1997
1980 return sceneObject; 1998 return sceneObject;
1981 } 1999 }
1982 2000
1983 /// <summary> 2001 /// <summary>
1984 /// Add an object into the scene that has come from storage 2002 /// Add an object into the scene that has come from storage
@@ -2074,7 +2092,7 @@ namespace OpenSim.Region.Framework.Scenes
2074 /// <returns></returns> 2092 /// <returns></returns>
2075 public bool AddNewSceneObject( 2093 public bool AddNewSceneObject(
2076 SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) 2094 SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel)
2077 { 2095 {
2078 return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel); 2096 return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel);
2079 } 2097 }
2080 2098
@@ -2094,8 +2112,7 @@ namespace OpenSim.Region.Framework.Scenes
2094 List<SceneObjectGroup> toReturn = new List<SceneObjectGroup>(); 2112 List<SceneObjectGroup> toReturn = new List<SceneObjectGroup>();
2095 lock (Entities) 2113 lock (Entities)
2096 { 2114 {
2097 ICollection<EntityBase> entities = new List<EntityBase>(Entities); 2115 EntityBase[] entities = Entities.GetEntities();
2098
2099 foreach (EntityBase e in entities) 2116 foreach (EntityBase e in entities)
2100 { 2117 {
2101 if (e is SceneObjectGroup) 2118 if (e is SceneObjectGroup)
@@ -2190,12 +2207,12 @@ namespace OpenSim.Region.Framework.Scenes
2190 // group has recently been delinked from another group but that this change has not been persisted 2207 // group has recently been delinked from another group but that this change has not been persisted
2191 // to the DB. 2208 // to the DB.
2192 ForceSceneObjectBackup(so); 2209 ForceSceneObjectBackup(so);
2193 so.DetachFromBackup(); 2210 so.DetachFromBackup();
2194 m_storageManager.DataStore.RemoveObject(so.UUID, m_regInfo.RegionID); 2211 SimulationDataService.RemoveObject(so.UUID, m_regInfo.RegionID);
2195 } 2212 }
2196 2213
2197 // We need to keep track of this state in case this group is still queued for further backup. 2214 // We need to keep track of this state in case this group is still queued for further backup.
2198 so.IsDeleted = true; 2215 so.IsDeleted = true;
2199 2216
2200 return true; 2217 return true;
2201 } 2218 }
@@ -2482,7 +2499,7 @@ namespace OpenSim.Region.Framework.Scenes
2482 ScenePresence sp = GetScenePresence(userID); 2499 ScenePresence sp = GetScenePresence(userID);
2483 if (sp != null && AttachmentsModule != null) 2500 if (sp != null && AttachmentsModule != null)
2484 { 2501 {
2485 uint attPt = (uint)sp.Appearance.GetAttachpoint(itemID); 2502 uint attPt = (uint)sp.Appearance.GetAttachpoint(itemID);
2486 AttachmentsModule.RezSingleAttachmentFromInventory(sp.ControllingClient, itemID, attPt); 2503 AttachmentsModule.RezSingleAttachmentFromInventory(sp.ControllingClient, itemID, attPt);
2487 } 2504 }
2488 2505
@@ -2531,7 +2548,7 @@ namespace OpenSim.Region.Framework.Scenes
2531 sceneObject.RootPart.AddFlag(PrimFlags.Phantom); 2548 sceneObject.RootPart.AddFlag(PrimFlags.Phantom);
2532 2549
2533 // Don't sent a full update here because this will cause full updates to be sent twice for 2550 // Don't sent a full update here because this will cause full updates to be sent twice for
2534 // attachments on region crossings, resulting in viewer glitches. 2551 // attachments on region crossings, resulting in viewer glitches.
2535 AddRestoredSceneObject(sceneObject, false, false, false); 2552 AddRestoredSceneObject(sceneObject, false, false, false);
2536 2553
2537 // Handle attachment special case 2554 // Handle attachment special case
@@ -2788,7 +2805,7 @@ namespace OpenSim.Region.Framework.Scenes
2788 } 2805 }
2789 2806
2790 public virtual void SubscribeToClientPrimEvents(IClientAPI client) 2807 public virtual void SubscribeToClientPrimEvents(IClientAPI client)
2791 { 2808 {
2792 client.OnUpdatePrimGroupPosition += m_sceneGraph.UpdatePrimPosition; 2809 client.OnUpdatePrimGroupPosition += m_sceneGraph.UpdatePrimPosition;
2793 client.OnUpdatePrimSinglePosition += m_sceneGraph.UpdatePrimSinglePosition; 2810 client.OnUpdatePrimSinglePosition += m_sceneGraph.UpdatePrimSinglePosition;
2794 client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; 2811 client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation;
@@ -2824,7 +2841,7 @@ namespace OpenSim.Region.Framework.Scenes
2824 client.OnUndo += m_sceneGraph.HandleUndo; 2841 client.OnUndo += m_sceneGraph.HandleUndo;
2825 client.OnRedo += m_sceneGraph.HandleRedo; 2842 client.OnRedo += m_sceneGraph.HandleRedo;
2826 client.OnObjectDescription += m_sceneGraph.PrimDescription; 2843 client.OnObjectDescription += m_sceneGraph.PrimDescription;
2827 client.OnObjectDrop += m_sceneGraph.DropObject; 2844 client.OnObjectDrop += m_sceneGraph.DropObject;
2828 client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; 2845 client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable;
2829 client.OnObjectOwner += ObjectOwner; 2846 client.OnObjectOwner += ObjectOwner;
2830 } 2847 }
@@ -3804,7 +3821,7 @@ namespace OpenSim.Region.Framework.Scenes
3804 public virtual void AgentCrossing(UUID agentID, Vector3 position, bool isFlying) 3821 public virtual void AgentCrossing(UUID agentID, Vector3 position, bool isFlying)
3805 { 3822 {
3806 ScenePresence presence = GetScenePresence(agentID); 3823 ScenePresence presence = GetScenePresence(agentID);
3807 if(presence != null) 3824 if (presence != null)
3808 { 3825 {
3809 try 3826 try
3810 { 3827 {
@@ -4083,6 +4100,11 @@ namespace OpenSim.Region.Framework.Scenes
4083 4100
4084 #region Other Methods 4101 #region Other Methods
4085 4102
4103 protected override IConfigSource GetConfig()
4104 {
4105 return m_config;
4106 }
4107
4086 #endregion 4108 #endregion
4087 4109
4088 public void HandleObjectPermissionsUpdate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set) 4110 public void HandleObjectPermissionsUpdate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set)
@@ -4107,9 +4129,8 @@ namespace OpenSim.Region.Framework.Scenes
4107 /// </summary> 4129 /// </summary>
4108 public void ForceClientUpdate() 4130 public void ForceClientUpdate()
4109 { 4131 {
4110 List<EntityBase> EntityList = GetEntities(); 4132 EntityBase[] entityList = GetEntities();
4111 4133 foreach (EntityBase ent in entityList)
4112 foreach (EntityBase ent in EntityList)
4113 { 4134 {
4114 if (ent is SceneObjectGroup) 4135 if (ent is SceneObjectGroup)
4115 { 4136 {
@@ -4127,9 +4148,8 @@ namespace OpenSim.Region.Framework.Scenes
4127 { 4148 {
4128 m_log.Debug("Searching for Primitive: '" + cmdparams[2] + "'"); 4149 m_log.Debug("Searching for Primitive: '" + cmdparams[2] + "'");
4129 4150
4130 List<EntityBase> EntityList = GetEntities(); 4151 EntityBase[] entityList = GetEntities();
4131 4152 foreach (EntityBase ent in entityList)
4132 foreach (EntityBase ent in EntityList)
4133 { 4153 {
4134 if (ent is SceneObjectGroup) 4154 if (ent is SceneObjectGroup)
4135 { 4155 {
@@ -4498,7 +4518,7 @@ namespace OpenSim.Region.Framework.Scenes
4498 /// will not affect the original list of objects in the scene. 4518 /// will not affect the original list of objects in the scene.
4499 /// </summary> 4519 /// </summary>
4500 /// <returns></returns> 4520 /// <returns></returns>
4501 public List<EntityBase> GetEntities() 4521 public EntityBase[] GetEntities()
4502 { 4522 {
4503 return m_sceneGraph.GetEntities(); 4523 return m_sceneGraph.GetEntities();
4504 } 4524 }
@@ -4532,9 +4552,8 @@ namespace OpenSim.Region.Framework.Scenes
4532 4552
4533 public void CleanTempObjects() 4553 public void CleanTempObjects()
4534 { 4554 {
4535 List<EntityBase> objs = GetEntities(); 4555 EntityBase[] entities = GetEntities();
4536 4556 foreach (EntityBase obj in entities)
4537 foreach (EntityBase obj in objs)
4538 { 4557 {
4539 if (obj is SceneObjectGroup) 4558 if (obj is SceneObjectGroup)
4540 { 4559 {
@@ -4554,7 +4573,7 @@ namespace OpenSim.Region.Framework.Scenes
4554 4573
4555 public void DeleteFromStorage(UUID uuid) 4574 public void DeleteFromStorage(UUID uuid)
4556 { 4575 {
4557 m_storageManager.DataStore.RemoveObject(uuid, m_regInfo.RegionID); 4576 SimulationDataService.RemoveObject(uuid, m_regInfo.RegionID);
4558 } 4577 }
4559 4578
4560 public int GetHealth() 4579 public int GetHealth()
@@ -4963,17 +4982,21 @@ namespace OpenSim.Region.Framework.Scenes
4963 4982
4964 public List<UUID> GetEstateRegions(int estateID) 4983 public List<UUID> GetEstateRegions(int estateID)
4965 { 4984 {
4966 if (m_storageManager.EstateDataStore == null) 4985 IEstateDataService estateDataService = EstateDataService;
4967 return new List<UUID>(); 4986 if (estateDataService == null)
4987 return new List<UUID>(0);
4968 4988
4969 return m_storageManager.EstateDataStore.GetRegions(estateID); 4989 return estateDataService.GetRegions(estateID);
4970 } 4990 }
4971 4991
4972 public void ReloadEstateData() 4992 public void ReloadEstateData()
4973 { 4993 {
4974 m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID, false); 4994 IEstateDataService estateDataService = EstateDataService;
4975 4995 if (estateDataService != null)
4976 TriggerEstateSunUpdate(); 4996 {
4997 m_regInfo.EstateSettings = estateDataService.LoadEstateSettings(m_regInfo.RegionID, false);
4998 TriggerEstateSunUpdate();
4999 }
4977 } 5000 }
4978 5001
4979 public void TriggerEstateSunUpdate() 5002 public void TriggerEstateSunUpdate()
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs
index f8591ba..c71aefa 100644
--- a/OpenSim/Region/Framework/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs
@@ -521,7 +521,7 @@ namespace OpenSim.Region.Framework.Scenes
521 /// <param name="shorthelp"></param> 521 /// <param name="shorthelp"></param>
522 /// <param name="longhelp"></param> 522 /// <param name="longhelp"></param>
523 /// <param name="descriptivehelp"></param> 523 /// <param name="descriptivehelp"></param>
524 /// <param name="callback"></param> 524 /// <param name="callback"></param>
525 public void AddCommand( 525 public void AddCommand(
526 object mod, string command, string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback) 526 object mod, string command, string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback)
527 { 527 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index a39f27a..6246400 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -81,10 +81,7 @@ namespace OpenSim.Region.Framework.Scenes
81 protected Dictionary<UUID, ScenePresence> m_scenePresenceMap = new Dictionary<UUID, ScenePresence>(); 81 protected Dictionary<UUID, ScenePresence> m_scenePresenceMap = new Dictionary<UUID, ScenePresence>();
82 protected List<ScenePresence> m_scenePresenceArray = new List<ScenePresence>(); 82 protected List<ScenePresence> m_scenePresenceArray = new List<ScenePresence>();
83 83
84 // SceneObjects is not currently populated or used.
85 //public Dictionary<UUID, SceneObjectGroup> SceneObjects;
86 protected internal EntityManager Entities = new EntityManager(); 84 protected internal EntityManager Entities = new EntityManager();
87// protected internal Dictionary<UUID, EntityBase> Entities = new Dictionary<UUID, EntityBase>();
88 protected internal Dictionary<UUID, ScenePresence> RestorePresences = new Dictionary<UUID, ScenePresence>(); 85 protected internal Dictionary<UUID, ScenePresence> RestorePresences = new Dictionary<UUID, ScenePresence>();
89 86
90 protected RegionInfo m_regInfo; 87 protected RegionInfo m_regInfo;
@@ -323,7 +320,7 @@ namespace OpenSim.Region.Framework.Scenes
323 /// <param name="pos">Position of the object</param> 320 /// <param name="pos">Position of the object</param>
324 /// <param name="rot">Rotation of the object</param> 321 /// <param name="rot">Rotation of the object</param>
325 /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> 322 /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param>
326 /// <returns></returns> 323 /// <returns></returns>
327 public bool AddNewSceneObject( 324 public bool AddNewSceneObject(
328 SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) 325 SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel)
329 { 326 {
@@ -347,7 +344,7 @@ namespace OpenSim.Region.Framework.Scenes
347 } 344 }
348 345
349 return true; 346 return true;
350 } 347 }
351 348
352 /// <summary> 349 /// <summary>
353 /// Add an object to the scene. This will both update the scene, and send information about the 350 /// Add an object to the scene. This will both update the scene, and send information about the
@@ -370,68 +367,57 @@ namespace OpenSim.Region.Framework.Scenes
370 if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero) 367 if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero)
371 return false; 368 return false;
372 369
373 lock (sceneObject) 370 if (Entities.ContainsKey(sceneObject.UUID))
374 { 371 return false;
375 if (Entities.ContainsKey(sceneObject.UUID)) 372
376 { 373 List<SceneObjectPart> children;
377// m_log.WarnFormat( 374 lock (sceneObject.Children)
378// "[SCENE GRAPH]: Scene object {0} {1} was already in region {2} on add request", 375 children = new List<SceneObjectPart>(sceneObject.Children.Values);
379// sceneObject.Name, sceneObject.UUID, m_parentScene.RegionInfo.RegionName); 376
380 return false; 377 // Clamp child prim sizes and add child prims to the m_numPrim count
381 } 378 if (m_parentScene.m_clampPrimSize)
382 379 {
383// m_log.DebugFormat( 380 foreach (SceneObjectPart part in children)
384// "[SCENE GRAPH]: Adding object {0} {1} to region {2}",
385// sceneObject.Name, sceneObject.UUID, m_parentScene.RegionInfo.RegionName);
386
387 lock (sceneObject.Children)
388 { 381 {
389 if (m_parentScene.m_clampPrimSize) 382 Vector3 scale = part.Shape.Scale;
390 { 383
391 foreach (SceneObjectPart part in sceneObject.Children.Values) 384 if (scale.X > m_parentScene.m_maxNonphys)
392 { 385 scale.X = m_parentScene.m_maxNonphys;
393 Vector3 scale = part.Shape.Scale; 386 if (scale.Y > m_parentScene.m_maxNonphys)
394 387 scale.Y = m_parentScene.m_maxNonphys;
395 if (scale.X > m_parentScene.m_maxNonphys) 388 if (scale.Z > m_parentScene.m_maxNonphys)
396 scale.X = m_parentScene.m_maxNonphys; 389 scale.Z = m_parentScene.m_maxNonphys;
397 if (scale.Y > m_parentScene.m_maxNonphys) 390
398 scale.Y = m_parentScene.m_maxNonphys; 391 part.Shape.Scale = scale;
399 if (scale.Z > m_parentScene.m_maxNonphys)
400 scale.Z = m_parentScene.m_maxNonphys;
401
402 part.Shape.Scale = scale;
403 }
404 }
405
406 m_numPrim += sceneObject.Children.Count;
407 } 392 }
408 393 }
409 sceneObject.AttachToScene(m_parentScene); 394 m_numPrim += children.Count;
410 395
411 if (sendClientUpdates) 396 sceneObject.AttachToScene(m_parentScene);
412 sceneObject.ScheduleGroupForFullUpdate();
413
414 Entities.Add(sceneObject);
415 397
416 if (attachToBackup) 398 if (sendClientUpdates)
417 sceneObject.AttachToBackup(); 399 sceneObject.ScheduleGroupForFullUpdate();
418 400
419 if (OnObjectCreate != null) 401 Entities.Add(sceneObject);
420 OnObjectCreate(sceneObject); 402
421 403 if (attachToBackup)
422 lock (SceneObjectGroupsByFullID) 404 sceneObject.AttachToBackup();
423 { 405
424 SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject; 406 if (OnObjectCreate != null)
425 foreach (SceneObjectPart part in sceneObject.Children.Values) 407 OnObjectCreate(sceneObject);
426 SceneObjectGroupsByFullID[part.UUID] = sceneObject; 408
427 } 409 lock (SceneObjectGroupsByFullID)
428 410 {
429 lock (SceneObjectGroupsByLocalID) 411 SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject;
430 { 412 foreach (SceneObjectPart part in children)
431 SceneObjectGroupsByLocalID[sceneObject.LocalId] = sceneObject; 413 SceneObjectGroupsByFullID[part.UUID] = sceneObject;
432 foreach (SceneObjectPart part in sceneObject.Children.Values) 414 }
433 SceneObjectGroupsByLocalID[part.LocalId] = sceneObject; 415
434 } 416 lock (SceneObjectGroupsByLocalID)
417 {
418 SceneObjectGroupsByLocalID[sceneObject.LocalId] = sceneObject;
419 foreach (SceneObjectPart part in children)
420 SceneObjectGroupsByLocalID[part.LocalId] = sceneObject;
435 } 421 }
436 422
437 return true; 423 return true;
@@ -443,42 +429,38 @@ namespace OpenSim.Region.Framework.Scenes
443 /// <returns>true if the object was deleted, false if there was no object to delete</returns> 429 /// <returns>true if the object was deleted, false if there was no object to delete</returns>
444 public bool DeleteSceneObject(UUID uuid, bool resultOfObjectLinked) 430 public bool DeleteSceneObject(UUID uuid, bool resultOfObjectLinked)
445 { 431 {
446 if (Entities.ContainsKey(uuid)) 432 EntityBase entity;
447 { 433 if (!Entities.TryGetValue(uuid, out entity) && entity is SceneObjectGroup)
448 SceneObjectGroup grp = (SceneObjectGroup)Entities[uuid]; 434 return false;
449 435
450 if (!resultOfObjectLinked) 436 SceneObjectGroup grp = (SceneObjectGroup)entity;
451 {
452 m_numPrim -= grp.PrimCount;
453 437
454 if ((grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics) 438 if (!resultOfObjectLinked)
455 RemovePhysicalPrim(grp.PrimCount); 439 {
456 } 440 m_numPrim -= grp.PrimCount;
457 441
458 if (OnObjectRemove != null) 442 if ((grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics)
459 OnObjectRemove(Entities[uuid]); 443 RemovePhysicalPrim(grp.PrimCount);
444 }
460 445
461 lock (SceneObjectGroupsByFullID) 446 if (OnObjectRemove != null)
462 { 447 OnObjectRemove(Entities[uuid]);
463 foreach (SceneObjectPart part in grp.Children.Values)
464 SceneObjectGroupsByFullID.Remove(part.UUID);
465 SceneObjectGroupsByFullID.Remove(grp.RootPart.UUID);
466 }
467 lock (SceneObjectGroupsByLocalID)
468 {
469 foreach (SceneObjectPart part in grp.Children.Values)
470 SceneObjectGroupsByLocalID.Remove(part.LocalId);
471 SceneObjectGroupsByLocalID.Remove(grp.RootPart.LocalId);
472 }
473 448
474 Entities.Remove(uuid); 449 lock (SceneObjectGroupsByFullID)
475 //SceneObjectGroup part; 450 {
476 //((part.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics) 451 foreach (SceneObjectPart part in grp.Children.Values)
452 SceneObjectGroupsByFullID.Remove(part.UUID);
453 SceneObjectGroupsByFullID.Remove(grp.RootPart.UUID);
454 }
477 455
478 return true; 456 lock (SceneObjectGroupsByLocalID)
457 {
458 foreach (SceneObjectPart part in grp.Children.Values)
459 SceneObjectGroupsByLocalID.Remove(part.LocalId);
460 SceneObjectGroupsByLocalID.Remove(grp.RootPart.LocalId);
479 } 461 }
480 462
481 return false; 463 return Entities.Remove(uuid);
482 } 464 }
483 465
484 /// <summary> 466 /// <summary>
@@ -490,9 +472,7 @@ namespace OpenSim.Region.Framework.Scenes
490 protected internal void AddToUpdateList(SceneObjectGroup obj) 472 protected internal void AddToUpdateList(SceneObjectGroup obj)
491 { 473 {
492 lock (m_updateList) 474 lock (m_updateList)
493 {
494 m_updateList[obj.UUID] = obj; 475 m_updateList[obj.UUID] = obj;
495 }
496 } 476 }
497 477
498 public void FireAttachToBackup(SceneObjectGroup obj) 478 public void FireAttachToBackup(SceneObjectGroup obj)
@@ -526,34 +506,39 @@ namespace OpenSim.Region.Framework.Scenes
526 { 506 {
527 if (!Monitor.TryEnter(m_updateLock)) 507 if (!Monitor.TryEnter(m_updateLock))
528 return; 508 return;
529 509 try
530 List<SceneObjectGroup> updates;
531
532 // Some updates add more updates to the updateList.
533 // Get the current list of updates and clear the list before iterating
534 lock (m_updateList)
535 {
536 updates = new List<SceneObjectGroup>(m_updateList.Values);
537 m_updateList.Clear();
538 }
539
540 // Go through all updates
541 for (int i = 0; i < updates.Count; i++)
542 { 510 {
543 SceneObjectGroup sog = updates[i]; 511 List<SceneObjectGroup> updates;
544 512
545 // Don't abort the whole update if one entity happens to give us an exception. 513 // Some updates add more updates to the updateList.
546 try 514 // Get the current list of updates and clear the list before iterating
515 lock (m_updateList)
547 { 516 {
548 sog.Update(); 517 updates = new List<SceneObjectGroup>(m_updateList.Values);
518 m_updateList.Clear();
549 } 519 }
550 catch (Exception e) 520
521 // Go through all updates
522 for (int i = 0; i < updates.Count; i++)
551 { 523 {
552 m_log.ErrorFormat( 524 SceneObjectGroup sog = updates[i];
553 "[INNER SCENE]: Failed to update {0}, {1} - {2}", sog.Name, sog.UUID, e); 525
526 // Don't abort the whole update if one entity happens to give us an exception.
527 try
528 {
529 sog.Update();
530 }
531 catch (Exception e)
532 {
533 m_log.ErrorFormat(
534 "[INNER SCENE]: Failed to update {0}, {1} - {2}", sog.Name, sog.UUID, e);
535 }
554 } 536 }
555 } 537 }
556 Monitor.Exit(m_updateLock); 538 finally
539 {
540 Monitor.Exit(m_updateLock);
541 }
557 } 542 }
558 543
559 protected internal void AddPhysicalPrim(int number) 544 protected internal void AddPhysicalPrim(int number)
@@ -920,38 +905,38 @@ namespace OpenSim.Region.Framework.Scenes
920 /// <returns>null if no scene object group containing that prim is found</returns> 905 /// <returns>null if no scene object group containing that prim is found</returns>
921 public SceneObjectGroup GetGroupByPrim(uint localID) 906 public SceneObjectGroup GetGroupByPrim(uint localID)
922 { 907 {
923 if (Entities.ContainsKey(localID)) 908 EntityBase entity;
924 return Entities[localID] as SceneObjectGroup; 909 if (Entities.TryGetValue(localID, out entity))
910 return entity as SceneObjectGroup;
925 911
926 //m_log.DebugFormat("Entered GetGroupByPrim with localID {0}", localID); 912 //m_log.DebugFormat("Entered GetGroupByPrim with localID {0}", localID);
927 SceneObjectGroup sog; 913 SceneObjectGroup sog;
928 lock (SceneObjectGroupsByLocalID) 914 lock (SceneObjectGroupsByLocalID)
915 SceneObjectGroupsByLocalID.TryGetValue(localID, out sog);
916
917 if (sog != null)
929 { 918 {
930 if (SceneObjectGroupsByLocalID.TryGetValue(localID, out sog)) 919 if (sog.HasChildPrim(localID))
931 { 920 return sog;
932 if (sog.HasChildPrim(localID)) 921 SceneObjectGroupsByLocalID.Remove(localID);
933 return sog;
934 SceneObjectGroupsByLocalID.Remove(localID);
935 }
936 } 922 }
937 923
938 List<EntityBase> EntityList = GetEntities(); 924 EntityBase[] entityList = GetEntities();
939 foreach (EntityBase ent in EntityList) 925 foreach (EntityBase ent in entityList)
940 { 926 {
941 //m_log.DebugFormat("Looking at entity {0}", ent.UUID); 927 //m_log.DebugFormat("Looking at entity {0}", ent.UUID);
942 if (ent is SceneObjectGroup) 928 if (ent is SceneObjectGroup)
943 { 929 {
944 if (((SceneObjectGroup)ent).HasChildPrim(localID)) 930 sog = (SceneObjectGroup)ent;
931 if (sog.HasChildPrim(localID))
945 { 932 {
946 sog = (SceneObjectGroup)ent;
947 lock (SceneObjectGroupsByLocalID) 933 lock (SceneObjectGroupsByLocalID)
948 {
949 SceneObjectGroupsByLocalID[localID] = sog; 934 SceneObjectGroupsByLocalID[localID] = sog;
950 }
951 return sog; 935 return sog;
952 } 936 }
953 } 937 }
954 } 938 }
939
955 return null; 940 return null;
956 } 941 }
957 942
@@ -964,36 +949,35 @@ namespace OpenSim.Region.Framework.Scenes
964 { 949 {
965 SceneObjectGroup sog; 950 SceneObjectGroup sog;
966 lock (SceneObjectGroupsByFullID) 951 lock (SceneObjectGroupsByFullID)
952 SceneObjectGroupsByFullID.TryGetValue(fullID, out sog);
953
954 if (sog != null)
967 { 955 {
968 if (SceneObjectGroupsByFullID.TryGetValue(fullID, out sog)) 956 lock (sog.Children)
969 { 957 {
970 lock (sog.Children) 958 if (sog.Children.ContainsKey(fullID))
971 { 959 return sog;
972 if (sog.Children.ContainsKey(fullID))
973 return sog;
974 }
975
976 SceneObjectGroupsByFullID.Remove(fullID);
977 } 960 }
978 }
979 961
980 List<EntityBase> EntityList = GetEntities(); 962 lock (SceneObjectGroupsByFullID)
963 SceneObjectGroupsByFullID.Remove(fullID);
964 }
981 965
982 foreach (EntityBase ent in EntityList) 966 EntityBase[] entityList = GetEntities();
967 foreach (EntityBase ent in entityList)
983 { 968 {
984 if (ent is SceneObjectGroup) 969 if (ent is SceneObjectGroup)
985 { 970 {
986 if (((SceneObjectGroup)ent).HasChildPrim(fullID)) 971 sog = (SceneObjectGroup)ent;
972 if (sog.HasChildPrim(fullID))
987 { 973 {
988 sog = (SceneObjectGroup)ent;
989 lock (SceneObjectGroupsByFullID) 974 lock (SceneObjectGroupsByFullID)
990 {
991 SceneObjectGroupsByFullID[fullID] = sog; 975 SceneObjectGroupsByFullID[fullID] = sog;
992 }
993 return sog; 976 return sog;
994 } 977 }
995 } 978 }
996 } 979 }
980
997 return null; 981 return null;
998 } 982 }
999 983
@@ -1002,7 +986,7 @@ namespace OpenSim.Region.Framework.Scenes
1002 // Primitive Ray Tracing 986 // Primitive Ray Tracing
1003 float closestDistance = 280f; 987 float closestDistance = 280f;
1004 EntityIntersection result = new EntityIntersection(); 988 EntityIntersection result = new EntityIntersection();
1005 List<EntityBase> EntityList = GetEntities(); 989 EntityBase[] EntityList = GetEntities();
1006 foreach (EntityBase ent in EntityList) 990 foreach (EntityBase ent in EntityList)
1007 { 991 {
1008 if (ent is SceneObjectGroup) 992 if (ent is SceneObjectGroup)
@@ -1040,23 +1024,28 @@ namespace OpenSim.Region.Framework.Scenes
1040 /// <returns>null if the part was not found</returns> 1024 /// <returns>null if the part was not found</returns>
1041 protected internal SceneObjectPart GetSceneObjectPart(string name) 1025 protected internal SceneObjectPart GetSceneObjectPart(string name)
1042 { 1026 {
1043 List<EntityBase> EntityList = GetEntities(); 1027 SceneObjectPart sop = null;
1044 1028
1045 // FIXME: use a dictionary here 1029 Entities.Find(
1046 foreach (EntityBase ent in EntityList) 1030 delegate(EntityBase entity)
1047 {
1048 if (ent is SceneObjectGroup)
1049 { 1031 {
1050 foreach (SceneObjectPart p in ((SceneObjectGroup) ent).GetParts()) 1032 if (entity is SceneObjectGroup)
1051 { 1033 {
1052 if (p.Name == name) 1034 foreach (SceneObjectPart p in ((SceneObjectGroup)entity).GetParts())
1053 { 1035 {
1054 return p; 1036 if (p.Name == name)
1037 {
1038 sop = p;
1039 return true;
1040 }
1055 } 1041 }
1056 } 1042 }
1043
1044 return false;
1057 } 1045 }
1058 } 1046 );
1059 return null; 1047
1048 return sop;
1060 } 1049 }
1061 1050
1062 /// <summary> 1051 /// <summary>
@@ -1077,7 +1066,7 @@ namespace OpenSim.Region.Framework.Scenes
1077 /// it 1066 /// it
1078 /// </summary> 1067 /// </summary>
1079 /// <returns></returns> 1068 /// <returns></returns>
1080 protected internal List<EntityBase> GetEntities() 1069 protected internal EntityBase[] GetEntities()
1081 { 1070 {
1082 return Entities.GetEntities(); 1071 return Entities.GetEntities();
1083 } 1072 }
@@ -1086,7 +1075,7 @@ namespace OpenSim.Region.Framework.Scenes
1086 { 1075 {
1087 Dictionary<uint, float> topScripts = new Dictionary<uint, float>(); 1076 Dictionary<uint, float> topScripts = new Dictionary<uint, float>();
1088 1077
1089 List<EntityBase> EntityList = GetEntities(); 1078 EntityBase[] EntityList = GetEntities();
1090 int limit = 0; 1079 int limit = 0;
1091 foreach (EntityBase ent in EntityList) 1080 foreach (EntityBase ent in EntityList)
1092 { 1081 {
@@ -1140,7 +1129,7 @@ namespace OpenSim.Region.Framework.Scenes
1140 /// <param name="action"></param> 1129 /// <param name="action"></param>
1141 protected internal void ForEachSOG(Action<SceneObjectGroup> action) 1130 protected internal void ForEachSOG(Action<SceneObjectGroup> action)
1142 { 1131 {
1143 List<EntityBase> objlist = Entities.GetAllByType<SceneObjectGroup>(); 1132 EntityBase[] objlist = Entities.GetAllByType<SceneObjectGroup>();
1144 foreach (EntityBase ent in objlist) 1133 foreach (EntityBase ent in objlist)
1145 { 1134 {
1146 SceneObjectGroup obj = (SceneObjectGroup)ent; 1135 SceneObjectGroup obj = (SceneObjectGroup)ent;
@@ -1353,7 +1342,7 @@ namespace OpenSim.Region.Framework.Scenes
1353 SceneObjectGroup group = GetGroupByPrim(localID); 1342 SceneObjectGroup group = GetGroupByPrim(localID);
1354 1343
1355 if (group != null) 1344 if (group != null)
1356 { 1345 {
1357 if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) 1346 if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0))
1358 { 1347 {
1359 if (m_parentScene.AttachmentsModule != null) 1348 if (m_parentScene.AttachmentsModule != null)
@@ -1798,8 +1787,8 @@ namespace OpenSim.Region.Framework.Scenes
1798 UUID objid = UUID.Zero; 1787 UUID objid = UUID.Zero;
1799 SceneObjectPart obj = null; 1788 SceneObjectPart obj = null;
1800 1789
1801 List<EntityBase> EntityList = GetEntities(); 1790 EntityBase[] entityList = GetEntities();
1802 foreach (EntityBase ent in EntityList) 1791 foreach (EntityBase ent in entityList)
1803 { 1792 {
1804 if (ent is SceneObjectGroup) 1793 if (ent is SceneObjectGroup)
1805 { 1794 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 470fdd7..a952508 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1326,7 +1326,7 @@ namespace OpenSim.Region.Framework.Scenes
1326 AbsolutePosition = detachedpos; 1326 AbsolutePosition = detachedpos;
1327 m_rootPart.AttachedAvatar = UUID.Zero; 1327 m_rootPart.AttachedAvatar = UUID.Zero;
1328 1328
1329 //Anakin Lohner bug #3839 1329 //Anakin Lohner bug #3839
1330 lock (m_parts) 1330 lock (m_parts)
1331 { 1331 {
1332 foreach (SceneObjectPart p in m_parts.Values) 1332 foreach (SceneObjectPart p in m_parts.Values)
@@ -1556,7 +1556,7 @@ namespace OpenSim.Region.Framework.Scenes
1556 } 1556 }
1557 1557
1558 /// <summary> 1558 /// <summary>
1559 /// Delete this group from its scene. 1559 /// Delete this group from its scene.
1560 /// </summary> 1560 /// </summary>
1561 /// 1561 ///
1562 /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood 1562 /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood
@@ -1731,12 +1731,12 @@ namespace OpenSim.Region.Framework.Scenes
1731 /// Processes backup. 1731 /// Processes backup.
1732 /// </summary> 1732 /// </summary>
1733 /// <param name="datastore"></param> 1733 /// <param name="datastore"></param>
1734 public virtual void ProcessBackup(IRegionDataStore datastore, bool forcedBackup) 1734 public virtual void ProcessBackup(ISimulationDataService datastore, bool forcedBackup)
1735 { 1735 {
1736 if (!m_isBackedUp) 1736 if (!m_isBackedUp)
1737 { 1737 {
1738// m_log.DebugFormat( 1738// m_log.DebugFormat(
1739// "[WATER WARS]: Ignoring backup of {0} {1} since object is not marked to be backed up", Name, UUID); 1739// "[WATER WARS]: Ignoring backup of {0} {1} since object is not marked to be backed up", Name, UUID);
1740 return; 1740 return;
1741 } 1741 }
1742 1742
@@ -1748,7 +1748,7 @@ namespace OpenSim.Region.Framework.Scenes
1748 } 1748 }
1749 1749
1750 // Since this is the top of the section of call stack for backing up a particular scene object, don't let 1750 // Since this is the top of the section of call stack for backing up a particular scene object, don't let
1751 // any exception propogate upwards. 1751 // any exception propogate upwards.
1752 try 1752 try
1753 { 1753 {
1754 if (!m_scene.ShuttingDown || // if shutting down then there will be nothing to handle the return so leave till next restart 1754 if (!m_scene.ShuttingDown || // if shutting down then there will be nothing to handle the return so leave till next restart
@@ -1944,7 +1944,6 @@ namespace OpenSim.Region.Framework.Scenes
1944 part.PhysActor.LocalID = part.LocalId; 1944 part.PhysActor.LocalID = part.LocalId;
1945 part.DoPhysicsPropertyUpdate(part.PhysActor.IsPhysical, true); 1945 part.DoPhysicsPropertyUpdate(part.PhysActor.IsPhysical, true);
1946 } 1946 }
1947
1948 } 1947 }
1949 if (userExposed) 1948 if (userExposed)
1950 { 1949 {
@@ -1954,7 +1953,6 @@ namespace OpenSim.Region.Framework.Scenes
1954 1953
1955 ScheduleGroupForFullUpdate(); 1954 ScheduleGroupForFullUpdate();
1956 } 1955 }
1957
1958 } 1956 }
1959 finally 1957 finally
1960 { 1958 {
@@ -2515,16 +2513,9 @@ namespace OpenSim.Region.Framework.Scenes
2515 /// <returns>null if a child part with the primID was not found</returns> 2513 /// <returns>null if a child part with the primID was not found</returns>
2516 public SceneObjectPart GetChildPart(UUID primID) 2514 public SceneObjectPart GetChildPart(UUID primID)
2517 { 2515 {
2518 SceneObjectPart childPart = null; 2516 SceneObjectPart childPart;
2519
2520 lock (m_parts) 2517 lock (m_parts)
2521 { 2518 m_parts.TryGetValue(primID, out childPart);
2522 if (m_parts.ContainsKey(primID))
2523 {
2524 childPart = m_parts[primID];
2525 }
2526 }
2527
2528 return childPart; 2519 return childPart;
2529 } 2520 }
2530 2521
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index eefe8bb..5c4a2a3 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -508,7 +508,14 @@ namespace OpenSim.Region.Framework.Scenes
508 public UUID UUID 508 public UUID UUID
509 { 509 {
510 get { return m_uuid; } 510 get { return m_uuid; }
511 set { m_uuid = value; } 511 set
512 {
513 m_uuid = value;
514
515 // This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part
516 if (Inventory != null)
517 Inventory.ResetInventoryIDs();
518 }
512 } 519 }
513 520
514 public uint LocalId 521 public uint LocalId
@@ -1027,12 +1034,12 @@ namespace OpenSim.Region.Framework.Scenes
1027 return m_mediaUrl; 1034 return m_mediaUrl;
1028 } 1035 }
1029 1036
1030 set 1037 set
1031 { 1038 {
1032 m_mediaUrl = value; 1039 m_mediaUrl = value;
1033 1040
1034 if (ParentGroup != null) 1041 if (ParentGroup != null)
1035 ParentGroup.HasGroupChanged = true; 1042 ParentGroup.HasGroupChanged = true;
1036 } 1043 }
1037 } 1044 }
1038 1045
@@ -1045,7 +1052,7 @@ namespace OpenSim.Region.Framework.Scenes
1045// m_log.DebugFormat("[SOP]: Setting CreateSelected to {0} for {1} {2}", value, Name, UUID); 1052// m_log.DebugFormat("[SOP]: Setting CreateSelected to {0} for {1} {2}", value, Name, UUID);
1046 m_createSelected = value; 1053 m_createSelected = value;
1047 } 1054 }
1048 } 1055 }
1049 1056
1050 #endregion 1057 #endregion
1051 1058
@@ -1207,7 +1214,7 @@ namespace OpenSim.Region.Framework.Scenes
1207 1214
1208 /// <summary> 1215 /// <summary>
1209 /// Property flags. See OpenMetaverse.PrimFlags 1216 /// Property flags. See OpenMetaverse.PrimFlags
1210 /// </summary> 1217 /// </summary>
1211 /// Example properties are PrimFlags.Phantom and PrimFlags.DieAtEdge 1218 /// Example properties are PrimFlags.Phantom and PrimFlags.DieAtEdge
1212 public PrimFlags Flags 1219 public PrimFlags Flags
1213 { 1220 {
@@ -1372,7 +1379,7 @@ namespace OpenSim.Region.Framework.Scenes
1372 1379
1373 /// <summary> 1380 /// <summary>
1374 /// Tell the scene presence that it should send updates for this part to its client 1381 /// Tell the scene presence that it should send updates for this part to its client
1375 /// </summary> 1382 /// </summary>
1376 public void AddFullUpdateToAvatar(ScenePresence presence) 1383 public void AddFullUpdateToAvatar(ScenePresence presence)
1377 { 1384 {
1378 presence.SceneViewer.QueuePartForUpdate(this); 1385 presence.SceneViewer.QueuePartForUpdate(this);
@@ -1431,7 +1438,7 @@ namespace OpenSim.Region.Framework.Scenes
1431 1438
1432 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp) 1439 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp)
1433 { 1440 {
1434 if(!sp.IsChildAgent) 1441 if (!sp.IsChildAgent)
1435 sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume); 1442 sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume);
1436 }); 1443 });
1437 } 1444 }
@@ -1683,7 +1690,7 @@ namespace OpenSim.Region.Framework.Scenes
1683 1690
1684// m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID); 1691// m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID);
1685 1692
1686 return dupe; 1693 return dupe;
1687 } 1694 }
1688 1695
1689 protected void AssetReceived(string id, Object sender, AssetBase asset) 1696 protected void AssetReceived(string id, Object sender, AssetBase asset)
@@ -1993,10 +2000,10 @@ namespace OpenSim.Region.Framework.Scenes
1993 } 2000 }
1994 2001
1995 public uint GetEffectiveObjectFlags() 2002 public uint GetEffectiveObjectFlags()
1996 { 2003 {
1997 // Commenting this section of code out since it doesn't actually do anything, as enums are handled by 2004 // Commenting this section of code out since it doesn't actually do anything, as enums are handled by
1998 // value rather than reference 2005 // value rather than reference
1999// PrimFlags f = _flags; 2006// PrimFlags f = _flags;
2000// if (m_parentGroup == null || m_parentGroup.RootPart == this) 2007// if (m_parentGroup == null || m_parentGroup.RootPart == this)
2001// f &= ~(PrimFlags.Touch | PrimFlags.Money); 2008// f &= ~(PrimFlags.Touch | PrimFlags.Money);
2002 2009
@@ -2793,7 +2800,6 @@ namespace OpenSim.Region.Framework.Scenes
2793 UUID = UUID.Random(); 2800 UUID = UUID.Random();
2794 LinkNum = linkNum; 2801 LinkNum = linkNum;
2795 LocalId = 0; 2802 LocalId = 0;
2796 Inventory.ResetInventoryIDs();
2797 } 2803 }
2798 2804
2799 /// <summary> 2805 /// <summary>
@@ -4756,7 +4762,7 @@ namespace OpenSim.Region.Framework.Scenes
4756 if (ParentGroup == null || ParentGroup.IsDeleted) 4762 if (ParentGroup == null || ParentGroup.IsDeleted)
4757 return; 4763 return;
4758 4764
4759 if (IsAttachment && ParentGroup.RootPart != this) 4765 if (IsAttachment && ParentGroup.RootPart != this)
4760 return; 4766 return;
4761 4767
4762 // Causes this thread to dig into the Client Thread Data. 4768 // Causes this thread to dig into the Client Thread Data.
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 1959427..2de439b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -125,7 +125,7 @@ namespace OpenSim.Region.Framework.Scenes
125 { 125 {
126 m_items.LockItemsForWrite(true); 126 m_items.LockItemsForWrite(true);
127 127
128 if (0 == Items.Count) 128 if (Items.Count == 0)
129 { 129 {
130 m_items.LockItemsForWrite(false); 130 m_items.LockItemsForWrite(false);
131 return; 131 return;
@@ -1010,7 +1010,7 @@ namespace OpenSim.Region.Framework.Scenes
1010 /// Process inventory backup 1010 /// Process inventory backup
1011 /// </summary> 1011 /// </summary>
1012 /// <param name="datastore"></param> 1012 /// <param name="datastore"></param>
1013 public void ProcessInventoryBackup(IRegionDataStore datastore) 1013 public void ProcessInventoryBackup(ISimulationDataService datastore)
1014 { 1014 {
1015 if (HasInventoryChanged) 1015 if (HasInventoryChanged)
1016 { 1016 {
@@ -1257,7 +1257,7 @@ namespace OpenSim.Region.Framework.Scenes
1257 engine.ResumeScript(item.ItemID); 1257 engine.ResumeScript(item.ItemID);
1258 } 1258 }
1259 } 1259 }
1260 } 1260 }
1261 } 1261 }
1262 1262
1263 Items.LockItemsForRead(false); 1263 Items.LockItemsForRead(false);
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index d88f2cc..6d0ecf0 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1427,7 +1427,7 @@ namespace OpenSim.Region.Framework.Scenes
1427 // Setting parent ID would fix this, if we knew what value 1427 // Setting parent ID would fix this, if we knew what value
1428 // to use. Or we could add a m_isSitting variable. 1428 // to use. Or we could add a m_isSitting variable.
1429 //Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); 1429 //Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED");
1430 SitGround = true; 1430 SitGround = true;
1431 } 1431 }
1432 1432
1433 // In the future, these values might need to go global. 1433 // In the future, these values might need to go global.
diff --git a/OpenSim/Region/Framework/Scenes/SceneViewer.cs b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
index f478a4a..b45291f 100644
--- a/OpenSim/Region/Framework/Scenes/SceneViewer.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
@@ -73,9 +73,10 @@ namespace OpenSim.Region.Framework.Scenes
73 { 73 {
74 m_pendingObjects = new Queue<SceneObjectGroup>(); 74 m_pendingObjects = new Queue<SceneObjectGroup>();
75 75
76 lock(m_pendingObjects) 76 lock (m_pendingObjects)
77 { 77 {
78 foreach (EntityBase e in m_presence.Scene.Entities) 78 EntityBase[] entities = m_presence.Scene.Entities.GetEntities();
79 foreach (EntityBase e in entities)
79 { 80 {
80 if (e != null && e is SceneObjectGroup) 81 if (e != null && e is SceneObjectGroup)
81 m_pendingObjects.Enqueue((SceneObjectGroup)e); 82 m_pendingObjects.Enqueue((SceneObjectGroup)e);
@@ -84,7 +85,7 @@ namespace OpenSim.Region.Framework.Scenes
84 } 85 }
85 } 86 }
86 87
87 lock(m_pendingObjects) 88 lock (m_pendingObjects)
88 { 89 {
89 while (m_pendingObjects != null && m_pendingObjects.Count > 0) 90 while (m_pendingObjects != null && m_pendingObjects.Count > 0)
90 { 91 {
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
index b6677f0..5494549 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
@@ -84,9 +84,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
84 int primCount = 0; 84 int primCount = 0;
85 stream.WriteLine("<scene>\n"); 85 stream.WriteLine("<scene>\n");
86 86
87 List<EntityBase> EntityList = scene.GetEntities(); 87 EntityBase[] entityList = scene.GetEntities();
88 88 foreach (EntityBase ent in entityList)
89 foreach (EntityBase ent in EntityList)
90 { 89 {
91 if (ent is SceneObjectGroup) 90 if (ent is SceneObjectGroup)
92 { 91 {
@@ -204,16 +203,14 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
204 203
205 public static void SavePrimsToXml2(Scene scene, string fileName) 204 public static void SavePrimsToXml2(Scene scene, string fileName)
206 { 205 {
207 List<EntityBase> EntityList = scene.GetEntities(); 206 EntityBase[] entityList = scene.GetEntities();
208 207 SavePrimListToXml2(entityList, fileName);
209 SavePrimListToXml2(EntityList, fileName);
210 } 208 }
211 209
212 public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max) 210 public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max)
213 { 211 {
214 List<EntityBase> EntityList = scene.GetEntities(); 212 EntityBase[] entityList = scene.GetEntities();
215 213 SavePrimListToXml2(entityList, stream, min, max);
216 SavePrimListToXml2(EntityList, stream, min, max);
217 } 214 }
218 215
219 public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName) 216 public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName)
@@ -222,7 +219,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
222 "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}", 219 "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}",
223 primName, scene.RegionInfo.RegionName, fileName); 220 primName, scene.RegionInfo.RegionName, fileName);
224 221
225 List<EntityBase> entityList = scene.GetEntities(); 222 EntityBase[] entityList = scene.GetEntities();
226 List<EntityBase> primList = new List<EntityBase>(); 223 List<EntityBase> primList = new List<EntityBase>();
227 224
228 foreach (EntityBase ent in entityList) 225 foreach (EntityBase ent in entityList)
@@ -236,10 +233,10 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
236 } 233 }
237 } 234 }
238 235
239 SavePrimListToXml2(primList, fileName); 236 SavePrimListToXml2(primList.ToArray(), fileName);
240 } 237 }
241 238
242 public static void SavePrimListToXml2(List<EntityBase> entityList, string fileName) 239 public static void SavePrimListToXml2(EntityBase[] entityList, string fileName)
243 { 240 {
244 FileStream file = new FileStream(fileName, FileMode.Create); 241 FileStream file = new FileStream(fileName, FileMode.Create);
245 try 242 try
@@ -260,7 +257,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
260 } 257 }
261 } 258 }
262 259
263 public static void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, Vector3 min, Vector3 max) 260 public static void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max)
264 { 261 {
265 int primCount = 0; 262 int primCount = 0;
266 stream.WriteLine("<scene>\n"); 263 stream.WriteLine("<scene>\n");
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs
index c9662ef..7d9a6a9 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs
@@ -71,7 +71,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
71 Assert.That(dupeSo.Children.Count, Is.EqualTo(2)); 71 Assert.That(dupeSo.Children.Count, Is.EqualTo(2));
72 72
73 SceneObjectPart dupePart1 = dupeSo.GetLinkNumPart(1); 73 SceneObjectPart dupePart1 = dupeSo.GetLinkNumPart(1);
74 SceneObjectPart dupePart2 = dupeSo.GetLinkNumPart(2); 74 SceneObjectPart dupePart2 = dupeSo.GetLinkNumPart(2);
75 Assert.That(dupePart1.LocalId, Is.Not.EqualTo(part1.LocalId)); 75 Assert.That(dupePart1.LocalId, Is.Not.EqualTo(part1.LocalId));
76 Assert.That(dupePart2.LocalId, Is.Not.EqualTo(part2.LocalId)); 76 Assert.That(dupePart2.LocalId, Is.Not.EqualTo(part2.LocalId));
77 77
@@ -84,6 +84,6 @@ namespace OpenSim.Region.Framework.Scenes.Tests
84 Assert.That(dupePart1.PhysActor, Is.Not.Null); 84 Assert.That(dupePart1.PhysActor, Is.Not.Null);
85 Assert.That(dupePart2.PhysActor, Is.Not.Null); 85 Assert.That(dupePart2.PhysActor, Is.Not.Null);
86 */ 86 */
87 } 87 }
88 } 88 }
89} \ No newline at end of file 89} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
index e3ef263..60824be 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
@@ -270,7 +270,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
270 TestHelper.InMethod(); 270 TestHelper.InMethod();
271 //log4net.Config.XmlConfigurator.Configure(); 271 //log4net.Config.XmlConfigurator.Configure();
272 272
273 TestScene scene = SceneSetupHelpers.SetupScene(); 273 TestScene scene = SceneSetupHelpers.SetupScene();
274 274
275 string rootPartName = "rootpart"; 275 string rootPartName = "rootpart";
276 UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); 276 UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001");
@@ -282,17 +282,17 @@ namespace OpenSim.Region.Framework.Scenes.Tests
282 { Name = rootPartName, UUID = rootPartUuid }; 282 { Name = rootPartName, UUID = rootPartUuid };
283 SceneObjectPart linkPart 283 SceneObjectPart linkPart
284 = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) 284 = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero)
285 { Name = linkPartName, UUID = linkPartUuid }; 285 { Name = linkPartName, UUID = linkPartUuid };
286 286
287 SceneObjectGroup sog = new SceneObjectGroup(rootPart); 287 SceneObjectGroup sog = new SceneObjectGroup(rootPart);
288 sog.AddPart(linkPart); 288 sog.AddPart(linkPart);
289 scene.AddNewSceneObject(sog, true); 289 scene.AddNewSceneObject(sog, true);
290 290
291 // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked 291 // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked
292 // scene backup thread. 292 // scene backup thread.
293 scene.Backup(true); 293 scene.Backup(true);
294 294
295 List<SceneObjectGroup> storedObjects = scene.StorageManager.DataStore.LoadObjects(scene.RegionInfo.RegionID); 295 List<SceneObjectGroup> storedObjects = scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID);
296 296
297 Assert.That(storedObjects.Count, Is.EqualTo(1)); 297 Assert.That(storedObjects.Count, Is.EqualTo(1));
298 Assert.That(storedObjects[0].Children.Count, Is.EqualTo(2)); 298 Assert.That(storedObjects[0].Children.Count, Is.EqualTo(2));
@@ -309,7 +309,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
309 TestHelper.InMethod(); 309 TestHelper.InMethod();
310 //log4net.Config.XmlConfigurator.Configure(); 310 //log4net.Config.XmlConfigurator.Configure();
311 311
312 TestScene scene = SceneSetupHelpers.SetupScene(); 312 TestScene scene = SceneSetupHelpers.SetupScene();
313 313
314 string rootPartName = "rootpart"; 314 string rootPartName = "rootpart";
315 UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); 315 UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001");
@@ -321,11 +321,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
321 { Name = rootPartName, UUID = rootPartUuid }; 321 { Name = rootPartName, UUID = rootPartUuid };
322 SceneObjectPart linkPart 322 SceneObjectPart linkPart
323 = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) 323 = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero)
324 { Name = linkPartName, UUID = linkPartUuid }; 324 { Name = linkPartName, UUID = linkPartUuid };
325 325
326 SceneObjectGroup sog = new SceneObjectGroup(rootPart); 326 SceneObjectGroup sog = new SceneObjectGroup(rootPart);
327 sog.AddPart(linkPart); 327 sog.AddPart(linkPart);
328 scene.AddNewSceneObject(sog, true); 328 scene.AddNewSceneObject(sog, true);
329 329
330 // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked 330 // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked
331 // scene backup thread. 331 // scene backup thread.
@@ -333,9 +333,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests
333 333
334 // These changes should occur immediately without waiting for a backup pass 334 // These changes should occur immediately without waiting for a backup pass
335 SceneObjectGroup groupToDelete = sog.DelinkFromGroup(linkPart, false); 335 SceneObjectGroup groupToDelete = sog.DelinkFromGroup(linkPart, false);
336 scene.DeleteSceneObject(groupToDelete, false); 336 scene.DeleteSceneObject(groupToDelete, false);
337 337
338 List<SceneObjectGroup> storedObjects = scene.StorageManager.DataStore.LoadObjects(scene.RegionInfo.RegionID); 338 List<SceneObjectGroup> storedObjects = scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID);
339 339
340 Assert.That(storedObjects.Count, Is.EqualTo(1)); 340 Assert.That(storedObjects.Count, Is.EqualTo(1));
341 Assert.That(storedObjects[0].Children.Count, Is.EqualTo(1)); 341 Assert.That(storedObjects[0].Children.Count, Is.EqualTo(1));
diff --git a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
index da8199d..fe59d4f 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
@@ -59,8 +59,8 @@ namespace OpenSim.Region.Framework.Tests
59 string userFirstName = "Jock"; 59 string userFirstName = "Jock";
60 string userLastName = "Stirrup"; 60 string userLastName = "Stirrup";
61 string userPassword = "troll"; 61 string userPassword = "troll";
62 UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020"); 62 UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
63 return UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword); 63 return UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword);
64 } 64 }
65 65
66 protected SceneObjectGroup CreateSO1(Scene scene, UUID ownerId) 66 protected SceneObjectGroup CreateSO1(Scene scene, UUID ownerId)
@@ -70,14 +70,16 @@ namespace OpenSim.Region.Framework.Tests
70 SceneObjectPart part1 70 SceneObjectPart part1
71 = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) 71 = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero)
72 { Name = part1Name, UUID = part1Id }; 72 { Name = part1Name, UUID = part1Id };
73 return new SceneObjectGroup(part1); 73 return new SceneObjectGroup(part1);
74 } 74 }
75 75
76 protected TaskInventoryItem CreateSOItem1(Scene scene, SceneObjectPart part) 76 protected TaskInventoryItem CreateSOItem1(Scene scene, SceneObjectPart part)
77 { 77 {
78 AssetNotecard nc = new AssetNotecard("Hello World!"); 78 AssetNotecard nc = new AssetNotecard();
79 nc.BodyText = "Hello World!";
80 nc.Encode();
79 UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); 81 UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000");
80 UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); 82 UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000");
81 AssetBase ncAsset 83 AssetBase ncAsset
82 = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); 84 = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero);
83 scene.AssetService.Store(ncAsset); 85 scene.AssetService.Store(ncAsset);
@@ -112,9 +114,9 @@ namespace OpenSim.Region.Framework.Tests
112 scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID); 114 scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID);
113 115
114 InventoryItemBase ncUserItem 116 InventoryItemBase ncUserItem
115 = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Objects/ncItem"); 117 = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Objects/ncItem");
116 Assert.That(ncUserItem, Is.Not.Null, "Objects/ncItem was not found"); 118 Assert.That(ncUserItem, Is.Not.Null, "Objects/ncItem was not found");
117 } 119 }
118 120
119 /// <summary> 121 /// <summary>
120 /// Test MoveTaskInventoryItem where the item has no parent folder assigned. 122 /// Test MoveTaskInventoryItem where the item has no parent folder assigned.
@@ -136,7 +138,7 @@ namespace OpenSim.Region.Framework.Tests
136 scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID); 138 scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID);
137 139
138 InventoryItemBase ncUserItem 140 InventoryItemBase ncUserItem
139 = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Notecards/ncItem"); 141 = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Notecards/ncItem");
140 Assert.That(ncUserItem, Is.Not.Null, "Notecards/ncItem was not found"); 142 Assert.That(ncUserItem, Is.Not.Null, "Notecards/ncItem was not found");
141 } 143 }
142 } 144 }
diff --git a/OpenSim/Region/Framework/StorageManager.cs b/OpenSim/Region/Framework/StorageManager.cs
deleted file mode 100644
index 9375b4a..0000000
--- a/OpenSim/Region/Framework/StorageManager.cs
+++ /dev/null
@@ -1,96 +0,0 @@
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.Reflection;
30using log4net;
31using OpenSim.Region.Framework.Interfaces;
32
33namespace OpenSim.Region.Framework
34{
35 public class StorageManager
36 {
37 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
38
39 protected IRegionDataStore m_dataStore;
40
41 public IRegionDataStore DataStore
42 {
43 get { return m_dataStore; }
44 }
45
46 private IEstateDataStore m_estateDataStore;
47
48 public IEstateDataStore EstateDataStore
49 {
50 get { return m_estateDataStore; }
51 }
52
53 public StorageManager(IRegionDataStore storage)
54 {
55 m_dataStore = storage;
56 }
57
58 public StorageManager(string dllName, string connectionstring, string estateconnectionstring)
59 {
60 m_log.Info("[DATASTORE]: Attempting to load " + dllName);
61 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
62
63 foreach (Type pluginType in pluginAssembly.GetTypes())
64 {
65 if (pluginType.IsPublic)
66 {
67 Type typeInterface = pluginType.GetInterface("IRegionDataStore", true);
68
69 if (typeInterface != null)
70 {
71 IRegionDataStore plug =
72 (IRegionDataStore) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
73 plug.Initialise(connectionstring);
74
75 m_dataStore = plug;
76
77 m_log.Info("[DATASTORE]: Added IRegionDataStore Interface");
78 }
79
80 typeInterface = pluginType.GetInterface("IEstateDataStore", true);
81
82 if (typeInterface != null)
83 {
84 IEstateDataStore estPlug =
85 (IEstateDataStore) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
86 estPlug.Initialise(estateconnectionstring);
87
88 m_estateDataStore = estPlug;
89 }
90 }
91 }
92
93 //TODO: Add checking and warning to make sure it initialised.
94 }
95 }
96}
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index b98aabe..4ab67aa 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -375,8 +375,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
375 375
376 private void IRC_SendNamesReply() 376 private void IRC_SendNamesReply()
377 { 377 {
378 List<EntityBase> users = m_scene.Entities.GetAllByType<ScenePresence>(); 378 EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>();
379
380 foreach (EntityBase user in users) 379 foreach (EntityBase user in users)
381 { 380 {
382 SendServerCommand("353 " + m_nick + " = " + IrcRegionName + " :" + user.Name.Replace(" ", "")); 381 SendServerCommand("353 " + m_nick + " = " + IrcRegionName + " :" + user.Name.Replace(" ", ""));
@@ -386,8 +385,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
386 385
387 private void IRC_SendWhoReply() 386 private void IRC_SendWhoReply()
388 { 387 {
389 List<EntityBase> users = m_scene.Entities.GetAllByType<ScenePresence>(); 388 EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>();
390
391 foreach (EntityBase user in users) 389 foreach (EntityBase user in users)
392 { 390 {
393 /*SendServerCommand(String.Format("352 {0} {1} {2} {3} {4} {5} :0 {6}", IrcRegionName, 391 /*SendServerCommand(String.Format("352 {0} {1} {2} {3} {4} {5} :0 {6}", IrcRegionName,
@@ -415,11 +413,11 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
415 413
416 private void IRC_SendReplyUsers() 414 private void IRC_SendReplyUsers()
417 { 415 {
418 List<EntityBase> users = m_scene.Entities.GetAllByType<ScenePresence>(); 416 EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>();
419 417
420 SendServerCommand("392 :UserID Terminal Host"); 418 SendServerCommand("392 :UserID Terminal Host");
421 419
422 if (users.Count == 0) 420 if (users.Length == 0)
423 { 421 {
424 SendServerCommand("395 :Nobody logged in"); 422 SendServerCommand("395 :Nobody logged in");
425 return; 423 return;
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 2969503..6f044e0 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -962,7 +962,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
962 if ((groupInfo == null) || (account == null)) 962 if ((groupInfo == null) || (account == null))
963 { 963 {
964 return; 964 return;
965 } 965 }
966 966
967 // Send Message to Ejectee 967 // Send Message to Ejectee
968 GridInstantMessage msg = new GridInstantMessage(); 968 GridInstantMessage msg = new GridInstantMessage();
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
index 9363205..0d265f2 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
@@ -91,11 +91,11 @@ using OpenSim.Services.Interfaces;
91 * + RoleID 91 * + RoleID
92 * 92 *
93 * GroupID -> GroupNotice -> NoticeID 93 * GroupID -> GroupNotice -> NoticeID
94 * + TimeStamp [uint] 94 * + TimeStamp [uint]
95 * + FromName [string] 95 * + FromName [string]
96 * + Subject [string] 96 * + Subject [string]
97 * + Message [string] 97 * + Message [string]
98 * + BinaryBucket [byte[]] 98 * + BinaryBucket [byte[]]
99 * 99 *
100 * */ 100 * */
101 101
@@ -309,7 +309,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
309 GroupInfoMap["OwnerRoleID"] = OSD.FromUUID(OwnerRoleID); 309 GroupInfoMap["OwnerRoleID"] = OSD.FromUUID(OwnerRoleID);
310 GroupInfoMap["OwnersPowers"] = OSD.FromULong((ulong)m_DefaultOwnerPowers); 310 GroupInfoMap["OwnersPowers"] = OSD.FromULong((ulong)m_DefaultOwnerPowers);
311 311
312 if(SimianAddGeneric(GroupID, "Group", name, GroupInfoMap)) 312 if (SimianAddGeneric(GroupID, "Group", name, GroupInfoMap))
313 { 313 {
314 AddGroupRole(requestingAgentID, GroupID, UUID.Zero, "Everyone", "Members of " + name, "Member of " + name, (ulong)m_DefaultEveryonePowers); 314 AddGroupRole(requestingAgentID, GroupID, UUID.Zero, "Everyone", "Members of " + name, "Member of " + name, (ulong)m_DefaultEveryonePowers);
315 AddGroupRole(requestingAgentID, GroupID, OwnerRoleID, "Owners", "Owners of " + name, "Owner of " + name, (ulong)m_DefaultOwnerPowers); 315 AddGroupRole(requestingAgentID, GroupID, OwnerRoleID, "Owners", "Owners of " + name, "Owner of " + name, (ulong)m_DefaultOwnerPowers);
@@ -334,7 +334,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
334 334
335 string GroupName; 335 string GroupName;
336 OSDMap GroupInfoMap; 336 OSDMap GroupInfoMap;
337 if( SimianGetFirstGenericEntry(groupID, "GroupInfo", out GroupName, out GroupInfoMap) ) 337 if (SimianGetFirstGenericEntry(groupID, "GroupInfo", out GroupName, out GroupInfoMap))
338 { 338 {
339 GroupInfoMap["Charter"] = OSD.FromString(charter); 339 GroupInfoMap["Charter"] = OSD.FromString(charter);
340 GroupInfoMap["ShowInList"] = OSD.FromBoolean(showInList); 340 GroupInfoMap["ShowInList"] = OSD.FromBoolean(showInList);
@@ -379,7 +379,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
379 string GroupRoleMemberType = "GroupRole" + groupID.ToString(); 379 string GroupRoleMemberType = "GroupRole" + groupID.ToString();
380 if (SimianGetGenericEntries(GroupRoleMemberType, roleID.ToString(), out GroupRoleMembers)) 380 if (SimianGetGenericEntries(GroupRoleMemberType, roleID.ToString(), out GroupRoleMembers))
381 { 381 {
382 foreach(UUID UserID in GroupRoleMembers.Keys) 382 foreach (UUID UserID in GroupRoleMembers.Keys)
383 { 383 {
384 EnsureRoleNotSelectedByMember(groupID, roleID, UserID); 384 EnsureRoleNotSelectedByMember(groupID, roleID, UserID);
385 385
@@ -724,7 +724,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
724 } 724 }
725 725
726 OSDMap UserGroupMemberInfo; 726 OSDMap UserGroupMemberInfo;
727 if( SimianGetGenericEntry(agentID, "GroupMember", groupID.ToString(), out UserGroupMemberInfo) ) 727 if (SimianGetGenericEntry(agentID, "GroupMember", groupID.ToString(), out UserGroupMemberInfo))
728 { 728 {
729 data.AcceptNotices = UserGroupMemberInfo["AcceptNotices"].AsBoolean(); 729 data.AcceptNotices = UserGroupMemberInfo["AcceptNotices"].AsBoolean();
730 data.Contribution = UserGroupMemberInfo["Contribution"].AsInteger(); 730 data.Contribution = UserGroupMemberInfo["Contribution"].AsInteger();
@@ -736,7 +736,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
736 // 736 //
737 737
738 OSDMap GroupRoleInfo; 738 OSDMap GroupRoleInfo;
739 if( SimianGetGenericEntry(groupID, "GroupRole", data.ActiveRole.ToString(), out GroupRoleInfo) ) 739 if (SimianGetGenericEntry(groupID, "GroupRole", data.ActiveRole.ToString(), out GroupRoleInfo))
740 { 740 {
741 data.GroupTitle = GroupRoleInfo["Title"].AsString(); 741 data.GroupTitle = GroupRoleInfo["Title"].AsString();
742 data.GroupPowers = GroupRoleInfo["Powers"].AsULong(); 742 data.GroupPowers = GroupRoleInfo["Powers"].AsULong();
@@ -748,7 +748,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
748 // 748 //
749 OSDMap GroupInfo; 749 OSDMap GroupInfo;
750 string GroupName; 750 string GroupName;
751 if( SimianGetFirstGenericEntry(groupID, "Group", out GroupName, out GroupInfo) ) 751 if (SimianGetFirstGenericEntry(groupID, "Group", out GroupName, out GroupInfo))
752 { 752 {
753 data.GroupID = groupID; 753 data.GroupID = groupID;
754 data.AllowPublish = GroupInfo["AllowPublish"].AsBoolean(); 754 data.AllowPublish = GroupInfo["AllowPublish"].AsBoolean();
@@ -928,12 +928,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
928 Dictionary<string, OSDMap> GroupRoles; 928 Dictionary<string, OSDMap> GroupRoles;
929 if (SimianGetGenericEntries(groupID, "GroupRole", out GroupRoles)) 929 if (SimianGetGenericEntries(groupID, "GroupRole", out GroupRoles))
930 { 930 {
931 foreach( KeyValuePair<string, OSDMap> Role in GroupRoles ) 931 foreach (KeyValuePair<string, OSDMap> Role in GroupRoles)
932 { 932 {
933 Dictionary<UUID, OSDMap> GroupRoleMembers; 933 Dictionary<UUID, OSDMap> GroupRoleMembers;
934 if( SimianGetGenericEntries("GroupRole"+groupID.ToString(), Role.Key, out GroupRoleMembers) ) 934 if (SimianGetGenericEntries("GroupRole"+groupID.ToString(), Role.Key, out GroupRoleMembers))
935 { 935 {
936 foreach( KeyValuePair<UUID, OSDMap> GroupRoleMember in GroupRoleMembers ) 936 foreach (KeyValuePair<UUID, OSDMap> GroupRoleMember in GroupRoleMembers)
937 { 937 {
938 GroupRoleMembersData data = new GroupRoleMembersData(); 938 GroupRoleMembersData data = new GroupRoleMembersData();
939 939
@@ -1264,7 +1264,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1264 if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] Generics Result {0}", entryMap["Value"].AsString()); 1264 if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] Generics Result {0}", entryMap["Value"].AsString());
1265 maps.Add(entryMap["Key"].AsString(), (OSDMap)OSDParser.DeserializeJson(entryMap["Value"].AsString())); 1265 maps.Add(entryMap["Key"].AsString(), (OSDMap)OSDParser.DeserializeJson(entryMap["Value"].AsString()));
1266 } 1266 }
1267 if(maps.Count == 0) 1267 if (maps.Count == 0)
1268 { 1268 {
1269 if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] No Generics Results"); 1269 if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] No Generics Results");
1270 } 1270 }
@@ -1352,17 +1352,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1352 } 1352 }
1353 1353
1354 // Check if this is an update or a request 1354 // Check if this is an update or a request
1355 if ( requestArgs["RequestMethod"] == "RemoveGeneric" 1355 if (requestArgs["RequestMethod"] == "RemoveGeneric"
1356 || requestArgs["RequestMethod"] == "AddGeneric" 1356 || requestArgs["RequestMethod"] == "AddGeneric")
1357 )
1358
1359 { 1357 {
1360 // Any and all updates cause the cache to clear 1358 // Any and all updates cause the cache to clear
1361 m_memoryCache.Clear(); 1359 m_memoryCache.Clear();
1362 1360
1363 // Send update to server, return the response without caching it 1361 // Send update to server, return the response without caching it
1364 return WebUtil.PostToService(m_groupsServerURI, requestArgs); 1362 return WebUtil.PostToService(m_groupsServerURI, requestArgs);
1365
1366 } 1363 }
1367 1364
1368 // If we're not doing an update, we must be requesting data 1365 // If we're not doing an update, we must be requesting data
@@ -1372,7 +1369,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1372 OSDMap response = null; 1369 OSDMap response = null;
1373 if (!m_memoryCache.TryGetValue(CacheKey, out response)) 1370 if (!m_memoryCache.TryGetValue(CacheKey, out response))
1374 { 1371 {
1375 // if it wasn't in the cache, pass the request to the Simian Grid Services 1372 // if it wasn't in the cache, pass the request to the Simian Grid Services
1376 response = WebUtil.PostToService(m_groupsServerURI, requestArgs); 1373 response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
1377 1374
1378 // and cache the response 1375 // and cache the response
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
index 79b9a16..a88c5e2 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
@@ -960,7 +960,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
960 960
961 } 961 }
962 962
963 if( resp == null ) 963 if (resp == null)
964 { 964 {
965 string UserService; 965 string UserService;
966 UUID SessionID; 966 UUID SessionID;
@@ -1065,7 +1065,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1065 1065
1066 /// <summary> 1066 /// <summary>
1067 /// Group Request Tokens are an attempt to allow the groups service to authenticate 1067 /// Group Request Tokens are an attempt to allow the groups service to authenticate
1068 /// requests. 1068 /// requests.
1069 /// TODO: This broke after the big grid refactor, either find a better way, or discard this 1069 /// TODO: This broke after the big grid refactor, either find a better way, or discard this
1070 /// </summary> 1070 /// </summary>
1071 /// <param name="client"></param> 1071 /// <param name="client"></param>
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs
index de1e01c..d21b652 100644
--- a/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs
+++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs
@@ -111,7 +111,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
111 } 111 }
112 112
113 // Check if there are SceneObjectGroups in the list that do not have corresponding ContentManagementGroups in the CMEntityHash 113 // Check if there are SceneObjectGroups in the list that do not have corresponding ContentManagementGroups in the CMEntityHash
114 public System.Collections.ArrayList CheckForMissingEntities(System.Collections.Generic.List<EntityBase> currList) 114 public System.Collections.ArrayList CheckForMissingEntities(EntityBase[] currList)
115 { 115 {
116 System.Collections.ArrayList missingList = new System.Collections.ArrayList(); 116 System.Collections.ArrayList missingList = new System.Collections.ArrayList();
117 SceneObjectGroup temp = null; 117 SceneObjectGroup temp = null;
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs
index 2730eee..49d20e1 100644
--- a/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs
+++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs
@@ -127,7 +127,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
127 /// </summary> 127 /// </summary>
128 public void FindDifferences() 128 public void FindDifferences()
129 { 129 {
130 System.Collections.Generic.List<EntityBase> sceneEntityList = m_Entity.Scene.GetEntities(); 130 List<EntityBase> sceneEntityList = new List<EntityBase>(m_Entity.Scene.GetEntities());
131 DiffersFromSceneGroup = false; 131 DiffersFromSceneGroup = false;
132 // if group is not contained in scene's list 132 // if group is not contained in scene's list
133 if (!ContainsKey(sceneEntityList, m_UnchangedEntity.UUID)) 133 if (!ContainsKey(sceneEntityList, m_UnchangedEntity.UUID))
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs
index 796f437..d7838c5 100644
--- a/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs
+++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs
@@ -161,7 +161,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
161 161
162 //finalize 162 //finalize
163 m_Entity.RootPart.PhysActor = null; 163 m_Entity.RootPart.PhysActor = null;
164 m_Entity.Children = parts; 164 m_Entity.Children = parts;
165 } 165 }
166 } 166 }
167 167
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs
index 6ba5ccf..140264b 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs
@@ -41,12 +41,14 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
41 private readonly Scene m_scene; 41 private readonly Scene m_scene;
42 private readonly IEnumerator<EntityBase> m_sogEnum; 42 private readonly IEnumerator<EntityBase> m_sogEnum;
43 private readonly ISecurityCredential m_security; 43 private readonly ISecurityCredential m_security;
44 private readonly List<EntityBase> m_entities;
44 45
45 public IObjEnum(Scene scene, ISecurityCredential security) 46 public IObjEnum(Scene scene, ISecurityCredential security)
46 { 47 {
47 m_scene = scene; 48 m_scene = scene;
48 m_security = security; 49 m_security = security;
49 m_sogEnum = m_scene.Entities.GetAllByType<SceneObjectGroup>().GetEnumerator(); 50 m_entities = new List<EntityBase>(m_scene.Entities.GetEntities());
51 m_sogEnum = m_entities.GetEnumerator();
50 } 52 }
51 53
52 public void Dispose() 54 public void Dispose()
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
index c439e3e..59ad9d8 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
@@ -432,7 +432,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
432 return; 432 return;
433 } 433 }
434 434
435 foreach(string button in buttons) 435 foreach (string button in buttons)
436 { 436 {
437 if (button == String.Empty) 437 if (button == String.Empty)
438 { 438 {
@@ -448,7 +448,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
448 448
449 dm.SendDialogToUser( 449 dm.SendDialogToUser(
450 avatar, GetSOP().Name, GetSOP().UUID, GetSOP().OwnerID, 450 avatar, GetSOP().Name, GetSOP().UUID, GetSOP().OwnerID,
451 message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buttons); 451 message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buttons);
452 452
453 } 453 }
454 454
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
index 45bb005..f2324d2 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
@@ -205,10 +205,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
205 { 205 {
206 get 206 get
207 { 207 {
208 List<EntityBase> ents = m_internalScene.Entities.GetAllByType<ScenePresence>(); 208 EntityBase[] ents = m_internalScene.Entities.GetAllByType<ScenePresence>();
209 IAvatar[] rets = new IAvatar[ents.Count]; 209 IAvatar[] rets = new IAvatar[ents.Length];
210 210
211 for (int i = 0; i < ents.Count; i++) 211 for (int i = 0; i < ents.Length; i++)
212 { 212 {
213 EntityBase ent = ents[i]; 213 EntityBase ent = ents[i];
214 rets[i] = new SPAvatar(m_internalScene, ent.UUID, m_security); 214 rets[i] = new SPAvatar(m_internalScene, ent.UUID, m_security);
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
index 61cbb90..cc51c3b 100644
--- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
+++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
@@ -824,5 +824,5 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
824 RegionMoneyRequest = 1, 824 RegionMoneyRequest = 1,
825 Gift = 2, 825 Gift = 2,
826 Purchase = 3 826 Purchase = 3
827 } 827 }
828} \ No newline at end of file 828} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
index 3ed338b..421da36 100644
--- a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
+++ b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
@@ -568,8 +568,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
568 { 568 {
569 m_copse = new List<Copse>(); 569 m_copse = new List<Copse>();
570 570
571 List<EntityBase> objs = m_scene.GetEntities(); 571 EntityBase[] objs = m_scene.GetEntities();
572
573 foreach (EntityBase obj in objs) 572 foreach (EntityBase obj in objs)
574 { 573 {
575 if (obj is SceneObjectGroup) 574 if (obj is SceneObjectGroup)
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs
index a0d6197..f424e7f 100644
--- a/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs
+++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs
@@ -49,7 +49,7 @@ namespace OpenSim.Region.RegionCombinerModule
49 public void ClientConnect(IClientAPI client) 49 public void ClientConnect(IClientAPI client)
50 { 50 {
51 m_virtScene.UnSubscribeToClientPrimEvents(client); 51 m_virtScene.UnSubscribeToClientPrimEvents(client);
52 m_virtScene.UnSubscribeToClientPrimRezEvents(client); 52 m_virtScene.UnSubscribeToClientPrimRezEvents(client);
53 m_virtScene.UnSubscribeToClientInventoryEvents(client); 53 m_virtScene.UnSubscribeToClientInventoryEvents(client);
54 ((AttachmentsModule)m_virtScene.AttachmentsModule).UnsubscribeFromClientEvents(client); 54 ((AttachmentsModule)m_virtScene.AttachmentsModule).UnsubscribeFromClientEvents(client);
55 //m_virtScene.UnSubscribeToClientTeleportEvents(client); 55 //m_virtScene.UnSubscribeToClientTeleportEvents(client);
@@ -66,7 +66,7 @@ namespace OpenSim.Region.RegionCombinerModule
66 client.OnRezObject += LocalRezObject; 66 client.OnRezObject += LocalRezObject;
67 67
68 m_rootScene.SubscribeToClientInventoryEvents(client); 68 m_rootScene.SubscribeToClientInventoryEvents(client);
69 ((AttachmentsModule)m_rootScene.AttachmentsModule).SubscribeToClientEvents(client); 69 ((AttachmentsModule)m_rootScene.AttachmentsModule).SubscribeToClientEvents(client);
70 //m_rootScene.SubscribeToClientTeleportEvents(client); 70 //m_rootScene.SubscribeToClientTeleportEvents(client);
71 m_rootScene.SubscribeToClientScriptEvents(client); 71 m_rootScene.SubscribeToClientScriptEvents(client);
72 72
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs
index 33ff707..be5411a 100644
--- a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs
+++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs
@@ -118,7 +118,7 @@ public class RegionCombinerLargeLandChannel : ILandChannel
118 return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY); 118 return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY);
119 } 119 }
120 } 120 }
121 121
122 ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); 122 ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene);
123 obj.LandData.Name = "NO LAND"; 123 obj.LandData.Name = "NO LAND";
124 return obj; 124 return obj;
@@ -142,14 +142,14 @@ public class RegionCombinerLargeLandChannel : ILandChannel
142 142
143 public void Join(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) 143 public void Join(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id)
144 { 144 {
145 RootRegionLandChannel.Join(start_x, start_y, end_x, end_y, attempting_user_id); 145 RootRegionLandChannel.Join(start_x, start_y, end_x, end_y, attempting_user_id);
146 } 146 }
147 147
148 public void Subdivide(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) 148 public void Subdivide(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id)
149 { 149 {
150 RootRegionLandChannel.Subdivide(start_x, start_y, end_x, end_y, attempting_user_id); 150 RootRegionLandChannel.Subdivide(start_x, start_y, end_x, end_y, attempting_user_id);
151 } 151 }
152 152
153 public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) 153 public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient)
154 { 154 {
155 RootRegionLandChannel.ReturnObjectsInParcel(localID, returnType, agentIDs, taskIDs, remoteClient); 155 RootRegionLandChannel.ReturnObjectsInParcel(localID, returnType, agentIDs, taskIDs, remoteClient);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 512957d..a5b3cd0 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -4298,9 +4298,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4298 } 4298 }
4299 4299
4300 4300
4301 PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); 4301 pinfo = World.PresenceService.GetAgent(uuid);
4302 if (pinfos != null && pinfos.Length > 0)
4303 pinfo = pinfos[0];
4304 4302
4305 ce = new UserInfoCacheEntry(); 4303 ce = new UserInfoCacheEntry();
4306 ce.time = Util.EnvironmentTickCount(); 4304 ce.time = Util.EnvironmentTickCount();
@@ -4319,11 +4317,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4319 4317
4320 if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000) 4318 if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000)
4321 { 4319 {
4322 PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); 4320 pinfo = World.PresenceService.GetAgent(uuid);
4323 if (pinfos != null && pinfos.Length > 0)
4324 pinfo = pinfos[0];
4325 else
4326 pinfo = null;
4327 4321
4328 ce.time = Util.EnvironmentTickCount(); 4322 ce.time = Util.EnvironmentTickCount();
4329 ce.pinfo = pinfo; 4323 ce.pinfo = pinfo;
@@ -8482,7 +8476,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8482 res.Add(new LSL_Integer((int)me.ControlPermissions)); 8476 res.Add(new LSL_Integer((int)me.ControlPermissions));
8483 break; 8477 break;
8484 } 8478 }
8485 } 8479 }
8486 8480
8487 return res; 8481 return res;
8488 } 8482 }
@@ -8498,7 +8492,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8498 if (face < 0 || face > m_host.GetNumberOfSides() - 1) 8492 if (face < 0 || face > m_host.GetNumberOfSides() - 1)
8499 return ScriptBaseClass.LSL_STATUS_OK; 8493 return ScriptBaseClass.LSL_STATUS_OK;
8500 8494
8501 return SetPrimMediaParams(face, rules); 8495 return SetPrimMediaParams(face, rules);
8502 } 8496 }
8503 8497
8504 private LSL_Integer SetPrimMediaParams(int face, LSL_List rules) 8498 private LSL_Integer SetPrimMediaParams(int face, LSL_List rules)
@@ -8587,7 +8581,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8587 me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); 8581 me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++);
8588 break; 8582 break;
8589 } 8583 }
8590 } 8584 }
8591 8585
8592 module.SetMediaEntry(m_host, face, me); 8586 module.SetMediaEntry(m_host, face, me);
8593 8587
@@ -8607,7 +8601,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8607 8601
8608 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); 8602 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>();
8609 if (null == module) 8603 if (null == module)
8610 throw new Exception("Media on a prim functions not available"); 8604 throw new Exception("Media on a prim functions not available");
8611 8605
8612 module.ClearMediaEntry(m_host, face); 8606 module.ClearMediaEntry(m_host, face);
8613 8607
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index a08b135..6827ede 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -1197,7 +1197,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1197 1197
1198 World.LandChannel.Join(startx,starty,endx,endy,m_host.OwnerID); 1198 World.LandChannel.Join(startx,starty,endx,endy,m_host.OwnerID);
1199 } 1199 }
1200 1200
1201 public void osParcelSubdivide(LSL_Vector pos1, LSL_Vector pos2) 1201 public void osParcelSubdivide(LSL_Vector pos1, LSL_Vector pos2)
1202 { 1202 {
1203 CheckThreatLevel(ThreatLevel.High, "osParcelSubdivide"); 1203 CheckThreatLevel(ThreatLevel.High, "osParcelSubdivide");
@@ -1220,7 +1220,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1220 // can modify it 1220 // can modify it
1221 1221
1222 ILandObject startLandObject = World.LandChannel.GetLandObject((int)pos.x, (int)pos.y); 1222 ILandObject startLandObject = World.LandChannel.GetLandObject((int)pos.x, (int)pos.y);
1223 if (startLandObject == null) 1223 if (startLandObject == null)
1224 { 1224 {
1225 OSSLShoutError("There is no land at that location"); 1225 OSSLShoutError("There is no land at that location");
1226 return; 1226 return;
@@ -1237,7 +1237,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1237 UUID uuid; 1237 UUID uuid;
1238 1238
1239 // Process the rules, not sure what the impact would be of changing owner or group 1239 // Process the rules, not sure what the impact would be of changing owner or group
1240 for (int idx = 0; idx < rules.Length; ) 1240 for (int idx = 0; idx < rules.Length;)
1241 { 1241 {
1242 int code = rules.GetLSLIntegerItem(idx++); 1242 int code = rules.GetLSLIntegerItem(idx++);
1243 string arg = rules.GetLSLStringItem(idx++); 1243 string arg = rules.GetLSLStringItem(idx++);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index a5b1124..3b7de53 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -286,7 +286,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
286 } 286 }
287 else 287 else
288 { 288 {
289 Entities = m_CmdManager.m_ScriptEngine.World.GetEntities(); 289 Entities = new List<EntityBase>(m_CmdManager.m_ScriptEngine.World.GetEntities());
290 } 290 }
291 SceneObjectPart SensePoint = ts.host; 291 SceneObjectPart SensePoint = ts.host;
292 292
@@ -417,7 +417,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
417 List<SensedEntity> sensedEntities = new List<SensedEntity>(); 417 List<SensedEntity> sensedEntities = new List<SensedEntity>();
418 418
419 // If nobody about quit fast 419 // If nobody about quit fast
420 if(m_CmdManager.m_ScriptEngine.World.GetRootAgentCount() == 0) 420 if (m_CmdManager.m_ScriptEngine.World.GetRootAgentCount() == 0)
421 return sensedEntities; 421 return sensedEntities;
422 422
423 SceneObjectPart SensePoint = ts.host; 423 SceneObjectPart SensePoint = ts.host;
@@ -496,7 +496,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
496 { 496 {
497 ScenePresence sp; 497 ScenePresence sp;
498 // Try direct lookup by UUID 498 // Try direct lookup by UUID
499 if(!m_CmdManager.m_ScriptEngine.World.TryGetScenePresence(ts.keyID, out sp)) 499 if (!m_CmdManager.m_ScriptEngine.World.TryGetScenePresence(ts.keyID, out sp))
500 return sensedEntities; 500 return sensedEntities;
501 senseEntity(sp); 501 senseEntity(sp);
502 } 502 }
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index e5e8a56..e82d297 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -632,7 +632,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
632 bool postOnRez = (bool)p[4]; 632 bool postOnRez = (bool)p[4];
633 StateSource stateSource = (StateSource)p[5]; 633 StateSource stateSource = (StateSource)p[5];
634 634
635 lock(m_CompileDict) 635 lock (m_CompileDict)
636 { 636 {
637 if (!m_CompileDict.ContainsKey(itemID)) 637 if (!m_CompileDict.ContainsKey(itemID))
638 return false; 638 return false;
diff --git a/OpenSim/Server/Base/ServerUtils.cs b/OpenSim/Server/Base/ServerUtils.cs
index e7a8294..f4472c7 100644
--- a/OpenSim/Server/Base/ServerUtils.cs
+++ b/OpenSim/Server/Base/ServerUtils.cs
@@ -62,7 +62,7 @@ namespace OpenSim.Server.Base
62 /// </summary> 62 /// </summary>
63 /// <param name="dllName"></param> 63 /// <param name="dllName"></param>
64 /// <param name="args">The arguments which control which constructor is invoked on the plugin</param> 64 /// <param name="args">The arguments which control which constructor is invoked on the plugin</param>
65 /// <returns></returns> 65 /// <returns></returns>
66 public static T LoadPlugin<T>(string dllName, Object[] args) where T:class 66 public static T LoadPlugin<T>(string dllName, Object[] args) where T:class
67 { 67 {
68 string[] parts = dllName.Split(new char[] {':'}); 68 string[] parts = dllName.Split(new char[] {':'});
diff --git a/OpenSim/Server/Handlers/Hypergrid/HeloServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/HeloServerConnector.cs
new file mode 100644
index 0000000..39baa32
--- /dev/null
+++ b/OpenSim/Server/Handlers/Hypergrid/HeloServerConnector.cs
@@ -0,0 +1,79 @@
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.IO;
31using System.Net;
32using System.Reflection;
33using Nini.Config;
34using log4net;
35using OpenSim.Server.Base;
36using OpenSim.Services.Interfaces;
37using OpenSim.Framework.Servers.HttpServer;
38using OpenSim.Server.Handlers.Base;
39
40namespace OpenSim.Server.Handlers.Hypergrid
41{
42 public class HeloServiceInConnector : ServiceConnector
43 {
44 public HeloServiceInConnector(IConfigSource config, IHttpServer server, string configName) :
45 base(config, server, configName)
46 {
47 server.AddStreamHandler(new HeloServerGetHandler("opensim-robust"));
48 }
49 }
50
51 public class HeloServerGetHandler : BaseStreamHandler
52 {
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54
55 private string m_HandlersType;
56
57 public HeloServerGetHandler(string handlersType) :
58 base("GET", "/helo")
59 {
60 m_HandlersType = handlersType;
61 }
62
63 public override byte[] Handle(string path, Stream requestData,
64 OSHttpRequest httpRequest, OSHttpResponse httpResponse)
65 {
66 return OKResponse(httpResponse);
67 }
68
69 private byte[] OKResponse(OSHttpResponse httpResponse)
70 {
71 m_log.Debug("[HELO]: hi, I was called");
72 httpResponse.AddHeader("X-Handlers-Provided", m_HandlersType);
73 httpResponse.StatusCode = (int)HttpStatusCode.OK;
74 httpResponse.StatusDescription = "OK";
75 return new byte[0];
76 }
77
78 }
79}
diff --git a/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs b/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs
index 34df54a..5c31639 100644
--- a/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs
@@ -32,6 +32,8 @@ using System.Collections.Generic;
32using System.Reflection; 32using System.Reflection;
33using OpenSim.Framework; 33using OpenSim.Framework;
34using OpenSim.Services.Interfaces; 34using OpenSim.Services.Interfaces;
35using OpenSim.Services.Connectors.Hypergrid;
36using OpenSim.Services.Connectors.SimianGrid;
35 37
36namespace OpenSim.Services.Connectors 38namespace OpenSim.Services.Connectors
37{ 39{
@@ -41,7 +43,7 @@ namespace OpenSim.Services.Connectors
41 LogManager.GetLogger( 43 LogManager.GetLogger(
42 MethodBase.GetCurrentMethod().DeclaringType); 44 MethodBase.GetCurrentMethod().DeclaringType);
43 45
44 private Dictionary<string, AssetServicesConnector> m_connectors = new Dictionary<string, AssetServicesConnector>(); 46 private Dictionary<string, IAssetService> m_connectors = new Dictionary<string, IAssetService>();
45 47
46 public HGAssetServiceConnector(IConfigSource source) 48 public HGAssetServiceConnector(IConfigSource source)
47 { 49 {
@@ -81,7 +83,7 @@ namespace OpenSim.Services.Connectors
81 83
82 private IAssetService GetConnector(string url) 84 private IAssetService GetConnector(string url)
83 { 85 {
84 AssetServicesConnector connector = null; 86 IAssetService connector = null;
85 lock (m_connectors) 87 lock (m_connectors)
86 { 88 {
87 if (m_connectors.ContainsKey(url)) 89 if (m_connectors.ContainsKey(url))
@@ -90,12 +92,17 @@ namespace OpenSim.Services.Connectors
90 } 92 }
91 else 93 else
92 { 94 {
93 // We're instantiating this class explicitly, but this won't 95 // Still not as flexible as I would like this to be,
94 // work in general, because the remote grid may be running 96 // but good enough for now
95 // an asset server that has a different protocol. 97 string connectorType = new HeloServicesConnector(url).Helo();
96 // Eventually we will want a piece of protocol asking 98 m_log.DebugFormat("[HG ASSET SERVICE]: HELO returned {0}", connectorType);
97 // the remote server about its kind. Definitely cool thing to do! 99 if (connectorType == "opensim-simian")
98 connector = new AssetServicesConnector(url); 100 {
101 connector = new SimianAssetServiceConnector(url);
102 }
103 else
104 connector = new AssetServicesConnector(url);
105
99 m_connectors.Add(url, connector); 106 m_connectors.Add(url, connector);
100 } 107 }
101 } 108 }
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
index f5b5982..479a80e 100644
--- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
@@ -86,7 +86,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
86 paramList.Add(hash); 86 paramList.Add(hash);
87 87
88 XmlRpcRequest request = new XmlRpcRequest("link_region", paramList); 88 XmlRpcRequest request = new XmlRpcRequest("link_region", paramList);
89 string uri = "http://" + ((info.ServerURI != null && info.ServerURI != string.Empty && !info.ServerURI.StartsWith("http:")) ? info.ServerURI : info.ExternalEndPoint.Address + ":" + info.HttpPort + "/" ); 89 string uri = "http://" + ((info.ServerURI != null && info.ServerURI != string.Empty && !info.ServerURI.StartsWith("http:")) ? info.ServerURI : info.ExternalEndPoint.Address + ":" + info.HttpPort + "/");
90 m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Linking to " + uri); 90 m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Linking to " + uri);
91 XmlRpcResponse response = null; 91 XmlRpcResponse response = null;
92 try 92 try
diff --git a/OpenSim/Services/Connectors/Hypergrid/HeloServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/HeloServiceConnector.cs
new file mode 100644
index 0000000..7b166c1
--- /dev/null
+++ b/OpenSim/Services/Connectors/Hypergrid/HeloServiceConnector.cs
@@ -0,0 +1,75 @@
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 log4net;
29using System;
30using System.Net;
31using System.Reflection;
32using Nini.Config;
33
34namespace OpenSim.Services.Connectors
35{
36 public class HeloServicesConnector
37 {
38 private static readonly ILog m_log =
39 LogManager.GetLogger(
40 MethodBase.GetCurrentMethod().DeclaringType);
41
42 private string m_ServerURI = String.Empty;
43
44 public HeloServicesConnector()
45 {
46 }
47
48 public HeloServicesConnector(string serverURI)
49 {
50 m_ServerURI = serverURI.TrimEnd('/');
51 }
52
53
54 public virtual string Helo()
55 {
56 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(m_ServerURI + "/helo");
57
58 try
59 {
60 WebResponse response = req.GetResponse();
61 if (response.Headers.Get("X-Handlers-Provided") == null) // just in case this ever returns a null
62 return string.Empty;
63 return response.Headers.Get("X-Handlers-Provided");
64 }
65 catch (Exception e)
66 {
67 m_log.DebugFormat("[HELO SERVICE]: Unable to perform HELO request to {0}: {1}", m_ServerURI, e.Message);
68 }
69
70 // fail
71 return string.Empty;
72 }
73
74 }
75}
diff --git a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs
index e25e7eb..403ee15 100644
--- a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs
@@ -526,7 +526,7 @@ namespace OpenSim.Services.Connectors
526 InventoryFolderBase folder = new InventoryFolderBase(); 526 InventoryFolderBase folder = new InventoryFolderBase();
527 527
528 try 528 try
529 { 529 {
530 folder.ParentID = new UUID(data["ParentID"].ToString()); 530 folder.ParentID = new UUID(data["ParentID"].ToString());
531 folder.Type = short.Parse(data["Type"].ToString()); 531 folder.Type = short.Parse(data["Type"].ToString());
532 folder.Version = ushort.Parse(data["Version"].ToString()); 532 folder.Version = ushort.Parse(data["Version"].ToString());
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
index a871d07..67a06f3 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianActivityDetector.cs
@@ -26,11 +26,9 @@
26 */ 26 */
27 27
28using System; 28using System;
29using System.Collections.Generic;
30using System.Reflection; 29using System.Reflection;
31using OpenSim.Framework; 30using OpenSim.Framework;
32using OpenSim.Region.Framework.Scenes; 31using OpenSim.Region.Framework.Scenes;
33using OpenSim.Services.Interfaces;
34using OpenMetaverse; 32using OpenMetaverse;
35using log4net; 33using log4net;
36 34
@@ -71,7 +69,10 @@ namespace OpenSim.Services.Connectors.SimianGrid
71 public void OnMakeRootAgent(ScenePresence sp) 69 public void OnMakeRootAgent(ScenePresence sp)
72 { 70 {
73 m_log.DebugFormat("[SIMIAN ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName); 71 m_log.DebugFormat("[SIMIAN ACTIVITY DETECTOR]: Detected root presence {0} in {1}", sp.UUID, sp.Scene.RegionInfo.RegionName);
74 m_GridUserService.SetLastPosition(sp.UUID.ToString(), sp.ControllingClient.SessionId, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat); 72 Util.FireAndForget(delegate(object o)
73 {
74 m_GridUserService.SetLastPosition(sp.UUID.ToString(), sp.ControllingClient.SessionId, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
75 });
75 } 76 }
76 77
77 public void OnNewClient(IClientAPI client) 78 public void OnNewClient(IClientAPI client)
@@ -107,7 +108,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
107 108
108 void OnEnteringNewParcel(ScenePresence sp, int localLandID, UUID regionID) 109 void OnEnteringNewParcel(ScenePresence sp, int localLandID, UUID regionID)
109 { 110 {
110 m_GridUserService.SetLastPosition(sp.UUID.ToString(), sp.ControllingClient.SessionId, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat); 111 // Asynchronously update the position stored in the session table for this agent
112 Util.FireAndForget(delegate(object o)
113 {
114 m_GridUserService.SetLastPosition(sp.UUID.ToString(), sp.ControllingClient.SessionId, sp.Scene.RegionInfo.RegionID, sp.AbsolutePosition, sp.Lookat);
115 });
111 } 116 }
112 } 117 }
113} 118}
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
index 6d5b30e..30d3147 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
@@ -84,6 +84,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
84 CommonInit(source); 84 CommonInit(source);
85 } 85 }
86 86
87 public SimianAssetServiceConnector(string url)
88 {
89 m_serverUrl = url;
90 }
91
87 public void Initialise(IConfigSource source) 92 public void Initialise(IConfigSource source)
88 { 93 {
89 IConfig moduleConfig = source.Configs["Modules"]; 94 IConfig moduleConfig = source.Configs["Modules"];
@@ -119,6 +124,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
119 124
120 public AssetBase Get(string id) 125 public AssetBase Get(string id)
121 { 126 {
127 if (String.IsNullOrEmpty(m_serverUrl))
128 {
129 m_log.Error("[SIMIAN ASSET CONNECTOR]: No AssetServerURI configured");
130 throw new InvalidOperationException();
131 }
132
122 // Cache fetch 133 // Cache fetch
123 if (m_cache != null) 134 if (m_cache != null)
124 { 135 {
@@ -145,6 +156,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
145 /// <returns></returns> 156 /// <returns></returns>
146 public AssetMetadata GetMetadata(string id) 157 public AssetMetadata GetMetadata(string id)
147 { 158 {
159 if (String.IsNullOrEmpty(m_serverUrl))
160 {
161 m_log.Error("[SIMIAN ASSET CONNECTOR]: No AssetServerURI configured");
162 throw new InvalidOperationException();
163 }
164
148 AssetMetadata metadata = null; 165 AssetMetadata metadata = null;
149 166
150 // Cache fetch 167 // Cache fetch
@@ -216,6 +233,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
216 /// <returns>True if the id was parseable, false otherwise</returns> 233 /// <returns>True if the id was parseable, false otherwise</returns>
217 public bool Get(string id, Object sender, AssetRetrieved handler) 234 public bool Get(string id, Object sender, AssetRetrieved handler)
218 { 235 {
236 if (String.IsNullOrEmpty(m_serverUrl))
237 {
238 m_log.Error("[SIMIAN ASSET CONNECTOR]: No AssetServerURI configured");
239 throw new InvalidOperationException();
240 }
241
219 // Cache fetch 242 // Cache fetch
220 if (m_cache != null) 243 if (m_cache != null)
221 { 244 {
@@ -246,6 +269,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
246 /// <returns></returns> 269 /// <returns></returns>
247 public string Store(AssetBase asset) 270 public string Store(AssetBase asset)
248 { 271 {
272 if (String.IsNullOrEmpty(m_serverUrl))
273 {
274 m_log.Error("[SIMIAN ASSET CONNECTOR]: No AssetServerURI configured");
275 throw new InvalidOperationException();
276 }
277
249 bool storedInCache = false; 278 bool storedInCache = false;
250 string errorMessage = null; 279 string errorMessage = null;
251 280
@@ -378,6 +407,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
378 /// <returns></returns> 407 /// <returns></returns>
379 public bool Delete(string id) 408 public bool Delete(string id)
380 { 409 {
410 if (String.IsNullOrEmpty(m_serverUrl))
411 {
412 m_log.Error("[SIMIAN ASSET CONNECTOR]: No AssetServerURI configured");
413 throw new InvalidOperationException();
414 }
415
381 //string errorMessage = String.Empty; 416 //string errorMessage = String.Empty;
382 string url = m_serverUrl + id; 417 string url = m_serverUrl + id;
383 418
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
index 3505c64..4d0d53e 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
@@ -28,8 +28,6 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Collections.Specialized; 30using System.Collections.Specialized;
31using System.IO;
32using System.Net;
33using System.Reflection; 31using System.Reflection;
34using log4net; 32using log4net;
35using Mono.Addins; 33using Mono.Addins;
@@ -37,7 +35,6 @@ using Nini.Config;
37using OpenSim.Framework; 35using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces; 36using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 37using OpenSim.Region.Framework.Scenes;
40using OpenSim.Server.Base;
41using OpenSim.Services.Interfaces; 38using OpenSim.Services.Interfaces;
42using OpenMetaverse; 39using OpenMetaverse;
43using OpenMetaverse.StructuredData; 40using OpenMetaverse.StructuredData;
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs
index 5b18aef..6f2d735 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs
@@ -30,13 +30,10 @@ using System.Collections.Generic;
30using System.Collections.Specialized; 30using System.Collections.Specialized;
31using System.Reflection; 31using System.Reflection;
32using log4net; 32using log4net;
33using Mono.Addins;
34using Nini.Config; 33using Nini.Config;
35using OpenMetaverse; 34using OpenMetaverse;
36using OpenMetaverse.StructuredData; 35using OpenMetaverse.StructuredData;
37using OpenSim.Framework; 36using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes;
40using OpenSim.Services.Interfaces; 37using OpenSim.Services.Interfaces;
41 38
42using FriendInfo = OpenSim.Services.Interfaces.FriendInfo; 39using FriendInfo = OpenSim.Services.Interfaces.FriendInfo;
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
index 470eccd..21ad4ab 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
@@ -37,7 +37,6 @@ using OpenMetaverse.StructuredData;
37using OpenSim.Framework; 37using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 39using OpenSim.Region.Framework.Scenes;
40using OpenSim.Server.Base;
41using OpenSim.Services.Interfaces; 40using OpenSim.Services.Interfaces;
42 41
43namespace OpenSim.Services.Connectors.SimianGrid 42namespace OpenSim.Services.Connectors.SimianGrid
@@ -91,6 +90,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
91 CommonInit(source); 90 CommonInit(source);
92 } 91 }
93 92
93 public SimianInventoryServiceConnector(string url)
94 {
95 m_serverUrl = url;
96 }
97
94 public void Initialise(IConfigSource source) 98 public void Initialise(IConfigSource source)
95 { 99 {
96 IConfig moduleConfig = source.Configs["Modules"]; 100 IConfig moduleConfig = source.Configs["Modules"];
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
index 077be3c..a344594 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
@@ -28,17 +28,14 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Collections.Specialized; 30using System.Collections.Specialized;
31using System.Net;
32using System.Reflection; 31using System.Reflection;
33using log4net; 32using log4net;
34using Mono.Addins; 33using Mono.Addins;
35using Nini.Config; 34using Nini.Config;
36using OpenSim.Framework; 35using OpenSim.Framework;
37using OpenSim.Framework.Servers.HttpServer;
38using OpenSim.Region.Framework.Interfaces; 36using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 37using OpenSim.Region.Framework.Scenes;
40using OpenSim.Services.Interfaces; 38using OpenSim.Services.Interfaces;
41using OpenSim.Server.Base;
42using OpenMetaverse; 39using OpenMetaverse;
43using OpenMetaverse.StructuredData; 40using OpenMetaverse.StructuredData;
44 41
@@ -358,25 +355,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
358 return null; 355 return null;
359 } 356 }
360 357
361// private OSDMap GetSessionData(UUID sessionID)
362// {
363// m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for session " + sessionID);
364//
365// NameValueCollection requestArgs = new NameValueCollection
366// {
367// { "RequestMethod", "GetSession" },
368// { "SessionID", sessionID.ToString() }
369// };
370//
371// OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
372// if (response["Success"].AsBoolean())
373// return response;
374// else
375// m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session data for session " + sessionID);
376//
377// return null;
378// }
379
380 private List<PresenceInfo> GetSessions(UUID userID) 358 private List<PresenceInfo> GetSessions(UUID userID)
381 { 359 {
382 List<PresenceInfo> presences = new List<PresenceInfo>(1); 360 List<PresenceInfo> presences = new List<PresenceInfo>(1);
@@ -429,39 +407,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
429 return success; 407 return success;
430 } 408 }
431 409
432 ///// <summary>
433 ///// Fetch the last known avatar location with GetSession and persist it
434 ///// as user data with AddUserData
435 ///// </summary>
436 //private bool SetLastLocation(UUID sessionID)
437 //{
438 // NameValueCollection requestArgs = new NameValueCollection
439 // {
440 // { "RequestMethod", "GetSession" },
441 // { "SessionID", sessionID.ToString() }
442 // };
443
444 // OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
445 // bool success = response["Success"].AsBoolean();
446
447 // if (success)
448 // {
449 // UUID userID = response["UserID"].AsUUID();
450 // UUID sceneID = response["SceneID"].AsUUID();
451 // Vector3 position = response["ScenePosition"].AsVector3();
452 // Vector3 lookAt = response["SceneLookAt"].AsVector3();
453
454 // return SetLastLocation(userID, sceneID, position, lookAt);
455 // }
456 // else
457 // {
458 // m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve presence information for session " + sessionID +
459 // " while saving last location: " + response["Message"].AsString());
460 // }
461
462 // return success;
463 //}
464
465 private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse, OSDMap userResponse) 410 private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse, OSDMap userResponse)
466 { 411 {
467 if (sessionResponse == null) 412 if (sessionResponse == null)
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs
index 0ef4974..b7e8538 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs
@@ -291,8 +291,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
291 // Check if the user is online 291 // Check if the user is online
292 if (client.Scene is Scene) 292 if (client.Scene is Scene)
293 { 293 {
294 OpenSim.Services.Interfaces.PresenceInfo[] presences = ((Scene)client.Scene).PresenceService.GetAgents(new string[] { avatarID.ToString() }); 294 OpenSim.Services.Interfaces.PresenceInfo presence = ((Scene)client.Scene).PresenceService.GetAgent(avatarID);
295 if (presences != null && presences.Length > 0) 295 if (presence != null)
296 flags |= ProfileFlags.Online; 296 flags |= ProfileFlags.Online;
297 } 297 }
298 298
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs
index 694aa72..ddd2322 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs
@@ -28,7 +28,6 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Collections.Specialized; 30using System.Collections.Specialized;
31using System.IO;
32using System.Reflection; 31using System.Reflection;
33using OpenSim.Framework; 32using OpenSim.Framework;
34using OpenSim.Region.Framework.Interfaces; 33using OpenSim.Region.Framework.Interfaces;
@@ -49,13 +48,15 @@ namespace OpenSim.Services.Connectors.SimianGrid
49 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] 48 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
50 public class SimianUserAccountServiceConnector : IUserAccountService, ISharedRegionModule 49 public class SimianUserAccountServiceConnector : IUserAccountService, ISharedRegionModule
51 { 50 {
51 private const double CACHE_EXPIRATION_SECONDS = 120.0;
52
52 private static readonly ILog m_log = 53 private static readonly ILog m_log =
53 LogManager.GetLogger( 54 LogManager.GetLogger(
54 MethodBase.GetCurrentMethod().DeclaringType); 55 MethodBase.GetCurrentMethod().DeclaringType);
55 56
56 private string m_serverUrl = String.Empty; 57 private string m_serverUrl = String.Empty;
57 private ExpiringCache<UUID, UserAccount> m_accountCache; 58 private ExpiringCache<UUID, UserAccount> m_accountCache = new ExpiringCache<UUID,UserAccount>();
58 private bool m_Enabled = false; 59 private bool m_Enabled;
59 60
60 #region ISharedRegionModule 61 #region ISharedRegionModule
61 62
@@ -141,7 +142,15 @@ namespace OpenSim.Services.Connectors.SimianGrid
141 { "UserID", userID.ToString() } 142 { "UserID", userID.ToString() }
142 }; 143 };
143 144
144 return GetUser(requestArgs); 145 account = GetUser(requestArgs);
146
147 if (account == null)
148 {
149 // Store null responses too, to avoid repeated lookups for missing accounts
150 m_accountCache.AddOrUpdate(userID, null, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
151 }
152
153 return account;
145 } 154 }
146 155
147 public List<UserAccount> GetUserAccounts(UUID scopeID, string query) 156 public List<UserAccount> GetUserAccounts(UUID scopeID, string query)
@@ -216,7 +225,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
216 if (success) 225 if (success)
217 { 226 {
218 // Cache the user account info 227 // Cache the user account info
219 m_accountCache.AddOrUpdate(data.PrincipalID, data, DateTime.Now + TimeSpan.FromMinutes(2.0d)); 228 m_accountCache.AddOrUpdate(data.PrincipalID, data, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
220 } 229 }
221 else 230 else
222 { 231 {
@@ -281,7 +290,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
281 GetFirstLastName(response["Name"].AsString(), out account.FirstName, out account.LastName); 290 GetFirstLastName(response["Name"].AsString(), out account.FirstName, out account.LastName);
282 291
283 // Cache the user account info 292 // Cache the user account info
284 m_accountCache.AddOrUpdate(account.PrincipalID, account, DateTime.Now + TimeSpan.FromMinutes(2.0d)); 293 m_accountCache.AddOrUpdate(account.PrincipalID, account, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS));
285 294
286 return account; 295 return account;
287 } 296 }
diff --git a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs b/OpenSim/Services/Connectors/Simulation/EstateDataService.cs
new file mode 100644
index 0000000..87c49d3
--- /dev/null
+++ b/OpenSim/Services/Connectors/Simulation/EstateDataService.cs
@@ -0,0 +1,112 @@
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 log4net;
32using Mono.Addins;
33using Nini.Config;
34using System.Reflection;
35using OpenSim.Services.Base;
36using OpenSim.Services.Interfaces;
37using OpenSim.Data;
38using OpenSim.Framework;
39using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Region.Framework.Scenes;
41
42namespace OpenSim.Services.Connectors
43{
44 public class EstateDataService : ServiceBase, IEstateDataService
45 {
46 private static readonly ILog m_log =
47 LogManager.GetLogger(
48 MethodBase.GetCurrentMethod().DeclaringType);
49
50 protected IEstateDataStore m_database;
51
52 public EstateDataService(IConfigSource config)
53 : base(config)
54 {
55 string dllName = String.Empty;
56 string connString = String.Empty;
57
58 // Try reading the [DatabaseService] section, if it exists
59 IConfig dbConfig = config.Configs["DatabaseService"];
60 if (dbConfig != null)
61 {
62 dllName = dbConfig.GetString("StorageProvider", String.Empty);
63 connString = dbConfig.GetString("EstateConnectionString", String.Empty);
64 if (String.IsNullOrEmpty(connString))
65 connString = dbConfig.GetString("ConnectionString", String.Empty);
66 }
67
68 // We tried, but this doesn't exist. We can't proceed
69 if (dllName == String.Empty)
70 throw new Exception("No StorageProvider configured");
71
72 m_database = LoadPlugin<IEstateDataStore>(dllName, new Object[] { connString });
73 if (m_database == null)
74 throw new Exception("Could not find a storage interface in the given module");
75 }
76
77 public EstateSettings LoadEstateSettings(UUID regionID, bool create)
78 {
79 return m_database.LoadEstateSettings(regionID, create);
80 }
81
82 public EstateSettings LoadEstateSettings(int estateID)
83 {
84 return m_database.LoadEstateSettings(estateID);
85 }
86
87 public void StoreEstateSettings(EstateSettings es)
88 {
89 m_database.StoreEstateSettings(es);
90 }
91
92 public List<int> GetEstates(string search)
93 {
94 return m_database.GetEstates(search);
95 }
96
97 public bool LinkRegion(UUID regionID, int estateID)
98 {
99 return m_database.LinkRegion(regionID, estateID);
100 }
101
102 public List<UUID> GetRegions(int estateID)
103 {
104 return m_database.GetRegions(estateID);
105 }
106
107 public bool DeleteEstate(int estateID)
108 {
109 return m_database.DeleteEstate(estateID);
110 }
111 }
112}
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs b/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
new file mode 100644
index 0000000..946f7e4
--- /dev/null
+++ b/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
@@ -0,0 +1,140 @@
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 log4net;
32using Mono.Addins;
33using Nini.Config;
34using System.Reflection;
35using OpenSim.Services.Base;
36using OpenSim.Services.Interfaces;
37using OpenSim.Data;
38using OpenSim.Framework;
39using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Region.Framework.Scenes;
41
42namespace OpenSim.Services.Connectors
43{
44 public class SimulationDataService : ServiceBase, ISimulationDataService
45 {
46 private static readonly ILog m_log =
47 LogManager.GetLogger(
48 MethodBase.GetCurrentMethod().DeclaringType);
49
50 protected ISimulationDataStore m_database;
51
52 public SimulationDataService(IConfigSource config)
53 : base(config)
54 {
55 string dllName = String.Empty;
56 string connString = String.Empty;
57
58 // Try reading the [DatabaseService] section, if it exists
59 IConfig dbConfig = config.Configs["DatabaseService"];
60 if (dbConfig != null)
61 {
62 dllName = dbConfig.GetString("StorageProvider", String.Empty);
63 connString = dbConfig.GetString("ConnectionString", String.Empty);
64 }
65
66 // We tried, but this doesn't exist. We can't proceed
67 if (dllName == String.Empty)
68 throw new Exception("No StorageProvider configured");
69
70 m_database = LoadPlugin<ISimulationDataStore>(dllName, new Object[] { connString });
71 if (m_database == null)
72 throw new Exception("Could not find a storage interface in the given module");
73 }
74
75 public void StoreObject(SceneObjectGroup obj, UUID regionUUID)
76 {
77 m_database.StoreObject(obj, regionUUID);
78 }
79
80 public void RemoveObject(UUID uuid, UUID regionUUID)
81 {
82 m_database.RemoveObject(uuid, regionUUID);
83 }
84
85 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
86 {
87 m_database.StorePrimInventory(primID, items);
88 }
89
90 public List<SceneObjectGroup> LoadObjects(UUID regionUUID)
91 {
92 return m_database.LoadObjects(regionUUID);
93 }
94
95 public void StoreTerrain(double[,] terrain, UUID regionID)
96 {
97 m_database.StoreTerrain(terrain, regionID);
98 }
99
100 public double[,] LoadTerrain(UUID regionID)
101 {
102 return m_database.LoadTerrain(regionID);
103 }
104
105 public void StoreLandObject(ILandObject Parcel)
106 {
107 m_database.StoreLandObject(Parcel);
108 }
109
110 public void RemoveLandObject(UUID globalID)
111 {
112 m_database.RemoveLandObject(globalID);
113 }
114
115 public List<LandData> LoadLandObjects(UUID regionUUID)
116 {
117 return m_database.LoadLandObjects(regionUUID);
118 }
119
120 public void StoreRegionSettings(RegionSettings rs)
121 {
122 m_database.StoreRegionSettings(rs);
123 }
124
125 public RegionSettings LoadRegionSettings(UUID regionUUID)
126 {
127 return m_database.LoadRegionSettings(regionUUID);
128 }
129
130 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
131 {
132 return m_database.LoadRegionWindlightSettings(regionUUID);
133 }
134
135 public void StoreRegionWindlightSettings(RegionLightShareData wl)
136 {
137 m_database.StoreRegionWindlightSettings(wl);
138 }
139 }
140}
diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs
index 86bca79..e543337 100644
--- a/OpenSim/Services/InventoryService/InventoryService.cs
+++ b/OpenSim/Services/InventoryService/InventoryService.cs
@@ -276,11 +276,11 @@ namespace OpenSim.Services.InventoryService
276 List<InventoryFolderBase> folders = RequestSubFolders(root.ID); 276 List<InventoryFolderBase> folders = RequestSubFolders(root.ID);
277 277
278 foreach (InventoryFolderBase folder in folders) 278 foreach (InventoryFolderBase folder in folders)
279 { 279 {
280 if (folder.Type == (short)type) 280 if (folder.Type == (short)type)
281 { 281 {
282// m_log.DebugFormat( 282// m_log.DebugFormat(
283// "[INVENTORY SERVICE]: Found folder {0} type {1}", folder.Name, (AssetType)folder.Type); 283// "[INVENTORY SERVICE]: Found folder {0} type {1}", folder.Name, (AssetType)folder.Type);
284 284
285 return folder; 285 return folder;
286 } 286 }
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index 5ccb912..1e4b6c2 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -314,7 +314,7 @@ namespace OpenSim.Services.LLLoginService
314 { 314 {
315 // something went wrong, make something up, so that we don't have to test this anywhere else 315 // something went wrong, make something up, so that we don't have to test this anywhere else
316 guinfo = new GridUserInfo(); 316 guinfo = new GridUserInfo();
317 guinfo.LastPosition = guinfo.HomePosition = new Vector3(128, 128, 30); 317 guinfo.LastPosition = guinfo.HomePosition = new Vector3(128, 128, 30);
318 } 318 }
319 319
320 // 320 //
diff --git a/OpenSim/Services/UserAccountService/UserAccountService.cs b/OpenSim/Services/UserAccountService/UserAccountService.cs
index 326e502..f376cf8 100644
--- a/OpenSim/Services/UserAccountService/UserAccountService.cs
+++ b/OpenSim/Services/UserAccountService/UserAccountService.cs
@@ -97,10 +97,10 @@ namespace OpenSim.Services.UserAccountService
97 public UserAccount GetUserAccount(UUID scopeID, string firstName, 97 public UserAccount GetUserAccount(UUID scopeID, string firstName,
98 string lastName) 98 string lastName)
99 { 99 {
100// m_log.DebugFormat( 100// m_log.DebugFormat(
101// "[USER ACCOUNT SERVICE]: Retrieving account by username for {0} {1}, scope {2}", 101// "[USER ACCOUNT SERVICE]: Retrieving account by username for {0} {1}, scope {2}",
102// firstName, lastName, scopeID); 102// firstName, lastName, scopeID);
103 103
104 UserAccountData[] d; 104 UserAccountData[] d;
105 105
106 if (scopeID != UUID.Zero) 106 if (scopeID != UUID.Zero)
@@ -235,10 +235,10 @@ namespace OpenSim.Services.UserAccountService
235 235
236 public bool StoreUserAccount(UserAccount data) 236 public bool StoreUserAccount(UserAccount data)
237 { 237 {
238// m_log.DebugFormat( 238// m_log.DebugFormat(
239// "[USER ACCOUNT SERVICE]: Storing user account for {0} {1} {2}, scope {3}", 239// "[USER ACCOUNT SERVICE]: Storing user account for {0} {1} {2}, scope {3}",
240// data.FirstName, data.LastName, data.PrincipalID, data.ScopeID); 240// data.FirstName, data.LastName, data.PrincipalID, data.ScopeID);
241 241
242 UserAccountData d = new UserAccountData(); 242 UserAccountData d = new UserAccountData();
243 243
244 d.FirstName = data.FirstName; 244 d.FirstName = data.FirstName;
@@ -285,7 +285,7 @@ namespace OpenSim.Services.UserAccountService
285 #endregion 285 #endregion
286 286
287 #region Console commands 287 #region Console commands
288 288
289 /// <summary> 289 /// <summary>
290 /// Handle the create user command from the console. 290 /// Handle the create user command from the console.
291 /// </summary> 291 /// </summary>
@@ -297,12 +297,14 @@ namespace OpenSim.Services.UserAccountService
297 string password; 297 string password;
298 string email; 298 string email;
299 299
300 List<char> excluded = new List<char>(new char[]{' '});
301
300 if (cmdparams.Length < 3) 302 if (cmdparams.Length < 3)
301 firstName = MainConsole.Instance.CmdPrompt("First name", "Default"); 303 firstName = MainConsole.Instance.CmdPrompt("First name", "Default", excluded);
302 else firstName = cmdparams[2]; 304 else firstName = cmdparams[2];
303 305
304 if (cmdparams.Length < 4) 306 if (cmdparams.Length < 4)
305 lastName = MainConsole.Instance.CmdPrompt("Last name", "User"); 307 lastName = MainConsole.Instance.CmdPrompt("Last name", "User", excluded);
306 else lastName = cmdparams[3]; 308 else lastName = cmdparams[3];
307 309
308 if (cmdparams.Length < 5) 310 if (cmdparams.Length < 5)
diff --git a/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs b/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs
index 2a055cc..de6e815 100644
--- a/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs
+++ b/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs
@@ -35,11 +35,86 @@ using OpenSim.Region.Framework.Scenes;
35 35
36namespace OpenSim.Data.Null 36namespace OpenSim.Data.Null
37{ 37{
38 public class NullDataService : ISimulationDataService
39 {
40 private NullDataStore m_store;
41
42 public NullDataService()
43 {
44 m_store = new NullDataStore();
45 }
46
47 public void StoreObject(SceneObjectGroup obj, UUID regionUUID)
48 {
49 m_store.StoreObject(obj, regionUUID);
50 }
51
52 public void RemoveObject(UUID uuid, UUID regionUUID)
53 {
54 m_store.RemoveObject(uuid, regionUUID);
55 }
56
57 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
58 {
59 m_store.StorePrimInventory(primID, items);
60 }
61
62 public List<SceneObjectGroup> LoadObjects(UUID regionUUID)
63 {
64 return m_store.LoadObjects(regionUUID);
65 }
66
67 public void StoreTerrain(double[,] terrain, UUID regionID)
68 {
69 m_store.StoreTerrain(terrain, regionID);
70 }
71
72 public double[,] LoadTerrain(UUID regionID)
73 {
74 return m_store.LoadTerrain(regionID);
75 }
76
77 public void StoreLandObject(ILandObject Parcel)
78 {
79 m_store.StoreLandObject(Parcel);
80 }
81
82 public void RemoveLandObject(UUID globalID)
83 {
84 m_store.RemoveLandObject(globalID);
85 }
86
87 public List<LandData> LoadLandObjects(UUID regionUUID)
88 {
89 return m_store.LoadLandObjects(regionUUID);
90 }
91
92 public void StoreRegionSettings(RegionSettings rs)
93 {
94 m_store.StoreRegionSettings(rs);
95 }
96
97 public RegionSettings LoadRegionSettings(UUID regionUUID)
98 {
99 return m_store.LoadRegionSettings(regionUUID);
100 }
101
102 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
103 {
104 return m_store.LoadRegionWindlightSettings(regionUUID);
105 }
106
107 public void StoreRegionWindlightSettings(RegionLightShareData wl)
108 {
109 m_store.StoreRegionWindlightSettings(wl);
110 }
111 }
112
38 /// <summary> 113 /// <summary>
39 /// Mock region data plugin. This obeys the api contract for persistence but stores everything in memory, so that 114 /// Mock region data plugin. This obeys the api contract for persistence but stores everything in memory, so that
40 /// tests can check correct persistence. 115 /// tests can check correct persistence.
41 /// </summary> 116 /// </summary>
42 public class NullDataStore : IRegionDataStore 117 public class NullDataStore : ISimulationDataStore
43 { 118 {
44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 119 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 120
@@ -99,7 +174,7 @@ namespace OpenSim.Data.Null
99 } 174 }
100 175
101 public void RemoveObject(UUID obj, UUID regionUUID) 176 public void RemoveObject(UUID obj, UUID regionUUID)
102 { 177 {
103 // All parts belonging to the object with the uuid are removed. 178 // All parts belonging to the object with the uuid are removed.
104 List<SceneObjectPart> parts = new List<SceneObjectPart>(m_sceneObjectParts.Values); 179 List<SceneObjectPart> parts = new List<SceneObjectPart>(m_sceneObjectParts.Values);
105 foreach (SceneObjectPart part in parts) 180 foreach (SceneObjectPart part in parts)
@@ -108,13 +183,12 @@ namespace OpenSim.Data.Null
108 { 183 {
109 m_log.DebugFormat( 184 m_log.DebugFormat(
110 "[MOCK REGION DATA PLUGIN]: Removing part {0} {1} as part of object {2} from {3}", 185 "[MOCK REGION DATA PLUGIN]: Removing part {0} {1} as part of object {2} from {3}",
111 part.Name, part.UUID, obj, regionUUID); 186 part.Name, part.UUID, obj, regionUUID);
112 m_sceneObjectParts.Remove(part.UUID); 187 m_sceneObjectParts.Remove(part.UUID);
113 } 188 }
114 } 189 }
115 } 190 }
116 191
117 // see IRegionDatastore
118 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) 192 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
119 { 193 {
120 m_primItems[primID] = items; 194 m_primItems[primID] = items;
@@ -130,7 +204,7 @@ namespace OpenSim.Data.Null
130 if (prim.IsRoot) 204 if (prim.IsRoot)
131 { 205 {
132 m_log.DebugFormat( 206 m_log.DebugFormat(
133 "[MOCK REGION DATA PLUGIN]: Loading root part {0} {1} in {2}", prim.Name, prim.UUID, regionUUID); 207 "[MOCK REGION DATA PLUGIN]: Loading root part {0} {1} in {2}", prim.Name, prim.UUID, regionUUID);
134 objects[prim.UUID] = new SceneObjectGroup(prim); 208 objects[prim.UUID] = new SceneObjectGroup(prim);
135 } 209 }
136 } 210 }
diff --git a/OpenSim/Tests/Common/Mock/TestScene.cs b/OpenSim/Tests/Common/Mock/TestScene.cs
index 615e519..0e1433a 100644
--- a/OpenSim/Tests/Common/Mock/TestScene.cs
+++ b/OpenSim/Tests/Common/Mock/TestScene.cs
@@ -31,6 +31,7 @@ using OpenSim.Framework;
31using OpenSim.Framework.Communications; 31using OpenSim.Framework.Communications;
32using OpenSim.Framework.Servers; 32using OpenSim.Framework.Servers;
33using OpenSim.Region.Framework; 33using OpenSim.Region.Framework;
34using OpenSim.Region.Framework.Interfaces;
34using OpenSim.Region.Framework.Scenes; 35using OpenSim.Region.Framework.Scenes;
35 36
36namespace OpenSim.Tests.Common.Mock 37namespace OpenSim.Tests.Common.Mock
@@ -39,20 +40,15 @@ namespace OpenSim.Tests.Common.Mock
39 { 40 {
40 public TestScene( 41 public TestScene(
41 RegionInfo regInfo, AgentCircuitManager authen, 42 RegionInfo regInfo, AgentCircuitManager authen,
42 SceneCommunicationService sceneGridService, StorageManager storeManager, 43 SceneCommunicationService sceneGridService, ISimulationDataService simDataService, IEstateDataService estateDataService,
43 ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, 44 ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim,
44 bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion) 45 bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion)
45 : base(regInfo, authen, sceneGridService, storeManager, moduleLoader, 46 : base(regInfo, authen, sceneGridService, simDataService, estateDataService, moduleLoader,
46 dumpAssetsToFile, physicalPrim, SeeIntoRegionFromNeighbor, config, simulatorVersion) 47 dumpAssetsToFile, physicalPrim, SeeIntoRegionFromNeighbor, config, simulatorVersion)
47 { 48 {
48 } 49 }
49 50
50 /// <summary> 51 /// <summary>
51 /// Allow retrieval for test check purposes
52 /// </summary>
53 public StorageManager StorageManager { get { return m_storageManager; } }
54
55 /// <summary>
56 /// Temporarily override session authentication for tests (namely teleport). 52 /// Temporarily override session authentication for tests (namely teleport).
57 /// </summary> 53 /// </summary>
58 /// 54 ///
@@ -69,6 +65,6 @@ namespace OpenSim.Tests.Common.Mock
69 public AsyncSceneObjectGroupDeleter SceneObjectGroupDeleter 65 public AsyncSceneObjectGroupDeleter SceneObjectGroupDeleter
70 { 66 {
71 get { return m_asyncSceneObjectDeleter; } 67 get { return m_asyncSceneObjectDeleter; }
72 } 68 }
73 } 69 }
74} \ No newline at end of file 70} \ No newline at end of file
diff --git a/OpenSim/Tests/Common/Setup/AssetHelpers.cs b/OpenSim/Tests/Common/Setup/AssetHelpers.cs
index f9a80b0..8647cfe 100644
--- a/OpenSim/Tests/Common/Setup/AssetHelpers.cs
+++ b/OpenSim/Tests/Common/Setup/AssetHelpers.cs
@@ -54,8 +54,8 @@ namespace OpenSim.Tests.Common
54 { 54 {
55 AssetBase asset = CreateAsset(UUID.Random(), AssetType.Notecard, "hello", creatorId); 55 AssetBase asset = CreateAsset(UUID.Random(), AssetType.Notecard, "hello", creatorId);
56 scene.AssetService.Store(asset); 56 scene.AssetService.Store(asset);
57 return asset; 57 return asset;
58 } 58 }
59 59
60 /// <summary> 60 /// <summary>
61 /// Create an asset from the given scene object. 61 /// Create an asset from the given scene object.
diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
index 9318a27..fc9db03 100644
--- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
+++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Tests.Common.Setup
58 public class SceneSetupHelpers 58 public class SceneSetupHelpers
59 { 59 {
60 // These static variables in order to allow regions to be linked by shared modules and same 60 // These static variables in order to allow regions to be linked by shared modules and same
61 // CommunicationsManager. 61 // CommunicationsManager.
62 private static ISharedRegionModule m_assetService = null; 62 private static ISharedRegionModule m_assetService = null;
63// private static ISharedRegionModule m_authenticationService = null; 63// private static ISharedRegionModule m_authenticationService = null;
64 private static ISharedRegionModule m_inventoryService = null; 64 private static ISharedRegionModule m_inventoryService = null;
@@ -69,19 +69,19 @@ namespace OpenSim.Tests.Common.Setup
69 /// <summary> 69 /// <summary>
70 /// Set up a test scene 70 /// Set up a test scene
71 /// </summary> 71 /// </summary>
72 /// 72 ///
73 /// Automatically starts service threads, as would the normal runtime. 73 /// Automatically starts service threads, as would the normal runtime.
74 /// 74 ///
75 /// <returns></returns> 75 /// <returns></returns>
76 public static TestScene SetupScene() 76 public static TestScene SetupScene()
77 { 77 {
78 return SetupScene(""); 78 return SetupScene("");
79 } 79 }
80 80
81 /// <summary> 81 /// <summary>
82 /// Set up a test scene 82 /// Set up a test scene
83 /// </summary> 83 /// </summary>
84 /// 84 ///
85 /// <param name="realServices">Starts real inventory and asset services, as opposed to mock ones, if true</param> 85 /// <param name="realServices">Starts real inventory and asset services, as opposed to mock ones, if true</param>
86 /// <returns></returns> 86 /// <returns></returns>
87 public static TestScene SetupScene(String realServices) 87 public static TestScene SetupScene(String realServices)
@@ -94,7 +94,7 @@ namespace OpenSim.Tests.Common.Setup
94 ///// <summary> 94 ///// <summary>
95 ///// Set up a test scene 95 ///// Set up a test scene
96 ///// </summary> 96 ///// </summary>
97 ///// 97 /////
98 ///// <param name="realServices">Starts real inventory and asset services, as opposed to mock ones, if true</param> 98 ///// <param name="realServices">Starts real inventory and asset services, as opposed to mock ones, if true</param>
99 ///// <param name="cm">This should be the same if simulating two scenes within a standalone</param> 99 ///// <param name="cm">This should be the same if simulating two scenes within a standalone</param>
100 ///// <returns></returns> 100 ///// <returns></returns>
@@ -157,23 +157,24 @@ namespace OpenSim.Tests.Common.Setup
157 AgentCircuitManager acm = new AgentCircuitManager(); 157 AgentCircuitManager acm = new AgentCircuitManager();
158 SceneCommunicationService scs = new SceneCommunicationService(); 158 SceneCommunicationService scs = new SceneCommunicationService();
159 159
160 StorageManager sm = new StorageManager("OpenSim.Tests.Common.dll", "", ""); 160 ISimulationDataService simDataService = OpenSim.Server.Base.ServerUtils.LoadPlugin<ISimulationDataService>("OpenSim.Tests.Common.dll", null);
161 IEstateDataService estateDataService = null;
161 IConfigSource configSource = new IniConfigSource(); 162 IConfigSource configSource = new IniConfigSource();
162 163
163 TestScene testScene = new TestScene( 164 TestScene testScene = new TestScene(
164 regInfo, acm, scs, sm, null, false, false, false, configSource, null); 165 regInfo, acm, scs, simDataService, estateDataService, null, false, false, false, configSource, null);
165 166
166 INonSharedRegionModule capsModule = new CapabilitiesModule(); 167 INonSharedRegionModule capsModule = new CapabilitiesModule();
167 capsModule.Initialise(new IniConfigSource()); 168 capsModule.Initialise(new IniConfigSource());
168 testScene.AddRegionModule(capsModule.Name, capsModule); 169 testScene.AddRegionModule(capsModule.Name, capsModule);
169 capsModule.AddRegion(testScene); 170 capsModule.AddRegion(testScene);
170 171
171 IRegionModule godsModule = new GodsModule(); 172 IRegionModule godsModule = new GodsModule();
172 godsModule.Initialise(testScene, new IniConfigSource()); 173 godsModule.Initialise(testScene, new IniConfigSource());
173 testScene.AddModule(godsModule.Name, godsModule); 174 testScene.AddModule(godsModule.Name, godsModule);
174 realServices = realServices.ToLower(); 175 realServices = realServices.ToLower();
175 // IConfigSource config = new IniConfigSource(); 176 // IConfigSource config = new IniConfigSource();
176 177
177 // If we have a brand new scene, need to initialize shared region modules 178 // If we have a brand new scene, need to initialize shared region modules
178 if ((m_assetService == null && m_inventoryService == null) || newScene) 179 if ((m_assetService == null && m_inventoryService == null) || newScene)
179 { 180 {
@@ -184,13 +185,13 @@ namespace OpenSim.Tests.Common.Setup
184 185
185 // For now, always started a 'real' authentication service 186 // For now, always started a 'real' authentication service
186 StartAuthenticationService(testScene, true); 187 StartAuthenticationService(testScene, true);
187 188
188 if (realServices.Contains("inventory")) 189 if (realServices.Contains("inventory"))
189 StartInventoryService(testScene, true); 190 StartInventoryService(testScene, true);
190 else 191 else
191 StartInventoryService(testScene, false); 192 StartInventoryService(testScene, false);
192 193
193 StartGridService(testScene, true); 194 StartGridService(testScene, true);
194 StartUserAccountService(testScene); 195 StartUserAccountService(testScene);
195 StartPresenceService(testScene); 196 StartPresenceService(testScene);
196 } 197 }
@@ -207,7 +208,7 @@ namespace OpenSim.Tests.Common.Setup
207 m_presenceService.RegionLoaded(testScene); 208 m_presenceService.RegionLoaded(testScene);
208 209
209 } 210 }
210 211
211 m_inventoryService.PostInitialise(); 212 m_inventoryService.PostInitialise();
212 m_assetService.PostInitialise(); 213 m_assetService.PostInitialise();
213 m_userAccountService.PostInitialise(); 214 m_userAccountService.PostInitialise();
@@ -250,7 +251,7 @@ namespace OpenSim.Tests.Common.Setup
250 else 251 else
251 config.Configs["AssetService"].Set("LocalServiceModule", "OpenSim.Tests.Common.dll:MockAssetService"); 252 config.Configs["AssetService"].Set("LocalServiceModule", "OpenSim.Tests.Common.dll:MockAssetService");
252 config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); 253 config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
253 assetService.Initialise(config); 254 assetService.Initialise(config);
254 assetService.AddRegion(testScene); 255 assetService.AddRegion(testScene);
255 assetService.RegionLoaded(testScene); 256 assetService.RegionLoaded(testScene);
256 testScene.AddRegionModule(assetService.Name, assetService); 257 testScene.AddRegionModule(assetService.Name, assetService);
@@ -277,7 +278,7 @@ namespace OpenSim.Tests.Common.Setup
277 testScene.AddRegionModule(service.Name, service); 278 testScene.AddRegionModule(service.Name, service);
278 //m_authenticationService = service; 279 //m_authenticationService = service;
279 } 280 }
280 281
281 private static void StartInventoryService(Scene testScene, bool real) 282 private static void StartInventoryService(Scene testScene, bool real)
282 { 283 {
283 ISharedRegionModule inventoryService = new LocalInventoryServicesConnector(); 284 ISharedRegionModule inventoryService = new LocalInventoryServicesConnector();
@@ -285,7 +286,7 @@ namespace OpenSim.Tests.Common.Setup
285 config.AddConfig("Modules"); 286 config.AddConfig("Modules");
286 config.AddConfig("InventoryService"); 287 config.AddConfig("InventoryService");
287 config.Configs["Modules"].Set("InventoryServices", "LocalInventoryServicesConnector"); 288 config.Configs["Modules"].Set("InventoryServices", "LocalInventoryServicesConnector");
288 289
289 if (real) 290 if (real)
290 { 291 {
291 config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:InventoryService"); 292 config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:InventoryService");
@@ -294,7 +295,7 @@ namespace OpenSim.Tests.Common.Setup
294 { 295 {
295 config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Tests.Common.dll:MockInventoryService"); 296 config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Tests.Common.dll:MockInventoryService");
296 } 297 }
297 298
298 config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); 299 config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
299 inventoryService.Initialise(config); 300 inventoryService.Initialise(config);
300 inventoryService.AddRegion(testScene); 301 inventoryService.AddRegion(testScene);
@@ -338,14 +339,14 @@ namespace OpenSim.Tests.Common.Setup
338 config.Configs["UserAccountService"].Set("StorageProvider", "OpenSim.Data.Null.dll"); 339 config.Configs["UserAccountService"].Set("StorageProvider", "OpenSim.Data.Null.dll");
339 config.Configs["UserAccountService"].Set( 340 config.Configs["UserAccountService"].Set(
340 "LocalServiceModule", "OpenSim.Services.UserAccountService.dll:UserAccountService"); 341 "LocalServiceModule", "OpenSim.Services.UserAccountService.dll:UserAccountService");
341 342
342 if (m_userAccountService == null) 343 if (m_userAccountService == null)
343 { 344 {
344 ISharedRegionModule userAccountService = new LocalUserAccountServicesConnector(); 345 ISharedRegionModule userAccountService = new LocalUserAccountServicesConnector();
345 userAccountService.Initialise(config); 346 userAccountService.Initialise(config);
346 m_userAccountService = userAccountService; 347 m_userAccountService = userAccountService;
347 } 348 }
348 349
349 m_userAccountService.AddRegion(testScene); 350 m_userAccountService.AddRegion(testScene);
350 m_userAccountService.RegionLoaded(testScene); 351 m_userAccountService.RegionLoaded(testScene);
351 testScene.AddRegionModule(m_userAccountService.Name, m_userAccountService); 352 testScene.AddRegionModule(m_userAccountService.Name, m_userAccountService);
@@ -559,5 +560,4 @@ namespace OpenSim.Tests.Common.Setup
559 sogd.InventoryDeQueueAndDelete(); 560 sogd.InventoryDeQueueAndDelete();
560 } 561 }
561 } 562 }
562
563} 563}
diff --git a/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs b/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs
index 915af7e..135c50e 100644
--- a/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs
+++ b/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs
@@ -42,7 +42,7 @@ namespace OpenSim.Tests.Common
42 42
43 public static InventoryItemBase CreateInventoryItem( 43 public static InventoryItemBase CreateInventoryItem(
44 Scene scene, string itemName, UUID itemId, string folderPath, UUID userId) 44 Scene scene, string itemName, UUID itemId, string folderPath, UUID userId)
45 { 45 {
46 InventoryItemBase item = new InventoryItemBase(); 46 InventoryItemBase item = new InventoryItemBase();
47 item.Name = itemName; 47 item.Name = itemName;
48 item.AssetID = AssetHelpers.CreateAsset(scene, userId).FullID; 48 item.AssetID = AssetHelpers.CreateAsset(scene, userId).FullID;
@@ -52,7 +52,7 @@ namespace OpenSim.Tests.Common
52 InventoryFolderBase objsFolder = scene.InventoryService.GetFolderForType(userId, AssetType.Object); 52 InventoryFolderBase objsFolder = scene.InventoryService.GetFolderForType(userId, AssetType.Object);
53 53
54 item.Folder = objsFolder.ID; 54 item.Folder = objsFolder.ID;
55 scene.AddInventoryItem(item); 55 scene.AddInventoryItem(item);
56 56
57 return item; 57 return item;
58 } 58 }
diff --git a/OpenSim/Tests/Common/Setup/UserProfileTestUtils.cs b/OpenSim/Tests/Common/Setup/UserProfileTestUtils.cs
index 26156f3..d01521d 100644
--- a/OpenSim/Tests/Common/Setup/UserProfileTestUtils.cs
+++ b/OpenSim/Tests/Common/Setup/UserProfileTestUtils.cs
@@ -53,7 +53,7 @@ namespace OpenSim.Tests.Common.Setup
53// UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000099"); 53// UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000099");
54// return CreateUserWithInventory(commsManager, userId, callback); 54// return CreateUserWithInventory(commsManager, userId, callback);
55// } 55// }
56// 56//
57// /// <summary> 57// /// <summary>
58// /// Create a test user with a standard inventory 58// /// Create a test user with a standard inventory
59// /// </summary> 59// /// </summary>
@@ -108,11 +108,11 @@ namespace OpenSim.Tests.Common.Setup
108// { 108// {
109// LocalUserServices lus = (LocalUserServices)commsManager.UserService; 109// LocalUserServices lus = (LocalUserServices)commsManager.UserService;
110// lus.AddUser(firstName, lastName, password, "bill@bailey.com", 1000, 1000, userId); 110// lus.AddUser(firstName, lastName, password, "bill@bailey.com", 1000, 1000, userId);
111// 111//
112// CachedUserInfo userInfo = commsManager.UserProfileCacheService.GetUserDetails(userId); 112// CachedUserInfo userInfo = commsManager.UserProfileCacheService.GetUserDetails(userId);
113// userInfo.OnInventoryReceived += callback; 113// userInfo.OnInventoryReceived += callback;
114// userInfo.FetchInventory(); 114// userInfo.FetchInventory();
115// 115//
116// return userInfo; 116// return userInfo;
117// } 117// }
118 118
@@ -140,6 +140,6 @@ namespace OpenSim.Tests.Common.Setup
140 scene.UserAccountService.StoreUserAccount(ua); 140 scene.UserAccountService.StoreUserAccount(ua);
141 scene.InventoryService.CreateUserInventory(ua.PrincipalID); 141 scene.InventoryService.CreateUserInventory(ua.PrincipalID);
142 scene.AuthenticationService.SetPassword(ua.PrincipalID, pw); 142 scene.AuthenticationService.SetPassword(ua.PrincipalID, pw);
143 } 143 }
144 } 144 }
145} \ No newline at end of file 145} \ No newline at end of file
diff --git a/Prebuild/AUTHORS b/Prebuild/AUTHORS
new file mode 100644
index 0000000..9e86ac0
--- /dev/null
+++ b/Prebuild/AUTHORS
@@ -0,0 +1,10 @@
1Dave Hudson (jendave@yahoo.com),
2Matthew Holmes (matthew@wildfiregames.com)
3Dan Moorehead (dan05a@gmail.com)
4Rob Loach (http://www.robloach.net)
5C.J. Adams-Collier (cjac@colliertech.org)
6
7Patch Contributers
8lbsa71
9chi11ken
10sdague
diff --git a/Prebuild/COPYING b/Prebuild/COPYING
new file mode 100644
index 0000000..c57c080
--- /dev/null
+++ b/Prebuild/COPYING
@@ -0,0 +1,65 @@
1BSD License
2Copyright (c)2004-2008
3
4See AUTHORS file for list of copyright holders
5
6Dave Hudson (jendave@yahoo.com),
7Matthew Holmes (matthew@wildfiregames.com)
8Dan Moorehead (dan05a@gmail.com)
9Rob Loach (http://www.robloach.net)
10C.J. Adams-Collier (cjac@colliertech.org)
11
12http://dnpb.sourceforge.net
13All rights reserved.
14
15Redistribution and use in source and binary forms, with or without
16modification, are permitted provided that the following conditions
17are met:
18
191. Redistributions of source code must retain the above copyright notice,
20 this list of conditions and the following disclaimer.
21
222. Redistributions in binary form must reproduce the above copyright notice,
23 this list of conditions and the following disclaimer in the documentation
24 and/or other materials provided with the distribution.
25
263. The names of the authors may not be used to endorse or promote
27 products derived from this software without specific prior written
28 permission.
29
30 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
33 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
34 COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
35 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
36 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
38 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
39 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
40 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 POSSIBILITY OF SUCH DAMAGE.
42
43---
44
45Portions of src/Core/Targets/AutotoolsTarget.cs
46// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
47//
48// Permission is hereby granted, free of charge, to any person obtaining
49// a copy of this software and associated documentation files (the
50// "Software"), to deal in the Software without restriction, including
51// without limitation the rights to use, copy, modify, merge, publish,
52// distribute, sublicense, and/or sell copies of the Software, and to
53// permit persons to whom the Software is furnished to do so, subject to
54// the following conditions:
55//
56// The above copyright notice and this permission notice shall be
57// included in all copies or substantial portions of the Software.
58//
59// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
60// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
61// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
62// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
63// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
64// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
65// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Prebuild/ChangeLog b/Prebuild/ChangeLog
new file mode 100644
index 0000000..bb8e7b0
--- /dev/null
+++ b/Prebuild/ChangeLog
@@ -0,0 +1,461 @@
12008-12-09T02:15 D. Moonfire <d.moonfire@mfgames.com>
2 * src/Core/Kernel.cs
3 - Added a /ppi target to get the results of processing but before
4 processing the actual results.
5 * src/Core/Preprocessor.cs
6 - Applied the patch from kanato with formatting changes.
7 - Uses the <?include file="" ?> format.
8 * tests/
9 - Added some lightweight tests to test the functionality of the
10 include patch.
11
122008-06-19T09:37 John Anderson <sontek@gmail.com>
13 * src/Core/Kernel.cs
14 - Only Loop through targets that are not abstract.
15 * src/Core/Targets/VSGenericTarget.cs
16 - Marked abstract and removed the Target attribute.
17
182008-06-16T17:37 John Anderson <sontek@gmail.com>
19 * src/Core/Nodes/ProjectNode.cs,data/prebuild-1.7.xsd
20 - Added the ability to hardcode guid's in the projects
21
222008-05-21T0737 C.J. Adams-Collier <cjac@colliertech.org>
23 * src/Core/Targets/AutotoolsTarget.cs
24 - catch exception when unable to compile AssemblyInfo.cs
25
262008-05-07T17:29 John Anderson <sontek@gmail.com>
27 * src/Core/Targets/VSGenericTarget.cs
28 - Generate asp.net output in bin\ folder (asp.net requires it there)
29
302008-04-30T17:29 John Anderson <sontek@gmail.com>
31 * src/Core/Nodes/DatabaseReferenceNode.cs,
32 src/Core/Nodes/Datanode.cs,
33 src/Core/Nodes/FileNode.cs,
34 src/Core/Nodes/FileNodes.cs,
35 src/Core/Nodes/MatchNode.cs,
36 src/Core/Targets/VS2008Target.cs,
37 src/data/prebuild-1.7.xsd
38 - Refactored the project generation code to handle web projects and more
39 logically handle embedded resources and designer files.
40
412008-04-30T17:29 Joseph Lombrozo <digitaljeebus@gmail.com>
42 * src/Core/Nodes/SolutionNode.cs
43 - Had solutions inherit Configurations in the same way that Projects do.
44
452008-04-29T06:35 Joseph Lombrozo <digitaljeebus@gmail.com>
46 * src/Core/Targets/VS2008Target.cs,
47 src/Core/Nodes/DatabaseProjectNode.cs,
48 src/Core/Nodes/DatabaseReferenceNode.cs,
49 src/data/prebuild-1.7.xsd
50 - Added database references to database projects.
51 - Prevented nested solutions from being written to disk.
52
532008-04-29T05:43 Joseph Lombrozo <digitaljeebus@gmail.com>
54 * src/Core/Targets/VS2008Target.cs
55 - Enabled embedded solutions to contain Files.
56
572008-04-29T04:13 Joseph Lombrozo <digitaljeebus@gmail.com>
58 * src/Core/VSVersion.cs
59 - Fixed spelling mistake in enum comment.
60 * src/Core/Attributes/DataNodeAttribute.cs
61 - Allowed the DataNodeAttribute to be attached to a single class
62 more than once, allowing one class to be used to parse more than
63 one node at a time.
64 * src/Core/Kernel.cs
65 - Changed CacheNodeTypes() to allow for multiple DataNodeAttribute
66 instances in one class. Refactored ProcessFile(...) to return Solutions,
67 rather than adding them to the Kernel.
68 * src/Core/Nodes/SolutionNode.cs
69 - Added Guid (for embedded folders)
70 - Added DatabaseProjects, Solutions and Processes to the SolutionNode
71 when parsing.
72 * src/Core/Nodes/ProjectNode.cs
73 - Added FrameworkVersion property to allow for 2.0/3.0/3.5 differentiation.
74 * src/Core/Targets/VS2008Target.cs, src/data/prebuild-1.7.xsd
75 - Added ability to have embedded solutions, and externally referenced
76 prebuild scripts.
77
782008-04-24T04:33 John M. Anderson <sontek@gmail.com>
79 * src/Core/Targets/VS2003Target.cs, src/Core/Targets/VSVersion.cs
80 - Moved the VSVersion enum into its own file.
81 * src/Core/Targets/VS2008Target.cs
82 - added support for VS2008
83 * src/Core/Nodes/ProjectNode.cs
84 - Added initial support for ASP.NET projects
85 * src/Core/Nodes/DatabaseProjectNode.cs
86 - Added support for Visual Studio database projects
87
882008-02-19T07:08 C.J. Adams-Collier <cjac@colliertech.org>
89 * TODO
90 - added some tasks from Sam Hocevar
91 * src/Core/Targets/AutotoolsTarget.cs
92 - added a missing end paren
93 * COPYING
94 - Removed Randy Ridge's name from the copyright. Looks to me like
95 his name was present only because the file was nabbed from Tao
96
972008-02-09T20:29 C.J. Adams-Collier <cjac@colliertech.org>
98 * COPYING
99 - added MIT/X11 license due to inclusion of code from Monodevelop
100 * THANKS
101 - added Lluis Sanchez Gual and Todd Berman - I yoinked code from
102 their pkg-config .pc file parser to build AutotoolsTarget.cs.
103 Sorry it took me so long to remember to add mention of you guys!
104 * src/Core/Targets/AutotoolsTarget.cs
105 - added MIT/X11 license. see above.
106
1072008-02-07T08:27 C.J. Adams-Collier <cjac@colliertech.org>
108 * AUTHORS
109 - consolidated names and contact info found laying around the
110 source
111 * src/Core/Kernel.cs
112 - updated copyright date
113 - re-formatted license for 80-column editor
114 - updated log banner to indicate new date, new authors
115 * src/Core/Targets/AutotoolsTarget.cs
116 - clarified reasoning behind use of constants in
117 AutotoolsTarget.ParsePCFile
118 - reduced length of some long lines using newline/indent
119 - added log messages for parsing .pc files, emitting solutions,
120 projects
121 - robustified the inter-package dependency resolution target
122 - log warning when we can't find assembly for <Reference />
123 - clarified code for case of inability to find embedded
124 autotools.xml
125 * src/data/autotools.xml
126 - adding system lookup of resgen2 to configure.ac
127 - fixed .resource -> .resources typo
128 - added a rule to create <foo>.response file containing all sources
129 - using @<foo>.response on $(CSC) command line instead of listing
130 all source files
131 * src/Properties/AssemblyInfo.cs
132 - re-formatted license for an 80-column editor
133 - added more authors to the AssemblyCopyright attribute
134 - bumped version to 2.0.3
135 * prebuild.xml
136 - bumped version to 2.0.3
137 * scripts/autotools.sh
138 - if 'mono' is in the path, run Prebuild.exe with it
139 - using dirname to capture correct path to prebuild.xml &c
140
1412008-02-06T17:18 C.J. Adams-Collier <cjac@colliertech.org>
142 * src/Core/Targets/NAntTarget.cs
143 - re-formatted the license for an 80-column editor
144 - added myself to the copyright
145 - added a fix submitted by Gryc Ueusp <gryc.ueusp@gmail.com>
146 * src/Core/Targets/AutotoolsTarget.cs
147 - updated copyright to include 2008
148 * THANKS
149 - created file, added Gryc Ueusp <gryc.ueusp@gmail.com>
150
1512008-01-01T14:50 C.J. Adams-Collier <cjac@colliertech.org>
152 * src/data/autotools.xml
153 - fixed .resx -> .resource compilation
154 - fixed failing edge case where Project is an unsigned Library
155 - added $(RESOURCE_SRC) to list of extra dist files
156 * src/Core/Targets/AutotoolsTarget.cs
157 - removed embeddedResources from extraDistFiles list
158
1592007-04-18T07:49 C.J. Adams-Collier <cjac@colliertech.org>
160 * src/data/prebuild-1.7.xsd
161 - removed default version from references
162
1632007-04-06T12:42 C.J. Adams-Collier <cjac@colliertech.org>
164 * src/data/autotools.xml
165 - added support for /doc: output when XmlDocFile is not empty
166 - not printing \t \\n on lines that have no content
167 - gacutil now installs the root assembly instead of the one under
168 bin/Debug or whatever
169
1702007-04-04T22:12 C.J. Adams-Collier <cjac@colliertech.org>
171 * src/Core/Targets/AutotoolsTarget.cs
172 - removed debugging Console.WriteLine()
173 * src/data/autotools.xml
174 - ensuring that install-sh and missing get distributed
175 - explicitly stating that the sources, snk, resources and binary
176 references live under $(srcdir)
177 - corrected uninstall target
178 - verified distcheck completes successfully
179
1802007-04-03T21:56 C.J. Adams-Collier <cjac@colliertech.org>
181 * src/Core/Targets/AutotoolsTarget.cs
182 - added a using for System.Diagnostics
183 - added enum ClrVersion for use with the pkg-config parser
184 - added class SystemPackage for use with the pkg-config parser
185 - removed explicit "private" property of members since it is implied
186 - flushing the stream-writer before it's closed
187 - removed excess braces around an if statement
188 ! NormalizeAsmName(), AddAssembly(), GetAssembliesWithLibInfo(),
189 GetAssembliesWithoutLibInfo(), ProcessPiece(),
190 GetVariableFromPkgConfig(), ParsePCFile(),
191 RegisterSystemAssemblies(), RunInitialization()
192 - pulled the above from MonoDevelop to parse the system pkgconfig
193 files and determine /pkg: arguments. Original sources are here:
194 http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/SystemAssemblyService.cs
195 http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/ClrVersion.cs
196 ! WriteProject()
197 - now gathering project version from AssemblyInfo.cs if it is part
198 of the project
199 - changed the declaration of the ArrayList's in the method
200 - now copying assembly .config files to the project, distributing,
201 installing
202 - making sure all needed files live under the Project directory
203 - copying strongname keys to project directory
204 - parsing AssemblyInfo.cs to determine assembly version
205 - removing all references to ".."
206 - removed superfluous if(project.References.Count > 0) around
207 for(int refNum = 0; refNum < project.References.Count; refNum++)
208 - removed use of runtimeLibs
209 - adding hook to copy sibling project's generated assemblies to
210 this project during Make time
211 - added extra dist target to ensure all files required to build
212 get distributed during "make dist"
213 - added new xslt processing args:
214 -- assemblyName
215 -- extraDistFiles
216 -- pkgLibs (/pkg:foo)
217 -- localCopyTargets (to copy sibling assemblies at Make time)
218 -- projectVersion (if determined from AssemblyInfo.cs)
219 -- hasAssemblyConfig (if there's a assembly.exe.config present)
220 ! Write()
221 - calling RunInitialization() to gather pkg-config data
222 * src/data/autotools.xml
223 - accepting new args passed from AutotoolsTarget.cs
224 - modernized configure.ac a bit
225 - using a version of tar that allows >99-char filenames
226 - added ASSEMBLY_NAME variable
227 - using assembly name rather than project name for gac installation
228 - generated assembly is now assembly name and not project name
229 - accepting /pkg: flags gathered from AutotoolsTarget.cs
230 - adding Makefile targets to copy sibling project assemblies to .
231 - fixed Debug, Release targets
232 - adding support for strongname key signing
233 - adding /unsafe support
234 - adding a clean make target
235 - only running gacutil /u if the assembly being uninstalled is in gac
236 - added some templates to determine each Configuration's .snk
237 - added explanation as to why .exe assemblies live in $prefix/lib
238 * src/Properties/AssemblyInfo.cs
239 - bumped assembly version
240 * prebuild.xml
241 - bumped assembly version
242
2432007-03-29T18:03 C.J. Adams-Collier <cjac@colliertech.org>
244 * src/Core/Targets/AutotoolsTarget.cs
245 ! WriteProject()
246 - re-named incorrectly-named variable gacLibs to systemLibs
247 - added another reference list, runtimeLibs which contains the
248 libs we will need at runtime. we use this to build a MONO_PATH
249 - added monoPath to the xslt args list
250 * src/data/autotools.xml
251 ! <ProjectMakefileAm />
252 - renamed gacLibs to systemLibs
253 - added the sources to the dist list
254 - added logic to install libs that aren't strongnamed
255 ! <ProjectWrapperScriptIn />
256 - accepting a param to update the MONO_PATH
257
2582007-03-28T19:46 C.J. Adams-Collier <cjac@colliertech.org>
259 * src/Core/Targets/MonoDevelopTarget.cs
260 ! CleanProject()
261 - using Assembly.LoadWithPartialName to locate the assembly
262 * src/Core/Targets/AutotoolsTarget.cs
263 ! WriteCombine()
264 - no longer using $PWD to determine a project's source dir; this
265 doesn't work with <Process /> elements
266 - passing the solution name to all templates - fixes
267 multi-solution prebuild systems
268 ! WriteProject()
269 - no longer using $PWD to determine a project's source dir; this
270 doesn't work with <Process /> elements
271 - passing the solution name to all templates - fixes
272 multi-solution prebuild systems
273 - copying strongname key to the autotools directory
274 - using Assembly.LoadWithPartialName to locate assemblies
275 * src/data/autotools.xml
276 ! <ProjectConfigureAc />
277 - fixed the .pc AC_CONFIG_FILES macro
278 ! <ProjectMakefileAm />
279 - added solution name param
280 - wrapping if type=exe check around script install macro
281 - added type=lib check and .pc file install macro
282 - added support for Configuration-specific builds (Debug, Release, etc)
283 - added strongname keyfile code
284 - TODO: support non-strongnamed library installation
285 ! <ProjectWrapperScriptIn />
286 - added space preservation attribute to stylesheet element
287 - added a lower-case project name variable
288 - added solution name param
289 - made for-each template more specific
290 ! <SolutionAutogenSh />
291 - added solution name param
292 ! <SolutionConfigureAc />
293 - added solution name param
294 ! <SolutionMakefileAm />
295 - added solution name param
296 ! <ProjectPcIn />
297 - added solution name param
298
2992007-03-27T09:33 C.J. Adams-Collier <cjac@colliertech.org>
300 * src/Core/Targets/AutotoolsTarget.cs
301 - now processing the wrapper script if type is "Exe" or "WinExe"
302 * src/data/autotools.xml
303 ! <ProjectConfigureAc />
304 - being more exact about where text escaping is used
305 - using the correct variable name for the GACUTIL_FLAGS template
306 - using correct test="" for the AC_CONFIG_FILES macros
307 ! <ProjectMakefileAm />
308 - uncommented the bin_SCRIPTS section now that the script is being
309 generated correctly
310 ! <ProjectWrapperScriptIn />
311 - fixed whitespace at beginning of file, before #!
312 - using lower-case packageName to indicate installation location
313
3142007-03-27T09:33 C.J. Adams-Collier <cjac@colliertech.org>
315 * src/data/autotools.xml
316 ! <ProjectConfigureAc />
317 * added a lcProjectName which is $projectName lower-cased
318 * moved autoconf template specifier near AC_OUTPUT
319 * AC_OUTPUT with args is deprecated. now using AC_CONFIG_FILES
320 * placed AC_CONFIG_FILES() calls for wrapper script or pkg-config
321 file in xslt project type checks
322 ! <ProjectMakefileAm />
323 * commented out bin_SCRIPTS
324 * added a lcProjectName which is $projectName lower-cased
325 * using $lcProjectName instead of the longer version
326
3272007-03-27T08:39 C.J. Adams-Collier <cjac@colliertech.org>
328 * src/data/autotools.xml
329 ! <ProjectMakefileAm />
330 - added whitespace-preservation
331 - added the missing projectName param
332 - replaced bin_SCRIPTS with something that worked
333
3342007-03-27T07:56 C.J. Adams-Collier <cjac@colliertech.org>
335 * src/data/autotools.xml
336 ! <ProjectConfigureAc />
337 - cleaned up duplicate checks
338 - placed initialization macros above system check macros
339 - added some more messages about what's going on
340 - added GACUTIL_FLAGS variable including /package option
341 ! <ProjectMakefileAm />
342 - added an incomplete bin_SCRIPTS
343 - RCS check says "building" instead of "compiling"
344 ! <SolutionConfigureAc />
345 - removed macros that are useful only for projects
346 ! <ProjectWrapperScriptIn />
347 - created this element on this revision
348 - this is a wrapper shell script that lives in the $PATH and runs
349 the CIL assembly
350
3512007-03-26T20:18 C.J. Adams-Collier <cjac@colliertech.org>
352 * src/Core/Targets/AutotoolsTarget.cs
353 - creating new template arguments to contain the list of libs to
354 reference: source, binary & GAC
355 - source libs are included as part of this solution (untested)
356 - binary libs are distributed with the source (untested)
357 - GAC libs are assumed to be in the GAC or other lib path (tested)
358 * src/data/autotools.xml
359 - created new params through which to accept reference info
360 - created a working $(CSC) line
361 - added a TODO item for ordering project dependency for
362 AC_CONFIG_SUBDIRS code
363
3642007-03-26T08:41 C.J. Adams-Collier <cjac@colliertech.org>
365 * src/Core/Targets/AutotoolsTarget.cs
366 - now creating list of source files in managed code and passing
367 them to the template via <xsl:param>s
368 * src/data/prebuild-1.7.xsd
369 - updated the header comment to 2007
370 * src/data/autotools.xml
371 ! <ProjectConfigureAc>
372 - copied checks from Solution-level configure.ac
373 - copied solution-level config status
374 ! <ProjectMakefileAm>
375 - added <xsl:param> elements for file list to be passed through
376 - made a temporary target for the assembly we're building
377 - added this target to the deps of "all:"
378 ! <SolutionConfigureAc>
379 - changed status header/footer from "- - -" to "==="
380
3812007-03-23T08:33 C.J. Adams-Collier <cjac@colliertech.org>
382 Added version attribute handling code for Property element
383 Added description element handling code
384 * prebuild.xml
385 - added /Prebuild/Solution/Property/@version attribute
386 - added /Prebuild/Solution/Property/Description element
387 * src/Core/Nodes/ProjectNode.cs
388 - added some docs where they were missing and obvious
389 - added code to handle @version
390 * src/Core/Nodes/DescriptionNode.cs
391 - new file. Used to handle /Prebuild/Solution/Property/Description
392 * src/Core/Targets/AutotoolsTarget.cs
393 - added mkdirDashP(), a recursive directory creation method
394 - WriteProject() now copies the files to autotools/
395 * src/data/prebuild-1.7.xsd
396 - added /Prebuild/Solution/Property/Description element
397 - added /Prebuild/Solution/Property/@version attribute
398 * src/data/autotools.xml
399 - removed excess <xsl:value-of select="$projectName"/>
400 - explicitly using dnpb: prefix
401
4022007-03-23T04:31 C.J. Adams-Collier <cjac@colliertech.org>
403 Merged code from my stripped-down test
404 Adding support for the /Prebuild/Solution/Project/Author element
405 * prebuild.xml
406 - added Author elements
407 - cleaned up the really long Project element
408 * src/Core/Nodes/ProjectNode.cs
409 - added Author tag processing code
410 * src/Core/Nodes/AuthorNode.cs
411 - Created to process Author elements
412 - based off of ReferencePathNode.cs
413 * src/Core/Targets/AutotoolsTarget.cs
414 - merged code from https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/test.cs
415 - renamed old WriteCombine to WriteCombineOld
416 - renamed old WriteProject to WriteProjectOld
417 * src/data/prebuild-1.7.xsd
418 - added Author element to Project
419 * src/data/autotools.xml
420 - lower-cased utf
421
422
4232007-03-22T13:58 C.J. Adams-Collier <cjac@colliertech.org>
424 Exposing an XmlDocument that represents the prebuild.xml file
425 passed to the program
426
427 * src/Core/Kernel.cs
428 - created an object member called XmlDocument m_CurrentDoc
429 - created a property to access its value
430 - using m_CurrentDoc to load up the prebuild.xml file rather than
431 a local variable called "doc"
432
4332007-03-22 C.J. Adams-Collier <cjac@colliertech.org>
434 * prebuild.xml
435 - added autotools.xml created at https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/autotools.xml
436 * src/data/autotools.xml
437 - the same
438 * src/Core/Targets/MonoDevelopTarget.cs
439 - fixed bug introduced in r206
440
4412007-03-07 C.J. Adams-Collier <cjcollier@colliertech.org>
442 * src/data/prebuild-1.7.xsd
443 - added version attribute to Solution and Project elements
444
4452006-11-04T00:38 C.J. Adams-Collier <cjcollier@colliertech.org>
446 * placing AssemblyInfo.cs into Properties/
447 * Fixed double-mention of the package name
448
4492006-11-03T15:23 C.J. Adams-Collier <cjcollier@colliertech.org>
450 * corrected a problem in the Include.am generation code
451 * created the new .exe
452 * copied it to the root of the build
453
4542006-11-03T14:57 C.J. Adams-Collier <cjcollier@colliertech.org>
455 * Updated the .exe file
456
4572006-11-03 C.J. Adams-Collier <cjcollier@colliertech.org>
458 * Added a TODO file
459 * Added a ChangeLog file
460 * applied some fixes for autotools gac and pkg-config installation
461 problems
diff --git a/Prebuild/INSTALL b/Prebuild/INSTALL
new file mode 100644
index 0000000..23e5f25
--- /dev/null
+++ b/Prebuild/INSTALL
@@ -0,0 +1,236 @@
1Installation Instructions
2*************************
3
4Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
5Software Foundation, Inc.
6
7This file is free documentation; the Free Software Foundation gives
8unlimited permission to copy, distribute and modify it.
9
10Basic Installation
11==================
12
13These are generic installation instructions.
14
15 The `configure' shell script attempts to guess correct values for
16various system-dependent variables used during compilation. It uses
17those values to create a `Makefile' in each directory of the package.
18It may also create one or more `.h' files containing system-dependent
19definitions. Finally, it creates a shell script `config.status' that
20you can run in the future to recreate the current configuration, and a
21file `config.log' containing compiler output (useful mainly for
22debugging `configure').
23
24 It can also use an optional file (typically called `config.cache'
25and enabled with `--cache-file=config.cache' or simply `-C') that saves
26the results of its tests to speed up reconfiguring. (Caching is
27disabled by default to prevent problems with accidental use of stale
28cache files.)
29
30 If you need to do unusual things to compile the package, please try
31to figure out how `configure' could check whether to do them, and mail
32diffs or instructions to the address given in the `README' so they can
33be considered for the next release. If you are using the cache, and at
34some point `config.cache' contains results you don't want to keep, you
35may remove or edit it.
36
37 The file `configure.ac' (or `configure.in') is used to create
38`configure' by a program called `autoconf'. You only need
39`configure.ac' if you want to change it or regenerate `configure' using
40a newer version of `autoconf'.
41
42The simplest way to compile this package is:
43
44 1. `cd' to the directory containing the package's source code and type
45 `./configure' to configure the package for your system. If you're
46 using `csh' on an old version of System V, you might need to type
47 `sh ./configure' instead to prevent `csh' from trying to execute
48 `configure' itself.
49
50 Running `configure' takes awhile. While running, it prints some
51 messages telling which features it is checking for.
52
53 2. Type `make' to compile the package.
54
55 3. Optionally, type `make check' to run any self-tests that come with
56 the package.
57
58 4. Type `make install' to install the programs and any data files and
59 documentation.
60
61 5. You can remove the program binaries and object files from the
62 source code directory by typing `make clean'. To also remove the
63 files that `configure' created (so you can compile the package for
64 a different kind of computer), type `make distclean'. There is
65 also a `make maintainer-clean' target, but that is intended mainly
66 for the package's developers. If you use it, you may have to get
67 all sorts of other programs in order to regenerate files that came
68 with the distribution.
69
70Compilers and Options
71=====================
72
73Some systems require unusual options for compilation or linking that the
74`configure' script does not know about. Run `./configure --help' for
75details on some of the pertinent environment variables.
76
77 You can give `configure' initial values for configuration parameters
78by setting variables in the command line or in the environment. Here
79is an example:
80
81 ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
82
83 *Note Defining Variables::, for more details.
84
85Compiling For Multiple Architectures
86====================================
87
88You can compile the package for more than one kind of computer at the
89same time, by placing the object files for each architecture in their
90own directory. To do this, you must use a version of `make' that
91supports the `VPATH' variable, such as GNU `make'. `cd' to the
92directory where you want the object files and executables to go and run
93the `configure' script. `configure' automatically checks for the
94source code in the directory that `configure' is in and in `..'.
95
96 If you have to use a `make' that does not support the `VPATH'
97variable, you have to compile the package for one architecture at a
98time in the source code directory. After you have installed the
99package for one architecture, use `make distclean' before reconfiguring
100for another architecture.
101
102Installation Names
103==================
104
105By default, `make install' installs the package's commands under
106`/usr/local/bin', include files under `/usr/local/include', etc. You
107can specify an installation prefix other than `/usr/local' by giving
108`configure' the option `--prefix=PREFIX'.
109
110 You can specify separate installation prefixes for
111architecture-specific files and architecture-independent files. If you
112pass the option `--exec-prefix=PREFIX' to `configure', the package uses
113PREFIX as the prefix for installing programs and libraries.
114Documentation and other data files still use the regular prefix.
115
116 In addition, if you use an unusual directory layout you can give
117options like `--bindir=DIR' to specify different values for particular
118kinds of files. Run `configure --help' for a list of the directories
119you can set and what kinds of files go in them.
120
121 If the package supports it, you can cause programs to be installed
122with an extra prefix or suffix on their names by giving `configure' the
123option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
124
125Optional Features
126=================
127
128Some packages pay attention to `--enable-FEATURE' options to
129`configure', where FEATURE indicates an optional part of the package.
130They may also pay attention to `--with-PACKAGE' options, where PACKAGE
131is something like `gnu-as' or `x' (for the X Window System). The
132`README' should mention any `--enable-' and `--with-' options that the
133package recognizes.
134
135 For packages that use the X Window System, `configure' can usually
136find the X include and library files automatically, but if it doesn't,
137you can use the `configure' options `--x-includes=DIR' and
138`--x-libraries=DIR' to specify their locations.
139
140Specifying the System Type
141==========================
142
143There may be some features `configure' cannot figure out automatically,
144but needs to determine by the type of machine the package will run on.
145Usually, assuming the package is built to be run on the _same_
146architectures, `configure' can figure that out, but if it prints a
147message saying it cannot guess the machine type, give it the
148`--build=TYPE' option. TYPE can either be a short name for the system
149type, such as `sun4', or a canonical name which has the form:
150
151 CPU-COMPANY-SYSTEM
152
153where SYSTEM can have one of these forms:
154
155 OS KERNEL-OS
156
157 See the file `config.sub' for the possible values of each field. If
158`config.sub' isn't included in this package, then this package doesn't
159need to know the machine type.
160
161 If you are _building_ compiler tools for cross-compiling, you should
162use the option `--target=TYPE' to select the type of system they will
163produce code for.
164
165 If you want to _use_ a cross compiler, that generates code for a
166platform different from the build platform, you should specify the
167"host" platform (i.e., that on which the generated programs will
168eventually be run) with `--host=TYPE'.
169
170Sharing Defaults
171================
172
173If you want to set default values for `configure' scripts to share, you
174can create a site shell script called `config.site' that gives default
175values for variables like `CC', `cache_file', and `prefix'.
176`configure' looks for `PREFIX/share/config.site' if it exists, then
177`PREFIX/etc/config.site' if it exists. Or, you can set the
178`CONFIG_SITE' environment variable to the location of the site script.
179A warning: not all `configure' scripts look for a site script.
180
181Defining Variables
182==================
183
184Variables not defined in a site shell script can be set in the
185environment passed to `configure'. However, some packages may run
186configure again during the build, and the customized values of these
187variables may be lost. In order to avoid this problem, you should set
188them in the `configure' command line, using `VAR=value'. For example:
189
190 ./configure CC=/usr/local2/bin/gcc
191
192causes the specified `gcc' to be used as the C compiler (unless it is
193overridden in the site shell script). Here is a another example:
194
195 /bin/bash ./configure CONFIG_SHELL=/bin/bash
196
197Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
198configuration-related scripts to be executed by `/bin/bash'.
199
200`configure' Invocation
201======================
202
203`configure' recognizes the following options to control how it operates.
204
205`--help'
206`-h'
207 Print a summary of the options to `configure', and exit.
208
209`--version'
210`-V'
211 Print the version of Autoconf used to generate the `configure'
212 script, and exit.
213
214`--cache-file=FILE'
215 Enable the cache: use and save the results of the tests in FILE,
216 traditionally `config.cache'. FILE defaults to `/dev/null' to
217 disable caching.
218
219`--config-cache'
220`-C'
221 Alias for `--cache-file=config.cache'.
222
223`--quiet'
224`--silent'
225`-q'
226 Do not print messages saying which checks are being made. To
227 suppress all normal output, redirect it to `/dev/null' (any error
228 messages will still be shown).
229
230`--srcdir=DIR'
231 Look for the package's source code in directory DIR. Usually
232 `configure' can determine that directory automatically.
233
234`configure' also accepts some other, not widely useful, options. Run
235`configure --help' for more details.
236
diff --git a/Prebuild/NEWS b/Prebuild/NEWS
new file mode 100644
index 0000000..3ab3108
--- /dev/null
+++ b/Prebuild/NEWS
@@ -0,0 +1,200 @@
1Prebuild is an XML-driven pre-build tool allowing developers to easily generate project or make files for major IDE's and .NET development tools including: Visual Studio 2005, Visual Studio 2003, Visual Studio 2002, SharpDevelop, MonoDevelop, and NAnt.
2
3Documentation and downloads are available at http://dnpb.sourceforge.net.
4
5Prebuild is licensed under the BSD license.
6
7[ XXXXXXX XX, XXX - 1.3.2 ]
8 + Added Keyfile signing to NAnt target and VS2005 target
9 + Updated XSD file to 1.7
10 + Boo and VisualBasic Language support in VS2005 target
11 + Added basic Autotools target. It creates a non-recursive Autotools system.
12 ! Multiple files can be excluded from the Match node
13 ! VS2005 now handles .resx files correctly.
14 ! NAnt and Autotools now handle defines
15 ! NAnt and Autotools now handle resources
16 + Conditional XML variables can be passed through the command line.
17 + Added /install and /remove command line flags to install and remove assemblies from the GAC
18 + Many fixes to VS2005 target
19
20[ July 21, 2006 - 1.3.1 ]
21 ! VS2005 fixes from Rob Loach
22 ! NAnt fixes from Rob Loach and David Hudson
23 ! XML doc fixes from Rob Loach
24 + Added SharpDevelop2 target (really just uses VS2005 target)
25 ! Fixed bug with BuildEvents in Monodevelop target
26 + Passing /yes will default to answering yes to any warnings
27
28[ February 28, 2006 - 1.3 ]
29 + Added MonoDevelop target.
30 + Added NAnt target.
31 + Lots of fixes to all targets.
32 * Cleaned up the code using FXCop.
33 * Updated schema to 1.6 to fix a typo and add a new parameter.
34 * jendave is now the maintainer of the project. RobLoach has been added as a developer.
35 * Removed references to 'dnpb'.
36 + Added rudimentary support for pre- and post- build scripts
37 * Updated examples.
38
39[ August 5, 2004 - 1.2 ]
40 + Added Visual Studio Express (vs2005express) target contributed by Borrillis and modified for use with different languages
41 + Added the allowedgroups command line option followed by a pipe-delimited list of project group filter flags (eg. Group1|Group2) allow optional filtering of all projects that dont have at least one of these flags
42 + Added the filterGroups XML attribute to the project node and updated the scheme to v1.5 for this addition, it is used to specified the delimited list of filter groups to which a project belongs
43 * Modified the removedir command line option to allow for a pipe-delimited list of directory names
44 ! Modified the resource loading code to search for resourced without the prepended namespace (as Visual Studio .NET does it) to allow for it to be compiled with SharpDevelop as well
45 + Added the GenerateXmlDocFile boolean option to the Options XML element
46 * Changed the behavior of the XmlDocFile option so that if not specified it uses the assemblyName (without file extension) + .xml for the file name instead of just not generating the file since the new GenerateXmlDocFile takes care of this
47
48[ January 3, 2004 - 1.1 ]
49 ! Replaced regex use for more efficient manual parsing to allow use on non-windows platforms with Mono which has Regex problems
50 + Added the checkOsVars attribute to the root element for enabling interpolation for Enviroment variables in the form ${var}, otherwise no checking is performed for efficiency-sake
51 * Make the version attribute on the root element optional as it isn't used and not needed since the schema url contains the version
52
53[ December 30, 2004 - 1.1 ]
54 ! Applied Leed's fix for SharpDevelop references
55 + Rewrote much of the processing for better validation and without the use of a temp file
56 + Added support for configurations at the project level which are named All. They now apply changes to all Solution level defined configs
57 * Changed all spaces into tabs
58 + Added support for the None build action
59 * Replaced all sequence's in the XML schema for all's because the order doesn't matter since the xml file is loaded into an XmlDocument
60
61[ December 25, 2004 - 1.0 ]
62 + Added the /removedir option for cleaning directories like obj before file releases
63 + Changed WriteTempXml() and the new DeleteTempXml() methods to be compiled only in DEBUG builds
64 * Made path optional for Match elements (defaults to current directory) and updates schema for it
65 ! Fixed XML example in the readme.txt
66 + Added example xml files to docs directory
67 * Updated license.txt to add Dan Moorehead and update copyright years
68 + Updated prebuild.xml to take advantage of the default path attribute for match elements
69 + Updated Clean to delete the obj directories
70
71[ December 25, 2004 - 0.13 ]
72 + Added dnpb.exe so that it can be used to generate the project files
73 + Added dnpb.ico
74 * Added parameterless Write statement to Log for writing a single line
75 * Changed scehema to version 1.3 for support of icon attribute
76 * Added support for All configuration name under a Project node signifying common settings for all configurations
77 ! Fixed the SupressWarnings by adding the corresponding field to OptionsNode
78 * Wrote documentation in docs/readme.txt
79 * Added Dan Moorehead to copyrights and extended date from 2004 to 2004-2005
80 * Updated prebuild.xml
81 * Optimized Log class
82 * Updated OutputUsage()
83 * /clean targets all by default
84 * No log file is used by default, /log without value specified uses default file name
85 + Added support for the /pause which pauses the utility after execution to observe output
86
87
88[ September 27, 2004 - 0.12.2a ]
89 ! Fixed a nasty bug when trying to delete our temp file for pre-processing.
90
91[ September 15, 2004 - 0.12.2 ]
92 + Expanded platform identification, thanks to the NAnt guys for shedding some
93 light on how to properly check for UNIX platforms! Thanks guys!
94 * POSIX OS identifier changed to UNIX. Valid OS names are now "Win32", "UNIX",
95 and "Unknown".
96 ! Fixed SharpDevelop target to properly use the 'rootNamespace' attribute of
97 the Project tag.
98 + New command-line switch, /ppo, forces DNPB to pre-process the file and write
99 the pre-processed file. This allows you to test/debug your pre-processor
100 macros. No other processing will be done. You can specify a target file as
101 a paramter for the /ppo switch, or DNPB will write the file 'preprocessed.xml'
102 if you do not specify a file.
103 + The Match tag now has a 'buildAction' attribute which functions exactly like
104 the attribute of the same name for the File tag.
105
106[ August 5, 2004 - 0.12.1 ]
107 + Added environment variable expansion for all values. Environment variables
108 should be listed in the form ${VAR}.
109
110[ July 30, 2004 - 0.12.0 ]
111 + Added preprocessing via XML processing information tags. Available tags
112 are: <?if <exp> ?>, <?elseif <exp> ?>, <?else ?> and <?endif ?>. The
113 current expression parser is very basic, but will be replaced with a more
114 capable parser over time. Current operators available are: =, !=, <, >,
115 <=, >=. Current test variables available: OS, RuntimeVersion, RuntimeMajor,
116 RuntimeMinor, RuntimeRevision.
117
118[ July 27, 2004 - 0.11.4 ]
119 + Added 'useRegex' attribute to the Match tag. Matches can now use regular
120 expressions to match filenames.
121 + Added the 'assemblyName' attribute to the Project tag. Projects can now
122 set their output assembly name.
123 ! Fixed several bugs in the way that Project tags inheirt their parent
124 Solutions configuration options. This operation should now work fully as
125 intended.
126 ! Due to some wierdness, Project Guid's are now stored as part of the Project
127 node and created at parse time.
128
129[ May 11, 2004 - 0.11.3 ]
130 ! Fixed a bug where I was writing the wrong property name for a projects root
131 namespace.
132 ! Removed a DEBUG statement I had left in the code in 0.11.2.
133 ! Fixed a bug in the VS2002 writer which caused the version variables to not
134 be overriden correctly.
135 + Added the rootNamespace property to the <Project> element, allowing you to
136 specify the root namespace.
137 * /target and /clean are now mutually exclusive command line switches, and
138 they both now take the all option. In the case of /target all, all build
139 file for all targets will be created. In the case of /clean all, the user
140 will be prompted to make sure they want to do it, and if so, will clean
141 all build files for all targets.
142
143[ April 22, 2004 - 0.11.2 ]
144 ! Fixed a bug with the /file command-line operator. Was using the unresolved
145 file path rather then the resolved one, was making the attempt to open the
146 dnpb file fail.
147 ! Fixed a bug in the schema that required at least 1 solution and 1 reference
148 path. We can do just fine with 0 of either of these. Some files may be all
149 <Process> statements and not have any <Solution> tags.
150 ! Fixed a bug that caused the project references not to be written with the
151 SharpDevelop target.
152 * Changed the schema to version 1.2, allowing for Configuration nodes to exist
153 under project nodes. The inheritance of values is hierarchical. Meaning, if
154 you define a configuration named Debug at the Soltion level, and one by the
155 same name at the Project level, the one at the Project level will first
156 inherit the options of the Solution level configuration, then set it's own
157 options. If you define a configuration at the Project level and it does not
158 exist at the Solution level, it will be created at the Solution level.
159 * Project references should now work correctly across the board. Note that due
160 to a restriction in Visual Studio, you can only reference projects in the same
161 solution.
162
163[ April 21, 2004 - 0.11.1 ]
164 ! Fixed a problem with resolving paths in various targets. Was not properly
165 setting the CWD.
166 * Schema updated to 1.1, moving the ReferencePath element from the Options
167 element to the Project element. This makes more logical sense, given that
168 reference paths are resolved relative to the project path. Any prebuild.xml
169 file referecning verison 1.0 will fail! Please update to the 1.1 schema.
170
171[ April 19, 2004 - 0.11.0 ]
172 * Added several attributes across the code to make FxCop happy
173 ! Fixed bugs in reference paths being written in the VS targets.
174 ! Fixed a bug in ProjectNode which was doing two CWDStack.Push() calls instead of
175 a Push/Pop pair. Was wreaking havoc with <Process> tags.
176 ! Fixed some bugs in the path tracking, both the Project and Solution nodes now
177 have a FullPath property, which is the full path to the file resolved at load
178 time. This should fix all path relativity problems.
179 + Added new /clean switch, allowing the target to clean up any files it generated.
180 in accordance, the ITarget interface has been updated to support a new Clean()
181 method.
182 + Completed addition of the <Process> tag, to allow the referencing of external
183 prebuild.xml files.
184 + Added the runtime attribute to the Project element. This allows the developer
185 to specify which runtime a project should target (Mono or Microsoft). This is
186 of course ignored in certain targets like the Visual Studio targets.
187 + Added the SharpDevelop target.
188
189[ April 13, 2004 - 0.10.1a ]
190 + Added the buildAction attribute to the File node. This is needed for dnpb
191 to even be able to bootstrap itself (dnpb-1.0.xsd must be an embedded resource)
192
193[ April 13, 2004 - 0.10.1 ]
194 * First Release
195
196[ Key ]
197* = Change or information
198+ = Addition
199! = Bug Fix
200
diff --git a/Prebuild/README b/Prebuild/README
new file mode 100644
index 0000000..e8a2d69
--- /dev/null
+++ b/Prebuild/README
@@ -0,0 +1,274 @@
1Prebuild Instructions
2
3Prebuild is an XML-driven pre-build tool allowing developers to easily generate project or make files for major IDE's and .NET development tools including: Visual Studio 2005, Visual Studio 2003, Visual Studio 2002, SharpDevelop, SharpDevelop2, MonoDevelop, and NAnt.
4
5_______________________________________________________________________________
6Overview
7
8Prebuild can be either be run from the command line to generate the
9project and make files or you can execute the included batch (*.bat)
10and Unix Shell script (*.sh) files.
11
12_______________________________________________________________________________
13The currently supported developement tools and their associated batch
14and shell script files.
15
16Visual Studio .NET 2005 (VS2005.bat)
17Visual Studio .NET 2003 (VS2003.bat)
18Visual Studio .NET 2002 (VS2002.bat)
19SharpDevelop (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
20SharpDevelop2 (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
21MonoDevelop (MonoDevelop.sh) - http://www.monodevelop.com/
22NAnt (nant.sh and nant.bat) - http://nant.sourceforge.net/
23Autotools (autotools.bat and autotools.sh) - http://en.wikipedia.org/wiki/GNU_build_system
24
25Notes:
26
27A Unix Shell script is provided for MonoDevelop, as it does not run on
28Windows at this time.
29
30Visual Studio .NET 2005 and the Visual Express IDE's can import
31solutions from older versions of Visual Studio .NET.
32
33Makefiles are not currently supported.
34
35_______________________________________________________________________________
36Command Line Syntax:
37
38Example:
39> Prebuild /target vs2003
40
41This will generate the project files for Visual Studio.NET 2003 and
42place the redirect the log to a file named PrebuildLog.txt in the
43parent directory
44
45
46The syntax structure is as below, where commandParameter is optional
47depending on the command and you can provide several option-value
48pairs.
49
50Note: The '> ' signifies the command prompt, do not enter this literally
51
52> Prebuild /<option> <commandParameter>
53
54> Prebuild /target vs2003 /pause
55
56> Prebuild /target vs2003 /log ../Log.txt /pause /ppo /file ProjectConfig.xml
57
58> Prebuild /target sharpdev /log
59
60> Prebuild /removedir obj|bin
61
62> Prebuild /target vs2003 /allowedgroups Group1|Group2
63
64> Prebuild /clean
65
66> Prebuild /clean /yes
67
68> Prebuild /clean vs2003
69
70_______________________________________________________________________________
71Command Line Options:
72
73/usage - Shows the help information on how to use Prebuild and what
74the different options are and what they do
75
76/clean - The project files generated for the target type specified as
77a parameter for this option will be deleted. If no value is specified
78or if 'all' is specified, then project files for all the target types
79will be deleted.
80
81/target - Specified the name of the development tool for which project
82or make files will be generated. Possible parameter values include:
83vs2003, vs2002, sharpdev
84
85/file - Specifies the name of the XML which defines what files are to
86be referenced by the generated project files as well as configures the
87options for them. If not specified, prebuild.xml in the current
88directory will be used as the default.
89
90/log - Specified the log file that should be written to for build
91errors. If this option is not specified, no log file is generated,
92but if just no value is specified, then the defaul filename will be
93used for the log (Prebuild.log).
94
95/ppo - Preprocesses the xml file to test for syntax errors or problems
96but doesn't generate the files
97
98/pause - Shows the console until you press a key so that you can view
99the messages written while performing the specified actions.
100
101This allows you to check if an errors occurred and - if so - what it
102was.
103
104/showtargets - Shows a list of all the targets that can be specified
105as values for the /clean and /target commands.
106
107/allowedgroups - This is followed by a pipe-delimited list of project
108group filter flags (eg. Group1|Group2) allow optional filtering of all
109projects that dont have at least one of these flags
110
111/removedir - This is followed by a pipe-delimited list of directory
112names that will be deleted while recursivly searching the directory of
113the prebuild application and its child directories (eg. use obj|bin to
114delete all output and temporary directories before file releases)
115
116/yes - Answer yes to any warnings (e.g. when cleaning all projects).
117
118_______________________________________________________________________________
119Example Batch Files and Shell Scripts
120
121NOTE: Common batch and shell script files are included with Prebuild source and file releases.
122______________________________
123MonoDevelop
124
125#!/bin/sh
126# Generates a solution (.mds) and a set of project files (.mdp)
127
128# for MonoDevelop, a Mono port of SharpDevelop
129# (http://icsharpcode.net/OpenSource/SD/Default.aspx)
130
131./Prebuild /target monodev /pause
132
133______________________________
134Visual Studio .NET 2003
135
136@rem Generates a solution (.sln) and a set of project files (.csproj)
137@rem for Microsoft Visual Studio .NET 2002
138Prebuild /target vs2003 /pause
139
140Notes:
141Text after lines that start with @rem are comments and are not evaluated
142You can also place pause on the last line instead of specifing the /pause command.
143
144_______________________________________________________________________________
145Example XML Configuration File
146
147Note:
148
149XML Comments (<!-- Comment -->) are used to markup the prebuild.xml
150file with notes
151
152The below file may be out-of-date, however the RealmForge Prebuild
153file serves as an up-to-date and extensive example.
154
155It can be viewed using Tigris.org's WebSVN
156(http://realmforge.tigris.org/source/browse/realmforge/trunk/src/prebuild.xml)
157by just clicking on the "view file" link for the latest revision.
158
159_________________________________
160
161<?xml version="1.0" encoding="utf-8"?>
162 <!--The version of the XML schema specified in the version and xmlns attributes should match the one for which the version of Prebuild.exe used was compiled for. In this example it is the version 1.3 schema, you can find the XSD schema file at the url specified in the xmlns attribute. -->
163<Prebuild version="1.6" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
164 <Solution name="RealmForge"> <!--The title and file name for the solution, combine, workspace, or project group (depending on what development tool you are using)-->
165 <!--Configurations found as children of Solution are used as templates for the configurations found in the project, this allows you to avoid writing the same options in each project (and maintaining each of these). You can provide defaults and then override them in the configurations defined for each project. All options are optional.-->
166 <Configuration name="Debug">
167 <Options>
168 <!-- simple logically expressions can be evaluated, if, else, elseif, and endif are valid statements. Note that it is not neccisary to define POSIX or WIN32 -->
169 <?if OS = "Win32" ?>
170 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
171 <?else ?>
172 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
173 <?endif ?>
174 <OptimizeCode>false</OptimizeCode>
175 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
176 <AllowUnsafe>false</AllowUnsafe>
177 <WarningLevel>4</WarningLevel>
178 <!-The filter for the number of warnings or errors shown and the tolerance level as to what is an error. This is value from 0 to 4 where 4 is the most strict (least tolerent).-->
179
180 <WarningsAsErrors>false</WarningsAsErrors>
181 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
182 <!-- A semicolon ';' delimited list of the warnings that are filtered and not shown in the output window during compiling a project. Only include the number portion of the warning codes that are shown in output during compilation (eg CS1591, should be entered as 1591)-->
183
184 <OutputPath>..\bin</OutputPath>
185 <DebugInformation>true</DebugInformation>
186 <RegisterComInterop>false</RegisterComInterop>
187 <IncrementalBuild>true</IncrementalBuild>
188 <BaseAddress>285212672</BaseAddress>
189 <FileAlignment>4096</FileAlignment>
190 <NoStdLib>false</NoStdLib>
191 <XmlDocFile>Docs.xml</XmlDocFile>
192 </Options>
193 </Configuration>
194 <Configuration name="Release"> <!-- You can define multple configurations that projects can have, but there is no way to define which one is selected by default as this is a part of the user preferences for a project, not the solution or project files -->
195 <Options>
196 <CompilerDefines>TRACE</CompilerDefines>
197 <OptimizeCode>true</OptimizeCode>
198 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
199 <AllowUnsafe>false</AllowUnsafe>
200 <WarningLevel>4</WarningLevel>
201 <WarningsAsErrors>false</WarningsAsErrors>
202 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
203 <OutputPath>..\bin</OutputPath>
204 <DebugInformation>false</DebugInformation>
205 <RegisterComInterop>false</RegisterComInterop>
206 <IncrementalBuild>true</IncrementalBuild>
207 <BaseAddress>285212672</BaseAddress>
208 <FileAlignment>4096</FileAlignment>
209 <NoStdLib>false</NoStdLib>
210 <GenerateXmlDocFile>true</GenerateXmlDocFile>
211 <XmlDocFile>Docs.xml</XmlDocFile>
212 </Options>
213 </Configuration>
214
215 <!-- One of the projects that is included in the Solution -->
216 <Project name="RealmForge.Utility" Language="VisualBasic" path="Utility" type="Library" assemblyName="RealmForge.Utility" rootNamespace="RealmForge">
217 <Configuration name="Debug">
218 <Options>
219 <OutputPath>..\bin\lib\Utility</OutputPath>
220 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
221 </Options>
222 </Configuration>
223 <Configuration name="Release">
224 <Options>
225 <OutputPath>..\bin\lib\Utility</OutputPath>
226 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
227 </Options>
228 </Configuration>
229 <ReferencePath>../bin</ReferencePath>
230 <Reference name="System"/>
231 <Reference name="System.Data"/>
232 <Reference name="System.Drawing"/>
233 <Reference name="System.Xml"/>
234 <Reference name="System.Runtime.Serialization.Formatters.Soap"/>
235 <Reference name="ICSharpCode.SharpZipLib"/>
236 <Files>
237 <Match path="." pattern="*.vb" recurse="true"/>
238 </Files>
239 </Project>
240
241 <!-- Another projects that is included in the Solution -->
242 <Project name="DemoGame" Language="C#" path="DemoGame" type="WinExe" icon="..\bin\RealmForge.ico" assemblyName="DemoGame" rootNamespace="RealmForge">
243 <!-- icon is used to define the location of the .ico file that is embeeded in the assembly when the project is compiled. This is relative to the project path -->
244 <!--type defines the type of project, valid types are Library (.dll), WinExe (.exe), and Exe (.exe). WinExe is not windows specific, it just defines that it is a GUI application and that no Console or Command window will show when it is started-->
245
246 <Configuration name="Debug">
247 <Options>
248 <OutputPath>..\bin</OutputPath>
249 <XmlDocFile>DemoGame.xml</XmlDocFile>
250 </Options>
251 </Configuration>
252 <Configuration name="Release">
253 <Options>
254 <OutputPath>..\bin</OutputPath>
255 <XmlDocFile>DemoGame.xml</XmlDocFile>
256 </Options>
257 </Configuration>
258 <ReferencePath>../bin</ReferencePath>
259 <Reference name="System"/> <!-- Assemblies that are located in the GAC (installed, global) can be referenced-->
260 <Reference name="ode"/> <!-- Assemblies that are located in the output directory to which the file is built can be referenced -->
261 <Reference name="RealmForge.Utility"/> <!-- When you reference the name of another project, then that project (and it's output) will be referenced instead of looking for a pre-built assembly-->
262 <Files>
263 <Match path="." pattern="*.cs" recurse="true"/>
264 <Match path="." pattern="*.bmp" recurse="true" buildAction="EmbeddedResource"/>
265 <Match path="." pattern="[^a]*\.(png|jpg)" useRegex="true" buildAction="EmbeddedResource"/>
266
267 <!-- Uses a regex or regular expression to find all files that end with .png or .jpg but dont have the letter 'a' in their name and add them to the project as EmbeddedResource's. Because recurse enabled (default is false), only the values in the files in that are directly in the project directory (not child directories) are checked.-->
268 <!--EmbeddedResource, Content, and Compile are valid buildAction's-->
269 </Files>
270 </Project>
271
272 </Solution>
273</Prebuild>
274
diff --git a/Prebuild/THANKS b/Prebuild/THANKS
new file mode 100644
index 0000000..576467c
--- /dev/null
+++ b/Prebuild/THANKS
@@ -0,0 +1,18 @@
1Gryc Ueusp <gryc.ueusp@gmail.com>
2
3 caught a problem with the NAnt target's .build output which caused
4 the Ubuntu build servers to choke on prebuild-generated packages
5
6Todd Berman <tberman@sevenl.net>
7Lluis Sanchez Gual <lluis@novell.com>
8
9 pkg-config .pc file parser used in AutotoolsTarget.cs was ripped off
10 from work contributed to MonoDevelop by Lluis and Todd. It came
11 from
12
13src/core/MonoDevelop.Core/MonoDevelop.Core/SystemPackage.cs (Lluis)
14
15 and
16
17src/core/MonoDevelop.Core/MonoDevelop.Core/SystemAssemblyService.cs
18 (Lluis && Todd)
diff --git a/Prebuild/TODO b/Prebuild/TODO
new file mode 100644
index 0000000..33b19a1
--- /dev/null
+++ b/Prebuild/TODO
@@ -0,0 +1,43 @@
1* monodev target should be able to detect whether the project is 1.x
2 or 2.x runtime
3
4* remove target which links ../project/foo.dll to each project's build
5 root
6
7* generate .config files
8
9* Fix the autotools target so that
10sub generate_project_files { ... }
11sub generate_solution_files { ... }
12sub generate_multi_solution_files { ... }
13sub generate_project {
14 ...
15 generate_project_files();
16}
17sub generate_solution {
18 foreach $project ( @projects ){
19 mkdir "$project/";
20 pushd "$project/";
21 generate_project();
22 popd;
23 }
24 generate_solution_files();
25}
26sub generate_multi_solution {
27 foreach $solution ( @solutions ){
28 mkdir "$solution/";
29 pushd "$solution/";
30 generate_solution();
31 popd;
32 }
33 generate_multi_solution_files();
34}
35
36if(numProjects == 1){
37 generate_project();
38}elsif(numSolutions == 1){
39 generate_solution();
40}else{
41 generate_multi_solution();
42}
43
diff --git a/Prebuild/prebuild b/Prebuild/prebuild
new file mode 100755
index 0000000..0dc648d
--- /dev/null
+++ b/Prebuild/prebuild
@@ -0,0 +1,2 @@
1#!/bin/sh
2exec mono [PREFIX]/prebuild.exe "$@"
diff --git a/Prebuild/prebuild.xml b/Prebuild/prebuild.xml
index 1f81086..d14b94f 100644
--- a/Prebuild/prebuild.xml
+++ b/Prebuild/prebuild.xml
@@ -1,73 +1,73 @@
1<?xml version="1.0" encoding="utf-8" ?> 1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" version="1.7"> 2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.9.xsd" version="1.9">
3 <Solution name="Prebuild" version="2.0.4"> 3 <Solution name="Prebuild" version="2.0.4">
4 <Configuration name="Debug"> 4 <Configuration name="Debug">
5 <Options> 5 <Options>
6 <CompilerDefines>DEBUG;TRACE</CompilerDefines> 6 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode> 7 <OptimizeCode>false</OptimizeCode>
8 <OutputPath>bin/Debug</OutputPath> 8 <OutputPath>bin/Debug</OutputPath>
9 <DebugInformation>true</DebugInformation> 9 <DebugInformation>true</DebugInformation>
10 <SuppressWarnings>1595</SuppressWarnings> 10 <SuppressWarnings>1595</SuppressWarnings>
11 </Options> 11 </Options>
12 </Configuration> 12 </Configuration>
13 <Configuration name="Release"> 13 <Configuration name="Release">
14 <Options> 14 <Options>
15 <CompilerDefines>TRACE</CompilerDefines> 15 <CompilerDefines>TRACE</CompilerDefines>
16 <OutputPath>bin/Release</OutputPath> 16 <OutputPath>bin/Release</OutputPath>
17 <OptimizeCode>true</OptimizeCode> 17 <OptimizeCode>true</OptimizeCode>
18 <DebugInformation>false</DebugInformation> 18 <DebugInformation>false</DebugInformation>
19 <SuppressWarnings>1595</SuppressWarnings> 19 <SuppressWarnings>1595</SuppressWarnings>
20 </Options> 20 </Options>
21 </Configuration> 21 </Configuration>
22 <Files> 22 <Files>
23 <File>prebuild.xml</File> 23 <File>prebuild.xml</File>
24 <File>prebuild</File> 24 <File>prebuild</File>
25 </Files> 25 </Files>
26 <Project name="Prebuild" 26 <Project name="Prebuild"
27 path="src" 27 path="src"
28 language="C#" 28 language="C#"
29 assemblyName="prebuild" 29 assemblyName="prebuild"
30 icon="App.ico" 30 icon="App.ico"
31 type="Exe" 31 type="Exe"
32 rootNamespace="Prebuild" 32 rootNamespace="Prebuild"
33 startupObject="Prebuild.Prebuild" 33 startupObject="Prebuild.Prebuild"
34 version="2.0.3" 34 version="2.0.3"
35 > 35 >
36 <Author>Matthew Holmes (matthew@wildfiregames.com)</Author> 36 <Author>Matthew Holmes (matthew@wildfiregames.com)</Author>
37 <Author>Dan Moorehead (dan05a@gmail.com)</Author> 37 <Author>Dan Moorehead (dan05a@gmail.com)</Author>
38 <Author>Dave Hudson (jendave@yahoo.com)</Author> 38 <Author>Dave Hudson (jendave@yahoo.com)</Author>
39 <Author>Rob Loach (http://robloach.net)</Author> 39 <Author>Rob Loach (http://robloach.net)</Author>
40 <Author>C.J. Adams-Collier (cjac@colliertech.org)</Author> 40 <Author>C.J. Adams-Collier (cjac@colliertech.org)</Author>
41 <Description>The Prebuild project generator</Description> 41 <Description>The Prebuild project generator</Description>
42 <Configuration name="Debug"> 42 <Configuration name="Debug">
43 <Options> 43 <Options>
44 <CompilerDefines>DEBUG;TRACE</CompilerDefines> 44 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
45 <OptimizeCode>false</OptimizeCode> 45 <OptimizeCode>false</OptimizeCode>
46 <OutputPath>bin/Debug</OutputPath> 46 <OutputPath>bin/Debug</OutputPath>
47 <DebugInformation>true</DebugInformation> 47 <DebugInformation>true</DebugInformation>
48 <KeyFile>Prebuild.snk</KeyFile> 48 <KeyFile>Prebuild.snk</KeyFile>
49 <SuppressWarnings>1595</SuppressWarnings> 49 <SuppressWarnings>1595</SuppressWarnings>
50 </Options> 50 </Options>
51 </Configuration> 51 </Configuration>
52 <Configuration name="Release"> 52 <Configuration name="Release">
53 <Options> 53 <Options>
54 <CompilerDefines>TRACE</CompilerDefines> 54 <CompilerDefines>TRACE</CompilerDefines>
55 <OutputPath>bin/Release</OutputPath> 55 <OutputPath>bin/Release</OutputPath>
56 <OptimizeCode>true</OptimizeCode> 56 <OptimizeCode>true</OptimizeCode>
57 <DebugInformation>false</DebugInformation> 57 <DebugInformation>false</DebugInformation>
58 <KeyFile>Prebuild.snk</KeyFile> 58 <KeyFile>Prebuild.snk</KeyFile>
59 <SuppressWarnings>1595</SuppressWarnings> 59 <SuppressWarnings>1595</SuppressWarnings>
60 </Options> 60 </Options>
61 </Configuration> 61 </Configuration>
62 <Reference name="System.EnterpriseServices" /> 62 <Reference name="System.EnterpriseServices" />
63 <Reference name="System.Xml" /> 63 <Reference name="System.Xml" />
64 <Reference name="System" /> 64 <Reference name="System" />
65 <Files> 65 <Files>
66 <Match pattern="App.ico" buildAction="EmbeddedResource"/> 66 <Match pattern="App.ico" buildAction="EmbeddedResource"/>
67 <Match path="data" pattern="prebuild-1.7.xsd" buildAction="EmbeddedResource"/> 67 <Match path="data" pattern="prebuild-1.9.xsd" buildAction="EmbeddedResource"/>
68 <Match path="data" pattern="autotools.xml" buildAction="EmbeddedResource"/> 68 <Match path="data" pattern="autotools.xml" buildAction="EmbeddedResource"/>
69 <Match pattern="*.cs" recurse="true"/> 69 <Match pattern="*.cs" recurse="true"/>
70 </Files> 70 </Files>
71 </Project> 71 </Project>
72 </Solution> 72 </Solution>
73</Prebuild> 73</Prebuild>
diff --git a/Prebuild/scripts/VS2010.bat b/Prebuild/scripts/VS2010.bat
new file mode 100644
index 0000000..1b98818
--- /dev/null
+++ b/Prebuild/scripts/VS2010.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj, .vbproj, etc.)
2@rem for Microsoft Visual Studio .NET 2010
3cd ..
4Prebuild.exe /target vs2010 /file prebuild.xml /pause
diff --git a/Prebuild/src/Core/Kernel.cs b/Prebuild/src/Core/Kernel.cs
index 95ef04e..67051d5 100644
--- a/Prebuild/src/Core/Kernel.cs
+++ b/Prebuild/src/Core/Kernel.cs
@@ -36,21 +36,17 @@ POSSIBILITY OF SUCH DAMAGE.
36*/ 36*/
37#endregion 37#endregion
38 38
39#define NO_VALIDATE
40
39using System; 41using System;
40using System.Collections.Generic; 42using System.Collections.Generic;
41using System.Diagnostics;
42using System.Collections;
43using System.Collections.Specialized;
44using System.IO; 43using System.IO;
45using System.Reflection; 44using System.Reflection;
46using System.Xml; 45using System.Xml;
47using System.Xml.Schema; 46using System.Xml.Schema;
48using System.Text;
49
50using Prebuild.Core.Attributes; 47using Prebuild.Core.Attributes;
51using Prebuild.Core.Interfaces; 48using Prebuild.Core.Interfaces;
52using Prebuild.Core.Nodes; 49using Prebuild.Core.Nodes;
53using Prebuild.Core.Parse;
54using Prebuild.Core.Utilities; 50using Prebuild.Core.Utilities;
55 51
56namespace Prebuild.Core 52namespace Prebuild.Core
@@ -77,7 +73,7 @@ namespace Prebuild.Core
77 /// <summary> 73 /// <summary>
78 /// This must match the version of the schema that is embeeded 74 /// This must match the version of the schema that is embeeded
79 /// </summary> 75 /// </summary>
80 private const string m_SchemaVersion = "1.7"; 76 private const string m_SchemaVersion = "1.9";
81 private const string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd"; 77 private const string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd";
82 private const string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema; 78 private const string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema;
83 bool disposed; 79 bool disposed;
@@ -87,9 +83,9 @@ namespace Prebuild.Core
87 private Log m_Log; 83 private Log m_Log;
88 private CurrentDirectory m_CurrentWorkingDirectory; 84 private CurrentDirectory m_CurrentWorkingDirectory;
89 private XmlSchemaCollection m_Schemas; 85 private XmlSchemaCollection m_Schemas;
90 86
91 private Hashtable m_Targets; 87 private readonly Dictionary<string, ITarget> m_Targets = new Dictionary<string, ITarget>();
92 private Hashtable m_Nodes; 88 private readonly Dictionary<string, NodeEntry> m_Nodes = new Dictionary<string, NodeEntry>();
93 89
94 readonly List<SolutionNode> m_Solutions = new List<SolutionNode>(); 90 readonly List<SolutionNode> m_Solutions = new List<SolutionNode>();
95 string m_Target; 91 string m_Target;
@@ -163,7 +159,7 @@ namespace Prebuild.Core
163 /// Gets the targets. 159 /// Gets the targets.
164 /// </summary> 160 /// </summary>
165 /// <value>The targets.</value> 161 /// <value>The targets.</value>
166 public Hashtable Targets 162 public Dictionary<string, ITarget> Targets
167 { 163 {
168 get 164 get
169 { 165 {
@@ -259,7 +255,7 @@ namespace Prebuild.Core
259 255
260 private void LoadSchema() 256 private void LoadSchema()
261 { 257 {
262 Assembly assembly = this.GetType().Assembly; 258 Assembly assembly = GetType().Assembly;
263 Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema); 259 Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema);
264 if(stream == null) 260 if(stream == null)
265 { 261 {
@@ -319,23 +315,24 @@ namespace Prebuild.Core
319 315
320 private void LogBanner() 316 private void LogBanner()
321 { 317 {
322 m_Log.Write("Prebuild v" + this.Version); 318 m_Log.Write("Prebuild v" + Version);
323 m_Log.Write("Copyright (c) 2004-2008"); 319 m_Log.Write("Copyright (c) 2004-2010");
324 m_Log.Write("Matthew Holmes (matthew@wildfiregames.com),"); 320 m_Log.Write("Matthew Holmes (matthew@wildfiregames.com),");
325 m_Log.Write("Dan Moorehead (dan05a@gmail.com),"); 321 m_Log.Write("Dan Moorehead (dan05a@gmail.com),");
326 m_Log.Write("David Hudson (jendave@yahoo.com),"); 322 m_Log.Write("David Hudson (jendave@yahoo.com),");
327 m_Log.Write("Rob Loach (http://www.robloach.net),"); 323 m_Log.Write("Rob Loach (http://www.robloach.net),");
328 m_Log.Write("C.J. Adams-Collier (cjac@colliertech.org),"); 324 m_Log.Write("C.J. Adams-Collier (cjac@colliertech.org),");
329 325 m_Log.Write("John Hurliman (john.hurliman@intel.com),");
330 m_Log.Write("See 'prebuild /usage' for help"); 326
331 m_Log.Write(); 327 m_Log.Write("See 'prebuild /usage' for help");
328 m_Log.Write();
332 } 329 }
333 330
334 331
335 332
336 private void ProcessFile(string file) 333 private void ProcessFile(string file)
337 { 334 {
338 ProcessFile(file, this.m_Solutions); 335 ProcessFile(file, m_Solutions);
339 } 336 }
340 337
341 public void ProcessFile(ProcessNode node, SolutionNode parent) 338 public void ProcessFile(ProcessNode node, SolutionNode parent)
@@ -381,12 +378,12 @@ namespace Prebuild.Core
381 Core.Parse.Preprocessor pre = new Core.Parse.Preprocessor(); 378 Core.Parse.Preprocessor pre = new Core.Parse.Preprocessor();
382 379
383 //register command line arguments as XML variables 380 //register command line arguments as XML variables
384 IDictionaryEnumerator dict = m_CommandLine.GetEnumerator(); 381 IEnumerator<KeyValuePair<string, string>> dict = m_CommandLine.GetEnumerator();
385 while (dict.MoveNext()) 382 while (dict.MoveNext())
386 { 383 {
387 string name = dict.Key.ToString().Trim(); 384 string name = dict.Current.Key.Trim();
388 if (name.Length > 0) 385 if (name.Length > 0)
389 pre.RegisterVariable(name, dict.Value.ToString()); 386 pre.RegisterVariable(name, dict.Current.Value);
390 } 387 }
391 388
392 string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML 389 string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML
@@ -422,6 +419,10 @@ namespace Prebuild.Core
422 m_CurrentDoc = new XmlDocument(); 419 m_CurrentDoc = new XmlDocument();
423 try 420 try
424 { 421 {
422#if NO_VALIDATE
423 XmlReader validator = XmlReader.Create(new StringReader(xml));
424 m_CurrentDoc.Load(validator);
425#else
425 XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml))); 426 XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml)));
426 427
427 //validate while reading from string into XmlDocument DOM structure in memory 428 //validate while reading from string into XmlDocument DOM structure in memory
@@ -430,6 +431,7 @@ namespace Prebuild.Core
430 validator.Schemas.Add(schema); 431 validator.Schemas.Add(schema);
431 } 432 }
432 m_CurrentDoc.Load(validator); 433 m_CurrentDoc.Load(validator);
434#endif
433 } 435 }
434 catch(XmlException e) 436 catch(XmlException e)
435 { 437 {
@@ -541,7 +543,7 @@ namespace Prebuild.Core
541 return null; 543 return null;
542 } 544 }
543 545
544 NodeEntry ne = (NodeEntry)m_Nodes[node.Name]; 546 NodeEntry ne = m_Nodes[node.Name];
545 return ne.Type; 547 return ne.Type;
546 } 548 }
547 549
@@ -578,11 +580,11 @@ namespace Prebuild.Core
578 { 580 {
579 if(!m_Nodes.ContainsKey(node.Name)) 581 if(!m_Nodes.ContainsKey(node.Name))
580 { 582 {
581 //throw new XmlException("Unknown XML node: " + node.Name); 583 Console.WriteLine("WARNING: Unknown XML node: " + node.Name);
582 return null; 584 return null;
583 } 585 }
584 586
585 NodeEntry ne = (NodeEntry)m_Nodes[node.Name]; 587 NodeEntry ne = m_Nodes[node.Name];
586 Type type = ne.Type; 588 Type type = ne.Type;
587 //DataNodeAttribute dna = ne.Attribute; 589 //DataNodeAttribute dna = ne.Attribute;
588 590
@@ -624,10 +626,8 @@ namespace Prebuild.Core
624 /// <param name="args">The args.</param> 626 /// <param name="args">The args.</param>
625 public void Initialize(LogTargets target, string[] args) 627 public void Initialize(LogTargets target, string[] args)
626 { 628 {
627 m_Targets = new Hashtable(); 629 CacheTargets(GetType().Assembly);
628 CacheTargets(this.GetType().Assembly); 630 CacheNodeTypes(GetType().Assembly);
629 m_Nodes = new Hashtable();
630 CacheNodeTypes(this.GetType().Assembly);
631 CacheVersion(); 631 CacheVersion();
632 632
633 m_CommandLine = new CommandLineCollection(args); 633 m_CommandLine = new CommandLineCollection(args);
@@ -750,11 +750,11 @@ namespace Prebuild.Core
750 } 750 }
751 else 751 else
752 { 752 {
753 if (!m_Targets.Contains(target)) { 753 if (!m_Targets.ContainsKey(target)) {
754 m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target); 754 m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target);
755 return; 755 return;
756 } 756 }
757 ITarget targ = (ITarget)m_Targets[target]; 757 ITarget targ = m_Targets[target];
758 758
759 if(clean) 759 if(clean)
760 { 760 {
@@ -793,18 +793,19 @@ namespace Prebuild.Core
793 /// </remarks> 793 /// </remarks>
794 protected virtual void Dispose(bool disposing) 794 protected virtual void Dispose(bool disposing)
795 { 795 {
796 if (!this.disposed) 796 if (!disposed)
797 { 797 {
798 if (disposing) 798 if (disposing)
799 { 799 {
800 if (this.m_Log != null) 800 GC.SuppressFinalize(this);
801 if (m_Log != null)
801 { 802 {
802 this.m_Log.Close(); 803 m_Log.Close();
803 this.m_Log = null; 804 m_Log = null;
804 } 805 }
805 } 806 }
806 } 807 }
807 this.disposed = true; 808 disposed = true;
808 } 809 }
809 810
810 /// <summary> 811 /// <summary>
@@ -812,7 +813,7 @@ namespace Prebuild.Core
812 /// </summary> 813 /// </summary>
813 ~Kernel() 814 ~Kernel()
814 { 815 {
815 this.Dispose(false); 816 Dispose(false);
816 } 817 }
817 818
818 /// <summary> 819 /// <summary>
diff --git a/Prebuild/src/Core/Nodes/AuthorNode.cs b/Prebuild/src/Core/Nodes/AuthorNode.cs
index 20e72c0..4c415bb 100644
--- a/Prebuild/src/Core/Nodes/AuthorNode.cs
+++ b/Prebuild/src/Core/Nodes/AuthorNode.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.Xml; 27using System.Xml;
30 28
31using Prebuild.Core.Attributes; 29using Prebuild.Core.Attributes;
diff --git a/Prebuild/src/Core/Nodes/CleanFilesNode.cs b/Prebuild/src/Core/Nodes/CleanFilesNode.cs
new file mode 100644
index 0000000..71405f9
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/CleanFilesNode.cs
@@ -0,0 +1,80 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32using Prebuild.Core.Utilities;
33
34namespace Prebuild.Core.Nodes
35{
36 [DataNode("CleanFiles")]
37 public class CleanFilesNode : DataNode
38 {
39 #region Fields
40
41 private string m_Pattern;
42
43 #endregion
44
45 #region Properties
46
47 /// <summary>
48 /// Gets the signature.
49 /// </summary>
50 /// <value>The signature.</value>
51 public string Pattern
52 {
53 get
54 {
55 return m_Pattern;
56 }
57 }
58
59 #endregion
60
61 #region Public Methods
62
63 /// <summary>
64 /// Parses the specified node.
65 /// </summary>
66 /// <param name="node">The node.</param>
67 public override void Parse(XmlNode node)
68 {
69 if (node == null)
70 {
71 throw new ArgumentNullException("node");
72 }
73
74 m_Pattern = Helper.AttributeValue(node, "pattern", String.Empty); ;
75 m_Pattern = m_Pattern.Trim();
76 }
77
78 #endregion
79 }
80} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/CleanupNode.cs b/Prebuild/src/Core/Nodes/CleanupNode.cs
new file mode 100644
index 0000000..b8131b0
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/CleanupNode.cs
@@ -0,0 +1,85 @@
1#region BSD License
2/*
3Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System;
27using System.Collections.Generic;
28using System.Xml;
29
30using Prebuild.Core.Attributes;
31using Prebuild.Core.Interfaces;
32
33namespace Prebuild.Core.Nodes
34{
35 [DataNode("Cleanup")]
36 public class CleanupNode : DataNode
37 {
38 #region Fields
39
40 private List<CleanFilesNode> m_CleanFiles = new List<CleanFilesNode>();
41
42 #endregion
43
44 #region Properties
45
46 /// <summary>
47 /// Gets the signature.
48 /// </summary>
49 /// <value>The signature.</value>
50 public List<CleanFilesNode> CleanFiles
51 {
52 get
53 {
54 return m_CleanFiles;
55 }
56 }
57
58 #endregion
59
60 #region Public Methods
61
62 /// <summary>
63 /// Parses the specified node.
64 /// </summary>
65 /// <param name="node">The node.</param>
66 public override void Parse(XmlNode node)
67 {
68 if( node == null )
69 {
70 throw new ArgumentNullException("node");
71 }
72
73 foreach (XmlNode child in node.ChildNodes)
74 {
75 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
76 if (dataNode is CleanFilesNode)
77 {
78 m_CleanFiles.Add((CleanFilesNode)dataNode);
79 }
80 }
81 }
82
83 #endregion
84 }
85} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/ConfigurationNode.cs b/Prebuild/src/Core/Nodes/ConfigurationNode.cs
index 67d78d5..cd2f740 100644
--- a/Prebuild/src/Core/Nodes/ConfigurationNode.cs
+++ b/Prebuild/src/Core/Nodes/ConfigurationNode.cs
@@ -41,6 +41,7 @@ namespace Prebuild.Core.Nodes
41 #region Fields 41 #region Fields
42 42
43 private string m_Name = "unknown"; 43 private string m_Name = "unknown";
44 private string m_Platform = "AnyCPU";
44 private OptionsNode m_Options; 45 private OptionsNode m_Options;
45 46
46 #endregion 47 #endregion
@@ -84,6 +85,33 @@ namespace Prebuild.Core.Nodes
84 } 85 }
85 86
86 /// <summary> 87 /// <summary>
88 /// Identifies the platform for this specific configuration.
89 /// </summary>
90 public string Platform
91 {
92 get
93 {
94 return m_Platform;
95 }
96 set
97 {
98 switch ((value + "").ToLower())
99 {
100 case "x86":
101 case "x64":
102 m_Platform = value;
103 break;
104 case "itanium":
105 m_Platform = "Itanium";
106 break;
107 default:
108 m_Platform = "AnyCPU";
109 break;
110 }
111 }
112 }
113
114 /// <summary>
87 /// Gets the name. 115 /// Gets the name.
88 /// </summary> 116 /// </summary>
89 /// <value>The name.</value> 117 /// <value>The name.</value>
@@ -96,6 +124,22 @@ namespace Prebuild.Core.Nodes
96 } 124 }
97 125
98 /// <summary> 126 /// <summary>
127 /// Gets the name and platform for the configuration.
128 /// </summary>
129 /// <value>The name and platform.</value>
130 public string NameAndPlatform
131 {
132 get
133 {
134 string platform = m_Platform;
135 if (platform == "AnyCPU")
136 platform = "Any CPU";
137
138 return String.Format("{0}|{1}", m_Name, platform);
139 }
140 }
141
142 /// <summary>
99 /// Gets or sets the options. 143 /// Gets or sets the options.
100 /// </summary> 144 /// </summary>
101 /// <value>The options.</value> 145 /// <value>The options.</value>
@@ -122,7 +166,9 @@ namespace Prebuild.Core.Nodes
122 public override void Parse(XmlNode node) 166 public override void Parse(XmlNode node)
123 { 167 {
124 m_Name = Helper.AttributeValue(node, "name", m_Name); 168 m_Name = Helper.AttributeValue(node, "name", m_Name);
125 if( node == null ) 169 Platform = Helper.AttributeValue(node, "platform", m_Platform);
170
171 if (node == null)
126 { 172 {
127 throw new ArgumentNullException("node"); 173 throw new ArgumentNullException("node");
128 } 174 }
@@ -159,6 +205,7 @@ namespace Prebuild.Core.Nodes
159 { 205 {
160 ConfigurationNode ret = new ConfigurationNode(); 206 ConfigurationNode ret = new ConfigurationNode();
161 ret.m_Name = m_Name; 207 ret.m_Name = m_Name;
208 ret.m_Platform = m_Platform;
162 m_Options.CopyTo(ret.m_Options); 209 m_Options.CopyTo(ret.m_Options);
163 return ret; 210 return ret;
164 } 211 }
diff --git a/Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs b/Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs
new file mode 100644
index 0000000..1c38d9e
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs
@@ -0,0 +1,71 @@
1#region BSD License
2/*
3Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
4
5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/
24#endregion
25
26using System.Collections.Generic;
27
28namespace Prebuild.Core.Nodes
29{
30 /// <summary>
31 /// Implements a specialized list of configuration nodes which allows for lookup via
32 /// configuration name and platform.
33 /// </summary>
34 public class ConfigurationNodeCollection : List<ConfigurationNode>
35 {
36 #region Properties
37
38 public ConfigurationNode this[string nameAndPlatform]
39 {
40 get
41 {
42 foreach (ConfigurationNode configurationNode in this)
43 {
44 if (configurationNode.NameAndPlatform == nameAndPlatform)
45 {
46 return configurationNode;
47 }
48 }
49
50 return null;
51 }
52
53 set
54 {
55 // See if the node
56 ConfigurationNode configurationNode = this[nameAndPlatform];
57
58 if (configurationNode != null)
59 {
60 this[IndexOf(configurationNode)] = value;
61 }
62 else
63 {
64 Add(value);
65 }
66 }
67 }
68
69 #endregion
70 }
71}
diff --git a/Prebuild/src/Core/Nodes/DataNode.cs b/Prebuild/src/Core/Nodes/DataNode.cs
index 763e6c3..318b13c 100644
--- a/Prebuild/src/Core/Nodes/DataNode.cs
+++ b/Prebuild/src/Core/Nodes/DataNode.cs
@@ -104,7 +104,7 @@ namespace Prebuild.Core.Nodes
104 104
105 foreach (string type in WebTypes) 105 foreach (string type in WebTypes)
106 { 106 {
107 if (path.EndsWith(string.Format("{0}{1}", type, extension))) 107 if (path.EndsWith(type))
108 { 108 {
109 return SubType.CodeBehind; 109 return SubType.CodeBehind;
110 } 110 }
diff --git a/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs b/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs
index 27c2051..278ecd8 100644
--- a/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs
+++ b/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs
@@ -1,5 +1,4 @@
1using System; 1using System;
2using System.Collections;
3using System.Collections.Generic; 2using System.Collections.Generic;
4using System.Text; 3using System.Text;
5using System.Xml; 4using System.Xml;
diff --git a/Prebuild/src/Core/Nodes/DescriptionNode.cs b/Prebuild/src/Core/Nodes/DescriptionNode.cs
index 353a5ae..d1293a0 100644
--- a/Prebuild/src/Core/Nodes/DescriptionNode.cs
+++ b/Prebuild/src/Core/Nodes/DescriptionNode.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.Xml; 27using System.Xml;
30 28
31using Prebuild.Core.Attributes; 29using Prebuild.Core.Attributes;
diff --git a/Prebuild/src/Core/Nodes/FileNode.cs b/Prebuild/src/Core/Nodes/FileNode.cs
index 1520fcb..01cea1e 100644
--- a/Prebuild/src/Core/Nodes/FileNode.cs
+++ b/Prebuild/src/Core/Nodes/FileNode.cs
@@ -54,7 +54,15 @@ namespace Prebuild.Core.Nodes
54 /// <summary> 54 /// <summary>
55 /// 55 ///
56 /// </summary> 56 /// </summary>
57 EmbeddedResource 57 EmbeddedResource,
58 /// <summary>
59 ///
60 /// </summary>
61 ApplicationDefinition,
62 /// <summary>
63 ///
64 /// </summary>
65 Page
58 } 66 }
59 67
60 /// <summary> 68 /// <summary>
@@ -264,6 +272,12 @@ namespace Prebuild.Core.Nodes
264 m_Valid = false; 272 m_Valid = false;
265 Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path); 273 Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path);
266 } 274 }
275
276 if (System.IO.Path.GetExtension(m_Path) == ".settings")
277 {
278 m_SubType = SubType.Settings;
279 m_BuildAction = BuildAction.None;
280 }
267 } 281 }
268 282
269 #endregion 283 #endregion
diff --git a/Prebuild/src/Core/Nodes/FilesNode.cs b/Prebuild/src/Core/Nodes/FilesNode.cs
index dc306c2..23a716c 100644
--- a/Prebuild/src/Core/Nodes/FilesNode.cs
+++ b/Prebuild/src/Core/Nodes/FilesNode.cs
@@ -24,8 +24,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections; 27using System.Collections.Generic;
28using System.Collections.Specialized;
29using System.Xml; 28using System.Xml;
30 29
31using Prebuild.Core.Attributes; 30using Prebuild.Core.Attributes;
@@ -42,41 +41,19 @@ namespace Prebuild.Core.Nodes
42 { 41 {
43 #region Fields 42 #region Fields
44 43
45 private StringCollection m_Files; 44 private readonly List<string> m_Files = new List<string>();
46 private Hashtable m_BuildActions; 45 private readonly Dictionary<string,BuildAction> m_BuildActions = new Dictionary<string, BuildAction>();
47 private Hashtable m_SubTypes; 46 private readonly Dictionary<string, SubType> m_SubTypes = new Dictionary<string, SubType>();
48 private Hashtable m_ResourceNames; 47 private readonly Dictionary<string, string> m_ResourceNames = new Dictionary<string, string>();
49 private Hashtable m_CopyToOutputs; 48 private readonly Dictionary<string, CopyToOutput> m_CopyToOutputs = new Dictionary<string, CopyToOutput>();
50 private Hashtable m_Links; 49 private readonly Dictionary<string, bool> m_Links = new Dictionary<string, bool>();
51 private Hashtable m_LinkPaths; 50 private readonly Dictionary<string, string> m_LinkPaths = new Dictionary<string, string>();
52 private Hashtable m_PreservePaths; 51 private readonly Dictionary<string, bool> m_PreservePaths = new Dictionary<string, bool>();
53
54 #endregion
55
56 #region Constructors
57
58 /// <summary>
59 ///
60 /// </summary>
61 public FilesNode()
62 {
63 m_Files = new StringCollection();
64 m_BuildActions = new Hashtable();
65 m_SubTypes = new Hashtable();
66 m_ResourceNames = new Hashtable();
67 m_CopyToOutputs = new Hashtable();
68 m_Links = new Hashtable();
69 m_LinkPaths = new Hashtable();
70 m_PreservePaths = new Hashtable();
71 }
72 52
73 #endregion 53 #endregion
74 54
75 #region Properties 55 #region Properties
76 56
77 /// <summary>
78 ///
79 /// </summary>
80 public int Count 57 public int Count
81 { 58 {
82 get 59 get
@@ -89,11 +66,6 @@ namespace Prebuild.Core.Nodes
89 66
90 #region Public Methods 67 #region Public Methods
91 68
92 /// <summary>
93 ///
94 /// </summary>
95 /// <param name="file"></param>
96 /// <returns></returns>
97 public BuildAction GetBuildAction(string file) 69 public BuildAction GetBuildAction(string file)
98 { 70 {
99 if(!m_BuildActions.ContainsKey(file)) 71 if(!m_BuildActions.ContainsKey(file))
@@ -101,41 +73,41 @@ namespace Prebuild.Core.Nodes
101 return BuildAction.Compile; 73 return BuildAction.Compile;
102 } 74 }
103 75
104 return (BuildAction)m_BuildActions[file]; 76 return m_BuildActions[file];
105 } 77 }
106 78
107 public CopyToOutput GetCopyToOutput(string file) 79 public CopyToOutput GetCopyToOutput(string file)
108 { 80 {
109 if (!this.m_CopyToOutputs.ContainsKey(file)) 81 if (!m_CopyToOutputs.ContainsKey(file))
110 { 82 {
111 return CopyToOutput.Never; 83 return CopyToOutput.Never;
112 } 84 }
113 return (CopyToOutput) this.m_CopyToOutputs[file]; 85 return m_CopyToOutputs[file];
114 } 86 }
115 87
116 public bool GetIsLink(string file) 88 public bool GetIsLink(string file)
117 { 89 {
118 if (!this.m_Links.ContainsKey(file)) 90 if (!m_Links.ContainsKey(file))
119 { 91 {
120 return false; 92 return false;
121 } 93 }
122 return (bool) this.m_Links[file]; 94 return m_Links[file];
123 } 95 }
124 96
97 public bool Contains(string file)
98 {
99 return m_Files.Contains(file);
100 }
101
125 public string GetLinkPath( string file ) 102 public string GetLinkPath( string file )
126 { 103 {
127 if ( !this.m_LinkPaths.ContainsKey( file ) ) 104 if ( !m_LinkPaths.ContainsKey( file ) )
128 { 105 {
129 return string.Empty; 106 return string.Empty;
130 } 107 }
131 return (string)this.m_LinkPaths[ file ]; 108 return m_LinkPaths[ file ];
132 } 109 }
133 110
134 /// <summary>
135 ///
136 /// </summary>
137 /// <param name="file"></param>
138 /// <returns></returns>
139 public SubType GetSubType(string file) 111 public SubType GetSubType(string file)
140 { 112 {
141 if(!m_SubTypes.ContainsKey(file)) 113 if(!m_SubTypes.ContainsKey(file))
@@ -143,29 +115,19 @@ namespace Prebuild.Core.Nodes
143 return SubType.Code; 115 return SubType.Code;
144 } 116 }
145 117
146 return (SubType)m_SubTypes[file]; 118 return m_SubTypes[file];
147 } 119 }
148 120
149 /// <summary>
150 ///
151 /// </summary>
152 /// <param name="file"></param>
153 /// <returns></returns>
154 public string GetResourceName(string file) 121 public string GetResourceName(string file)
155 { 122 {
156 if(!m_ResourceNames.ContainsKey(file)) 123 if(!m_ResourceNames.ContainsKey(file))
157 { 124 {
158 return ""; 125 return string.Empty;
159 } 126 }
160 127
161 return (string)m_ResourceNames[file]; 128 return m_ResourceNames[file];
162 } 129 }
163 130
164 /// <summary>
165 ///
166 /// </summary>
167 /// <param name="file"></param>
168 /// <returns></returns>
169 public bool GetPreservePath( string file ) 131 public bool GetPreservePath( string file )
170 { 132 {
171 if ( !m_PreservePaths.ContainsKey( file ) ) 133 if ( !m_PreservePaths.ContainsKey( file ) )
@@ -173,13 +135,9 @@ namespace Prebuild.Core.Nodes
173 return false; 135 return false;
174 } 136 }
175 137
176 return (bool)m_PreservePaths[ file ]; 138 return m_PreservePaths[ file ];
177 } 139 }
178 140
179 /// <summary>
180 ///
181 /// </summary>
182 /// <param name="node"></param>
183 public override void Parse(XmlNode node) 141 public override void Parse(XmlNode node)
184 { 142 {
185 if( node == null ) 143 if( node == null )
@@ -200,10 +158,10 @@ namespace Prebuild.Core.Nodes
200 m_BuildActions[fileNode.Path] = fileNode.BuildAction; 158 m_BuildActions[fileNode.Path] = fileNode.BuildAction;
201 m_SubTypes[fileNode.Path] = fileNode.SubType; 159 m_SubTypes[fileNode.Path] = fileNode.SubType;
202 m_ResourceNames[fileNode.Path] = fileNode.ResourceName; 160 m_ResourceNames[fileNode.Path] = fileNode.ResourceName;
203 this.m_PreservePaths[ fileNode.Path ] = fileNode.PreservePath; 161 m_PreservePaths[ fileNode.Path ] = fileNode.PreservePath;
204 this.m_Links[ fileNode.Path ] = fileNode.IsLink; 162 m_Links[ fileNode.Path ] = fileNode.IsLink;
205 this.m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath; 163 m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath;
206 this.m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput; 164 m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput;
207 165
208 } 166 }
209 } 167 }
@@ -216,13 +174,16 @@ namespace Prebuild.Core.Nodes
216 if (!m_Files.Contains(file)) 174 if (!m_Files.Contains(file))
217 { 175 {
218 m_Files.Add(file); 176 m_Files.Add(file);
219 m_BuildActions[ file ] = matchNode.BuildAction == null ? GetBuildActionByFileName(file) : matchNode.BuildAction; 177 if (matchNode.BuildAction == null)
220 m_SubTypes[file] = matchNode.SubType == null ? GetSubTypeByFileName(file) : matchNode.SubType.Value; 178 m_BuildActions[file] = GetBuildActionByFileName(file);
179 else
180 m_BuildActions[file] = matchNode.BuildAction.Value;
181 m_SubTypes[file] = matchNode.SubType == null ? GetSubTypeByFileName(file) : matchNode.SubType.Value;
221 m_ResourceNames[ file ] = matchNode.ResourceName; 182 m_ResourceNames[ file ] = matchNode.ResourceName;
222 this.m_PreservePaths[ file ] = matchNode.PreservePath; 183 m_PreservePaths[ file ] = matchNode.PreservePath;
223 this.m_Links[ file ] = matchNode.IsLink; 184 m_Links[ file ] = matchNode.IsLink;
224 this.m_LinkPaths[ file ] = matchNode.LinkPath; 185 m_LinkPaths[ file ] = matchNode.LinkPath;
225 this.m_CopyToOutputs[ file ] = matchNode.CopyToOutput; 186 m_CopyToOutputs[ file ] = matchNode.CopyToOutput;
226 187
227 } 188 }
228 } 189 }
@@ -232,11 +193,7 @@ namespace Prebuild.Core.Nodes
232 193
233 // TODO: Check in to why StringCollection's enumerator doesn't implement 194 // TODO: Check in to why StringCollection's enumerator doesn't implement
234 // IEnumerator? 195 // IEnumerator?
235 /// <summary> 196 public IEnumerator<string> GetEnumerator()
236 ///
237 /// </summary>
238 /// <returns></returns>
239 public StringEnumerator GetEnumerator()
240 { 197 {
241 return m_Files.GetEnumerator(); 198 return m_Files.GetEnumerator();
242 } 199 }
diff --git a/Prebuild/src/Core/Nodes/MatchNode.cs b/Prebuild/src/Core/Nodes/MatchNode.cs
index 656d7d0..9735265 100644
--- a/Prebuild/src/Core/Nodes/MatchNode.cs
+++ b/Prebuild/src/Core/Nodes/MatchNode.cs
@@ -25,7 +25,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
25 25
26using System; 26using System;
27using System.Collections.Generic; 27using System.Collections.Generic;
28using System.Collections.Specialized;
29using System.IO; 28using System.IO;
30using System.Text.RegularExpressions; 29using System.Text.RegularExpressions;
31using System.Xml; 30using System.Xml;
@@ -33,7 +32,6 @@ using System.Xml;
33using Prebuild.Core.Attributes; 32using Prebuild.Core.Attributes;
34using Prebuild.Core.Interfaces; 33using Prebuild.Core.Interfaces;
35using Prebuild.Core.Utilities; 34using Prebuild.Core.Utilities;
36using System.Collections;
37 35
38namespace Prebuild.Core.Nodes 36namespace Prebuild.Core.Nodes
39{ 37{
@@ -45,7 +43,7 @@ namespace Prebuild.Core.Nodes
45 { 43 {
46 #region Fields 44 #region Fields
47 45
48 private readonly StringCollection m_Files = new StringCollection(); 46 private readonly List<string> m_Files = new List<string>();
49 private Regex m_Regex; 47 private Regex m_Regex;
50 private BuildAction? m_BuildAction; 48 private BuildAction? m_BuildAction;
51 private SubType? m_SubType; 49 private SubType? m_SubType;
@@ -63,7 +61,7 @@ namespace Prebuild.Core.Nodes
63 /// <summary> 61 /// <summary>
64 /// 62 ///
65 /// </summary> 63 /// </summary>
66 public StringCollection Files 64 public IEnumerable<string> Files
67 { 65 {
68 get 66 get
69 { 67 {
@@ -97,7 +95,7 @@ namespace Prebuild.Core.Nodes
97 { 95 {
98 get 96 get
99 { 97 {
100 return this.m_CopyToOutput; 98 return m_CopyToOutput;
101 } 99 }
102 } 100 }
103 101
@@ -105,7 +103,7 @@ namespace Prebuild.Core.Nodes
105 { 103 {
106 get 104 get
107 { 105 {
108 return this.m_Link; 106 return m_Link;
109 } 107 }
110 } 108 }
111 109
@@ -113,7 +111,7 @@ namespace Prebuild.Core.Nodes
113 { 111 {
114 get 112 get
115 { 113 {
116 return this.m_LinkPath; 114 return m_LinkPath;
117 } 115 }
118 } 116 }
119 /// <summary> 117 /// <summary>
@@ -149,21 +147,35 @@ namespace Prebuild.Core.Nodes
149 private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, List<ExcludeNode> exclusions) 147 private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, List<ExcludeNode> exclusions)
150 { 148 {
151 Match match; 149 Match match;
152 Boolean excludeFile; 150 try
153 try
154 { 151 {
155 string[] files; 152 string[] files;
156 153
157 if(!useRegex) 154 Boolean excludeFile;
155 if(!useRegex)
158 { 156 {
159 files = Directory.GetFiles(path, pattern); 157 try
158 {
159 files = Directory.GetFiles(path, pattern);
160 }
161 catch (IOException)
162 {
163 // swallow weird IOException error when running in a virtual box
164 // guest OS on a network share when the host OS is not Windows.
165 // This seems to happen on network shares
166 // when no files match, and may be related to this report:
167 // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=254546
168
169 files = null;
170 }
171
160 if(files != null) 172 if(files != null)
161 { 173 {
162 string fileTemp; 174 foreach (string file in files)
163 foreach (string file in files)
164 { 175 {
165 excludeFile = false; 176 excludeFile = false;
166 if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\") 177 string fileTemp;
178 if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\")
167 { 179 {
168 fileTemp = file.Substring(2); 180 fileTemp = file.Substring(2);
169 } 181 }
@@ -187,47 +199,64 @@ namespace Prebuild.Core.Nodes
187 199
188 } 200 }
189 } 201 }
190 else 202
191 { 203 // don't call return here, because we may need to recursively search directories below
192 return; 204 // this one, even if no matches were found in this directory.
193 }
194 } 205 }
195 else 206 else
196 { 207 {
197 files = Directory.GetFiles(path); 208 try
198 foreach(string file in files) 209 {
199 { 210 files = Directory.GetFiles(path);
200 excludeFile = false; 211 }
201 212 catch (IOException)
202 match = m_Regex.Match(file); 213 {
203 if(match.Success) 214 // swallow weird IOException error when running in a virtual box
204 { 215 // guest OS on a network share.
205 // Check all excludions and set flag if there are any hits. 216 files = null;
206 foreach ( ExcludeNode exclude in exclusions ) 217 }
207 { 218
208 Regex exRegEx = new Regex( exclude.Pattern ); 219 if (files != null)
209 match = exRegEx.Match( file ); 220 {
210 excludeFile |= !match.Success; 221 foreach (string file in files)
211 } 222 {
223 excludeFile = false;
212 224
213 if ( !excludeFile ) 225 match = m_Regex.Match(file);
226 if (match.Success)
214 { 227 {
215 m_Files.Add( file ); 228 // Check all excludions and set flag if there are any hits.
229 foreach (ExcludeNode exclude in exclusions)
230 {
231 Regex exRegEx = new Regex(exclude.Pattern);
232 match = exRegEx.Match(file);
233 excludeFile |= !match.Success;
234 }
235
236 if (!excludeFile)
237 {
238 m_Files.Add(file);
239 }
216 } 240 }
217 } 241 }
218 } 242 }
219 } 243 }
220 244
221 if(recurse) 245 if(recurse)
222 { 246 {
223 string[] dirs = Directory.GetDirectories(path); 247 string[] dirs = Directory.GetDirectories(path);
224 if(dirs != null && dirs.Length > 0) 248 if(dirs != null && dirs.Length > 0)
225 { 249 {
226 foreach(string str in dirs) 250 foreach (string str in dirs)
227 { 251 {
228 RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex, exclusions); 252 // hack to skip subversion folders. Not having this can cause
229 } 253 // a significant performance hit when running on a network drive.
230 } 254 if (str.EndsWith(".svn"))
255 continue;
256
257 RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex, exclusions);
258 }
259 }
231 } 260 }
232 } 261 }
233 catch(DirectoryNotFoundException) 262 catch(DirectoryNotFoundException)
@@ -266,14 +295,14 @@ namespace Prebuild.Core.Nodes
266 //string subType = Helper.AttributeValue(node, "subType", string.Empty); 295 //string subType = Helper.AttributeValue(node, "subType", string.Empty);
267 //if (subType != String.Empty) 296 //if (subType != String.Empty)
268 // m_SubType = (SubType)Enum.Parse(typeof(SubType), subType); 297 // m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
269 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString()); 298 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName);
270 this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString())); 299 m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", m_CopyToOutput.ToString()));
271 this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString)); 300 m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
272 if ( this.m_Link == true ) 301 if ( m_Link )
273 { 302 {
274 this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty ); 303 m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
275 } 304 }
276 this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) ); 305 m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) );
277 306
278 307
279 if(path != null && path.Length == 0) 308 if(path != null && path.Length == 0)
@@ -318,11 +347,19 @@ namespace Prebuild.Core.Nodes
318 347
319 RecurseDirectories( path, pattern, recurse, useRegex, m_Exclusions ); 348 RecurseDirectories( path, pattern, recurse, useRegex, m_Exclusions );
320 349
321 if(m_Files.Count < 1) 350 if (m_Files.Count < 1)
322 { 351 {
323 throw new WarningException("Match returned no files: {0}{1}", Helper.EndPath(path), pattern); 352 // Include the project name when the match node returns no matches to provide extra
324 } 353 // debug info.
325 m_Regex = null; 354 ProjectNode project = Parent.Parent as ProjectNode;
355 string projectName = "";
356
357 if (project != null)
358 projectName = " in project " + project.AssemblyName;
359
360 throw new WarningException("Match" + projectName + " returned no files: {0}{1}", Helper.EndPath(path), pattern);
361 }
362 m_Regex = null;
326 } 363 }
327 364
328 #endregion 365 #endregion
diff --git a/Prebuild/src/Core/Nodes/OptionsNode.cs b/Prebuild/src/Core/Nodes/OptionsNode.cs
index b63034b..577de71 100644
--- a/Prebuild/src/Core/Nodes/OptionsNode.cs
+++ b/Prebuild/src/Core/Nodes/OptionsNode.cs
@@ -24,8 +24,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections; 27using System.Collections.Generic;
28using System.Collections.Specialized;
29using System.Reflection; 28using System.Reflection;
30using System.Xml; 29using System.Xml;
31 30
@@ -43,7 +42,7 @@ namespace Prebuild.Core.Nodes
43 { 42 {
44 #region Fields 43 #region Fields
45 44
46 private static Hashtable m_OptionFields; 45 private static readonly Dictionary<string,FieldInfo> m_OptionFields = new Dictionary<string, FieldInfo>();
47 46
48 [OptionNode("CompilerDefines")] 47 [OptionNode("CompilerDefines")]
49 private string m_CompilerDefines = ""; 48 private string m_CompilerDefines = "";
@@ -495,7 +494,7 @@ namespace Prebuild.Core.Nodes
495 } 494 }
496 } 495 }
497 496
498 private StringCollection m_FieldsDefined; 497 private readonly List<string> m_FieldsDefined = new List<string>();
499 498
500 #endregion 499 #endregion
501 500
@@ -508,7 +507,6 @@ namespace Prebuild.Core.Nodes
508 { 507 {
509 Type t = typeof(OptionsNode); 508 Type t = typeof(OptionsNode);
510 509
511 m_OptionFields = new Hashtable();
512 foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)) 510 foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
513 { 511 {
514 object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false); 512 object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false);
@@ -522,14 +520,6 @@ namespace Prebuild.Core.Nodes
522 } 520 }
523 } 521 }
524 522
525 /// <summary>
526 /// Initializes a new instance of the <see cref="OptionsNode"/> class.
527 /// </summary>
528 public OptionsNode()
529 {
530 m_FieldsDefined = new StringCollection();
531 }
532
533 #endregion 523 #endregion
534 524
535 #region Properties 525 #region Properties
@@ -547,7 +537,7 @@ namespace Prebuild.Core.Nodes
547 return null; 537 return null;
548 } 538 }
549 539
550 FieldInfo f = (FieldInfo)m_OptionFields[index]; 540 FieldInfo f = m_OptionFields[index];
551 return f.GetValue(this); 541 return f.GetValue(this);
552 } 542 }
553 } 543 }
@@ -591,7 +581,7 @@ namespace Prebuild.Core.Nodes
591 return; 581 return;
592 } 582 }
593 583
594 FieldInfo f = (FieldInfo)m_OptionFields[nodeName]; 584 FieldInfo f = m_OptionFields[nodeName];
595 f.SetValue(this, Helper.TranslateValue(f.FieldType, val)); 585 f.SetValue(this, Helper.TranslateValue(f.FieldType, val));
596 FlagDefined(f.Name); 586 FlagDefined(f.Name);
597 } 587 }
diff --git a/Prebuild/src/Core/Nodes/ProcessNode.cs b/Prebuild/src/Core/Nodes/ProcessNode.cs
index 6bfbe16..8ca8e49 100644
--- a/Prebuild/src/Core/Nodes/ProcessNode.cs
+++ b/Prebuild/src/Core/Nodes/ProcessNode.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.Xml; 27using System.Xml;
30 28
31using Prebuild.Core.Attributes; 29using Prebuild.Core.Attributes;
diff --git a/Prebuild/src/Core/Nodes/ProjectNode.cs b/Prebuild/src/Core/Nodes/ProjectNode.cs
index 04af7a3..fb92b32 100644
--- a/Prebuild/src/Core/Nodes/ProjectNode.cs
+++ b/Prebuild/src/Core/Nodes/ProjectNode.cs
@@ -24,7 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Generic; 27using System.Collections.Generic;
29using System.IO; 28using System.IO;
30using System.Xml; 29using System.Xml;
@@ -90,10 +89,10 @@ namespace Prebuild.Core.Nodes
90 /// .NET 3.5 89 /// .NET 3.5
91 /// </summary> 90 /// </summary>
92 v3_5, 91 v3_5,
93 /// <summary> 92 /// <summary>
94 /// .NET 4.0 93 /// .NET 4.0
95 /// </summary> 94 /// </summary>
96 v4_0, 95 v4_0,
97 } 96 }
98 /// <summary> 97 /// <summary>
99 /// The Node object representing /Prebuild/Solution/Project elements 98 /// The Node object representing /Prebuild/Solution/Project elements
@@ -121,7 +120,7 @@ namespace Prebuild.Core.Nodes
121 private Guid m_Guid; 120 private Guid m_Guid;
122 private string m_DebugStartParameters; 121 private string m_DebugStartParameters;
123 122
124 private Hashtable m_Configurations = new Hashtable(); 123 private readonly Dictionary<string, ConfigurationNode> m_Configurations = new Dictionary<string, ConfigurationNode>();
125 private readonly List<ReferencePathNode> m_ReferencePaths = new List<ReferencePathNode>(); 124 private readonly List<ReferencePathNode> m_ReferencePaths = new List<ReferencePathNode>();
126 private readonly List<ReferenceNode> m_References = new List<ReferenceNode>(); 125 private readonly List<ReferenceNode> m_References = new List<ReferenceNode>();
127 private readonly List<AuthorNode> m_Authors = new List<AuthorNode>(); 126 private readonly List<AuthorNode> m_Authors = new List<AuthorNode>();
@@ -149,7 +148,7 @@ namespace Prebuild.Core.Nodes
149 { 148 {
150 get 149 get
151 { 150 {
152 return this.m_Framework; 151 return m_Framework;
153 } 152 }
154 } 153 }
155 /// <summary> 154 /// <summary>
@@ -283,7 +282,7 @@ namespace Prebuild.Core.Nodes
283 } 282 }
284 } 283 }
285 284
286 private bool m_GenerateAssemblyInfoFile = false; 285 private bool m_GenerateAssemblyInfoFile;
287 286
288 /// <summary> 287 /// <summary>
289 /// 288 ///
@@ -328,11 +327,11 @@ namespace Prebuild.Core.Nodes
328 /// Gets the configurations. 327 /// Gets the configurations.
329 /// </summary> 328 /// </summary>
330 /// <value>The configurations.</value> 329 /// <value>The configurations.</value>
331 public IList Configurations 330 public List<ConfigurationNode> Configurations
332 { 331 {
333 get 332 get
334 { 333 {
335 ArrayList tmp = new ArrayList(ConfigurationsTable.Values); 334 List<ConfigurationNode> tmp = new List<ConfigurationNode>(ConfigurationsTable.Values);
336 tmp.Sort(); 335 tmp.Sort();
337 return tmp; 336 return tmp;
338 } 337 }
@@ -342,7 +341,7 @@ namespace Prebuild.Core.Nodes
342 /// Gets the configurations table. 341 /// Gets the configurations table.
343 /// </summary> 342 /// </summary>
344 /// <value>The configurations table.</value> 343 /// <value>The configurations table.</value>
345 public Hashtable ConfigurationsTable 344 public Dictionary<string, ConfigurationNode> ConfigurationsTable
346 { 345 {
347 get 346 get
348 { 347 {
@@ -420,7 +419,7 @@ namespace Prebuild.Core.Nodes
420 SolutionNode parent = (SolutionNode)base.Parent; 419 SolutionNode parent = (SolutionNode)base.Parent;
421 foreach(ConfigurationNode conf in parent.Configurations) 420 foreach(ConfigurationNode conf in parent.Configurations)
422 { 421 {
423 m_Configurations[conf.Name] = conf.Clone(); 422 m_Configurations[conf.NameAndPlatform] = (ConfigurationNode) conf.Clone();
424 } 423 }
425 } 424 }
426 } 425 }
@@ -455,19 +454,19 @@ namespace Prebuild.Core.Nodes
455 if(String.Compare(conf.Name, "all", true) == 0) //apply changes to all, this may not always be applied first, 454 if(String.Compare(conf.Name, "all", true) == 0) //apply changes to all, this may not always be applied first,
456 //so it *may* override changes to the same properties for configurations defines at the project level 455 //so it *may* override changes to the same properties for configurations defines at the project level
457 { 456 {
458 foreach(ConfigurationNode confNode in this.m_Configurations.Values) 457 foreach(ConfigurationNode confNode in m_Configurations.Values)
459 { 458 {
460 conf.CopyTo(confNode);//update the config templates defines at the project level with the overrides 459 conf.CopyTo(confNode);//update the config templates defines at the project level with the overrides
461 } 460 }
462 } 461 }
463 if(m_Configurations.ContainsKey(conf.Name)) 462 if(m_Configurations.ContainsKey(conf.NameAndPlatform))
464 { 463 {
465 ConfigurationNode parentConf = (ConfigurationNode)m_Configurations[conf.Name]; 464 ConfigurationNode parentConf = m_Configurations[conf.NameAndPlatform];
466 conf.CopyTo(parentConf);//update the config templates defines at the project level with the overrides 465 conf.CopyTo(parentConf);//update the config templates defines at the project level with the overrides
467 } 466 }
468 else 467 else
469 { 468 {
470 m_Configurations[conf.Name] = conf; 469 m_Configurations[conf.NameAndPlatform] = conf;
471 } 470 }
472 } 471 }
473 472
@@ -504,12 +503,12 @@ namespace Prebuild.Core.Nodes
504 m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false); 503 m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false);
505 m_DebugStartParameters = Helper.AttributeValue(node, "debugStartParameters", string.Empty); 504 m_DebugStartParameters = Helper.AttributeValue(node, "debugStartParameters", string.Empty);
506 505
507 if(m_AssemblyName == null || m_AssemblyName.Length < 1) 506 if(string.IsNullOrEmpty(m_AssemblyName))
508 { 507 {
509 m_AssemblyName = m_Name; 508 m_AssemblyName = m_Name;
510 } 509 }
511 510
512 if(m_RootNamespace == null || m_RootNamespace.Length < 1) 511 if(string.IsNullOrEmpty(m_RootNamespace))
513 { 512 {
514 m_RootNamespace = m_Name; 513 m_RootNamespace = m_Name;
515 } 514 }
@@ -572,7 +571,7 @@ namespace Prebuild.Core.Nodes
572 public int CompareTo(object obj) 571 public int CompareTo(object obj)
573 { 572 {
574 ProjectNode that = (ProjectNode)obj; 573 ProjectNode that = (ProjectNode)obj;
575 return this.m_Name.CompareTo(that.m_Name); 574 return m_Name.CompareTo(that.m_Name);
576 } 575 }
577 576
578 #endregion 577 #endregion
diff --git a/Prebuild/src/Core/Nodes/ReferencePathNode.cs b/Prebuild/src/Core/Nodes/ReferencePathNode.cs
index f0543c2..7331cd7 100644
--- a/Prebuild/src/Core/Nodes/ReferencePathNode.cs
+++ b/Prebuild/src/Core/Nodes/ReferencePathNode.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.Xml; 27using System.Xml;
30 28
31using Prebuild.Core.Attributes; 29using Prebuild.Core.Attributes;
diff --git a/Prebuild/src/Core/Nodes/SolutionNode.cs b/Prebuild/src/Core/Nodes/SolutionNode.cs
index 2a1b8e2..10c0223 100644
--- a/Prebuild/src/Core/Nodes/SolutionNode.cs
+++ b/Prebuild/src/Core/Nodes/SolutionNode.cs
@@ -24,10 +24,8 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Generic; 27using System.Collections.Generic;
29using System.Diagnostics; 28using System.Diagnostics;
30using System.IO;
31using System.Xml; 29using System.Xml;
32 30
33using Prebuild.Core.Attributes; 31using Prebuild.Core.Attributes;
@@ -50,18 +48,19 @@ namespace Prebuild.Core.Nodes
50 private string m_Name = "unknown"; 48 private string m_Name = "unknown";
51 private string m_Path = ""; 49 private string m_Path = "";
52 private string m_FullPath = ""; 50 private string m_FullPath = "";
53 private string m_ActiveConfig = "Debug"; 51 private string m_ActiveConfig;
54 private string m_Version = "1.0.0"; 52 private string m_Version = "1.0.0";
55 53
56 private OptionsNode m_Options; 54 private OptionsNode m_Options;
57 private FilesNode m_Files; 55 private FilesNode m_Files;
58 private readonly Hashtable m_Configurations = new Hashtable(); 56 private readonly ConfigurationNodeCollection m_Configurations = new ConfigurationNodeCollection();
59 private readonly Hashtable m_Projects = new Hashtable(); 57 private readonly Dictionary<string, ProjectNode> m_Projects = new Dictionary<string, ProjectNode>();
60 private readonly Hashtable m_DatabaseProjects = new Hashtable(); 58 private readonly Dictionary<string, DatabaseProjectNode> m_DatabaseProjects = new Dictionary<string, DatabaseProjectNode>();
61 private readonly List<ProjectNode> m_ProjectsOrder = new List<ProjectNode>(); 59 private readonly List<ProjectNode> m_ProjectsOrder = new List<ProjectNode>();
62 private readonly Hashtable m_Solutions = new Hashtable(); 60 private readonly Dictionary<string, SolutionNode> m_Solutions = new Dictionary<string, SolutionNode>();
61 private CleanupNode m_Cleanup;
63 62
64 #endregion 63 #endregion
65 64
66 #region Properties 65 #region Properties
67 public override IDataNode Parent 66 public override IDataNode Parent
@@ -77,7 +76,7 @@ namespace Prebuild.Core.Nodes
77 SolutionNode solution = (SolutionNode)value; 76 SolutionNode solution = (SolutionNode)value;
78 foreach (ConfigurationNode conf in solution.Configurations) 77 foreach (ConfigurationNode conf in solution.Configurations)
79 { 78 {
80 m_Configurations[conf.Name] = conf.Clone(); 79 m_Configurations[conf.Name] = (ConfigurationNode) conf.Clone();
81 } 80 }
82 } 81 }
83 82
@@ -85,6 +84,18 @@ namespace Prebuild.Core.Nodes
85 } 84 }
86 } 85 }
87 86
87 public CleanupNode Cleanup
88 {
89 get
90 {
91 return m_Cleanup;
92 }
93 set
94 {
95 m_Cleanup = value;
96 }
97 }
98
88 public Guid Guid 99 public Guid Guid
89 { 100 {
90 get 101 get
@@ -188,13 +199,13 @@ namespace Prebuild.Core.Nodes
188 /// Gets the configurations. 199 /// Gets the configurations.
189 /// </summary> 200 /// </summary>
190 /// <value>The configurations.</value> 201 /// <value>The configurations.</value>
191 public ICollection Configurations 202 public ConfigurationNodeCollection Configurations
192 { 203 {
193 get 204 get
194 { 205 {
195 ArrayList tmp = new ArrayList(ConfigurationsTable.Values); 206 ConfigurationNodeCollection tmp = new ConfigurationNodeCollection();
196 tmp.Sort(); 207 tmp.AddRange(ConfigurationsTable);
197 return tmp; 208 return tmp;
198 } 209 }
199 } 210 }
200 211
@@ -202,7 +213,7 @@ namespace Prebuild.Core.Nodes
202 /// Gets the configurations table. 213 /// Gets the configurations table.
203 /// </summary> 214 /// </summary>
204 /// <value>The configurations table.</value> 215 /// <value>The configurations table.</value>
205 public Hashtable ConfigurationsTable 216 public ConfigurationNodeCollection ConfigurationsTable
206 { 217 {
207 get 218 get
208 { 219 {
@@ -212,7 +223,7 @@ namespace Prebuild.Core.Nodes
212 /// <summary> 223 /// <summary>
213 /// Gets the database projects. 224 /// Gets the database projects.
214 /// </summary> 225 /// </summary>
215 public ICollection DatabaseProjects 226 public ICollection<DatabaseProjectNode> DatabaseProjects
216 { 227 {
217 get 228 get
218 { 229 {
@@ -222,7 +233,7 @@ namespace Prebuild.Core.Nodes
222 /// <summary> 233 /// <summary>
223 /// Gets the nested solutions. 234 /// Gets the nested solutions.
224 /// </summary> 235 /// </summary>
225 public ICollection Solutions 236 public ICollection<SolutionNode> Solutions
226 { 237 {
227 get 238 get
228 { 239 {
@@ -232,22 +243,22 @@ namespace Prebuild.Core.Nodes
232 /// <summary> 243 /// <summary>
233 /// Gets the nested solutions hash table. 244 /// Gets the nested solutions hash table.
234 /// </summary> 245 /// </summary>
235 public Hashtable SolutionsTable 246 public Dictionary<string, SolutionNode> SolutionsTable
236 { 247 {
237 get 248 get
238 { 249 {
239 return this.m_Solutions; 250 return m_Solutions;
240 } 251 }
241 } 252 }
242 /// <summary> 253 /// <summary>
243 /// Gets the projects. 254 /// Gets the projects.
244 /// </summary> 255 /// </summary>
245 /// <value>The projects.</value> 256 /// <value>The projects.</value>
246 public ICollection Projects 257 public ICollection<ProjectNode> Projects
247 { 258 {
248 get 259 get
249 { 260 {
250 ArrayList tmp = new ArrayList(m_Projects.Values); 261 List<ProjectNode> tmp = new List<ProjectNode>(m_Projects.Values);
251 tmp.Sort(); 262 tmp.Sort();
252 return tmp; 263 return tmp;
253 } 264 }
@@ -257,7 +268,7 @@ namespace Prebuild.Core.Nodes
257 /// Gets the projects table. 268 /// Gets the projects table.
258 /// </summary> 269 /// </summary>
259 /// <value>The projects table.</value> 270 /// <value>The projects table.</value>
260 public Hashtable ProjectsTable 271 public Dictionary<string, ProjectNode> ProjectsTable
261 { 272 {
262 get 273 get
263 { 274 {
@@ -325,16 +336,23 @@ namespace Prebuild.Core.Nodes
325 } 336 }
326 else if(dataNode is ConfigurationNode) 337 else if(dataNode is ConfigurationNode)
327 { 338 {
328 m_Configurations[((ConfigurationNode)dataNode).Name] = dataNode; 339 ConfigurationNode configurationNode = (ConfigurationNode) dataNode;
340 m_Configurations[configurationNode.NameAndPlatform] = configurationNode;
341
342 // If the active configuration is null, then we populate it.
343 if (ActiveConfig == null)
344 {
345 ActiveConfig = configurationNode.Name;
346 }
329 } 347 }
330 else if(dataNode is ProjectNode) 348 else if(dataNode is ProjectNode)
331 { 349 {
332 m_Projects[((ProjectNode)dataNode).Name] = dataNode; 350 m_Projects[((ProjectNode)dataNode).Name] = (ProjectNode) dataNode;
333 m_ProjectsOrder.Add((ProjectNode)dataNode); 351 m_ProjectsOrder.Add((ProjectNode)dataNode);
334 } 352 }
335 else if(dataNode is SolutionNode) 353 else if(dataNode is SolutionNode)
336 { 354 {
337 m_Solutions[((SolutionNode)dataNode).Name] = dataNode; 355 m_Solutions[((SolutionNode)dataNode).Name] = (SolutionNode) dataNode;
338 } 356 }
339 else if (dataNode is ProcessNode) 357 else if (dataNode is ProcessNode)
340 { 358 {
@@ -343,7 +361,13 @@ namespace Prebuild.Core.Nodes
343 } 361 }
344 else if (dataNode is DatabaseProjectNode) 362 else if (dataNode is DatabaseProjectNode)
345 { 363 {
346 m_DatabaseProjects[((DatabaseProjectNode)dataNode).Name] = dataNode; 364 m_DatabaseProjects[((DatabaseProjectNode)dataNode).Name] = (DatabaseProjectNode) dataNode;
365 }
366 else if(dataNode is CleanupNode)
367 {
368 if(m_Cleanup != null)
369 throw new WarningException("There can only be one Cleanup node.");
370 m_Cleanup = (CleanupNode)dataNode;
347 } 371 }
348 } 372 }
349 } 373 }
diff --git a/Prebuild/src/Core/Parse/Preprocessor.cs b/Prebuild/src/Core/Parse/Preprocessor.cs
index b2306e4..0648fad 100644
--- a/Prebuild/src/Core/Parse/Preprocessor.cs
+++ b/Prebuild/src/Core/Parse/Preprocessor.cs
@@ -24,7 +24,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections; 27using System.Collections.Generic;
28using System.IO; 28using System.IO;
29using System.Text.RegularExpressions; 29using System.Text.RegularExpressions;
30using System.Xml; 30using System.Xml;
@@ -83,9 +83,9 @@ namespace Prebuild.Core.Parse
83 83
84 #region Fields 84 #region Fields
85 85
86 XmlDocument m_OutDoc; 86 readonly XmlDocument m_OutDoc = new XmlDocument();
87 Stack m_IfStack; 87 readonly Stack<IfContext> m_IfStack = new Stack<IfContext>();
88 Hashtable m_Variables; 88 readonly Dictionary<string, object> m_Variables = new Dictionary<string, object>();
89 89
90 #endregion 90 #endregion
91 91
@@ -96,10 +96,6 @@ namespace Prebuild.Core.Parse
96 /// </summary> 96 /// </summary>
97 public Preprocessor() 97 public Preprocessor()
98 { 98 {
99 m_OutDoc = new XmlDocument();
100 m_IfStack = new Stack();
101 m_Variables = new Hashtable();
102
103 RegisterVariable("OS", GetOS()); 99 RegisterVariable("OS", GetOS());
104 RegisterVariable("RuntimeVersion", Environment.Version.Major); 100 RegisterVariable("RuntimeVersion", Environment.Version.Major);
105 RegisterVariable("RuntimeMajor", Environment.Version.Major); 101 RegisterVariable("RuntimeMajor", Environment.Version.Major);
@@ -237,11 +233,10 @@ namespace Prebuild.Core.Parse
237 string str = ""; 233 string str = "";
238 OperatorSymbol oper = OperatorSymbol.None; 234 OperatorSymbol oper = OperatorSymbol.None;
239 bool inStr = false; 235 bool inStr = false;
240 char c; 236
241 237 for(int i = 0; i < exp.Length; i++)
242 for(int i = 0; i < exp.Length; i++)
243 { 238 {
244 c = exp[i]; 239 char c = exp[i];
245 if(Char.IsWhiteSpace(c)) 240 if(Char.IsWhiteSpace(c))
246 { 241 {
247 continue; 242 continue;
@@ -326,16 +321,16 @@ namespace Prebuild.Core.Parse
326 { 321 {
327 throw new WarningException("Expected operator in expression"); 322 throw new WarningException("Expected operator in expression");
328 } 323 }
329 else if(id.Length < 1) 324 if(id.Length < 1)
330 { 325 {
331 throw new WarningException("Expected identifier in expression"); 326 throw new WarningException("Expected identifier in expression");
332 } 327 }
333 else if(str.Length < 1) 328 if(str.Length < 1)
334 { 329 {
335 throw new WarningException("Expected value in expression"); 330 throw new WarningException("Expected value in expression");
336 } 331 }
337 332
338 bool ret = false; 333 bool ret;
339 try 334 try
340 { 335 {
341 object val = m_Variables[id.ToLower()]; 336 object val = m_Variables[id.ToLower()];
@@ -344,19 +339,17 @@ namespace Prebuild.Core.Parse
344 throw new WarningException("Unknown identifier '{0}'", id); 339 throw new WarningException("Unknown identifier '{0}'", id);
345 } 340 }
346 341
347 int numVal, numVal2; 342 Type t = val.GetType();
348 string strVal, strVal2;
349 Type t = val.GetType();
350 if(t.IsAssignableFrom(typeof(int))) 343 if(t.IsAssignableFrom(typeof(int)))
351 { 344 {
352 numVal = (int)val; 345 int numVal = (int)val;
353 numVal2 = Int32.Parse(str); 346 int numVal2 = Int32.Parse(str);
354 ret = CompareNum(oper, numVal, numVal2); 347 ret = CompareNum(oper, numVal, numVal2);
355 } 348 }
356 else 349 else
357 { 350 {
358 strVal = val.ToString(); 351 string strVal = val.ToString();
359 strVal2 = str; 352 string strVal2 = str;
360 ret = CompareStr(oper, strVal, strVal2); 353 ret = CompareStr(oper, strVal, strVal2);
361 } 354 }
362 } 355 }
@@ -369,6 +362,70 @@ namespace Prebuild.Core.Parse
369 return ret; 362 return ret;
370 } 363 }
371 364
365 /// <summary>
366 /// Taken from current Prebuild included in OpenSim 0.7.x
367 /// </summary>
368 /// <param name="readerStack">
369 /// A <see cref="Stack<XmlReader>"/>
370 /// </param>
371 /// <param name="include">
372 /// A <see cref="System.String"/>
373 /// </param>
374 private static void WildCardInclude (Stack<XmlReader> readerStack, string include)
375 {
376 if (!include.Contains ("*")) {
377 return;
378 }
379
380 // Console.WriteLine("Processing {0}", include);
381
382 // Break up the include into pre and post wildcard sections
383 string preWildcard = include.Substring (0, include.IndexOf ("*"));
384 string postWildcard = include.Substring (include.IndexOf ("*") + 2);
385
386 // If preWildcard is a directory, recurse
387 if (Directory.Exists (preWildcard)) {
388 string[] directories = Directory.GetDirectories (preWildcard);
389 Array.Sort (directories);
390 Array.Reverse (directories);
391 foreach (string dirPath in directories) {
392 //Console.WriteLine ("Scanning : {0}", dirPath);
393
394 string includeFile = Path.Combine (dirPath, postWildcard);
395 if (includeFile.Contains ("*")) {
396 // postWildcard included another wildcard, recurse.
397 WildCardInclude (readerStack, includeFile);
398 } else {
399 FileInfo file = new FileInfo (includeFile);
400 if (file.Exists) {
401 //Console.WriteLine ("Including File: {0}", includeFile);
402 XmlReader newReader = new XmlTextReader (file.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
403 readerStack.Push (newReader);
404 }
405 }
406 }
407 } else {
408 // preWildcard is not a path to a directory, so the wildcard is in the filename
409 string searchFilename = Path.GetFileName (preWildcard.Substring (preWildcard.IndexOf ("/") + 1) + "*" + postWildcard);
410 Console.WriteLine ("searchFilename: {0}", searchFilename);
411
412 string searchDirectory = Path.GetDirectoryName (preWildcard);
413 Console.WriteLine ("searchDirectory: {0}", searchDirectory);
414
415 string[] files = Directory.GetFiles (searchDirectory, searchFilename);
416 Array.Sort (files);
417 Array.Reverse (files);
418 foreach (string includeFile in files) {
419 FileInfo file = new FileInfo (includeFile);
420 if (file.Exists) {
421 // Console.WriteLine ("Including File: {0}", includeFile);
422 XmlReader newReader = new XmlTextReader (file.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
423 readerStack.Push (newReader);
424 }
425 }
426 }
427 }
428
372 #endregion 429 #endregion
373 430
374 #region Public Methods 431 #region Public Methods
@@ -392,7 +449,7 @@ namespace Prebuild.Core.Parse
392 /// Performs validation on the xml source as well as evaluates conditional and flow expresions 449 /// Performs validation on the xml source as well as evaluates conditional and flow expresions
393 /// </summary> 450 /// </summary>
394 /// <exception cref="ArgumentException">For invalid use of conditional expressions or for invalid XML syntax. If a XmlValidatingReader is passed, then will also throw exceptions for non-schema-conforming xml</exception> 451 /// <exception cref="ArgumentException">For invalid use of conditional expressions or for invalid XML syntax. If a XmlValidatingReader is passed, then will also throw exceptions for non-schema-conforming xml</exception>
395 /// <param name="reader"></param> 452 /// <param name="initialReader"></param>
396 /// <returns>the output xml </returns> 453 /// <returns>the output xml </returns>
397 public string Process(XmlReader initialReader) 454 public string Process(XmlReader initialReader)
398 { 455 {
@@ -411,13 +468,13 @@ namespace Prebuild.Core.Parse
411 // readers which lets the <?include?> operation add more 468 // readers which lets the <?include?> operation add more
412 // readers to generate a multi-file parser and not require 469 // readers to generate a multi-file parser and not require
413 // XML fragments that a recursive version would use. 470 // XML fragments that a recursive version would use.
414 Stack readerStack = new Stack(); 471 Stack<XmlReader> readerStack = new Stack<XmlReader>();
415 readerStack.Push(initialReader); 472 readerStack.Push(initialReader);
416 473
417 while(readerStack.Count > 0) 474 while(readerStack.Count > 0)
418 { 475 {
419 // Pop off the next reader. 476 // Pop off the next reader.
420 XmlReader reader = (XmlReader) readerStack.Pop(); 477 XmlReader reader = readerStack.Pop();
421 478
422 // Process through this XML reader until it is 479 // Process through this XML reader until it is
423 // completed (or it is replaced by the include 480 // completed (or it is replaced by the include
@@ -437,7 +494,7 @@ namespace Prebuild.Core.Parse
437 case "include": 494 case "include":
438 // use regular expressions to parse out the attributes. 495 // use regular expressions to parse out the attributes.
439 MatchCollection matches = includeFileRegex.Matches(reader.Value); 496 MatchCollection matches = includeFileRegex.Matches(reader.Value);
440 497
441 // make sure there is only one file attribute. 498 // make sure there is only one file attribute.
442 if(matches.Count > 1) 499 if(matches.Count > 1)
443 { 500 {
@@ -448,38 +505,37 @@ namespace Prebuild.Core.Parse
448 { 505 {
449 throw new WarningException("An <?include ?> node was found, but it did not specify the file attribute."); 506 throw new WarningException("An <?include ?> node was found, but it did not specify the file attribute.");
450 } 507 }
451
452 // Push current reader back onto the stack.
453 readerStack.Push(reader);
454
455 // Pull the file out from the regex and make sure it is a valid file before using it.
456 string filename = matches[0].Groups[1].Value;
457 508
458 filename = String.Join(Path.DirectorySeparatorChar.ToString(), filename.Split(new char[] { '/', '\\' })); 509 // ***** Adding for wildcard handling
459 510 // Push current reader back onto the stack.
460 if (!filename.Contains("*")) 511 readerStack.Push (reader);
461 { 512
462 FileInfo includeFile = new FileInfo(filename); 513 // Pull the file out from the regex and make sure it is a valid file before using it.
463 514 string filename = matches[0].Groups[1].Value;
464 if (!includeFile.Exists) 515
465 { 516 filename = String.Join (Path.DirectorySeparatorChar.ToString (), filename.Split (new char[] { '/', '\\' }));
466 throw new WarningException("Cannot include file: " + includeFile.FullName); 517
518 if (!filename.Contains ("*")) {
519
520 FileInfo includeFile = new FileInfo (filename);
521 if (!includeFile.Exists) {
522 throw new WarningException ("Cannot include file: " + includeFile.FullName);
467 } 523 }
468 524
469 // Create a new reader object for this file, and push it onto the stack 525 // Create a new reader object for this file. Then put the old reader back on the stack and start
470 XmlReader newReader = new XmlTextReader(includeFile.Open(FileMode.Open, FileAccess.Read, FileShare.Read)); 526 // processing using this new XML reader.
471 readerStack.Push(newReader); 527
472 } 528 XmlReader newReader = new XmlTextReader (includeFile.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
473 else 529 reader = newReader;
474 { 530 readerStack.Push (reader);
475 WildCardInclude(readerStack, filename); 531
532 } else {
533 WildCardInclude (readerStack, filename);
476 } 534 }
477 535
478 // continue reading with whatever reader is on the top of the stack 536 reader = (XmlReader)readerStack.Pop ();
479 reader = (XmlReader)readerStack.Pop();
480 ignore = true; 537 ignore = true;
481 538 break;
482 break;
483 539
484 case "if": 540 case "if":
485 m_IfStack.Push(context); 541 m_IfStack.Push(context);
@@ -492,12 +548,12 @@ namespace Prebuild.Core.Parse
492 { 548 {
493 throw new WarningException("Unexpected 'elseif' outside of 'if'"); 549 throw new WarningException("Unexpected 'elseif' outside of 'if'");
494 } 550 }
495 else if(context.State != IfState.If && context.State != IfState.ElseIf) 551 if(context.State != IfState.If && context.State != IfState.ElseIf)
496 { 552 {
497 throw new WarningException("Unexpected 'elseif' outside of 'if'"); 553 throw new WarningException("Unexpected 'elseif' outside of 'if'");
498 } 554 }
499 555
500 context.State = IfState.ElseIf; 556 context.State = IfState.ElseIf;
501 if(!context.EverKept) 557 if(!context.EverKept)
502 { 558 {
503 context.Keep = ParseExpression(reader.Value); 559 context.Keep = ParseExpression(reader.Value);
@@ -515,12 +571,12 @@ namespace Prebuild.Core.Parse
515 { 571 {
516 throw new WarningException("Unexpected 'else' outside of 'if'"); 572 throw new WarningException("Unexpected 'else' outside of 'if'");
517 } 573 }
518 else if(context.State != IfState.If && context.State != IfState.ElseIf) 574 if(context.State != IfState.If && context.State != IfState.ElseIf)
519 { 575 {
520 throw new WarningException("Unexpected 'else' outside of 'if'"); 576 throw new WarningException("Unexpected 'else' outside of 'if'");
521 } 577 }
522 578
523 context.State = IfState.Else; 579 context.State = IfState.Else;
524 context.Keep = !context.EverKept; 580 context.Keep = !context.EverKept;
525 ignore = true; 581 ignore = true;
526 break; 582 break;
@@ -531,7 +587,7 @@ namespace Prebuild.Core.Parse
531 throw new WarningException("Unexpected 'endif' outside of 'if'"); 587 throw new WarningException("Unexpected 'endif' outside of 'if'");
532 } 588 }
533 589
534 context = (IfContext)m_IfStack.Pop(); 590 context = m_IfStack.Pop();
535 ignore = true; 591 ignore = true;
536 break; 592 break;
537 } 593 }
@@ -591,73 +647,6 @@ namespace Prebuild.Core.Parse
591 return xmlText.ToString(); 647 return xmlText.ToString();
592 } 648 }
593 649
594 private static void WildCardInclude(Stack readerStack, string include)
595 {
596 if (!include.Contains("*"))
597 {
598 return;
599 }
600
601// Console.WriteLine("Processing {0}", include);
602
603 // Break up the include into pre and post wildcard sections
604 string preWildcard = include.Substring(0, include.IndexOf("*"));
605 string postWildcard = include.Substring(include.IndexOf("*") + 2);
606
607 // If preWildcard is a directory, recurse
608 if (Directory.Exists(preWildcard))
609 {
610 string[] directories = Directory.GetDirectories(preWildcard);
611 Array.Sort(directories);
612 Array.Reverse(directories);
613 foreach (string dirPath in directories )
614 {
615 Console.WriteLine("Scanning : {0}", dirPath);
616
617 string includeFile = Path.Combine(dirPath, postWildcard);
618 if (includeFile.Contains("*"))
619 {
620 // postWildcard included another wildcard, recurse.
621 WildCardInclude(readerStack, includeFile);
622 }
623 else
624 {
625 FileInfo file = new FileInfo(includeFile);
626 if (file.Exists)
627 {
628 Console.WriteLine("Including File: {0}", includeFile);
629 XmlReader newReader = new XmlTextReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read));
630 readerStack.Push(newReader);
631 }
632 }
633 }
634 }
635 else
636 {
637 // preWildcard is not a path to a directory, so the wildcard is in the filename
638 string searchFilename = Path.GetFileName(preWildcard.Substring(preWildcard.IndexOf("/") + 1) + "*" + postWildcard);
639 // Console.WriteLine("searchFilename: {0}", searchFilename);
640
641 string searchDirectory = Path.GetDirectoryName(preWildcard);
642 // Console.WriteLine("searchDirectory: {0}", searchDirectory);
643
644 string[] files = Directory.GetFiles(searchDirectory, searchFilename);
645 Array.Sort(files);
646 Array.Reverse(files);
647 foreach (string includeFile in files)
648 {
649 FileInfo file = new FileInfo(includeFile);
650 if (file.Exists)
651 {
652 Console.WriteLine("Including File: {0}", includeFile);
653 XmlReader newReader = new XmlTextReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read));
654 readerStack.Push(newReader);
655 }
656 }
657 }
658
659 }
660
661 #endregion 650 #endregion
662 } 651 }
663} 652}
diff --git a/Prebuild/src/Core/Targets/.NAntTarget.cs.swp b/Prebuild/src/Core/Targets/.NAntTarget.cs.swp
new file mode 100644
index 0000000..afec61c
--- /dev/null
+++ b/Prebuild/src/Core/Targets/.NAntTarget.cs.swp
Binary files differ
diff --git a/Prebuild/src/Core/Targets/AutotoolsTarget.cs b/Prebuild/src/Core/Targets/AutotoolsTarget.cs
index 5dcbb38..485e4dd 100644
--- a/Prebuild/src/Core/Targets/AutotoolsTarget.cs
+++ b/Prebuild/src/Core/Targets/AutotoolsTarget.cs
@@ -66,9 +66,7 @@ POSSIBILITY OF SUCH DAMAGE.
66 66
67#endregion 67#endregion
68using System; 68using System;
69using System.Collections;
70using System.Collections.Generic; 69using System.Collections.Generic;
71using System.Collections.Specialized;
72using System.IO; 70using System.IO;
73using System.Reflection; 71using System.Reflection;
74using System.Text; 72using System.Text;
@@ -81,7 +79,6 @@ using System.Diagnostics;
81using Prebuild.Core.Attributes; 79using Prebuild.Core.Attributes;
82using Prebuild.Core.Interfaces; 80using Prebuild.Core.Interfaces;
83using Prebuild.Core.Nodes; 81using Prebuild.Core.Nodes;
84using Prebuild.Core.Parse;
85using Prebuild.Core.Utilities; 82using Prebuild.Core.Utilities;
86 83
87namespace Prebuild.Core.Targets 84namespace Prebuild.Core.Targets
@@ -170,16 +167,16 @@ namespace Prebuild.Core.Targets
170 XmlDocument autotoolsDoc; 167 XmlDocument autotoolsDoc;
171 XmlUrlResolver xr; 168 XmlUrlResolver xr;
172 System.Security.Policy.Evidence e; 169 System.Security.Policy.Evidence e;
173 Hashtable assemblyPathToPackage = new Hashtable(); 170 readonly Dictionary<string, SystemPackage> assemblyPathToPackage = new Dictionary<string, SystemPackage>();
174 Hashtable assemblyFullNameToPath = new Hashtable(); 171 readonly Dictionary<string, string> assemblyFullNameToPath = new Dictionary<string, string>();
175 Hashtable packagesHash = new Hashtable(); 172 readonly Dictionary<string, SystemPackage> packagesHash = new Dictionary<string, SystemPackage>();
176 readonly List<SystemPackage> packages = new List<SystemPackage>(); 173 readonly List<SystemPackage> packages = new List<SystemPackage>();
177 174
178 #endregion 175 #endregion
179 176
180 #region Private Methods 177 #region Private Methods
181 178
182 private void mkdirDashP(string dirName) 179 private static void mkdirDashP(string dirName)
183 { 180 {
184 DirectoryInfo di = new DirectoryInfo(dirName); 181 DirectoryInfo di = new DirectoryInfo(dirName);
185 if (di.Exists) 182 if (di.Exists)
@@ -193,7 +190,7 @@ namespace Prebuild.Core.Targets
193 di.Create(); 190 di.Create();
194 } 191 }
195 192
196 private void chkMkDir(string dirName) 193 private static void chkMkDir(string dirName)
197 { 194 {
198 System.IO.DirectoryInfo di = 195 System.IO.DirectoryInfo di =
199 new System.IO.DirectoryInfo(dirName); 196 new System.IO.DirectoryInfo(dirName);
@@ -222,13 +219,12 @@ namespace Prebuild.Core.Targets
222 (m_Kernel.CurrentDoc, argList, templateWriter, xr); 219 (m_Kernel.CurrentDoc, argList, templateWriter, xr);
223 } 220 }
224 221
225 string NormalizeAsmName(string name) 222 static string NormalizeAsmName(string name)
226 { 223 {
227 int i = name.IndexOf(", PublicKeyToken=null"); 224 int i = name.IndexOf(", PublicKeyToken=null");
228 if (i != -1) 225 if (i != -1)
229 return name.Substring(0, i).Trim(); 226 return name.Substring(0, i).Trim();
230 else 227 return name;
231 return name;
232 } 228 }
233 229
234 private void AddAssembly(string assemblyfile, SystemPackage package) 230 private void AddAssembly(string assemblyfile, SystemPackage package)
@@ -247,7 +243,7 @@ namespace Prebuild.Core.Targets
247 } 243 }
248 } 244 }
249 245
250 private List<string> GetAssembliesWithLibInfo(string line, string file) 246 private static List<string> GetAssembliesWithLibInfo(string line, string file)
251 { 247 {
252 List<string> references = new List<string>(); 248 List<string> references = new List<string>();
253 List<string> libdirs = new List<string>(); 249 List<string> libdirs = new List<string>();
@@ -278,7 +274,7 @@ namespace Prebuild.Core.Targets
278 return retval; 274 return retval;
279 } 275 }
280 276
281 private List<string> GetAssembliesWithoutLibInfo(string line, string file) 277 private static List<string> GetAssembliesWithoutLibInfo(string line, string file)
282 { 278 {
283 List<string> references = new List<string>(); 279 List<string> references = new List<string>();
284 foreach (string reference in line.Split(' ')) 280 foreach (string reference in line.Split(' '))
@@ -292,7 +288,7 @@ namespace Prebuild.Core.Targets
292 return references; 288 return references;
293 } 289 }
294 290
295 private string ProcessPiece(string piece, string pcfile) 291 private static string ProcessPiece(string piece, string pcfile)
296 { 292 {
297 int start = piece.IndexOf("${"); 293 int start = piece.IndexOf("${");
298 if (start == -1) 294 if (start == -1)
@@ -307,7 +303,7 @@ namespace Prebuild.Core.Targets
307 return ProcessPiece(piece.Replace("${" + variable + "}", interp), pcfile); 303 return ProcessPiece(piece.Replace("${" + variable + "}", interp), pcfile);
308 } 304 }
309 305
310 private string GetVariableFromPkgConfig(string var, string pcfile) 306 private static string GetVariableFromPkgConfig(string var, string pcfile)
311 { 307 {
312 ProcessStartInfo psi = new ProcessStartInfo("pkg-config"); 308 ProcessStartInfo psi = new ProcessStartInfo("pkg-config");
313 psi.RedirectStandardOutput = true; 309 psi.RedirectStandardOutput = true;
@@ -327,7 +323,7 @@ namespace Prebuild.Core.Targets
327 { 323 {
328 // Don't register the package twice 324 // Don't register the package twice
329 string pname = Path.GetFileNameWithoutExtension(pcfile); 325 string pname = Path.GetFileNameWithoutExtension(pcfile);
330 if (packagesHash.Contains(pname)) 326 if (packagesHash.ContainsKey(pname))
331 return; 327 return;
332 328
333 List<string> fullassemblies = null; 329 List<string> fullassemblies = null;
@@ -507,158 +503,6 @@ namespace Prebuild.Core.Targets
507 WriteProject(solution, project); 503 WriteProject(solution, project);
508 } 504 }
509 } 505 }
510 private static string PrependPath(string path)
511 {
512 string tmpPath = Helper.NormalizePath(path, '/');
513 Regex regex = new Regex(@"(\w):/(\w+)");
514 Match match = regex.Match(tmpPath);
515 if (match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
516 {
517 tmpPath = Helper.NormalizePath(tmpPath);
518 }
519 else
520 {
521 tmpPath = Helper.NormalizePath("./" + tmpPath);
522 }
523
524 return tmpPath;
525 }
526
527 private static string BuildReference(SolutionNode solution,
528 ReferenceNode refr)
529 {
530 string ret = "";
531 if (solution.ProjectsTable.ContainsKey(refr.Name))
532 {
533 ProjectNode project =
534 (ProjectNode)solution.ProjectsTable[refr.Name];
535 string fileRef = FindFileReference(refr.Name, project);
536 string finalPath =
537 Helper.NormalizePath(Helper.MakeFilePath(project.FullPath +
538 "/$(BUILD_DIR)/$(CONFIG)/",
539 refr.Name, "dll"),
540 '/');
541 ret += finalPath;
542 return ret;
543 }
544 else
545 {
546 ProjectNode project = (ProjectNode)refr.Parent;
547 string fileRef = FindFileReference(refr.Name, project);
548
549 if (refr.Path != null || fileRef != null)
550 {
551 string finalPath = ((refr.Path != null) ?
552 Helper.NormalizePath(refr.Path + "/" +
553 refr.Name + ".dll",
554 '/') :
555 fileRef
556 );
557 ret += Path.Combine(project.Path, finalPath);
558 return ret;
559 }
560
561 try
562 {
563 //Assembly assem = Assembly.Load(refr.Name);
564 //if (assem != null)
565 //{
566 // int index = refr.Name.IndexOf(",");
567 // if ( index > 0)
568 // {
569 // ret += assem.Location;
570 // //Console.WriteLine("Location1: " + assem.Location);
571 // }
572 // else
573 // {
574 // ret += (refr.Name + ".dll");
575 // //Console.WriteLine("Location2: " + assem.Location);
576 // }
577 //}
578 //else
579 //{
580 int index = refr.Name.IndexOf(",");
581 if (index > 0)
582 {
583 ret += refr.Name.Substring(0, index) + ".dll";
584 //Console.WriteLine("Location3: " + assem.Location);
585 }
586 else
587 {
588 ret += (refr.Name + ".dll");
589 //Console.WriteLine("Location4: " + assem.Location);
590 }
591 //}
592 }
593 catch (System.NullReferenceException e)
594 {
595 e.ToString();
596 int index = refr.Name.IndexOf(",");
597 if (index > 0)
598 {
599 ret += refr.Name.Substring(0, index) + ".dll";
600 //Console.WriteLine("Location5: " + assem.Location);
601 }
602 else
603 {
604 ret += (refr.Name + ".dll");
605 //Console.WriteLine("Location6: " + assem.Location);
606 }
607 }
608 }
609 return ret;
610 }
611
612 private static string BuildReferencePath(SolutionNode solution,
613 ReferenceNode refr)
614 {
615 string ret = "";
616 if (solution.ProjectsTable.ContainsKey(refr.Name))
617 {
618 ProjectNode project =
619 (ProjectNode)solution.ProjectsTable[refr.Name];
620 string finalPath =
621 Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath +
622 "/${build.dir}/"),
623 '/');
624 ret += finalPath;
625 return ret;
626 }
627 else
628 {
629 ProjectNode project = (ProjectNode)refr.Parent;
630 string fileRef = FindFileReference(refr.Name, project);
631
632 if (refr.Path != null || fileRef != null)
633 {
634 string finalPath = ((refr.Path != null) ?
635 Helper.NormalizePath(refr.Path, '/') :
636 fileRef
637 );
638 ret += finalPath;
639 return ret;
640 }
641
642 try
643 {
644 Assembly assem = Assembly.Load(refr.Name);
645 if (assem != null)
646 {
647 ret += "";
648 }
649 else
650 {
651 ret += "";
652 }
653 }
654 catch (System.NullReferenceException e)
655 {
656 e.ToString();
657 ret += "";
658 }
659 }
660 return ret;
661 }
662 506
663 private static string FindFileReference(string refName, 507 private static string FindFileReference(string refName,
664 ProjectNode project) 508 ProjectNode project)
@@ -831,7 +675,7 @@ namespace Prebuild.Core.Targets
831 } 675 }
832 catch 676 catch
833 { 677 {
834 Console.WriteLine("Error! '{0}'", e.ToString()); 678 Console.WriteLine("Error! '{0}'", e);
835 } 679 }
836 680
837 } 681 }
@@ -865,7 +709,7 @@ namespace Prebuild.Core.Targets
865 // Set up references 709 // Set up references
866 for (int refNum = 0; refNum < project.References.Count; refNum++) 710 for (int refNum = 0; refNum < project.References.Count; refNum++)
867 { 711 {
868 ReferenceNode refr = (ReferenceNode)project.References[refNum]; 712 ReferenceNode refr = project.References[refNum];
869 Assembly refAssembly = Assembly.LoadWithPartialName(refr.Name); 713 Assembly refAssembly = Assembly.LoadWithPartialName(refr.Name);
870 714
871 /* Determine which pkg-config (.pc) file refers to 715 /* Determine which pkg-config (.pc) file refers to
@@ -873,25 +717,28 @@ namespace Prebuild.Core.Targets
873 717
874 SystemPackage package = null; 718 SystemPackage package = null;
875 719
876 if (packagesHash.Contains(refr.Name)){ 720 if (packagesHash.ContainsKey(refr.Name))
877 package = (SystemPackage)packagesHash[refr.Name]; 721 {
878 722 package = packagesHash[refr.Name];
879 }else{
880 string assemblyFullName = string.Empty;
881 if (refAssembly != null)
882 assemblyFullName = refAssembly.FullName;
883
884 string assemblyFileName = string.Empty;
885 if (assemblyFullName != string.Empty &&
886 assemblyFullNameToPath.Contains(assemblyFullName)
887 )
888 assemblyFileName =
889 (string)assemblyFullNameToPath[assemblyFullName];
890 723
891 if (assemblyFileName != string.Empty && 724 }
892 assemblyPathToPackage.Contains(assemblyFileName) 725 else
893 ) 726 {
894 package = (SystemPackage)assemblyPathToPackage[assemblyFileName]; 727 string assemblyFullName = string.Empty;
728 if (refAssembly != null)
729 assemblyFullName = refAssembly.FullName;
730
731 string assemblyFileName = string.Empty;
732 if (assemblyFullName != string.Empty &&
733 assemblyFullNameToPath.ContainsKey(assemblyFullName)
734 )
735 assemblyFileName =
736 assemblyFullNameToPath[assemblyFullName];
737
738 if (assemblyFileName != string.Empty &&
739 assemblyPathToPackage.ContainsKey(assemblyFileName)
740 )
741 package = assemblyPathToPackage[assemblyFileName];
895 742
896 } 743 }
897 744
@@ -958,7 +805,7 @@ namespace Prebuild.Core.Targets
958 */ 805 */
959 806
960 ProjectNode sourcePrj = 807 ProjectNode sourcePrj =
961 ((ProjectNode)(solution.ProjectsTable[refr.Name])); 808 ((solution.ProjectsTable[refr.Name]));
962 809
963 string target = 810 string target =
964 String.Format("{0}:\n" + 811 String.Format("{0}:\n" +
@@ -1067,564 +914,6 @@ namespace Prebuild.Core.Targets
1067 transformToFile(Path.Combine(projectDir, project.Name.ToLower() + ".in"), argList, "/Autotools/ProjectWrapperScriptIn"); 914 transformToFile(Path.Combine(projectDir, project.Name.ToLower() + ".in"), argList, "/Autotools/ProjectWrapperScriptIn");
1068 } 915 }
1069 916
1070 private void WriteProjectOld(SolutionNode solution, ProjectNode project)
1071 {
1072 string projFile = Helper.MakeFilePath(project.FullPath, "Include", "am");
1073 StreamWriter ss = new StreamWriter(projFile);
1074 ss.NewLine = "\n";
1075
1076 m_Kernel.CurrentWorkingDirectory.Push();
1077 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
1078
1079 using (ss)
1080 {
1081 ss.WriteLine(Helper.AssemblyFullName(project.AssemblyName, project.Type) + ":");
1082 ss.WriteLine("\tmkdir -p " + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/");
1083 foreach (string file in project.Files)
1084 {
1085 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
1086 {
1087 ss.Write("\tresgen ");
1088 ss.Write(Helper.NormalizePath(Path.Combine(project.Path, file.Substring(0, file.LastIndexOf('.')) + ".resx "), '/'));
1089 if (project.Files.GetResourceName(file) != "")
1090 {
1091 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/'));
1092 }
1093 else
1094 {
1095 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/'));
1096 }
1097 }
1098 }
1099 ss.WriteLine("\t$(CSC)\t/out:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " \\");
1100 ss.WriteLine("\t\t/target:" + project.Type.ToString().ToLower() + " \\");
1101 if (project.References.Count > 0)
1102 {
1103 ss.Write("\t\t/reference:");
1104 bool firstref = true;
1105 foreach (ReferenceNode refr in project.References)
1106 {
1107 if (firstref)
1108 {
1109 firstref = false;
1110 }
1111 else
1112 {
1113 ss.Write(",");
1114 }
1115 ss.Write("{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(solution.FullPath, BuildReference(solution, refr)), '/'));
1116 }
1117 ss.WriteLine(" \\");
1118 }
1119 //ss.WriteLine("\t\tProperties/AssemblyInfo.cs \\");
1120
1121 foreach (string file in project.Files)
1122 {
1123 switch (project.Files.GetBuildAction(file))
1124 {
1125 case BuildAction.EmbeddedResource:
1126 ss.Write("\t\t/resource:");
1127 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, file), '/') + " \\");
1128 break;
1129 default:
1130 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
1131 {
1132 ss.Write("\t\t/resource:");
1133 if (project.Files.GetResourceName(file) != "")
1134 {
1135 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/') + "," + project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources" + " \\");
1136 }
1137 else
1138 {
1139 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/') + "," + project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources" + " \\");
1140 }
1141 }
1142 break;
1143 }
1144 }
1145
1146 foreach (ConfigurationNode conf in project.Configurations)
1147 {
1148 if (conf.Options.KeyFile != "")
1149 {
1150 ss.WriteLine("\t\t/keyfile:" + Helper.NormalizePath(Path.Combine(project.Path, conf.Options.KeyFile), '/') + " \\");
1151 break;
1152 }
1153 }
1154 foreach (ConfigurationNode conf in project.Configurations)
1155 {
1156 if (conf.Options.AllowUnsafe)
1157 {
1158 ss.WriteLine("\t\t/unsafe \\");
1159 break;
1160 }
1161 }
1162 if (project.AppIcon != "")
1163 {
1164 ss.WriteLine("\t\t/win32icon:" + Helper.NormalizePath(Path.Combine(project.Path, project.AppIcon), '/') + " \\");
1165 }
1166
1167 foreach (ConfigurationNode conf in project.Configurations)
1168 {
1169 ss.WriteLine("\t\t/define:{0}", conf.Options.CompilerDefines.Replace(';', ',') + " \\");
1170 break;
1171 }
1172
1173 foreach (ConfigurationNode conf in project.Configurations)
1174 {
1175 if (GetXmlDocFile(project, conf) != "")
1176 {
1177 ss.WriteLine("\t\t/doc:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + project.Name + ".xml \\");
1178 break;
1179 }
1180 }
1181 foreach (string file in project.Files)
1182 {
1183 switch (project.Files.GetBuildAction(file))
1184 {
1185 case BuildAction.Compile:
1186 ss.WriteLine("\t\t\\");
1187 ss.Write("\t\t" + NormalizePath(Path.Combine(Helper.MakePathRelativeTo(solution.FullPath, project.Path), file)));
1188 break;
1189 default:
1190 break;
1191 }
1192 }
1193 ss.WriteLine();
1194 ss.WriteLine();
1195
1196 if (project.Type == ProjectType.Library)
1197 {
1198 ss.WriteLine("install-data-local:");
1199 ss.WriteLine(" echo \"$(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS)\"; \\");
1200 ss.WriteLine(" $(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS) || exit 1;");
1201 ss.WriteLine();
1202 ss.WriteLine("uninstall-local:");
1203 ss.WriteLine(" echo \"$(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS)\"; \\");
1204 ss.WriteLine(" $(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS) || exit 1;");
1205 ss.WriteLine();
1206 }
1207 ss.WriteLine("CLEANFILES = $(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".mdb $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".pdb " + project.AssemblyName + ".xml");
1208 ss.WriteLine("EXTRA_DIST = \\");
1209 ss.Write(" $(FILES)");
1210 foreach (ConfigurationNode conf in project.Configurations)
1211 {
1212 if (conf.Options.KeyFile != "")
1213 {
1214 ss.Write(" \\");
1215 ss.WriteLine("\t" + conf.Options.KeyFile);
1216 }
1217 break;
1218 }
1219 }
1220 m_Kernel.CurrentWorkingDirectory.Pop();
1221 }
1222 bool hasLibrary = false;
1223
1224 private void WriteCombineOld(SolutionNode solution)
1225 {
1226
1227 /* TODO: These vars should be pulled from the prebuild.xml file */
1228 string releaseVersion = "2.0.0";
1229 string assemblyVersion = "2.1.0.0";
1230 string description =
1231 "Tao Framework " + solution.Name + " Binding For .NET";
1232
1233 hasLibrary = false;
1234 m_Kernel.Log.Write("Creating Autotools make files");
1235 foreach (ProjectNode project in solution.Projects)
1236 {
1237 if (m_Kernel.AllowProject(project.FilterGroups))
1238 {
1239 m_Kernel.Log.Write("...Creating makefile: {0}", project.Name);
1240 WriteProject(solution, project);
1241 }
1242 }
1243
1244 m_Kernel.Log.Write("");
1245 string combFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am");
1246 StreamWriter ss = new StreamWriter(combFile);
1247 ss.NewLine = "\n";
1248
1249 m_Kernel.CurrentWorkingDirectory.Push();
1250 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
1251
1252 using (ss)
1253 {
1254 foreach (ProjectNode project in solution.ProjectsTableOrder)
1255 {
1256 if (project.Type == ProjectType.Library)
1257 {
1258 hasLibrary = true;
1259 break;
1260 }
1261 }
1262
1263 if (hasLibrary)
1264 {
1265 ss.Write("pkgconfig_in_files = ");
1266 foreach (ProjectNode project in solution.ProjectsTableOrder)
1267 {
1268 if (project.Type == ProjectType.Library)
1269 {
1270 string combFilepc = Helper.MakeFilePath(solution.FullPath, project.Name, "pc.in");
1271 ss.Write(" " + project.Name + ".pc.in ");
1272 StreamWriter sspc = new StreamWriter(combFilepc);
1273 sspc.NewLine = "\n";
1274 using (sspc)
1275 {
1276 sspc.WriteLine("prefix=@prefix@");
1277 sspc.WriteLine("exec_prefix=${prefix}");
1278 sspc.WriteLine("libdir=${exec_prefix}/lib");
1279 sspc.WriteLine();
1280 sspc.WriteLine("Name: @PACKAGE_NAME@");
1281 sspc.WriteLine("Description: @DESCRIPTION@");
1282 sspc.WriteLine("Version: @ASSEMBLY_VERSION@");
1283 sspc.WriteLine("Libs: -r:${libdir}/mono/gac/@PACKAGE_NAME@/@ASSEMBLY_VERSION@__@PUBKEY@/@PACKAGE_NAME@.dll");
1284 }
1285 }
1286 }
1287
1288 ss.WriteLine();
1289 ss.WriteLine("pkgconfigdir=$(prefix)/lib/pkgconfig");
1290 ss.WriteLine("pkgconfig_DATA=$(pkgconfig_in_files:.pc.in=.pc)");
1291 }
1292 ss.WriteLine();
1293 foreach (ProjectNode project in solution.ProjectsTableOrder)
1294 {
1295 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
1296 ss.WriteLine("-include x {0}",
1297 Helper.NormalizePath(Helper.MakeFilePath(path, "Include", "am"), '/'));
1298 }
1299 ss.WriteLine();
1300 ss.WriteLine("all: \\");
1301 ss.Write("\t");
1302 foreach (ProjectNode project in solution.ProjectsTableOrder)
1303 {
1304 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
1305 ss.Write(Helper.AssemblyFullName(project.AssemblyName, project.Type) + " ");
1306
1307 }
1308 ss.WriteLine();
1309 if (hasLibrary)
1310 {
1311 ss.WriteLine("EXTRA_DIST = \\");
1312 ss.WriteLine("\t$(pkgconfig_in_files)");
1313 }
1314 else
1315 {
1316 ss.WriteLine("EXTRA_DIST = ");
1317 }
1318 ss.WriteLine();
1319 ss.WriteLine("DISTCLEANFILES = \\");
1320 ss.WriteLine("\tconfigure \\");
1321 ss.WriteLine("\tMakefile.in \\");
1322 ss.WriteLine("\taclocal.m4");
1323 }
1324 combFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac");
1325 StreamWriter ts = new StreamWriter(combFile);
1326 ts.NewLine = "\n";
1327 using (ts)
1328 {
1329 if (this.hasLibrary)
1330 {
1331 foreach (ProjectNode project in solution.ProjectsTableOrder)
1332 {
1333 if (project.Type == ProjectType.Library)
1334 {
1335 ts.WriteLine("AC_INIT(" + project.Name + ".pc.in)");
1336 break;
1337 }
1338 }
1339 }
1340 else
1341 {
1342 ts.WriteLine("AC_INIT(Makefile.am)");
1343 }
1344 ts.WriteLine("AC_PREREQ(2.53)");
1345 ts.WriteLine("AC_CANONICAL_SYSTEM");
1346
1347 ts.WriteLine("PACKAGE_NAME={0}", solution.Name);
1348 ts.WriteLine("PACKAGE_VERSION={0}", releaseVersion);
1349 ts.WriteLine("DESCRIPTION=\"{0}\"", description);
1350 ts.WriteLine("AC_SUBST(DESCRIPTION)");
1351 ts.WriteLine("AM_INIT_AUTOMAKE([$PACKAGE_NAME],[$PACKAGE_VERSION],[$DESCRIPTION])");
1352
1353 ts.WriteLine("ASSEMBLY_VERSION={0}", assemblyVersion);
1354 ts.WriteLine("AC_SUBST(ASSEMBLY_VERSION)");
1355
1356 ts.WriteLine("PUBKEY=`sn -t $PACKAGE_NAME.snk | grep 'Public Key Token' | awk -F: '{print $2}' | sed -e 's/^ //'`");
1357 ts.WriteLine("AC_SUBST(PUBKEY)");
1358
1359 ts.WriteLine();
1360 ts.WriteLine("AM_MAINTAINER_MODE");
1361 ts.WriteLine();
1362 ts.WriteLine("dnl AC_PROG_INTLTOOL([0.25])");
1363 ts.WriteLine();
1364 ts.WriteLine("AC_PROG_INSTALL");
1365 ts.WriteLine();
1366 ts.WriteLine("MONO_REQUIRED_VERSION=1.1");
1367 ts.WriteLine();
1368 ts.WriteLine("AC_MSG_CHECKING([whether we're compiling from CVS])");
1369 ts.WriteLine("if test -f \"$srcdir/.cvs_version\" ; then");
1370 ts.WriteLine(" from_cvs=yes");
1371 ts.WriteLine("else");
1372 ts.WriteLine(" if test -f \"$srcdir/.svn\" ; then");
1373 ts.WriteLine(" from_cvs=yes");
1374 ts.WriteLine(" else");
1375 ts.WriteLine(" from_cvs=no");
1376 ts.WriteLine(" fi");
1377 ts.WriteLine("fi");
1378 ts.WriteLine();
1379 ts.WriteLine("AC_MSG_RESULT($from_cvs)");
1380 ts.WriteLine();
1381 ts.WriteLine("AC_PATH_PROG(MONO, mono)");
1382 ts.WriteLine("AC_PATH_PROG(GMCS, gmcs)");
1383 ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil)");
1384 ts.WriteLine();
1385 ts.WriteLine("AC_MSG_CHECKING([for mono])");
1386 ts.WriteLine("dnl if test \"x$MONO\" = \"x\" ; then");
1387 ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"mono\" in your PATH])");
1388 ts.WriteLine("dnl else");
1389 ts.WriteLine(" AC_MSG_RESULT([found])");
1390 ts.WriteLine("dnl fi");
1391 ts.WriteLine();
1392 ts.WriteLine("AC_MSG_CHECKING([for gmcs])");
1393 ts.WriteLine("dnl if test \"x$GMCS\" = \"x\" ; then");
1394 ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"gmcs\" in your PATH])");
1395 ts.WriteLine("dnl else");
1396 ts.WriteLine(" AC_MSG_RESULT([found])");
1397 ts.WriteLine("dnl fi");
1398 ts.WriteLine();
1399 //ts.WriteLine("AC_MSG_CHECKING([for gacutil])");
1400 //ts.WriteLine("if test \"x$GACUTIL\" = \"x\" ; then");
1401 //ts.WriteLine(" AC_MSG_ERROR([Can't find \"gacutil\" in your PATH])");
1402 //ts.WriteLine("else");
1403 //ts.WriteLine(" AC_MSG_RESULT([found])");
1404 //ts.WriteLine("fi");
1405 ts.WriteLine();
1406 ts.WriteLine("AC_SUBST(PATH)");
1407 ts.WriteLine("AC_SUBST(LD_LIBRARY_PATH)");
1408 ts.WriteLine();
1409 ts.WriteLine("dnl CSFLAGS=\"-debug -nowarn:1574\"");
1410 ts.WriteLine("CSFLAGS=\"\"");
1411 ts.WriteLine("AC_SUBST(CSFLAGS)");
1412 ts.WriteLine();
1413 // ts.WriteLine("AC_MSG_CHECKING(--disable-sdl argument)");
1414 // ts.WriteLine("AC_ARG_ENABLE(sdl,");
1415 // ts.WriteLine(" [ --disable-sdl Disable Sdl interface.],");
1416 // ts.WriteLine(" [disable_sdl=$disableval],");
1417 // ts.WriteLine(" [disable_sdl=\"no\"])");
1418 // ts.WriteLine("AC_MSG_RESULT($disable_sdl)");
1419 // ts.WriteLine("if test \"$disable_sdl\" = \"yes\"; then");
1420 // ts.WriteLine(" AC_DEFINE(FEAT_SDL)");
1421 // ts.WriteLine("fi");
1422 ts.WriteLine();
1423 ts.WriteLine("dnl Find pkg-config");
1424 ts.WriteLine("AC_PATH_PROG(PKGCONFIG, pkg-config, no)");
1425 ts.WriteLine("if test \"x$PKG_CONFIG\" = \"xno\"; then");
1426 ts.WriteLine(" AC_MSG_ERROR([You need to install pkg-config])");
1427 ts.WriteLine("fi");
1428 ts.WriteLine();
1429 ts.WriteLine("PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)");
1430 ts.WriteLine("BUILD_DIR=\"bin\"");
1431 ts.WriteLine("AC_SUBST(BUILD_DIR)");
1432 ts.WriteLine("CONFIG=\"Release\"");
1433 ts.WriteLine("AC_SUBST(CONFIG)");
1434 ts.WriteLine();
1435 ts.WriteLine("if test \"x$has_mono\" = \"xtrue\"; then");
1436 ts.WriteLine(" AC_PATH_PROG(RUNTIME, mono, no)");
1437 ts.WriteLine(" AC_PATH_PROG(CSC, gmcs, no)");
1438 ts.WriteLine(" if test `uname -s` = \"Darwin\"; then");
1439 ts.WriteLine(" LIB_PREFIX=");
1440 ts.WriteLine(" LIB_SUFFIX=.dylib");
1441 ts.WriteLine(" else");
1442 ts.WriteLine(" LIB_PREFIX=.so");
1443 ts.WriteLine(" LIB_SUFFIX=");
1444 ts.WriteLine(" fi");
1445 ts.WriteLine("else");
1446 ts.WriteLine(" AC_PATH_PROG(CSC, csc.exe, no)");
1447 ts.WriteLine(" if test x$CSC = \"xno\"; then");
1448 ts.WriteLine(" AC_MSG_ERROR([You need to install either mono or .Net])");
1449 ts.WriteLine(" else");
1450 ts.WriteLine(" RUNTIME=");
1451 ts.WriteLine(" LIB_PREFIX=");
1452 ts.WriteLine(" LIB_SUFFIX=.dylib");
1453 ts.WriteLine(" fi");
1454 ts.WriteLine("fi");
1455 ts.WriteLine();
1456 ts.WriteLine("AC_SUBST(LIB_PREFIX)");
1457 ts.WriteLine("AC_SUBST(LIB_SUFFIX)");
1458 ts.WriteLine();
1459 ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_CFLAGS)");
1460 ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_LIBS)");
1461 ts.WriteLine();
1462 ts.WriteLine("dnl Find monodoc");
1463 ts.WriteLine("MONODOC_REQUIRED_VERSION=1.0");
1464 ts.WriteLine("AC_SUBST(MONODOC_REQUIRED_VERSION)");
1465 ts.WriteLine("PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no)");
1466 ts.WriteLine();
1467 ts.WriteLine("if test \"x$enable_monodoc\" = \"xyes\"; then");
1468 ts.WriteLine(" AC_PATH_PROG(MONODOC, monodoc, no)");
1469 ts.WriteLine(" if test x$MONODOC = xno; then");
1470 ts.WriteLine(" enable_monodoc=no");
1471 ts.WriteLine(" fi");
1472 ts.WriteLine("else");
1473 ts.WriteLine(" MONODOC=");
1474 ts.WriteLine("fi");
1475 ts.WriteLine();
1476 ts.WriteLine("AC_SUBST(MONODOC)");
1477 ts.WriteLine("AM_CONDITIONAL(ENABLE_MONODOC, test \"x$enable_monodoc\" = \"xyes\")");
1478 ts.WriteLine();
1479 ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil, no)");
1480 ts.WriteLine("if test \"x$GACUTIL\" = \"xno\" ; then");
1481 ts.WriteLine(" AC_MSG_ERROR([No gacutil tool found])");
1482 ts.WriteLine("fi");
1483 ts.WriteLine();
1484 // foreach(ProjectNode project in solution.ProjectsTableOrder)
1485 // {
1486 // if (project.Type == ProjectType.Library)
1487 // {
1488 // }
1489 // }
1490 ts.WriteLine("GACUTIL_FLAGS='/package $(PACKAGE_NAME) /gacdir $(DESTDIR)$(prefix)'");
1491 ts.WriteLine("AC_SUBST(GACUTIL_FLAGS)");
1492 ts.WriteLine();
1493 ts.WriteLine("winbuild=no");
1494 ts.WriteLine("case \"$host\" in");
1495 ts.WriteLine(" *-*-mingw*|*-*-cygwin*)");
1496 ts.WriteLine(" winbuild=yes");
1497 ts.WriteLine(" ;;");
1498 ts.WriteLine("esac");
1499 ts.WriteLine("AM_CONDITIONAL(WINBUILD, test x$winbuild = xyes)");
1500 ts.WriteLine();
1501 // ts.WriteLine("dnl Check for SDL");
1502 // ts.WriteLine();
1503 // ts.WriteLine("AC_PATH_PROG([SDL_CONFIG], [sdl-config])");
1504 // ts.WriteLine("have_sdl=no");
1505 // ts.WriteLine("if test -n \"${SDL_CONFIG}\"; then");
1506 // ts.WriteLine(" have_sdl=yes");
1507 // ts.WriteLine(" SDL_CFLAGS=`$SDL_CONFIG --cflags`");
1508 // ts.WriteLine(" SDL_LIBS=`$SDL_CONFIG --libs`");
1509 // ts.WriteLine(" #");
1510 // ts.WriteLine(" # sdl-config sometimes emits an rpath flag pointing at its library");
1511 // ts.WriteLine(" # installation directory. We don't want this, as it prevents users from");
1512 // ts.WriteLine(" # linking sdl-viewer against, for example, a locally compiled libGL when a");
1513 // ts.WriteLine(" # version of the library also exists in SDL's library installation");
1514 // ts.WriteLine(" # directory, typically /usr/lib.");
1515 // ts.WriteLine(" #");
1516 // ts.WriteLine(" SDL_LIBS=`echo $SDL_LIBS | sed 's/-Wl,-rpath,[[^ ]]* //'`");
1517 // ts.WriteLine("fi");
1518 // ts.WriteLine("AC_SUBST([SDL_CFLAGS])");
1519 // ts.WriteLine("AC_SUBST([SDL_LIBS])");
1520 ts.WriteLine();
1521 ts.WriteLine("AC_OUTPUT([");
1522 ts.WriteLine("Makefile");
1523 // TODO: this does not work quite right.
1524 //ts.WriteLine("Properties/AssemblyInfo.cs");
1525 foreach (ProjectNode project in solution.ProjectsTableOrder)
1526 {
1527 if (project.Type == ProjectType.Library)
1528 {
1529 ts.WriteLine(project.Name + ".pc");
1530 }
1531 // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
1532 // ts.WriteLine(Helper.NormalizePath(Helper.MakeFilePath(path, "Include"),'/'));
1533 }
1534 ts.WriteLine("])");
1535 ts.WriteLine();
1536 ts.WriteLine("#po/Makefile.in");
1537 ts.WriteLine();
1538 ts.WriteLine("echo \"---\"");
1539 ts.WriteLine("echo \"Configuration summary\"");
1540 ts.WriteLine("echo \"\"");
1541 ts.WriteLine("echo \" * Installation prefix: $prefix\"");
1542 ts.WriteLine("echo \" * compiler: $CSC\"");
1543 ts.WriteLine("echo \" * Documentation: $enable_monodoc ($MONODOC)\"");
1544 ts.WriteLine("echo \" * Package Name: $PACKAGE_NAME\"");
1545 ts.WriteLine("echo \" * Version: $PACKAGE_VERSION\"");
1546 ts.WriteLine("echo \" * Public Key: $PUBKEY\"");
1547 ts.WriteLine("echo \"\"");
1548 ts.WriteLine("echo \"---\"");
1549 ts.WriteLine();
1550 }
1551
1552 ts.NewLine = "\n";
1553 foreach (ProjectNode project in solution.ProjectsTableOrder)
1554 {
1555 if (project.GenerateAssemblyInfoFile)
1556 {
1557 GenerateAssemblyInfoFile(solution, combFile);
1558 }
1559 }
1560 }
1561
1562 private static void GenerateAssemblyInfoFile(SolutionNode solution, string combFile)
1563 {
1564 System.IO.Directory.CreateDirectory(Helper.MakePathRelativeTo(solution.FullPath, "Properties"));
1565 combFile = Helper.MakeFilePath(solution.FullPath + "/Properties/", "AssemblyInfo.cs", "in");
1566 StreamWriter ai = new StreamWriter(combFile);
1567
1568 using (ai)
1569 {
1570 ai.WriteLine("#region License");
1571 ai.WriteLine("/*");
1572 ai.WriteLine("MIT License");
1573 ai.WriteLine("Copyright (c)2003-2006 Tao Framework Team");
1574 ai.WriteLine("http://www.taoframework.com");
1575 ai.WriteLine("All rights reserved.");
1576 ai.WriteLine("");
1577 ai.WriteLine("Permission is hereby granted, free of charge, to any person obtaining a copy");
1578 ai.WriteLine("of this software and associated documentation files (the \"Software\"), to deal");
1579 ai.WriteLine("in the Software without restriction, including without limitation the rights");
1580 ai.WriteLine("to use, copy, modify, merge, publish, distribute, sublicense, and/or sell");
1581 ai.WriteLine("copies of the Software, and to permit persons to whom the Software is");
1582 ai.WriteLine("furnished to do so, subject to the following conditions:");
1583 ai.WriteLine("");
1584 ai.WriteLine("The above copyright notice and this permission notice shall be included in all");
1585 ai.WriteLine("copies or substantial portions of the Software.");
1586 ai.WriteLine("");
1587 ai.WriteLine("THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR");
1588 ai.WriteLine("IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,");
1589 ai.WriteLine("FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE");
1590 ai.WriteLine("AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER");
1591 ai.WriteLine("LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,");
1592 ai.WriteLine("OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE");
1593 ai.WriteLine("SOFTWARE.");
1594 ai.WriteLine("*/");
1595 ai.WriteLine("#endregion License");
1596 ai.WriteLine("");
1597 ai.WriteLine("using System;");
1598 ai.WriteLine("using System.Reflection;");
1599 ai.WriteLine("using System.Runtime.InteropServices;");
1600 ai.WriteLine("using System.Security;");
1601 ai.WriteLine("using System.Security.Permissions;");
1602 ai.WriteLine("");
1603 ai.WriteLine("[assembly: AllowPartiallyTrustedCallers]");
1604 ai.WriteLine("[assembly: AssemblyCompany(\"Tao Framework -- http://www.taoframework.com\")]");
1605 ai.WriteLine("[assembly: AssemblyConfiguration(\"Retail\")]");
1606 ai.WriteLine("[assembly: AssemblyCopyright(\"Copyright (c)2003-2006 Tao Framework Team. All rights reserved.\")]");
1607 ai.WriteLine("[assembly: AssemblyCulture(\"\")]");
1608 ai.WriteLine("[assembly: AssemblyDefaultAlias(\"@PACKAGE_NAME@\")]");
1609 ai.WriteLine("[assembly: AssemblyDelaySign(false)]");
1610 ai.WriteLine("[assembly: AssemblyDescription(\"@DESCRIPTION@\")]");
1611 ai.WriteLine("[assembly: AssemblyFileVersion(\"@ASSEMBLY_VERSION@\")]");
1612 ai.WriteLine("[assembly: AssemblyInformationalVersion(\"@ASSEMBLY_VERSION@\")]");
1613 ai.WriteLine("[assembly: AssemblyKeyName(\"\")]");
1614 ai.WriteLine("[assembly: AssemblyProduct(\"@PACKAGE_NAME@.dll\")]");
1615 ai.WriteLine("[assembly: AssemblyTitle(\"@DESCRIPTION@\")]");
1616 ai.WriteLine("[assembly: AssemblyTrademark(\"Tao Framework -- http://www.taoframework.com\")]");
1617 ai.WriteLine("[assembly: AssemblyVersion(\"@ASSEMBLY_VERSION@\")]");
1618 ai.WriteLine("[assembly: CLSCompliant(true)]");
1619 ai.WriteLine("[assembly: ComVisible(false)]");
1620 ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.Execution)]");
1621 ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.SkipVerification)]");
1622 ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.UnmanagedCode)]");
1623
1624 }
1625 //return combFile;
1626 }
1627
1628 private void CleanProject(ProjectNode project) 917 private void CleanProject(ProjectNode project)
1629 { 918 {
1630 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); 919 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
@@ -1677,7 +966,7 @@ namespace Prebuild.Core.Targets
1677 m_Kernel.Log.Write("Parsing system pkg-config files"); 966 m_Kernel.Log.Write("Parsing system pkg-config files");
1678 RunInitialization(); 967 RunInitialization();
1679 968
1680 string streamName = "autotools.xml"; 969 const string streamName = "autotools.xml";
1681 string fqStreamName = String.Format("Prebuild.data.{0}", 970 string fqStreamName = String.Format("Prebuild.data.{0}",
1682 streamName 971 streamName
1683 ); 972 );
@@ -1727,10 +1016,9 @@ namespace Prebuild.Core.Targets
1727 1016
1728 string pwd = Directory.GetCurrentDirectory(); 1017 string pwd = Directory.GetCurrentDirectory();
1729 //string pwd = System.Environment.GetEnvironmentVariable("PWD"); 1018 //string pwd = System.Environment.GetEnvironmentVariable("PWD");
1730 string rootDir = "";
1731 //if (pwd.Length != 0) 1019 //if (pwd.Length != 0)
1732 //{ 1020 //{
1733 rootDir = Path.Combine(pwd, "autotools"); 1021 string rootDir = Path.Combine(pwd, "autotools");
1734 //} 1022 //}
1735 //else 1023 //else
1736 //{ 1024 //{
diff --git a/Prebuild/src/Core/Targets/DebugTarget.cs b/Prebuild/src/Core/Targets/DebugTarget.cs
index dc4e666..650007e 100644
--- a/Prebuild/src/Core/Targets/DebugTarget.cs
+++ b/Prebuild/src/Core/Targets/DebugTarget.cs
@@ -27,7 +27,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
27/* 27/*
28 * $Source$ 28 * $Source$
29 * $Author: jendave $ 29 * $Author: jendave $
30 * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $ 30 * $Date: 2006-09-20 08:42:51 +0100 (Wed, 20 Sep 2006) $
31 * $Revision: 164 $ 31 * $Revision: 164 $
32 */ 32 */
33#endregion 33#endregion
diff --git a/Prebuild/src/Core/Targets/MakefileTarget.cs b/Prebuild/src/Core/Targets/MakefileTarget.cs
index 86676d0..54046dd 100644
--- a/Prebuild/src/Core/Targets/MakefileTarget.cs
+++ b/Prebuild/src/Core/Targets/MakefileTarget.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.IO; 27using System.IO;
30using System.Text.RegularExpressions; 28using System.Text.RegularExpressions;
31 29
@@ -110,7 +108,7 @@ namespace Prebuild.Core.Targets
110 { 108 {
111 string path; 109 string path;
112 // Project references change with configurations. 110 // Project references change with configurations.
113 if (solution.ProjectsTable.Contains(refr.Name)) 111 if (solution.ProjectsTable.ContainsKey(refr.Name))
114 continue; 112 continue;
115 path = FindFileReference(refr.Name, project); 113 path = FindFileReference(refr.Name, project);
116 if (path != null) 114 if (path != null)
@@ -220,7 +218,7 @@ namespace Prebuild.Core.Targets
220 } 218 }
221 // Dependencies on other projects. 219 // Dependencies on other projects.
222 foreach (ReferenceNode refr in project.References) 220 foreach (ReferenceNode refr in project.References)
223 if (solution.ProjectsTable.Contains(refr.Name)) 221 if (solution.ProjectsTable.ContainsKey(refr.Name))
224 { 222 {
225 ProjectNode refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; 223 ProjectNode refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
226 if (ProjectClashes(refProj)) 224 if (ProjectClashes(refProj))
@@ -256,7 +254,7 @@ namespace Prebuild.Core.Targets
256 // Build references to other projects. Now that sux. 254 // Build references to other projects. Now that sux.
257 // We have to reference the other project in the same conf. 255 // We have to reference the other project in the same conf.
258 foreach (ReferenceNode refr in project.References) 256 foreach (ReferenceNode refr in project.References)
259 if (solution.ProjectsTable.Contains(refr.Name)) 257 if (solution.ProjectsTable.ContainsKey(refr.Name))
260 { 258 {
261 ProjectNode refProj; 259 ProjectNode refProj;
262 refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; 260 refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
@@ -274,7 +272,7 @@ namespace Prebuild.Core.Targets
274 { 272 {
275 string outPath, srcPath, destPath; 273 string outPath, srcPath, destPath;
276 outPath = Helper.NormalizePath((string)conf.Options["OutputPath"]); 274 outPath = Helper.NormalizePath((string)conf.Options["OutputPath"]);
277 if (solution.ProjectsTable.Contains(refr.Name)) 275 if (solution.ProjectsTable.ContainsKey(refr.Name))
278 { 276 {
279 ProjectNode refProj; 277 ProjectNode refProj;
280 refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; 278 refProj = (ProjectNode)solution.ProjectsTable[refr.Name];
diff --git a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
index c8401fd..ea6d2c2 100644
--- a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
+++ b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.IO; 27using System.IO;
30using System.Reflection; 28using System.Reflection;
31using System.Text.RegularExpressions; 29using System.Text.RegularExpressions;
@@ -274,7 +272,11 @@ namespace Prebuild.Core.Targets
274 ss.WriteLine(" <Contents>"); 272 ss.WriteLine(" <Contents>");
275 foreach(string file in project.Files) 273 foreach(string file in project.Files)
276 { 274 {
277 string buildAction = "Compile"; 275 string buildAction;
276 string dependson = "";
277 string resource_id = "";
278 string copyToOutput = "";
279
278 switch(project.Files.GetBuildAction(file)) 280 switch(project.Files.GetBuildAction(file))
279 { 281 {
280 case BuildAction.None: 282 case BuildAction.None:
@@ -294,9 +296,58 @@ namespace Prebuild.Core.Targets
294 break; 296 break;
295 } 297 }
296 298
299 if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never)
300 buildAction = "FileCopy";
301
297 // Sort of a hack, we try and resolve the path and make it relative, if we can. 302 // Sort of a hack, we try and resolve the path and make it relative, if we can.
298 string filePath = PrependPath(file); 303 string extension = Path.GetExtension(file);
299 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\" dependson=\"\" data=\"\" />", filePath, buildAction); 304 string designer_format = string.Format(".Designer{0}", extension);
305
306 if (file.EndsWith(designer_format))
307 {
308 string basename = file.Substring(0, file.LastIndexOf(designer_format));
309 string[] extensions = new string[] { ".cs", ".resx", ".settings" };
310
311 foreach(string ext in extensions)
312 {
313 if (project.Files.Contains(basename + ext))
314 {
315 dependson = string.Format(" dependson=\"{0}{1}\"", basename, ext);
316 break;
317 }
318 }
319 }
320 if (extension == ".resx")
321 {
322 buildAction = "EmbedAsResource";
323 string basename = file.Substring(0, file.LastIndexOf(".resx"));
324
325 // Visual Studio type resx + form dependency
326 if (project.Files.Contains(basename + ".cs"))
327 {
328 dependson = string.Format(" dependson=\"{0}{1}\"", basename, ".cs");
329 }
330
331 // We need to specify a resources file name to avoid MissingManifestResourceExceptions
332 // in libraries that are built.
333 resource_id = string.Format(" resource_id=\"{0}.{1}.resources\"",
334 project.AssemblyName, basename.Replace("/", "."));
335 }
336
337 switch(project.Files.GetCopyToOutput(file))
338 {
339 case CopyToOutput.Always:
340 copyToOutput = string.Format(" copyToOutputDirectory=\"Always\"");
341 break;
342 case CopyToOutput.PreserveNewest:
343 copyToOutput = string.Format(" copyToOutputDirectory=\"PreserveNewest\"");
344 break;
345 }
346
347 // Sort of a hack, we try and resolve the path and make it relative, if we can.
348 string filePath = PrependPath(file);
349 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\"{2}{3}{4} />",
350 filePath, buildAction, dependson, resource_id, copyToOutput);
300 } 351 }
301 ss.WriteLine(" </Contents>"); 352 ss.WriteLine(" </Contents>");
302 353
diff --git a/Prebuild/src/Core/Targets/NAntTarget.cs b/Prebuild/src/Core/Targets/NAntTarget.cs
index 9a6ee17..d4a33f8 100644
--- a/Prebuild/src/Core/Targets/NAntTarget.cs
+++ b/Prebuild/src/Core/Targets/NAntTarget.cs
@@ -36,10 +36,8 @@ POSSIBILITY OF SUCH DAMAGE.
36#endregion 36#endregion
37 37
38using System; 38using System;
39using System.Collections; 39using System.Collections.Generic;
40using System.Collections.Specialized;
41using System.IO; 40using System.IO;
42using System.Reflection;
43using System.Text.RegularExpressions; 41using System.Text.RegularExpressions;
44 42
45using Prebuild.Core.Attributes; 43using Prebuild.Core.Attributes;
@@ -255,9 +253,12 @@ namespace Prebuild.Core.Targets
255 ss.WriteLine(" {0}", "</fileset>"); 253 ss.WriteLine(" {0}", "</fileset>");
256 ss.WriteLine(" {0}", "</copy>"); 254 ss.WriteLine(" {0}", "</copy>");
257 255
258 ss.Write(" <csc"); 256 ss.Write(" <csc ");
259 ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower()); 257 ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
260 ss.Write(" debug=\"{0}\"", "${build.debug}"); 258 ss.Write(" debug=\"{0}\"", "${build.debug}");
259 ss.Write(" platform=\"${build.platform}\"");
260
261
261 foreach (ConfigurationNode conf in project.Configurations) 262 foreach (ConfigurationNode conf in project.Configurations)
262 { 263 {
263 if (conf.Options.KeyFile != "") 264 if (conf.Options.KeyFile != "")
@@ -311,7 +312,12 @@ namespace Prebuild.Core.Targets
311 { 312 {
312 ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/')); 313 ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/'));
313 } 314 }
314 ss.WriteLine(">"); 315 // This disables a very different behavior between VS and NAnt. With Nant,
316 // If you have using System.Xml; it will ensure System.Xml.dll is referenced,
317 // but not in VS. This will force the behaviors to match, so when it works
318 // in nant, it will work in VS.
319 ss.Write(" noconfig=\"true\"");
320 ss.WriteLine(">");
315 ss.WriteLine(" <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace); 321 ss.WriteLine(" <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
316 foreach (string file in project.Files) 322 foreach (string file in project.Files)
317 { 323 {
@@ -357,7 +363,20 @@ namespace Prebuild.Core.Targets
357 foreach (ReferenceNode refr in project.References) 363 foreach (ReferenceNode refr in project.References)
358 { 364 {
359 string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/'); 365 string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/');
360 ss.WriteLine(" <include name=\"" + path + "\" />"); 366 if (refr.Path != null) {
367 if (ExtensionSpecified(refr.Name))
368 {
369 ss.WriteLine (" <include name=\"" + path + refr.Name + "\"/>");
370 }
371 else
372 {
373 ss.WriteLine (" <include name=\"" + path + refr.Name + ".dll\"/>");
374 }
375 }
376 else
377 {
378 ss.WriteLine (" <include name=\"" + path + "\" />");
379 }
361 } 380 }
362 ss.WriteLine(" </references>"); 381 ss.WriteLine(" </references>");
363 382
@@ -490,15 +509,32 @@ namespace Prebuild.Core.Targets
490 ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />"); 509 ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />");
491 ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />"); 510 ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
492 511
493 // actually use active config out of prebuild.xml 512 // Use the active configuration, which is the first configuration name in the prebuild file.
494 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", solution.ActiveConfig); 513 Dictionary<string,string> emittedConfigurations = new Dictionary<string, string>();
514
515 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", solution.ActiveConfig);
516 ss.WriteLine();
495 517
496 foreach (ConfigurationNode conf in solution.Configurations) 518 foreach (ConfigurationNode conf in solution.Configurations)
497 { 519 {
498 ss.WriteLine(); 520 // If the name isn't in the emitted configurations, we give a high level target to the
499 ss.WriteLine(" <target name=\"{0}\" description=\"\">", conf.Name); 521 // platform specific on. This lets "Debug" point to "Debug-AnyCPU".
522 if (!emittedConfigurations.ContainsKey(conf.Name))
523 {
524 // Add it to the dictionary so we only emit one.
525 emittedConfigurations.Add(conf.Name, conf.Platform);
526
527 // Write out the target block.
528 ss.WriteLine(" <target name=\"{0}\" description=\"{0}|{1}\" depends=\"{0}-{1}\">", conf.Name, conf.Platform);
529 ss.WriteLine(" </target>");
530 ss.WriteLine();
531 }
532
533 // Write out the target for the configuration.
534 ss.WriteLine(" <target name=\"{0}-{1}\" description=\"{0}|{1}\">", conf.Name, conf.Platform);
500 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name); 535 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
501 ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower()); 536 ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
537 ss.WriteLine("\t\t <property name=\"build.platform\" value=\"{0}\" />", conf.Platform);
502 ss.WriteLine(" </target>"); 538 ss.WriteLine(" </target>");
503 ss.WriteLine(); 539 ss.WriteLine();
504 } 540 }
@@ -559,19 +595,19 @@ namespace Prebuild.Core.Targets
559 if (item is DirectoryInfo) { } 595 if (item is DirectoryInfo) { }
560 else if (item is FileInfo) 596 else if (item is FileInfo)
561 { 597 {
562 if (re.Match(((FileInfo)item).FullName) != 598 if (re.Match(item.FullName) !=
563 System.Text.RegularExpressions.Match.Empty) 599 System.Text.RegularExpressions.Match.Empty)
564 { 600 {
565 Console.WriteLine("Including file: " + ((FileInfo)item).FullName); 601 Console.WriteLine("Including file: " + item.FullName);
566 602
567 using (FileStream fs = new FileStream(((FileInfo)item).FullName, 603 using (FileStream fs = new FileStream(item.FullName,
568 FileMode.Open, 604 FileMode.Open,
569 FileAccess.Read, 605 FileAccess.Read,
570 FileShare.None)) 606 FileShare.None))
571 { 607 {
572 using (StreamReader sr = new StreamReader(fs)) 608 using (StreamReader sr = new StreamReader(fs))
573 { 609 {
574 ss.WriteLine("<!-- included from {0} -->", ((FileInfo)item).FullName); 610 ss.WriteLine("<!-- included from {0} -->", (item).FullName);
575 while (sr.Peek() != -1) 611 while (sr.Peek() != -1)
576 { 612 {
577 ss.WriteLine(sr.ReadLine()); 613 ss.WriteLine(sr.ReadLine());
@@ -601,6 +637,10 @@ namespace Prebuild.Core.Targets
601 ss.WriteLine(" <target name=\"clean\" description=\"\">"); 637 ss.WriteLine(" <target name=\"clean\" description=\"\">");
602 ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />"); 638 ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />");
603 //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />"); 639 //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />");
640
641 // justincc: FIXME FIXME FIXME - A temporary OpenSim hack to clean up files when "nant clean" is executed.
642 // Should be replaced with extreme prejudice once anybody finds out if the CleanFiles stuff works or there is
643 // another working mechanism for specifying this stuff
604 ss.WriteLine(" <delete failonerror=\"false\">"); 644 ss.WriteLine(" <delete failonerror=\"false\">");
605 ss.WriteLine(" <fileset basedir=\"${bin.dir}\">"); 645 ss.WriteLine(" <fileset basedir=\"${bin.dir}\">");
606 ss.WriteLine(" <include name=\"OpenSim*.dll\"/>"); 646 ss.WriteLine(" <include name=\"OpenSim*.dll\"/>");
@@ -611,7 +651,21 @@ namespace Prebuild.Core.Targets
611 ss.WriteLine(" <exclude name=\"ScriptEngines/Default.lsl\"/>"); 651 ss.WriteLine(" <exclude name=\"ScriptEngines/Default.lsl\"/>");
612 ss.WriteLine(" </fileset>"); 652 ss.WriteLine(" </fileset>");
613 ss.WriteLine(" </delete>"); 653 ss.WriteLine(" </delete>");
614 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />"); 654
655 if (solution.Cleanup != null && solution.Cleanup.CleanFiles.Count > 0)
656 {
657 foreach (CleanFilesNode cleanFile in solution.Cleanup.CleanFiles)
658 {
659 ss.WriteLine(" <delete failonerror=\"false\">");
660 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
661 ss.WriteLine(" <include name=\"{0}/*\"/>", cleanFile.Pattern);
662 ss.WriteLine(" <include name=\"{0}\"/>", cleanFile.Pattern);
663 ss.WriteLine(" </fileset>");
664 ss.WriteLine(" </delete>");
665 }
666 }
667
668 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
615 foreach (ProjectNode project in solution.Projects) 669 foreach (ProjectNode project in solution.Projects)
616 { 670 {
617 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); 671 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
diff --git a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
index cf7ce02..8e32050 100644
--- a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
+++ b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
@@ -24,11 +24,8 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.IO; 27using System.IO;
30using System.Text.RegularExpressions; 28using System.Text.RegularExpressions;
31using System.Reflection;
32 29
33using Prebuild.Core.Attributes; 30using Prebuild.Core.Attributes;
34using Prebuild.Core.Interfaces; 31using Prebuild.Core.Interfaces;
diff --git a/Prebuild/src/Core/Targets/VS2003Target.cs b/Prebuild/src/Core/Targets/VS2003Target.cs
index 1bcb7dc..10e2dc4 100644
--- a/Prebuild/src/Core/Targets/VS2003Target.cs
+++ b/Prebuild/src/Core/Targets/VS2003Target.cs
@@ -24,8 +24,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections; 27using System.Collections.Generic;
28using System.Collections.Specialized;
29using System.IO; 28using System.IO;
30 29
31using Prebuild.Core.Attributes; 30using Prebuild.Core.Attributes;
@@ -47,7 +46,7 @@ namespace Prebuild.Core.Targets
47 string versionName = "2003"; 46 string versionName = "2003";
48 VSVersion version = VSVersion.VS71; 47 VSVersion version = VSVersion.VS71;
49 48
50 Hashtable m_Tools; 49 readonly Dictionary<string, ToolInfo> m_Tools = new Dictionary<string, ToolInfo>();
51 Kernel m_Kernel; 50 Kernel m_Kernel;
52 51
53 /// <summary> 52 /// <summary>
@@ -58,11 +57,11 @@ namespace Prebuild.Core.Targets
58 { 57 {
59 get 58 get
60 { 59 {
61 return this.solutionVersion; 60 return solutionVersion;
62 } 61 }
63 set 62 set
64 { 63 {
65 this.solutionVersion = value; 64 solutionVersion = value;
66 } 65 }
67 } 66 }
68 /// <summary> 67 /// <summary>
@@ -73,11 +72,11 @@ namespace Prebuild.Core.Targets
73 { 72 {
74 get 73 get
75 { 74 {
76 return this.productVersion; 75 return productVersion;
77 } 76 }
78 set 77 set
79 { 78 {
80 this.productVersion = value; 79 productVersion = value;
81 } 80 }
82 } 81 }
83 /// <summary> 82 /// <summary>
@@ -88,11 +87,11 @@ namespace Prebuild.Core.Targets
88 { 87 {
89 get 88 get
90 { 89 {
91 return this.schemaVersion; 90 return schemaVersion;
92 } 91 }
93 set 92 set
94 { 93 {
95 this.schemaVersion = value; 94 schemaVersion = value;
96 } 95 }
97 } 96 }
98 /// <summary> 97 /// <summary>
@@ -103,11 +102,11 @@ namespace Prebuild.Core.Targets
103 { 102 {
104 get 103 get
105 { 104 {
106 return this.versionName; 105 return versionName;
107 } 106 }
108 set 107 set
109 { 108 {
110 this.versionName = value; 109 versionName = value;
111 } 110 }
112 } 111 }
113 /// <summary> 112 /// <summary>
@@ -118,11 +117,11 @@ namespace Prebuild.Core.Targets
118 { 117 {
119 get 118 get
120 { 119 {
121 return this.version; 120 return version;
122 } 121 }
123 set 122 set
124 { 123 {
125 this.version = value; 124 version = value;
126 } 125 }
127 } 126 }
128 127
@@ -135,8 +134,6 @@ namespace Prebuild.Core.Targets
135 /// </summary> 134 /// </summary>
136 public VS2003Target() 135 public VS2003Target()
137 { 136 {
138 m_Tools = new Hashtable();
139
140 m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP"); 137 m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP");
141 m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic"); 138 m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic");
142 } 139 }
@@ -178,23 +175,20 @@ namespace Prebuild.Core.Targets
178 throw new UnknownLanguageException("Unknown .NET language: " + project.Language); 175 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
179 } 176 }
180 177
181 ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language]; 178 ToolInfo toolInfo = m_Tools[project.Language];
182 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); 179 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
183 StreamWriter ps = new StreamWriter(projectFile); 180 StreamWriter ps = new StreamWriter(projectFile);
184 181
185 m_Kernel.CurrentWorkingDirectory.Push(); 182 m_Kernel.CurrentWorkingDirectory.Push();
186 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile)); 183 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
187 184
188 IEnumerator enumerator;
189 //ConfigurationNode scripts;
190
191 using(ps) 185 using(ps)
192 { 186 {
193 ps.WriteLine("<VisualStudioProject>"); 187 ps.WriteLine("<VisualStudioProject>");
194 ps.WriteLine(" <{0}", toolInfo.XmlTag); 188 ps.WriteLine(" <{0}", toolInfo.XmlTag);
195 ps.WriteLine("\t\t\t\tProjectType = \"Local\""); 189 ps.WriteLine("\t\t\t\tProjectType = \"Local\"");
196 ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", this.ProductVersion); 190 ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", ProductVersion);
197 ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", this.SchemaVersion); 191 ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", SchemaVersion);
198 ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper()); 192 ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper());
199 ps.WriteLine("\t\t>"); 193 ps.WriteLine("\t\t>");
200 194
@@ -209,16 +203,13 @@ namespace Prebuild.Core.Targets
209 ps.WriteLine("\t\t\t\t DefaultTargetSchema = \"IE50\""); 203 ps.WriteLine("\t\t\t\t DefaultTargetSchema = \"IE50\"");
210 ps.WriteLine("\t\t\t\t DelaySign = \"false\""); 204 ps.WriteLine("\t\t\t\t DelaySign = \"false\"");
211 205
212 if(this.Version == VSVersion.VS70) 206 if(Version == VSVersion.VS70)
213 { 207 {
214 ps.WriteLine("\t\t\t\t NoStandardLibraries = \"false\""); 208 ps.WriteLine("\t\t\t\t NoStandardLibraries = \"false\"");
215 } 209 }
216 210
217 ps.WriteLine("\t\t\t\t OutputType = \"{0}\"", project.Type.ToString()); 211 ps.WriteLine("\t\t\t\t OutputType = \"{0}\"", project.Type);
218 212
219 enumerator = project.Configurations.GetEnumerator();
220 enumerator.Reset();
221 enumerator.MoveNext();
222 foreach(ConfigurationNode conf in project.Configurations) 213 foreach(ConfigurationNode conf in project.Configurations)
223 { 214 {
224 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0) 215 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
@@ -266,7 +257,7 @@ namespace Prebuild.Core.Targets
266 ps.WriteLine("\t\t\t\t FileAlignment = \"{0}\"", conf.Options["FileAlignment"]); 257 ps.WriteLine("\t\t\t\t FileAlignment = \"{0}\"", conf.Options["FileAlignment"]);
267 ps.WriteLine("\t\t\t\t IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"].ToString().ToLower()); 258 ps.WriteLine("\t\t\t\t IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"].ToString().ToLower());
268 259
269 if(this.Version == VSVersion.VS71) 260 if(Version == VSVersion.VS71)
270 { 261 {
271 ps.WriteLine("\t\t\t\t NoStdLib = \"{0}\"", conf.Options["NoStdLib"].ToString().ToLower()); 262 ps.WriteLine("\t\t\t\t NoStdLib = \"{0}\"", conf.Options["NoStdLib"].ToString().ToLower());
272 ps.WriteLine("\t\t\t\t NoWarn = \"{0}\"", conf.Options["SuppressWarnings"].ToString().ToLower()); 263 ps.WriteLine("\t\t\t\t NoWarn = \"{0}\"", conf.Options["SuppressWarnings"].ToString().ToLower());
@@ -293,9 +284,9 @@ namespace Prebuild.Core.Targets
293 284
294 if(solution.ProjectsTable.ContainsKey(refr.Name)) 285 if(solution.ProjectsTable.ContainsKey(refr.Name))
295 { 286 {
296 ProjectNode refProject = (ProjectNode)solution.ProjectsTable[refr.Name]; 287 ProjectNode refProject = solution.ProjectsTable[refr.Name];
297 ps.WriteLine(" Project = \"{{{0}}}\"", refProject.Guid.ToString().ToUpper()); 288 ps.WriteLine(" Project = \"{{{0}}}\"", refProject.Guid.ToString().ToUpper());
298 ps.WriteLine(" Package = \"{0}\"", toolInfo.Guid.ToString().ToUpper()); 289 ps.WriteLine(" Package = \"{0}\"", toolInfo.Guid.ToUpper());
299 } 290 }
300 else 291 else
301 { 292 {
@@ -409,7 +400,7 @@ namespace Prebuild.Core.Targets
409 400
410 private void WriteSolution(SolutionNode solution) 401 private void WriteSolution(SolutionNode solution)
411 { 402 {
412 m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", this.VersionName); 403 m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", VersionName);
413 404
414 foreach(ProjectNode project in solution.Projects) 405 foreach(ProjectNode project in solution.Projects)
415 { 406 {
@@ -429,7 +420,7 @@ namespace Prebuild.Core.Targets
429 420
430 using(ss) 421 using(ss)
431 { 422 {
432 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", this.SolutionVersion); 423 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
433 foreach(ProjectNode project in solution.Projects) 424 foreach(ProjectNode project in solution.Projects)
434 { 425 {
435 if(!m_Tools.ContainsKey(project.Language)) 426 if(!m_Tools.ContainsKey(project.Language))
@@ -437,7 +428,7 @@ namespace Prebuild.Core.Targets
437 throw new UnknownLanguageException("Unknown .NET language: " + project.Language); 428 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
438 } 429 }
439 430
440 ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language]; 431 ToolInfo toolInfo = m_Tools[project.Language];
441 432
442 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); 433 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
443 ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"", 434 ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"",
@@ -464,10 +455,10 @@ namespace Prebuild.Core.Targets
464 { 455 {
465 for(int i = 0; i < project.References.Count; i++) 456 for(int i = 0; i < project.References.Count; i++)
466 { 457 {
467 ReferenceNode refr = (ReferenceNode)project.References[i]; 458 ReferenceNode refr = project.References[i];
468 if(solution.ProjectsTable.ContainsKey(refr.Name)) 459 if(solution.ProjectsTable.ContainsKey(refr.Name))
469 { 460 {
470 ProjectNode refProject = (ProjectNode)solution.ProjectsTable[refr.Name]; 461 ProjectNode refProject = solution.ProjectsTable[refr.Name];
471 ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})", 462 ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})",
472 project.Guid.ToString().ToUpper() 463 project.Guid.ToString().ToUpper()
473 , i, 464 , i,
@@ -519,7 +510,7 @@ namespace Prebuild.Core.Targets
519 { 510 {
520 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); 511 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
521 512
522 ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language]; 513 ToolInfo toolInfo = m_Tools[project.Language];
523 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); 514 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
524 string userFile = projectFile + ".user"; 515 string userFile = projectFile + ".user";
525 516
@@ -529,7 +520,7 @@ namespace Prebuild.Core.Targets
529 520
530 private void CleanSolution(SolutionNode solution) 521 private void CleanSolution(SolutionNode solution)
531 { 522 {
532 m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", this.VersionName, solution.Name); 523 m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", VersionName, solution.Name);
533 524
534 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln"); 525 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
535 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo"); 526 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
diff --git a/Prebuild/src/Core/Targets/VS2005Target.cs b/Prebuild/src/Core/Targets/VS2005Target.cs
index 63461c9..9c70e26 100644
--- a/Prebuild/src/Core/Targets/VS2005Target.cs
+++ b/Prebuild/src/Core/Targets/VS2005Target.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.IO; 27using System.IO;
30using System.Text; 28using System.Text;
31 29
diff --git a/Prebuild/src/Core/Targets/VS2008Target.cs b/Prebuild/src/Core/Targets/VS2008Target.cs
index e685962..fee4f7f 100644
--- a/Prebuild/src/Core/Targets/VS2008Target.cs
+++ b/Prebuild/src/Core/Targets/VS2008Target.cs
@@ -1,6 +1,4 @@
1using System; 1using System;
2using System.Collections;
3using System.Collections.Specialized;
4using System.IO; 2using System.IO;
5using System.Text; 3using System.Text;
6 4
@@ -27,9 +25,6 @@ namespace Prebuild.Core.Targets
27 string name = "vs2008"; 25 string name = "vs2008";
28 VSVersion version = VSVersion.VS90; 26 VSVersion version = VSVersion.VS90;
29 27
30 Hashtable tools;
31 Kernel kernel;
32
33 /// <summary> 28 /// <summary>
34 /// Gets or sets the solution version. 29 /// Gets or sets the solution version.
35 /// </summary> 30 /// </summary>
@@ -120,7 +115,7 @@ namespace Prebuild.Core.Targets
120 #region Constructors 115 #region Constructors
121 116
122 /// <summary> 117 /// <summary>
123 /// Initializes a new instance of the <see cref="VS2008Target"/> class. 118 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
124 /// </summary> 119 /// </summary>
125 public VS2008Target() 120 public VS2008Target()
126 : base() 121 : base()
diff --git a/Prebuild/src/Core/Targets/VS2010Target.cs b/Prebuild/src/Core/Targets/VS2010Target.cs
index 8772d18..b16120c 100644
--- a/Prebuild/src/Core/Targets/VS2010Target.cs
+++ b/Prebuild/src/Core/Targets/VS2010Target.cs
@@ -1,6 +1,4 @@
1using System; 1using System;
2using System.Collections;
3using System.Collections.Specialized;
4using System.IO; 2using System.IO;
5using System.Text; 3using System.Text;
6 4
@@ -13,98 +11,104 @@ using System.CodeDom.Compiler;
13namespace Prebuild.Core.Targets 11namespace Prebuild.Core.Targets
14{ 12{
15 13
16 /// <summary> 14 /// <summary>
17 /// 15 ///
18 /// </summary> 16 /// </summary>
19 [Target("vs2010")] 17 [Target("vs2010")]
20 public class VS2010Target : VSGenericTarget 18 public class VS2010Target : VSGenericTarget
21 { 19 {
22 #region Fields 20 #region Fields
23 string solutionVersion = "11.00"; 21
24 string productVersion = "9.0.21022"; 22 string solutionVersion = "11.00";
25 string schemaVersion = "2.0"; 23 string productVersion = "9.0.30729";
26 string versionName = "Visual Studio 2010"; 24 string schemaVersion = "2.0";
27 string name = "vs2008"; 25 string versionName = "Visual Studio 2010";
28 VSVersion version = VSVersion.VS10; 26 string name = "vs2010";
27 VSVersion version = VSVersion.VS10;
29 28
30 Hashtable tools; 29 #endregion
31 Kernel kernel; 30
32 31 #region Properties
33 /// <summary> 32
34 /// Gets or sets the solution version. 33 /// <summary>
35 /// </summary> 34 /// Gets or sets the solution version.
36 /// <value>The solution version.</value> 35 /// </summary>
37 public override string SolutionVersion 36 /// <value>The solution version.</value>
38 { 37 public override string SolutionVersion
39 get 38 {
40 { 39 get
41 return solutionVersion; 40 {
42 } 41 return solutionVersion;
43 } 42 }
44 /// <summary> 43 }
45 /// Gets or sets the product version. 44
46 /// </summary> 45 /// <summary>
47 /// <value>The product version.</value> 46 /// Gets or sets the product version.
48 public override string ProductVersion 47 /// </summary>
49 { 48 /// <value>The product version.</value>
50 get 49 public override string ProductVersion
51 { 50 {
52 return productVersion; 51 get
53 } 52 {
54 } 53 return productVersion;
55 /// <summary> 54 }
56 /// Gets or sets the schema version. 55 }
57 /// </summary> 56
58 /// <value>The schema version.</value> 57 /// <summary>
59 public override string SchemaVersion 58 /// Gets or sets the schema version.
60 { 59 /// </summary>
61 get 60 /// <value>The schema version.</value>
62 { 61 public override string SchemaVersion
63 return schemaVersion; 62 {
64 } 63 get
65 } 64 {
66 /// <summary> 65 return schemaVersion;
67 /// Gets or sets the name of the version. 66 }
68 /// </summary> 67 }
69 /// <value>The name of the version.</value> 68
70 public override string VersionName 69 /// <summary>
71 { 70 /// Gets or sets the name of the version.
72 get 71 /// </summary>
73 { 72 /// <value>The name of the version.</value>
74 return versionName; 73 public override string VersionName
75 } 74 {
76 } 75 get
77 /// <summary> 76 {
78 /// Gets or sets the version. 77 return versionName;
79 /// </summary> 78 }
80 /// <value>The version.</value> 79 }
81 public override VSVersion Version 80
82 { 81 /// <summary>
83 get 82 /// Gets or sets the version.
84 { 83 /// </summary>
85 return version; 84 /// <value>The version.</value>
86 } 85 public override VSVersion Version
87 } 86 {
88 /// <summary> 87 get
89 /// Gets the name. 88 {
90 /// </summary> 89 return version;
91 /// <value>The name.</value> 90 }
92 public override string Name 91 }
93 { 92
94 get 93 /// <summary>
95 { 94 /// Gets the name.
96 return name; 95 /// </summary>
97 } 96 /// <value>The name.</value>
98 } 97 public override string Name
98 {
99 get
100 {
101 return name;
102 }
103 }
99 104
100 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion) 105 protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
101 { 106 {
102 switch (frameworkVersion) 107 switch (frameworkVersion)
103 { 108 {
104 case FrameworkVersion.v4_0: 109 case FrameworkVersion.v4_0:
105 return "ToolsVersion=\"4.0\"";
106 case FrameworkVersion.v3_5: 110 case FrameworkVersion.v3_5:
107 return "ToolsVersion=\"3.5\""; 111 return "ToolsVersion=\"4.0\"";
108 case FrameworkVersion.v3_0: 112 case FrameworkVersion.v3_0:
109 return "ToolsVersion=\"3.0\""; 113 return "ToolsVersion=\"3.0\"";
110 default: 114 default:
@@ -117,18 +121,18 @@ namespace Prebuild.Core.Targets
117 get { return "# Visual Studio 2010"; } 121 get { return "# Visual Studio 2010"; }
118 } 122 }
119 123
120 #endregion 124 #endregion
121 125
122 #region Constructors 126 #region Constructors
123 127
124 /// <summary> 128 /// <summary>
125 /// Initializes a new instance of the <see cref="VS2010Target"/> class. 129 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
126 /// </summary> 130 /// </summary>
127 public VS2010Target() 131 public VS2010Target()
128 : base() 132 : base()
129 { 133 {
130 } 134 }
131 135
132 #endregion 136 #endregion
133 } 137 }
134} 138}
diff --git a/Prebuild/src/Core/Targets/VSGenericTarget.cs b/Prebuild/src/Core/Targets/VSGenericTarget.cs
index fdcc2b9..cd3f5bb 100644
--- a/Prebuild/src/Core/Targets/VSGenericTarget.cs
+++ b/Prebuild/src/Core/Targets/VSGenericTarget.cs
@@ -5,32 +5,27 @@ Copyright (c) 2008 Matthew Holmes (matthew@wildfiregames.com), John Anderson (so
5Redistribution and use in source and binary forms, with or without modification, are permitted 5Redistribution and use in source and binary forms, with or without modification, are permitted
6provided that the following conditions are met: 6provided that the following conditions are met:
7 7
8* Redistributions of source code must retain the above copyright notice, this list of conditions 8 * Redistributions of source code must retain the above copyright notice, this list of conditions
9 and the following disclaimer. 9 and the following disclaimer.
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 10 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
11 and the following disclaimer in the documentation and/or other materials provided with the 11 and the following disclaimer in the documentation and/or other materials provided with the
12 distribution. 12 distribution.
13* The name of the author may not be used to endorse or promote products derived from this software 13 * The name of the author may not be used to endorse or promote products derived from this software
14 without specific prior written permission. 14 without specific prior written permission.
15 15
16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 16THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 21OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23*/ 23 */
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Generic; 27using System.Collections.Generic;
29using System.Collections.Specialized;
30using System.IO; 28using System.IO;
31using System.Text;
32
33using Prebuild.Core.Attributes;
34using Prebuild.Core.Interfaces; 29using Prebuild.Core.Interfaces;
35using Prebuild.Core.Nodes; 30using Prebuild.Core.Nodes;
36using Prebuild.Core.Utilities; 31using Prebuild.Core.Utilities;
@@ -46,59 +41,59 @@ namespace Prebuild.Core.Targets
46 { 41 {
47 #region Fields 42 #region Fields
48 43
49 readonly Hashtable tools = new Hashtable(); 44 readonly Dictionary<string, ToolInfo> tools = new Dictionary<string, ToolInfo>();
50 Kernel kernel; 45 Kernel kernel;
51 #endregion 46 #endregion
52 47
53 #region Properties 48 #region Properties
54 /// <summary> 49 /// <summary>
55 /// Gets or sets the solution version. 50 /// Gets or sets the solution version.
56 /// </summary> 51 /// </summary>
57 /// <value>The solution version.</value> 52 /// <value>The solution version.</value>
58 public abstract string SolutionVersion { get; } 53 public abstract string SolutionVersion { get; }
59 /// <summary> 54 /// <summary>
60 /// Gets or sets the product version. 55 /// Gets or sets the product version.
61 /// </summary> 56 /// </summary>
62 /// <value>The product version.</value> 57 /// <value>The product version.</value>
63 public abstract string ProductVersion { get; } 58 public abstract string ProductVersion { get; }
64 /// <summary> 59 /// <summary>
65 /// Gets or sets the schema version. 60 /// Gets or sets the schema version.
66 /// </summary> 61 /// </summary>
67 /// <value>The schema version.</value> 62 /// <value>The schema version.</value>
68 public abstract string SchemaVersion { get; } 63 public abstract string SchemaVersion { get; }
69 /// <summary> 64 /// <summary>
70 /// Gets or sets the name of the version. 65 /// Gets or sets the name of the version.
71 /// </summary> 66 /// </summary>
72 /// <value>The name of the version.</value> 67 /// <value>The name of the version.</value>
73 public abstract string VersionName { get; } 68 public abstract string VersionName { get; }
74 /// <summary> 69 /// <summary>
75 /// Gets or sets the version. 70 /// Gets or sets the version.
76 /// </summary> 71 /// </summary>
77 /// <value>The version.</value> 72 /// <value>The version.</value>
78 public abstract VSVersion Version { get; } 73 public abstract VSVersion Version { get; }
79 /// <summary> 74 /// <summary>
80 /// Gets the name. 75 /// Gets the name.
81 /// </summary> 76 /// </summary>
82 /// <value>The name.</value> 77 /// <value>The name.</value>
83 public abstract string Name { get; } 78 public abstract string Name { get; }
84 79
85 protected abstract string GetToolsVersionXml(FrameworkVersion version); 80 protected abstract string GetToolsVersionXml(FrameworkVersion version);
86 public abstract string SolutionTag { get; } 81 public abstract string SolutionTag { get; }
87 82
88 #endregion 83 #endregion
89 84
90 #region Constructors 85 #region Constructors
91 86
92 /// <summary> 87 /// <summary>
93 /// Initializes a new instance of the <see cref="VSGenericTarget"/> class. 88 /// Initializes a new instance of the <see cref="VSGenericTarget"/> class.
94 /// </summary> 89 /// </summary>
95 protected VSGenericTarget() 90 protected VSGenericTarget()
96 { 91 {
97 this.tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets"); 92 tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets");
98 this.tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN"); 93 tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN");
99 this.tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets"); 94 tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets");
100 this.tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets"); 95 tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets");
101 this.tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null); 96 tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null);
102 } 97 }
103 98
104 #endregion 99 #endregion
@@ -124,7 +119,7 @@ namespace Prebuild.Core.Targets
124 } 119 }
125 catch (ArgumentException) 120 catch (ArgumentException)
126 { 121 {
127 this.kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path); 122 kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
128 } 123 }
129 } 124 }
130 125
@@ -144,7 +139,7 @@ namespace Prebuild.Core.Targets
144 private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution) 139 private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution)
145 { 140 {
146 if (solution.ProjectsTable.ContainsKey(name)) 141 if (solution.ProjectsTable.ContainsKey(name))
147 return (ProjectNode)solution.ProjectsTable[name]; 142 return solution.ProjectsTable[name];
148 143
149 foreach (SolutionNode child in solution.Solutions) 144 foreach (SolutionNode child in solution.Solutions)
150 { 145 {
@@ -163,7 +158,7 @@ namespace Prebuild.Core.Targets
163 throw new UnknownLanguageException("Unknown .NET language: " + project.Language); 158 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
164 } 159 }
165 160
166 ToolInfo toolInfo = (ToolInfo)tools[project.Language]; 161 ToolInfo toolInfo = tools[project.Language];
167 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); 162 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
168 StreamWriter ps = new StreamWriter(projectFile); 163 StreamWriter ps = new StreamWriter(projectFile);
169 164
@@ -173,83 +168,83 @@ namespace Prebuild.Core.Targets
173 #region Project File 168 #region Project File
174 using (ps) 169 using (ps)
175 { 170 {
176 ps.WriteLine("<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"{0}\">", this.Version == VSVersion.VS10 ? "4.0" : "3.5"); 171 ps.WriteLine("<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" {0}>", GetToolsVersionXml(project.FrameworkVersion));
177 ps.WriteLine(" <PropertyGroup>"); 172 ps.WriteLine(" <PropertyGroup>");
178 ps.WriteLine(" <ProjectType>Local</ProjectType>"); 173 ps.WriteLine(" <ProjectType>Local</ProjectType>");
179 ps.WriteLine(" <ProductVersion>{0}</ProductVersion>", this.ProductVersion); 174 ps.WriteLine(" <ProductVersion>{0}</ProductVersion>", ProductVersion);
180 ps.WriteLine(" <SchemaVersion>{0}</SchemaVersion>", this.SchemaVersion); 175 ps.WriteLine(" <SchemaVersion>{0}</SchemaVersion>", SchemaVersion);
181 ps.WriteLine(" <ProjectGuid>{{{0}}}</ProjectGuid>", project.Guid.ToString().ToUpper()); 176 ps.WriteLine(" <ProjectGuid>{{{0}}}</ProjectGuid>", project.Guid.ToString().ToUpper());
182 177
183 // Visual Studio has a hard coded guid for the project type 178 // Visual Studio has a hard coded guid for the project type
184 if (project.Type == ProjectType.Web) 179 if (project.Type == ProjectType.Web)
185 ps.WriteLine(" <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>"); 180 ps.WriteLine(" <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>");
186 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>"); 181 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
187 ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>"); 182 ps.WriteLine(" <ApplicationIcon>{0}</ApplicationIcon>", project.AppIcon);
188 ps.WriteLine(" <ApplicationIcon>{0}</ApplicationIcon>", project.AppIcon); 183 ps.WriteLine(" <AssemblyKeyContainerName>");
189 ps.WriteLine(" <AssemblyKeyContainerName>"); 184 ps.WriteLine(" </AssemblyKeyContainerName>");
190 ps.WriteLine(" </AssemblyKeyContainerName>"); 185 ps.WriteLine(" <AssemblyName>{0}</AssemblyName>", project.AssemblyName);
191 ps.WriteLine(" <AssemblyName>{0}</AssemblyName>", project.AssemblyName);
192 foreach (ConfigurationNode conf in project.Configurations) 186 foreach (ConfigurationNode conf in project.Configurations)
193 { 187 {
194 if (conf.Options.KeyFile != "") 188 if (conf.Options.KeyFile != "")
195 { 189 {
196 ps.WriteLine(" <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>", conf.Options.KeyFile); 190 ps.WriteLine(" <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>", conf.Options.KeyFile);
197 ps.WriteLine(" <SignAssembly>true</SignAssembly>"); 191 ps.WriteLine(" <SignAssembly>true</SignAssembly>");
198 break; 192 break;
199 } 193 }
200 } 194 }
201 ps.WriteLine(" <DefaultClientScript>JScript</DefaultClientScript>"); 195 ps.WriteLine(" <DefaultClientScript>JScript</DefaultClientScript>");
202 ps.WriteLine(" <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>"); 196 ps.WriteLine(" <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>");
203 ps.WriteLine(" <DefaultTargetSchema>IE50</DefaultTargetSchema>"); 197 ps.WriteLine(" <DefaultTargetSchema>IE50</DefaultTargetSchema>");
204 ps.WriteLine(" <DelaySign>false</DelaySign>"); 198 ps.WriteLine(" <DelaySign>false</DelaySign>");
205 ps.WriteLine(" <TargetFrameworkVersion>{0}</TargetFrameworkVersion>", project.FrameworkVersion.ToString().Replace("_", ".")); 199 ps.WriteLine(" <TargetFrameworkVersion>{0}</TargetFrameworkVersion>", project.FrameworkVersion.ToString().Replace("_", "."));
206 200
207 ps.WriteLine(" <OutputType>{0}</OutputType>", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString()); 201 ps.WriteLine(" <OutputType>{0}</OutputType>", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString());
208 ps.WriteLine(" <AppDesignerFolder>{0}</AppDesignerFolder>", project.DesignerFolder); 202 ps.WriteLine(" <AppDesignerFolder>{0}</AppDesignerFolder>", project.DesignerFolder);
209 ps.WriteLine(" <RootNamespace>{0}</RootNamespace>", project.RootNamespace); 203 ps.WriteLine(" <RootNamespace>{0}</RootNamespace>", project.RootNamespace);
210 ps.WriteLine(" <StartupObject>{0}</StartupObject>", project.StartupObject); 204 ps.WriteLine(" <StartupObject>{0}</StartupObject>", project.StartupObject);
211 if (string.IsNullOrEmpty(project.DebugStartParameters)) 205 if (string.IsNullOrEmpty(project.DebugStartParameters))
212 { 206 {
213 ps.WriteLine(" <StartArguments>{0}</StartArguments>", project.DebugStartParameters); 207 ps.WriteLine(" <StartArguments>{0}</StartArguments>", project.DebugStartParameters);
214 } 208 }
215 ps.WriteLine(" <FileUpgradeFlags>"); 209 ps.WriteLine(" <FileUpgradeFlags>");
216 ps.WriteLine(" </FileUpgradeFlags>"); 210 ps.WriteLine(" </FileUpgradeFlags>");
217 211
218 ps.WriteLine(" </PropertyGroup>"); 212 ps.WriteLine(" </PropertyGroup>");
219 213
220 foreach (ConfigurationNode conf in project.Configurations) 214 foreach (ConfigurationNode conf in project.Configurations)
221 { 215 {
222 ps.Write(" <PropertyGroup "); 216 ps.Write(" <PropertyGroup ");
223 ps.WriteLine("Condition=\" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' \">", conf.Name); 217 ps.WriteLine("Condition=\" '$(Configuration)|$(Platform)' == '{0}|{1}' \">", conf.Name, conf.Platform);
224 ps.WriteLine(" <AllowUnsafeBlocks>{0}</AllowUnsafeBlocks>", conf.Options["AllowUnsafe"]); 218 ps.WriteLine(" <AllowUnsafeBlocks>{0}</AllowUnsafeBlocks>", conf.Options["AllowUnsafe"]);
225 ps.WriteLine(" <BaseAddress>{0}</BaseAddress>", conf.Options["BaseAddress"]); 219 ps.WriteLine(" <BaseAddress>{0}</BaseAddress>", conf.Options["BaseAddress"]);
226 ps.WriteLine(" <CheckForOverflowUnderflow>{0}</CheckForOverflowUnderflow>", conf.Options["CheckUnderflowOverflow"]); 220 ps.WriteLine(" <CheckForOverflowUnderflow>{0}</CheckForOverflowUnderflow>", conf.Options["CheckUnderflowOverflow"]);
227 ps.WriteLine(" <ConfigurationOverrideFile>"); 221 ps.WriteLine(" <ConfigurationOverrideFile>");
228 ps.WriteLine(" </ConfigurationOverrideFile>"); 222 ps.WriteLine(" </ConfigurationOverrideFile>");
229 ps.WriteLine(" <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]); 223 ps.WriteLine(" <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]);
230 ps.WriteLine(" <DocumentationFile>{0}</DocumentationFile>", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString())); 224 ps.WriteLine(" <DocumentationFile>{0}</DocumentationFile>", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString()));
231 ps.WriteLine(" <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]); 225 ps.WriteLine(" <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]);
232 ps.WriteLine(" <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]); 226 ps.WriteLine(" <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]);
233 ps.WriteLine(" <Optimize>{0}</Optimize>", conf.Options["OptimizeCode"]); 227 ps.WriteLine(" <Optimize>{0}</Optimize>", conf.Options["OptimizeCode"]);
234 if (project.Type != ProjectType.Web) 228 if (project.Type != ProjectType.Web)
235 ps.WriteLine(" <OutputPath>{0}</OutputPath>", 229 ps.WriteLine(" <OutputPath>{0}</OutputPath>",
236 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString()))); 230 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
237 else 231 else
238 ps.WriteLine(" <OutputPath>{0}</OutputPath>", 232 ps.WriteLine(" <OutputPath>{0}</OutputPath>",
239 Helper.EndPath(Helper.NormalizePath("bin\\"))); 233 Helper.EndPath(Helper.NormalizePath("bin\\")));
240 234
241 ps.WriteLine(" <RegisterForComInterop>{0}</RegisterForComInterop>", conf.Options["RegisterComInterop"]); 235 ps.WriteLine(" <RegisterForComInterop>{0}</RegisterForComInterop>", conf.Options["RegisterComInterop"]);
242 ps.WriteLine(" <RemoveIntegerChecks>{0}</RemoveIntegerChecks>", conf.Options["RemoveIntegerChecks"]); 236 ps.WriteLine(" <RemoveIntegerChecks>{0}</RemoveIntegerChecks>", conf.Options["RemoveIntegerChecks"]);
243 ps.WriteLine(" <TreatWarningsAsErrors>{0}</TreatWarningsAsErrors>", conf.Options["WarningsAsErrors"]); 237 ps.WriteLine(" <TreatWarningsAsErrors>{0}</TreatWarningsAsErrors>", conf.Options["WarningsAsErrors"]);
244 ps.WriteLine(" <WarningLevel>{0}</WarningLevel>", conf.Options["WarningLevel"]); 238 ps.WriteLine(" <WarningLevel>{0}</WarningLevel>", conf.Options["WarningLevel"]);
245 ps.WriteLine(" <NoStdLib>{0}</NoStdLib>", conf.Options["NoStdLib"]); 239 ps.WriteLine(" <NoStdLib>{0}</NoStdLib>", conf.Options["NoStdLib"]);
246 ps.WriteLine(" <NoWarn>{0}</NoWarn>", conf.Options["SuppressWarnings"]); 240 ps.WriteLine(" <NoWarn>{0}</NoWarn>", conf.Options["SuppressWarnings"]);
247 ps.WriteLine(" </PropertyGroup>"); 241 ps.WriteLine(" <PlatformTarget>{0}</PlatformTarget>", conf.Platform);
242 ps.WriteLine(" </PropertyGroup>");
248 } 243 }
249 244
250 //ps.WriteLine(" </Settings>"); 245 //ps.WriteLine(" </Settings>");
251 246
252 List<ProjectNode> projectReferences = new List<ProjectNode>(); 247 Dictionary<ReferenceNode, ProjectNode> projectReferences = new Dictionary<ReferenceNode, ProjectNode>();
253 List<ReferenceNode> otherReferences = new List<ReferenceNode>(); 248 List<ReferenceNode> otherReferences = new List<ReferenceNode>();
254 249
255 foreach (ReferenceNode refr in project.References) 250 foreach (ReferenceNode refr in project.References)
@@ -259,57 +254,75 @@ namespace Prebuild.Core.Targets
259 if (projectNode == null) 254 if (projectNode == null)
260 otherReferences.Add(refr); 255 otherReferences.Add(refr);
261 else 256 else
262 projectReferences.Add(projectNode); 257 projectReferences.Add(refr, projectNode);
263 } 258 }
264 // Assembly References 259 // Assembly References
265 ps.WriteLine(" <ItemGroup>"); 260 ps.WriteLine(" <ItemGroup>");
266 261
267 foreach (ReferenceNode refr in otherReferences) 262 foreach (ReferenceNode refr in otherReferences)
268 { 263 {
269 ps.Write(" <Reference"); 264 ps.Write(" <Reference");
270 ps.Write(" Include=\""); 265 ps.Write(" Include=\"");
271 ps.Write(refr.Name); 266 ps.Write(refr.Name);
272 ps.WriteLine("\" >"); 267 ps.WriteLine("\" >");
273 ps.Write(" <Name>"); 268 ps.Write(" <Name>");
274 ps.Write(refr.Name); 269 ps.Write(refr.Name);
275 ps.WriteLine("</Name>"); 270 ps.WriteLine("</Name>");
276 // TODO: Allow reference to *.exe files 271
277 ps.WriteLine(" <Private>{0}</Private>", refr.LocalCopy); 272 if(!String.IsNullOrEmpty(refr.Path))
278 ps.WriteLine(" </Reference>"); 273 {
274 // Use absolute path to assembly (for determining assembly type)
275 string absolutePath = Path.Combine(project.FullPath, refr.Path);
276 if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "exe"))) {
277 // Assembly is an executable (exe)
278 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "exe"));
279 } else if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "dll"))) {
280 // Assembly is an library (dll)
281 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
282 } else {
283 string referencePath = Helper.MakeFilePath(refr.Path, refr.Name, "dll");
284 kernel.Log.Write(LogType.Warning, "Reference \"{0}\": The specified file doesn't exist.", referencePath);
285 ps.WriteLine(" <HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
286 }
287 }
288
289 ps.WriteLine(" <Private>{0}</Private>", refr.LocalCopy);
290 ps.WriteLine(" </Reference>");
279 } 291 }
280 ps.WriteLine(" </ItemGroup>"); 292 ps.WriteLine(" </ItemGroup>");
281 293
282 //Project References 294 //Project References
283 ps.WriteLine(" <ItemGroup>"); 295 ps.WriteLine(" <ItemGroup>");
284 foreach (ProjectNode projectReference in projectReferences) 296 foreach (KeyValuePair<ReferenceNode, ProjectNode> pair in projectReferences)
285 { 297 {
286 ToolInfo tool = (ToolInfo)tools[projectReference.Language]; 298 ToolInfo tool = tools[pair.Value.Language];
287 if (tools == null) 299 if (tools == null)
288 throw new UnknownLanguageException(); 300 throw new UnknownLanguageException();
289 301
290 string path = 302 string path =
291 Helper.MakePathRelativeTo(project.FullPath, 303 Helper.MakePathRelativeTo(project.FullPath,
292 Helper.MakeFilePath(projectReference.FullPath, projectReference.Name, tool.FileExtension)); 304 Helper.MakeFilePath(pair.Value.FullPath, pair.Value.Name, tool.FileExtension));
293 ps.WriteLine(" <ProjectReference Include=\"{0}\">", path); 305 ps.WriteLine(" <ProjectReference Include=\"{0}\">", path);
294 306
295 // TODO: Allow reference to visual basic projects 307 // TODO: Allow reference to visual basic projects
296 ps.WriteLine(" <Name>{0}</Name>", projectReference.Name); 308 ps.WriteLine(" <Name>{0}</Name>", pair.Value.Name);
297 ps.WriteLine(" <Project>{0}</Project>", projectReference.Guid.ToString("B").ToUpper()); 309 ps.WriteLine(" <Project>{0}</Project>", pair.Value.Guid.ToString("B").ToUpper());
298 ps.WriteLine(" <Package>{0}</Package>", tool.Guid.ToUpper()); 310 ps.WriteLine(" <Package>{0}</Package>", tool.Guid.ToUpper());
299 311
300 ps.WriteLine(" <Private>False</Private>" ); 312 //This is the Copy Local flag in VS
313 ps.WriteLine(" <Private>{0}</Private>", pair.Key.LocalCopy);
301 314
302 ps.WriteLine(" </ProjectReference>"); 315 ps.WriteLine(" </ProjectReference>");
303 } 316 }
304 ps.WriteLine(" </ItemGroup>"); 317 ps.WriteLine(" </ItemGroup>");
305 318
306 // ps.WriteLine(" </Build>"); 319 // ps.WriteLine(" </Build>");
307 ps.WriteLine(" <ItemGroup>"); 320 ps.WriteLine(" <ItemGroup>");
308 321
309 // ps.WriteLine(" <Include>"); 322 // ps.WriteLine(" <Include>");
310 List<string> list = new List<string>(); 323 List<string> list = new List<string>();
311 324
312 foreach (string path in project.Files) 325 foreach (string path in project.Files)
313 { 326 {
314 string lower = path.ToLower(); 327 string lower = path.ToLower();
315 if (lower.EndsWith(".resx")) 328 if (lower.EndsWith(".resx"))
@@ -318,93 +331,106 @@ namespace Prebuild.Core.Targets
318 if (!list.Contains(codebehind)) 331 if (!list.Contains(codebehind))
319 list.Add(codebehind); 332 list.Add(codebehind);
320 } 333 }
334
321 } 335 }
322 336
323 foreach (string file in project.Files) 337 foreach (string filePath in project.Files)
324 { 338 {
325 // if (file == "Properties\\Bind.Designer.cs") 339 // if (file == "Properties\\Bind.Designer.cs")
326 // { 340 // {
327 // Console.WriteLine("Wait a minute!"); 341 // Console.WriteLine("Wait a minute!");
328 // Console.WriteLine(project.Files.GetSubType(file).ToString()); 342 // Console.WriteLine(project.Files.GetSubType(file).ToString());
329 // } 343 // }
330 344 SubType subType = project.Files.GetSubType(filePath);
331 SubType subType = project.Files.GetSubType(file); 345
346 // Visual Studio chokes on file names if forward slash is used as a path separator
347 // instead of backslash. So we must make sure that all file paths written to the
348 // project file use \ as a path separator.
349 string file = filePath.Replace(@"/", @"\");
332 350
333 if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer 351 if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer
334 && subType != SubType.CodeBehind) 352 && subType != SubType.CodeBehind)
335 { 353 {
336 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx"); 354 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
337 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file)); 355 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file));
338 ps.WriteLine(" <SubType>Designer</SubType>"); 356 ps.WriteLine(" <SubType>Designer</SubType>");
339 ps.WriteLine(" </EmbeddedResource>"); 357 ps.WriteLine(" </EmbeddedResource>");
340 // 358 //
341 } 359 }
342 360
343 if (subType == SubType.Designer) 361 if (subType == SubType.Designer)
344 { 362 {
345 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file); 363 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file);
346 ps.WriteLine(" <SubType>" + subType + "</SubType>");
347 ps.WriteLine(" <Generator>ResXFileCodeGenerator</Generator>");
348 364
349 string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs"; 365 string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs";
350 string dependent_name = file.Substring(0, file.LastIndexOf('.')) + ".cs"; 366 string dependent_name = filePath.Substring(0, file.LastIndexOf('.')) + ".cs";
351
352 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", autogen_name);
353 367
354 // Check for a parent .cs file with the same name as this designer file 368 // Check for a parent .cs file with the same name as this designer file
355 if (File.Exists(dependent_name)) 369 if (File.Exists(Helper.NormalizePath(dependent_name)))
356 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name)); 370 {
371 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
372 }
373 else
374 {
375 ps.WriteLine(" <Generator>ResXFileCodeGenerator</Generator>");
376 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", Path.GetFileName(autogen_name));
377 ps.WriteLine(" <SubType>" + subType + "</SubType>");
378 }
357 379
358 ps.WriteLine(" </EmbeddedResource>"); 380 ps.WriteLine(" </EmbeddedResource>");
359 if (File.Exists(autogen_name)) 381 if (File.Exists(Helper.NormalizePath(autogen_name)))
360 { 382 {
361 ps.WriteLine(" <Compile Include=\"{0}\">", autogen_name); 383 ps.WriteLine(" <Compile Include=\"{0}\">", autogen_name);
362 ps.WriteLine(" <AutoGen>True</AutoGen>"); 384 //ps.WriteLine(" <DesignTime>True</DesignTime>");
363 ps.WriteLine(" <DesignTime>True</DesignTime>"); 385
364 386 // If a parent .cs file exists, link this autogen file to it. Otherwise link
365 // If a parent .cs file exists, link this autogen file to it. Otherwise link 387 // to the designer file
366 // to the designer file 388 if (File.Exists(dependent_name))
367 if (File.Exists(dependent_name)) 389 {
368 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name)); 390 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
369 else 391 }
370 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file)); 392 else
371 393 {
372 ps.WriteLine(" </Compile>"); 394 ps.WriteLine(" <AutoGen>True</AutoGen>");
395 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(filePath));
396 }
397
398 ps.WriteLine(" </Compile>");
373 } 399 }
374 list.Add(autogen_name); 400 list.Add(autogen_name);
375 } 401 }
376 if (subType == SubType.Settings) 402 if (subType == SubType.Settings)
377 { 403 {
378 ps.Write(" <{0} ", project.Files.GetBuildAction(file)); 404 ps.Write(" <{0} ", project.Files.GetBuildAction(filePath));
379 ps.WriteLine("Include=\"{0}\">", file); 405 ps.WriteLine("Include=\"{0}\">", file);
380 string fileName = Path.GetFileName(file); 406 string fileName = Path.GetFileName(filePath);
381 if (project.Files.GetBuildAction(file) == BuildAction.None) 407 if (project.Files.GetBuildAction(filePath) == BuildAction.None)
382 { 408 {
383 ps.WriteLine(" <Generator>SettingsSingleFileGenerator</Generator>"); 409 ps.WriteLine(" <Generator>SettingsSingleFileGenerator</Generator>");
384 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs"); 410 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
385 } 411 }
386 else 412 else
387 { 413 {
388 ps.WriteLine(" <SubType>Code</SubType>"); 414 ps.WriteLine(" <SubType>Code</SubType>");
389 ps.WriteLine(" <AutoGen>True</AutoGen>"); 415 ps.WriteLine(" <AutoGen>True</AutoGen>");
390 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>"); 416 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>");
391 string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.')); 417 string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.'));
392 string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.')); 418 string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.'));
393 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(fileNameShorter + ".settings")); 419 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(fileNameShorter + ".settings"));
394 } 420 }
395 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(file)); 421 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(filePath));
396 } 422 }
397 else if (subType != SubType.Designer) 423 else if (subType != SubType.Designer)
398 { 424 {
399 string path = Helper.NormalizePath(file); 425 string path = Helper.NormalizePath(file);
400 string path_lower = path.ToLower(); 426 string path_lower = path.ToLower();
401 427
402 if (!list.Contains(file)) 428 if (!list.Contains(filePath))
403 { 429 {
404 ps.Write(" <{0} ", project.Files.GetBuildAction(path)); 430 ps.Write(" <{0} ", project.Files.GetBuildAction(filePath));
405 431
406 int startPos = 0; 432 int startPos = 0;
407 if (project.Files.GetPreservePath(file)) 433 if (project.Files.GetPreservePath(filePath))
408 { 434 {
409 while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1) 435 while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1)
410 startPos++; 436 startPos++;
@@ -415,60 +441,75 @@ namespace Prebuild.Core.Targets
415 startPos = file.LastIndexOf(Path.GetFileName(path)); 441 startPos = file.LastIndexOf(Path.GetFileName(path));
416 } 442 }
417 443
418 ps.WriteLine("Include=\"{0}\">", path); 444 // be sure to write out the path with backslashes so VS recognizes
445 // the file properly.
446 ps.WriteLine("Include=\"{0}\">", file);
419 447
420 int last_period_index = file.LastIndexOf('.'); 448 int last_period_index = file.LastIndexOf('.');
421 string short_file_name = file.Substring(0, last_period_index); 449 string short_file_name = file.Substring(0, last_period_index);
422 string extension = Path.GetExtension(path); 450 string extension = Path.GetExtension(path);
423 string designer_format = string.Format(".designer{0}", extension); 451 // make this upper case, so that when File.Exists tests for the
452 // existence of a designer file on a case-sensitive platform,
453 // it is correctly identified.
454 string designer_format = string.Format(".Designer{0}", extension);
424 455
425 if (path_lower.EndsWith(designer_format)) 456 if (path_lower.EndsWith(designer_format.ToLowerInvariant()))
426 { 457 {
427 int designer_index = path_lower.IndexOf(designer_format); 458 int designer_index = path.IndexOf(designer_format);
428 string file_name = path.Substring(0, designer_index); 459 string file_name = path.Substring(0, designer_index);
429 460
430 if (File.Exists(file_name)) 461 // There are two corrections to the next lines:
431 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name)); 462 // 1. Fix the connection between a designer file and a form
463 // or usercontrol that don't have an associated resx file.
464 // 2. Connect settings files to associated designer files.
465 if (File.Exists(file_name + extension))
466 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + extension));
432 else if (File.Exists(file_name + ".resx")) 467 else if (File.Exists(file_name + ".resx"))
433 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".resx")); 468 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".resx"));
469 else if (File.Exists(file_name + ".settings"))
470 {
471 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".settings"));
472 ps.WriteLine(" <AutoGen>True</AutoGen>");
473 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>");
474 }
434 } 475 }
435 else if (subType == SubType.CodeBehind) 476 else if (subType == SubType.CodeBehind)
436 { 477 {
437 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(short_file_name)); 478 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", Path.GetFileName(short_file_name));
438 } 479 }
439 if (project.Files.GetIsLink(file)) 480 if (project.Files.GetIsLink(filePath))
440 { 481 {
441 string alias = project.Files.GetLinkPath(file); 482 string alias = project.Files.GetLinkPath(filePath);
442 alias += file.Substring(startPos); 483 alias += file.Substring(startPos);
443 alias = Helper.NormalizePath(alias); 484 alias = Helper.NormalizePath(alias);
444 ps.WriteLine(" <Link>{0}</Link>", alias); 485 ps.WriteLine(" <Link>{0}</Link>", alias);
445 } 486 }
446 else if (project.Files.GetBuildAction(file) != BuildAction.None) 487 else if (project.Files.GetBuildAction(filePath) != BuildAction.None)
447 { 488 {
448 if (project.Files.GetBuildAction(file) != BuildAction.EmbeddedResource) 489 if (project.Files.GetBuildAction(filePath) != BuildAction.EmbeddedResource)
449 { 490 {
450 ps.WriteLine(" <SubType>{0}</SubType>", subType); 491 ps.WriteLine(" <SubType>{0}</SubType>", subType);
451 } 492 }
452 } 493 }
453 494
454 if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never) 495 if (project.Files.GetCopyToOutput(filePath) != CopyToOutput.Never)
455 { 496 {
456 ps.WriteLine(" <CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(file)); 497 ps.WriteLine(" <CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(filePath));
457 } 498 }
458 499
459 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(file)); 500 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(filePath));
460 } 501 }
461 } 502 }
462 } 503 }
463 504
464 ps.WriteLine(" </ItemGroup>"); 505 ps.WriteLine(" </ItemGroup>");
465 ps.WriteLine(" <Import Project=\"" + toolInfo.ImportProject + "\" />"); 506 ps.WriteLine(" <Import Project=\"" + toolInfo.ImportProject + "\" />");
466 ps.WriteLine(" <PropertyGroup>"); 507 ps.WriteLine(" <PropertyGroup>");
467 ps.WriteLine(" <PreBuildEvent>"); 508 ps.WriteLine(" <PreBuildEvent>");
468 ps.WriteLine(" </PreBuildEvent>"); 509 ps.WriteLine(" </PreBuildEvent>");
469 ps.WriteLine(" <PostBuildEvent>"); 510 ps.WriteLine(" <PostBuildEvent>");
470 ps.WriteLine(" </PostBuildEvent>"); 511 ps.WriteLine(" </PostBuildEvent>");
471 ps.WriteLine(" </PropertyGroup>"); 512 ps.WriteLine(" </PropertyGroup>");
472 ps.WriteLine("</Project>"); 513 ps.WriteLine("</Project>");
473 } 514 }
474 #endregion 515 #endregion
@@ -478,23 +519,36 @@ namespace Prebuild.Core.Targets
478 ps = new StreamWriter(projectFile + ".user"); 519 ps = new StreamWriter(projectFile + ".user");
479 using (ps) 520 using (ps)
480 { 521 {
522 // Get the first configuration from the project.
523 ConfigurationNode firstConfiguration = null;
524
525 if (project.Configurations.Count > 0)
526 {
527 firstConfiguration = project.Configurations[0];
528 }
529
481 ps.WriteLine("<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">"); 530 ps.WriteLine("<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
482 //ps.WriteLine( "<VisualStudioProject>" ); 531 //ps.WriteLine( "<VisualStudioProject>" );
483 //ps.WriteLine(" <{0}>", toolInfo.XMLTag); 532 //ps.WriteLine(" <{0}>", toolInfo.XMLTag);
484 //ps.WriteLine(" <Build>"); 533 //ps.WriteLine(" <Build>");
485 ps.WriteLine(" <PropertyGroup>"); 534 ps.WriteLine(" <PropertyGroup>");
486 //ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project)); 535 //ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
487 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>"); 536
488 ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>"); 537 if (firstConfiguration != null)
489 ps.WriteLine(" <ReferencePath>{0}</ReferencePath>", MakeRefPath(project)); 538 {
490 ps.WriteLine(" <LastOpenVersion>{0}</LastOpenVersion>", this.ProductVersion); 539 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">{0}</Configuration>", firstConfiguration.Name);
491 ps.WriteLine(" <ProjectView>ProjectFiles</ProjectView>"); 540 ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">{0}</Platform>", firstConfiguration.Platform);
492 ps.WriteLine(" <ProjectTrust>0</ProjectTrust>"); 541 }
493 ps.WriteLine(" </PropertyGroup>"); 542
543 ps.WriteLine(" <ReferencePath>{0}</ReferencePath>", MakeRefPath(project));
544 ps.WriteLine(" <LastOpenVersion>{0}</LastOpenVersion>", ProductVersion);
545 ps.WriteLine(" <ProjectView>ProjectFiles</ProjectView>");
546 ps.WriteLine(" <ProjectTrust>0</ProjectTrust>");
547 ps.WriteLine(" </PropertyGroup>");
494 foreach (ConfigurationNode conf in project.Configurations) 548 foreach (ConfigurationNode conf in project.Configurations)
495 { 549 {
496 ps.Write(" <PropertyGroup"); 550 ps.Write(" <PropertyGroup");
497 ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' \"", conf.Name); 551 ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|{1}' \"", conf.Name, conf.Platform);
498 ps.WriteLine(" />"); 552 ps.WriteLine(" />");
499 } 553 }
500 ps.WriteLine("</Project>"); 554 ps.WriteLine("</Project>");
@@ -504,9 +558,9 @@ namespace Prebuild.Core.Targets
504 kernel.CurrentWorkingDirectory.Pop(); 558 kernel.CurrentWorkingDirectory.Pop();
505 } 559 }
506 560
507 private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk) 561 private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk)
508 { 562 {
509 kernel.Log.Write("Creating {0} solution and project files", this.VersionName); 563 kernel.Log.Write("Creating {0} solution and project files", VersionName);
510 564
511 foreach (SolutionNode child in solution.Solutions) 565 foreach (SolutionNode child in solution.Solutions)
512 { 566 {
@@ -531,13 +585,13 @@ namespace Prebuild.Core.Targets
531 kernel.Log.Write(""); 585 kernel.Log.Write("");
532 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln"); 586 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
533 587
534 using (StreamWriter ss = new StreamWriter(solutionFile)) 588 using (StreamWriter ss = new StreamWriter(solutionFile))
535 { 589 {
536 kernel.CurrentWorkingDirectory.Push(); 590 kernel.CurrentWorkingDirectory.Push();
537 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile)); 591 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
538 592
539 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", this.SolutionVersion); 593 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
540 ss.WriteLine(SolutionTag); 594 ss.WriteLine(SolutionTag);
541 595
542 WriteProjectDeclarations(ss, solution, solution); 596 WriteProjectDeclarations(ss, solution, solution);
543 597
@@ -546,7 +600,7 @@ namespace Prebuild.Core.Targets
546 ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution"); 600 ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
547 foreach (ConfigurationNode conf in solution.Configurations) 601 foreach (ConfigurationNode conf in solution.Configurations)
548 { 602 {
549 ss.WriteLine("\t\t{0}|Any CPU = {0}|Any CPU", conf.Name); 603 ss.WriteLine("\t\t{0} = {0}", conf.NameAndPlatform);
550 } 604 }
551 ss.WriteLine("\tEndGlobalSection"); 605 ss.WriteLine("\tEndGlobalSection");
552 606
@@ -571,7 +625,7 @@ namespace Prebuild.Core.Targets
571 } 625 }
572 } 626 }
573 627
574 private void WriteProjectDeclarations(StreamWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution) 628 private void WriteProjectDeclarations(TextWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution)
575 { 629 {
576 foreach (SolutionNode childSolution in embeddedSolution.Solutions) 630 foreach (SolutionNode childSolution in embeddedSolution.Solutions)
577 { 631 {
@@ -595,7 +649,7 @@ namespace Prebuild.Core.Targets
595 } 649 }
596 } 650 }
597 651
598 private static void WriteNestedProjectMap(StreamWriter writer, SolutionNode embeddedSolution) 652 private static void WriteNestedProjectMap(TextWriter writer, SolutionNode embeddedSolution)
599 { 653 {
600 foreach (ProjectNode project in embeddedSolution.Projects) 654 foreach (ProjectNode project in embeddedSolution.Projects)
601 { 655 {
@@ -614,31 +668,31 @@ namespace Prebuild.Core.Targets
614 } 668 }
615 } 669 }
616 670
617 private static void WriteNestedProject(StreamWriter writer, SolutionNode solution, Guid projectGuid) 671 private static void WriteNestedProject(TextWriter writer, SolutionNode solution, Guid projectGuid)
618 { 672 {
619 WriteNestedFolder(writer, solution.Guid, projectGuid); 673 WriteNestedFolder(writer, solution.Guid, projectGuid);
620 } 674 }
621 675
622 private static void WriteNestedFolder(StreamWriter writer, Guid parentGuid, Guid childGuid) 676 private static void WriteNestedFolder(TextWriter writer, Guid parentGuid, Guid childGuid)
623 { 677 {
624 writer.WriteLine("\t\t{0} = {1}", 678 writer.WriteLine("\t\t{0} = {1}",
625 childGuid.ToString("B").ToUpper(), 679 childGuid.ToString("B").ToUpper(),
626 parentGuid.ToString("B").ToUpper()); 680 parentGuid.ToString("B").ToUpper());
627 } 681 }
628 682
629 private static void WriteConfigurationLines(ICollection configurations, SolutionNode solution, StreamWriter ss) 683 private static void WriteConfigurationLines(IEnumerable<ConfigurationNode> configurations, SolutionNode solution, TextWriter ss)
630 { 684 {
631 foreach (ProjectNode project in solution.Projects) 685 foreach (ProjectNode project in solution.Projects)
632 { 686 {
633 foreach (ConfigurationNode conf in configurations) 687 foreach (ConfigurationNode conf in configurations)
634 { 688 {
635 ss.WriteLine("\t\t{0}.{1}|Any CPU.ActiveCfg = {1}|Any CPU", 689 ss.WriteLine("\t\t{0}.{1}.ActiveCfg = {1}",
636 project.Guid.ToString("B").ToUpper(), 690 project.Guid.ToString("B").ToUpper(),
637 conf.Name); 691 conf.NameAndPlatform);
638 692
639 ss.WriteLine("\t\t{0}.{1}|Any CPU.Build.0 = {1}|Any CPU", 693 ss.WriteLine("\t\t{0}.{1}.Build.0 = {1}",
640 project.Guid.ToString("B").ToUpper(), 694 project.Guid.ToString("B").ToUpper(),
641 conf.Name); 695 conf.NameAndPlatform);
642 } 696 }
643 } 697 }
644 698
@@ -648,54 +702,37 @@ namespace Prebuild.Core.Targets
648 } 702 }
649 } 703 }
650 704
651 private void WriteSolutionFiles(SolutionNode solution, StreamWriter ss) 705 private void WriteSolutionFiles(SolutionNode solution, TextWriter ss)
652 { 706 {
653 if (solution.Files != null && solution.Files.Count > 0) 707 if(solution.Files != null && solution.Files.Count > 0)
654 { 708 WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files);
655 WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files);
656 }
657 } 709 }
658 710
659 private void WriteEmbeddedSolution(StreamWriter writer, SolutionNode embeddedSolution) 711 private void WriteEmbeddedSolution(TextWriter writer, SolutionNode embeddedSolution)
660 { 712 {
661 WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files); 713 WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files);
662 } 714 }
663 715
664 private void WriteProject(SolutionNode solution, StreamWriter ss, ProjectNode project) 716 private void WriteProject(SolutionNode solution, TextWriter ss, ProjectNode project)
665 { 717 {
666 WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath); 718 WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath);
667 } 719 }
668 720
669 private void WriteProject(SolutionNode solution, StreamWriter ss, DatabaseProjectNode dbProject) 721 private void WriteProject(SolutionNode solution, TextWriter ss, DatabaseProjectNode dbProject)
670 { 722 {
671 if (solution.Files != null && solution.Files.Count > 0) 723 if (solution.Files != null && solution.Files.Count > 0)
672 WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath); 724 WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath);
673 } 725 }
674 726
675 private static bool ExtensionSpecified(string refName)
676 {
677 return refName.EndsWith(".dll") || refName.EndsWith(".exe");
678 }
679
680 private static string GetProjectExtension(ProjectNode project)
681 {
682 string extension = ".dll";
683 if (project.Type == ProjectType.Exe)
684 {
685 extension = ".exe";
686 }
687 return extension;
688 }
689
690 const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\""; 727 const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\"";
691 const string ProjectDeclarationEndFormat = "EndProject"; 728 const string ProjectDeclarationEndFormat = "EndProject";
692 729
693 private void WriteProject(StreamWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath) 730 private void WriteProject(TextWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath)
694 { 731 {
695 if (!tools.ContainsKey(language)) 732 if (!tools.ContainsKey(language))
696 throw new UnknownLanguageException("Unknown .NET language: " + language); 733 throw new UnknownLanguageException("Unknown .NET language: " + language);
697 734
698 ToolInfo toolInfo = (ToolInfo)tools[language]; 735 ToolInfo toolInfo = tools[language];
699 736
700 string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath); 737 string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath);
701 738
@@ -704,23 +741,23 @@ namespace Prebuild.Core.Targets
704 WriteProject(ss, language, guid, name, path); 741 WriteProject(ss, language, guid, name, path);
705 } 742 }
706 743
707 private void WriteProject(StreamWriter writer, string language, Guid projectGuid, string name, string location) 744 private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location)
708 { 745 {
709 WriteProject(writer, language, projectGuid, name, location, null); 746 WriteProject(writer, language, projectGuid, name, location, null);
710 } 747 }
711 748
712 private void WriteProject(StreamWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files) 749 private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files)
713 { 750 {
714 if (!tools.ContainsKey(language)) 751 if (!tools.ContainsKey(language))
715 throw new UnknownLanguageException("Unknown .NET language: " + language); 752 throw new UnknownLanguageException("Unknown .NET language: " + language);
716 753
717 ToolInfo toolInfo = (ToolInfo)tools[language]; 754 ToolInfo toolInfo = tools[language];
718 755
719 writer.WriteLine(ProjectDeclarationBeginFormat, 756 writer.WriteLine(ProjectDeclarationBeginFormat,
720 toolInfo.Guid, 757 toolInfo.Guid,
721 name, 758 name,
722 location, 759 location,
723 projectGuid.ToString("B").ToUpper()); 760 projectGuid.ToString("B").ToUpper());
724 761
725 if (files != null) 762 if (files != null)
726 { 763 {
@@ -738,7 +775,7 @@ namespace Prebuild.Core.Targets
738 private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project) 775 private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project)
739 { 776 {
740 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp"); 777 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp");
741 IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), " "); 778 IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), " ");
742 779
743 kernel.CurrentWorkingDirectory.Push(); 780 kernel.CurrentWorkingDirectory.Push();
744 781
@@ -777,12 +814,10 @@ namespace Prebuild.Core.Targets
777 kernel.CurrentWorkingDirectory.Pop(); 814 kernel.CurrentWorkingDirectory.Pop();
778 } 815 }
779 816
780 private bool ContainsSqlFiles(string folder) 817 private static bool ContainsSqlFiles(string folder)
781 { 818 {
782 foreach (string file in Directory.GetFiles(folder, "*.sql")) 819 if(Directory.GetFiles(folder, "*.sql").Length > 0)
783 {
784 return true; // if the folder contains 1 .sql file, that's good enough 820 return true; // if the folder contains 1 .sql file, that's good enough
785 }
786 821
787 foreach (string child in Directory.GetDirectories(folder)) 822 foreach (string child in Directory.GetDirectories(folder))
788 { 823 {
@@ -793,7 +828,7 @@ namespace Prebuild.Core.Targets
793 return false; 828 return false;
794 } 829 }
795 830
796 private void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder) 831 private static void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder)
797 { 832 {
798 foreach (string child in Directory.GetDirectories(folder)) 833 foreach (string child in Directory.GetDirectories(folder))
799 { 834 {
@@ -816,7 +851,7 @@ namespace Prebuild.Core.Targets
816 { 851 {
817 kernel.Log.Write("...Cleaning project: {0}", project.Name); 852 kernel.Log.Write("...Cleaning project: {0}", project.Name);
818 853
819 ToolInfo toolInfo = (ToolInfo)tools[project.Language]; 854 ToolInfo toolInfo = tools[project.Language];
820 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); 855 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
821 string userFile = projectFile + ".user"; 856 string userFile = projectFile + ".user";
822 857
@@ -826,7 +861,7 @@ namespace Prebuild.Core.Targets
826 861
827 private void CleanSolution(SolutionNode solution) 862 private void CleanSolution(SolutionNode solution)
828 { 863 {
829 kernel.Log.Write("Cleaning {0} solution and project files", this.VersionName, solution.Name); 864 kernel.Log.Write("Cleaning {0} solution and project files", VersionName, solution.Name);
830 865
831 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln"); 866 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
832 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo"); 867 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
diff --git a/Prebuild/src/Core/Targets/VSVersion.cs b/Prebuild/src/Core/Targets/VSVersion.cs
index 59549b0..699b5ca 100644
--- a/Prebuild/src/Core/Targets/VSVersion.cs
+++ b/Prebuild/src/Core/Targets/VSVersion.cs
@@ -45,10 +45,10 @@ namespace Prebuild.Core.Targets
45 /// <summary> 45 /// <summary>
46 /// Visual Studio 2008 46 /// Visual Studio 2008
47 /// </summary> 47 /// </summary>
48 VS90, 48 VS90,
49 /// <summary> 49 /// <summary>
50 /// Visual Studio 2010 50 /// Visual Studio 2010
51 /// </summary> 51 /// </summary>
52 VS10 52 VS10
53 } 53 }
54} 54}
diff --git a/Prebuild/src/Core/Targets/XcodeTarget.cs b/Prebuild/src/Core/Targets/XcodeTarget.cs
index d96f65b..5393cec 100644
--- a/Prebuild/src/Core/Targets/XcodeTarget.cs
+++ b/Prebuild/src/Core/Targets/XcodeTarget.cs
@@ -24,8 +24,6 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections;
28using System.Collections.Specialized;
29using System.IO; 27using System.IO;
30using System.Reflection; 28using System.Reflection;
31using System.Text.RegularExpressions; 29using System.Text.RegularExpressions;
diff --git a/Prebuild/src/Core/Utilities/CommandLineCollection.cs b/Prebuild/src/Core/Utilities/CommandLineCollection.cs
index 22752aa..786fa1e 100644
--- a/Prebuild/src/Core/Utilities/CommandLineCollection.cs
+++ b/Prebuild/src/Core/Utilities/CommandLineCollection.cs
@@ -23,10 +23,8 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
23*/ 23*/
24#endregion 24#endregion
25 25
26using System;
27using System.Collections; 26using System.Collections;
28using System.Collections.Specialized; 27using System.Collections.Generic;
29using System.Diagnostics;
30 28
31namespace Prebuild.Core.Utilities 29namespace Prebuild.Core.Utilities
32{ 30{
@@ -34,15 +32,15 @@ namespace Prebuild.Core.Utilities
34 /// The CommandLine class parses and interprets the command-line arguments passed to 32 /// The CommandLine class parses and interprets the command-line arguments passed to
35 /// prebuild. 33 /// prebuild.
36 /// </summary> 34 /// </summary>
37 public class CommandLineCollection 35 public class CommandLineCollection : IEnumerable<KeyValuePair<string, string>>
38 { 36 {
39 #region Fields 37 #region Fields
40 38
41 // The raw OS arguments 39 // The raw OS arguments
42 private string[] m_RawArgs; 40 private readonly string[] m_RawArgs;
43 41
44 // Command-line argument storage 42 // Command-line argument storage
45 private Hashtable m_Arguments; 43 private readonly Dictionary<string, string> m_Arguments = new Dictionary<string, string>();
46 44
47 #endregion 45 #endregion
48 46
@@ -54,8 +52,7 @@ namespace Prebuild.Core.Utilities
54 public CommandLineCollection(string[] args) 52 public CommandLineCollection(string[] args)
55 { 53 {
56 m_RawArgs = args; 54 m_RawArgs = args;
57 m_Arguments = new Hashtable(); 55
58
59 Parse(); 56 Parse();
60 } 57 }
61 58
@@ -69,11 +66,11 @@ namespace Prebuild.Core.Utilities
69 return; 66 return;
70 67
71 int idx = 0; 68 int idx = 0;
72 string arg = null, lastArg = null; 69 string lastArg = null;
73 70
74 while(idx <m_RawArgs.Length) 71 while(idx <m_RawArgs.Length)
75 { 72 {
76 arg = m_RawArgs[idx]; 73 string arg = m_RawArgs[idx];
77 74
78 if(arg.Length > 2 && arg[0] == '/') 75 if(arg.Length > 2 && arg[0] == '/')
79 { 76 {
@@ -119,16 +116,13 @@ namespace Prebuild.Core.Utilities
119 /// null string if no parameter was specified, and the value if a parameter was specified</remarks> 116 /// null string if no parameter was specified, and the value if a parameter was specified</remarks>
120 public string this[string index] 117 public string this[string index]
121 { 118 {
122 get 119 get
123 { 120 {
124 if(m_Arguments.ContainsKey(index)) 121 if(m_Arguments.ContainsKey(index))
125 { 122 {
126 return (string)(m_Arguments[index]); 123 return (m_Arguments[index]);
127 }
128 else
129 {
130 return null;
131 } 124 }
125 return null;
132 } 126 }
133 } 127 }
134 128
@@ -143,11 +137,16 @@ namespace Prebuild.Core.Utilities
143 /// An <see cref="T:System.Collections.IDictionaryEnumerator"/> 137 /// An <see cref="T:System.Collections.IDictionaryEnumerator"/>
144 /// that can be used to iterate through the collection. 138 /// that can be used to iterate through the collection.
145 /// </returns> 139 /// </returns>
146 public IDictionaryEnumerator GetEnumerator() 140 public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
147 { 141 {
148 return m_Arguments.GetEnumerator(); 142 return m_Arguments.GetEnumerator();
149 } 143 }
150 144
151 #endregion 145 IEnumerator IEnumerable.GetEnumerator()
146 {
147 return GetEnumerator();
148 }
149
150 #endregion
152 } 151 }
153} 152}
diff --git a/Prebuild/src/Core/Utilities/CurrentDirectory.cs b/Prebuild/src/Core/Utilities/CurrentDirectory.cs
index 5fabdf0..9624c35 100644
--- a/Prebuild/src/Core/Utilities/CurrentDirectory.cs
+++ b/Prebuild/src/Core/Utilities/CurrentDirectory.cs
@@ -24,7 +24,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections; 27using System.Collections.Generic;
28 28
29namespace Prebuild.Core.Utilities 29namespace Prebuild.Core.Utilities
30{ 30{
@@ -35,19 +35,7 @@ namespace Prebuild.Core.Utilities
35 { 35 {
36 #region Fields 36 #region Fields
37 37
38 private Stack m_Stack; 38 private readonly Stack<string> m_Stack = new Stack<string>();
39
40 #endregion
41
42 #region Constructors
43
44 /// <summary>
45 /// Initializes a new instance of the <see cref="CurrentDirectory"/> class.
46 /// </summary>
47 public CurrentDirectory()
48 {
49 m_Stack = new Stack();
50 }
51 39
52 #endregion 40 #endregion
53 41
@@ -71,7 +59,7 @@ namespace Prebuild.Core.Utilities
71 return; 59 return;
72 } 60 }
73 61
74 string cwd = (string)m_Stack.Pop(); 62 string cwd = m_Stack.Pop();
75 Helper.SetCurrentDir(cwd); 63 Helper.SetCurrentDir(cwd);
76 } 64 }
77 65
diff --git a/Prebuild/src/Core/Utilities/Helper.cs b/Prebuild/src/Core/Utilities/Helper.cs
index 9a0d131..8c3e968 100644
--- a/Prebuild/src/Core/Utilities/Helper.cs
+++ b/Prebuild/src/Core/Utilities/Helper.cs
@@ -24,7 +24,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
24#endregion 24#endregion
25 25
26using System; 26using System;
27using System.Collections; 27using System.Collections.Generic;
28using System.Diagnostics; 28using System.Diagnostics;
29using System.IO; 29using System.IO;
30using System.Runtime.InteropServices; 30using System.Runtime.InteropServices;
@@ -42,8 +42,6 @@ namespace Prebuild.Core.Utilities
42 { 42 {
43 #region Fields 43 #region Fields
44 44
45 private static Stack dirStack;
46 private static Regex varRegex;
47 static bool checkForOSVariables; 45 static bool checkForOSVariables;
48 46
49 /// <summary> 47 /// <summary>
@@ -62,60 +60,12 @@ namespace Prebuild.Core.Utilities
62 } 60 }
63 61
64 #endregion 62 #endregion
65
66 #region Constructors
67
68 /// <summary>
69 /// Initializes the <see cref="Helper"/> class.
70 /// </summary>
71 static Helper()
72 {
73 dirStack = new Stack();
74 //m_VarRegex = new Regex(@"\${(?<var>[\w|_]+)}");
75 }
76
77 #endregion
78
79 #region Properties
80
81 /// <summary>
82 ///
83 /// </summary>
84 public static Stack DirStack
85 {
86 get
87 {
88 return dirStack;
89 }
90 }
91
92 /// <summary>
93 ///
94 /// </summary>
95 public static Regex VarRegex
96 {
97 get
98 {
99 return varRegex;
100 }
101 set
102 {
103 varRegex = value;
104 }
105 }
106
107 #endregion
108 63
109 #region Public Methods 64 #region Public Methods
110 65
111 #region String Parsing 66 #region String Parsing
112 #region Inner Classes and Delegates 67
113 /// <summary>
114 ///
115 /// </summary>
116 public delegate string StringLookup(string key); 68 public delegate string StringLookup(string key);
117
118 #endregion
119 69
120 /// <summary> 70 /// <summary>
121 /// Gets a collection of StringLocationPair objects that represent the matches 71 /// Gets a collection of StringLocationPair objects that represent the matches
@@ -545,35 +495,6 @@ namespace Prebuild.Core.Utilities
545 return attrs[0]; 495 return attrs[0];
546 } 496 }
547 497
548 /* A bit of overhead for simple group parsing, there are problems with Regex in Mono
549 public static string ParseValue(string val)
550 {
551 if(val == null || val.Length < 1 || !CheckForOSVariables)
552 return val;
553
554 string tmp = val;
555 Match m = m_VarRegex.Match(val);
556 while(m.Success)
557 {
558 if(m.Groups["var"] == null)
559 continue;
560
561 Capture c = m.Groups["var"].Captures[0];
562 if(c == null)
563 continue;
564
565 string var = c.Value;
566 string envVal = Environment.GetEnvironmentVariable(var);
567 if(envVal == null)
568 envVal = "";
569
570 tmp = tmp.Replace("${" + var + "}", envVal);
571 m = m.NextMatch();
572 }
573
574 return tmp;
575 }*/
576
577 /// <summary> 498 /// <summary>
578 /// Attributes the value. 499 /// Attributes the value.
579 /// </summary> 500 /// </summary>
diff --git a/Prebuild/src/Core/Utilities/Log.cs b/Prebuild/src/Core/Utilities/Log.cs
index 548e987..4df3def 100644
--- a/Prebuild/src/Core/Utilities/Log.cs
+++ b/Prebuild/src/Core/Utilities/Log.cs
@@ -82,7 +82,7 @@ namespace Prebuild.Core.Utilities
82 { 82 {
83 #region Fields 83 #region Fields
84 84
85 private StreamWriter m_Writer; 85 private TextWriter m_Writer;
86 private LogTargets m_Target = LogTargets.Null; 86 private LogTargets m_Target = LogTargets.Null;
87 bool disposed; 87 bool disposed;
88 88
@@ -96,14 +96,20 @@ namespace Prebuild.Core.Utilities
96 /// <param name="target">The target.</param> 96 /// <param name="target">The target.</param>
97 /// <param name="fileName">Name of the file.</param> 97 /// <param name="fileName">Name of the file.</param>
98 public Log(LogTargets target, string fileName) 98 public Log(LogTargets target, string fileName)
99 { 99 {
100 m_Target = target; 100 m_Target = target;
101 101
102 if((m_Target & LogTargets.File) != 0) 102 if ((m_Target & LogTargets.File) != 0)
103 { 103 {
104 m_Writer = new StreamWriter(fileName, false); 104 m_Writer = new StreamWriter(fileName, false);
105 } 105 }
106 } 106 else if ((m_Target & LogTargets.Console) != 0)
107 {
108 // Prevents null reference exceptions when outputing to the log file.
109 // This seems to only happen when running on a network drive.
110 m_Writer = Console.Out;
111 }
112 }
107 113
108 #endregion 114 #endregion
109 115
diff --git a/Prebuild/src/Core/WarningException.cs b/Prebuild/src/Core/WarningException.cs
index df90dc8..b7c3668 100644
--- a/Prebuild/src/Core/WarningException.cs
+++ b/Prebuild/src/Core/WarningException.cs
@@ -31,7 +31,7 @@ namespace Prebuild.Core
31 /// <summary> 31 /// <summary>
32 /// 32 ///
33 /// </summary> 33 /// </summary>
34 [Serializable()] 34 [Serializable]
35 public class WarningException : Exception 35 public class WarningException : Exception
36 { 36 {
37 #region Constructors 37 #region Constructors
diff --git a/Prebuild/src/Prebuild.cs b/Prebuild/src/Prebuild.cs
index 2d12b53..081c89c 100644
--- a/Prebuild/src/Prebuild.cs
+++ b/Prebuild/src/Prebuild.cs
@@ -26,9 +26,9 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
26#region CVS Information 26#region CVS Information
27/* 27/*
28 * $Source$ 28 * $Source$
29 * $Author: jendave $ 29 * $Author: kunnis $
30 * $Date: 2006-09-26 23:43:35 +0200 (ti, 26 sep 2006) $ 30 * $Date: 2009-04-15 02:33:14 +0100 (Wed, 15 Apr 2009) $
31 * $Revision: 168 $ 31 * $Revision: 308 $
32 */ 32 */
33#endregion 33#endregion
34 34
@@ -86,17 +86,17 @@ namespace Prebuild
86 { 86 {
87 kernel.Process(); 87 kernel.Process();
88 } 88 }
89 } 89 }
90 catch(Exception ex) 90#if !DEBUG
91 { 91 catch (Exception ex)
92 Console.WriteLine("Unhandled error: {0}", ex.Message); 92 {
93 //#if DEBUG 93 Console.WriteLine("Unhandled error: {0}", ex.Message);
94 Console.WriteLine("{0}", ex.StackTrace); 94 Console.WriteLine("{0}", ex.StackTrace);
95 //#endif 95 }
96 } 96#endif
97 finally 97 finally
98 { 98 {
99 if(kernel.PauseAfterFinish) 99 if(kernel != null && kernel.PauseAfterFinish)
100 { 100 {
101 Console.WriteLine("\nPress enter to continue..."); 101 Console.WriteLine("\nPress enter to continue...");
102 Console.ReadLine(); 102 Console.ReadLine();
diff --git a/Prebuild/src/Properties/AssemblyInfo.cs b/Prebuild/src/Properties/AssemblyInfo.cs
index 65c8736..f3ac30f 100644
--- a/Prebuild/src/Properties/AssemblyInfo.cs
+++ b/Prebuild/src/Properties/AssemblyInfo.cs
@@ -61,16 +61,17 @@ using System.Resources;
61[assembly: AssemblyConfiguration(".NET CLR")] 61[assembly: AssemblyConfiguration(".NET CLR")]
62[assembly: AssemblyCompany("The Prebuild Project")] 62[assembly: AssemblyCompany("The Prebuild Project")]
63[assembly: AssemblyProduct("")] 63[assembly: AssemblyProduct("")]
64[assembly: AssemblyCopyright("Copyright 2004-2008 " + 64[assembly: AssemblyCopyright("Copyright 2004-2010 " +
65 "Matthew Holmes, " + 65 "Matthew Holmes, " +
66 "Dan Moorehead, " + 66 "Dan Moorehead, " +
67 "C.J. Adams-Collier, " + 67 "C.J. Adams-Collier, " +
68 "Rob Loach, " + 68 "Rob Loach, " +
69 "David Hudson,")] 69 "David Hudson," +
70 "John Hurliman")]
70[assembly: AssemblyTrademark("")] 71[assembly: AssemblyTrademark("")]
71[assembly: AssemblyCulture("")] 72[assembly: AssemblyCulture("")]
72[assembly: NeutralResourcesLanguageAttribute("en-US")] 73[assembly: NeutralResourcesLanguageAttribute("en-US")]
73[assembly: AssemblyVersion("2.0.4.*")] 74[assembly: AssemblyVersion("2.0.5.*")]
74 75
75// 76//
76// Version information for an assembly consists of the following four values: 77// Version information for an assembly consists of the following four values:
diff --git a/Prebuild/src/data/prebuild-1.7.xsd b/Prebuild/src/data/prebuild-1.7.xsd
index c3f8d6b..3675503 100644
--- a/Prebuild/src/data/prebuild-1.7.xsd
+++ b/Prebuild/src/data/prebuild-1.7.xsd
@@ -40,7 +40,7 @@
40 <xs:complexType> 40 <xs:complexType>
41 <xs:sequence> 41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" /> 42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" /> 43 <xs:element ref="Solution" minOccurs="1" maxOccurs="unbounded" />
44 </xs:sequence> 44 </xs:sequence>
45 <xs:attribute name="version" /> 45 <xs:attribute name="version" />
46 <xs:attribute name="checkOsVars" /> 46 <xs:attribute name="checkOsVars" />
@@ -57,6 +57,7 @@
57 <xs:element ref="Options" minOccurs="0" /> 57 <xs:element ref="Options" minOccurs="0" />
58 <xs:element ref="Files" minOccurs="0" /> 58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" /> 59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
60 <xs:element ref="Cleanup" minOccurs="0" maxOccurs="1" />
60 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" /> 61 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
61 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" /> 62 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
62 </xs:sequence> 63 </xs:sequence>
@@ -224,6 +225,7 @@
224 </xs:all> 225 </xs:all>
225 </xs:complexType> 226 </xs:complexType>
226 </xs:element> 227 </xs:element>
228
227 <xs:element name="Files"> 229 <xs:element name="Files">
228 <xs:complexType> 230 <xs:complexType>
229 <xs:sequence> 231 <xs:sequence>
@@ -232,6 +234,7 @@
232 </xs:sequence> 234 </xs:sequence>
233 </xs:complexType> 235 </xs:complexType>
234 </xs:element> 236 </xs:element>
237
235 <xs:element name="File"> 238 <xs:element name="File">
236 <xs:complexType> 239 <xs:complexType>
237 <xs:simpleContent> 240 <xs:simpleContent>
@@ -275,6 +278,7 @@
275 </xs:simpleContent> 278 </xs:simpleContent>
276 </xs:complexType> 279 </xs:complexType>
277 </xs:element> 280 </xs:element>
281
278 <xs:element name="Match"> 282 <xs:element name="Match">
279 <xs:complexType> 283 <xs:complexType>
280 <xs:sequence> 284 <xs:sequence>
@@ -322,10 +326,25 @@
322 <xs:attribute name="linkPath" type="xs:string" /> 326 <xs:attribute name="linkPath" type="xs:string" />
323 </xs:complexType> 327 </xs:complexType>
324 </xs:element> 328 </xs:element>
329
325 <xs:element name="Exclude"> 330 <xs:element name="Exclude">
326 <xs:complexType> 331 <xs:complexType>
327 <xs:attribute name="name" type="xs:string" /> 332 <xs:attribute name="name" type="xs:string" />
328 <xs:attribute name="pattern" type="xs:string" /> 333 <xs:attribute name="pattern" type="xs:string" />
329 </xs:complexType> 334 </xs:complexType>
330 </xs:element> 335 </xs:element>
336
337 <xs:element name="Cleanup">
338 <xs:complexType>
339 <xs:sequence>
340 <xs:element ref="CleanFiles" minOccurs="1" maxOccurs="unbounded" />
341 </xs:sequence>
342 </xs:complexType>
343 </xs:element>
344
345 <xs:element name="CleanFiles">
346 <xs:complexType>
347 <xs:attribute name="pattern" type="xs:string" />
348 </xs:complexType>
349 </xs:element>
331</xs:schema> 350</xs:schema>
diff --git a/Prebuild/src/data/prebuild-1.8.xsd b/Prebuild/src/data/prebuild-1.8.xsd
new file mode 100644
index 0000000..8f5c1a4
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.8.xsd
@@ -0,0 +1,331 @@
1<?xml version="1.0" encoding="utf-8"?>
2<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dnpb.sourceforge.net/schemas/prebuild-1.8.xsd" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.8.xsd">
3 <xs:annotation>
4 <xs:documentation>
5 Copyright (c) 2004-2007
6 Matthew Holmes (calefaction at houston . rr . com),
7 Dan Moorehead (dan05a at gmail . com),
8 David Hudson (jendave at yahoo dot com),
9 C.J. Adams-Collier (cjac at colliertech dot com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002,
14 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="Prebuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="1" maxOccurs="1" />
44 </xs:sequence>
45 <xs:attribute name="version" />
46 <xs:attribute name="checkOsVars" />
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="Process" type="xs:string" />
51
52 <xs:element name="Solution">
53 <xs:complexType>
54 <xs:sequence>
55 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
56 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
57 <xs:element ref="Options" minOccurs="0" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
60 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
61 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
62 </xs:sequence>
63 <xs:attribute name="name" type="xs:string" use="required" />
64 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
65 <xs:attribute name="path" type="xs:string" default="" />
66 <xs:attribute name="version" type="xs:string" default="1.0.0" />
67 </xs:complexType>
68 </xs:element>
69
70 <xs:element name="EmbeddedSolution">
71 <xs:complexType>
72 <xs:sequence>
73 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
74 <xs:element ref="Files" minOccurs="0" />
75 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
76 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
77 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
78 </xs:sequence>
79 <xs:attribute name="name" type="xs:string" use="required" />
80 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
81 <xs:attribute name="path" type="xs:string" default="" />
82 <xs:attribute name="version" type="xs:string" default="1.0.0" />
83 </xs:complexType>
84 </xs:element>
85
86 <xs:element name="DatabaseProject">
87 <xs:complexType>
88 <xs:sequence>
89 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
90 <xs:element ref="DatabaseReference" minOccurs="0" maxOccurs="unbounded" />
91 </xs:sequence>
92 <xs:attribute name="name" type="xs:string" use="required" />
93 <xs:attribute name="path" type="xs:string" />
94 </xs:complexType>
95 </xs:element>
96
97 <xs:element name="DatabaseReference">
98 <xs:complexType>
99 <xs:attribute name="name" type="xs:string" use="required" />
100 <xs:attribute name="providerId" type="xs:string" />
101 <xs:attribute name="providerName" type="xs:string" />
102 <xs:attribute name="connectionString" type="xs:string" use="required" />
103 </xs:complexType>
104 </xs:element>
105
106 <xs:element name="Project">
107 <xs:complexType>
108 <xs:sequence>
109 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
110 <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
111 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
112 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
113 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
114 <xs:complexType>
115 <xs:attribute name="name" type="xs:string" use="required" />
116 <xs:attribute name="path" type="xs:string" />
117 <xs:attribute name="localCopy" type="xs:boolean" />
118 <xs:attribute name="version" type="xs:string" />
119 </xs:complexType>
120 </xs:element>
121 <xs:element ref="Files" />
122 </xs:sequence>
123 <xs:attribute name="name" type="xs:string" use="required" />
124 <xs:attribute name="designerFolder" type="xs:string" default="" />
125 <xs:attribute name="filterGroups" type="xs:string" default="" />
126 <xs:attribute name="path" type="xs:string" default="" />
127 <xs:attribute name="icon" type="xs:string" default="" />
128 <xs:attribute name="configFile" type="xs:string" default="" />
129 <xs:attribute name="version" type="xs:string" default="1.0.0" />
130 <xs:attribute name="guid" type="xs:string"/>
131 <xs:attribute name="language" default="C#">
132 <xs:simpleType>
133 <xs:restriction base="xs:string">
134 <xs:enumeration value="C#" />
135 <xs:enumeration value="VB.NET" />
136 </xs:restriction>
137 </xs:simpleType>
138 </xs:attribute>
139 <xs:attribute name="type" default="Exe">
140 <xs:simpleType>
141 <xs:restriction base="xs:string">
142 <xs:enumeration value="Exe" />
143 <xs:enumeration value="WinExe" />
144 <xs:enumeration value="Library" />
145 <xs:enumeration value="Web" />
146 </xs:restriction>
147 </xs:simpleType>
148 </xs:attribute>
149 <xs:attribute name="runtime" default="Microsoft">
150 <xs:simpleType>
151 <xs:restriction base="xs:string">
152 <xs:enumeration value="Microsoft" />
153 <xs:enumeration value="Mono" />
154 </xs:restriction>
155 </xs:simpleType>
156 </xs:attribute>
157 <xs:attribute name="frameworkVersion" default="v2_0">
158 <xs:simpleType>
159 <xs:restriction base="xs:string">
160 <xs:enumeration value="v2_0" />
161 <xs:enumeration value="v3_0" />
162 <xs:enumeration value="v3_5" />
163 </xs:restriction>
164 </xs:simpleType>
165 </xs:attribute>
166 <xs:attribute name="startupObject" type="xs:string" default="" />
167 <xs:attribute name="rootNamespace" type="xs:string" />
168 <xs:attribute name="assemblyName" type="xs:string" />
169 <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false" />
170 </xs:complexType>
171 </xs:element>
172
173 <xs:element name="Configuration">
174 <xs:complexType>
175 <xs:sequence>
176 <xs:element ref="Options" minOccurs="0" />
177 </xs:sequence>
178 <xs:attribute name="name" type="xs:string" use="required" />
179 <xs:attribute name="platform" type="xs:string" use="required" />
180 </xs:complexType>
181 </xs:element>
182 <xs:element name="Options">
183 <xs:complexType>
184 <xs:all>
185 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
186 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
187 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
188 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
189 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
190 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
191 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
192 <xs:simpleType>
193 <xs:restriction base="xs:string">
194 <xs:enumeration value="OnBuildSuccess" />
195 <xs:enumeration value="Always" />
196 <xs:enumeration value="OnOutputUpdated" />
197 </xs:restriction>
198 </xs:simpleType>
199 </xs:element>
200 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
201 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
202 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
203 <xs:element name="WarningLevel" minOccurs="0">
204 <xs:simpleType>
205 <xs:restriction base="xs:integer">
206 <xs:minInclusive value="0" />
207 <xs:maxInclusive value="4" />
208 </xs:restriction>
209 </xs:simpleType>
210 </xs:element>
211 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
212 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
213 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
214 <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" />
215 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
216 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
217 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
218 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
219 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
220 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
221 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
222 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
223 <xs:element name="KeyFile" type="xs:string" minOccurs="0" />
224 </xs:all>
225 </xs:complexType>
226 </xs:element>
227 <xs:element name="Files">
228 <xs:complexType>
229 <xs:sequence>
230 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
231 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
232 </xs:sequence>
233 </xs:complexType>
234 </xs:element>
235 <xs:element name="File">
236 <xs:complexType>
237 <xs:simpleContent>
238 <xs:extension base="xs:string">
239 <xs:attribute name="resourceName" type="xs:string" default="" />
240 <xs:attribute name="buildAction" default="Compile">
241 <xs:simpleType>
242 <xs:restriction base="xs:string">
243 <xs:enumeration value="None" />
244 <xs:enumeration value="Compile" />
245 <xs:enumeration value="Content" />
246 <xs:enumeration value="EmbeddedResource" />
247 </xs:restriction>
248 </xs:simpleType>
249 </xs:attribute>
250 <xs:attribute name="subType" default="Code">
251 <xs:simpleType>
252 <xs:restriction base="xs:string">
253 <xs:enumeration value="Code" />
254 <xs:enumeration value="CodeBehind" />
255 <xs:enumeration value="Component" />
256 <xs:enumeration value="Form" />
257 <xs:enumeration value="Settings" />
258 <xs:enumeration value="UserControl" />
259 </xs:restriction>
260 </xs:simpleType>
261 </xs:attribute>
262 <xs:attribute name="link" type="xs:boolean" />
263 <xs:attribute name="copyToOutput" default="Never">
264 <xs:simpleType>
265 <xs:restriction base="xs:string">
266 <xs:enumeration value="Never" />
267 <xs:enumeration value="Always" />
268 <xs:enumeration value="PreserveNewest" />
269 </xs:restriction>
270 </xs:simpleType>
271 </xs:attribute>
272 <xs:attribute name="preservePath" type="xs:boolean" />
273 <xs:attribute name="linkPath" type="xs:string" />
274 </xs:extension>
275 </xs:simpleContent>
276 </xs:complexType>
277 </xs:element>
278 <xs:element name="Match">
279 <xs:complexType>
280 <xs:sequence>
281 <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" />
282 </xs:sequence>
283 <xs:attribute name="path" type="xs:string" />
284 <xs:attribute name="pattern" type="xs:string" use="required" />
285 <xs:attribute name="recurse" type="xs:boolean" default="false" />
286 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
287 <xs:attribute name="buildAction" default="Compile">
288 <xs:simpleType>
289 <xs:restriction base="xs:string">
290 <xs:enumeration value="None" />
291 <xs:enumeration value="Compile" />
292 <xs:enumeration value="Content" />
293 <xs:enumeration value="EmbeddedResource" />
294 </xs:restriction>
295 </xs:simpleType>
296 </xs:attribute>
297 <xs:attribute name="resourceName" type="xs:string" default="" />
298 <xs:attribute name="subType" default="Code">
299 <xs:simpleType>
300 <xs:restriction base="xs:string">
301 <xs:enumeration value="Code" />
302 <xs:enumeration value="CodeBehind" />
303 <xs:enumeration value="Component" />
304 <xs:enumeration value="Designer" />
305 <xs:enumeration value="Form" />
306 <xs:enumeration value="Settings" />
307 <xs:enumeration value="UserControl" />
308 </xs:restriction>
309 </xs:simpleType>
310 </xs:attribute>
311 <xs:attribute name="link" type="xs:boolean" />
312 <xs:attribute name="copyToOutput" default="Never">
313 <xs:simpleType>
314 <xs:restriction base="xs:string">
315 <xs:enumeration value="Never" />
316 <xs:enumeration value="Always" />
317 <xs:enumeration value="PreserveNewest" />
318 </xs:restriction>
319 </xs:simpleType>
320 </xs:attribute>
321 <xs:attribute name="preservePath" type="xs:boolean" />
322 <xs:attribute name="linkPath" type="xs:string" />
323 </xs:complexType>
324 </xs:element>
325 <xs:element name="Exclude">
326 <xs:complexType>
327 <xs:attribute name="name" type="xs:string" />
328 <xs:attribute name="pattern" type="xs:string" />
329 </xs:complexType>
330 </xs:element>
331</xs:schema>
diff --git a/Prebuild/src/data/prebuild-1.9.xsd b/Prebuild/src/data/prebuild-1.9.xsd
new file mode 100644
index 0000000..fbca556
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.9.xsd
@@ -0,0 +1,336 @@
1<?xml version="1.0" encoding="utf-8"?>
2<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://dnpb.sourceforge.net/schemas/prebuild-1.9.xsd" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.9.xsd">
3 <xs:annotation>
4 <xs:documentation>
5 Copyright (c) 2004-2007
6 Matthew Holmes (calefaction at houston . rr . com),
7 Dan Moorehead (dan05a at gmail . com),
8 David Hudson (jendave at yahoo dot com),
9 C.J. Adams-Collier (cjac at colliertech dot com)
10
11 .NET Prebuild is a cross-platform XML-driven pre-build tool which
12 allows developers to easily generate project or make files for major
13 IDE's and .NET development tools including: Visual Studio .NET 2002,
14 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools.
15
16 BSD License:
17
18 Redistribution and use in source and binary forms, with or without modification, are permitted
19 provided that the following conditions are met:
20
21 * Redistributions of source code must retain the above copyright notice, this list of conditions
22 and the following disclaimer.
23 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
24 and the following disclaimer in the documentation and/or other materials provided with the
25 distribution.
26 * The name of the author may not be used to endorse or promote products derived from this software
27 without specific prior written permission.
28
29 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
34 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 </xs:documentation>
37 </xs:annotation>
38
39 <xs:element name="Prebuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="1" maxOccurs="1" />
44 </xs:sequence>
45 <xs:attribute name="version" />
46 <xs:attribute name="checkOsVars" />
47 </xs:complexType>
48 </xs:element>
49
50 <xs:element name="Process" type="xs:string" />
51
52 <xs:element name="Solution">
53 <xs:complexType>
54 <xs:sequence>
55 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
56 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
57 <xs:element ref="Options" minOccurs="0" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
60 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
61 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
62 </xs:sequence>
63 <xs:attribute name="name" type="xs:string" use="required" />
64 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
65 <xs:attribute name="path" type="xs:string" default="" />
66 <xs:attribute name="version" type="xs:string" default="1.0.0" />
67 </xs:complexType>
68 </xs:element>
69
70 <xs:element name="EmbeddedSolution">
71 <xs:complexType>
72 <xs:sequence>
73 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
74 <xs:element ref="Files" minOccurs="0" />
75 <xs:element ref="Project" minOccurs="0" maxOccurs="unbounded" />
76 <xs:element ref="DatabaseProject" minOccurs="0" maxOccurs="unbounded" />
77 <xs:element ref="EmbeddedSolution" minOccurs="0" maxOccurs="unbounded" />
78 </xs:sequence>
79 <xs:attribute name="name" type="xs:string" use="required" />
80 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
81 <xs:attribute name="path" type="xs:string" default="" />
82 <xs:attribute name="version" type="xs:string" default="1.0.0" />
83 </xs:complexType>
84 </xs:element>
85
86 <xs:element name="DatabaseProject">
87 <xs:complexType>
88 <xs:sequence>
89 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
90 <xs:element ref="DatabaseReference" minOccurs="0" maxOccurs="unbounded" />
91 </xs:sequence>
92 <xs:attribute name="name" type="xs:string" use="required" />
93 <xs:attribute name="path" type="xs:string" />
94 </xs:complexType>
95 </xs:element>
96
97 <xs:element name="DatabaseReference">
98 <xs:complexType>
99 <xs:attribute name="name" type="xs:string" use="required" />
100 <xs:attribute name="providerId" type="xs:string" />
101 <xs:attribute name="providerName" type="xs:string" />
102 <xs:attribute name="connectionString" type="xs:string" use="required" />
103 </xs:complexType>
104 </xs:element>
105
106 <xs:element name="Project">
107 <xs:complexType>
108 <xs:sequence>
109 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
110 <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
111 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
112 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
113 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
114 <xs:complexType>
115 <xs:attribute name="name" type="xs:string" use="required" />
116 <xs:attribute name="path" type="xs:string" />
117 <xs:attribute name="localCopy" type="xs:boolean" />
118 <xs:attribute name="version" type="xs:string" />
119 </xs:complexType>
120 </xs:element>
121 <xs:element ref="Files" />
122 </xs:sequence>
123 <xs:attribute name="name" type="xs:string" use="required" />
124 <xs:attribute name="designerFolder" type="xs:string" default="" />
125 <xs:attribute name="filterGroups" type="xs:string" default="" />
126 <xs:attribute name="path" type="xs:string" default="" />
127 <xs:attribute name="icon" type="xs:string" default="" />
128 <xs:attribute name="configFile" type="xs:string" default="" />
129 <xs:attribute name="version" type="xs:string" default="1.0.0" />
130 <xs:attribute name="guid" type="xs:string"/>
131 <xs:attribute name="language" default="C#">
132 <xs:simpleType>
133 <xs:restriction base="xs:string">
134 <xs:enumeration value="C#" />
135 <xs:enumeration value="VB.NET" />
136 </xs:restriction>
137 </xs:simpleType>
138 </xs:attribute>
139 <xs:attribute name="type" default="Exe">
140 <xs:simpleType>
141 <xs:restriction base="xs:string">
142 <xs:enumeration value="Exe" />
143 <xs:enumeration value="WinExe" />
144 <xs:enumeration value="Library" />
145 <xs:enumeration value="Web" />
146 </xs:restriction>
147 </xs:simpleType>
148 </xs:attribute>
149 <xs:attribute name="runtime" default="Microsoft">
150 <xs:simpleType>
151 <xs:restriction base="xs:string">
152 <xs:enumeration value="Microsoft" />
153 <xs:enumeration value="Mono" />
154 </xs:restriction>
155 </xs:simpleType>
156 </xs:attribute>
157 <xs:attribute name="frameworkVersion" default="v2_0">
158 <xs:simpleType>
159 <xs:restriction base="xs:string">
160 <xs:enumeration value="v2_0" />
161 <xs:enumeration value="v3_0" />
162 <xs:enumeration value="v3_5" />
163 <xs:enumeration value="v4_0" />
164 </xs:restriction>
165 </xs:simpleType>
166 </xs:attribute>
167 <xs:attribute name="startupObject" type="xs:string" default="" />
168 <xs:attribute name="rootNamespace" type="xs:string" />
169 <xs:attribute name="assemblyName" type="xs:string" />
170 <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false" />
171 </xs:complexType>
172 </xs:element>
173
174 <xs:element name="Configuration">
175 <xs:complexType>
176 <xs:sequence>
177 <xs:element ref="Options" minOccurs="0" />
178 </xs:sequence>
179 <xs:attribute name="name" type="xs:string" use="required" />
180 <xs:attribute name="platform" type="xs:string" use="required" />
181 </xs:complexType>
182 </xs:element>
183 <xs:element name="Options">
184 <xs:complexType>
185 <xs:all>
186 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
187 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
188 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
189 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
190 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
191 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
192 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
193 <xs:simpleType>
194 <xs:restriction base="xs:string">
195 <xs:enumeration value="OnBuildSuccess" />
196 <xs:enumeration value="Always" />
197 <xs:enumeration value="OnOutputUpdated" />
198 </xs:restriction>
199 </xs:simpleType>
200 </xs:element>
201 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
202 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
203 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
204 <xs:element name="WarningLevel" minOccurs="0">
205 <xs:simpleType>
206 <xs:restriction base="xs:integer">
207 <xs:minInclusive value="0" />
208 <xs:maxInclusive value="4" />
209 </xs:restriction>
210 </xs:simpleType>
211 </xs:element>
212 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
213 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
214 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
215 <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" />
216 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
217 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
218 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
219 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
220 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
221 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
222 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
223 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
224 <xs:element name="KeyFile" type="xs:string" minOccurs="0" />
225 </xs:all>
226 </xs:complexType>
227 </xs:element>
228 <xs:element name="Files">
229 <xs:complexType>
230 <xs:sequence>
231 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
232 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
233 </xs:sequence>
234 </xs:complexType>
235 </xs:element>
236 <xs:element name="File">
237 <xs:complexType>
238 <xs:simpleContent>
239 <xs:extension base="xs:string">
240 <xs:attribute name="resourceName" type="xs:string" default="" />
241 <xs:attribute name="buildAction" default="Compile">
242 <xs:simpleType>
243 <xs:restriction base="xs:string">
244 <xs:enumeration value="None" />
245 <xs:enumeration value="Compile" />
246 <xs:enumeration value="Content" />
247 <xs:enumeration value="EmbeddedResource" />
248 <xs:enumeration value="ApplicationDefinition" />
249 <xs:enumeration value="Page" />
250 </xs:restriction>
251 </xs:simpleType>
252 </xs:attribute>
253 <xs:attribute name="subType" default="Code">
254 <xs:simpleType>
255 <xs:restriction base="xs:string">
256 <xs:enumeration value="Code" />
257 <xs:enumeration value="CodeBehind" />
258 <xs:enumeration value="Component" />
259 <xs:enumeration value="Form" />
260 <xs:enumeration value="Settings" />
261 <xs:enumeration value="UserControl" />
262 </xs:restriction>
263 </xs:simpleType>
264 </xs:attribute>
265 <xs:attribute name="link" type="xs:boolean" />
266 <xs:attribute name="copyToOutput" default="Never">
267 <xs:simpleType>
268 <xs:restriction base="xs:string">
269 <xs:enumeration value="Never" />
270 <xs:enumeration value="Always" />
271 <xs:enumeration value="PreserveNewest" />
272 </xs:restriction>
273 </xs:simpleType>
274 </xs:attribute>
275 <xs:attribute name="preservePath" type="xs:boolean" />
276 <xs:attribute name="linkPath" type="xs:string" />
277 </xs:extension>
278 </xs:simpleContent>
279 </xs:complexType>
280 </xs:element>
281 <xs:element name="Match">
282 <xs:complexType>
283 <xs:sequence>
284 <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" />
285 </xs:sequence>
286 <xs:attribute name="path" type="xs:string" />
287 <xs:attribute name="pattern" type="xs:string" use="required" />
288 <xs:attribute name="recurse" type="xs:boolean" default="false" />
289 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
290 <xs:attribute name="buildAction" default="Compile">
291 <xs:simpleType>
292 <xs:restriction base="xs:string">
293 <xs:enumeration value="None" />
294 <xs:enumeration value="Compile" />
295 <xs:enumeration value="Content" />
296 <xs:enumeration value="EmbeddedResource" />
297 <xs:enumeration value="ApplicationDefinition" />
298 <xs:enumeration value="Page" />
299 </xs:restriction>
300 </xs:simpleType>
301 </xs:attribute>
302 <xs:attribute name="resourceName" type="xs:string" default="" />
303 <xs:attribute name="subType" default="Code">
304 <xs:simpleType>
305 <xs:restriction base="xs:string">
306 <xs:enumeration value="Code" />
307 <xs:enumeration value="CodeBehind" />
308 <xs:enumeration value="Component" />
309 <xs:enumeration value="Designer" />
310 <xs:enumeration value="Form" />
311 <xs:enumeration value="Settings" />
312 <xs:enumeration value="UserControl" />
313 </xs:restriction>
314 </xs:simpleType>
315 </xs:attribute>
316 <xs:attribute name="link" type="xs:boolean" />
317 <xs:attribute name="copyToOutput" default="Never">
318 <xs:simpleType>
319 <xs:restriction base="xs:string">
320 <xs:enumeration value="Never" />
321 <xs:enumeration value="Always" />
322 <xs:enumeration value="PreserveNewest" />
323 </xs:restriction>
324 </xs:simpleType>
325 </xs:attribute>
326 <xs:attribute name="preservePath" type="xs:boolean" />
327 <xs:attribute name="linkPath" type="xs:string" />
328 </xs:complexType>
329 </xs:element>
330 <xs:element name="Exclude">
331 <xs:complexType>
332 <xs:attribute name="name" type="xs:string" />
333 <xs:attribute name="pattern" type="xs:string" />
334 </xs:complexType>
335 </xs:element>
336</xs:schema>
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 9fd7e46..ef8f73a 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -106,33 +106,6 @@
106 ; ## PRIM STORAGE 106 ; ## PRIM STORAGE
107 ; ## 107 ; ##
108 108
109 ; *** Prim Storage - only leave one storage_plugin uncommented ***
110 ; --- Null stores nothing - effectively disabling persistence:
111 ;storage_plugin = "OpenSim.Data.Null.dll"
112
113 ; --- To use sqlite as region storage:
114 ;
115 ; PLEASE NOTE: Unfortunately, the current SQLite database plugin (necessary to use SQLite with Mono on Linux) is
116 ; not compatible with the sqlite3 library installed on Mac OSX. If you're using Mono 2.4 you can still use the old sqlite
117 ; library by uncommenting the SQLiteLegacy.dll storage plugin (and commenting out SQLite.dll). Unfortunately, the older library
118 ; will not work with Mono 2.6 on Mac OSX so you will either need to replace the OSX sqlite3 system library or use MySQL instead
119 ;
120 ; You will also need to do the same thing in config-include/StandaloneCommon.ini if you are running in standalone mode
121 storage_plugin = "OpenSim.Data.SQLite.dll"
122 ;storage_plugin = "OpenSim.Data.SQLiteLegacy.dll"
123 storage_connection_string="URI=file:OpenSim.db,version=3";
124
125 ; --- To use MySQL storage, supply your own connection string (this is only an example):
126 ; note that the supplied account needs create privilegies if you want it to auto-create needed tables.
127 ;
128 ; -->>> There are multiple connection strings defined in several places. Check it carefully!
129 ;
130 ; storage_plugin="OpenSim.Data.MySQL.dll"
131 ; storage_connection_string="Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;Old Guids=true;";
132 ; If you want to use a different database/server for estate data, then
133 ; uncomment and change this connect string. Defaults to the above if not set
134 ; estate_connection_string="Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;";
135
136 ; Persistence of changed objects happens during regular sweeps. The following control that behaviour to 109 ; Persistence of changed objects happens during regular sweeps. The following control that behaviour to
137 ; prevent frequently changing objects from heavily loading the region data store. 110 ; prevent frequently changing objects from heavily loading the region data store.
138 ; If both of these values are set to zero then persistence of all changed objects will happen on every sweep. 111 ; If both of these values are set to zero then persistence of all changed objects will happen on every sweep.
diff --git a/bin/Prebuild.exe b/bin/Prebuild.exe
index eb4c224..d79227c 100755
--- a/bin/Prebuild.exe
+++ b/bin/Prebuild.exe
Binary files differ
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example
index dae7a19..deceb86 100644
--- a/bin/Robust.HG.ini.example
+++ b/bin/Robust.HG.ini.example
@@ -21,7 +21,7 @@
21; * [[<ConfigName>@]<port>/]<dll name>[:<class name>] 21; * [[<ConfigName>@]<port>/]<dll name>[:<class name>]
22; * 22; *
23[Startup] 23[Startup]
24ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003/OpenSim.Server.Handlers.dll:XInventoryInConnector,8002/OpenSim.Server.Handlers.dll:FreeswitchServerConnector,8003/OpenSim.Server.Handlers.dll:GridServiceConnector,8002/OpenSim.Server.Handlers.dll:GridInfoServerInConnector,8003/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector,8002/OpenSim.Server.Handlers.dll:OpenIdServerConnector,8003/OpenSim.Server.Handlers.dll:AvatarServiceConnector,8002/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector,8003/OpenSim.Server.Handlers.dll:PresenceServiceConnector,8003/OpenSim.Server.Handlers.dll:UserAccountServiceConnector,8003/OpenSim.Server.Handlers.dll:GridUserServiceConnector,8003/OpenSim.Server.Handlers.dll:FriendsServiceConnector,8002/OpenSim.Server.Handlers.dll:GatekeeperServiceInConnector,8002/OpenSim.Server.Handlers.dll:UserAgentServerConnector,HGInventoryService@8002/OpenSim.Server.Handlers.dll:XInventoryInConnector,8002/OpenSim.Server.Handlers.dll:AssetServiceConnector" 24ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003/OpenSim.Server.Handlers.dll:XInventoryInConnector,8002/OpenSim.Server.Handlers.dll:FreeswitchServerConnector,8003/OpenSim.Server.Handlers.dll:GridServiceConnector,8002/OpenSim.Server.Handlers.dll:GridInfoServerInConnector,8003/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector,8002/OpenSim.Server.Handlers.dll:OpenIdServerConnector,8003/OpenSim.Server.Handlers.dll:AvatarServiceConnector,8002/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector,8003/OpenSim.Server.Handlers.dll:PresenceServiceConnector,8003/OpenSim.Server.Handlers.dll:UserAccountServiceConnector,8003/OpenSim.Server.Handlers.dll:GridUserServiceConnector,8003/OpenSim.Server.Handlers.dll:FriendsServiceConnector,8002/OpenSim.Server.Handlers.dll:GatekeeperServiceInConnector,8002/OpenSim.Server.Handlers.dll:UserAgentServerConnector,HGInventoryService@8002/OpenSim.Server.Handlers.dll:XInventoryInConnector,8002/OpenSim.Server.Handlers.dll:AssetServiceConnector,8002/OpenSim.Server.Handlers.dll:HeloServiceInConnector"
25 25
26; * This is common for all services, it's the network setup for the entire 26; * This is common for all services, it's the network setup for the entire
27; * server instance, if none if specified above 27; * server instance, if none if specified above
diff --git a/bin/config-include/Grid.ini b/bin/config-include/Grid.ini
index 9a75f19..4a6a082 100644
--- a/bin/config-include/Grid.ini
+++ b/bin/config-include/Grid.ini
@@ -27,6 +27,11 @@
27 SimulationServiceInConnector = true 27 SimulationServiceInConnector = true
28 LibraryModule = true 28 LibraryModule = true
29 29
30[SimulationDataStore]
31 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
32
33[EstateDataStore]
34 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService"
30 35
31[GridService] 36[GridService]
32 LocalServiceModule = "OpenSim.Services.GridService.dll:GridService" 37 LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
diff --git a/bin/config-include/GridCommon.ini.example b/bin/config-include/GridCommon.ini.example
index a19591b..c2cd5c3 100644
--- a/bin/config-include/GridCommon.ini.example
+++ b/bin/config-include/GridCommon.ini.example
@@ -1,3 +1,24 @@
1[DatabaseService]
2 ;
3 ; ### Choose the DB
4 ;
5
6 ; SQLite
7 Include-Storage = "config-include/storage/SQLiteStandalone.ini";
8
9 ; Unfortunately the current SQLite database plugin is not compatible with Mac OSX. You can still use the older
10 ; legacy sqlite library if you are using Mono 2.4. Please see the notes in OpenSim.ini (search for sqlite)
11 ; for more details
12 ;Include-Storage = "config-include/storage/SQLiteLegacyStandalone.ini";
13
14 ; MySql
15 ; Uncomment these lines if you want to use mysql storage
16 ; Change the connection string to your db details
17 ;StorageProvider = "OpenSim.Data.MySQL.dll"
18 ;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;"
19 ; Uncomment this line if you are using MySQL and want to use a different database for estates
20 ;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;"
21
1[AssetService] 22[AssetService]
2 23
3 DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll" 24 DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
diff --git a/bin/config-include/GridHypergrid.ini b/bin/config-include/GridHypergrid.ini
index ab29018..d69a945 100644
--- a/bin/config-include/GridHypergrid.ini
+++ b/bin/config-include/GridHypergrid.ini
@@ -30,6 +30,12 @@
30 SimulationServiceInConnector = true 30 SimulationServiceInConnector = true
31 LibraryModule = true 31 LibraryModule = true
32 32
33[SimulationDataStore]
34 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
35
36[EstateDataStore]
37 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService"
38
33[AssetService] 39[AssetService]
34 LocalGridAssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector" 40 LocalGridAssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector"
35 HypergridAssetService = "OpenSim.Services.Connectors.dll:HGAssetServiceConnector" 41 HypergridAssetService = "OpenSim.Services.Connectors.dll:HGAssetServiceConnector"
diff --git a/bin/config-include/HyperSimianGrid.ini b/bin/config-include/HyperSimianGrid.ini
index 87ffe69..29b51de 100644
--- a/bin/config-include/HyperSimianGrid.ini
+++ b/bin/config-include/HyperSimianGrid.ini
@@ -21,13 +21,13 @@
21 Include-Common = "config-include/GridCommon.ini" 21 Include-Common = "config-include/GridCommon.ini"
22 22
23[Modules] 23[Modules]
24 GridServices = "OpenSim.Services.Connectors.dll:SimianGridServiceConnector" 24 GridServices = "SimianGridServiceConnector"
25 PresenceServices = "OpenSim.Services.Connectors.dll:SimianPresenceServiceConnector" 25 PresenceServices = "SimianPresenceServiceConnector"
26 UserAccountServices = "OpenSim.Services.Connectors.dll:SimianUserAccountServiceConnector" 26 UserAccountServices = "SimianUserAccountServiceConnector"
27 AuthenticationServices = "OpenSim.Services.Connectors.dll:SimianAuthenticationServiceConnector" 27 AuthenticationServices = "SimianAuthenticationServiceConnector"
28 AssetServices = "HGAssetBroker" 28 AssetServices = "HGAssetBroker"
29 InventoryServices = "HGInventoryBroker" 29 InventoryServices = "HGInventoryBroker"
30 AvatarServices = "OpenSim.Services.Connectors.dll:SimianAvatarServiceConnector" 30 AvatarServices = "SimianAvatarServiceConnector"
31 31
32 NeighbourServices = "RemoteNeighbourServicesConnector" 32 NeighbourServices = "RemoteNeighbourServicesConnector"
33 SimulationServices = "RemoteSimulationConnectorModule" 33 SimulationServices = "RemoteSimulationConnectorModule"
@@ -41,6 +41,12 @@
41 41
42 AssetCaching = "FlotsamAssetCache" 42 AssetCaching = "FlotsamAssetCache"
43 43
44[SimulationDataStore]
45 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
46
47[EstateDataStore]
48 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService"
49
44[Friends] 50[Friends]
45 Connector = "OpenSim.Services.Connectors.dll:SimianFriendsServiceConnector" 51 Connector = "OpenSim.Services.Connectors.dll:SimianFriendsServiceConnector"
46 52
@@ -74,4 +80,4 @@
74 ServicesConnectorModule = SimianGroupsServicesConnector 80 ServicesConnectorModule = SimianGroupsServicesConnector
75 81
76[Profiles] 82[Profiles]
77 Module = SimianProfiles 83 Module = "SimianProfiles"
diff --git a/bin/config-include/SimianGrid.ini b/bin/config-include/SimianGrid.ini
index 65d4ea6..239ce30 100644
--- a/bin/config-include/SimianGrid.ini
+++ b/bin/config-include/SimianGrid.ini
@@ -21,13 +21,13 @@
21 Include-Common = "config-include/GridCommon.ini" 21 Include-Common = "config-include/GridCommon.ini"
22 22
23[Modules] 23[Modules]
24 GridServices = "OpenSim.Services.Connectors.dll:SimianGridServiceConnector" 24 GridServices = "SimianGridServiceConnector"
25 PresenceServices = "OpenSim.Services.Connectors.dll:SimianPresenceServiceConnector" 25 PresenceServices = "SimianPresenceServiceConnector"
26 UserAccountServices = "OpenSim.Services.Connectors.dll:SimianUserAccountServiceConnector" 26 UserAccountServices = "SimianUserAccountServiceConnector"
27 AuthenticationServices = "OpenSim.Services.Connectors.dll:SimianAuthenticationServiceConnector" 27 AuthenticationServices = "SimianAuthenticationServiceConnector"
28 AssetServices = "OpenSim.Services.Connectors.dll:SimianAssetServiceConnector" 28 AssetServices = "SimianAssetServiceConnector"
29 InventoryServices = "OpenSim.Services.Connectors.dll:SimianInventoryServiceConnector" 29 InventoryServices = "SimianInventoryServiceConnector"
30 AvatarServices = "OpenSim.Services.Connectors.dll:SimianAvatarServiceConnector" 30 AvatarServices = "SimianAvatarServiceConnector"
31 31
32 NeighbourServices = "RemoteNeighbourServicesConnector" 32 NeighbourServices = "RemoteNeighbourServicesConnector"
33 SimulationServices = "RemoteSimulationConnectorModule" 33 SimulationServices = "RemoteSimulationConnectorModule"
@@ -41,6 +41,12 @@
41 41
42 AssetCaching = "FlotsamAssetCache" 42 AssetCaching = "FlotsamAssetCache"
43 43
44[SimulationDataStore]
45 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
46
47[EstateDataStore]
48 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService"
49
44[Friends] 50[Friends]
45 Connector = "OpenSim.Services.Connectors.dll:SimianFriendsServiceConnector" 51 Connector = "OpenSim.Services.Connectors.dll:SimianFriendsServiceConnector"
46 52
@@ -67,4 +73,4 @@
67 ServicesConnectorModule = SimianGroupsServicesConnector 73 ServicesConnectorModule = SimianGroupsServicesConnector
68 74
69[Profiles] 75[Profiles]
70 Module = SimianProfiles 76 Module = "SimianProfiles"
diff --git a/bin/config-include/Standalone.ini b/bin/config-include/Standalone.ini
index eae9801..d74b50e 100644
--- a/bin/config-include/Standalone.ini
+++ b/bin/config-include/Standalone.ini
@@ -22,6 +22,12 @@
22 LLLoginServiceInConnector = true 22 LLLoginServiceInConnector = true
23 GridInfoServiceInConnector = true 23 GridInfoServiceInConnector = true
24 24
25[SimulationDataStore]
26 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
27
28[EstateDataStore]
29 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService"
30
25[AssetService] 31[AssetService]
26 LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService" 32 LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
27 33
diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example
index f862960..96ef602 100644
--- a/bin/config-include/StandaloneCommon.ini.example
+++ b/bin/config-include/StandaloneCommon.ini.example
@@ -18,6 +18,8 @@
18 ; Change the connection string to your db details 18 ; Change the connection string to your db details
19 ;StorageProvider = "OpenSim.Data.MySQL.dll" 19 ;StorageProvider = "OpenSim.Data.MySQL.dll"
20 ;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;" 20 ;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
21 ; Uncomment this line if you are using MySQL and want to use a different database for estates
22 ;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
21 23
22[AssetService] 24[AssetService]
23 DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll" 25 DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
diff --git a/prebuild.xml b/prebuild.xml
index 8df4d73..6a995f7 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8" ?> 1<?xml version="1.0" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" version="1.7"> 2<Prebuild version="1.7" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
3 <Solution name="OpenSim" activeConfig="Debug" path="./" version="0.5.0-$Rev$"> 3 <Solution activeConfig="Debug" name="OpenSim" path="./" version="0.5.0-$Rev$">
4 <Configuration name="Debug"> 4 <Configuration name="Debug">
5 <Options> 5 <Options>
6 <CompilerDefines>TRACE;DEBUG</CompilerDefines> 6 <CompilerDefines>TRACE;DEBUG</CompilerDefines>
@@ -9,7 +9,7 @@
9 <AllowUnsafe>false</AllowUnsafe> 9 <AllowUnsafe>false</AllowUnsafe>
10 <WarningLevel>4</WarningLevel> 10 <WarningLevel>4</WarningLevel>
11 <WarningsAsErrors>false</WarningsAsErrors> 11 <WarningsAsErrors>false</WarningsAsErrors>
12 <SuppressWarnings></SuppressWarnings> 12 <SuppressWarnings/>
13 <OutputPath>bin</OutputPath> 13 <OutputPath>bin</OutputPath>
14 <DebugInformation>true</DebugInformation> 14 <DebugInformation>true</DebugInformation>
15 <IncrementalBuild>true</IncrementalBuild> 15 <IncrementalBuild>true</IncrementalBuild>
@@ -24,7 +24,7 @@
24 <AllowUnsafe>false</AllowUnsafe> 24 <AllowUnsafe>false</AllowUnsafe>
25 <WarningLevel>4</WarningLevel> 25 <WarningLevel>4</WarningLevel>
26 <WarningsAsErrors>false</WarningsAsErrors> 26 <WarningsAsErrors>false</WarningsAsErrors>
27 <SuppressWarnings></SuppressWarnings> 27 <SuppressWarnings/>
28 <OutputPath>bin</OutputPath> 28 <OutputPath>bin</OutputPath>
29 <DebugInformation>false</DebugInformation> 29 <DebugInformation>false</DebugInformation>
30 <IncrementalBuild>true</IncrementalBuild> 30 <IncrementalBuild>true</IncrementalBuild>
@@ -71,23 +71,23 @@
71 <Reference name="System"/> 71 <Reference name="System"/>
72 <Reference name="System.Xml"/> 72 <Reference name="System.Xml"/>
73 <Reference name="System.Web"/> 73 <Reference name="System.Web"/>
74 <Reference name="OpenMetaverse.StructuredData.dll"/> 74 <Reference name="OpenMetaverse.StructuredData" path="../../../../bin/"/>
75 <Reference name="OpenMetaverseTypes.dll"/> 75 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
76 <Reference name="XMLRPC.dll"/> 76 <Reference name="XMLRPC" path="../../../../bin/"/>
77 <Reference name="log4net.dll"/> 77 <Reference name="log4net" path="../../../../bin/"/>
78 <Reference name="HttpServer_OpenSim.dll"/> 78 <Reference name="HttpServer_OpenSim" path="../../../../bin/"/>
79 79
80 <Files> 80 <Files>
81 <Match pattern="*.cs" recurse="true"> 81 <Match pattern="*.cs" recurse="true">
82 <Exclude pattern="Tests" /> 82 <Exclude pattern="Tests"/>
83 83
84 <!-- on temporary suspension --> 84 <!-- on temporary suspension -->
85 <Exclude pattern="OSHttpHandler\.cs" /> 85 <Exclude pattern="OSHttpHandler\.cs"/>
86 <Exclude pattern="OSHttpHttpHandler\.cs" /> 86 <Exclude pattern="OSHttpHttpHandler\.cs"/>
87 <Exclude pattern="OSHttpRequestPump\.cs" /> 87 <Exclude pattern="OSHttpRequestPump\.cs"/>
88 <Exclude pattern="OSHttpRequestQueue\.cs" /> 88 <Exclude pattern="OSHttpRequestQueue\.cs"/>
89 <Exclude pattern="OSHttpServer.*\.cs" /> 89 <Exclude pattern="OSHttpServer.*\.cs"/>
90 <Exclude pattern="OSHttpXmlRpcHandler.*\.cs" /> 90 <Exclude pattern="OSHttpXmlRpcHandler.*\.cs"/>
91 </Match> 91 </Match>
92 </Files> 92 </Files>
93 </Project> 93 </Project>
@@ -108,10 +108,10 @@
108 <Reference name="System"/> 108 <Reference name="System"/>
109 <Reference name="System.Xml"/> 109 <Reference name="System.Xml"/>
110 <Reference name="System.Web"/> 110 <Reference name="System.Web"/>
111 <Reference name="log4net.dll"/> 111 <Reference name="log4net" path="../../../bin/"/>
112 <Reference name="Nini.dll"/> 112 <Reference name="Nini" path="../../../bin/"/>
113 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 113 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
114 <Reference name="OpenMetaverseTypes.dll"/> 114 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
115 <Files> 115 <Files>
116 <Match pattern="*.cs" recurse="true"/> 116 <Match pattern="*.cs" recurse="true"/>
117 </Files> 117 </Files>
@@ -158,17 +158,17 @@
158 <Reference name="System.Data"/> 158 <Reference name="System.Data"/>
159 <Reference name="System.Drawing"/> 159 <Reference name="System.Drawing"/>
160 <Reference name="System.Web"/> 160 <Reference name="System.Web"/>
161 <Reference name="BclExtras35.dll"/> 161 <Reference name="BclExtras35" path="../../bin/"/>
162 <Reference name="OpenMetaverseTypes.dll"/> 162 <Reference name="OpenMetaverseTypes" path="../../bin/"/>
163 <Reference name="OpenMetaverse.dll"/> 163 <Reference name="OpenMetaverse" path="../../bin/"/>
164 <Reference name="OpenMetaverse.StructuredData.dll"/> 164 <Reference name="OpenMetaverse.StructuredData" path="../../bin/"/>
165 <Reference name="XMLRPC.dll"/> 165 <Reference name="XMLRPC" path="../../bin/"/>
166 <Reference name="OpenSim.Framework.Console"/> 166 <Reference name="OpenSim.Framework.Console"/>
167 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 167 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
168 <Reference name="Nini.dll" /> 168 <Reference name="Nini" path="../../bin/"/>
169 <Reference name="log4net.dll"/> 169 <Reference name="log4net" path="../../bin/"/>
170 <Reference name="Mono.Addins.dll" /> 170 <Reference name="Mono.Addins" path="../../bin/"/>
171 <Reference name="SmartThreadPool" /> 171 <Reference name="SmartThreadPool"/>
172 <Files> 172 <Files>
173 <Match pattern="*.cs" recurse="false"/> 173 <Match pattern="*.cs" recurse="false"/>
174 <Match path="Client" pattern="*.cs" recurse="true"/> 174 <Match path="Client" pattern="*.cs" recurse="true"/>
@@ -190,9 +190,9 @@
190 <ReferencePath>../../../bin/</ReferencePath> 190 <ReferencePath>../../../bin/</ReferencePath>
191 <Reference name="System"/> 191 <Reference name="System"/>
192 <Reference name="System.Xml"/> 192 <Reference name="System.Xml"/>
193 <Reference name="log4net.dll"/> 193 <Reference name="log4net" path="../../../bin/"/>
194 <Reference name="OpenMetaverse.dll" /> 194 <Reference name="OpenMetaverse" path="../../../bin/"/>
195 <Reference name="OpenMetaverseTypes.dll"/> 195 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
196 <Reference name="OpenSim.Framework"/> 196 <Reference name="OpenSim.Framework"/>
197 197
198 <Files> 198 <Files>
@@ -216,9 +216,9 @@
216 216
217 <ReferencePath>../../../bin/</ReferencePath> 217 <ReferencePath>../../../bin/</ReferencePath>
218 <Reference name="System"/> 218 <Reference name="System"/>
219 <Reference name="OpenMetaverseTypes.dll"/> 219 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
220 <Reference name="OpenMetaverse.dll"/> 220 <Reference name="OpenMetaverse" path="../../../bin/"/>
221 <Reference name="OpenMetaverse.StructuredData.dll"/> 221 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
222 <Reference name="OpenSim.Framework"/> 222 <Reference name="OpenSim.Framework"/>
223 223
224 <Files> 224 <Files>
@@ -242,16 +242,16 @@
242 <Reference name="System"/> 242 <Reference name="System"/>
243 <Reference name="System.Xml"/> 243 <Reference name="System.Xml"/>
244 <Reference name="System.Data"/> 244 <Reference name="System.Data"/>
245 <Reference name="XMLRPC.dll"/> 245 <Reference name="XMLRPC" path="../../bin/"/>
246 <Reference name="OpenMetaverse.dll"/> 246 <Reference name="OpenMetaverse" path="../../bin/"/>
247 <Reference name="OpenMetaverseTypes.dll"/> 247 <Reference name="OpenMetaverseTypes" path="../../bin/"/>
248 <Reference name="OpenSim.Framework"/> 248 <Reference name="OpenSim.Framework"/>
249 <Reference name="log4net.dll"/> 249 <Reference name="log4net" path="../../bin/"/>
250 <Reference name="Mono.Addins.dll" /> 250 <Reference name="Mono.Addins" path="../../bin/"/>
251 <Files> 251 <Files>
252 <Match pattern="*.cs" recurse="false"/> 252 <Match pattern="*.cs" recurse="false"/>
253 <Match pattern="Properties/*.cs" recurse="false"/> 253 <Match pattern="Properties/*.cs" recurse="false"/>
254 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 254 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
255 </Files> 255 </Files>
256 </Project> 256 </Project>
257 257
@@ -270,8 +270,8 @@
270 <ReferencePath>../../../../bin/</ReferencePath> 270 <ReferencePath>../../../../bin/</ReferencePath>
271 <Reference name="System"/> 271 <Reference name="System"/>
272 <Reference name="System.Xml"/> 272 <Reference name="System.Xml"/>
273 <Reference name="OpenMetaverseTypes.dll"/> 273 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
274 <Reference name="XMLRPC.dll"/> 274 <Reference name="XMLRPC" path="../../../../bin/"/>
275 <Reference name="OpenSim.Framework"/> 275 <Reference name="OpenSim.Framework"/>
276 <Reference name="OpenSim.Framework.Console"/> 276 <Reference name="OpenSim.Framework.Console"/>
277 <Reference name="OpenSim.Data"/> 277 <Reference name="OpenSim.Data"/>
@@ -295,13 +295,13 @@
295 <ReferencePath>../../../../bin/</ReferencePath> 295 <ReferencePath>../../../../bin/</ReferencePath>
296 <Reference name="System"/> 296 <Reference name="System"/>
297 <Reference name="System.Xml"/> 297 <Reference name="System.Xml"/>
298 <Reference name="OpenMetaverseTypes.dll"/> 298 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
299 <Reference name="XMLRPC.dll"/> 299 <Reference name="XMLRPC" path="../../../../bin/"/>
300 <Reference name="OpenSim.Framework"/> 300 <Reference name="OpenSim.Framework"/>
301 <Reference name="OpenSim.Framework.Console"/> 301 <Reference name="OpenSim.Framework.Console"/>
302 <Reference name="OpenSim.Framework.Configuration.XML"/> 302 <Reference name="OpenSim.Framework.Configuration.XML"/>
303 <Reference name="OpenSim.Data"/> 303 <Reference name="OpenSim.Data"/>
304 <Reference name="log4net.dll"/> 304 <Reference name="log4net" path="../../../../bin/"/>
305 <Files> 305 <Files>
306 <Match pattern="*.cs" recurse="true"/> 306 <Match pattern="*.cs" recurse="true"/>
307 </Files> 307 </Files>
@@ -324,9 +324,9 @@
324 <Reference name="System.Xml"/> 324 <Reference name="System.Xml"/>
325 <Reference name="OpenSim.Framework.Console"/> 325 <Reference name="OpenSim.Framework.Console"/>
326 <Reference name="OpenSim.Framework"/> 326 <Reference name="OpenSim.Framework"/>
327 <Reference name="OpenMetaverseTypes.dll"/> 327 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
328 <Reference name="Nini.dll" /> 328 <Reference name="Nini" path="../../../../bin/"/>
329 <Reference name="log4net.dll"/> 329 <Reference name="log4net" path="../../../../bin/"/>
330 <Files> 330 <Files>
331 <Match pattern="*.cs" recurse="true"/> 331 <Match pattern="*.cs" recurse="true"/>
332 </Files> 332 </Files>
@@ -347,12 +347,12 @@
347 <ReferencePath>../../../../bin/</ReferencePath> 347 <ReferencePath>../../../../bin/</ReferencePath>
348 <Reference name="System"/> 348 <Reference name="System"/>
349 <Reference name="System.Xml"/> 349 <Reference name="System.Xml"/>
350 <Reference name="OpenMetaverseTypes.dll"/> 350 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
351 <Reference name="XMLRPC.dll"/> 351 <Reference name="XMLRPC" path="../../../../bin/"/>
352 <Reference name="OpenSim.Framework"/> 352 <Reference name="OpenSim.Framework"/>
353 <Reference name="OpenSim.Framework.Console"/> 353 <Reference name="OpenSim.Framework.Console"/>
354 <Reference name="Nini.dll" /> 354 <Reference name="Nini" path="../../../../bin/"/>
355 <Reference name="log4net.dll"/> 355 <Reference name="log4net" path="../../../../bin/"/>
356 <Files> 356 <Files>
357 <Match pattern="*.cs" recurse="true"/> 357 <Match pattern="*.cs" recurse="true"/>
358 </Files> 358 </Files>
@@ -373,11 +373,11 @@
373 <ReferencePath>../../../../bin/</ReferencePath> 373 <ReferencePath>../../../../bin/</ReferencePath>
374 <Reference name="System"/> 374 <Reference name="System"/>
375 <Reference name="System.Xml"/> 375 <Reference name="System.Xml"/>
376 <Reference name="OpenMetaverseTypes.dll"/> 376 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
377 <Reference name="XMLRPC.dll"/> 377 <Reference name="XMLRPC" path="../../../../bin/"/>
378 <Reference name="OpenSim.Framework"/> 378 <Reference name="OpenSim.Framework"/>
379 <Reference name="OpenSim.Framework.Console"/> 379 <Reference name="OpenSim.Framework.Console"/>
380 <Reference name="Nini.dll" /> 380 <Reference name="Nini" path="../../../../bin/"/>
381 <Files> 381 <Files>
382 <Match pattern="*.cs" recurse="true"/> 382 <Match pattern="*.cs" recurse="true"/>
383 </Files> 383 </Files>
@@ -403,11 +403,11 @@
403 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 403 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
404 <Reference name="OpenSim.Framework.Console"/> 404 <Reference name="OpenSim.Framework.Console"/>
405 <Reference name="OpenSim.Framework.Statistics"/> 405 <Reference name="OpenSim.Framework.Statistics"/>
406 <Reference name="OpenMetaverse.StructuredData.dll"/> 406 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
407 <Reference name="OpenMetaverseTypes.dll"/> 407 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
408 <Reference name="XMLRPC.dll"/> 408 <Reference name="XMLRPC" path="../../../bin/"/>
409 <Reference name="log4net.dll"/> 409 <Reference name="log4net" path="../../../bin/"/>
410 <Reference name="HttpServer_OpenSim.dll"/> 410 <Reference name="HttpServer_OpenSim" path="../../../bin/"/>
411 411
412 <Files> 412 <Files>
413 <Match pattern="*.cs" recurse="false"> 413 <Match pattern="*.cs" recurse="false">
@@ -429,13 +429,13 @@
429 429
430 <ReferencePath>../../../../bin/</ReferencePath> 430 <ReferencePath>../../../../bin/</ReferencePath>
431 <Reference name="System"/> 431 <Reference name="System"/>
432 <Reference name="System.Xml" /> 432 <Reference name="System.Xml"/>
433 <Reference name="OpenMetaverseTypes.dll"/> 433 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
434 <Reference name="OpenSim.Framework"/> 434 <Reference name="OpenSim.Framework"/>
435 <Reference name="OpenSim.Framework.Console"/> 435 <Reference name="OpenSim.Framework.Console"/>
436 <Reference name="nunit.framework.dll" /> 436 <Reference name="nunit.framework" path="../../../../bin/"/>
437 <Reference name="Nini.dll" /> 437 <Reference name="Nini" path="../../../../bin/"/>
438 <Reference name="log4net.dll"/> 438 <Reference name="log4net" path="../../../../bin/"/>
439 439
440 <Files> 440 <Files>
441 <Match pattern="*.cs" recurse="false"/> 441 <Match pattern="*.cs" recurse="false"/>
@@ -457,8 +457,8 @@
457 457
458 <ReferencePath>../../../../bin/</ReferencePath> 458 <ReferencePath>../../../../bin/</ReferencePath>
459 <Reference name="System"/> 459 <Reference name="System"/>
460 <Reference name="OpenMetaverseTypes.dll"/> 460 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
461 <Reference name="Nini.dll" /> 461 <Reference name="Nini" path="../../../../bin/"/>
462 <Reference name="OpenSim.Framework"/> 462 <Reference name="OpenSim.Framework"/>
463 <Reference name="OpenSim.Region.Physics.Manager"/> 463 <Reference name="OpenSim.Region.Physics.Manager"/>
464 <Files> 464 <Files>
@@ -480,8 +480,8 @@
480 480
481 <ReferencePath>../../../../bin/</ReferencePath> 481 <ReferencePath>../../../../bin/</ReferencePath>
482 <Reference name="System"/> 482 <Reference name="System"/>
483 <Reference name="OpenMetaverseTypes.dll"/> 483 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
484 <Reference name="Nini.dll" /> 484 <Reference name="Nini" path="../../../../bin/"/>
485 <Reference name="OpenSim.Framework"/> 485 <Reference name="OpenSim.Framework"/>
486 <Reference name="OpenSim.Region.Physics.Manager"/> 486 <Reference name="OpenSim.Region.Physics.Manager"/>
487 <Files> 487 <Files>
@@ -503,12 +503,12 @@
503 503
504 <ReferencePath>../../../../bin/</ReferencePath> 504 <ReferencePath>../../../../bin/</ReferencePath>
505 <Reference name="System"/> 505 <Reference name="System"/>
506 <Reference name="OpenMetaverseTypes.dll"/> 506 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
507 <Reference name="Nini.dll" /> 507 <Reference name="Nini" path="../../../../bin/"/>
508 <Reference name="PhysX_Wrapper_Dotnet.dll"/> 508 <Reference name="PhysX_Wrapper_Dotnet" path="../../../../bin/"/>
509 <Reference name="OpenSim.Framework"/> 509 <Reference name="OpenSim.Framework"/>
510 <Reference name="OpenSim.Region.Physics.Manager"/> 510 <Reference name="OpenSim.Region.Physics.Manager"/>
511 <Reference name="log4net.dll"/> 511 <Reference name="log4net" path="../../../../bin/"/>
512 <Files> 512 <Files>
513 <Match pattern="*.cs" recurse="true"/> 513 <Match pattern="*.cs" recurse="true"/>
514 </Files> 514 </Files>
@@ -529,13 +529,13 @@
529 <ReferencePath>../../../../bin/</ReferencePath> 529 <ReferencePath>../../../../bin/</ReferencePath>
530 <Reference name="System"/> 530 <Reference name="System"/>
531 <Reference name="System.Core"/> 531 <Reference name="System.Core"/>
532 <Reference name="OpenMetaverseTypes.dll"/> 532 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
533 <Reference name="Nini.dll" /> 533 <Reference name="Nini" path="../../../../bin/"/>
534 <Reference name="OpenSim.Framework"/> 534 <Reference name="OpenSim.Framework"/>
535 <Reference name="OpenSim.Framework.Console"/> 535 <Reference name="OpenSim.Framework.Console"/>
536 <Reference name="OpenSim.Region.Physics.Manager"/> 536 <Reference name="OpenSim.Region.Physics.Manager"/>
537 <Reference name="Ode.NET.dll" /> 537 <Reference name="Ode.NET" path="../../../../bin/"/>
538 <Reference name="log4net.dll"/> 538 <Reference name="log4net" path="../../../../bin/"/>
539 539
540 <Files> 540 <Files>
541 <Match pattern="*.cs" recurse="true"> 541 <Match pattern="*.cs" recurse="true">
@@ -588,14 +588,14 @@
588 588
589 <ReferencePath>../../../../bin/</ReferencePath> 589 <ReferencePath>../../../../bin/</ReferencePath>
590 <Reference name="System"/> 590 <Reference name="System"/>
591 <Reference name="OpenMetaverseTypes.dll"/> 591 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
592 <Reference name="Nini.dll" /> 592 <Reference name="Nini" path="../../../../bin/"/>
593 <Reference name="OpenSim.Framework"/> 593 <Reference name="OpenSim.Framework"/>
594 <Reference name="OpenSim.Framework.Console"/> 594 <Reference name="OpenSim.Framework.Console"/>
595 <Reference name="OpenSim.Region.Physics.Manager"/> 595 <Reference name="OpenSim.Region.Physics.Manager"/>
596 <Reference name="MonoXnaCompactMaths.dll"/> 596 <Reference name="MonoXnaCompactMaths" path="../../../../bin/"/>
597 <Reference name="Modified.XnaDevRu.BulletX.dll" /> 597 <Reference name="Modified.XnaDevRu.BulletX" path="../../../../bin/"/>
598 <Reference name="log4net.dll"/> 598 <Reference name="log4net" path="../../../../bin/"/>
599 599
600 <Files> 600 <Files>
601 <Match pattern="*.cs" recurse="true"/> 601 <Match pattern="*.cs" recurse="true"/>
@@ -617,14 +617,14 @@
617 <ReferencePath>../../../../bin/</ReferencePath> 617 <ReferencePath>../../../../bin/</ReferencePath>
618 <Reference name="System"/> 618 <Reference name="System"/>
619 <Reference name="System.Drawing"/> 619 <Reference name="System.Drawing"/>
620 <Reference name="CSJ2K.dll"/> 620 <Reference name="CSJ2K" path="../../../../bin/"/>
621 <Reference name="OpenMetaverseTypes.dll"/> 621 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
622 <Reference name="OpenMetaverse.dll"/> 622 <Reference name="OpenMetaverse" path="../../../../bin/"/>
623 <Reference name="Nini.dll" /> 623 <Reference name="Nini" path="../../../../bin/"/>
624 <Reference name="OpenSim.Framework"/> 624 <Reference name="OpenSim.Framework"/>
625 <Reference name="OpenSim.Framework.Console"/> 625 <Reference name="OpenSim.Framework.Console"/>
626 <Reference name="OpenSim.Region.Physics.Manager"/> 626 <Reference name="OpenSim.Region.Physics.Manager"/>
627 <Reference name="log4net.dll"/> 627 <Reference name="log4net" path="../../../../bin/"/>
628 628
629 <Files> 629 <Files>
630 <Match pattern="*.cs" recurse="true"/> 630 <Match pattern="*.cs" recurse="true"/>
@@ -645,14 +645,14 @@
645 645
646 <ReferencePath>../../../../bin/</ReferencePath> 646 <ReferencePath>../../../../bin/</ReferencePath>
647 <Reference name="System"/> 647 <Reference name="System"/>
648 <Reference name="OpenMetaverseTypes.dll"/> 648 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
649 <Reference name="Nini.dll" /> 649 <Reference name="Nini" path="../../../../bin/"/>
650 <Reference name="OpenSim.Framework"/> 650 <Reference name="OpenSim.Framework"/>
651 <Reference name="OpenSim.Framework.Console"/> 651 <Reference name="OpenSim.Framework.Console"/>
652 <Reference name="OpenSim.Region.Physics.Manager"/> 652 <Reference name="OpenSim.Region.Physics.Manager"/>
653 <Reference name="BulletDotNET.dll" /> 653 <Reference name="BulletDotNET" path="../../../../bin/"/>
654 <Reference name="nunit.framework.dll" /> 654 <Reference name="nunit.framework" path="../../../../bin/"/>
655 <Reference name="log4net.dll"/> 655 <Reference name="log4net" path="../../../../bin/"/>
656 656
657 <Files> 657 <Files>
658 <Match pattern="*.cs" recurse="true"/> 658 <Match pattern="*.cs" recurse="true"/>
@@ -673,14 +673,14 @@
673 673
674 <ReferencePath>../../../bin/</ReferencePath> 674 <ReferencePath>../../../bin/</ReferencePath>
675 <Reference name="System"/> 675 <Reference name="System"/>
676 <Reference name="OpenMetaverseTypes.dll"/> 676 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
677 <Reference name="OpenMetaverse.dll"/> 677 <Reference name="OpenMetaverse" path="../../../bin/"/>
678 <Reference name="OpenMetaverse.StructuredData.dll"/> 678 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
679 <Reference name="OpenSim.Framework"/> 679 <Reference name="OpenSim.Framework"/>
680 <Reference name="OpenSim.Framework.Console"/> 680 <Reference name="OpenSim.Framework.Console"/>
681 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 681 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
682 <Reference name="Nini.dll" /> 682 <Reference name="Nini" path="../../../bin/"/>
683 <Reference name="log4net.dll"/> 683 <Reference name="log4net" path="../../../bin/"/>
684 684
685 <Files> 685 <Files>
686 <Match pattern="*.cs" recurse="true"/> 686 <Match pattern="*.cs" recurse="true"/>
@@ -709,16 +709,16 @@
709 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 709 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
710 <Reference name="OpenSim.Framework.Statistics"/> 710 <Reference name="OpenSim.Framework.Statistics"/>
711 <Reference name="OpenSim.Services.Interfaces"/> 711 <Reference name="OpenSim.Services.Interfaces"/>
712 <Reference name="OpenMetaverseTypes.dll"/> 712 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
713 <!-- FIXME: The OpenMetaverse.dll reference can be dropped when the TransferRequestPacket reference is removed from the code --> 713 <!-- FIXME: The OpenMetaverse.dll reference can be dropped when the TransferRequestPacket reference is removed from the code -->
714 <Reference name="Nini.dll" /> 714 <Reference name="Nini" path="../../../bin/"/>
715 <Reference name="log4net.dll"/> 715 <Reference name="log4net" path="../../../bin/"/>
716 716
717 <Files> 717 <Files>
718 <Match pattern="*.cs" recurse="true"> 718 <Match pattern="*.cs" recurse="true">
719 <Exclude name="Tests" pattern="Tests"/> 719 <Exclude name="Tests" pattern="Tests"/>
720 </Match> 720 </Match>
721 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 721 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
722 </Files> 722 </Files>
723 </Project> 723 </Project>
724 724
@@ -740,26 +740,26 @@
740 <Reference name="System.Web"/> 740 <Reference name="System.Web"/>
741 <Reference name="OpenSim.Framework"/> 741 <Reference name="OpenSim.Framework"/>
742 <Reference name="OpenSim.Framework.AssetLoader.Filesystem"/> 742 <Reference name="OpenSim.Framework.AssetLoader.Filesystem"/>
743 <Reference name="OpenSim.Data" /> 743 <Reference name="OpenSim.Data"/>
744 <Reference name="OpenSim.Framework.Capabilities"/> 744 <Reference name="OpenSim.Framework.Capabilities"/>
745 <Reference name="OpenSim.Framework.Servers"/> 745 <Reference name="OpenSim.Framework.Servers"/>
746 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 746 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
747 <Reference name="OpenSim.Framework.Console"/> 747 <Reference name="OpenSim.Framework.Console"/>
748 <Reference name="OpenSim.Framework.Statistics"/> 748 <Reference name="OpenSim.Framework.Statistics"/>
749 <Reference name="OpenSim.Services.Interfaces"/> 749 <Reference name="OpenSim.Services.Interfaces"/>
750 <Reference name="OpenMetaverseTypes.dll"/> 750 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
751 <Reference name="OpenMetaverse.StructuredData.dll"/> 751 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
752 <!-- FIXME: The OpenMetaverse.dll reference can be dropped when the TransferRequestPacket reference is removed from the code --> 752 <!-- FIXME: The OpenMetaverse.dll reference can be dropped when the TransferRequestPacket reference is removed from the code -->
753 <Reference name="OpenMetaverse.dll"/> 753 <Reference name="OpenMetaverse" path="../../../bin/"/>
754 <Reference name="Nini.dll" /> 754 <Reference name="Nini" path="../../../bin/"/>
755 <Reference name="XMLRPC.dll"/> 755 <Reference name="XMLRPC" path="../../../bin/"/>
756 <Reference name="log4net.dll"/> 756 <Reference name="log4net" path="../../../bin/"/>
757 757
758 <Files> 758 <Files>
759 <Match pattern="*.cs" recurse="true"> 759 <Match pattern="*.cs" recurse="true">
760 <Exclude name="Tests" pattern="Tests"/> 760 <Exclude name="Tests" pattern="Tests"/>
761 </Match> 761 </Match>
762 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 762 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
763 </Files> 763 </Files>
764 </Project> 764 </Project>
765 765
@@ -782,14 +782,14 @@
782 <Reference name="System.Xml"/> 782 <Reference name="System.Xml"/>
783 <Reference name="System.Drawing"/> 783 <Reference name="System.Drawing"/>
784 <Reference name="System.Web"/> 784 <Reference name="System.Web"/>
785 <Reference name="OpenMetaverseTypes.dll"/> 785 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
786 <Reference name="OpenMetaverse.StructuredData.dll"/> 786 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
787 <Reference name="OpenMetaverse.dll"/> 787 <Reference name="OpenMetaverse" path="../../../bin/"/>
788 <Reference name="OpenSim.Services.Interfaces"/> 788 <Reference name="OpenSim.Services.Interfaces"/>
789 <Reference name="OpenSim.Framework"/> 789 <Reference name="OpenSim.Framework"/>
790 <Reference name="OpenSim.Framework.Capabilities"/> 790 <Reference name="OpenSim.Framework.Capabilities"/>
791 <Reference name="OpenSim.Framework.Communications"/> 791 <Reference name="OpenSim.Framework.Communications"/>
792 <Reference name="OpenSim.Data" /> 792 <Reference name="OpenSim.Data"/>
793 <Reference name="OpenSim.Framework.Console"/> 793 <Reference name="OpenSim.Framework.Console"/>
794 <Reference name="OpenSim.Framework.Servers"/> 794 <Reference name="OpenSim.Framework.Servers"/>
795 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 795 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -797,16 +797,16 @@
797 <Reference name="OpenSim.Region.Physics.Manager"/> 797 <Reference name="OpenSim.Region.Physics.Manager"/>
798 798
799 <!-- For scripting in funny languages by default --> 799 <!-- For scripting in funny languages by default -->
800 <Reference name="XMLRPC.dll"/> 800 <Reference name="XMLRPC" path="../../../bin/"/>
801 <Reference name="OpenSim.Framework.Communications"/> 801 <Reference name="OpenSim.Framework.Communications"/>
802 <Reference name="Nini.dll" /> 802 <Reference name="Nini" path="../../../bin/"/>
803 <Reference name="log4net.dll"/> 803 <Reference name="log4net" path="../../../bin/"/>
804 <Reference name="DotNetOpenMail.dll"/> 804 <Reference name="DotNetOpenMail" path="../../../bin/"/>
805 <Reference name="Mono.Addins.dll"/> 805 <Reference name="Mono.Addins" path="../../../bin/"/>
806 806
807 <Files> 807 <Files>
808 <Match pattern="*.cs" recurse="true"> 808 <Match pattern="*.cs" recurse="true">
809 <Exclude name="Tests" pattern="Tests" /> 809 <Exclude name="Tests" pattern="Tests"/>
810 </Match> 810 </Match>
811 </Files> 811 </Files>
812 </Project> 812 </Project>
@@ -832,13 +832,13 @@
832 <Reference name="System"/> 832 <Reference name="System"/>
833 <Reference name="System.Xml"/> 833 <Reference name="System.Xml"/>
834 <Reference name="System.Web"/> 834 <Reference name="System.Web"/>
835 <Reference name="OpenMetaverseTypes.dll"/> 835 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
836 <Reference name="OpenMetaverse.dll"/> 836 <Reference name="OpenMetaverse" path="../../../bin/"/>
837 <Reference name="OpenSim.Framework"/> 837 <Reference name="OpenSim.Framework"/>
838 <Reference name="OpenSim.Framework.Console"/> 838 <Reference name="OpenSim.Framework.Console"/>
839 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 839 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
840 <Reference name="Nini.dll" /> 840 <Reference name="Nini" path="../../../bin/"/>
841 <Reference name="log4net.dll"/> 841 <Reference name="log4net" path="../../../bin/"/>
842 842
843 <Files> 843 <Files>
844 <Match pattern="*.cs" recurse="true"/> 844 <Match pattern="*.cs" recurse="true"/>
@@ -859,13 +859,13 @@
859 859
860 <ReferencePath>../../../bin/</ReferencePath> 860 <ReferencePath>../../../bin/</ReferencePath>
861 <Reference name="System"/> 861 <Reference name="System"/>
862 <Reference name="OpenMetaverseTypes.dll"/> 862 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
863 <Reference name="OpenMetaverse.dll"/> 863 <Reference name="OpenMetaverse" path="../../../bin/"/>
864 <Reference name="OpenSim.Framework"/> 864 <Reference name="OpenSim.Framework"/>
865 <Reference name="OpenSim.Framework.Console"/> 865 <Reference name="OpenSim.Framework.Console"/>
866 <Reference name="OpenSim.Services.Interfaces"/> 866 <Reference name="OpenSim.Services.Interfaces"/>
867 <Reference name="Nini.dll" /> 867 <Reference name="Nini" path="../../../bin/"/>
868 <Reference name="log4net.dll"/> 868 <Reference name="log4net" path="../../../bin/"/>
869 869
870 <Files> 870 <Files>
871 <Match pattern="*.cs" recurse="true"/> 871 <Match pattern="*.cs" recurse="true"/>
@@ -887,16 +887,16 @@
887 <ReferencePath>../../../bin/</ReferencePath> 887 <ReferencePath>../../../bin/</ReferencePath>
888 <Reference name="System"/> 888 <Reference name="System"/>
889 <Reference name="System.Web"/> 889 <Reference name="System.Web"/>
890 <Reference name="OpenMetaverseTypes.dll"/> 890 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
891 <Reference name="OpenMetaverse.dll"/> 891 <Reference name="OpenMetaverse" path="../../../bin/"/>
892 <Reference name="OpenSim.Framework"/> 892 <Reference name="OpenSim.Framework"/>
893 <Reference name="OpenSim.Framework.Console"/> 893 <Reference name="OpenSim.Framework.Console"/>
894 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 894 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
895 <Reference name="OpenSim.Services.Interfaces"/> 895 <Reference name="OpenSim.Services.Interfaces"/>
896 <Reference name="OpenSim.Services.Base"/> 896 <Reference name="OpenSim.Services.Base"/>
897 <Reference name="OpenSim.Data"/> 897 <Reference name="OpenSim.Data"/>
898 <Reference name="Nini.dll" /> 898 <Reference name="Nini" path="../../../bin/"/>
899 <Reference name="log4net.dll"/> 899 <Reference name="log4net" path="../../../bin/"/>
900 900
901 <Files> 901 <Files>
902 <Match pattern="*.cs" recurse="true"/> 902 <Match pattern="*.cs" recurse="true"/>
@@ -918,16 +918,16 @@
918 <ReferencePath>../../../bin/</ReferencePath> 918 <ReferencePath>../../../bin/</ReferencePath>
919 <Reference name="System"/> 919 <Reference name="System"/>
920 <Reference name="System.Web"/> 920 <Reference name="System.Web"/>
921 <Reference name="OpenMetaverseTypes.dll"/> 921 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
922 <Reference name="OpenMetaverse.dll"/> 922 <Reference name="OpenMetaverse" path="../../../bin/"/>
923 <Reference name="OpenSim.Framework"/> 923 <Reference name="OpenSim.Framework"/>
924 <Reference name="OpenSim.Framework.Console"/> 924 <Reference name="OpenSim.Framework.Console"/>
925 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 925 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
926 <Reference name="OpenSim.Services.Interfaces"/> 926 <Reference name="OpenSim.Services.Interfaces"/>
927 <Reference name="OpenSim.Services.Base"/> 927 <Reference name="OpenSim.Services.Base"/>
928 <Reference name="OpenSim.Data"/> 928 <Reference name="OpenSim.Data"/>
929 <Reference name="Nini.dll" /> 929 <Reference name="Nini" path="../../../bin/"/>
930 <Reference name="log4net.dll"/> 930 <Reference name="log4net" path="../../../bin/"/>
931 931
932 <Files> 932 <Files>
933 <Match pattern="*.cs" recurse="true"/> 933 <Match pattern="*.cs" recurse="true"/>
@@ -948,22 +948,25 @@
948 948
949 <ReferencePath>../../../bin/</ReferencePath> 949 <ReferencePath>../../../bin/</ReferencePath>
950 <Reference name="System"/> 950 <Reference name="System"/>
951 <Reference name="System.Core"/>
951 <Reference name="System.Xml"/> 952 <Reference name="System.Xml"/>
952 <Reference name="System.Drawing"/> 953 <Reference name="System.Drawing"/>
953 <Reference name="OpenMetaverseTypes.dll"/> 954 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
954 <Reference name="OpenMetaverse.dll"/> 955 <Reference name="OpenMetaverse" path="../../../bin/"/>
955 <Reference name="OpenMetaverse.StructuredData.dll"/> 956 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
956 <Reference name="OpenSim.Services.Interfaces"/> 957 <Reference name="OpenSim.Data"/>
957 <Reference name="OpenSim.Framework"/> 958 <Reference name="OpenSim.Framework"/>
958 <Reference name="OpenSim.Framework.Communications"/> 959 <Reference name="OpenSim.Framework.Communications"/>
959 <Reference name="OpenSim.Framework.Console"/> 960 <Reference name="OpenSim.Framework.Console"/>
960 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 961 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
961 <Reference name="OpenSim.Region.Framework"/> 962 <Reference name="OpenSim.Region.Framework"/>
962 <Reference name="OpenSim.Server.Base"/> 963 <Reference name="OpenSim.Server.Base"/>
963 <Reference name="Mono.Addins" /> 964 <Reference name="OpenSim.Services.Base"/>
964 <Reference name="Nini.dll" /> 965 <Reference name="OpenSim.Services.Interfaces"/>
965 <Reference name="log4net.dll"/> 966 <Reference name="Mono.Addins" path="../../../bin/"/>
966 <Reference name="XMLRPC.dll" /> 967 <Reference name="Nini" path="../../../bin/"/>
968 <Reference name="log4net" path="../../../bin/"/>
969 <Reference name="XMLRPC" path="../../../bin/"/>
967 970
968 <Files> 971 <Files>
969 <Match pattern="*.cs" recurse="true"/> 972 <Match pattern="*.cs" recurse="true"/>
@@ -984,8 +987,8 @@
984 987
985 <ReferencePath>../../../bin/</ReferencePath> 988 <ReferencePath>../../../bin/</ReferencePath>
986 <Reference name="System"/> 989 <Reference name="System"/>
987 <Reference name="OpenMetaverseTypes.dll"/> 990 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
988 <Reference name="OpenMetaverse.dll"/> 991 <Reference name="OpenMetaverse" path="../../../bin/"/>
989 <Reference name="OpenSim.Framework"/> 992 <Reference name="OpenSim.Framework"/>
990 <Reference name="OpenSim.Framework.Console"/> 993 <Reference name="OpenSim.Framework.Console"/>
991 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 994 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -993,8 +996,8 @@
993 <Reference name="OpenSim.Services.Base"/> 996 <Reference name="OpenSim.Services.Base"/>
994 <Reference name="OpenSim.Services.Connectors"/> 997 <Reference name="OpenSim.Services.Connectors"/>
995 <Reference name="OpenSim.Data"/> 998 <Reference name="OpenSim.Data"/>
996 <Reference name="Nini.dll" /> 999 <Reference name="Nini" path="../../../bin/"/>
997 <Reference name="log4net.dll"/> 1000 <Reference name="log4net" path="../../../bin/"/>
998 1001
999 <Files> 1002 <Files>
1000 <Match pattern="*.cs" recurse="true"/> 1003 <Match pattern="*.cs" recurse="true"/>
@@ -1015,8 +1018,8 @@
1015 1018
1016 <ReferencePath>../../../bin/</ReferencePath> 1019 <ReferencePath>../../../bin/</ReferencePath>
1017 <Reference name="System"/> 1020 <Reference name="System"/>
1018 <Reference name="OpenMetaverseTypes.dll"/> 1021 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1019 <Reference name="OpenMetaverse.dll"/> 1022 <Reference name="OpenMetaverse" path="../../../bin/"/>
1020 <Reference name="OpenSim.Framework"/> 1023 <Reference name="OpenSim.Framework"/>
1021 <Reference name="OpenSim.Framework.Console"/> 1024 <Reference name="OpenSim.Framework.Console"/>
1022 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1025 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -1024,8 +1027,8 @@
1024 <Reference name="OpenSim.Services.Base"/> 1027 <Reference name="OpenSim.Services.Base"/>
1025 <Reference name="OpenSim.Services.Connectors"/> 1028 <Reference name="OpenSim.Services.Connectors"/>
1026 <Reference name="OpenSim.Data"/> 1029 <Reference name="OpenSim.Data"/>
1027 <Reference name="Nini.dll" /> 1030 <Reference name="Nini" path="../../../bin/"/>
1028 <Reference name="log4net.dll"/> 1031 <Reference name="log4net" path="../../../bin/"/>
1029 1032
1030 <Files> 1033 <Files>
1031 <Match pattern="*.cs" recurse="true"/> 1034 <Match pattern="*.cs" recurse="true"/>
@@ -1046,8 +1049,8 @@
1046 1049
1047 <ReferencePath>../../../bin/</ReferencePath> 1050 <ReferencePath>../../../bin/</ReferencePath>
1048 <Reference name="System"/> 1051 <Reference name="System"/>
1049 <Reference name="OpenMetaverseTypes.dll"/> 1052 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1050 <Reference name="OpenMetaverse.dll"/> 1053 <Reference name="OpenMetaverse" path="../../../bin/"/>
1051 <Reference name="OpenSim.Framework"/> 1054 <Reference name="OpenSim.Framework"/>
1052 <Reference name="OpenSim.Framework.Console"/> 1055 <Reference name="OpenSim.Framework.Console"/>
1053 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1056 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -1055,8 +1058,8 @@
1055 <Reference name="OpenSim.Services.Base"/> 1058 <Reference name="OpenSim.Services.Base"/>
1056 <Reference name="OpenSim.Services.Connectors"/> 1059 <Reference name="OpenSim.Services.Connectors"/>
1057 <Reference name="OpenSim.Data"/> 1060 <Reference name="OpenSim.Data"/>
1058 <Reference name="Nini.dll" /> 1061 <Reference name="Nini" path="../../../bin/"/>
1059 <Reference name="log4net.dll"/> 1062 <Reference name="log4net" path="../../../bin/"/>
1060 1063
1061 <Files> 1064 <Files>
1062 <Match pattern="*.cs" recurse="true"/> 1065 <Match pattern="*.cs" recurse="true"/>
@@ -1077,8 +1080,8 @@
1077 1080
1078 <ReferencePath>../../../bin/</ReferencePath> 1081 <ReferencePath>../../../bin/</ReferencePath>
1079 <Reference name="System"/> 1082 <Reference name="System"/>
1080 <Reference name="OpenMetaverseTypes.dll"/> 1083 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1081 <Reference name="OpenMetaverse.dll"/> 1084 <Reference name="OpenMetaverse" path="../../../bin/"/>
1082 <Reference name="OpenSim.Framework"/> 1085 <Reference name="OpenSim.Framework"/>
1083 <Reference name="OpenSim.Framework.Console"/> 1086 <Reference name="OpenSim.Framework.Console"/>
1084 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1087 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -1086,8 +1089,8 @@
1086 <Reference name="OpenSim.Services.Base"/> 1089 <Reference name="OpenSim.Services.Base"/>
1087 <Reference name="OpenSim.Services.Connectors"/> 1090 <Reference name="OpenSim.Services.Connectors"/>
1088 <Reference name="OpenSim.Data"/> 1091 <Reference name="OpenSim.Data"/>
1089 <Reference name="Nini.dll" /> 1092 <Reference name="Nini" path="../../../bin/"/>
1090 <Reference name="log4net.dll"/> 1093 <Reference name="log4net" path="../../../bin/"/>
1091 1094
1092 <Files> 1095 <Files>
1093 <Match pattern="*.cs" recurse="true"/> 1096 <Match pattern="*.cs" recurse="true"/>
@@ -1109,8 +1112,8 @@
1109 <ReferencePath>../../../bin/</ReferencePath> 1112 <ReferencePath>../../../bin/</ReferencePath>
1110 <Reference name="System"/> 1113 <Reference name="System"/>
1111 <Reference name="System.Xml"/> 1114 <Reference name="System.Xml"/>
1112 <Reference name="OpenMetaverseTypes.dll"/> 1115 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1113 <Reference name="OpenMetaverse.dll"/> 1116 <Reference name="OpenMetaverse" path="../../../bin/"/>
1114 <Reference name="OpenSim.Framework"/> 1117 <Reference name="OpenSim.Framework"/>
1115 <Reference name="OpenSim.Framework.Console"/> 1118 <Reference name="OpenSim.Framework.Console"/>
1116 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1119 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -1119,8 +1122,8 @@
1119 <Reference name="OpenSim.Services.Connectors"/> 1122 <Reference name="OpenSim.Services.Connectors"/>
1120 <Reference name="OpenSim.Data"/> 1123 <Reference name="OpenSim.Data"/>
1121 <Reference name="OpenSim.Server.Base"/> 1124 <Reference name="OpenSim.Server.Base"/>
1122 <Reference name="Nini.dll" /> 1125 <Reference name="Nini" path="../../../bin/"/>
1123 <Reference name="log4net.dll"/> 1126 <Reference name="log4net" path="../../../bin/"/>
1124 1127
1125 <Files> 1128 <Files>
1126 <Match pattern="*.cs" recurse="true"/> 1129 <Match pattern="*.cs" recurse="true"/>
@@ -1141,8 +1144,8 @@
1141 1144
1142 <ReferencePath>../../../bin/</ReferencePath> 1145 <ReferencePath>../../../bin/</ReferencePath>
1143 <Reference name="System"/> 1146 <Reference name="System"/>
1144 <Reference name="OpenMetaverseTypes.dll"/> 1147 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1145 <Reference name="OpenMetaverse.dll"/> 1148 <Reference name="OpenMetaverse" path="../../../bin/"/>
1146 <Reference name="OpenSim.Framework"/> 1149 <Reference name="OpenSim.Framework"/>
1147 <Reference name="OpenSim.Framework.Console"/> 1150 <Reference name="OpenSim.Framework.Console"/>
1148 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1151 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -1150,8 +1153,8 @@
1150 <Reference name="OpenSim.Services.Base"/> 1153 <Reference name="OpenSim.Services.Base"/>
1151 <Reference name="OpenSim.Services.Connectors"/> 1154 <Reference name="OpenSim.Services.Connectors"/>
1152 <Reference name="OpenSim.Data"/> 1155 <Reference name="OpenSim.Data"/>
1153 <Reference name="Nini.dll" /> 1156 <Reference name="Nini" path="../../../bin/"/>
1154 <Reference name="log4net.dll"/> 1157 <Reference name="log4net" path="../../../bin/"/>
1155 1158
1156 <Files> 1159 <Files>
1157 <Match pattern="*.cs" recurse="true"/> 1160 <Match pattern="*.cs" recurse="true"/>
@@ -1172,8 +1175,8 @@
1172 1175
1173 <ReferencePath>../../../bin/</ReferencePath> 1176 <ReferencePath>../../../bin/</ReferencePath>
1174 <Reference name="System"/> 1177 <Reference name="System"/>
1175 <Reference name="OpenMetaverseTypes.dll"/> 1178 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1176 <Reference name="OpenMetaverse.dll"/> 1179 <Reference name="OpenMetaverse" path="../../../bin/"/>
1177 <Reference name="OpenSim.Framework"/> 1180 <Reference name="OpenSim.Framework"/>
1178 <Reference name="OpenSim.Framework.Console"/> 1181 <Reference name="OpenSim.Framework.Console"/>
1179 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1182 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -1181,8 +1184,8 @@
1181 <Reference name="OpenSim.Services.Base"/> 1184 <Reference name="OpenSim.Services.Base"/>
1182 <Reference name="OpenSim.Services.Connectors"/> 1185 <Reference name="OpenSim.Services.Connectors"/>
1183 <Reference name="OpenSim.Data"/> 1186 <Reference name="OpenSim.Data"/>
1184 <Reference name="Nini.dll" /> 1187 <Reference name="Nini" path="../../../bin/"/>
1185 <Reference name="log4net.dll"/> 1188 <Reference name="log4net" path="../../../bin/"/>
1186 1189
1187 <Files> 1190 <Files>
1188 <Match pattern="*.cs" recurse="true"/> 1191 <Match pattern="*.cs" recurse="true"/>
@@ -1204,8 +1207,8 @@
1204 <ReferencePath>../../../bin/</ReferencePath> 1207 <ReferencePath>../../../bin/</ReferencePath>
1205 <Reference name="System"/> 1208 <Reference name="System"/>
1206 <Reference name="System.Xml"/> 1209 <Reference name="System.Xml"/>
1207 <Reference name="OpenMetaverseTypes.dll"/> 1210 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1208 <Reference name="OpenMetaverse.dll"/> 1211 <Reference name="OpenMetaverse" path="../../../bin/"/>
1209 <Reference name="OpenSim.Framework"/> 1212 <Reference name="OpenSim.Framework"/>
1210 <Reference name="OpenSim.Framework.Capabilities"/> 1213 <Reference name="OpenSim.Framework.Capabilities"/>
1211 <Reference name="OpenSim.Framework.Console"/> 1214 <Reference name="OpenSim.Framework.Console"/>
@@ -1214,8 +1217,8 @@
1214 <Reference name="OpenSim.Services.Base"/> 1217 <Reference name="OpenSim.Services.Base"/>
1215 <Reference name="OpenSim.Services.Connectors"/> 1218 <Reference name="OpenSim.Services.Connectors"/>
1216 <Reference name="OpenSim.Data"/> 1219 <Reference name="OpenSim.Data"/>
1217 <Reference name="Nini.dll" /> 1220 <Reference name="Nini" path="../../../bin/"/>
1218 <Reference name="log4net.dll"/> 1221 <Reference name="log4net" path="../../../bin/"/>
1219 1222
1220 <Files> 1223 <Files>
1221 <Match pattern="*.cs" recurse="true"/> 1224 <Match pattern="*.cs" recurse="true"/>
@@ -1245,11 +1248,11 @@
1245 <Reference name="OpenSim.Services.Connectors"/> 1248 <Reference name="OpenSim.Services.Connectors"/>
1246 <Reference name="OpenSim.Services.Base"/> 1249 <Reference name="OpenSim.Services.Base"/>
1247 <Reference name="OpenSim.Server.Base"/> 1250 <Reference name="OpenSim.Server.Base"/>
1248 <Reference name="OpenMetaverseTypes.dll"/> 1251 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1249 <Reference name="OpenMetaverse.dll"/> 1252 <Reference name="OpenMetaverse" path="../../../bin/"/>
1250 <Reference name="OpenMetaverse.StructuredData.dll"/> 1253 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1251 <Reference name="Nini.dll" /> 1254 <Reference name="Nini" path="../../../bin/"/>
1252 <Reference name="log4net.dll"/> 1255 <Reference name="log4net" path="../../../bin/"/>
1253 1256
1254 <Files> 1257 <Files>
1255 <Match pattern="*.cs" recurse="true"/> 1258 <Match pattern="*.cs" recurse="true"/>
@@ -1271,8 +1274,8 @@
1271 <ReferencePath>../../../bin/</ReferencePath> 1274 <ReferencePath>../../../bin/</ReferencePath>
1272 <Reference name="System"/> 1275 <Reference name="System"/>
1273 <Reference name="System.Xml"/> 1276 <Reference name="System.Xml"/>
1274 <Reference name="OpenMetaverseTypes.dll"/> 1277 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1275 <Reference name="OpenMetaverse.dll"/> 1278 <Reference name="OpenMetaverse" path="../../../bin/"/>
1276 <Reference name="OpenSim.Framework"/> 1279 <Reference name="OpenSim.Framework"/>
1277 <Reference name="OpenSim.Framework.Console"/> 1280 <Reference name="OpenSim.Framework.Console"/>
1278 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1281 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
@@ -1281,8 +1284,8 @@
1281 <Reference name="OpenSim.Services.Connectors"/> 1284 <Reference name="OpenSim.Services.Connectors"/>
1282 <Reference name="OpenSim.Data"/> 1285 <Reference name="OpenSim.Data"/>
1283 <Reference name="OpenSim.Server.Base"/> 1286 <Reference name="OpenSim.Server.Base"/>
1284 <Reference name="Nini.dll" /> 1287 <Reference name="Nini" path="../../../bin/"/>
1285 <Reference name="log4net.dll"/> 1288 <Reference name="log4net" path="../../../bin/"/>
1286 1289
1287 <Files> 1290 <Files>
1288 <Match pattern="*.cs" recurse="true"/> 1291 <Match pattern="*.cs" recurse="true"/>
@@ -1306,23 +1309,23 @@
1306 <Reference name="System"/> 1309 <Reference name="System"/>
1307 <Reference name="System.Xml"/> 1310 <Reference name="System.Xml"/>
1308 <Reference name="System.Web"/> 1311 <Reference name="System.Web"/>
1309 <Reference name="OpenMetaverseTypes.dll"/> 1312 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1310 <Reference name="OpenMetaverse.dll"/> 1313 <Reference name="OpenMetaverse" path="../../../bin/"/>
1311 <Reference name="OpenMetaverse.StructuredData.dll"/> 1314 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1312 <Reference name="OpenSim.Framework"/> 1315 <Reference name="OpenSim.Framework"/>
1313 <Reference name="OpenSim.Framework.Console"/> 1316 <Reference name="OpenSim.Framework.Console"/>
1314 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1317 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1315 <Reference name="OpenSim.Server.Base"/> 1318 <Reference name="OpenSim.Server.Base"/>
1316 <Reference name="OpenSim.Services.Base" /> 1319 <Reference name="OpenSim.Services.Base"/>
1317 <Reference name="OpenSim.Services.Interfaces"/> 1320 <Reference name="OpenSim.Services.Interfaces"/>
1318 <Reference name="XMLRPC.dll" /> 1321 <Reference name="XMLRPC" path="../../../bin/"/>
1319 <Reference name="Nini.dll" /> 1322 <Reference name="Nini" path="../../../bin/"/>
1320 <Reference name="log4net.dll"/> 1323 <Reference name="log4net" path="../../../bin/"/>
1321 <Reference name="DotNetOpenId.dll"/> 1324 <Reference name="DotNetOpenId" path="../../../bin/"/>
1322 1325
1323 <Files> 1326 <Files>
1324 <Match pattern="*.cs" recurse="true"> 1327 <Match pattern="*.cs" recurse="true">
1325 <Exclude pattern="Tests" /> 1328 <Exclude pattern="Tests"/>
1326 </Match> 1329 </Match>
1327 </Files> 1330 </Files>
1328 </Project> 1331 </Project>
@@ -1343,20 +1346,20 @@
1343 <ReferencePath>../../bin/</ReferencePath> 1346 <ReferencePath>../../bin/</ReferencePath>
1344 <Reference name="System"/> 1347 <Reference name="System"/>
1345 <Reference name="System.Xml"/> 1348 <Reference name="System.Xml"/>
1346 <Reference name="OpenMetaverseTypes.dll"/> 1349 <Reference name="OpenMetaverseTypes" path="../../bin/"/>
1347 <Reference name="OpenMetaverse.dll"/> 1350 <Reference name="OpenMetaverse" path="../../bin/"/>
1348 <Reference name="OpenMetaverse.StructuredData.dll"/> 1351 <Reference name="OpenMetaverse.StructuredData" path="../../bin/"/>
1349 <Reference name="OpenSim.Framework"/> 1352 <Reference name="OpenSim.Framework"/>
1350 <Reference name="OpenSim.Framework.Console"/> 1353 <Reference name="OpenSim.Framework.Console"/>
1351 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1354 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1352 <Reference name="OpenSim.Server.Base"/> 1355 <Reference name="OpenSim.Server.Base"/>
1353 <Reference name="OpenSim.Server.Handlers"/> 1356 <Reference name="OpenSim.Server.Handlers"/>
1354 <Reference name="Nini.dll" /> 1357 <Reference name="Nini" path="../../bin/"/>
1355 <Reference name="log4net.dll"/> 1358 <Reference name="log4net" path="../../bin/"/>
1356 1359
1357 <Files> 1360 <Files>
1358 <Match pattern="*.cs" recurse="false"> 1361 <Match pattern="*.cs" recurse="false">
1359 <Exclude pattern="Tests" /> 1362 <Exclude pattern="Tests"/>
1360 </Match> 1363 </Match>
1361 </Files> 1364 </Files>
1362 </Project> 1365 </Project>
@@ -1376,19 +1379,19 @@
1376 <ReferencePath>../../bin/</ReferencePath> 1379 <ReferencePath>../../bin/</ReferencePath>
1377 <Reference name="System"/> 1380 <Reference name="System"/>
1378 <Reference name="System.Xml"/> 1381 <Reference name="System.Xml"/>
1379 <Reference name="OpenMetaverseTypes.dll"/> 1382 <Reference name="OpenMetaverseTypes" path="../../bin/"/>
1380 <Reference name="OpenMetaverse.dll"/> 1383 <Reference name="OpenMetaverse" path="../../bin/"/>
1381 <Reference name="OpenMetaverse.StructuredData.dll"/> 1384 <Reference name="OpenMetaverse.StructuredData" path="../../bin/"/>
1382 <Reference name="OpenSim.Framework"/> 1385 <Reference name="OpenSim.Framework"/>
1383 <Reference name="OpenSim.Framework.Console"/> 1386 <Reference name="OpenSim.Framework.Console"/>
1384 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1387 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1385 <Reference name="OpenSim.Server.Base"/> 1388 <Reference name="OpenSim.Server.Base"/>
1386 <Reference name="Nini.dll" /> 1389 <Reference name="Nini" path="../../bin/"/>
1387 <Reference name="log4net.dll"/> 1390 <Reference name="log4net" path="../../bin/"/>
1388 1391
1389 <Files> 1392 <Files>
1390 <Match pattern="*.cs" recurse="false"> 1393 <Match pattern="*.cs" recurse="false">
1391 <Exclude pattern="Tests" /> 1394 <Exclude pattern="Tests"/>
1392 </Match> 1395 </Match>
1393 </Files> 1396 </Files>
1394 </Project> 1397 </Project>
@@ -1411,21 +1414,21 @@
1411 <Reference name="System.Xml"/> 1414 <Reference name="System.Xml"/>
1412 <Reference name="System.Drawing"/> 1415 <Reference name="System.Drawing"/>
1413 <Reference name="System.Web"/> 1416 <Reference name="System.Web"/>
1414 <Reference name="NDesk.Options"/> 1417 <Reference name="NDesk.Options" path="../../../bin/"/>
1415 <Reference name="OpenMetaverseTypes.dll"/> 1418 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1416 <Reference name="OpenMetaverse.StructuredData.dll"/> 1419 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1417 <Reference name="OpenMetaverse.dll"/> 1420 <Reference name="OpenMetaverse" path="../../../bin/"/>
1418 <Reference name="CSJ2K.dll"/> 1421 <Reference name="CSJ2K" path="../../../bin/"/>
1419 <Reference name="OpenSim.Framework"/> 1422 <Reference name="OpenSim.Framework"/>
1420 <Reference name="OpenSim.Framework.Capabilities"/> 1423 <Reference name="OpenSim.Framework.Capabilities"/>
1421 <Reference name="OpenSim.Framework.Communications"/> 1424 <Reference name="OpenSim.Framework.Communications"/>
1422 <Reference name="OpenSim.Data" /> 1425 <Reference name="OpenSim.Data"/>
1423 <Reference name="OpenSim.Region.Framework" /> 1426 <Reference name="OpenSim.Region.Framework"/>
1424 <Reference name="OpenSim.Server.Base" /> 1427 <Reference name="OpenSim.Server.Base"/>
1425 <Reference name="OpenSim.Server.Handlers" /> 1428 <Reference name="OpenSim.Server.Handlers"/>
1426 <Reference name="OpenSim.Services.Connectors" /> 1429 <Reference name="OpenSim.Services.Connectors"/>
1427 <Reference name="OpenSim.Services.Base" /> 1430 <Reference name="OpenSim.Services.Base"/>
1428 <Reference name="OpenSim.Services.Interfaces" /> 1431 <Reference name="OpenSim.Services.Interfaces"/>
1429 <Reference name="OpenSim.Framework.Serialization"/> 1432 <Reference name="OpenSim.Framework.Serialization"/>
1430 <Reference name="OpenSim.Framework.Console"/> 1433 <Reference name="OpenSim.Framework.Console"/>
1431 <Reference name="OpenSim.Framework.Servers"/> 1434 <Reference name="OpenSim.Framework.Servers"/>
@@ -1433,24 +1436,24 @@
1433 <Reference name="OpenSim.Framework.Statistics"/> 1436 <Reference name="OpenSim.Framework.Statistics"/>
1434 <Reference name="OpenSim.Region.Physics.Manager"/> 1437 <Reference name="OpenSim.Region.Physics.Manager"/>
1435 1438
1436 <Reference name="GlynnTucker.Cache.dll"/> 1439 <Reference name="GlynnTucker.Cache" path="../../../bin/"/>
1437 1440
1438 <!-- For scripting in funny languages by default --> 1441 <!-- For scripting in funny languages by default -->
1439 <Reference name="XMLRPC.dll"/> 1442 <Reference name="XMLRPC" path="../../../bin/"/>
1440 <Reference name="OpenSim.Framework.Communications"/> 1443 <Reference name="OpenSim.Framework.Communications"/>
1441 <Reference name="Nini.dll" /> 1444 <Reference name="Nini" path="../../../bin/"/>
1442 <Reference name="log4net.dll"/> 1445 <Reference name="log4net" path="../../../bin/"/>
1443 <Reference name="DotNetOpenMail.dll"/> 1446 <Reference name="DotNetOpenMail" path="../../../bin/"/>
1444 1447
1445 <!-- To allow regions to have mono addins --> 1448 <!-- To allow regions to have mono addins -->
1446 <Reference name="Mono.Addins.dll" /> 1449 <Reference name="Mono.Addins" path="../../../bin/"/>
1447 1450
1448 <Files> 1451 <Files>
1449 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1452 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1450 <Match pattern="*.cs" recurse="true"> 1453 <Match pattern="*.cs" recurse="true">
1451 <Exclude name="Tests" pattern="Tests" /> 1454 <Exclude name="Tests" pattern="Tests"/>
1452 </Match> 1455 </Match>
1453 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1456 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1454 </Files> 1457 </Files>
1455 </Project> 1458 </Project>
1456 1459
@@ -1471,40 +1474,40 @@
1471 <Reference name="System.Xml"/> 1474 <Reference name="System.Xml"/>
1472 <Reference name="System.Drawing"/> 1475 <Reference name="System.Drawing"/>
1473 <Reference name="System.Web"/> 1476 <Reference name="System.Web"/>
1474 <Reference name="OpenMetaverseTypes.dll"/> 1477 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1475 <Reference name="OpenMetaverse.StructuredData.dll"/> 1478 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1476 <Reference name="OpenMetaverse.dll"/> 1479 <Reference name="OpenMetaverse" path="../../../bin/"/>
1477 <Reference name="PumaCode.SvnDotNet.dll"/> 1480 <Reference name="PumaCode.SvnDotNet" path="../../../bin/"/>
1478 <Reference name="OpenSim.Framework"/> 1481 <Reference name="OpenSim.Framework"/>
1479 <Reference name="OpenSim.Framework.Communications"/> 1482 <Reference name="OpenSim.Framework.Communications"/>
1480 <Reference name="OpenSim.Data" /> 1483 <Reference name="OpenSim.Data"/>
1481 <Reference name="OpenSim.Region.Framework" /> 1484 <Reference name="OpenSim.Region.Framework"/>
1482 <Reference name="OpenSim.Region.CoreModules" /> 1485 <Reference name="OpenSim.Region.CoreModules"/>
1483 <Reference name="OpenSim.Framework.Capabilities"/> 1486 <Reference name="OpenSim.Framework.Capabilities"/>
1484 <Reference name="OpenSim.Framework.Console"/> 1487 <Reference name="OpenSim.Framework.Console"/>
1485 <Reference name="OpenSim.Framework.Servers"/> 1488 <Reference name="OpenSim.Framework.Servers"/>
1486 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1489 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1487 <Reference name="OpenSim.Framework.Statistics"/> 1490 <Reference name="OpenSim.Framework.Statistics"/>
1488 <Reference name="OpenSim.Region.Physics.Manager"/> 1491 <Reference name="OpenSim.Region.Physics.Manager"/>
1489 <Reference name="OpenSim.Server.Base" /> 1492 <Reference name="OpenSim.Server.Base"/>
1490 <Reference name="OpenSim.Server.Handlers" /> 1493 <Reference name="OpenSim.Server.Handlers"/>
1491 <Reference name="OpenSim.Services.Connectors" /> 1494 <Reference name="OpenSim.Services.Connectors"/>
1492 <Reference name="OpenSim.Services.Base" /> 1495 <Reference name="OpenSim.Services.Base"/>
1493 <Reference name="OpenSim.Services.Interfaces" /> 1496 <Reference name="OpenSim.Services.Interfaces"/>
1494 <Reference name="Mono.Addins.dll" /> 1497 <Reference name="Mono.Addins" path="../../../bin/"/>
1495 1498
1496 <!-- For scripting in funny languages by default --> 1499 <!-- For scripting in funny languages by default -->
1497 <Reference name="XMLRPC.dll"/> 1500 <Reference name="XMLRPC" path="../../../bin/"/>
1498 <Reference name="OpenSim.Framework.Communications"/> 1501 <Reference name="OpenSim.Framework.Communications"/>
1499 <Reference name="Nini.dll" /> 1502 <Reference name="Nini" path="../../../bin/"/>
1500 <Reference name="log4net.dll"/> 1503 <Reference name="log4net" path="../../../bin/"/>
1501 <Reference name="DotNetOpenMail.dll"/> 1504 <Reference name="DotNetOpenMail" path="../../../bin/"/>
1502 1505
1503 <Files> 1506 <Files>
1504 <Match pattern="*.cs" recurse="true"> 1507 <Match pattern="*.cs" recurse="true">
1505 <Exclude name="Tests" pattern="Tests" /> 1508 <Exclude name="Tests" pattern="Tests"/>
1506 </Match> 1509 </Match>
1507 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1510 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1508 </Files> 1511 </Files>
1509 </Project> 1512 </Project>
1510 1513
@@ -1523,26 +1526,26 @@
1523 <ReferencePath>../../../bin/</ReferencePath> 1526 <ReferencePath>../../../bin/</ReferencePath>
1524 <Reference name="System"/> 1527 <Reference name="System"/>
1525 <Reference name="System.Xml"/> 1528 <Reference name="System.Xml"/>
1526 <Reference name="OpenMetaverseTypes.dll"/> 1529 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1527 <Reference name="OpenMetaverse.dll"/> 1530 <Reference name="OpenMetaverse" path="../../../bin/"/>
1528 <Reference name="OpenSim.Framework"/> 1531 <Reference name="OpenSim.Framework"/>
1529 <Reference name="OpenSim.Framework.Communications"/> 1532 <Reference name="OpenSim.Framework.Communications"/>
1530 <Reference name="OpenSim.Region.Framework" /> 1533 <Reference name="OpenSim.Region.Framework"/>
1531 <Reference name="OpenSim.Server.Base" /> 1534 <Reference name="OpenSim.Server.Base"/>
1532 <Reference name="OpenSim.Server.Handlers" /> 1535 <Reference name="OpenSim.Server.Handlers"/>
1533 <Reference name="OpenSim.Framework.Console"/> 1536 <Reference name="OpenSim.Framework.Console"/>
1534 <Reference name="OpenSim.Region.Physics.Manager"/> 1537 <Reference name="OpenSim.Region.Physics.Manager"/>
1535 <Reference name="OpenSim.Framework.Communications"/> 1538 <Reference name="OpenSim.Framework.Communications"/>
1536 <Reference name="OpenSim.Region.CoreModules" /> 1539 <Reference name="OpenSim.Region.CoreModules"/>
1537 <Reference name="Nini.dll" /> 1540 <Reference name="Nini" path="../../../bin/"/>
1538 <Reference name="log4net.dll"/> 1541 <Reference name="log4net" path="../../../bin/"/>
1539 1542
1540 <!-- To allow regions to have mono addins --> 1543 <!-- To allow regions to have mono addins -->
1541 <Reference name="Mono.Addins.dll" /> 1544 <Reference name="Mono.Addins" path="../../../bin/"/>
1542 1545
1543 <Files> 1546 <Files>
1544 <Match pattern="*.cs" recurse="true" /> 1547 <Match pattern="*.cs" recurse="true"/>
1545 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1548 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1546 </Files> 1549 </Files>
1547 </Project> 1550 </Project>
1548 1551
@@ -1561,7 +1564,7 @@
1561 <ReferencePath>../../../bin/</ReferencePath> 1564 <ReferencePath>../../../bin/</ReferencePath>
1562 <Reference name="System"/> 1565 <Reference name="System"/>
1563 <Reference name="System.Xml"/> 1566 <Reference name="System.Xml"/>
1564 <Reference name="OpenMetaverseTypes.dll"/> 1567 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1565 <Reference name="OpenSim.Region.Framework"/> 1568 <Reference name="OpenSim.Region.Framework"/>
1566 <Reference name="OpenSim.Framework"/> 1569 <Reference name="OpenSim.Framework"/>
1567 <Reference name="OpenSim.Data"/> 1570 <Reference name="OpenSim.Data"/>
@@ -1572,9 +1575,9 @@
1572 <Reference name="OpenSim.Framework.Statistics"/> 1575 <Reference name="OpenSim.Framework.Statistics"/>
1573 <Reference name="OpenSim.Region.Physics.Manager"/> 1576 <Reference name="OpenSim.Region.Physics.Manager"/>
1574 <Reference name="OpenSim.Region.CoreModules"/> 1577 <Reference name="OpenSim.Region.CoreModules"/>
1575 <Reference name="XMLRPC.dll"/> 1578 <Reference name="XMLRPC" path="../../../bin/"/>
1576 <Reference name="Nini.dll" /> 1579 <Reference name="Nini" path="../../../bin/"/>
1577 <Reference name="log4net.dll"/> 1580 <Reference name="log4net" path="../../../bin/"/>
1578 1581
1579 <Files> 1582 <Files>
1580 <Match pattern="*.cs" recurse="false"/> 1583 <Match pattern="*.cs" recurse="false"/>
@@ -1598,9 +1601,9 @@
1598 <Reference name="System"/> 1601 <Reference name="System"/>
1599 <Reference name="System.Core"/> 1602 <Reference name="System.Core"/>
1600 <Reference name="System.Xml"/> 1603 <Reference name="System.Xml"/>
1601 <Reference name="OpenMetaverseTypes.dll"/> 1604 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
1602 <Reference name="OpenMetaverse.StructuredData.dll"/> 1605 <Reference name="OpenMetaverse.StructuredData" path="../../../../bin/"/>
1603 <Reference name="OpenMetaverse.dll"/> 1606 <Reference name="OpenMetaverse" path="../../../../bin/"/>
1604 <Reference name="OpenSim.Region.Framework"/> 1607 <Reference name="OpenSim.Region.Framework"/>
1605 <Reference name="OpenSim.Framework"/> 1608 <Reference name="OpenSim.Framework"/>
1606 <Reference name="OpenSim.Data"/> 1609 <Reference name="OpenSim.Data"/>
@@ -1611,12 +1614,12 @@
1611 <Reference name="OpenSim.Region.ClientStack"/> 1614 <Reference name="OpenSim.Region.ClientStack"/>
1612 <Reference name="OpenSim.Region.Physics.Manager"/> 1615 <Reference name="OpenSim.Region.Physics.Manager"/>
1613 <Reference name="OpenSim.Services.Interfaces"/> 1616 <Reference name="OpenSim.Services.Interfaces"/>
1614 <Reference name="BclExtras35.dll"/> 1617 <Reference name="BclExtras35" path="../../../../bin/"/>
1615 <Reference name="XMLRPC.dll"/> 1618 <Reference name="XMLRPC" path="../../../../bin/"/>
1616 <Reference name="Nini.dll" /> 1619 <Reference name="Nini" path="../../../../bin/"/>
1617 <Reference name="log4net.dll"/> 1620 <Reference name="log4net" path="../../../../bin/"/>
1618 <Reference name="C5.dll" /> 1621 <Reference name="C5" path="../../../../bin/"/>
1619 <Reference name="Nini.dll" /> 1622 <Reference name="Nini" path="../../../../bin/"/>
1620 1623
1621 <Files> 1624 <Files>
1622 <Match pattern="*.cs" recurse="false"/> 1625 <Match pattern="*.cs" recurse="false"/>
@@ -1640,11 +1643,11 @@
1640 <Reference name="System"/> 1643 <Reference name="System"/>
1641 <Reference name="System.Xml"/> 1644 <Reference name="System.Xml"/>
1642 <Reference name="OpenSim.Data"/> 1645 <Reference name="OpenSim.Data"/>
1643 <Reference name="OpenMetaverseTypes.dll"/> 1646 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1644 <Reference name="OpenSim.Framework"/> 1647 <Reference name="OpenSim.Framework"/>
1645 <Reference name="OpenSim.Region.Framework"/> 1648 <Reference name="OpenSim.Region.Framework"/>
1646 <Reference name="OpenSim.Framework.Console"/> 1649 <Reference name="OpenSim.Framework.Console"/>
1647 <Reference name="log4net.dll"/> 1650 <Reference name="log4net" path="../../../bin/"/>
1648 1651
1649 <Files> 1652 <Files>
1650 <Match pattern="*.cs" recurse="true"/> 1653 <Match pattern="*.cs" recurse="true"/>
@@ -1667,10 +1670,10 @@
1667 <ReferencePath>../../../bin/</ReferencePath> 1670 <ReferencePath>../../../bin/</ReferencePath>
1668 <Reference name="System"/> 1671 <Reference name="System"/>
1669 <Reference name="System.Xml"/> 1672 <Reference name="System.Xml"/>
1670 <Reference name="Mono.Addins.dll" /> 1673 <Reference name="Mono.Addins" path="../../../bin/"/>
1671 <Reference name="OpenMetaverseTypes.dll"/> 1674 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1672 <Reference name="OpenMetaverse.StructuredData.dll"/> 1675 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1673 <Reference name="OpenMetaverse.dll"/> 1676 <Reference name="OpenMetaverse" path="../../../bin/"/>
1674 <Reference name="OpenSim.Framework"/> 1677 <Reference name="OpenSim.Framework"/>
1675 <Reference name="OpenSim.Data"/> 1678 <Reference name="OpenSim.Data"/>
1676 <Reference name="OpenSim.Framework.Console"/> 1679 <Reference name="OpenSim.Framework.Console"/>
@@ -1682,9 +1685,10 @@
1682 <Reference name="OpenSim.Region.CoreModules"/> 1685 <Reference name="OpenSim.Region.CoreModules"/>
1683 <Reference name="OpenSim.Region.ClientStack"/> 1686 <Reference name="OpenSim.Region.ClientStack"/>
1684 <Reference name="OpenSim.Framework.Communications"/> 1687 <Reference name="OpenSim.Framework.Communications"/>
1685 <Reference name="XMLRPC.dll"/> 1688 <Reference name="OpenSim.Server.Base"/>
1686 <Reference name="Nini.dll" /> 1689 <Reference name="XMLRPC" path="../../../bin/"/>
1687 <Reference name="log4net.dll"/> 1690 <Reference name="Nini" path="../../../bin/"/>
1691 <Reference name="log4net" path="../../../bin/"/>
1688 1692
1689 <Files> 1693 <Files>
1690 <Match pattern="*.cs" recurse="true"/> 1694 <Match pattern="*.cs" recurse="true"/>
@@ -1704,11 +1708,11 @@
1704 </Configuration> 1708 </Configuration>
1705 1709
1706 <ReferencePath>../../../bin/</ReferencePath> 1710 <ReferencePath>../../../bin/</ReferencePath>
1707 <Reference name="Mono.Addins.dll" /> 1711 <Reference name="Mono.Addins" path="../../../bin/"/>
1708 <Reference name="System"/> 1712 <Reference name="System"/>
1709 <Reference name="System.Xml"/> 1713 <Reference name="System.Xml"/>
1710 <Reference name="OpenMetaverseTypes.dll" /> 1714 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1711 <Reference name="Nini.dll" /> 1715 <Reference name="Nini" path="../../../bin/"/>
1712 <Reference name="OpenSim"/> 1716 <Reference name="OpenSim"/>
1713 <Reference name="OpenSim.Region.ClientStack"/> 1717 <Reference name="OpenSim.Region.ClientStack"/>
1714 <Reference name="OpenSim.Region.CoreModules"/> 1718 <Reference name="OpenSim.Region.CoreModules"/>
@@ -1718,11 +1722,11 @@
1718 <Reference name="OpenSim.Framework.RegionLoader.Filesystem"/> 1722 <Reference name="OpenSim.Framework.RegionLoader.Filesystem"/>
1719 <Reference name="OpenSim.Framework.RegionLoader.Web"/> 1723 <Reference name="OpenSim.Framework.RegionLoader.Web"/>
1720 <Reference name="OpenSim.Framework.Servers"/> 1724 <Reference name="OpenSim.Framework.Servers"/>
1721 <Reference name="log4net.dll"/> 1725 <Reference name="log4net" path="../../../bin/"/>
1722 1726
1723 <Files> 1727 <Files>
1724 <Match pattern="*.cs" recurse="true"/> 1728 <Match pattern="*.cs" recurse="true"/>
1725 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1729 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1726 </Files> 1730 </Files>
1727 </Project> 1731 </Project>
1728 1732
@@ -1739,8 +1743,8 @@
1739 </Configuration> 1743 </Configuration>
1740 1744
1741 <ReferencePath>../../../bin/</ReferencePath> 1745 <ReferencePath>../../../bin/</ReferencePath>
1742 <Reference name="Mono.Addins.dll" /> 1746 <Reference name="Mono.Addins" path="../../../bin/"/>
1743 <Reference name="Nini.dll" /> 1747 <Reference name="Nini" path="../../../bin/"/>
1744 <Reference name="OpenSim"/> 1748 <Reference name="OpenSim"/>
1745 <Reference name="OpenSim.Framework"/> 1749 <Reference name="OpenSim.Framework"/>
1746 <Reference name="OpenSim.Framework.Servers"/> 1750 <Reference name="OpenSim.Framework.Servers"/>
@@ -1748,11 +1752,11 @@
1748 <Reference name="OpenSim.Region.ClientStack"/> 1752 <Reference name="OpenSim.Region.ClientStack"/>
1749 <Reference name="System"/> 1753 <Reference name="System"/>
1750 <Reference name="System.Xml"/> 1754 <Reference name="System.Xml"/>
1751 <Reference name="log4net.dll"/> 1755 <Reference name="log4net" path="../../../bin/"/>
1752 1756
1753 <Files> 1757 <Files>
1754 <Match pattern="*.cs" recurse="true"/> 1758 <Match pattern="*.cs" recurse="true"/>
1755 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1759 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1756 </Files> 1760 </Files>
1757 </Project> 1761 </Project>
1758 1762
@@ -1769,14 +1773,14 @@
1769 </Configuration> 1773 </Configuration>
1770 1774
1771 <ReferencePath>../../../bin/</ReferencePath> 1775 <ReferencePath>../../../bin/</ReferencePath>
1772 <Reference name="Mono.Addins.dll" /> 1776 <Reference name="Mono.Addins" path="../../../bin/"/>
1773 <Reference name="System"/> 1777 <Reference name="System"/>
1774 <Reference name="System.Xml"/> 1778 <Reference name="System.Xml"/>
1775 <Reference name="OpenMetaverse.dll" /> 1779 <Reference name="OpenMetaverse" path="../../../bin/"/>
1776 <Reference name="OpenMetaverseTypes.dll" /> 1780 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1777 <Reference name="OpenMetaverse.StructuredData.dll"/> 1781 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
1778 <Reference name="Nini.dll" /> 1782 <Reference name="Nini" path="../../../bin/"/>
1779 <Reference name="XMLRPC.dll" /> 1783 <Reference name="XMLRPC" path="../../../bin/"/>
1780 <Reference name="OpenSim"/> 1784 <Reference name="OpenSim"/>
1781 <Reference name="OpenSim.Region.ClientStack"/> 1785 <Reference name="OpenSim.Region.ClientStack"/>
1782 <Reference name="OpenSim.Region.Framework"/> 1786 <Reference name="OpenSim.Region.Framework"/>
@@ -1787,17 +1791,16 @@
1787 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1791 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1788 <Reference name="OpenSim.Framework.Console"/> 1792 <Reference name="OpenSim.Framework.Console"/>
1789 <Reference name="OpenSim.Services.Interfaces"/> 1793 <Reference name="OpenSim.Services.Interfaces"/>
1790 <Reference name="log4net.dll"/> 1794 <Reference name="log4net" path="../../../bin/"/>
1791 1795
1792 <Files> 1796 <Files>
1793 <Match pattern="*.cs" recurse="true"/> 1797 <Match pattern="*.cs" recurse="true"/>
1794 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1798 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1795 </Files> 1799 </Files>
1796 </Project> 1800 </Project>
1797 1801
1798 <!-- REST plugins --> 1802 <!-- REST plugins -->
1799 <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest" 1803 <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest" path="OpenSim/ApplicationPlugins/Rest" type="Library">
1800 path="OpenSim/ApplicationPlugins/Rest" type="Library">
1801 <Configuration name="Debug"> 1804 <Configuration name="Debug">
1802 <Options> 1805 <Options>
1803 <OutputPath>../../../bin/</OutputPath> 1806 <OutputPath>../../../bin/</OutputPath>
@@ -1810,12 +1813,12 @@
1810 </Configuration> 1813 </Configuration>
1811 1814
1812 <ReferencePath>../../../bin/</ReferencePath> 1815 <ReferencePath>../../../bin/</ReferencePath>
1813 <Reference name="Mono.Addins.dll" /> 1816 <Reference name="Mono.Addins" path="../../../bin/"/>
1814 <Reference name="System"/> 1817 <Reference name="System"/>
1815 <Reference name="System.Xml"/> 1818 <Reference name="System.Xml"/>
1816 <Reference name="OpenMetaverseTypes.dll" /> 1819 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1817 <Reference name="Nini.dll" /> 1820 <Reference name="Nini" path="../../../bin/"/>
1818 <Reference name="XMLRPC.dll" /> 1821 <Reference name="XMLRPC" path="../../../bin/"/>
1819 <Reference name="OpenSim"/> 1822 <Reference name="OpenSim"/>
1820 <Reference name="OpenSim.Region.ClientStack"/> 1823 <Reference name="OpenSim.Region.ClientStack"/>
1821 <Reference name="OpenSim.Region.Framework"/> 1824 <Reference name="OpenSim.Region.Framework"/>
@@ -1825,15 +1828,14 @@
1825 <Reference name="OpenSim.Framework.Servers"/> 1828 <Reference name="OpenSim.Framework.Servers"/>
1826 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1829 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1827 <Reference name="OpenSim.Framework.Console"/> 1830 <Reference name="OpenSim.Framework.Console"/>
1828 <Reference name="log4net.dll"/> 1831 <Reference name="log4net" path="../../../bin/"/>
1829 1832
1830 <Files> 1833 <Files>
1831 <Match pattern="*.cs" recurse="false"/> 1834 <Match pattern="*.cs" recurse="false"/>
1832 </Files> 1835 </Files>
1833 </Project> 1836 </Project>
1834 1837
1835 <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Regions" 1838 <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Regions" path="OpenSim/ApplicationPlugins/Rest/Regions" type="Library">
1836 path="OpenSim/ApplicationPlugins/Rest/Regions" type="Library">
1837 <Configuration name="Debug"> 1839 <Configuration name="Debug">
1838 <Options> 1840 <Options>
1839 <OutputPath>../../../../bin/</OutputPath> 1841 <OutputPath>../../../../bin/</OutputPath>
@@ -1846,12 +1848,12 @@
1846 </Configuration> 1848 </Configuration>
1847 1849
1848 <ReferencePath>../../../../bin/</ReferencePath> 1850 <ReferencePath>../../../../bin/</ReferencePath>
1849 <Reference name="Mono.Addins.dll" /> 1851 <Reference name="Mono.Addins" path="../../../../bin/"/>
1850 <Reference name="System"/> 1852 <Reference name="System"/>
1851 <Reference name="System.Xml"/> 1853 <Reference name="System.Xml"/>
1852 <Reference name="OpenMetaverseTypes.dll" /> 1854 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
1853 <Reference name="Nini.dll" /> 1855 <Reference name="Nini" path="../../../../bin/"/>
1854 <Reference name="XMLRPC.dll" /> 1856 <Reference name="XMLRPC" path="../../../../bin/"/>
1855 <Reference name="OpenSim"/> 1857 <Reference name="OpenSim"/>
1856 <Reference name="OpenSim.Region.Framework"/> 1858 <Reference name="OpenSim.Region.Framework"/>
1857 <Reference name="OpenSim.Region.ClientStack"/> 1859 <Reference name="OpenSim.Region.ClientStack"/>
@@ -1862,16 +1864,15 @@
1862 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 1864 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
1863 <Reference name="OpenSim.Framework.Console"/> 1865 <Reference name="OpenSim.Framework.Console"/>
1864 <Reference name="OpenSim.ApplicationPlugins.Rest"/> 1866 <Reference name="OpenSim.ApplicationPlugins.Rest"/>
1865 <Reference name="log4net.dll"/> 1867 <Reference name="log4net" path="../../../../bin/"/>
1866 1868
1867 <Files> 1869 <Files>
1868 <Match pattern="*.cs" recurse="true"/> 1870 <Match pattern="*.cs" recurse="true"/>
1869 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1871 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1870 </Files> 1872 </Files>
1871 </Project> 1873 </Project>
1872 1874
1873 <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Inventory" 1875 <Project frameworkVersion="v3_5" name="OpenSim.ApplicationPlugins.Rest.Inventory" path="OpenSim/ApplicationPlugins/Rest/Inventory" type="Library">
1874 path="OpenSim/ApplicationPlugins/Rest/Inventory" type="Library">
1875 <Configuration name="Debug"> 1876 <Configuration name="Debug">
1876 <Options> 1877 <Options>
1877 <OutputPath>../../../../bin/</OutputPath> 1878 <OutputPath>../../../../bin/</OutputPath>
@@ -1884,14 +1885,14 @@
1884 </Configuration> 1885 </Configuration>
1885 1886
1886 <ReferencePath>../../../../bin/</ReferencePath> 1887 <ReferencePath>../../../../bin/</ReferencePath>
1887 <Reference name="Mono.Addins.dll" /> 1888 <Reference name="Mono.Addins" path="../../../../bin/"/>
1888 <Reference name="System"/> 1889 <Reference name="System"/>
1889 <Reference name="System.Xml"/> 1890 <Reference name="System.Xml"/>
1890 <Reference name="System.Drawing"/> 1891 <Reference name="System.Drawing"/>
1891 <Reference name="OpenMetaverseTypes.dll"/> 1892 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
1892 <Reference name="OpenMetaverse.dll"/> 1893 <Reference name="OpenMetaverse" path="../../../../bin/"/>
1893 <Reference name="Nini.dll" /> 1894 <Reference name="Nini" path="../../../../bin/"/>
1894 <Reference name="XMLRPC.dll" /> 1895 <Reference name="XMLRPC" path="../../../../bin/"/>
1895 <Reference name="OpenSim"/> 1896 <Reference name="OpenSim"/>
1896 <Reference name="OpenSim.Region.Framework"/> 1897 <Reference name="OpenSim.Region.Framework"/>
1897 <Reference name="OpenSim.Region.ClientStack"/> 1898 <Reference name="OpenSim.Region.ClientStack"/>
@@ -1903,11 +1904,11 @@
1903 <Reference name="OpenSim.Framework.Console"/> 1904 <Reference name="OpenSim.Framework.Console"/>
1904 <Reference name="OpenSim.Services.Interfaces"/> 1905 <Reference name="OpenSim.Services.Interfaces"/>
1905 <Reference name="OpenSim.ApplicationPlugins.Rest"/> 1906 <Reference name="OpenSim.ApplicationPlugins.Rest"/>
1906 <Reference name="log4net.dll"/> 1907 <Reference name="log4net" path="../../../../bin/"/>
1907 1908
1908 <Files> 1909 <Files>
1909 <Match pattern="*.cs" recurse="true"/> 1910 <Match pattern="*.cs" recurse="true"/>
1910 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 1911 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
1911 </Files> 1912 </Files>
1912 </Project> 1913 </Project>
1913 1914
@@ -1940,11 +1941,11 @@
1940 <Reference name="OpenSim.Region.Framework"/> 1941 <Reference name="OpenSim.Region.Framework"/>
1941 <Reference name="OpenSim.Region.CoreModules"/> 1942 <Reference name="OpenSim.Region.CoreModules"/>
1942 <Reference name="OpenSim.Services.Interfaces"/> 1943 <Reference name="OpenSim.Services.Interfaces"/>
1943 <Reference name="OpenMetaverseTypes.dll"/> 1944 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1944 <Reference name="OpenMetaverse.dll"/> 1945 <Reference name="OpenMetaverse" path="../../../bin/"/>
1945 <Reference name="Nini.dll" /> 1946 <Reference name="Nini" path="../../../bin/"/>
1946 <Reference name="Mono.Addins" /> 1947 <Reference name="Mono.Addins"/>
1947 <Reference name="log4net.dll" /> 1948 <Reference name="log4net" path="../../../bin/"/>
1948 <Files> 1949 <Files>
1949 <Match pattern="*.cs" recurse="true"/> 1950 <Match pattern="*.cs" recurse="true"/>
1950 </Files> 1951 </Files>
@@ -1964,13 +1965,13 @@
1964 1965
1965 <ReferencePath>../../../../bin/</ReferencePath> 1966 <ReferencePath>../../../../bin/</ReferencePath>
1966 1967
1967 <Reference name="OpenMetaverseTypes.dll"/> 1968 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
1968 <Reference name="OpenMetaverse.dll"/> 1969 <Reference name="OpenMetaverse" path="../../../../bin/"/>
1969 <Reference name="System"/> 1970 <Reference name="System"/>
1970 <Reference name="OpenSim.Framework"/> 1971 <Reference name="OpenSim.Framework"/>
1971 <Reference name="OpenSim.Region.Framework"/> 1972 <Reference name="OpenSim.Region.Framework"/>
1972 <Reference name="Nini.dll" /> 1973 <Reference name="Nini" path="../../../../bin/"/>
1973 <Reference name="log4net.dll"/> 1974 <Reference name="log4net" path="../../../../bin/"/>
1974 <Files> 1975 <Files>
1975 <Match pattern="*.cs" recurse="true"/> 1976 <Match pattern="*.cs" recurse="true"/>
1976 </Files> 1977 </Files>
@@ -1992,17 +1993,17 @@
1992 1993
1993 <ReferencePath>../../../bin/</ReferencePath> 1994 <ReferencePath>../../../bin/</ReferencePath>
1994 1995
1995 <Reference name="OpenMetaverseTypes.dll"/> 1996 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1996 <Reference name="OpenMetaverse.dll"/> 1997 <Reference name="OpenMetaverse" path="../../../bin/"/>
1997 <Reference name="System"/> 1998 <Reference name="System"/>
1998 <Reference name="OpenSim.Framework"/> 1999 <Reference name="OpenSim.Framework"/>
1999 <Reference name="OpenSim.Region.Framework"/> 2000 <Reference name="OpenSim.Region.Framework"/>
2000 <Reference name="OpenSim.Framework.Communications"/> 2001 <Reference name="OpenSim.Framework.Communications"/>
2001 <Reference name="OpenSim.Services.Interfaces"/> 2002 <Reference name="OpenSim.Services.Interfaces"/>
2002 <Reference name="Nini.dll" /> 2003 <Reference name="Nini" path="../../../bin/"/>
2003 <Reference name="log4net.dll"/> 2004 <Reference name="log4net" path="../../../bin/"/>
2004 <Reference name="protobuf-net"/> 2005 <Reference name="protobuf-net"/>
2005 <Reference name="MXP.dll"/> 2006 <Reference name="MXP" path="../../../bin/"/>
2006 <Reference name="Mono.Addins"/> 2007 <Reference name="Mono.Addins"/>
2007 <Files> 2008 <Files>
2008 <Match pattern="*.cs" recurse="true"/> 2009 <Match pattern="*.cs" recurse="true"/>
@@ -2024,8 +2025,8 @@
2024 2025
2025 <ReferencePath>../../../bin/</ReferencePath> 2026 <ReferencePath>../../../bin/</ReferencePath>
2026 2027
2027 <Reference name="OpenMetaverseTypes.dll"/> 2028 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2028 <Reference name="OpenMetaverse.dll"/> 2029 <Reference name="OpenMetaverse" path="../../../bin/"/>
2029 <Reference name="System"/> 2030 <Reference name="System"/>
2030 <Reference name="System.Drawing"/> 2031 <Reference name="System.Drawing"/>
2031 <Reference name="OpenSim.Framework"/> 2032 <Reference name="OpenSim.Framework"/>
@@ -2034,9 +2035,9 @@
2034 <Reference name="OpenSim.Region.Framework"/> 2035 <Reference name="OpenSim.Region.Framework"/>
2035 <Reference name="OpenSim.Framework.Communications"/> 2036 <Reference name="OpenSim.Framework.Communications"/>
2036 <Reference name="OpenSim.Services.Interfaces"/> 2037 <Reference name="OpenSim.Services.Interfaces"/>
2037 <Reference name="Nini.dll" /> 2038 <Reference name="Nini" path="../../../bin/"/>
2038 <Reference name="log4net.dll"/> 2039 <Reference name="log4net" path="../../../bin/"/>
2039 <Reference name="Google.ProtocolBuffers.dll"/> 2040 <Reference name="Google.ProtocolBuffers" path="../../../bin/"/>
2040 <Files> 2041 <Files>
2041 <Match pattern="*.cs" recurse="true"/> 2042 <Match pattern="*.cs" recurse="true"/>
2042 </Files> 2043 </Files>
@@ -2056,8 +2057,8 @@
2056 2057
2057 <ReferencePath>../../../bin/</ReferencePath> 2058 <ReferencePath>../../../bin/</ReferencePath>
2058 2059
2059 <Reference name="OpenMetaverseTypes.dll"/> 2060 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2060 <Reference name="OpenMetaverse.dll"/> 2061 <Reference name="OpenMetaverse" path="../../../bin/"/>
2061 <Reference name="System"/> 2062 <Reference name="System"/>
2062 <Reference name="System.Drawing"/> 2063 <Reference name="System.Drawing"/>
2063 <Reference name="OpenSim.Framework"/> 2064 <Reference name="OpenSim.Framework"/>
@@ -2066,8 +2067,8 @@
2066 <Reference name="OpenSim.Region.Framework"/> 2067 <Reference name="OpenSim.Region.Framework"/>
2067 <Reference name="OpenSim.Framework.Communications"/> 2068 <Reference name="OpenSim.Framework.Communications"/>
2068 <Reference name="OpenSim.Services.Interfaces"/> 2069 <Reference name="OpenSim.Services.Interfaces"/>
2069 <Reference name="Nini.dll" /> 2070 <Reference name="Nini" path="../../../bin/"/>
2070 <Reference name="log4net.dll"/> 2071 <Reference name="log4net" path="../../../bin/"/>
2071 <Files> 2072 <Files>
2072 <Match pattern="*.cs" recurse="true"/> 2073 <Match pattern="*.cs" recurse="true"/>
2073 </Files> 2074 </Files>
@@ -2087,26 +2088,26 @@
2087 2088
2088 <ReferencePath>../../../bin/</ReferencePath> 2089 <ReferencePath>../../../bin/</ReferencePath>
2089 2090
2090 <Reference name="OpenMetaverseTypes.dll"/> 2091 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2091 <Reference name="OpenMetaverse.dll"/> 2092 <Reference name="OpenMetaverse" path="../../../bin/"/>
2092 <Reference name="System"/> 2093 <Reference name="System"/>
2093 <Reference name="OpenSim.Framework"/> 2094 <Reference name="OpenSim.Framework"/>
2094 <Reference name="OpenSim.Region.Framework"/> 2095 <Reference name="OpenSim.Region.Framework"/>
2095 <Reference name="OpenSim.Framework.Communications"/> 2096 <Reference name="OpenSim.Framework.Communications"/>
2096 <Reference name="Nini.dll" /> 2097 <Reference name="Nini" path="../../../bin/"/>
2097 <Reference name="log4net.dll"/> 2098 <Reference name="log4net" path="../../../bin/"/>
2098 <Reference name="OpenSim.Framework.Capabilities"/> 2099 <Reference name="OpenSim.Framework.Capabilities"/>
2099 <Reference name="OpenSim.Framework.Servers"/> 2100 <Reference name="OpenSim.Framework.Servers"/>
2100 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 2101 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
2101 <Reference name="OpenMetaverse.StructuredData.dll"/> 2102 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
2102 <Reference name="OpenSim.Region.ClientStack"/> 2103 <Reference name="OpenSim.Region.ClientStack"/>
2103 <Reference name="OpenSim.Region.ClientStack.LindenUDP"/> 2104 <Reference name="OpenSim.Region.ClientStack.LindenUDP"/>
2104 <Reference name="OpenSim.Services.Interfaces"/> 2105 <Reference name="OpenSim.Services.Interfaces"/>
2105 <Reference name="XMLRPC.dll"/> 2106 <Reference name="XMLRPC" path="../../../bin/"/>
2106 <Reference name="OpenSim.Region.Framework"/> 2107 <Reference name="OpenSim.Region.Framework"/>
2107 <Files> 2108 <Files>
2108 <Match pattern="*.cs" recurse="true"/> 2109 <Match pattern="*.cs" recurse="true"/>
2109 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 2110 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
2110 </Files> 2111 </Files>
2111 </Project> 2112 </Project>
2112 2113
@@ -2132,21 +2133,21 @@
2132 <Reference name="System.Drawing"/> 2133 <Reference name="System.Drawing"/>
2133 <Reference name="OpenSim.Framework"/> 2134 <Reference name="OpenSim.Framework"/>
2134 <Reference name="OpenSim.Data"/> 2135 <Reference name="OpenSim.Data"/>
2135 <Reference name="OpenMetaverseTypes.dll"/> 2136 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2136 <Reference name="OpenMetaverse.dll"/> 2137 <Reference name="OpenMetaverse" path="../../../bin/"/>
2137 <Reference name="MySql.Data.dll"/> 2138 <Reference name="MySql.Data" path="../../../bin/"/>
2138 <Reference name="OpenSim.Framework.Console"/> 2139 <Reference name="OpenSim.Framework.Console"/>
2139 <Reference name="OpenSim.Region.Framework"/> 2140 <Reference name="OpenSim.Region.Framework"/>
2140 <Reference name="log4net.dll"/> 2141 <Reference name="log4net" path="../../../bin/"/>
2141 <Reference name="Mono.Addins.dll" /> 2142 <Reference name="Mono.Addins" path="../../../bin/"/>
2142 2143
2143 <Files> 2144 <Files>
2144 <Match pattern="*.cs" recurse="true" > 2145 <Match pattern="*.cs" recurse="true">
2145 <Exclude name="Tests" pattern="Tests" /> 2146 <Exclude name="Tests" pattern="Tests"/>
2146 </Match> 2147 </Match>
2147 <Match path="Resources" pattern="*.sql" buildAction="EmbeddedResource"/> 2148 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.sql"/>
2148 <Match path="Resources" pattern="*.migrations" buildAction="EmbeddedResource"/> 2149 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.migrations"/>
2149 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 2150 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
2150 </Files> 2151 </Files>
2151 </Project> 2152 </Project>
2152 2153
@@ -2171,16 +2172,16 @@
2171 <Reference name="OpenSim.Data"/> 2172 <Reference name="OpenSim.Data"/>
2172 <Reference name="OpenSim.Region.Framework"/> 2173 <Reference name="OpenSim.Region.Framework"/>
2173 <Reference name="OpenSim.Framework.Console"/> 2174 <Reference name="OpenSim.Framework.Console"/>
2174 <Reference name="OpenMetaverseTypes.dll"/> 2175 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2175 <Reference name="OpenMetaverse.dll"/> 2176 <Reference name="OpenMetaverse" path="../../../bin/"/>
2176 <Reference name="log4net.dll"/> 2177 <Reference name="log4net" path="../../../bin/"/>
2177 <Reference name="Mono.Addins.dll" /> 2178 <Reference name="Mono.Addins" path="../../../bin/"/>
2178 2179
2179 <Files> 2180 <Files>
2180 <Match pattern="*.cs" recurse="true"/> 2181 <Match pattern="*.cs" recurse="true"/>
2181 <Match path="Resources" pattern="*.sql" buildAction="EmbeddedResource"/> 2182 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.sql"/>
2182 <Match path="Resources" pattern="*.migrations" buildAction="EmbeddedResource"/> 2183 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.migrations"/>
2183 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 2184 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
2184 </Files> 2185 </Files>
2185 </Project> 2186 </Project>
2186 2187
@@ -2200,25 +2201,25 @@
2200 <Reference name="System"/> 2201 <Reference name="System"/>
2201 <Reference name="System.Xml"/> 2202 <Reference name="System.Xml"/>
2202 <Reference name="System.Data"/> 2203 <Reference name="System.Data"/>
2203 <Reference name="System.Data.SQLite.dll"/> 2204 <Reference name="System.Data.SQLite" path="../../../bin/"/>
2204 <Reference name="OpenSim.Data"/> 2205 <Reference name="OpenSim.Data"/>
2205 <Reference name="System.Drawing"/> 2206 <Reference name="System.Drawing"/>
2206 <Reference name="OpenSim.Framework"/> 2207 <Reference name="OpenSim.Framework"/>
2207 <Reference name="OpenSim.Framework.Console"/> 2208 <Reference name="OpenSim.Framework.Console"/>
2208 <Reference name="OpenSim.Region.Framework"/> 2209 <Reference name="OpenSim.Region.Framework"/>
2209 <Reference name="OpenMetaverseTypes.dll"/> 2210 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2210 <Reference name="OpenMetaverse.dll"/> 2211 <Reference name="OpenMetaverse" path="../../../bin/"/>
2211 <Reference name="Mono.Data.SqliteClient"/> 2212 <Reference name="Mono.Data.SqliteClient"/>
2212 <Reference name="Mono.Addins.dll" /> 2213 <Reference name="Mono.Addins" path="../../../bin/"/>
2213 <Reference name="log4net.dll"/> 2214 <Reference name="log4net" path="../../../bin/"/>
2214 2215
2215 <Files> 2216 <Files>
2216 <Match pattern="*.cs" recurse="true" > 2217 <Match pattern="*.cs" recurse="true">
2217 <Exclude name="Tests" pattern="Tests" /> 2218 <Exclude name="Tests" pattern="Tests"/>
2218 </Match> 2219 </Match>
2219 <Match path="Resources" pattern="*.sql" buildAction="EmbeddedResource"/> 2220 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.sql"/>
2220 <Match path="Resources" pattern="*.migrations" buildAction="EmbeddedResource"/> 2221 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.migrations"/>
2221 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 2222 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
2222 </Files> 2223 </Files>
2223 </Project> 2224 </Project>
2224 2225
@@ -2243,20 +2244,20 @@
2243 <Reference name="OpenSim.Framework"/> 2244 <Reference name="OpenSim.Framework"/>
2244 <Reference name="OpenSim.Framework.Console"/> 2245 <Reference name="OpenSim.Framework.Console"/>
2245 <Reference name="OpenSim.Region.Framework"/> 2246 <Reference name="OpenSim.Region.Framework"/>
2246 <Reference name="OpenMetaverseTypes.dll"/> 2247 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2247 <Reference name="OpenMetaverse.dll"/> 2248 <Reference name="OpenMetaverse" path="../../../bin/"/>
2248 <Reference name="OpenMetaverse.StructuredData.dll"/> 2249 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
2249 <Reference name="Mono.Data.Sqlite"/> 2250 <Reference name="Mono.Data.Sqlite"/>
2250 <Reference name="Mono.Addins.dll" /> 2251 <Reference name="Mono.Addins" path="../../../bin/"/>
2251 <Reference name="log4net.dll"/> 2252 <Reference name="log4net" path="../../../bin/"/>
2252 2253
2253 <Files> 2254 <Files>
2254 <Match pattern="*.cs" recurse="true" > 2255 <Match pattern="*.cs" recurse="true">
2255 <Exclude name="Tests" pattern="Tests" /> 2256 <Exclude name="Tests" pattern="Tests"/>
2256 </Match> 2257 </Match>
2257 <Match path="Resources" pattern="*.sql" buildAction="EmbeddedResource"/> 2258 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.sql"/>
2258 <Match path="Resources" pattern="*.migrations" buildAction="EmbeddedResource"/> 2259 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.migrations"/>
2259 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 2260 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
2260 </Files> 2261 </Files>
2261 </Project> 2262 </Project>
2262 2263
@@ -2279,18 +2280,18 @@
2279 <Reference name="System.Net"/> 2280 <Reference name="System.Net"/>
2280 <Reference name="System.Web"/> 2281 <Reference name="System.Web"/>
2281 <Reference name="System.Xml"/> 2282 <Reference name="System.Xml"/>
2282 <Reference name="OpenMetaverseTypes.dll"/> 2283 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
2283 <Reference name="OpenSim" /> 2284 <Reference name="OpenSim"/>
2284 <Reference name="OpenSim.Framework"/> 2285 <Reference name="OpenSim.Framework"/>
2285 <Reference name="OpenSim.Framework.Communications"/> 2286 <Reference name="OpenSim.Framework.Communications"/>
2286 <Reference name="OpenSim.Region.Framework" /> 2287 <Reference name="OpenSim.Region.Framework"/>
2287 <Reference name="OpenSim.Region.CoreModules" /> 2288 <Reference name="OpenSim.Region.CoreModules"/>
2288 <Reference name="OpenSim.Framework.Console"/> 2289 <Reference name="OpenSim.Framework.Console"/>
2289 <Reference name="OpenSim.Services.Interfaces"/> 2290 <Reference name="OpenSim.Services.Interfaces"/>
2290 <Reference name="Nini.dll" /> 2291 <Reference name="Nini" path="../../../../bin/"/>
2291 <Reference name="RAIL.dll"/> 2292 <Reference name="RAIL" path="../../../../bin/"/>
2292 <Reference name="Nini.dll" /> 2293 <Reference name="Nini" path="../../../../bin/"/>
2293 <Reference name="log4net.dll"/> 2294 <Reference name="log4net" path="../../../../bin/"/>
2294 <Reference name="SmartThreadPool"/> 2295 <Reference name="SmartThreadPool"/>
2295 2296
2296 <Files> 2297 <Files>
@@ -2317,18 +2318,18 @@
2317 <Reference name="System.Data"/> 2318 <Reference name="System.Data"/>
2318 <Reference name="System.Web"/> 2319 <Reference name="System.Web"/>
2319 <Reference name="System.Xml"/> 2320 <Reference name="System.Xml"/>
2320 <Reference name="OpenMetaverseTypes.dll"/> 2321 <Reference name="OpenMetaverseTypes" path="../../../../../../bin/"/>
2321 <Reference name="OpenSim" /> 2322 <Reference name="OpenSim"/>
2322 <Reference name="OpenSim.Framework"/> 2323 <Reference name="OpenSim.Framework"/>
2323 <Reference name="OpenSim.Framework.Communications"/> 2324 <Reference name="OpenSim.Framework.Communications"/>
2324 <Reference name="OpenSim.Region.Framework" /> 2325 <Reference name="OpenSim.Region.Framework"/>
2325 <Reference name="OpenSim.Region.CoreModules" /> 2326 <Reference name="OpenSim.Region.CoreModules"/>
2326 <Reference name="OpenSim.Framework.Console"/> 2327 <Reference name="OpenSim.Framework.Console"/>
2327 <Reference name="OpenSim.Region.ScriptEngine.Shared"/> 2328 <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
2328 <Reference name="Nini.dll" /> 2329 <Reference name="Nini" path="../../../../../../bin/"/>
2329 <Reference name="RAIL.dll"/> 2330 <Reference name="RAIL" path="../../../../../../bin/"/>
2330 <Reference name="Nini.dll" /> 2331 <Reference name="Nini" path="../../../../../../bin/"/>
2331 <Reference name="log4net.dll"/> 2332 <Reference name="log4net" path="../../../../../../bin/"/>
2332 2333
2333 <Files> 2334 <Files>
2334 <Match pattern="*.cs" recurse="false"/> 2335 <Match pattern="*.cs" recurse="false"/>
@@ -2352,17 +2353,17 @@
2352 <Reference name="System.Data"/> 2353 <Reference name="System.Data"/>
2353 <Reference name="System.Web"/> 2354 <Reference name="System.Web"/>
2354 <Reference name="System.Xml"/> 2355 <Reference name="System.Xml"/>
2355 <Reference name="OpenMetaverseTypes.dll"/> 2356 <Reference name="OpenMetaverseTypes" path="../../../../../../../bin/"/>
2356 <Reference name="OpenSim" /> 2357 <Reference name="OpenSim"/>
2357 <Reference name="OpenSim.Framework"/> 2358 <Reference name="OpenSim.Framework"/>
2358 <Reference name="OpenSim.Framework.Communications"/> 2359 <Reference name="OpenSim.Framework.Communications"/>
2359 <Reference name="OpenSim.Region.CoreModules" /> 2360 <Reference name="OpenSim.Region.CoreModules"/>
2360 <Reference name="OpenSim.Framework.Console"/> 2361 <Reference name="OpenSim.Framework.Console"/>
2361 <Reference name="OpenSim.Region.ScriptEngine.Shared"/> 2362 <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
2362 <Reference name="Nini.dll" /> 2363 <Reference name="Nini" path="../../../../../../../bin/"/>
2363 <Reference name="RAIL.dll"/> 2364 <Reference name="RAIL" path="../../../../../../../bin/"/>
2364 <Reference name="Nini.dll" /> 2365 <Reference name="Nini" path="../../../../../../../bin/"/>
2365 <Reference name="log4net.dll"/> 2366 <Reference name="log4net" path="../../../../../../../bin/"/>
2366 2367
2367 <Files> 2368 <Files>
2368 <Match pattern="*.cs" recurse="false"/> 2369 <Match pattern="*.cs" recurse="false"/>
@@ -2387,22 +2388,22 @@
2387 <Reference name="System.Data"/> 2388 <Reference name="System.Data"/>
2388 <Reference name="System.Web"/> 2389 <Reference name="System.Web"/>
2389 <Reference name="System.Xml"/> 2390 <Reference name="System.Xml"/>
2390 <Reference name="OpenMetaverseTypes.dll"/> 2391 <Reference name="OpenMetaverseTypes" path="../../../../../../bin/"/>
2391 <Reference name="OpenMetaverse.dll"/> 2392 <Reference name="OpenMetaverse" path="../../../../../../bin/"/>
2392 <Reference name="OpenSim" /> 2393 <Reference name="OpenSim"/>
2393 <Reference name="OpenSim.Framework"/> 2394 <Reference name="OpenSim.Framework"/>
2394 <Reference name="OpenSim.Framework.Communications"/> 2395 <Reference name="OpenSim.Framework.Communications"/>
2395 <Reference name="OpenSim.Region.Framework" /> 2396 <Reference name="OpenSim.Region.Framework"/>
2396 <Reference name="OpenSim.Region.CoreModules" /> 2397 <Reference name="OpenSim.Region.CoreModules"/>
2397 <Reference name="OpenSim.Region.Physics.Manager" /> 2398 <Reference name="OpenSim.Region.Physics.Manager"/>
2398 <Reference name="OpenSim.Framework.Console"/> 2399 <Reference name="OpenSim.Framework.Console"/>
2399 <Reference name="OpenSim.Services.Interfaces"/> 2400 <Reference name="OpenSim.Services.Interfaces"/>
2400 <Reference name="OpenSim.Region.ScriptEngine.Shared"/> 2401 <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
2401 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime"/> 2402 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime"/>
2402 <Reference name="Nini.dll" /> 2403 <Reference name="Nini" path="../../../../../../bin/"/>
2403 <Reference name="RAIL.dll"/> 2404 <Reference name="RAIL" path="../../../../../../bin/"/>
2404 <Reference name="Nini.dll" /> 2405 <Reference name="Nini" path="../../../../../../bin/"/>
2405 <Reference name="log4net.dll"/> 2406 <Reference name="log4net" path="../../../../../../bin/"/>
2406 2407
2407 <Files> 2408 <Files>
2408 <Match pattern="*.cs" recurse="true"/> 2409 <Match pattern="*.cs" recurse="true"/>
@@ -2423,20 +2424,20 @@
2423 2424
2424 <ReferencePath>../../../../../bin/</ReferencePath> 2425 <ReferencePath>../../../../../bin/</ReferencePath>
2425 <Reference name="System"/> 2426 <Reference name="System"/>
2426 <Reference name="OpenSim.Framework" /> 2427 <Reference name="OpenSim.Framework"/>
2427 <Reference name="OpenSim.Region.Framework" /> 2428 <Reference name="OpenSim.Region.Framework"/>
2428 <Reference name="OpenSim.Region.ScriptEngine.Shared"/> 2429 <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
2429 <Reference name="OpenSim.Region.ScriptEngine.Shared.YieldProlog"/> 2430 <Reference name="OpenSim.Region.ScriptEngine.Shared.YieldProlog"/>
2430 <Reference name="OpenSim.Region.CoreModules" /> 2431 <Reference name="OpenSim.Region.CoreModules"/>
2431 <Reference name="OpenMetaverseTypes.dll"/> 2432 <Reference name="OpenMetaverseTypes" path="../../../../../bin/"/>
2432 <Reference name="Nini.dll" /> 2433 <Reference name="Nini" path="../../../../../bin/"/>
2433 <Reference name="RAIL.dll"/> 2434 <Reference name="RAIL" path="../../../../../bin/"/>
2434 <Reference name="log4net.dll"/> 2435 <Reference name="log4net" path="../../../../../bin/"/>
2435 <Reference name="Tools.dll"/> 2436 <Reference name="Tools" path="../../../../../bin/"/>
2436 2437
2437 <Files> 2438 <Files>
2438 <Match pattern="*.cs" recurse="true"> 2439 <Match pattern="*.cs" recurse="true">
2439 <Exclude name="Tests" pattern="Tests" /> 2440 <Exclude name="Tests" pattern="Tests"/>
2440 </Match> 2441 </Match>
2441 </Files> 2442 </Files>
2442 </Project> 2443 </Project>
@@ -2458,22 +2459,22 @@
2458 <Reference name="System.Data"/> 2459 <Reference name="System.Data"/>
2459 <Reference name="System.Web"/> 2460 <Reference name="System.Web"/>
2460 <Reference name="System.Xml"/> 2461 <Reference name="System.Xml"/>
2461 <Reference name="OpenMetaverseTypes.dll"/> 2462 <Reference name="OpenMetaverseTypes" path="../../../../../bin/"/>
2462 <Reference name="OpenSim" /> 2463 <Reference name="OpenSim"/>
2463 <Reference name="OpenSim.Framework"/> 2464 <Reference name="OpenSim.Framework"/>
2464 <Reference name="OpenSim.Framework.Communications"/> 2465 <Reference name="OpenSim.Framework.Communications"/>
2465 <Reference name="OpenSim.Region.Framework" /> 2466 <Reference name="OpenSim.Region.Framework"/>
2466 <Reference name="OpenSim.Region.CoreModules" /> 2467 <Reference name="OpenSim.Region.CoreModules"/>
2467 <Reference name="OpenSim.Framework.Console"/> 2468 <Reference name="OpenSim.Framework.Console"/>
2468 <Reference name="OpenSim.Region.ScriptEngine.Shared"/> 2469 <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
2469 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/> 2470 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/>
2470 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/> 2471 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/>
2471 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime"/> 2472 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime"/>
2472 <Reference name="SmartThreadPool"/> 2473 <Reference name="SmartThreadPool"/>
2473 <Reference name="Axiom.MathLib.dll"/> 2474 <Reference name="Axiom.MathLib" path="../../../../../bin/"/>
2474 <Reference name="Nini.dll" /> 2475 <Reference name="Nini" path="../../../../../bin/"/>
2475 <Reference name="RAIL.dll"/> 2476 <Reference name="RAIL" path="../../../../../bin/"/>
2476 <Reference name="log4net.dll"/> 2477 <Reference name="log4net" path="../../../../../bin/"/>
2477 2478
2478 <Files> 2479 <Files>
2479 <Match pattern="*.cs" recurse="true"/> 2480 <Match pattern="*.cs" recurse="true"/>
@@ -2497,27 +2498,27 @@
2497 <Reference name="System.Data"/> 2498 <Reference name="System.Data"/>
2498 <Reference name="System.Web"/> 2499 <Reference name="System.Web"/>
2499 <Reference name="System.Xml"/> 2500 <Reference name="System.Xml"/>
2500 <Reference name="OpenMetaverseTypes.dll"/> 2501 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
2501 <Reference name="OpenMetaverse.StructuredData.dll"/> 2502 <Reference name="OpenMetaverse.StructuredData" path="../../../../bin/"/>
2502 <Reference name="OpenSim" /> 2503 <Reference name="OpenSim"/>
2503 <Reference name="OpenSim.Framework"/> 2504 <Reference name="OpenSim.Framework"/>
2504 <Reference name="OpenSim.Framework.Communications"/> 2505 <Reference name="OpenSim.Framework.Communications"/>
2505 <Reference name="OpenSim.Region.Framework" /> 2506 <Reference name="OpenSim.Region.Framework"/>
2506 <Reference name="OpenSim.Region.CoreModules" /> 2507 <Reference name="OpenSim.Region.CoreModules"/>
2507 <Reference name="OpenSim.Framework.Console"/> 2508 <Reference name="OpenSim.Framework.Console"/>
2508 <Reference name="OpenSim.Region.ScriptEngine.Shared"/> 2509 <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
2509 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/> 2510 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/>
2510 <Reference name="OpenSim.Region.ScriptEngine.Shared.Instance"/> 2511 <Reference name="OpenSim.Region.ScriptEngine.Shared.Instance"/>
2511 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/> 2512 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/>
2512 <Reference name="SmartThreadPool"/> 2513 <Reference name="SmartThreadPool"/>
2513 <Reference name="Nini.dll" /> 2514 <Reference name="Nini" path="../../../../bin/"/>
2514 <Reference name="RAIL.dll"/> 2515 <Reference name="RAIL" path="../../../../bin/"/>
2515 <Reference name="log4net.dll"/> 2516 <Reference name="log4net" path="../../../../bin/"/>
2516 2517
2517 <Files> 2518 <Files>
2518 <Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/> 2519 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
2519 <Match pattern="*.cs" recurse="true"> 2520 <Match pattern="*.cs" recurse="true">
2520 <Exclude name="Tests" pattern="Tests" /> 2521 <Exclude name="Tests" pattern="Tests"/>
2521 </Match> 2522 </Match>
2522 </Files> 2523 </Files>
2523 </Project> 2524 </Project>
@@ -2542,13 +2543,13 @@
2542 <Reference name="System.Drawing"/> 2543 <Reference name="System.Drawing"/>
2543 <Reference name="System.Runtime.Remoting"/> 2544 <Reference name="System.Runtime.Remoting"/>
2544 <Reference name="System.Web"/> 2545 <Reference name="System.Web"/>
2545 <Reference name="OpenMetaverseTypes.dll"/> 2546 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2546 <Reference name="OpenMetaverse.StructuredData.dll"/> 2547 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
2547 <Reference name="OpenMetaverse.dll"/> 2548 <Reference name="OpenMetaverse" path="../../../bin/"/>
2548 <Reference name="OpenSim.Framework"/> 2549 <Reference name="OpenSim.Framework"/>
2549 <Reference name="OpenSim.Data" /> 2550 <Reference name="OpenSim.Data"/>
2550 <Reference name="OpenSim.Region.Framework" /> 2551 <Reference name="OpenSim.Region.Framework"/>
2551 <Reference name="OpenSim.Region.CoreModules" /> 2552 <Reference name="OpenSim.Region.CoreModules"/>
2552 <Reference name="OpenSim.Framework.Console"/> 2553 <Reference name="OpenSim.Framework.Console"/>
2553 <Reference name="OpenSim.Framework.Servers"/> 2554 <Reference name="OpenSim.Framework.Servers"/>
2554 <Reference name="OpenSim.Framework.Capabilities"/> 2555 <Reference name="OpenSim.Framework.Capabilities"/>
@@ -2559,15 +2560,15 @@
2559 <Reference name="Mono.Addins"/> 2560 <Reference name="Mono.Addins"/>
2560 2561
2561 <!-- For scripting in funny languages by default --> 2562 <!-- For scripting in funny languages by default -->
2562 <Reference name="XMLRPC.dll"/> 2563 <Reference name="XMLRPC" path="../../../bin/"/>
2563 <Reference name="OpenSim.Framework.Communications"/> 2564 <Reference name="OpenSim.Framework.Communications"/>
2564 <Reference name="Nini.dll" /> 2565 <Reference name="Nini" path="../../../bin/"/>
2565 <Reference name="log4net.dll"/> 2566 <Reference name="log4net" path="../../../bin/"/>
2566 <Reference name="DotNetOpenMail.dll"/> 2567 <Reference name="DotNetOpenMail" path="../../../bin/"/>
2567 2568
2568 <Files> 2569 <Files>
2569 <Match pattern="*.cs" recurse="true"> 2570 <Match pattern="*.cs" recurse="true">
2570 <Exclude name="Tests" pattern="Tests" /> 2571 <Exclude name="Tests" pattern="Tests"/>
2571 </Match> 2572 </Match>
2572 </Files> 2573 </Files>
2573 </Project> 2574 </Project>
@@ -2588,12 +2589,12 @@
2588 2589
2589 <ReferencePath>../../../bin/</ReferencePath> 2590 <ReferencePath>../../../bin/</ReferencePath>
2590 <Reference name="System"/> 2591 <Reference name="System"/>
2591 <Reference name="OpenMetaverseTypes.dll"/> 2592 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2592 <Reference name="OpenMetaverse.dll"/> 2593 <Reference name="OpenMetaverse" path="../../../bin/"/>
2593 <Reference name="OpenSim.Framework"/> 2594 <Reference name="OpenSim.Framework"/>
2594 <Reference name="OpenSim.Framework.Console"/> 2595 <Reference name="OpenSim.Framework.Console"/>
2595 <Reference name="Nini.dll" /> 2596 <Reference name="Nini" path="../../../bin/"/>
2596 <Reference name="log4net.dll"/> 2597 <Reference name="log4net" path="../../../bin/"/>
2597 2598
2598 <Files> 2599 <Files>
2599 <Match pattern="*.cs" recurse="true"/> 2600 <Match pattern="*.cs" recurse="true"/>
@@ -2614,13 +2615,13 @@
2614 2615
2615 <ReferencePath>../../../bin/</ReferencePath> 2616 <ReferencePath>../../../bin/</ReferencePath>
2616 <Reference name="System"/> 2617 <Reference name="System"/>
2617 <Reference name="OpenMetaverseTypes.dll"/> 2618 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2618 <Reference name="OpenMetaverse.dll"/> 2619 <Reference name="OpenMetaverse" path="../../../bin/"/>
2619 <Reference name="OpenSim.Framework"/> 2620 <Reference name="OpenSim.Framework"/>
2620 <Reference name="OpenSim.Framework.Console"/> 2621 <Reference name="OpenSim.Framework.Console"/>
2621 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/> 2622 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/>
2622 <Reference name="Nini.dll" /> 2623 <Reference name="Nini" path="../../../bin/"/>
2623 <Reference name="log4net.dll"/> 2624 <Reference name="log4net" path="../../../bin/"/>
2624 2625
2625 <Files> 2626 <Files>
2626 <Match pattern="*.cs" recurse="true"/> 2627 <Match pattern="*.cs" recurse="true"/>
@@ -2642,8 +2643,8 @@
2642 <ReferencePath>../../../bin/</ReferencePath> 2643 <ReferencePath>../../../bin/</ReferencePath>
2643 <Reference name="System"/> 2644 <Reference name="System"/>
2644 <Reference name="System.Xml"/> 2645 <Reference name="System.Xml"/>
2645 <Reference name="Nini.dll"/> 2646 <Reference name="Nini" path="../../../bin/"/>
2646 <Reference name="log4net.dll"/> 2647 <Reference name="log4net" path="../../../bin/"/>
2647 2648
2648 <Files> 2649 <Files>
2649 <Match pattern="*.cs" recurse="true"/> 2650 <Match pattern="*.cs" recurse="true"/>
@@ -2665,13 +2666,13 @@
2665 2666
2666 <ReferencePath>../../bin/</ReferencePath> 2667 <ReferencePath>../../bin/</ReferencePath>
2667 <Reference name="System"/> 2668 <Reference name="System"/>
2668 <Reference name="OpenMetaverseTypes.dll"/> 2669 <Reference name="OpenMetaverseTypes" path="../../bin/"/>
2669 <Reference name="OpenMetaverse.dll"/> 2670 <Reference name="OpenMetaverse" path="../../bin/"/>
2670 <Reference name="OpenSim.Framework"/> 2671 <Reference name="OpenSim.Framework"/>
2671 <Reference name="OpenSim.Framework.Console"/> 2672 <Reference name="OpenSim.Framework.Console"/>
2672 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 2673 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
2673 <Reference name="Nini.dll" /> 2674 <Reference name="Nini" path="../../bin/"/>
2674 <Reference name="log4net.dll"/> 2675 <Reference name="log4net" path="../../bin/"/>
2675 2676
2676 <Files> 2677 <Files>
2677 <Match pattern="*.cs" recurse="true"/> 2678 <Match pattern="*.cs" recurse="true"/>
@@ -2693,13 +2694,13 @@
2693 2694
2694 <ReferencePath>../../../../bin/</ReferencePath> 2695 <ReferencePath>../../../../bin/</ReferencePath>
2695 <Reference name="System"/> 2696 <Reference name="System"/>
2696 <Reference name="OpenMetaverseTypes.dll"/> 2697 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
2697 <Reference name="OpenMetaverse.dll"/> 2698 <Reference name="OpenMetaverse" path="../../../../bin/"/>
2698 <Reference name="OpenSim.Framework"/> 2699 <Reference name="OpenSim.Framework"/>
2699 <Reference name="OpenSim.Services.Interfaces" /> 2700 <Reference name="OpenSim.Services.Interfaces"/>
2700 <Reference name="OpenSim.Services.Connectors" /> 2701 <Reference name="OpenSim.Services.Connectors"/>
2701 <Reference name="Nini.dll" /> 2702 <Reference name="Nini" path="../../../../bin/"/>
2702 <Reference name="log4net.dll"/> 2703 <Reference name="log4net" path="../../../../bin/"/>
2703 2704
2704 <Files> 2705 <Files>
2705 <Match pattern="*.cs" recurse="true"/> 2706 <Match pattern="*.cs" recurse="true"/>
@@ -2720,13 +2721,13 @@
2720 2721
2721 <ReferencePath>../../../../bin/</ReferencePath> 2722 <ReferencePath>../../../../bin/</ReferencePath>
2722 <Reference name="System"/> 2723 <Reference name="System"/>
2723 <Reference name="OpenMetaverseTypes.dll"/> 2724 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
2724 <Reference name="OpenMetaverse.dll"/> 2725 <Reference name="OpenMetaverse" path="../../../../bin/"/>
2725 <Reference name="OpenSim.Framework"/> 2726 <Reference name="OpenSim.Framework"/>
2726 <Reference name="OpenSim.Services.Interfaces" /> 2727 <Reference name="OpenSim.Services.Interfaces"/>
2727 <Reference name="OpenSim.Services.Connectors" /> 2728 <Reference name="OpenSim.Services.Connectors"/>
2728 <Reference name="Nini.dll" /> 2729 <Reference name="Nini" path="../../../../bin/"/>
2729 <Reference name="log4net.dll"/> 2730 <Reference name="log4net" path="../../../../bin/"/>
2730 2731
2731 <Files> 2732 <Files>
2732 <Match pattern="*.cs" recurse="true"/> 2733 <Match pattern="*.cs" recurse="true"/>
@@ -2747,13 +2748,13 @@
2747 2748
2748 <ReferencePath>../../../../bin/</ReferencePath> 2749 <ReferencePath>../../../../bin/</ReferencePath>
2749 <Reference name="System"/> 2750 <Reference name="System"/>
2750 <Reference name="OpenMetaverseTypes.dll"/> 2751 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
2751 <Reference name="OpenMetaverse.dll"/> 2752 <Reference name="OpenMetaverse" path="../../../../bin/"/>
2752 <Reference name="OpenSim.Framework"/> 2753 <Reference name="OpenSim.Framework"/>
2753 <Reference name="OpenSim.Services.Interfaces" /> 2754 <Reference name="OpenSim.Services.Interfaces"/>
2754 <Reference name="OpenSim.Services.Connectors" /> 2755 <Reference name="OpenSim.Services.Connectors"/>
2755 <Reference name="Nini.dll" /> 2756 <Reference name="Nini" path="../../../../bin/"/>
2756 <Reference name="log4net.dll"/> 2757 <Reference name="log4net" path="../../../../bin/"/>
2757 2758
2758 <Files> 2759 <Files>
2759 <Match pattern="*.cs" recurse="true"/> 2760 <Match pattern="*.cs" recurse="true"/>
@@ -2779,11 +2780,11 @@
2779 <Reference name="System.Drawing"/> 2780 <Reference name="System.Drawing"/>
2780 <Reference name="System.Xml"/> 2781 <Reference name="System.Xml"/>
2781 <Reference name="System.Data"/> 2782 <Reference name="System.Data"/>
2782 <Reference name="log4net.dll"/> 2783 <Reference name="log4net" path="../../../bin/"/>
2783 <Reference name="Nini.dll" /> 2784 <Reference name="Nini" path="../../../bin/"/>
2784 <Reference name="nunit.framework.dll" /> 2785 <Reference name="nunit.framework" path="../../../bin/"/>
2785 <Reference name="OpenMetaverse.dll"/> 2786 <Reference name="OpenMetaverse" path="../../../bin/"/>
2786 <Reference name="OpenMetaverseTypes.dll"/> 2787 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2787 <Reference name="OpenSim.Framework"/> 2788 <Reference name="OpenSim.Framework"/>
2788 <Reference name="OpenSim.Framework.Communications"/> 2789 <Reference name="OpenSim.Framework.Communications"/>
2789 <Reference name="OpenSim.Framework.Console"/> 2790 <Reference name="OpenSim.Framework.Console"/>
@@ -2815,9 +2816,9 @@
2815 2816
2816 <ReferencePath>../../bin/</ReferencePath> 2817 <ReferencePath>../../bin/</ReferencePath>
2817 <Reference name="OpenSim.Framework"/> 2818 <Reference name="OpenSim.Framework"/>
2818 <Reference name="Nini.dll" /> 2819 <Reference name="Nini" path="../../bin/"/>
2819 <Reference name="nunit.framework.dll" /> 2820 <Reference name="nunit.framework" path="../../bin/"/>
2820 <Reference name="OpenSim" /> 2821 <Reference name="OpenSim"/>
2821 <Files> 2822 <Files>
2822 <Match pattern="*.cs" recurse="false"/> 2823 <Match pattern="*.cs" recurse="false"/>
2823 </Files> 2824 </Files>
@@ -2841,27 +2842,27 @@
2841 <Reference name="System.Core"/> 2842 <Reference name="System.Core"/>
2842 <Reference name="System.Drawing"/> 2843 <Reference name="System.Drawing"/>
2843 <Reference name="System.Data"/> 2844 <Reference name="System.Data"/>
2844 <Reference name="OpenMetaverse.dll"/> 2845 <Reference name="OpenMetaverse" path="../../../bin/"/>
2845 <Reference name="OpenMetaverseTypes.dll"/> 2846 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2846 <Reference name="OpenSim.Framework"/> 2847 <Reference name="OpenSim.Framework"/>
2847 <Reference name="OpenSim.Data"/> 2848 <Reference name="OpenSim.Data"/>
2848 <Reference name="OpenSim.Region.Framework"/> 2849 <Reference name="OpenSim.Region.Framework"/>
2849 <Reference name="OpenSim.Region.CoreModules"/> 2850 <Reference name="OpenSim.Region.CoreModules"/>
2850 <Reference name="OpenSim.Tests.Common"/> 2851 <Reference name="OpenSim.Tests.Common"/>
2851 <Reference name="log4net.dll"/> 2852 <Reference name="log4net" path="../../../bin/"/>
2852 <Reference name="Mono.Addins.dll" /> 2853 <Reference name="Mono.Addins" path="../../../bin/"/>
2853 <Reference name="nunit.framework.dll" /> 2854 <Reference name="nunit.framework" path="../../../bin/"/>
2854 <Reference name="Nini.dll" /> 2855 <Reference name="Nini" path="../../../bin/"/>
2855 2856
2856 <Reference name="OpenSim.Data.MySQL"/> 2857 <Reference name="OpenSim.Data.MySQL"/>
2857 <Reference name="OpenSim.Data.MSSQL"/> 2858 <Reference name="OpenSim.Data.MSSQL"/>
2858 <Reference name="OpenSim.Data.SQLite"/> 2859 <Reference name="OpenSim.Data.SQLite"/>
2859 2860
2860 <Reference name="MySql.Data.dll"/> 2861 <Reference name="MySql.Data" path="../../../bin/"/>
2861 <Reference name="Mono.Data.Sqlite.dll"/> 2862 <Reference name="Mono.Data.Sqlite" path="../../../bin/"/>
2862 <Files> 2863 <Files>
2863 <Match pattern="*.cs" recurse="true"/> 2864 <Match pattern="*.cs" recurse="true"/>
2864 <Match path="Resources" pattern="*.ini" buildAction="EmbeddedResource"/> 2865 <Match buildAction="EmbeddedResource" path="Resources" pattern="*.ini"/>
2865 </Files> 2866 </Files>
2866 </Project> 2867 </Project>
2867 2868
@@ -2882,16 +2883,16 @@
2882 <Reference name="System"/> 2883 <Reference name="System"/>
2883 <Reference name="System.Xml"/> 2884 <Reference name="System.Xml"/>
2884 <Reference name="System.Data"/> 2885 <Reference name="System.Data"/>
2885 <Reference name="OpenMetaverse.dll"/> 2886 <Reference name="OpenMetaverse" path="../../../bin/"/>
2886 <Reference name="OpenMetaverseTypes.dll"/> 2887 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2887 <Reference name="OpenMetaverse.StructuredData.dll"/> 2888 <Reference name="OpenMetaverse.StructuredData" path="../../../bin/"/>
2888 <Reference name="XMLRPC.dll"/> 2889 <Reference name="XMLRPC" path="../../../bin/"/>
2889 <Reference name="OpenSim.Framework.Console"/> 2890 <Reference name="OpenSim.Framework.Console"/>
2890 <Reference name="OpenSim.Framework"/> 2891 <Reference name="OpenSim.Framework"/>
2891 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 2892 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
2892 <Reference name="OpenSim.Tests.Common"/> 2893 <Reference name="OpenSim.Tests.Common"/>
2893 <Reference name="Nini.dll" /> 2894 <Reference name="Nini" path="../../../bin/"/>
2894 <Reference name="nunit.framework.dll" /> 2895 <Reference name="nunit.framework" path="../../../bin/"/>
2895 <Files> 2896 <Files>
2896 <Match pattern="*.cs" recurse="false"/> 2897 <Match pattern="*.cs" recurse="false"/>
2897 </Files> 2898 </Files>
@@ -2911,16 +2912,16 @@
2911 2912
2912 <ReferencePath>../../../../bin/</ReferencePath> 2913 <ReferencePath>../../../../bin/</ReferencePath>
2913 <Reference name="System"/> 2914 <Reference name="System"/>
2914 <Reference name="OpenMetaverse.dll"/> 2915 <Reference name="OpenMetaverse" path="../../../../bin/"/>
2915 <Reference name="OpenMetaverseTypes.dll"/> 2916 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
2916 <Reference name="OpenMetaverse.StructuredData.dll"/> 2917 <Reference name="OpenMetaverse.StructuredData" path="../../../../bin/"/>
2917 <Reference name="OpenSim.Data"/> 2918 <Reference name="OpenSim.Data"/>
2918 <Reference name="OpenSim.Services.Interfaces"/> 2919 <Reference name="OpenSim.Services.Interfaces"/>
2919 <Reference name="OpenSim.Tests.Common"/> 2920 <Reference name="OpenSim.Tests.Common"/>
2920 <Reference name="OpenSim.Framework"/> 2921 <Reference name="OpenSim.Framework"/>
2921 <Reference name="OpenSim.Framework.Serialization"/> 2922 <Reference name="OpenSim.Framework.Serialization"/>
2922 <Reference name="log4net.dll"/> 2923 <Reference name="log4net" path="../../../../bin/"/>
2923 <Reference name="nunit.framework.dll" /> 2924 <Reference name="nunit.framework" path="../../../../bin/"/>
2924 2925
2925 <Files> 2926 <Files>
2926 <Match pattern="*.cs" recurse="true"> 2927 <Match pattern="*.cs" recurse="true">
@@ -2948,9 +2949,9 @@
2948 <Reference name="OpenSim.Framework"/> 2949 <Reference name="OpenSim.Framework"/>
2949 <Reference name="OpenSim.Framework.Servers"/> 2950 <Reference name="OpenSim.Framework.Servers"/>
2950 <Reference name="OpenSim.Framework.Servers.HttpServer"/> 2951 <Reference name="OpenSim.Framework.Servers.HttpServer"/>
2951 <Reference name="log4net.dll"/> 2952 <Reference name="log4net" path="../../../../bin/"/>
2952 <Reference name="HttpServer_OpenSim.dll"/> 2953 <Reference name="HttpServer_OpenSim" path="../../../../bin/"/>
2953 <Reference name="nunit.framework.dll" /> 2954 <Reference name="nunit.framework" path="../../../../bin/"/>
2954 2955
2955 <Files> 2956 <Files>
2956 <Match pattern="*.cs" recurse="true"> 2957 <Match pattern="*.cs" recurse="true">
@@ -2975,8 +2976,8 @@
2975 <Reference name="System.Core"/> 2976 <Reference name="System.Core"/>
2976 <Reference name="System.Xml"/> 2977 <Reference name="System.Xml"/>
2977 <Reference name="System.Drawing"/> 2978 <Reference name="System.Drawing"/>
2978 <Reference name="OpenMetaverseTypes.dll"/> 2979 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
2979 <Reference name="OpenMetaverse.dll"/> 2980 <Reference name="OpenMetaverse" path="../../../bin/"/>
2980 <Reference name="OpenSim.Data"/> 2981 <Reference name="OpenSim.Data"/>
2981 <Reference name="OpenSim.Framework"/> 2982 <Reference name="OpenSim.Framework"/>
2982 <Reference name="OpenSim.Framework.Serialization"/> 2983 <Reference name="OpenSim.Framework.Serialization"/>
@@ -2992,15 +2993,15 @@
2992 2993
2993 <!-- Unit tests --> 2994 <!-- Unit tests -->
2994 <Reference name="OpenSim.Tests.Common"/> 2995 <Reference name="OpenSim.Tests.Common"/>
2995 <Reference name="Nini.dll"/> 2996 <Reference name="Nini" path="../../../bin/"/>
2996 <Reference name="nunit.framework.dll"/> 2997 <Reference name="nunit.framework" path="../../../bin/"/>
2997 2998
2998 <!-- For scripting in funny languages by default --> 2999 <!-- For scripting in funny languages by default -->
2999 <Reference name="XMLRPC.dll"/> 3000 <Reference name="XMLRPC" path="../../../bin/"/>
3000 <Reference name="OpenSim.Framework.Communications"/> 3001 <Reference name="OpenSim.Framework.Communications"/>
3001 <Reference name="Nini.dll" /> 3002 <Reference name="Nini" path="../../../bin/"/>
3002 <Reference name="log4net.dll"/> 3003 <Reference name="log4net" path="../../../bin/"/>
3003 <Reference name="DotNetOpenMail.dll"/> 3004 <Reference name="DotNetOpenMail" path="../../../bin/"/>
3004 3005
3005 <!-- 3006 <!--
3006 TODO: this is kind of lame, we basically build a duplicate 3007 TODO: this is kind of lame, we basically build a duplicate
@@ -3010,14 +3011,14 @@
3010 --> 3011 -->
3011 <Files> 3012 <Files>
3012 <!-- SADLY the way this works means you need to keep adding these paths --> 3013 <!-- SADLY the way this works means you need to keep adding these paths -->
3013 <Match path="Agent/TextureSender/Tests" pattern="*.cs" recurse="true" /> 3014 <Match path="Agent/TextureSender/Tests" pattern="*.cs" recurse="true"/>
3014 <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true" /> 3015 <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/>
3015 <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true" /> 3016 <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/>
3016 <Match path="World/Archiver/Tests/Resources" pattern="*" buildAction="EmbeddedResource"/> 3017 <Match buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/>
3017 <Match path="World/Serialiser/Tests" pattern="*.cs" recurse="true" /> 3018 <Match path="World/Serialiser/Tests" pattern="*.cs" recurse="true"/>
3018 <Match path="World/Terrain/Tests" pattern="*.cs" recurse="true" /> 3019 <Match path="World/Terrain/Tests" pattern="*.cs" recurse="true"/>
3019 <Match path="ServiceConnectorsOut/Grid/Tests" pattern="*.cs" recurse="true" /> 3020 <Match path="ServiceConnectorsOut/Grid/Tests" pattern="*.cs" recurse="true"/>
3020 <Match path="ServiceConnectorsOut/Presence/Tests" pattern="*.cs" recurse="true" /> 3021 <Match path="ServiceConnectorsOut/Presence/Tests" pattern="*.cs" recurse="true"/>
3021 </Files> 3022 </Files>
3022 </Project> 3023 </Project>
3023 3024
@@ -3038,8 +3039,8 @@
3038 <Reference name="System.Xml"/> 3039 <Reference name="System.Xml"/>
3039 <Reference name="System.Drawing"/> 3040 <Reference name="System.Drawing"/>
3040 <Reference name="System.Runtime.Remoting"/> 3041 <Reference name="System.Runtime.Remoting"/>
3041 <Reference name="OpenMetaverseTypes.dll"/> 3042 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
3042 <Reference name="OpenMetaverse.dll"/> 3043 <Reference name="OpenMetaverse" path="../../../bin/"/>
3043 <Reference name="OpenSim.Data"/> 3044 <Reference name="OpenSim.Data"/>
3044 <Reference name="OpenSim.Framework"/> 3045 <Reference name="OpenSim.Framework"/>
3045 <Reference name="OpenSim.Framework.Communications"/> 3046 <Reference name="OpenSim.Framework.Communications"/>
@@ -3055,15 +3056,15 @@
3055 <!-- Unit tests --> 3056 <!-- Unit tests -->
3056 <!-- <Reference name="OpenSim.Tests.Common"/> --> 3057 <!-- <Reference name="OpenSim.Tests.Common"/> -->
3057 <Reference name="OpenSim.Tests.Common"/> 3058 <Reference name="OpenSim.Tests.Common"/>
3058 <Reference name="Nini.dll"/> 3059 <Reference name="Nini" path="../../../bin/"/>
3059 <Reference name="nunit.framework.dll"/> 3060 <Reference name="nunit.framework" path="../../../bin/"/>
3060 3061
3061 <!-- For scripting in funny languages by default --> 3062 <!-- For scripting in funny languages by default -->
3062 <Reference name="XMLRPC.dll"/> 3063 <Reference name="XMLRPC" path="../../../bin/"/>
3063 <Reference name="OpenSim.Framework.Communications"/> 3064 <Reference name="OpenSim.Framework.Communications"/>
3064 <Reference name="Nini.dll" /> 3065 <Reference name="Nini" path="../../../bin/"/>
3065 <Reference name="log4net.dll"/> 3066 <Reference name="log4net" path="../../../bin/"/>
3066 <Reference name="DotNetOpenMail.dll"/> 3067 <Reference name="DotNetOpenMail" path="../../../bin/"/>
3067 3068
3068 <!-- 3069 <!--
3069 TODO: this is kind of lame, we basically build a duplicate 3070 TODO: this is kind of lame, we basically build a duplicate
@@ -3073,7 +3074,7 @@
3073 --> 3074 -->
3074 <Files> 3075 <Files>
3075 <!-- SADLY the way this works means you need to keep adding these paths --> 3076 <!-- SADLY the way this works means you need to keep adding these paths -->
3076 <Match path="Scenes/Tests" pattern="*.cs" recurse="false" /> 3077 <Match path="Scenes/Tests" pattern="*.cs" recurse="false"/>
3077 </Files> 3078 </Files>
3078 </Project> 3079 </Project>
3079 3080
@@ -3093,11 +3094,11 @@
3093 <ReferencePath>../../../../../bin/</ReferencePath> 3094 <ReferencePath>../../../../../bin/</ReferencePath>
3094 <Reference name="System"/> 3095 <Reference name="System"/>
3095 <Reference name="System.Xml"/> 3096 <Reference name="System.Xml"/>
3096 <Reference name="log4net.dll"/> 3097 <Reference name="log4net"/>
3097 <Reference name="Nini.dll" /> 3098 <Reference name="Nini" />
3098 <Reference name="nunit.framework.dll" /> 3099 <Reference name="nunit.framework" />
3099 <Reference name="OpenMetaverse.dll"/> 3100 <Reference name="OpenMetaverse"/>
3100 <Reference name="OpenMetaverseTypes.dll"/> 3101 <Reference name="OpenMetaverseTypes"/>
3101 <Reference name="OpenSim.Framework"/> 3102 <Reference name="OpenSim.Framework"/>
3102 <Reference name="OpenSim.Framework.Communications"/> 3103 <Reference name="OpenSim.Framework.Communications"/>
3103 <Reference name="OpenSim.Framework.Statistics"/> 3104 <Reference name="OpenSim.Framework.Statistics"/>
@@ -3134,12 +3135,12 @@
3134 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/> 3135 <Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/>
3135 <Reference name="OpenSim.Region.ScriptEngine.XEngine"/> 3136 <Reference name="OpenSim.Region.ScriptEngine.XEngine"/>
3136 <Reference name="OpenSim.Tests.Common"/> 3137 <Reference name="OpenSim.Tests.Common"/>
3137 <Reference name="nunit.framework.dll" /> 3138 <Reference name="nunit.framework" path="../../../bin/"/>
3138 <Reference name="Nini.dll" /> 3139 <Reference name="Nini" path="../../../bin/"/>
3139 <Reference name="OpenMetaverseTypes.dll"/> 3140 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
3140 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/> 3141 <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/>
3141 <Reference name="OpenSim.Region.ScriptEngine.Shared"/> 3142 <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
3142 <Reference name="Tools.dll" /> 3143 <Reference name="Tools" path="../../../bin/"/>
3143 3144
3144 <!-- 3145 <!--
3145 TODO: this is kind of lame, we basically build a duplicate 3146 TODO: this is kind of lame, we basically build a duplicate
@@ -3149,9 +3150,9 @@
3149 --> 3150 -->
3150 <Files> 3151 <Files>
3151 <!-- SADLY the way this works means you need to keep adding these paths --> 3152 <!-- SADLY the way this works means you need to keep adding these paths -->
3152 <Match path="Shared/Tests" pattern="*.cs" recurse="true" /> 3153 <Match path="Shared/Tests" pattern="*.cs" recurse="true"/>
3153 <Match path="Shared/CodeTools/Tests" pattern="*.cs" recurse="true" /> 3154 <Match path="Shared/CodeTools/Tests" pattern="*.cs" recurse="true"/>
3154 <Match path="XEngine/Tests" pattern="*.cs" recurse="true" /> 3155 <Match path="XEngine/Tests" pattern="*.cs" recurse="true"/>
3155 </Files> 3156 </Files>
3156 </Project> 3157 </Project>
3157 3158
@@ -3174,14 +3175,14 @@
3174 <ReferencePath>../../../../bin/</ReferencePath> 3175 <ReferencePath>../../../../bin/</ReferencePath>
3175 <Reference name="System"/> 3176 <Reference name="System"/>
3176 <Reference name="System.Core"/> 3177 <Reference name="System.Core"/>
3177 <Reference name="OpenMetaverseTypes.dll"/> 3178 <Reference name="OpenMetaverseTypes" path="../../../../bin/"/>
3178 <Reference name="Nini.dll" /> 3179 <Reference name="Nini" path="../../../../bin/"/>
3179 <Reference name="OpenSim.Framework"/> 3180 <Reference name="OpenSim.Framework"/>
3180 <Reference name="OpenSim.Framework.Console"/> 3181 <Reference name="OpenSim.Framework.Console"/>
3181 <Reference name="OpenSim.Region.Physics.Manager"/> 3182 <Reference name="OpenSim.Region.Physics.Manager"/>
3182 <Reference name="Ode.NET.dll" /> 3183 <Reference name="Ode.NET" path="../../../../bin/"/>
3183 <Reference name="nunit.framework.dll" /> 3184 <Reference name="nunit.framework" path="../../../../bin/"/>
3184 <Reference name="log4net.dll"/> 3185 <Reference name="log4net" path="../../../../bin/"/>
3185 3186
3186 <Files> 3187 <Files>
3187 <Match pattern="*.cs" recurse="true"/> 3188 <Match pattern="*.cs" recurse="true"/>
@@ -3192,58 +3193,4 @@
3192 3193
3193 </Solution> 3194 </Solution>
3194 3195
3195 <!-- Prebuild tool -->
3196 <Solution name="Prebuild" path="Prebuild/" >
3197 <Configuration name="Debug">
3198 <Options>
3199 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
3200 <OptimizeCode>false</OptimizeCode>
3201 <OutputPath>bin/Debug</OutputPath>
3202 <DebugInformation>true</DebugInformation>
3203 <SuppressWarnings>1595</SuppressWarnings>
3204 </Options>
3205 </Configuration>
3206 <Configuration name="Release">
3207 <Options>
3208 <CompilerDefines>TRACE</CompilerDefines>
3209 <OutputPath>bin/Release</OutputPath>
3210 <OptimizeCode>true</OptimizeCode>
3211 <DebugInformation>false</DebugInformation>
3212 <SuppressWarnings>1595</SuppressWarnings>
3213 </Options>
3214 </Configuration>
3215
3216 <Project frameworkVersion="v3_5" name="Prebuild" path="src/" language="C#" assemblyName="Prebuild" icon="App.ico" type="Exe" rootNamespace="Prebuild" startupObject="Prebuild.Prebuild">
3217 <Configuration name="Debug">
3218 <Options>
3219 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
3220 <OptimizeCode>false</OptimizeCode>
3221 <OutputPath>..\..\bin\</OutputPath>
3222 <DebugInformation>true</DebugInformation>
3223 <KeyFile>Prebuild.snk</KeyFile>
3224 <SuppressWarnings>1595</SuppressWarnings>
3225 </Options>
3226 </Configuration>
3227 <Configuration name="Release">
3228 <Options>
3229 <CompilerDefines>TRACE</CompilerDefines>
3230 <OutputPath>..\..\bin\</OutputPath>
3231 <OptimizeCode>true</OptimizeCode>
3232 <DebugInformation>false</DebugInformation>
3233 <KeyFile>Prebuild.snk</KeyFile>
3234 <SuppressWarnings>1595</SuppressWarnings>
3235 </Options>
3236 </Configuration>
3237 <ReferencePath>../../bin/</ReferencePath>
3238 <Reference name="System.EnterpriseServices" />
3239 <Reference name="System.Xml" />
3240 <Reference name="System" />
3241 <Files>
3242 <Match pattern="App.ico" buildAction="EmbeddedResource"/>
3243 <Match path="data" pattern="prebuild-1.7.xsd" buildAction="EmbeddedResource"/>
3244 <Match pattern="*.cs" recurse="true"/>
3245 </Files>
3246 </Project>
3247
3248 </Solution>
3249</Prebuild> 3196</Prebuild>
diff --git a/runprebuild.sh b/runprebuild.sh
index 3e1417a..b3b5c9d 100755
--- a/runprebuild.sh
+++ b/runprebuild.sh
@@ -1,7 +1,4 @@
1#!/bin/sh 1#!/bin/sh
2 2
3mono bin/Prebuild.exe /target nant 3mono bin/Prebuild.exe /target nant
4# needed until we break up OpenSim.exe
5perl -pi -e 's{OpenSim.dll}{OpenSim.exe}' OpenSim/ApplicationPlugins/LoadRegions/OpenSim.ApplicationPlugins.LoadRegions.dll.build
6mono bin/Prebuild.exe /target monodev
7mono bin/Prebuild.exe /target vs2008 4mono bin/Prebuild.exe /target vs2008