aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAdam Frisby2007-07-11 08:10:25 +0000
committerAdam Frisby2007-07-11 08:10:25 +0000
commite2ff441e31328e60c8bb1d4bb32fa4ac64f91978 (patch)
tree8405b6cef57b66a58f31a24c859846085d0b81f7
parent* Wiping trunk in prep for Sugilite (diff)
parent* Applying dalien's patches from bug#177 and #179 (diff)
downloadopensim-SC_OLD-e2ff441e31328e60c8bb1d4bb32fa4ac64f91978.zip
opensim-SC_OLD-e2ff441e31328e60c8bb1d4bb32fa4ac64f91978.tar.gz
opensim-SC_OLD-e2ff441e31328e60c8bb1d4bb32fa4ac64f91978.tar.bz2
opensim-SC_OLD-e2ff441e31328e60c8bb1d4bb32fa4ac64f91978.tar.xz
* Bringing Sugilite in to trunk
Diffstat (limited to '')
-rw-r--r--OpenSim.FxCop7241
-rw-r--r--OpenSim/Framework/Communications/CommunicationsManager.cs70
-rw-r--r--OpenSim/Framework/Communications/IGridServices.cs43
-rw-r--r--OpenSim/Framework/Communications/IInterRegionCommunications.cs38
-rw-r--r--OpenSim/Framework/Communications/IUserServices.cs43
-rw-r--r--OpenSim/Framework/Communications/Properties/AssemblyInfo.cs60
-rw-r--r--OpenSim/Framework/Console/AssemblyInfo.cs56
-rw-r--r--OpenSim/Framework/Console/ConsoleCallbacksBase.cs35
-rw-r--r--OpenSim/Framework/Console/LogBase.cs282
-rw-r--r--OpenSim/Framework/Console/MainLog.cs47
-rw-r--r--OpenSim/Framework/Data.DB4o/DB4oGridData.cs162
-rw-r--r--OpenSim/Framework/Data.DB4o/DB4oManager.cs163
-rw-r--r--OpenSim/Framework/Data.DB4o/DB4oUserData.cs202
-rw-r--r--OpenSim/Framework/Data.DB4o/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs194
-rw-r--r--OpenSim/Framework/Data.MSSQL/MSSQLManager.cs211
-rw-r--r--OpenSim/Framework/Data.MSSQL/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLGridData.cs287
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs309
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLLogData.cs105
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLManager.cs602
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLUserData.cs256
-rw-r--r--OpenSim/Framework/Data.MySQL/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Framework/Data.SQLite/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Framework/Data.SQLite/SQLiteGridData.cs197
-rw-r--r--OpenSim/Framework/Data.SQLite/SQLiteManager.cs206
-rw-r--r--OpenSim/Framework/Data/GridData.cs111
-rw-r--r--OpenSim/Framework/Data/ILogData.cs90
-rw-r--r--OpenSim/Framework/Data/IniConfig.cs96
-rw-r--r--OpenSim/Framework/Data/InventoryData.cs185
-rw-r--r--OpenSim/Framework/Data/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Framework/Data/ReservationData.cs47
-rw-r--r--OpenSim/Framework/Data/SimProfileData.cs192
-rw-r--r--OpenSim/Framework/Data/UserData.cs128
-rw-r--r--OpenSim/Framework/Data/UserProfileData.cs180
-rw-r--r--OpenSim/Framework/General/AgentInventory.cs265
-rw-r--r--OpenSim/Framework/General/AuthenticateSessionBase.cs130
-rw-r--r--OpenSim/Framework/General/BlockingQueue.cs58
-rw-r--r--OpenSim/Framework/General/ClientManager.cs36
-rw-r--r--OpenSim/Framework/General/IRegionCommsListener.cs46
-rw-r--r--OpenSim/Framework/General/Interfaces/AuthenticateResponse.cs43
-rw-r--r--OpenSim/Framework/General/Interfaces/Config/IGenericConfig.cs38
-rw-r--r--OpenSim/Framework/General/Interfaces/Config/IGridConfig.cs59
-rw-r--r--OpenSim/Framework/General/Interfaces/Config/IUserConfig.cs53
-rw-r--r--OpenSim/Framework/General/Interfaces/IAssetServer.cs64
-rw-r--r--OpenSim/Framework/General/Interfaces/IClientAPI.cs180
-rw-r--r--OpenSim/Framework/General/Interfaces/ILocalStorage.cs68
-rw-r--r--OpenSim/Framework/General/Interfaces/IUserServer.cs39
-rw-r--r--OpenSim/Framework/General/Interfaces/IWorld.cs42
-rw-r--r--OpenSim/Framework/General/LoginService.cs34
-rw-r--r--OpenSim/Framework/General/Properties/AssemblyInfo.cs31
-rw-r--r--OpenSim/Framework/General/RegionCommsListener.cs68
-rw-r--r--OpenSim/Framework/General/Remoting.cs135
-rw-r--r--OpenSim/Framework/General/Types/AgentCiruitData.cs49
-rw-r--r--OpenSim/Framework/General/Types/AgentWearable.cs57
-rw-r--r--OpenSim/Framework/General/Types/AssetBase.cs46
-rw-r--r--OpenSim/Framework/General/Types/AssetLandmark.cs59
-rw-r--r--OpenSim/Framework/General/Types/AssetStorage.cs47
-rw-r--r--OpenSim/Framework/General/Types/EstateSettings.cs93
-rw-r--r--OpenSim/Framework/General/Types/Login.cs49
-rw-r--r--OpenSim/Framework/General/Types/MapBlockData.cs23
-rw-r--r--OpenSim/Framework/General/Types/NeighbourInfo.cs42
-rw-r--r--OpenSim/Framework/General/Types/NetworkServersInfo.cs219
-rw-r--r--OpenSim/Framework/General/Types/ParcelData.cs112
-rw-r--r--OpenSim/Framework/General/Types/PrimData.cs228
-rw-r--r--OpenSim/Framework/General/Types/PrimitiveBaseShape.cs102
-rw-r--r--OpenSim/Framework/General/Types/RegionHandle.cs121
-rw-r--r--OpenSim/Framework/General/Types/RegionInfo.cs342
-rw-r--r--OpenSim/Framework/General/Types/UUID.cs127
-rw-r--r--OpenSim/Framework/General/UserProfile.cs87
-rw-r--r--OpenSim/Framework/General/Util.cs184
-rw-r--r--OpenSim/Framework/GenericConfig/Xml/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Framework/GenericConfig/Xml/XmlConfig.cs122
-rw-r--r--OpenSim/Framework/Servers/BaseHttpServer.cs224
-rw-r--r--OpenSim/Framework/Servers/BaseStreamHandler.cs40
-rw-r--r--OpenSim/Framework/Servers/CheckSumServer.cs127
-rw-r--r--OpenSim/Framework/Servers/IStreamHandler.cs22
-rw-r--r--OpenSim/Framework/Servers/RestMethod.cs31
-rw-r--r--OpenSim/Framework/Servers/RestStreamHandler.cs31
-rw-r--r--OpenSim/Framework/Servers/UDPServerBase.cs87
-rw-r--r--OpenSim/Framework/Servers/XmlRpcMethod.cs33
-rw-r--r--OpenSim/Framework/UserManager/LoginResponse.cs643
-rw-r--r--OpenSim/Framework/UserManager/UserManagerBase.cs630
-rw-r--r--OpenSim/Grid/AssetServer/Main.cs406
-rw-r--r--OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs58
-rw-r--r--OpenSim/Grid/Framework.Manager/GridManagementAgent.cs138
-rw-r--r--OpenSim/Grid/Framework.Manager/GridServerManager.cs93
-rw-r--r--OpenSim/Grid/GridServer.Config/AssemblyInfo.cs56
-rw-r--r--OpenSim/Grid/GridServer.Config/DbGridConfig.cs160
-rw-r--r--OpenSim/Grid/GridServer/GridManager.cs703
-rw-r--r--OpenSim/Grid/GridServer/Main.cs258
-rw-r--r--OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs58
-rw-r--r--OpenSim/Grid/InventoryServer/InventoryManager.cs125
-rw-r--r--OpenSim/Grid/InventoryServer/Main.cs87
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager.mds16
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager.userprefs39
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager.usertasks2
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/AssemblyInfo.cs32
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/BlockingQueue.cs33
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/Connect to grid server.cs16
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs29
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/GridServerConnectionManager.cs106
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/Main.cs96
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/MainWindow.cs76
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.mdp43
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.pidbbin0 -> 12308 bytes
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/RegionBlock.cs37
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/Util.cs133
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs226
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.MainWindow.cs256
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/generated.cs35
-rw-r--r--OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/gui.stetic502
-rw-r--r--OpenSim/Grid/UserServer.Config/AssemblyInfo.cs56
-rw-r--r--OpenSim/Grid/UserServer.Config/DbUserConfig.cs95
-rw-r--r--OpenSim/Grid/UserServer/Main.cs214
-rw-r--r--OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs31
-rw-r--r--OpenSim/Grid/UserServer/UserManager.cs94
-rw-r--r--OpenSim/Region/Application/Application.cs120
-rw-r--r--OpenSim/Region/Application/OpenSimMain.cs482
-rw-r--r--OpenSim/Region/Application/VersionInfo.cs36
-rw-r--r--OpenSim/Region/Caches/AssetCache.cs669
-rw-r--r--OpenSim/Region/Caches/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Region/Capabilities/Caps.cs336
-rw-r--r--OpenSim/Region/Capabilities/LLSDArray.cs42
-rw-r--r--OpenSim/Region/Capabilities/LLSDCapEvent.cs41
-rw-r--r--OpenSim/Region/Capabilities/LLSDCapsDetails.cs15
-rw-r--r--OpenSim/Region/Capabilities/LLSDEmpty.cs38
-rw-r--r--OpenSim/Region/Capabilities/LLSDHelpers.cs164
-rw-r--r--OpenSim/Region/Capabilities/LLSDMapLayer.cs46
-rw-r--r--OpenSim/Region/Capabilities/LLSDMapLayerResponse.cs41
-rw-r--r--OpenSim/Region/Capabilities/LLSDMapRequest.cs13
-rw-r--r--OpenSim/Region/Capabilities/LLSDMethod.cs8
-rw-r--r--OpenSim/Region/Capabilities/LLSDStreamHandler.cs42
-rw-r--r--OpenSim/Region/Capabilities/LLSDTest.cs41
-rw-r--r--OpenSim/Region/Capabilities/LLSDType.cs59
-rw-r--r--OpenSim/Region/Capabilities/LLSDUploadReply.cs44
-rw-r--r--OpenSim/Region/ClientStack/Assets/InventoryCache.cs337
-rw-r--r--OpenSim/Region/ClientStack/ClientStackNetworkHandler.cs40
-rw-r--r--OpenSim/Region/ClientStack/ClientView.API.cs1122
-rw-r--r--OpenSim/Region/ClientStack/ClientView.AgentAssetUpload.cs357
-rw-r--r--OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs236
-rw-r--r--OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs596
-rw-r--r--OpenSim/Region/ClientStack/ClientView.cs293
-rw-r--r--OpenSim/Region/ClientStack/ClientViewBase.cs326
-rw-r--r--OpenSim/Region/ClientStack/PacketServer.cs184
-rw-r--r--OpenSim/Region/ClientStack/RegionApplicationBase.cs117
-rw-r--r--OpenSim/Region/ClientStack/UDPServer.cs196
-rw-r--r--OpenSim/Region/Communications/Local/CommunicationsLocal.cs54
-rw-r--r--OpenSim/Region/Communications/Local/LocalBackEndServices.cs206
-rw-r--r--OpenSim/Region/Communications/Local/LocalUserServices.cs142
-rw-r--r--OpenSim/Region/Communications/Local/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs18
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs378
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs69
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1UserServices.cs105
-rw-r--r--OpenSim/Region/Communications/OGS1/Properties/AssemblyInfo.cs33
-rw-r--r--OpenSim/Region/Environment/EstateManager.cs300
-rw-r--r--OpenSim/Region/Environment/ParcelManager.cs891
-rw-r--r--OpenSim/Region/Environment/RegionManager.cs29
-rw-r--r--OpenSim/Region/Environment/Scenes/Entity.cs115
-rw-r--r--OpenSim/Region/Environment/Scenes/EntityBase.cs142
-rw-r--r--OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs14
-rw-r--r--OpenSim/Region/Environment/Scenes/Primitive.cs594
-rw-r--r--OpenSim/Region/Environment/Scenes/PrimitiveOld.cs583
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs570
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs806
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneBase.cs198
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneEvents.cs50
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObject.cs246
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.Animations.cs74
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.Body.cs85
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs597
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/CSharpEngine/CSharpScriptEngine.cs102
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JScriptEngine/JScriptEngine.cs102
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassInstance.cs45
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassRecord.cs503
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Heap.cs43
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.cs135
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs427
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs96
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs40
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/JavaEngine.cs29
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MainMemory.cs45
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MethodMemory.cs46
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Object.cs37
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/OpenSimJVM.cs171
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Stack.cs42
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/StackFrame.cs49
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Thread.cs119
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ArrayReference.cs10
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/BaseType.cs10
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ObjectReference.cs16
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Byte.cs10
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Char.cs10
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Float.cs16
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Int.cs16
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/Script.cs64
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/ScriptAPI.cs25
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/ScriptInfo.cs58
-rw-r--r--OpenSim/Region/Environment/Scenes/scripting/ScriptManager.cs99
-rw-r--r--OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs10
-rw-r--r--OpenSim/Region/Examples/SimpleApp/MyWorld.cs93
-rw-r--r--OpenSim/Region/Examples/SimpleApp/Program.cs130
-rw-r--r--OpenSim/Region/Examples/SimpleApp/Properties/AssemblyInfo.cs31
-rw-r--r--OpenSim/Region/GridInterfaces/Local/AssemblyInfo.cs56
-rw-r--r--OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs311
-rw-r--r--OpenSim/Region/GridInterfaces/Remote/AssemblyInfo.cs56
-rw-r--r--OpenSim/Region/GridInterfaces/Remote/RemoteAssetServer.cs133
-rw-r--r--OpenSim/Region/Physics/BasicPhysicsPlugin/AssemblyInfo.cs56
-rw-r--r--OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs301
-rw-r--r--OpenSim/Region/Physics/Manager/AssemblyInfo.cs56
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsActor.cs167
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsManager.cs115
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsScene.cs110
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsVector.cs55
-rw-r--r--OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs56
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs457
-rw-r--r--OpenSim/Region/Physics/PhysXPlugin/AssemblyInfo.cs56
-rw-r--r--OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs425
-rw-r--r--OpenSim/Region/Scripting/Properties/AssemblyInfo.cs35
-rw-r--r--OpenSim/Region/Scripting/Script.cs32
-rw-r--r--OpenSim/Region/Scripting/ScriptAccess.cs31
-rw-r--r--OpenSim/Region/Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs112
-rw-r--r--OpenSim/Region/Storage/LocalStorageDb4o/AssemblyInfo.cs56
-rw-r--r--OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs267
-rw-r--r--OpenSim/Region/Storage/LocalStorageDb4o/MapStorage.cs39
-rw-r--r--OpenSim/Region/Storage/LocalStorageDb4o/UUIDParcelQuery.cs47
-rw-r--r--OpenSim/Region/Storage/LocalStorageDb4o/UUIDPrimQuery.cs47
-rw-r--r--OpenSim/Region/Storage/LocalStorageSQLite/Properties/AssemblyInfo.cs60
-rw-r--r--OpenSim/Region/Storage/LocalStorageSQLite/SQLiteLocalStorage.cs198
-rw-r--r--OpenSim/Region/Terrain.BasicTerrain/Properties/AssemblyInfo.cs60
-rw-r--r--OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs928
-rw-r--r--OpenSim/Region/Terrain.BasicTerrain/TerrainFilter.cs126
-rw-r--r--Prebuild/README230
-rw-r--r--Prebuild/TODO21
-rw-r--r--Prebuild/doc/prebuild-example1.xml300
-rw-r--r--Prebuild/doc/prebuild-example2.xml72
-rw-r--r--Prebuild/doc/prebuild-example3.xml113
-rw-r--r--Prebuild/doc/prebuild-example4.xml715
-rw-r--r--Prebuild/doc/prebuild-example5.xml187
-rw-r--r--Prebuild/prebuild2
-rw-r--r--Prebuild/scripts/Clean.bat2
-rw-r--r--Prebuild/scripts/Help.bat2
-rw-r--r--Prebuild/scripts/MonoDevelop.sh2
-rw-r--r--Prebuild/scripts/Prebuild.nsi231
-rw-r--r--Prebuild/scripts/SharpDevelop.bat4
-rw-r--r--Prebuild/scripts/SharpDevelop2.bat4
-rw-r--r--Prebuild/scripts/VS2002.bat4
-rw-r--r--Prebuild/scripts/VS2003.bat4
-rw-r--r--Prebuild/scripts/VS2005.bat4
-rw-r--r--Prebuild/scripts/autotools.bat4
-rw-r--r--Prebuild/scripts/autotools.sh2
-rw-r--r--Prebuild/scripts/nant.bat4
-rw-r--r--Prebuild/scripts/nant.sh2
-rw-r--r--Prebuild/src/App.icobin0 -> 4286 bytes
-rw-r--r--Prebuild/src/Core/Attributes/DataNodeAttribute.cs81
-rw-r--r--Prebuild/src/Core/Attributes/OptionNodeAttribute.cs80
-rw-r--r--Prebuild/src/Core/Attributes/TargetAttribute.cs80
-rw-r--r--Prebuild/src/Core/FatalException.cs94
-rw-r--r--Prebuild/src/Core/Interfaces/IDataNode.cs56
-rw-r--r--Prebuild/src/Core/Interfaces/ITarget.cs60
-rw-r--r--Prebuild/src/Core/Kernel.cs758
-rw-r--r--Prebuild/src/Core/Nodes/ConfigurationNode.cs187
-rw-r--r--Prebuild/src/Core/Nodes/DataNode.cs82
-rw-r--r--Prebuild/src/Core/Nodes/ExcludeNode.cs85
-rw-r--r--Prebuild/src/Core/Nodes/FileNode.cs238
-rw-r--r--Prebuild/src/Core/Nodes/FilesNode.cs223
-rw-r--r--Prebuild/src/Core/Nodes/MatchNode.cs299
-rw-r--r--Prebuild/src/Core/Nodes/OptionsNode.cs655
-rw-r--r--Prebuild/src/Core/Nodes/ProcessNode.cs119
-rw-r--r--Prebuild/src/Core/Nodes/ProjectNode.cs510
-rw-r--r--Prebuild/src/Core/Nodes/ReferenceNode.cs153
-rw-r--r--Prebuild/src/Core/Nodes/ReferencePathNode.cs108
-rw-r--r--Prebuild/src/Core/Nodes/SolutionNode.cs288
-rw-r--r--Prebuild/src/Core/Parse/IfContext.cs163
-rw-r--r--Prebuild/src/Core/Parse/Preprocessor.cs519
-rw-r--r--Prebuild/src/Core/Targets/AutotoolsTarget.cs926
-rw-r--r--Prebuild/src/Core/Targets/DebugTarget.cs102
-rw-r--r--Prebuild/src/Core/Targets/MonoDevelopTarget.cs458
-rw-r--r--Prebuild/src/Core/Targets/NAntTarget.cs621
-rw-r--r--Prebuild/src/Core/Targets/SharpDevelop2Target.cs90
-rw-r--r--Prebuild/src/Core/Targets/SharpDevelopTarget.cs437
-rw-r--r--Prebuild/src/Core/Targets/VS2002Target.cs96
-rw-r--r--Prebuild/src/Core/Targets/VS2003Target.cs633
-rw-r--r--Prebuild/src/Core/Targets/VS2005Target.cs883
-rw-r--r--Prebuild/src/Core/UnknownLanguageException.cs63
-rw-r--r--Prebuild/src/Core/Utilities/CommandLineCollection.cs162
-rw-r--r--Prebuild/src/Core/Utilities/CurrentDirectory.cs89
-rw-r--r--Prebuild/src/Core/Utilities/Helper.cs661
-rw-r--r--Prebuild/src/Core/Utilities/Log.cs279
-rw-r--r--Prebuild/src/Core/WarningException.cs93
-rw-r--r--Prebuild/src/Prebuild.cs165
-rw-r--r--Prebuild/src/Prebuild.snkbin0 -> 596 bytes
-rw-r--r--Prebuild/src/Properties/AssemblyInfo.cs101
-rw-r--r--Prebuild/src/data/dnpb-1.0.xsd183
-rw-r--r--Prebuild/src/data/dnpb-1.1.xsd184
-rw-r--r--Prebuild/src/data/dnpb-1.2.xsd198
-rw-r--r--Prebuild/src/data/dnpb-1.3.xsd206
-rw-r--r--Prebuild/src/data/dnpb-1.4.xsd212
-rw-r--r--Prebuild/src/data/dnpb-1.5.xsd215
-rw-r--r--Prebuild/src/data/prebuild-1.6.xsd231
-rw-r--r--Prebuild/src/data/prebuild-1.7.xsd261
-rw-r--r--ThirdPartyLicenses/Axiom.txt141
-rw-r--r--ThirdPartyLicenses/MySQL.txt78
-rw-r--r--ThirdPartyLicenses/ODE.txt13
-rw-r--r--ThirdPartyLicenses/OpenJpeg.txt30
-rw-r--r--ThirdPartyLicenses/libsl.txt23
-rw-r--r--bin/Axiom.MathLib.dllbin0 -> 69632 bytes
-rw-r--r--bin/Db4objects.Db4o.dllbin0 -> 593408 bytes
-rw-r--r--bin/DotSets.dllbin0 -> 24576 bytes
-rw-r--r--bin/Kds.Serialization.dllbin0 -> 40960 bytes
-rw-r--r--bin/Mono.PEToolkit.dllbin0 -> 131072 bytes
-rw-r--r--bin/MySql.Data.dllbin0 -> 143360 bytes
-rw-r--r--bin/Ode.NET.dllbin0 -> 57344 bytes
-rw-r--r--bin/OpenJPEG.dllbin0 -> 184320 bytes
-rw-r--r--bin/PhysX-wrapper.dllbin0 -> 57344 bytes
-rw-r--r--bin/PhysX_Wrapper_Dotnet.dllbin0 -> 8704 bytes
-rw-r--r--bin/Prebuild.exebin0 -> 176128 bytes
-rw-r--r--bin/System.Data.SQLite.dllbin0 -> 568832 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/HOWTO.txt19
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld.bmpbin0 -> 1048630 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_0_0.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_0_0.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_0_1.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_0_1.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_0_2.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_0_2.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_1_0.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_1_0.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_1_1.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_1_1.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_1_2.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_1_2.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_2_0.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_2_0.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_2_1.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_2_1.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_2_2.bmpbin0 -> 262198 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_2_2.r32bin0 -> 262144 bytes
-rw-r--r--bin/TerrainDatafiles/Alien/alienworld_gray.bmpbin0 -> 786486 bytes
-rw-r--r--bin/TerrainFilters/demofilter.cs50
-rw-r--r--bin/XMLRPC.dllbin0 -> 40960 bytes
-rw-r--r--bin/assets/base_shape.dat105
-rw-r--r--bin/assets/bricks.jp2bin0 -> 32865 bytes
-rw-r--r--bin/assets/granite.jp2bin0 -> 32897 bytes
-rw-r--r--bin/assets/hardwood.jp2bin0 -> 32876 bytes
-rw-r--r--bin/assets/map1.jp2bin0 -> 570 bytes
-rw-r--r--bin/assets/map_base.jp2bin0 -> 153 bytes
-rw-r--r--bin/assets/plywood.jp2bin0 -> 32794 bytes
-rw-r--r--bin/assets/rocks.jp2bin0 -> 32731 bytes
-rw-r--r--bin/assets/testpic2.jp2bin0 -> 291 bytes
-rw-r--r--bin/avatar-texture.datbin0 -> 203 bytes
-rw-r--r--bin/data/LICENSE-README-IMPORTANT.txt5
-rw-r--r--bin/data/avataranimations.xml10
-rw-r--r--bin/defaultstripe.pngbin0 -> 887 bytes
-rw-r--r--bin/libTerrain-BSD.dllbin0 -> 32768 bytes
-rw-r--r--bin/libdb_dotNET43.dllbin0 -> 221184 bytes
-rw-r--r--bin/libode.abin0 -> 8041800 bytes
-rw-r--r--bin/libode.sobin0 -> 4474949 bytes
-rw-r--r--bin/libopenjpeg-1.0.0-x86_64.sobin0 -> 117184 bytes
-rw-r--r--bin/libopenjpeg-1.0.0.sobin0 -> 111569 bytes
-rw-r--r--bin/libopenjpeg-1.1.0.dylibbin0 -> 238244 bytes
-rw-r--r--bin/libsecondlife.dllbin0 -> 2256896 bytes
-rw-r--r--bin/log4net.dllbin0 -> 270336 bytes
-rw-r--r--bin/ode.dllbin0 -> 409600 bytes
-rw-r--r--bin/openjpegnet.dllbin0 -> 17408 bytes
-rw-r--r--prebuild.xml1062
-rw-r--r--runprebuild.bat2
-rw-r--r--share/php/generateUserFunction.php46
-rw-r--r--share/regions/config_0.xml3
-rw-r--r--share/regions/config_1.xml3
-rw-r--r--share/regions/config_10.xml3
-rw-r--r--share/regions/config_100.xml3
-rw-r--r--share/regions/config_1000.xml3
-rw-r--r--share/regions/config_1001.xml3
-rw-r--r--share/regions/config_1002.xml3
-rw-r--r--share/regions/config_1003.xml3
-rw-r--r--share/regions/config_1004.xml3
-rw-r--r--share/regions/config_1005.xml3
-rw-r--r--share/regions/config_1006.xml3
-rw-r--r--share/regions/config_1007.xml3
-rw-r--r--share/regions/config_1008.xml3
-rw-r--r--share/regions/config_1009.xml3
-rw-r--r--share/regions/config_101.xml3
-rw-r--r--share/regions/config_1010.xml3
-rw-r--r--share/regions/config_1011.xml3
-rw-r--r--share/regions/config_1012.xml3
-rw-r--r--share/regions/config_1013.xml3
-rw-r--r--share/regions/config_1014.xml3
-rw-r--r--share/regions/config_1015.xml3
-rw-r--r--share/regions/config_1016.xml3
-rw-r--r--share/regions/config_1017.xml3
-rw-r--r--share/regions/config_1018.xml3
-rw-r--r--share/regions/config_1019.xml3
-rw-r--r--share/regions/config_102.xml3
-rw-r--r--share/regions/config_1020.xml3
-rw-r--r--share/regions/config_1021.xml3
-rw-r--r--share/regions/config_1022.xml3
-rw-r--r--share/regions/config_1023.xml3
-rw-r--r--share/regions/config_103.xml3
-rw-r--r--share/regions/config_104.xml3
-rw-r--r--share/regions/config_105.xml3
-rw-r--r--share/regions/config_106.xml3
-rw-r--r--share/regions/config_107.xml3
-rw-r--r--share/regions/config_108.xml3
-rw-r--r--share/regions/config_109.xml3
-rw-r--r--share/regions/config_11.xml3
-rw-r--r--share/regions/config_110.xml3
-rw-r--r--share/regions/config_111.xml3
-rw-r--r--share/regions/config_112.xml3
-rw-r--r--share/regions/config_113.xml3
-rw-r--r--share/regions/config_114.xml3
-rw-r--r--share/regions/config_115.xml3
-rw-r--r--share/regions/config_116.xml3
-rw-r--r--share/regions/config_117.xml3
-rw-r--r--share/regions/config_118.xml3
-rw-r--r--share/regions/config_119.xml3
-rw-r--r--share/regions/config_12.xml3
-rw-r--r--share/regions/config_120.xml3
-rw-r--r--share/regions/config_121.xml3
-rw-r--r--share/regions/config_122.xml3
-rw-r--r--share/regions/config_123.xml3
-rw-r--r--share/regions/config_124.xml3
-rw-r--r--share/regions/config_125.xml3
-rw-r--r--share/regions/config_126.xml3
-rw-r--r--share/regions/config_127.xml3
-rw-r--r--share/regions/config_128.xml3
-rw-r--r--share/regions/config_129.xml3
-rw-r--r--share/regions/config_13.xml3
-rw-r--r--share/regions/config_130.xml3
-rw-r--r--share/regions/config_131.xml3
-rw-r--r--share/regions/config_132.xml3
-rw-r--r--share/regions/config_133.xml3
-rw-r--r--share/regions/config_134.xml3
-rw-r--r--share/regions/config_135.xml3
-rw-r--r--share/regions/config_136.xml3
-rw-r--r--share/regions/config_137.xml3
-rw-r--r--share/regions/config_138.xml3
-rw-r--r--share/regions/config_139.xml3
-rw-r--r--share/regions/config_14.xml3
-rw-r--r--share/regions/config_140.xml3
-rw-r--r--share/regions/config_141.xml3
-rw-r--r--share/regions/config_142.xml3
-rw-r--r--share/regions/config_143.xml3
-rw-r--r--share/regions/config_144.xml3
-rw-r--r--share/regions/config_145.xml3
-rw-r--r--share/regions/config_146.xml3
-rw-r--r--share/regions/config_147.xml3
-rw-r--r--share/regions/config_148.xml3
-rw-r--r--share/regions/config_149.xml3
-rw-r--r--share/regions/config_15.xml3
-rw-r--r--share/regions/config_150.xml3
-rw-r--r--share/regions/config_151.xml3
-rw-r--r--share/regions/config_152.xml3
-rw-r--r--share/regions/config_153.xml3
-rw-r--r--share/regions/config_154.xml3
-rw-r--r--share/regions/config_155.xml3
-rw-r--r--share/regions/config_156.xml3
-rw-r--r--share/regions/config_157.xml3
-rw-r--r--share/regions/config_158.xml3
-rw-r--r--share/regions/config_159.xml3
-rw-r--r--share/regions/config_16.xml3
-rw-r--r--share/regions/config_160.xml3
-rw-r--r--share/regions/config_161.xml3
-rw-r--r--share/regions/config_162.xml3
-rw-r--r--share/regions/config_163.xml3
-rw-r--r--share/regions/config_164.xml3
-rw-r--r--share/regions/config_165.xml3
-rw-r--r--share/regions/config_166.xml3
-rw-r--r--share/regions/config_167.xml3
-rw-r--r--share/regions/config_168.xml3
-rw-r--r--share/regions/config_169.xml3
-rw-r--r--share/regions/config_17.xml3
-rw-r--r--share/regions/config_170.xml3
-rw-r--r--share/regions/config_171.xml3
-rw-r--r--share/regions/config_172.xml3
-rw-r--r--share/regions/config_173.xml3
-rw-r--r--share/regions/config_174.xml3
-rw-r--r--share/regions/config_175.xml3
-rw-r--r--share/regions/config_176.xml3
-rw-r--r--share/regions/config_177.xml3
-rw-r--r--share/regions/config_178.xml3
-rw-r--r--share/regions/config_179.xml3
-rw-r--r--share/regions/config_18.xml3
-rw-r--r--share/regions/config_180.xml3
-rw-r--r--share/regions/config_181.xml3
-rw-r--r--share/regions/config_182.xml3
-rw-r--r--share/regions/config_183.xml3
-rw-r--r--share/regions/config_184.xml3
-rw-r--r--share/regions/config_185.xml3
-rw-r--r--share/regions/config_186.xml3
-rw-r--r--share/regions/config_187.xml3
-rw-r--r--share/regions/config_188.xml3
-rw-r--r--share/regions/config_189.xml3
-rw-r--r--share/regions/config_19.xml3
-rw-r--r--share/regions/config_190.xml3
-rw-r--r--share/regions/config_191.xml3
-rw-r--r--share/regions/config_192.xml3
-rw-r--r--share/regions/config_193.xml3
-rw-r--r--share/regions/config_194.xml3
-rw-r--r--share/regions/config_195.xml3
-rw-r--r--share/regions/config_196.xml3
-rw-r--r--share/regions/config_197.xml3
-rw-r--r--share/regions/config_198.xml3
-rw-r--r--share/regions/config_199.xml3
-rw-r--r--share/regions/config_2.xml3
-rw-r--r--share/regions/config_20.xml3
-rw-r--r--share/regions/config_200.xml3
-rw-r--r--share/regions/config_201.xml3
-rw-r--r--share/regions/config_202.xml3
-rw-r--r--share/regions/config_203.xml3
-rw-r--r--share/regions/config_204.xml3
-rw-r--r--share/regions/config_205.xml3
-rw-r--r--share/regions/config_206.xml3
-rw-r--r--share/regions/config_207.xml3
-rw-r--r--share/regions/config_208.xml3
-rw-r--r--share/regions/config_209.xml3
-rw-r--r--share/regions/config_21.xml3
-rw-r--r--share/regions/config_210.xml3
-rw-r--r--share/regions/config_211.xml3
-rw-r--r--share/regions/config_212.xml3
-rw-r--r--share/regions/config_213.xml3
-rw-r--r--share/regions/config_214.xml3
-rw-r--r--share/regions/config_215.xml3
-rw-r--r--share/regions/config_216.xml3
-rw-r--r--share/regions/config_217.xml3
-rw-r--r--share/regions/config_218.xml3
-rw-r--r--share/regions/config_219.xml3
-rw-r--r--share/regions/config_22.xml3
-rw-r--r--share/regions/config_220.xml3
-rw-r--r--share/regions/config_221.xml3
-rw-r--r--share/regions/config_222.xml3
-rw-r--r--share/regions/config_223.xml3
-rw-r--r--share/regions/config_224.xml3
-rw-r--r--share/regions/config_225.xml3
-rw-r--r--share/regions/config_226.xml3
-rw-r--r--share/regions/config_227.xml3
-rw-r--r--share/regions/config_228.xml3
-rw-r--r--share/regions/config_229.xml3
-rw-r--r--share/regions/config_23.xml3
-rw-r--r--share/regions/config_230.xml3
-rw-r--r--share/regions/config_231.xml3
-rw-r--r--share/regions/config_232.xml3
-rw-r--r--share/regions/config_233.xml3
-rw-r--r--share/regions/config_234.xml3
-rw-r--r--share/regions/config_235.xml3
-rw-r--r--share/regions/config_236.xml3
-rw-r--r--share/regions/config_237.xml3
-rw-r--r--share/regions/config_238.xml3
-rw-r--r--share/regions/config_239.xml3
-rw-r--r--share/regions/config_24.xml3
-rw-r--r--share/regions/config_240.xml3
-rw-r--r--share/regions/config_241.xml3
-rw-r--r--share/regions/config_242.xml3
-rw-r--r--share/regions/config_243.xml3
-rw-r--r--share/regions/config_244.xml3
-rw-r--r--share/regions/config_245.xml3
-rw-r--r--share/regions/config_246.xml3
-rw-r--r--share/regions/config_247.xml3
-rw-r--r--share/regions/config_248.xml3
-rw-r--r--share/regions/config_249.xml3
-rw-r--r--share/regions/config_25.xml3
-rw-r--r--share/regions/config_250.xml3
-rw-r--r--share/regions/config_251.xml3
-rw-r--r--share/regions/config_252.xml3
-rw-r--r--share/regions/config_253.xml3
-rw-r--r--share/regions/config_254.xml3
-rw-r--r--share/regions/config_255.xml3
-rw-r--r--share/regions/config_256.xml3
-rw-r--r--share/regions/config_257.xml3
-rw-r--r--share/regions/config_258.xml3
-rw-r--r--share/regions/config_259.xml3
-rw-r--r--share/regions/config_26.xml3
-rw-r--r--share/regions/config_260.xml3
-rw-r--r--share/regions/config_261.xml3
-rw-r--r--share/regions/config_262.xml3
-rw-r--r--share/regions/config_263.xml3
-rw-r--r--share/regions/config_264.xml3
-rw-r--r--share/regions/config_265.xml3
-rw-r--r--share/regions/config_266.xml3
-rw-r--r--share/regions/config_267.xml3
-rw-r--r--share/regions/config_268.xml3
-rw-r--r--share/regions/config_269.xml3
-rw-r--r--share/regions/config_27.xml3
-rw-r--r--share/regions/config_270.xml3
-rw-r--r--share/regions/config_271.xml3
-rw-r--r--share/regions/config_272.xml3
-rw-r--r--share/regions/config_273.xml3
-rw-r--r--share/regions/config_274.xml3
-rw-r--r--share/regions/config_275.xml3
-rw-r--r--share/regions/config_276.xml3
-rw-r--r--share/regions/config_277.xml3
-rw-r--r--share/regions/config_278.xml3
-rw-r--r--share/regions/config_279.xml3
-rw-r--r--share/regions/config_28.xml3
-rw-r--r--share/regions/config_280.xml3
-rw-r--r--share/regions/config_281.xml3
-rw-r--r--share/regions/config_282.xml3
-rw-r--r--share/regions/config_283.xml3
-rw-r--r--share/regions/config_284.xml3
-rw-r--r--share/regions/config_285.xml3
-rw-r--r--share/regions/config_286.xml3
-rw-r--r--share/regions/config_287.xml3
-rw-r--r--share/regions/config_288.xml3
-rw-r--r--share/regions/config_289.xml3
-rw-r--r--share/regions/config_29.xml3
-rw-r--r--share/regions/config_290.xml3
-rw-r--r--share/regions/config_291.xml3
-rw-r--r--share/regions/config_292.xml3
-rw-r--r--share/regions/config_293.xml3
-rw-r--r--share/regions/config_294.xml3
-rw-r--r--share/regions/config_295.xml3
-rw-r--r--share/regions/config_296.xml3
-rw-r--r--share/regions/config_297.xml3
-rw-r--r--share/regions/config_298.xml3
-rw-r--r--share/regions/config_299.xml3
-rw-r--r--share/regions/config_3.xml3
-rw-r--r--share/regions/config_30.xml3
-rw-r--r--share/regions/config_300.xml3
-rw-r--r--share/regions/config_301.xml3
-rw-r--r--share/regions/config_302.xml3
-rw-r--r--share/regions/config_303.xml3
-rw-r--r--share/regions/config_304.xml3
-rw-r--r--share/regions/config_305.xml3
-rw-r--r--share/regions/config_306.xml3
-rw-r--r--share/regions/config_307.xml3
-rw-r--r--share/regions/config_308.xml3
-rw-r--r--share/regions/config_309.xml3
-rw-r--r--share/regions/config_31.xml3
-rw-r--r--share/regions/config_310.xml3
-rw-r--r--share/regions/config_311.xml3
-rw-r--r--share/regions/config_312.xml3
-rw-r--r--share/regions/config_313.xml3
-rw-r--r--share/regions/config_314.xml3
-rw-r--r--share/regions/config_315.xml3
-rw-r--r--share/regions/config_316.xml3
-rw-r--r--share/regions/config_317.xml3
-rw-r--r--share/regions/config_318.xml3
-rw-r--r--share/regions/config_319.xml3
-rw-r--r--share/regions/config_32.xml3
-rw-r--r--share/regions/config_320.xml3
-rw-r--r--share/regions/config_321.xml3
-rw-r--r--share/regions/config_322.xml3
-rw-r--r--share/regions/config_323.xml3
-rw-r--r--share/regions/config_324.xml3
-rw-r--r--share/regions/config_325.xml3
-rw-r--r--share/regions/config_326.xml3
-rw-r--r--share/regions/config_327.xml3
-rw-r--r--share/regions/config_328.xml3
-rw-r--r--share/regions/config_329.xml3
-rw-r--r--share/regions/config_33.xml3
-rw-r--r--share/regions/config_330.xml3
-rw-r--r--share/regions/config_331.xml3
-rw-r--r--share/regions/config_332.xml3
-rw-r--r--share/regions/config_333.xml3
-rw-r--r--share/regions/config_334.xml3
-rw-r--r--share/regions/config_335.xml3
-rw-r--r--share/regions/config_336.xml3
-rw-r--r--share/regions/config_337.xml3
-rw-r--r--share/regions/config_338.xml3
-rw-r--r--share/regions/config_339.xml3
-rw-r--r--share/regions/config_34.xml3
-rw-r--r--share/regions/config_340.xml3
-rw-r--r--share/regions/config_341.xml3
-rw-r--r--share/regions/config_342.xml3
-rw-r--r--share/regions/config_343.xml3
-rw-r--r--share/regions/config_344.xml3
-rw-r--r--share/regions/config_345.xml3
-rw-r--r--share/regions/config_346.xml3
-rw-r--r--share/regions/config_347.xml3
-rw-r--r--share/regions/config_348.xml3
-rw-r--r--share/regions/config_349.xml3
-rw-r--r--share/regions/config_35.xml3
-rw-r--r--share/regions/config_350.xml3
-rw-r--r--share/regions/config_351.xml3
-rw-r--r--share/regions/config_352.xml3
-rw-r--r--share/regions/config_353.xml3
-rw-r--r--share/regions/config_354.xml3
-rw-r--r--share/regions/config_355.xml3
-rw-r--r--share/regions/config_356.xml3
-rw-r--r--share/regions/config_357.xml3
-rw-r--r--share/regions/config_358.xml3
-rw-r--r--share/regions/config_359.xml3
-rw-r--r--share/regions/config_36.xml3
-rw-r--r--share/regions/config_360.xml3
-rw-r--r--share/regions/config_361.xml3
-rw-r--r--share/regions/config_362.xml3
-rw-r--r--share/regions/config_363.xml3
-rw-r--r--share/regions/config_364.xml3
-rw-r--r--share/regions/config_365.xml3
-rw-r--r--share/regions/config_366.xml3
-rw-r--r--share/regions/config_367.xml3
-rw-r--r--share/regions/config_368.xml3
-rw-r--r--share/regions/config_369.xml3
-rw-r--r--share/regions/config_37.xml3
-rw-r--r--share/regions/config_370.xml3
-rw-r--r--share/regions/config_371.xml3
-rw-r--r--share/regions/config_372.xml3
-rw-r--r--share/regions/config_373.xml3
-rw-r--r--share/regions/config_374.xml3
-rw-r--r--share/regions/config_375.xml3
-rw-r--r--share/regions/config_376.xml3
-rw-r--r--share/regions/config_377.xml3
-rw-r--r--share/regions/config_378.xml3
-rw-r--r--share/regions/config_379.xml3
-rw-r--r--share/regions/config_38.xml3
-rw-r--r--share/regions/config_380.xml3
-rw-r--r--share/regions/config_381.xml3
-rw-r--r--share/regions/config_382.xml3
-rw-r--r--share/regions/config_383.xml3
-rw-r--r--share/regions/config_384.xml3
-rw-r--r--share/regions/config_385.xml3
-rw-r--r--share/regions/config_386.xml3
-rw-r--r--share/regions/config_387.xml3
-rw-r--r--share/regions/config_388.xml3
-rw-r--r--share/regions/config_389.xml3
-rw-r--r--share/regions/config_39.xml3
-rw-r--r--share/regions/config_390.xml3
-rw-r--r--share/regions/config_391.xml3
-rw-r--r--share/regions/config_392.xml3
-rw-r--r--share/regions/config_393.xml3
-rw-r--r--share/regions/config_394.xml3
-rw-r--r--share/regions/config_395.xml3
-rw-r--r--share/regions/config_396.xml3
-rw-r--r--share/regions/config_397.xml3
-rw-r--r--share/regions/config_398.xml3
-rw-r--r--share/regions/config_399.xml3
-rw-r--r--share/regions/config_4.xml3
-rw-r--r--share/regions/config_40.xml3
-rw-r--r--share/regions/config_400.xml3
-rw-r--r--share/regions/config_401.xml3
-rw-r--r--share/regions/config_402.xml3
-rw-r--r--share/regions/config_403.xml3
-rw-r--r--share/regions/config_404.xml3
-rw-r--r--share/regions/config_405.xml3
-rw-r--r--share/regions/config_406.xml3
-rw-r--r--share/regions/config_407.xml3
-rw-r--r--share/regions/config_408.xml3
-rw-r--r--share/regions/config_409.xml3
-rw-r--r--share/regions/config_41.xml3
-rw-r--r--share/regions/config_410.xml3
-rw-r--r--share/regions/config_411.xml3
-rw-r--r--share/regions/config_412.xml3
-rw-r--r--share/regions/config_413.xml3
-rw-r--r--share/regions/config_414.xml3
-rw-r--r--share/regions/config_415.xml3
-rw-r--r--share/regions/config_416.xml3
-rw-r--r--share/regions/config_417.xml3
-rw-r--r--share/regions/config_418.xml3
-rw-r--r--share/regions/config_419.xml3
-rw-r--r--share/regions/config_42.xml3
-rw-r--r--share/regions/config_420.xml3
-rw-r--r--share/regions/config_421.xml3
-rw-r--r--share/regions/config_422.xml3
-rw-r--r--share/regions/config_423.xml3
-rw-r--r--share/regions/config_424.xml3
-rw-r--r--share/regions/config_425.xml3
-rw-r--r--share/regions/config_426.xml3
-rw-r--r--share/regions/config_427.xml3
-rw-r--r--share/regions/config_428.xml3
-rw-r--r--share/regions/config_429.xml3
-rw-r--r--share/regions/config_43.xml3
-rw-r--r--share/regions/config_430.xml3
-rw-r--r--share/regions/config_431.xml3
-rw-r--r--share/regions/config_432.xml3
-rw-r--r--share/regions/config_433.xml3
-rw-r--r--share/regions/config_434.xml3
-rw-r--r--share/regions/config_435.xml3
-rw-r--r--share/regions/config_436.xml3
-rw-r--r--share/regions/config_437.xml3
-rw-r--r--share/regions/config_438.xml3
-rw-r--r--share/regions/config_439.xml3
-rw-r--r--share/regions/config_44.xml3
-rw-r--r--share/regions/config_440.xml3
-rw-r--r--share/regions/config_441.xml3
-rw-r--r--share/regions/config_442.xml3
-rw-r--r--share/regions/config_443.xml3
-rw-r--r--share/regions/config_444.xml3
-rw-r--r--share/regions/config_445.xml3
-rw-r--r--share/regions/config_446.xml3
-rw-r--r--share/regions/config_447.xml3
-rw-r--r--share/regions/config_448.xml3
-rw-r--r--share/regions/config_449.xml3
-rw-r--r--share/regions/config_45.xml3
-rw-r--r--share/regions/config_450.xml3
-rw-r--r--share/regions/config_451.xml3
-rw-r--r--share/regions/config_452.xml3
-rw-r--r--share/regions/config_453.xml3
-rw-r--r--share/regions/config_454.xml3
-rw-r--r--share/regions/config_455.xml3
-rw-r--r--share/regions/config_456.xml3
-rw-r--r--share/regions/config_457.xml3
-rw-r--r--share/regions/config_458.xml3
-rw-r--r--share/regions/config_459.xml3
-rw-r--r--share/regions/config_46.xml3
-rw-r--r--share/regions/config_460.xml3
-rw-r--r--share/regions/config_461.xml3
-rw-r--r--share/regions/config_462.xml3
-rw-r--r--share/regions/config_463.xml3
-rw-r--r--share/regions/config_464.xml3
-rw-r--r--share/regions/config_465.xml3
-rw-r--r--share/regions/config_466.xml3
-rw-r--r--share/regions/config_467.xml3
-rw-r--r--share/regions/config_468.xml3
-rw-r--r--share/regions/config_469.xml3
-rw-r--r--share/regions/config_47.xml3
-rw-r--r--share/regions/config_470.xml3
-rw-r--r--share/regions/config_471.xml3
-rw-r--r--share/regions/config_472.xml3
-rw-r--r--share/regions/config_473.xml3
-rw-r--r--share/regions/config_474.xml3
-rw-r--r--share/regions/config_475.xml3
-rw-r--r--share/regions/config_476.xml3
-rw-r--r--share/regions/config_477.xml3
-rw-r--r--share/regions/config_478.xml3
-rw-r--r--share/regions/config_479.xml3
-rw-r--r--share/regions/config_48.xml3
-rw-r--r--share/regions/config_480.xml3
-rw-r--r--share/regions/config_481.xml3
-rw-r--r--share/regions/config_482.xml3
-rw-r--r--share/regions/config_483.xml3
-rw-r--r--share/regions/config_484.xml3
-rw-r--r--share/regions/config_485.xml3
-rw-r--r--share/regions/config_486.xml3
-rw-r--r--share/regions/config_487.xml3
-rw-r--r--share/regions/config_488.xml3
-rw-r--r--share/regions/config_489.xml3
-rw-r--r--share/regions/config_49.xml3
-rw-r--r--share/regions/config_490.xml3
-rw-r--r--share/regions/config_491.xml3
-rw-r--r--share/regions/config_492.xml3
-rw-r--r--share/regions/config_493.xml3
-rw-r--r--share/regions/config_494.xml3
-rw-r--r--share/regions/config_495.xml3
-rw-r--r--share/regions/config_496.xml3
-rw-r--r--share/regions/config_497.xml3
-rw-r--r--share/regions/config_498.xml3
-rw-r--r--share/regions/config_499.xml3
-rw-r--r--share/regions/config_5.xml3
-rw-r--r--share/regions/config_50.xml3
-rw-r--r--share/regions/config_500.xml3
-rw-r--r--share/regions/config_501.xml3
-rw-r--r--share/regions/config_502.xml3
-rw-r--r--share/regions/config_503.xml3
-rw-r--r--share/regions/config_504.xml3
-rw-r--r--share/regions/config_505.xml3
-rw-r--r--share/regions/config_506.xml3
-rw-r--r--share/regions/config_507.xml3
-rw-r--r--share/regions/config_508.xml3
-rw-r--r--share/regions/config_509.xml3
-rw-r--r--share/regions/config_51.xml3
-rw-r--r--share/regions/config_510.xml3
-rw-r--r--share/regions/config_511.xml3
-rw-r--r--share/regions/config_512.xml3
-rw-r--r--share/regions/config_513.xml3
-rw-r--r--share/regions/config_514.xml3
-rw-r--r--share/regions/config_515.xml3
-rw-r--r--share/regions/config_516.xml3
-rw-r--r--share/regions/config_517.xml3
-rw-r--r--share/regions/config_518.xml3
-rw-r--r--share/regions/config_519.xml3
-rw-r--r--share/regions/config_52.xml3
-rw-r--r--share/regions/config_520.xml3
-rw-r--r--share/regions/config_521.xml3
-rw-r--r--share/regions/config_522.xml3
-rw-r--r--share/regions/config_523.xml3
-rw-r--r--share/regions/config_524.xml3
-rw-r--r--share/regions/config_525.xml3
-rw-r--r--share/regions/config_526.xml3
-rw-r--r--share/regions/config_527.xml3
-rw-r--r--share/regions/config_528.xml3
-rw-r--r--share/regions/config_529.xml3
-rw-r--r--share/regions/config_53.xml3
-rw-r--r--share/regions/config_530.xml3
-rw-r--r--share/regions/config_531.xml3
-rw-r--r--share/regions/config_532.xml3
-rw-r--r--share/regions/config_533.xml3
-rw-r--r--share/regions/config_534.xml3
-rw-r--r--share/regions/config_535.xml3
-rw-r--r--share/regions/config_536.xml3
-rw-r--r--share/regions/config_537.xml3
-rw-r--r--share/regions/config_538.xml3
-rw-r--r--share/regions/config_539.xml3
-rw-r--r--share/regions/config_54.xml3
-rw-r--r--share/regions/config_540.xml3
-rw-r--r--share/regions/config_541.xml3
-rw-r--r--share/regions/config_542.xml3
-rw-r--r--share/regions/config_543.xml3
-rw-r--r--share/regions/config_544.xml3
-rw-r--r--share/regions/config_545.xml3
-rw-r--r--share/regions/config_546.xml3
-rw-r--r--share/regions/config_547.xml3
-rw-r--r--share/regions/config_548.xml3
-rw-r--r--share/regions/config_549.xml3
-rw-r--r--share/regions/config_55.xml3
-rw-r--r--share/regions/config_550.xml3
-rw-r--r--share/regions/config_551.xml3
-rw-r--r--share/regions/config_552.xml3
-rw-r--r--share/regions/config_553.xml3
-rw-r--r--share/regions/config_554.xml3
-rw-r--r--share/regions/config_555.xml3
-rw-r--r--share/regions/config_556.xml3
-rw-r--r--share/regions/config_557.xml3
-rw-r--r--share/regions/config_558.xml3
-rw-r--r--share/regions/config_559.xml3
-rw-r--r--share/regions/config_56.xml3
-rw-r--r--share/regions/config_560.xml3
-rw-r--r--share/regions/config_561.xml3
-rw-r--r--share/regions/config_562.xml3
-rw-r--r--share/regions/config_563.xml3
-rw-r--r--share/regions/config_564.xml3
-rw-r--r--share/regions/config_565.xml3
-rw-r--r--share/regions/config_566.xml3
-rw-r--r--share/regions/config_567.xml3
-rw-r--r--share/regions/config_568.xml3
-rw-r--r--share/regions/config_569.xml3
-rw-r--r--share/regions/config_57.xml3
-rw-r--r--share/regions/config_570.xml3
-rw-r--r--share/regions/config_571.xml3
-rw-r--r--share/regions/config_572.xml3
-rw-r--r--share/regions/config_573.xml3
-rw-r--r--share/regions/config_574.xml3
-rw-r--r--share/regions/config_575.xml3
-rw-r--r--share/regions/config_576.xml3
-rw-r--r--share/regions/config_577.xml3
-rw-r--r--share/regions/config_578.xml3
-rw-r--r--share/regions/config_579.xml3
-rw-r--r--share/regions/config_58.xml3
-rw-r--r--share/regions/config_580.xml3
-rw-r--r--share/regions/config_581.xml3
-rw-r--r--share/regions/config_582.xml3
-rw-r--r--share/regions/config_583.xml3
-rw-r--r--share/regions/config_584.xml3
-rw-r--r--share/regions/config_585.xml3
-rw-r--r--share/regions/config_586.xml3
-rw-r--r--share/regions/config_587.xml3
-rw-r--r--share/regions/config_588.xml3
-rw-r--r--share/regions/config_589.xml3
-rw-r--r--share/regions/config_59.xml3
-rw-r--r--share/regions/config_590.xml3
-rw-r--r--share/regions/config_591.xml3
-rw-r--r--share/regions/config_592.xml3
-rw-r--r--share/regions/config_593.xml3
-rw-r--r--share/regions/config_594.xml3
-rw-r--r--share/regions/config_595.xml3
-rw-r--r--share/regions/config_596.xml3
-rw-r--r--share/regions/config_597.xml3
-rw-r--r--share/regions/config_598.xml3
-rw-r--r--share/regions/config_599.xml3
-rw-r--r--share/regions/config_6.xml3
-rw-r--r--share/regions/config_60.xml3
-rw-r--r--share/regions/config_600.xml3
-rw-r--r--share/regions/config_601.xml3
-rw-r--r--share/regions/config_602.xml3
-rw-r--r--share/regions/config_603.xml3
-rw-r--r--share/regions/config_604.xml3
-rw-r--r--share/regions/config_605.xml3
-rw-r--r--share/regions/config_606.xml3
-rw-r--r--share/regions/config_607.xml3
-rw-r--r--share/regions/config_608.xml3
-rw-r--r--share/regions/config_609.xml3
-rw-r--r--share/regions/config_61.xml3
-rw-r--r--share/regions/config_610.xml3
-rw-r--r--share/regions/config_611.xml3
-rw-r--r--share/regions/config_612.xml3
-rw-r--r--share/regions/config_613.xml3
-rw-r--r--share/regions/config_614.xml3
-rw-r--r--share/regions/config_615.xml3
-rw-r--r--share/regions/config_616.xml3
-rw-r--r--share/regions/config_617.xml3
-rw-r--r--share/regions/config_618.xml3
-rw-r--r--share/regions/config_619.xml3
-rw-r--r--share/regions/config_62.xml3
-rw-r--r--share/regions/config_620.xml3
-rw-r--r--share/regions/config_621.xml3
-rw-r--r--share/regions/config_622.xml3
-rw-r--r--share/regions/config_623.xml3
-rw-r--r--share/regions/config_624.xml3
-rw-r--r--share/regions/config_625.xml3
-rw-r--r--share/regions/config_626.xml3
-rw-r--r--share/regions/config_627.xml3
-rw-r--r--share/regions/config_628.xml3
-rw-r--r--share/regions/config_629.xml3
-rw-r--r--share/regions/config_63.xml3
-rw-r--r--share/regions/config_630.xml3
-rw-r--r--share/regions/config_631.xml3
-rw-r--r--share/regions/config_632.xml3
-rw-r--r--share/regions/config_633.xml3
-rw-r--r--share/regions/config_634.xml3
-rw-r--r--share/regions/config_635.xml3
-rw-r--r--share/regions/config_636.xml3
-rw-r--r--share/regions/config_637.xml3
-rw-r--r--share/regions/config_638.xml3
-rw-r--r--share/regions/config_639.xml3
-rw-r--r--share/regions/config_64.xml3
-rw-r--r--share/regions/config_640.xml3
-rw-r--r--share/regions/config_641.xml3
-rw-r--r--share/regions/config_642.xml3
-rw-r--r--share/regions/config_643.xml3
-rw-r--r--share/regions/config_644.xml3
-rw-r--r--share/regions/config_645.xml3
-rw-r--r--share/regions/config_646.xml3
-rw-r--r--share/regions/config_647.xml3
-rw-r--r--share/regions/config_648.xml3
-rw-r--r--share/regions/config_649.xml3
-rw-r--r--share/regions/config_65.xml3
-rw-r--r--share/regions/config_650.xml3
-rw-r--r--share/regions/config_651.xml3
-rw-r--r--share/regions/config_652.xml3
-rw-r--r--share/regions/config_653.xml3
-rw-r--r--share/regions/config_654.xml3
-rw-r--r--share/regions/config_655.xml3
-rw-r--r--share/regions/config_656.xml3
-rw-r--r--share/regions/config_657.xml3
-rw-r--r--share/regions/config_658.xml3
-rw-r--r--share/regions/config_659.xml3
-rw-r--r--share/regions/config_66.xml3
-rw-r--r--share/regions/config_660.xml3
-rw-r--r--share/regions/config_661.xml3
-rw-r--r--share/regions/config_662.xml3
-rw-r--r--share/regions/config_663.xml3
-rw-r--r--share/regions/config_664.xml3
-rw-r--r--share/regions/config_665.xml3
-rw-r--r--share/regions/config_666.xml3
-rw-r--r--share/regions/config_667.xml3
-rw-r--r--share/regions/config_668.xml3
-rw-r--r--share/regions/config_669.xml3
-rw-r--r--share/regions/config_67.xml3
-rw-r--r--share/regions/config_670.xml3
-rw-r--r--share/regions/config_671.xml3
-rw-r--r--share/regions/config_672.xml3
-rw-r--r--share/regions/config_673.xml3
-rw-r--r--share/regions/config_674.xml3
-rw-r--r--share/regions/config_675.xml3
-rw-r--r--share/regions/config_676.xml3
-rw-r--r--share/regions/config_677.xml3
-rw-r--r--share/regions/config_678.xml3
-rw-r--r--share/regions/config_679.xml3
-rw-r--r--share/regions/config_68.xml3
-rw-r--r--share/regions/config_680.xml3
-rw-r--r--share/regions/config_681.xml3
-rw-r--r--share/regions/config_682.xml3
-rw-r--r--share/regions/config_683.xml3
-rw-r--r--share/regions/config_684.xml3
-rw-r--r--share/regions/config_685.xml3
-rw-r--r--share/regions/config_686.xml3
-rw-r--r--share/regions/config_687.xml3
-rw-r--r--share/regions/config_688.xml3
-rw-r--r--share/regions/config_689.xml3
-rw-r--r--share/regions/config_69.xml3
-rw-r--r--share/regions/config_690.xml3
-rw-r--r--share/regions/config_691.xml3
-rw-r--r--share/regions/config_692.xml3
-rw-r--r--share/regions/config_693.xml3
-rw-r--r--share/regions/config_694.xml3
-rw-r--r--share/regions/config_695.xml3
-rw-r--r--share/regions/config_696.xml3
-rw-r--r--share/regions/config_697.xml3
-rw-r--r--share/regions/config_698.xml3
-rw-r--r--share/regions/config_699.xml3
-rw-r--r--share/regions/config_7.xml3
-rw-r--r--share/regions/config_70.xml3
-rw-r--r--share/regions/config_700.xml3
-rw-r--r--share/regions/config_701.xml3
-rw-r--r--share/regions/config_702.xml3
-rw-r--r--share/regions/config_703.xml3
-rw-r--r--share/regions/config_704.xml3
-rw-r--r--share/regions/config_705.xml3
-rw-r--r--share/regions/config_706.xml3
-rw-r--r--share/regions/config_707.xml3
-rw-r--r--share/regions/config_708.xml3
-rw-r--r--share/regions/config_709.xml3
-rw-r--r--share/regions/config_71.xml3
-rw-r--r--share/regions/config_710.xml3
-rw-r--r--share/regions/config_711.xml3
-rw-r--r--share/regions/config_712.xml3
-rw-r--r--share/regions/config_713.xml3
-rw-r--r--share/regions/config_714.xml3
-rw-r--r--share/regions/config_715.xml3
-rw-r--r--share/regions/config_716.xml3
-rw-r--r--share/regions/config_717.xml3
-rw-r--r--share/regions/config_718.xml3
-rw-r--r--share/regions/config_719.xml3
-rw-r--r--share/regions/config_72.xml3
-rw-r--r--share/regions/config_720.xml3
-rw-r--r--share/regions/config_721.xml3
-rw-r--r--share/regions/config_722.xml3
-rw-r--r--share/regions/config_723.xml3
-rw-r--r--share/regions/config_724.xml3
-rw-r--r--share/regions/config_725.xml3
-rw-r--r--share/regions/config_726.xml3
-rw-r--r--share/regions/config_727.xml3
-rw-r--r--share/regions/config_728.xml3
-rw-r--r--share/regions/config_729.xml3
-rw-r--r--share/regions/config_73.xml3
-rw-r--r--share/regions/config_730.xml3
-rw-r--r--share/regions/config_731.xml3
-rw-r--r--share/regions/config_732.xml3
-rw-r--r--share/regions/config_733.xml3
-rw-r--r--share/regions/config_734.xml3
-rw-r--r--share/regions/config_735.xml3
-rw-r--r--share/regions/config_736.xml3
-rw-r--r--share/regions/config_737.xml3
-rw-r--r--share/regions/config_738.xml3
-rw-r--r--share/regions/config_739.xml3
-rw-r--r--share/regions/config_74.xml3
-rw-r--r--share/regions/config_740.xml3
-rw-r--r--share/regions/config_741.xml3
-rw-r--r--share/regions/config_742.xml3
-rw-r--r--share/regions/config_743.xml3
-rw-r--r--share/regions/config_744.xml3
-rw-r--r--share/regions/config_745.xml3
-rw-r--r--share/regions/config_746.xml3
-rw-r--r--share/regions/config_747.xml3
-rw-r--r--share/regions/config_748.xml3
-rw-r--r--share/regions/config_749.xml3
-rw-r--r--share/regions/config_75.xml3
-rw-r--r--share/regions/config_750.xml3
-rw-r--r--share/regions/config_751.xml3
-rw-r--r--share/regions/config_752.xml3
-rw-r--r--share/regions/config_753.xml3
-rw-r--r--share/regions/config_754.xml3
-rw-r--r--share/regions/config_755.xml3
-rw-r--r--share/regions/config_756.xml3
-rw-r--r--share/regions/config_757.xml3
-rw-r--r--share/regions/config_758.xml3
-rw-r--r--share/regions/config_759.xml3
-rw-r--r--share/regions/config_76.xml3
-rw-r--r--share/regions/config_760.xml3
-rw-r--r--share/regions/config_761.xml3
-rw-r--r--share/regions/config_762.xml3
-rw-r--r--share/regions/config_763.xml3
-rw-r--r--share/regions/config_764.xml3
-rw-r--r--share/regions/config_765.xml3
-rw-r--r--share/regions/config_766.xml3
-rw-r--r--share/regions/config_767.xml3
-rw-r--r--share/regions/config_768.xml3
-rw-r--r--share/regions/config_769.xml3
-rw-r--r--share/regions/config_77.xml3
-rw-r--r--share/regions/config_770.xml3
-rw-r--r--share/regions/config_771.xml3
-rw-r--r--share/regions/config_772.xml3
-rw-r--r--share/regions/config_773.xml3
-rw-r--r--share/regions/config_774.xml3
-rw-r--r--share/regions/config_775.xml3
-rw-r--r--share/regions/config_776.xml3
-rw-r--r--share/regions/config_777.xml3
-rw-r--r--share/regions/config_778.xml3
-rw-r--r--share/regions/config_779.xml3
-rw-r--r--share/regions/config_78.xml3
-rw-r--r--share/regions/config_780.xml3
-rw-r--r--share/regions/config_781.xml3
-rw-r--r--share/regions/config_782.xml3
-rw-r--r--share/regions/config_783.xml3
-rw-r--r--share/regions/config_784.xml3
-rw-r--r--share/regions/config_785.xml3
-rw-r--r--share/regions/config_786.xml3
-rw-r--r--share/regions/config_787.xml3
-rw-r--r--share/regions/config_788.xml3
-rw-r--r--share/regions/config_789.xml3
-rw-r--r--share/regions/config_79.xml3
-rw-r--r--share/regions/config_790.xml3
-rw-r--r--share/regions/config_791.xml3
-rw-r--r--share/regions/config_792.xml3
-rw-r--r--share/regions/config_793.xml3
-rw-r--r--share/regions/config_794.xml3
-rw-r--r--share/regions/config_795.xml3
-rw-r--r--share/regions/config_796.xml3
-rw-r--r--share/regions/config_797.xml3
-rw-r--r--share/regions/config_798.xml3
-rw-r--r--share/regions/config_799.xml3
-rw-r--r--share/regions/config_8.xml3
-rw-r--r--share/regions/config_80.xml3
-rw-r--r--share/regions/config_800.xml3
-rw-r--r--share/regions/config_801.xml3
-rw-r--r--share/regions/config_802.xml3
-rw-r--r--share/regions/config_803.xml3
-rw-r--r--share/regions/config_804.xml3
-rw-r--r--share/regions/config_805.xml3
-rw-r--r--share/regions/config_806.xml3
-rw-r--r--share/regions/config_807.xml3
-rw-r--r--share/regions/config_808.xml3
-rw-r--r--share/regions/config_809.xml3
-rw-r--r--share/regions/config_81.xml3
-rw-r--r--share/regions/config_810.xml3
-rw-r--r--share/regions/config_811.xml3
-rw-r--r--share/regions/config_812.xml3
-rw-r--r--share/regions/config_813.xml3
-rw-r--r--share/regions/config_814.xml3
-rw-r--r--share/regions/config_815.xml3
-rw-r--r--share/regions/config_816.xml3
-rw-r--r--share/regions/config_817.xml3
-rw-r--r--share/regions/config_818.xml3
-rw-r--r--share/regions/config_819.xml3
-rw-r--r--share/regions/config_82.xml3
-rw-r--r--share/regions/config_820.xml3
-rw-r--r--share/regions/config_821.xml3
-rw-r--r--share/regions/config_822.xml3
-rw-r--r--share/regions/config_823.xml3
-rw-r--r--share/regions/config_824.xml3
-rw-r--r--share/regions/config_825.xml3
-rw-r--r--share/regions/config_826.xml3
-rw-r--r--share/regions/config_827.xml3
-rw-r--r--share/regions/config_828.xml3
-rw-r--r--share/regions/config_829.xml3
-rw-r--r--share/regions/config_83.xml3
-rw-r--r--share/regions/config_830.xml3
-rw-r--r--share/regions/config_831.xml3
-rw-r--r--share/regions/config_832.xml3
-rw-r--r--share/regions/config_833.xml3
-rw-r--r--share/regions/config_834.xml3
-rw-r--r--share/regions/config_835.xml3
-rw-r--r--share/regions/config_836.xml3
-rw-r--r--share/regions/config_837.xml3
-rw-r--r--share/regions/config_838.xml3
-rw-r--r--share/regions/config_839.xml3
-rw-r--r--share/regions/config_84.xml3
-rw-r--r--share/regions/config_840.xml3
-rw-r--r--share/regions/config_841.xml3
-rw-r--r--share/regions/config_842.xml3
-rw-r--r--share/regions/config_843.xml3
-rw-r--r--share/regions/config_844.xml3
-rw-r--r--share/regions/config_845.xml3
-rw-r--r--share/regions/config_846.xml3
-rw-r--r--share/regions/config_847.xml3
-rw-r--r--share/regions/config_848.xml3
-rw-r--r--share/regions/config_849.xml3
-rw-r--r--share/regions/config_85.xml3
-rw-r--r--share/regions/config_850.xml3
-rw-r--r--share/regions/config_851.xml3
-rw-r--r--share/regions/config_852.xml3
-rw-r--r--share/regions/config_853.xml3
-rw-r--r--share/regions/config_854.xml3
-rw-r--r--share/regions/config_855.xml3
-rw-r--r--share/regions/config_856.xml3
-rw-r--r--share/regions/config_857.xml3
-rw-r--r--share/regions/config_858.xml3
-rw-r--r--share/regions/config_859.xml3
-rw-r--r--share/regions/config_86.xml3
-rw-r--r--share/regions/config_860.xml3
-rw-r--r--share/regions/config_861.xml3
-rw-r--r--share/regions/config_862.xml3
-rw-r--r--share/regions/config_863.xml3
-rw-r--r--share/regions/config_864.xml3
-rw-r--r--share/regions/config_865.xml3
-rw-r--r--share/regions/config_866.xml3
-rw-r--r--share/regions/config_867.xml3
-rw-r--r--share/regions/config_868.xml3
-rw-r--r--share/regions/config_869.xml3
-rw-r--r--share/regions/config_87.xml3
-rw-r--r--share/regions/config_870.xml3
-rw-r--r--share/regions/config_871.xml3
-rw-r--r--share/regions/config_872.xml3
-rw-r--r--share/regions/config_873.xml3
-rw-r--r--share/regions/config_874.xml3
-rw-r--r--share/regions/config_875.xml3
-rw-r--r--share/regions/config_876.xml3
-rw-r--r--share/regions/config_877.xml3
-rw-r--r--share/regions/config_878.xml3
-rw-r--r--share/regions/config_879.xml3
-rw-r--r--share/regions/config_88.xml3
-rw-r--r--share/regions/config_880.xml3
-rw-r--r--share/regions/config_881.xml3
-rw-r--r--share/regions/config_882.xml3
-rw-r--r--share/regions/config_883.xml3
-rw-r--r--share/regions/config_884.xml3
-rw-r--r--share/regions/config_885.xml3
-rw-r--r--share/regions/config_886.xml3
-rw-r--r--share/regions/config_887.xml3
-rw-r--r--share/regions/config_888.xml3
-rw-r--r--share/regions/config_889.xml3
-rw-r--r--share/regions/config_89.xml3
-rw-r--r--share/regions/config_890.xml3
-rw-r--r--share/regions/config_891.xml3
-rw-r--r--share/regions/config_892.xml3
-rw-r--r--share/regions/config_893.xml3
-rw-r--r--share/regions/config_894.xml3
-rw-r--r--share/regions/config_895.xml3
-rw-r--r--share/regions/config_896.xml3
-rw-r--r--share/regions/config_897.xml3
-rw-r--r--share/regions/config_898.xml3
-rw-r--r--share/regions/config_899.xml3
-rw-r--r--share/regions/config_9.xml3
-rw-r--r--share/regions/config_90.xml3
-rw-r--r--share/regions/config_900.xml3
-rw-r--r--share/regions/config_901.xml3
-rw-r--r--share/regions/config_902.xml3
-rw-r--r--share/regions/config_903.xml3
-rw-r--r--share/regions/config_904.xml3
-rw-r--r--share/regions/config_905.xml3
-rw-r--r--share/regions/config_906.xml3
-rw-r--r--share/regions/config_907.xml3
-rw-r--r--share/regions/config_908.xml3
-rw-r--r--share/regions/config_909.xml3
-rw-r--r--share/regions/config_91.xml3
-rw-r--r--share/regions/config_910.xml3
-rw-r--r--share/regions/config_911.xml3
-rw-r--r--share/regions/config_912.xml3
-rw-r--r--share/regions/config_913.xml3
-rw-r--r--share/regions/config_914.xml3
-rw-r--r--share/regions/config_915.xml3
-rw-r--r--share/regions/config_916.xml3
-rw-r--r--share/regions/config_917.xml3
-rw-r--r--share/regions/config_918.xml3
-rw-r--r--share/regions/config_919.xml3
-rw-r--r--share/regions/config_92.xml3
-rw-r--r--share/regions/config_920.xml3
-rw-r--r--share/regions/config_921.xml3
-rw-r--r--share/regions/config_922.xml3
-rw-r--r--share/regions/config_923.xml3
-rw-r--r--share/regions/config_924.xml3
-rw-r--r--share/regions/config_925.xml3
-rw-r--r--share/regions/config_926.xml3
-rw-r--r--share/regions/config_927.xml3
-rw-r--r--share/regions/config_928.xml3
-rw-r--r--share/regions/config_929.xml3
-rw-r--r--share/regions/config_93.xml3
-rw-r--r--share/regions/config_930.xml3
-rw-r--r--share/regions/config_931.xml3
-rw-r--r--share/regions/config_932.xml3
-rw-r--r--share/regions/config_933.xml3
-rw-r--r--share/regions/config_934.xml3
-rw-r--r--share/regions/config_935.xml3
-rw-r--r--share/regions/config_936.xml3
-rw-r--r--share/regions/config_937.xml3
-rw-r--r--share/regions/config_938.xml3
-rw-r--r--share/regions/config_939.xml3
-rw-r--r--share/regions/config_94.xml3
-rw-r--r--share/regions/config_940.xml3
-rw-r--r--share/regions/config_941.xml3
-rw-r--r--share/regions/config_942.xml3
-rw-r--r--share/regions/config_943.xml3
-rw-r--r--share/regions/config_944.xml3
-rw-r--r--share/regions/config_945.xml3
-rw-r--r--share/regions/config_946.xml3
-rw-r--r--share/regions/config_947.xml3
-rw-r--r--share/regions/config_948.xml3
-rw-r--r--share/regions/config_949.xml3
-rw-r--r--share/regions/config_95.xml3
-rw-r--r--share/regions/config_950.xml3
-rw-r--r--share/regions/config_951.xml3
-rw-r--r--share/regions/config_952.xml3
-rw-r--r--share/regions/config_953.xml3
-rw-r--r--share/regions/config_954.xml3
-rw-r--r--share/regions/config_955.xml3
-rw-r--r--share/regions/config_956.xml3
-rw-r--r--share/regions/config_957.xml3
-rw-r--r--share/regions/config_958.xml3
-rw-r--r--share/regions/config_959.xml3
-rw-r--r--share/regions/config_96.xml3
-rw-r--r--share/regions/config_960.xml3
-rw-r--r--share/regions/config_961.xml3
-rw-r--r--share/regions/config_962.xml3
-rw-r--r--share/regions/config_963.xml3
-rw-r--r--share/regions/config_964.xml3
-rw-r--r--share/regions/config_965.xml3
-rw-r--r--share/regions/config_966.xml3
-rw-r--r--share/regions/config_967.xml3
-rw-r--r--share/regions/config_968.xml3
-rw-r--r--share/regions/config_969.xml3
-rw-r--r--share/regions/config_97.xml3
-rw-r--r--share/regions/config_970.xml3
-rw-r--r--share/regions/config_971.xml3
-rw-r--r--share/regions/config_972.xml3
-rw-r--r--share/regions/config_973.xml3
-rw-r--r--share/regions/config_974.xml3
-rw-r--r--share/regions/config_975.xml3
-rw-r--r--share/regions/config_976.xml3
-rw-r--r--share/regions/config_977.xml3
-rw-r--r--share/regions/config_978.xml3
-rw-r--r--share/regions/config_979.xml3
-rw-r--r--share/regions/config_98.xml3
-rw-r--r--share/regions/config_980.xml3
-rw-r--r--share/regions/config_981.xml3
-rw-r--r--share/regions/config_982.xml3
-rw-r--r--share/regions/config_983.xml3
-rw-r--r--share/regions/config_984.xml3
-rw-r--r--share/regions/config_985.xml3
-rw-r--r--share/regions/config_986.xml3
-rw-r--r--share/regions/config_987.xml3
-rw-r--r--share/regions/config_988.xml3
-rw-r--r--share/regions/config_989.xml3
-rw-r--r--share/regions/config_99.xml3
-rw-r--r--share/regions/config_990.xml3
-rw-r--r--share/regions/config_991.xml3
-rw-r--r--share/regions/config_992.xml3
-rw-r--r--share/regions/config_993.xml3
-rw-r--r--share/regions/config_994.xml3
-rw-r--r--share/regions/config_995.xml3
-rw-r--r--share/regions/config_996.xml3
-rw-r--r--share/regions/config_997.xml3
-rw-r--r--share/regions/config_998.xml3
-rw-r--r--share/regions/config_999.xml3
-rw-r--r--share/sql/mysql-agents.sql24
-rw-r--r--share/sql/mysql-inventoryfolders.sql9
-rw-r--r--share/sql/mysql-inventoryitems.sql14
-rw-r--r--share/sql/mysql-logs.sql10
-rw-r--r--share/sql/mysql-regions.sql29
-rw-r--r--share/sql/mysql-reservations.txt16
-rw-r--r--share/sql/mysql-users.sql34
1400 files changed, 60282 insertions, 0 deletions
diff --git a/OpenSim.FxCop b/OpenSim.FxCop
new file mode 100644
index 0000000..1e2ea2d
--- /dev/null
+++ b/OpenSim.FxCop
@@ -0,0 +1,7241 @@
1<?xml version="1.0" encoding="utf-8"?>
2<FxCopProject Version="1.35" Name="OpenSim">
3 <ProjectOptions>
4 <SharedProject>True</SharedProject>
5 <Stylesheet Apply="False">http://www.gotdotnet.com/team/fxcop//xsl/1.35/FxCopReport.xsl</Stylesheet>
6 <SaveMessages>
7 <Project Status="Active, Excluded" NewOnly="False" />
8 <Report Status="Active" NewOnly="False" />
9 </SaveMessages>
10 <ProjectFile Compress="True" DefaultTargetCheck="True" DefaultRuleCheck="True" SaveByRuleGroup="" Deterministic="True" />
11 <EnableMultithreadedLoad>True</EnableMultithreadedLoad>
12 <EnableMultithreadedAnalysis>True</EnableMultithreadedAnalysis>
13 <SourceLookup>True</SourceLookup>
14 <AnalysisExceptionsThreshold>10</AnalysisExceptionsThreshold>
15 <RuleExceptionsThreshold>1</RuleExceptionsThreshold>
16 <Spelling Locale="en-us" />
17 <VersionAware>False</VersionAware>
18 <OverrideRuleVisibilities>False</OverrideRuleVisibilities>
19 <CustomDictionaries SearchFxCopDir="True" SearchUserProfile="True" SearchProjectDir="True" />
20 <SearchGlobalAssemblyCache>False</SearchGlobalAssemblyCache>
21 <DeadlockDetectionTimeout>120</DeadlockDetectionTimeout>
22 </ProjectOptions>
23 <Targets>
24 <AssemblyReferenceDirectories>
25 <Directory>$(ProjectDir)/lib/</Directory>
26 </AssemblyReferenceDirectories>
27 <Target Name="$(ProjectDir)/bin/OpenGridServices.ServerConsole.dll" Analyze="True" AnalyzeAllChildren="True" />
28 <Target Name="$(ProjectDir)/bin/OpenSim.Config.SimConfigDb4o.dll" Analyze="True" AnalyzeAllChildren="True" />
29 <Target Name="$(ProjectDir)/bin/OpenSim.exe" Analyze="True" AnalyzeAllChildren="True" />
30 <Target Name="$(ProjectDir)/bin/OpenSim.Framework.Console.dll" Analyze="True" AnalyzeAllChildren="True" />
31 <Target Name="$(ProjectDir)/bin/OpenSim.Framework.dll" Analyze="True" AnalyzeAllChildren="True" />
32 <Target Name="$(ProjectDir)/bin/OpenSim.GridInterfaces.Local.dll" Analyze="True" AnalyzeAllChildren="True" />
33 <Target Name="$(ProjectDir)/bin/OpenSim.GridInterfaces.Remote.dll" Analyze="True" AnalyzeAllChildren="True" />
34 <Target Name="$(ProjectDir)/bin/OpenSim.Physics.Manager.dll" Analyze="True" AnalyzeAllChildren="True" />
35 <Target Name="$(ProjectDir)/bin/OpenSim.RegionServer.dll" Analyze="True" AnalyzeAllChildren="True" />
36 <Target Name="$(ProjectDir)/bin/OpenSim.Storage.LocalStorageDb4o.dll" Analyze="True" AnalyzeAllChildren="True" />
37 <Target Name="$(ProjectDir)/bin/Physics/OpenSim.Physics.BasicPhysicsPlugin.dll" Analyze="True" AnalyzeAllChildren="True" />
38 <Target Name="$(ProjectDir)/bin/Physics/OpenSim.Physics.OdePlugin.dll" Analyze="True" AnalyzeAllChildren="True" />
39 <Target Name="$(ProjectDir)/bin/Physics/OpenSim.Physics.PhysXPlugin.dll" Analyze="True" AnalyzeAllChildren="True" />
40 </Targets>
41 <Rules>
42 <RuleFiles>
43 <RuleFile Name="$(FxCopDir)\Rules\DesignRules.dll" Enabled="True" AllRulesEnabled="True" />
44 <RuleFile Name="$(FxCopDir)\Rules\GlobalizationRules.dll" Enabled="True" AllRulesEnabled="True" />
45 <RuleFile Name="$(FxCopDir)\Rules\InteroperabilityRules.dll" Enabled="True" AllRulesEnabled="True" />
46 <RuleFile Name="$(FxCopDir)\Rules\MobilityRules.dll" Enabled="True" AllRulesEnabled="True" />
47 <RuleFile Name="$(FxCopDir)\Rules\NamingRules.dll" Enabled="True" AllRulesEnabled="True" />
48 <RuleFile Name="$(FxCopDir)\Rules\PerformanceRules.dll" Enabled="True" AllRulesEnabled="True" />
49 <RuleFile Name="$(FxCopDir)\Rules\PortabilityRules.dll" Enabled="True" AllRulesEnabled="True" />
50 <RuleFile Name="$(FxCopDir)\Rules\SecurityRules.dll" Enabled="True" AllRulesEnabled="True" />
51 <RuleFile Name="$(FxCopDir)\Rules\UsageRules.dll" Enabled="True" AllRulesEnabled="True" />
52 </RuleFiles>
53 <Groups />
54 <Settings />
55 </Rules>
56 <FxCopReport Version="1.35">
57 <Namespaces>
58 <Namespace Name="OpenSim">
59 <Messages>
60 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
61 <Issue Name="Namespace">
62 <Item>Sim</Item>
63 <Item>OpenSim</Item>
64 </Issue>
65 </Message>
66 </Messages>
67 </Namespace>
68 <Namespace Name="OpenSim.Assets">
69 <Messages>
70 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
71 <Issue Name="Namespace">
72 <Item>Sim</Item>
73 <Item>OpenSim.Assets</Item>
74 </Issue>
75 </Message>
76 </Messages>
77 </Namespace>
78 <Namespace Name="OpenSim.CAPS">
79 <Messages>
80 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
81 <Issue>
82 <Item>OpenSim.CAPS</Item>
83 </Issue>
84 </Message>
85 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
86 <Issue Name="Namespace">
87 <Item>Sim</Item>
88 <Item>OpenSim.CAPS</Item>
89 </Issue>
90 </Message>
91 <Message TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
92 <Issue Name="Namespace">
93 <Item>OpenSim.CAPS</Item>
94 </Issue>
95 </Message>
96 </Messages>
97 </Namespace>
98 <Namespace Name="OpenSim.Config.SimConfigDb4o">
99 <Messages>
100 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
101 <Issue Name="Namespace">
102 <Item>Sim</Item>
103 <Item>OpenSim.Config.SimConfigDb4o</Item>
104 </Issue>
105 <Issue Name="Namespace">
106 <Item>Sim</Item>
107 <Item>OpenSim.Config.SimConfigDb4o</Item>
108 </Issue>
109 </Message>
110 </Messages>
111 </Namespace>
112 <Namespace Name="OpenSim.Framework.Assets">
113 <Messages>
114 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
115 <Issue>
116 <Item>OpenSim.Framework.Assets</Item>
117 </Issue>
118 </Message>
119 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
120 <Issue Name="Namespace">
121 <Item>Sim</Item>
122 <Item>OpenSim.Framework.Assets</Item>
123 </Issue>
124 </Message>
125 </Messages>
126 </Namespace>
127 <Namespace Name="OpenSim.Framework.Console">
128 <Messages>
129 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
130 <Issue Name="Namespace">
131 <Item>Sim</Item>
132 <Item>OpenSim.Framework.Console</Item>
133 </Issue>
134 </Message>
135 </Messages>
136 </Namespace>
137 <Namespace Name="OpenSim.Framework.Grid">
138 <Messages>
139 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
140 <Issue>
141 <Item>OpenSim.Framework.Grid</Item>
142 </Issue>
143 </Message>
144 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
145 <Issue Name="Namespace">
146 <Item>Sim</Item>
147 <Item>OpenSim.Framework.Grid</Item>
148 </Issue>
149 </Message>
150 </Messages>
151 </Namespace>
152 <Namespace Name="OpenSim.Framework.Interfaces">
153 <Messages>
154 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
155 <Issue Name="Namespace">
156 <Item>Sim</Item>
157 <Item>OpenSim.Framework.Interfaces</Item>
158 </Issue>
159 </Message>
160 </Messages>
161 </Namespace>
162 <Namespace Name="OpenSim.Framework.Inventory">
163 <Messages>
164 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
165 <Issue>
166 <Item>OpenSim.Framework.Inventory</Item>
167 </Issue>
168 </Message>
169 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
170 <Issue Name="Namespace">
171 <Item>Sim</Item>
172 <Item>OpenSim.Framework.Inventory</Item>
173 </Issue>
174 </Message>
175 </Messages>
176 </Namespace>
177 <Namespace Name="OpenSim.Framework.Sims">
178 <Messages>
179 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
180 <Issue>
181 <Item>OpenSim.Framework.Sims</Item>
182 </Issue>
183 </Message>
184 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
185 <Issue Name="Namespace">
186 <Item>Sim</Item>
187 <Item>OpenSim.Framework.Sims</Item>
188 </Issue>
189 </Message>
190 </Messages>
191 </Namespace>
192 <Namespace Name="OpenSim.Framework.Terrain">
193 <Messages>
194 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
195 <Issue>
196 <Item>OpenSim.Framework.Terrain</Item>
197 </Issue>
198 </Message>
199 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
200 <Issue Name="Namespace">
201 <Item>Sim</Item>
202 <Item>OpenSim.Framework.Terrain</Item>
203 </Issue>
204 </Message>
205 </Messages>
206 </Namespace>
207 <Namespace Name="OpenSim.Framework.User">
208 <Messages>
209 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
210 <Issue>
211 <Item>OpenSim.Framework.User</Item>
212 </Issue>
213 </Message>
214 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
215 <Issue Name="Namespace">
216 <Item>Sim</Item>
217 <Item>OpenSim.Framework.User</Item>
218 </Issue>
219 </Message>
220 </Messages>
221 </Namespace>
222 <Namespace Name="OpenSim.Framework.Utilities">
223 <Messages>
224 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
225 <Issue>
226 <Item>OpenSim.Framework.Utilities</Item>
227 </Issue>
228 </Message>
229 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
230 <Issue Name="Namespace">
231 <Item>Sim</Item>
232 <Item>OpenSim.Framework.Utilities</Item>
233 </Issue>
234 </Message>
235 </Messages>
236 </Namespace>
237 <Namespace Name="OpenSim.GridInterfaces.Local">
238 <Messages>
239 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
240 <Issue Name="Namespace">
241 <Item>Sim</Item>
242 <Item>OpenSim.GridInterfaces.Local</Item>
243 </Issue>
244 </Message>
245 </Messages>
246 </Namespace>
247 <Namespace Name="OpenSim.GridInterfaces.Remote">
248 <Messages>
249 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
250 <Issue>
251 <Item>OpenSim.GridInterfaces.Remote</Item>
252 </Issue>
253 </Message>
254 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
255 <Issue Name="Namespace">
256 <Item>Sim</Item>
257 <Item>OpenSim.GridInterfaces.Remote</Item>
258 </Issue>
259 </Message>
260 </Messages>
261 </Namespace>
262 <Namespace Name="OpenSim.Physics.BasicPhysicsPlugin">
263 <Messages>
264 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
265 <Issue Name="Namespace">
266 <Item>Plugin</Item>
267 <Item>OpenSim.Physics.BasicPhysicsPlugin</Item>
268 </Issue>
269 </Message>
270 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
271 <Issue Name="Namespace">
272 <Item>Sim</Item>
273 <Item>OpenSim.Physics.BasicPhysicsPlugin</Item>
274 </Issue>
275 </Message>
276 </Messages>
277 </Namespace>
278 <Namespace Name="OpenSim.Physics.Manager">
279 <Messages>
280 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
281 <Issue Name="Namespace">
282 <Item>Sim</Item>
283 <Item>OpenSim.Physics.Manager</Item>
284 </Issue>
285 </Message>
286 </Messages>
287 </Namespace>
288 <Namespace Name="OpenSim.Physics.OdePlugin">
289 <Messages>
290 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
291 <Issue>
292 <Item>OpenSim.Physics.OdePlugin</Item>
293 </Issue>
294 </Message>
295 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
296 <Issue Name="Namespace">
297 <Item>Plugin</Item>
298 <Item>OpenSim.Physics.OdePlugin</Item>
299 </Issue>
300 </Message>
301 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
302 <Issue Name="Namespace">
303 <Item>Sim</Item>
304 <Item>OpenSim.Physics.OdePlugin</Item>
305 </Issue>
306 </Message>
307 </Messages>
308 </Namespace>
309 <Namespace Name="OpenSim.Physics.PhysXPlugin">
310 <Messages>
311 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
312 <Issue>
313 <Item>OpenSim.Physics.PhysXPlugin</Item>
314 </Issue>
315 </Message>
316 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
317 <Issue Name="Namespace">
318 <Item>Plugin</Item>
319 <Item>OpenSim.Physics.PhysXPlugin</Item>
320 </Issue>
321 </Message>
322 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
323 <Issue Name="Namespace">
324 <Item>Sim</Item>
325 <Item>OpenSim.Physics.PhysXPlugin</Item>
326 </Issue>
327 </Message>
328 </Messages>
329 </Namespace>
330 <Namespace Name="OpenSim.Storage.LocalStorageDb4o">
331 <Messages>
332 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
333 <Issue Name="Namespace">
334 <Item>Sim</Item>
335 <Item>OpenSim.Storage.LocalStorageDb4o</Item>
336 </Issue>
337 </Message>
338 </Messages>
339 </Namespace>
340 <Namespace Name="OpenSim.types">
341 <Messages>
342 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
343 <Issue>
344 <Item>OpenSim.types</Item>
345 </Issue>
346 </Message>
347 <Message TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
348 <Issue Name="Namespace">
349 <Item>OpenSim.types</Item>
350 </Issue>
351 </Message>
352 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
353 <Issue Name="Namespace">
354 <Item>Sim</Item>
355 <Item>OpenSim.types</Item>
356 </Issue>
357 </Message>
358 </Messages>
359 </Namespace>
360 <Namespace Name="OpenSim.UserServer">
361 <Messages>
362 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
363 <Issue>
364 <Item>OpenSim.UserServer</Item>
365 </Issue>
366 </Message>
367 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
368 <Issue Name="Namespace">
369 <Item>Sim</Item>
370 <Item>OpenSim.UserServer</Item>
371 </Issue>
372 </Message>
373 </Messages>
374 </Namespace>
375 <Namespace Name="OpenSim.world">
376 <Messages>
377 <Message TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
378 <Issue Name="Namespace">
379 <Item>OpenSim.world</Item>
380 </Issue>
381 </Message>
382 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
383 <Issue Name="Namespace">
384 <Item>Sim</Item>
385 <Item>OpenSim.world</Item>
386 </Issue>
387 </Message>
388 </Messages>
389 </Namespace>
390 <Namespace Name="OpenSim.world.scripting">
391 <Messages>
392 <Message TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020" Created="2007-03-27 04:29:04Z">
393 <Issue>
394 <Item>OpenSim.world.scripting</Item>
395 </Issue>
396 </Message>
397 <Message TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
398 <Issue Name="Namespace">
399 <Item>OpenSim.world.scripting</Item>
400 </Issue>
401 <Issue Name="Namespace">
402 <Item>OpenSim.world.scripting</Item>
403 </Issue>
404 </Message>
405 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
406 <Issue Name="Namespace">
407 <Item>Sim</Item>
408 <Item>OpenSim.world.scripting</Item>
409 </Issue>
410 </Message>
411 </Messages>
412 </Namespace>
413 </Namespaces>
414 <Targets>
415 <Target Name="$(ProjectDir)/bin/OpenGridServices.ServerConsole.dll">
416 <Modules>
417 <Module Name="opengridservices.serverconsole.dll">
418 <Messages>
419 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
420 <Issue>
421 <Item>OpenGridServices.ServerConsole</Item>
422 </Issue>
423 </Message>
424 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
425 <Issue Name="NoStrongName">
426 <Item>OpenGridServices.ServerConsole</Item>
427 </Issue>
428 </Message>
429 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
430 <Issue Name="NoAttr">
431 <Item>OpenGridServices.ServerConsole</Item>
432 </Issue>
433 </Message>
434 </Messages>
435 <Namespaces>
436 <Namespace Name="ServerConsole">
437 <Types>
438 <Type Name="conscmd_callback">
439 <Messages>
440 <Message TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
441 <Issue Name="Type">
442 <Item>conscmd_callback</Item>
443 </Issue>
444 </Message>
445 <Message Id="conscmd" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
446 <Issue Name="Type">
447 <Item>conscmd</Item>
448 <Item>ServerConsole.conscmd_callback</Item>
449 </Issue>
450 </Message>
451 <Message TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
452 <Issue Name="Type">
453 <Item>conscmd_callback</Item>
454 </Issue>
455 </Message>
456 </Messages>
457 <Members>
458 <Member Name="RunCmd(System.String,System.String[]):System.Void">
459 <Messages>
460 <Message Id="1#cmdparams" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
461 <Issue Name="Parameter">
462 <Item>conscmd_callback.RunCmd(String, String[]):Void</Item>
463 <Item>cmdparams</Item>
464 <Item>cmdparams</Item>
465 </Issue>
466 </Message>
467 </Messages>
468 </Member>
469 <Member Name="Show(System.String):System.Void">
470 <Messages>
471 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
472 <Issue Name="Parameter">
473 <Item>ShowWhat</Item>
474 </Issue>
475 </Message>
476 </Messages>
477 </Member>
478 </Members>
479 </Type>
480 <Type Name="ConsoleBase">
481 <Members>
482 <Member Name="CmdPrompt(System.String,System.String):System.String">
483 <Messages>
484 <Message Id="1#defaultresponse" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
485 <Issue Name="Parameter">
486 <Item>ConsoleBase.CmdPrompt(String, String):String</Item>
487 <Item>defaultresponse</Item>
488 <Item>defaultresponse</Item>
489 </Issue>
490 </Message>
491 </Messages>
492 </Member>
493 <Member Name="CmdPrompt(System.String,System.String,System.String,System.String):System.String">
494 <Messages>
495 <Message Id="2#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
496 <Issue Name="Parameter">
497 <Item>OptionA</Item>
498 </Issue>
499 </Message>
500 <Message Id="3#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
501 <Issue Name="Parameter">
502 <Item>OptionB</Item>
503 </Issue>
504 </Message>
505 <Message Id="1#defaultresponse" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
506 <Issue Name="Parameter">
507 <Item>ConsoleBase.CmdPrompt(String, String, String, String):String</Item>
508 <Item>defaultresponse</Item>
509 <Item>defaultresponse</Item>
510 </Issue>
511 </Message>
512 </Messages>
513 </Member>
514 <Member Name="PasswdPrompt(System.String):System.String">
515 <Messages>
516 <Message Id="Passwd" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
517 <Issue Name="Member">
518 <Item>Passwd</Item>
519 <Item>ConsoleBase.PasswdPrompt(String):String</Item>
520 </Issue>
521 </Message>
522 </Messages>
523 </Member>
524 <Member Name="RunCmd(System.String,System.String[]):System.Object">
525 <Messages>
526 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
527 <Issue Name="Parameter">
528 <Item>Cmd</Item>
529 </Issue>
530 </Message>
531 <Message Id="1#cmdparams" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
532 <Issue Name="Parameter">
533 <Item>ConsoleBase.RunCmd(String, String[]):Object</Item>
534 <Item>cmdparams</Item>
535 <Item>cmdparams</Item>
536 </Issue>
537 </Message>
538 </Messages>
539 </Member>
540 <Member Name="ShowCommands(System.String):System.Void">
541 <Messages>
542 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
543 <Issue Name="Parameter">
544 <Item>ShowWhat</Item>
545 </Issue>
546 </Message>
547 </Messages>
548 </Member>
549 <Member Name="Write(System.String):System.Void">
550 <Messages>
551 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
552 <Issue Name="Parameter">
553 <Item>Line</Item>
554 </Issue>
555 </Message>
556 </Messages>
557 </Member>
558 <Member Name="WriteLine(System.String):System.Void">
559 <Messages>
560 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
561 <Issue Name="Parameter">
562 <Item>Line</Item>
563 </Issue>
564 </Message>
565 </Messages>
566 </Member>
567 </Members>
568 </Type>
569 <Type Name="ConsoleBase+ConsoleType">
570 <Members>
571 <Member Name="SimChat">
572 <Messages>
573 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
574 <Issue Name="Member">
575 <Item>Sim</Item>
576 <Item>ConsoleType.SimChat</Item>
577 </Issue>
578 </Message>
579 </Messages>
580 </Member>
581 <Member Name="TCP">
582 <Messages>
583 <Message Id="Member" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
584 <Issue Name="Member">
585 <Item>ConsoleType.TCP</Item>
586 </Issue>
587 </Message>
588 </Messages>
589 </Member>
590 </Members>
591 </Type>
592 <Type Name="MainConsole">
593 <Messages>
594 <Message TypeName="StaticHolderTypesShouldNotHaveConstructors" Category="Microsoft.Design" CheckId="CA1053" Created="2007-03-27 04:29:04Z">
595 <Issue>
596 <Item>MainConsole</Item>
597 </Issue>
598 </Message>
599 </Messages>
600 </Type>
601 </Types>
602 </Namespace>
603 </Namespaces>
604 </Module>
605 </Modules>
606 </Target>
607 <Target Name="$(ProjectDir)/bin/OpenSim.Config.SimConfigDb4o.dll">
608 <Modules>
609 <Module Name="opensim.config.simconfigdb4o.dll">
610 <Messages>
611 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
612 <Issue>
613 <Item>OpenSim.Config.SimConfigDb4o</Item>
614 </Issue>
615 </Message>
616 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
617 <Issue Name="NoStrongName">
618 <Item>OpenSim.Config.SimConfigDb4o</Item>
619 </Issue>
620 </Message>
621 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
622 <Issue Name="NoAttr">
623 <Item>OpenSim.Config.SimConfigDb4o</Item>
624 </Issue>
625 </Message>
626 </Messages>
627 <Namespaces>
628 <Namespace Name="OpenSim.Config.SimConfigDb4o">
629 <Types>
630 <Type Name="Db40ConfigPlugin">
631 <Messages>
632 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
633 <Issue Name="Type">
634 <Item>Plugin</Item>
635 <Item>OpenSim.Config.SimConfigDb4o.Db40ConfigPlugin</Item>
636 </Issue>
637 </Message>
638 </Messages>
639 </Type>
640 <Type Name="DbSimConfig">
641 <Messages>
642 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
643 <Issue Name="Type">
644 <Item>Sim</Item>
645 <Item>OpenSim.Config.SimConfigDb4o.DbSimConfig</Item>
646 </Issue>
647 </Message>
648 <Message TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
649 <Issue Name="Type">
650 <Item>Db</Item>
651 <Item>OpenSim.Config.SimConfigDb4o.DbSimConfig</Item>
652 </Issue>
653 </Message>
654 </Messages>
655 <Members>
656 <Member Name="InitConfig(System.Boolean):System.Void">
657 <Messages>
658 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
659 <Issue>
660 <Item>DbSimConfig.InitConfig(Boolean):Void</Item>
661 <Item>System.Exception</Item>
662 </Issue>
663 </Message>
664 <Message Id="System.UInt32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
665 <Issue>
666 <Item>DbSimConfig.InitConfig(Boolean):Void</Item>
667 <Item>System.UInt32.ToString</Item>
668 <Item>System.UInt32.ToString(System.IFormatProvider)</Item>
669 </Issue>
670 </Message>
671 <Message Id="System.UInt64.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
672 <Issue>
673 <Item>DbSimConfig.InitConfig(Boolean):Void</Item>
674 <Item>System.UInt64.ToString</Item>
675 <Item>System.UInt64.ToString(System.IFormatProvider)</Item>
676 </Issue>
677 </Message>
678 </Messages>
679 </Member>
680 <Member Name="LoadDefaults():System.Void">
681 <Messages>
682 <Message Id="System.Convert.ToInt32(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
683 <Issue>
684 <Item>DbSimConfig.LoadDefaults():Void</Item>
685 <Item>System.Convert.ToInt32(System.String)</Item>
686 <Item>System.Convert.ToInt32(System.String,System.IFormatProvider)</Item>
687 </Issue>
688 <Issue>
689 <Item>DbSimConfig.LoadDefaults():Void</Item>
690 <Item>System.Convert.ToInt32(System.String)</Item>
691 <Item>System.Convert.ToInt32(System.String,System.IFormatProvider)</Item>
692 </Issue>
693 <Issue>
694 <Item>DbSimConfig.LoadDefaults():Void</Item>
695 <Item>System.Convert.ToInt32(System.String)</Item>
696 <Item>System.Convert.ToInt32(System.String,System.IFormatProvider)</Item>
697 </Issue>
698 </Message>
699 </Messages>
700 </Member>
701 </Members>
702 </Type>
703 <Type Name="MapStorage">
704 <Members>
705 <Member Name="Map">
706 <Messages>
707 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
708 <Issue>
709 <Item>Map</Item>
710 </Issue>
711 </Message>
712 </Messages>
713 </Member>
714 </Members>
715 </Type>
716 </Types>
717 </Namespace>
718 </Namespaces>
719 </Module>
720 </Modules>
721 </Target>
722 <Target Name="$(ProjectDir)/bin/OpenSim.exe">
723 <Modules>
724 <Module Name="opensim.exe">
725 <Messages>
726 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
727 <Issue>
728 <Item>OpenSim</Item>
729 </Issue>
730 </Message>
731 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
732 <Issue Name="NoStrongName">
733 <Item>OpenSim</Item>
734 </Issue>
735 </Message>
736 <Message TypeName="MarkAssembliesWithAssemblyVersion" Category="Microsoft.Design" CheckId="CA1016" Created="2007-03-27 04:29:04Z">
737 <Issue>
738 <Item>OpenSim</Item>
739 </Issue>
740 </Message>
741 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
742 <Issue Name="NoAttr">
743 <Item>OpenSim</Item>
744 </Issue>
745 </Message>
746 <Message TypeName="MarkAssembliesWithComVisible" Category="Microsoft.Design" CheckId="CA1017" Created="2007-03-27 04:29:04Z">
747 <Issue Name="NoAttribute" Level="CriticalError">
748 <Item>OpenSim</Item>
749 </Issue>
750 </Message>
751 </Messages>
752 <Namespaces>
753 <Namespace Name="OpenSim">
754 <Types>
755 <Type Name="RegionServer">
756 <Members>
757 <Member Name="Main(System.String[]):System.Void">
758 <Messages>
759 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
760 <Issue>
761 <Item>'args'</Item>
762 <Item>RegionServer.Main(String[]):Void</Item>
763 </Issue>
764 <Issue>
765 <Item>'args'</Item>
766 <Item>RegionServer.Main(String[]):Void</Item>
767 </Issue>
768 </Message>
769 </Messages>
770 </Member>
771 </Members>
772 </Type>
773 </Types>
774 </Namespace>
775 </Namespaces>
776 </Module>
777 </Modules>
778 </Target>
779 <Target Name="$(ProjectDir)/bin/OpenSim.Framework.Console.dll">
780 <Modules>
781 <Module Name="opensim.framework.console.dll">
782 <Messages>
783 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
784 <Issue>
785 <Item>OpenSim.Framework.Console</Item>
786 </Issue>
787 </Message>
788 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
789 <Issue Name="NoStrongName">
790 <Item>OpenSim.Framework.Console</Item>
791 </Issue>
792 </Message>
793 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
794 <Issue Name="NoAttr">
795 <Item>OpenSim.Framework.Console</Item>
796 </Issue>
797 </Message>
798 </Messages>
799 <Namespaces>
800 <Namespace Name="OpenSim.Framework.Console">
801 <Types>
802 <Type Name="ConsoleBase">
803 <Members>
804 <Member Name="CmdPrompt(System.String,System.String):System.String">
805 <Messages>
806 <Message Id="1#defaultresponse" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
807 <Issue Name="Parameter">
808 <Item>ConsoleBase.CmdPrompt(String, String):String</Item>
809 <Item>defaultresponse</Item>
810 <Item>defaultresponse</Item>
811 </Issue>
812 </Message>
813 </Messages>
814 </Member>
815 <Member Name="CmdPrompt(System.String,System.String,System.String,System.String):System.String">
816 <Messages>
817 <Message Id="2#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
818 <Issue Name="Parameter">
819 <Item>OptionA</Item>
820 </Issue>
821 </Message>
822 <Message Id="3#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
823 <Issue Name="Parameter">
824 <Item>OptionB</Item>
825 </Issue>
826 </Message>
827 <Message Id="1#defaultresponse" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
828 <Issue Name="Parameter">
829 <Item>ConsoleBase.CmdPrompt(String, String, String, String):String</Item>
830 <Item>defaultresponse</Item>
831 <Item>defaultresponse</Item>
832 </Issue>
833 </Message>
834 </Messages>
835 </Member>
836 <Member Name="RunCmd(System.String,System.String[]):System.Object">
837 <Messages>
838 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
839 <Issue Name="Parameter">
840 <Item>Cmd</Item>
841 </Issue>
842 </Message>
843 <Message Id="1#cmdparams" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
844 <Issue Name="Parameter">
845 <Item>ConsoleBase.RunCmd(String, String[]):Object</Item>
846 <Item>cmdparams</Item>
847 <Item>cmdparams</Item>
848 </Issue>
849 </Message>
850 </Messages>
851 </Member>
852 <Member Name="ShowCommands(System.String):System.Void">
853 <Messages>
854 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
855 <Issue Name="Parameter">
856 <Item>ShowWhat</Item>
857 </Issue>
858 </Message>
859 </Messages>
860 </Member>
861 </Members>
862 </Type>
863 <Type Name="ConsoleBase+ConsoleType">
864 <Members>
865 <Member Name="SimChat">
866 <Messages>
867 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
868 <Issue Name="Member">
869 <Item>Sim</Item>
870 <Item>ConsoleType.SimChat</Item>
871 </Issue>
872 </Message>
873 </Messages>
874 </Member>
875 <Member Name="TCP">
876 <Messages>
877 <Message Id="Member" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
878 <Issue Name="Member">
879 <Item>ConsoleType.TCP</Item>
880 </Issue>
881 </Message>
882 </Messages>
883 </Member>
884 </Members>
885 </Type>
886 <Type Name="MainConsole">
887 <Messages>
888 <Message TypeName="StaticHolderTypesShouldNotHaveConstructors" Category="Microsoft.Design" CheckId="CA1053" Created="2007-03-27 04:29:04Z">
889 <Issue>
890 <Item>MainConsole</Item>
891 </Issue>
892 </Message>
893 </Messages>
894 </Type>
895 </Types>
896 </Namespace>
897 </Namespaces>
898 </Module>
899 </Modules>
900 </Target>
901 <Target Name="$(ProjectDir)/bin/OpenSim.Framework.dll">
902 <Modules>
903 <Module Name="opensim.framework.dll">
904 <Messages>
905 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
906 <Issue>
907 <Item>OpenSim.Framework</Item>
908 </Issue>
909 </Message>
910 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
911 <Issue Name="NoStrongName">
912 <Item>OpenSim.Framework</Item>
913 </Issue>
914 </Message>
915 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
916 <Issue Name="NoAttr">
917 <Item>OpenSim.Framework</Item>
918 </Issue>
919 </Message>
920 </Messages>
921 <Namespaces>
922 <Namespace Name="OpenSim.Framework.Assets">
923 <Types>
924 <Type Name="AssetBase">
925 <Members>
926 <Member Name="Data">
927 <Messages>
928 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
929 <Issue>
930 <Item>Data</Item>
931 </Issue>
932 </Message>
933 </Messages>
934 </Member>
935 <Member Name="Description">
936 <Messages>
937 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
938 <Issue>
939 <Item>Description</Item>
940 </Issue>
941 </Message>
942 </Messages>
943 </Member>
944 <Member Name="FullID">
945 <Messages>
946 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
947 <Issue>
948 <Item>FullID</Item>
949 </Issue>
950 </Message>
951 </Messages>
952 </Member>
953 <Member Name="InvType">
954 <Messages>
955 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
956 <Issue>
957 <Item>InvType</Item>
958 </Issue>
959 </Message>
960 </Messages>
961 </Member>
962 <Member Name="Name">
963 <Messages>
964 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
965 <Issue>
966 <Item>Name</Item>
967 </Issue>
968 </Message>
969 </Messages>
970 </Member>
971 <Member Name="Type">
972 <Messages>
973 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
974 <Issue>
975 <Item>Type</Item>
976 </Issue>
977 </Message>
978 </Messages>
979 </Member>
980 </Members>
981 </Type>
982 <Type Name="PrimData">
983 <Members>
984 <Member Name=".ctor()">
985 <Messages>
986 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
987 <Issue>
988 <Item>PrimData.PrimData()</Item>
989 <Item>ParentID</Item>
990 <Item>System.UInt32</Item>
991 <Item>0</Item>
992 </Issue>
993 </Message>
994 </Messages>
995 </Member>
996 <Member Name="FullID">
997 <Messages>
998 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
999 <Issue>
1000 <Item>FullID</Item>
1001 </Issue>
1002 </Message>
1003 </Messages>
1004 </Member>
1005 <Member Name="LocalID">
1006 <Messages>
1007 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1008 <Issue>
1009 <Item>LocalID</Item>
1010 </Issue>
1011 </Message>
1012 </Messages>
1013 </Member>
1014 <Member Name="OwnerID">
1015 <Messages>
1016 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1017 <Issue>
1018 <Item>OwnerID</Item>
1019 </Issue>
1020 </Message>
1021 </Messages>
1022 </Member>
1023 <Member Name="ParentID">
1024 <Messages>
1025 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1026 <Issue>
1027 <Item>ParentID</Item>
1028 </Issue>
1029 </Message>
1030 </Messages>
1031 </Member>
1032 <Member Name="PathBegin">
1033 <Messages>
1034 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1035 <Issue>
1036 <Item>PathBegin</Item>
1037 </Issue>
1038 </Message>
1039 </Messages>
1040 </Member>
1041 <Member Name="PathCurve">
1042 <Messages>
1043 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1044 <Issue>
1045 <Item>PathCurve</Item>
1046 </Issue>
1047 </Message>
1048 </Messages>
1049 </Member>
1050 <Member Name="PathEnd">
1051 <Messages>
1052 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1053 <Issue>
1054 <Item>PathEnd</Item>
1055 </Issue>
1056 </Message>
1057 </Messages>
1058 </Member>
1059 <Member Name="PathRadiusOffset">
1060 <Messages>
1061 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1062 <Issue>
1063 <Item>PathRadiusOffset</Item>
1064 </Issue>
1065 </Message>
1066 </Messages>
1067 </Member>
1068 <Member Name="PathRevolutions">
1069 <Messages>
1070 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1071 <Issue>
1072 <Item>PathRevolutions</Item>
1073 </Issue>
1074 </Message>
1075 </Messages>
1076 </Member>
1077 <Member Name="PathScaleX">
1078 <Messages>
1079 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1080 <Issue>
1081 <Item>PathScaleX</Item>
1082 </Issue>
1083 </Message>
1084 </Messages>
1085 </Member>
1086 <Member Name="PathScaleY">
1087 <Messages>
1088 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1089 <Issue>
1090 <Item>PathScaleY</Item>
1091 </Issue>
1092 </Message>
1093 </Messages>
1094 </Member>
1095 <Member Name="PathShearX">
1096 <Messages>
1097 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1098 <Issue>
1099 <Item>PathShearX</Item>
1100 </Issue>
1101 </Message>
1102 </Messages>
1103 </Member>
1104 <Member Name="PathShearY">
1105 <Messages>
1106 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1107 <Issue>
1108 <Item>PathShearY</Item>
1109 </Issue>
1110 </Message>
1111 </Messages>
1112 </Member>
1113 <Member Name="PathSkew">
1114 <Messages>
1115 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1116 <Issue>
1117 <Item>PathSkew</Item>
1118 </Issue>
1119 </Message>
1120 </Messages>
1121 </Member>
1122 <Member Name="PathTaperX">
1123 <Messages>
1124 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1125 <Issue>
1126 <Item>PathTaperX</Item>
1127 </Issue>
1128 </Message>
1129 </Messages>
1130 </Member>
1131 <Member Name="PathTaperY">
1132 <Messages>
1133 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1134 <Issue>
1135 <Item>PathTaperY</Item>
1136 </Issue>
1137 </Message>
1138 </Messages>
1139 </Member>
1140 <Member Name="PathTwist">
1141 <Messages>
1142 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1143 <Issue>
1144 <Item>PathTwist</Item>
1145 </Issue>
1146 </Message>
1147 </Messages>
1148 </Member>
1149 <Member Name="PathTwistBegin">
1150 <Messages>
1151 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1152 <Issue>
1153 <Item>PathTwistBegin</Item>
1154 </Issue>
1155 </Message>
1156 </Messages>
1157 </Member>
1158 <Member Name="PCode">
1159 <Messages>
1160 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1161 <Issue>
1162 <Item>PCode</Item>
1163 </Issue>
1164 </Message>
1165 </Messages>
1166 </Member>
1167 <Member Name="Position">
1168 <Messages>
1169 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1170 <Issue>
1171 <Item>Position</Item>
1172 </Issue>
1173 </Message>
1174 </Messages>
1175 </Member>
1176 <Member Name="ProfileBegin">
1177 <Messages>
1178 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1179 <Issue>
1180 <Item>ProfileBegin</Item>
1181 </Issue>
1182 </Message>
1183 </Messages>
1184 </Member>
1185 <Member Name="ProfileCurve">
1186 <Messages>
1187 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1188 <Issue>
1189 <Item>ProfileCurve</Item>
1190 </Issue>
1191 </Message>
1192 </Messages>
1193 </Member>
1194 <Member Name="ProfileEnd">
1195 <Messages>
1196 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1197 <Issue>
1198 <Item>ProfileEnd</Item>
1199 </Issue>
1200 </Message>
1201 </Messages>
1202 </Member>
1203 <Member Name="ProfileHollow">
1204 <Messages>
1205 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1206 <Issue>
1207 <Item>ProfileHollow</Item>
1208 </Issue>
1209 </Message>
1210 </Messages>
1211 </Member>
1212 <Member Name="Rotation">
1213 <Messages>
1214 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1215 <Issue>
1216 <Item>Rotation</Item>
1217 </Issue>
1218 </Message>
1219 </Messages>
1220 </Member>
1221 <Member Name="Scale">
1222 <Messages>
1223 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1224 <Issue>
1225 <Item>Scale</Item>
1226 </Issue>
1227 </Message>
1228 </Messages>
1229 </Member>
1230 <Member Name="Texture">
1231 <Messages>
1232 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1233 <Issue>
1234 <Item>Texture</Item>
1235 </Issue>
1236 </Message>
1237 </Messages>
1238 </Member>
1239 </Members>
1240 </Type>
1241 </Types>
1242 </Namespace>
1243 <Namespace Name="OpenSim.Framework.Grid">
1244 <Types>
1245 <Type Name="LoginService">
1246 <Messages>
1247 <Message Id="Login" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
1248 <Issue Name="Type">
1249 <Item>Login</Item>
1250 <Item>LoginService</Item>
1251 <Item>LogOn</Item>
1252 </Issue>
1253 </Message>
1254 </Messages>
1255 </Type>
1256 </Types>
1257 </Namespace>
1258 <Namespace Name="OpenSim.Framework.Interfaces">
1259 <Types>
1260 <Type Name="AgentCircuitData">
1261 <Members>
1262 <Member Name="AgentID">
1263 <Messages>
1264 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1265 <Issue>
1266 <Item>AgentID</Item>
1267 </Issue>
1268 </Message>
1269 </Messages>
1270 </Member>
1271 <Member Name="circuitcode">
1272 <Messages>
1273 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1274 <Issue>
1275 <Item>circuitcode</Item>
1276 </Issue>
1277 </Message>
1278 <Message Id="circuitcode" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1279 <Issue Name="Member">
1280 <Item>circuitcode</Item>
1281 <Item>AgentCircuitData.circuitcode</Item>
1282 </Issue>
1283 </Message>
1284 </Messages>
1285 </Member>
1286 <Member Name="firstname">
1287 <Messages>
1288 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1289 <Issue>
1290 <Item>firstname</Item>
1291 </Issue>
1292 </Message>
1293 <Message Id="firstname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1294 <Issue Name="Member">
1295 <Item>firstname</Item>
1296 <Item>AgentCircuitData.firstname</Item>
1297 </Issue>
1298 </Message>
1299 </Messages>
1300 </Member>
1301 <Member Name="lastname">
1302 <Messages>
1303 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1304 <Issue>
1305 <Item>lastname</Item>
1306 </Issue>
1307 </Message>
1308 <Message Id="lastname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1309 <Issue Name="Member">
1310 <Item>lastname</Item>
1311 <Item>AgentCircuitData.lastname</Item>
1312 </Issue>
1313 </Message>
1314 </Messages>
1315 </Member>
1316 <Member Name="SecureSessionID">
1317 <Messages>
1318 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1319 <Issue>
1320 <Item>SecureSessionID</Item>
1321 </Issue>
1322 </Message>
1323 </Messages>
1324 </Member>
1325 <Member Name="SessionID">
1326 <Messages>
1327 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1328 <Issue>
1329 <Item>SessionID</Item>
1330 </Issue>
1331 </Message>
1332 </Messages>
1333 </Member>
1334 </Members>
1335 </Type>
1336 <Type Name="ARequest">
1337 <Messages>
1338 <Message TypeName="OverrideEqualsAndOperatorEqualsOnValueTypes" Category="Microsoft.Performance" CheckId="CA1815" Created="2007-03-27 04:29:04Z">
1339 <Issue Name="Equals">
1340 <Item>OpenSim.Framework.Interfaces.ARequest</Item>
1341 </Issue>
1342 <Issue Name="op_Equality">
1343 <Item>OpenSim.Framework.Interfaces.ARequest</Item>
1344 </Issue>
1345 </Message>
1346 </Messages>
1347 <Members>
1348 <Member Name="AssetID">
1349 <Messages>
1350 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1351 <Issue>
1352 <Item>AssetID</Item>
1353 </Issue>
1354 </Message>
1355 </Messages>
1356 </Member>
1357 <Member Name="IsTexture">
1358 <Messages>
1359 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1360 <Issue>
1361 <Item>IsTexture</Item>
1362 </Issue>
1363 </Message>
1364 </Messages>
1365 </Member>
1366 </Members>
1367 </Type>
1368 <Type Name="AuthenticateResponse">
1369 <Members>
1370 <Member Name="Authorised">
1371 <Messages>
1372 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1373 <Issue>
1374 <Item>Authorised</Item>
1375 </Issue>
1376 </Message>
1377 <Message Id="Authorised" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1378 <Issue Name="Member">
1379 <Item>Authorised</Item>
1380 <Item>AuthenticateResponse.Authorised</Item>
1381 </Issue>
1382 </Message>
1383 </Messages>
1384 </Member>
1385 <Member Name="LoginInfo">
1386 <Messages>
1387 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1388 <Issue>
1389 <Item>LoginInfo</Item>
1390 </Issue>
1391 </Message>
1392 <Message Id="Login" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
1393 <Issue Name="Member">
1394 <Item>Login</Item>
1395 <Item>LoginInfo</Item>
1396 <Item>LogOn</Item>
1397 </Issue>
1398 </Message>
1399 </Messages>
1400 </Member>
1401 </Members>
1402 </Type>
1403 <Type Name="IAssetPlugin">
1404 <Messages>
1405 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1406 <Issue Name="Type">
1407 <Item>Plugin</Item>
1408 <Item>OpenSim.Framework.Interfaces.IAssetPlugin</Item>
1409 </Issue>
1410 </Message>
1411 </Messages>
1412 <Members>
1413 <Member Name="GetAssetServer():OpenSim.Framework.Interfaces.IAssetServer">
1414 <Messages>
1415 <Message TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024" Created="2007-03-27 04:29:04Z">
1416 <Issue Certainty="50">
1417 <Item>GetAssetServer</Item>
1418 </Issue>
1419 </Message>
1420 </Messages>
1421 </Member>
1422 </Members>
1423 </Type>
1424 <Type Name="IAssetReceiver">
1425 <Members>
1426 <Member Name="AssetReceived(OpenSim.Framework.Assets.AssetBase,System.Boolean):System.Void">
1427 <Messages>
1428 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1429 <Issue Name="Parameter">
1430 <Item>IsTexture</Item>
1431 </Issue>
1432 </Message>
1433 </Messages>
1434 </Member>
1435 </Members>
1436 </Type>
1437 <Type Name="IAssetServer">
1438 <Members>
1439 <Member Name="RequestAsset(libsecondlife.LLUUID,System.Boolean):System.Void">
1440 <Messages>
1441 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
1442 <Issue Name="ParameterId">
1443 <Item>ID</Item>
1444 <Item>assetID</Item>
1445 <Item>Id</Item>
1446 </Issue>
1447 </Message>
1448 </Messages>
1449 </Member>
1450 <Member Name="SetServerInfo(System.String,System.String):System.Void">
1451 <Messages>
1452 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1453 <Issue Name="Parameter">
1454 <Item>ServerUrl</Item>
1455 </Issue>
1456 </Message>
1457 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1458 <Issue Name="Parameter">
1459 <Item>ServerKey</Item>
1460 </Issue>
1461 </Message>
1462 <Message Id="0#" TypeName="UriParametersShouldNotBeStrings" Category="Microsoft.Design" CheckId="CA1054" Created="2007-03-27 04:29:04Z">
1463 <Issue>
1464 <Item>ServerUrl</Item>
1465 <Item>IAssetServer.SetServerInfo(String, String):Void</Item>
1466 </Issue>
1467 </Message>
1468 </Messages>
1469 </Member>
1470 </Members>
1471 </Type>
1472 <Type Name="IGridPlugin">
1473 <Messages>
1474 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1475 <Issue Name="Type">
1476 <Item>Plugin</Item>
1477 <Item>OpenSim.Framework.Interfaces.IGridPlugin</Item>
1478 </Issue>
1479 </Message>
1480 </Messages>
1481 <Members>
1482 <Member Name="GetGridServer():OpenSim.Framework.Interfaces.IGridServer">
1483 <Messages>
1484 <Message TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024" Created="2007-03-27 04:29:04Z">
1485 <Issue Certainty="50">
1486 <Item>GetGridServer</Item>
1487 </Issue>
1488 </Message>
1489 </Messages>
1490 </Member>
1491 </Members>
1492 </Type>
1493 <Type Name="IGridServer">
1494 <Members>
1495 <Member Name="AuthenticateSession(libsecondlife.LLUUID,libsecondlife.LLUUID,System.UInt32):OpenSim.Framework.Interfaces.AuthenticateResponse">
1496 <Messages>
1497 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
1498 <Issue Name="ParameterId">
1499 <Item>ID</Item>
1500 <Item>sessionID</Item>
1501 <Item>Id</Item>
1502 </Issue>
1503 </Message>
1504 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
1505 <Issue Name="ParameterId">
1506 <Item>ID</Item>
1507 <Item>agentID</Item>
1508 <Item>Id</Item>
1509 </Issue>
1510 </Message>
1511 </Messages>
1512 </Member>
1513 <Member Name="GetName():System.String">
1514 <Messages>
1515 <Message TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024" Created="2007-03-27 04:29:04Z">
1516 <Issue Certainty="50">
1517 <Item>GetName</Item>
1518 </Issue>
1519 </Message>
1520 </Messages>
1521 </Member>
1522 <Member Name="LogoutSession(libsecondlife.LLUUID,libsecondlife.LLUUID,System.UInt32):System.Boolean">
1523 <Messages>
1524 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
1525 <Issue Name="ParameterId">
1526 <Item>ID</Item>
1527 <Item>sessionID</Item>
1528 <Item>Id</Item>
1529 </Issue>
1530 </Message>
1531 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
1532 <Issue Name="ParameterId">
1533 <Item>ID</Item>
1534 <Item>agentID</Item>
1535 <Item>Id</Item>
1536 </Issue>
1537 </Message>
1538 <Message Id="Logout" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
1539 <Issue Name="Member">
1540 <Item>Logout</Item>
1541 <Item>LogoutSession</Item>
1542 <Item>LogOff</Item>
1543 </Issue>
1544 </Message>
1545 </Messages>
1546 </Member>
1547 <Member Name="RequestNeighbours():OpenSim.Framework.Interfaces.NeighbourInfo[]">
1548 <Messages>
1549 <Message Id="Neighbours" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1550 <Issue Name="Member">
1551 <Item>Neighbours</Item>
1552 <Item>IGridServer.RequestNeighbours():NeighbourInfo[]</Item>
1553 </Issue>
1554 </Message>
1555 </Messages>
1556 </Member>
1557 <Member Name="RequestUUIDBlock():OpenSim.Framework.Interfaces.UUIDBlock">
1558 <Messages>
1559 <Message Id="Member" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
1560 <Issue Name="Member">
1561 <Item>IGridServer.RequestUUIDBlock():UUIDBlock</Item>
1562 </Issue>
1563 </Message>
1564 </Messages>
1565 </Member>
1566 <Member Name="SetServerInfo(System.String,System.String,System.String):System.Void">
1567 <Messages>
1568 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1569 <Issue Name="Parameter">
1570 <Item>ServerUrl</Item>
1571 </Issue>
1572 </Message>
1573 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1574 <Issue Name="Parameter">
1575 <Item>SendKey</Item>
1576 </Issue>
1577 </Message>
1578 <Message Id="2#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1579 <Issue Name="Parameter">
1580 <Item>RecvKey</Item>
1581 </Issue>
1582 </Message>
1583 <Message Id="2#Recv" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1584 <Issue Name="Parameter">
1585 <Item>IGridServer.SetServerInfo(String, String, String):Void</Item>
1586 <Item>Recv</Item>
1587 <Item>RecvKey</Item>
1588 </Issue>
1589 </Message>
1590 <Message Id="0#" TypeName="UriParametersShouldNotBeStrings" Category="Microsoft.Design" CheckId="CA1054" Created="2007-03-27 04:29:04Z">
1591 <Issue>
1592 <Item>ServerUrl</Item>
1593 <Item>IGridServer.SetServerInfo(String, String, String):Void</Item>
1594 </Issue>
1595 </Message>
1596 </Messages>
1597 </Member>
1598 </Members>
1599 </Type>
1600 <Type Name="ILocalStorage">
1601 <Members>
1602 <Member Name="RemovePrim(libsecondlife.LLUUID):System.Void">
1603 <Messages>
1604 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
1605 <Issue Name="ParameterId">
1606 <Item>ID</Item>
1607 <Item>primID</Item>
1608 <Item>Id</Item>
1609 </Issue>
1610 </Message>
1611 </Messages>
1612 </Member>
1613 <Member Name="ShutDown():System.Void">
1614 <Messages>
1615 <Message Id="ShutDown" TypeName="CompoundWordsShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1702" Created="2007-03-27 04:29:04Z">
1616 <Issue Name="ShouldBeDiscreteTerm">
1617 <Item>ShutDown</Item>
1618 <Item>method</Item>
1619 <Item>ShutDown</Item>
1620 <Item>Shutdown</Item>
1621 </Issue>
1622 </Message>
1623 </Messages>
1624 </Member>
1625 </Members>
1626 </Type>
1627 <Type Name="ISimConfig">
1628 <Messages>
1629 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1630 <Issue Name="Type">
1631 <Item>Sim</Item>
1632 <Item>OpenSim.Framework.Interfaces.ISimConfig</Item>
1633 </Issue>
1634 </Message>
1635 </Messages>
1636 <Members>
1637 <Member Name="GetConfigObject():OpenSim.Framework.Interfaces.SimConfig">
1638 <Messages>
1639 <Message TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024" Created="2007-03-27 04:29:04Z">
1640 <Issue Certainty="50">
1641 <Item>GetConfigObject</Item>
1642 </Issue>
1643 </Message>
1644 </Messages>
1645 </Member>
1646 </Members>
1647 </Type>
1648 <Type Name="IUserServer">
1649 <Members>
1650 <Member Name="RequestAgentsInventory(libsecondlife.LLUUID):OpenSim.Framework.Inventory.AgentInventory">
1651 <Messages>
1652 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
1653 <Issue Name="ParameterId">
1654 <Item>ID</Item>
1655 <Item>agentID</Item>
1656 <Item>Id</Item>
1657 </Issue>
1658 </Message>
1659 </Messages>
1660 </Member>
1661 <Member Name="SetServerInfo(System.String,System.String,System.String):System.Void">
1662 <Messages>
1663 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1664 <Issue Name="Parameter">
1665 <Item>ServerUrl</Item>
1666 </Issue>
1667 </Message>
1668 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1669 <Issue Name="Parameter">
1670 <Item>SendKey</Item>
1671 </Issue>
1672 </Message>
1673 <Message Id="2#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1674 <Issue Name="Parameter">
1675 <Item>RecvKey</Item>
1676 </Issue>
1677 </Message>
1678 <Message Id="2#Recv" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1679 <Issue Name="Parameter">
1680 <Item>IUserServer.SetServerInfo(String, String, String):Void</Item>
1681 <Item>Recv</Item>
1682 <Item>RecvKey</Item>
1683 </Issue>
1684 </Message>
1685 <Message Id="0#" TypeName="UriParametersShouldNotBeStrings" Category="Microsoft.Design" CheckId="CA1054" Created="2007-03-27 04:29:04Z">
1686 <Issue>
1687 <Item>ServerUrl</Item>
1688 <Item>IUserServer.SetServerInfo(String, String, String):Void</Item>
1689 </Issue>
1690 </Message>
1691 </Messages>
1692 </Member>
1693 </Members>
1694 </Type>
1695 <Type Name="LocalGridBase">
1696 <Members>
1697 <Member Name="LogoutSession(libsecondlife.LLUUID,libsecondlife.LLUUID,System.UInt32):System.Boolean">
1698 <Messages>
1699 <Message Id="Logout" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
1700 <Issue Name="Member">
1701 <Item>Logout</Item>
1702 <Item>LogoutSession</Item>
1703 <Item>LogOff</Item>
1704 </Issue>
1705 </Message>
1706 </Messages>
1707 </Member>
1708 </Members>
1709 </Type>
1710 <Type Name="Login">
1711 <Messages>
1712 <Message Id="Login" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
1713 <Issue Name="Type">
1714 <Item>Login</Item>
1715 <Item>Login</Item>
1716 <Item>LogOn</Item>
1717 </Issue>
1718 </Message>
1719 </Messages>
1720 <Members>
1721 <Member Name="Agent">
1722 <Messages>
1723 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1724 <Issue>
1725 <Item>Agent</Item>
1726 </Issue>
1727 </Message>
1728 </Messages>
1729 </Member>
1730 <Member Name="BaseFolder">
1731 <Messages>
1732 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1733 <Issue>
1734 <Item>BaseFolder</Item>
1735 </Issue>
1736 </Message>
1737 </Messages>
1738 </Member>
1739 <Member Name="First">
1740 <Messages>
1741 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1742 <Issue>
1743 <Item>First</Item>
1744 </Issue>
1745 </Message>
1746 </Messages>
1747 </Member>
1748 <Member Name="InventoryFolder">
1749 <Messages>
1750 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1751 <Issue>
1752 <Item>InventoryFolder</Item>
1753 </Issue>
1754 </Message>
1755 </Messages>
1756 </Member>
1757 <Member Name="Last">
1758 <Messages>
1759 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1760 <Issue>
1761 <Item>Last</Item>
1762 </Issue>
1763 </Message>
1764 </Messages>
1765 </Member>
1766 <Member Name="SecureSession">
1767 <Messages>
1768 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1769 <Issue>
1770 <Item>SecureSession</Item>
1771 </Issue>
1772 </Message>
1773 </Messages>
1774 </Member>
1775 <Member Name="Session">
1776 <Messages>
1777 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1778 <Issue>
1779 <Item>Session</Item>
1780 </Issue>
1781 </Message>
1782 </Messages>
1783 </Member>
1784 </Members>
1785 </Type>
1786 <Type Name="NeighbourInfo">
1787 <Messages>
1788 <Message Id="Neighbour" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1789 <Issue Name="Type">
1790 <Item>Neighbour</Item>
1791 <Item>OpenSim.Framework.Interfaces.NeighbourInfo</Item>
1792 </Issue>
1793 </Message>
1794 </Messages>
1795 <Members>
1796 <Member Name="regionhandle">
1797 <Messages>
1798 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1799 <Issue>
1800 <Item>regionhandle</Item>
1801 </Issue>
1802 </Message>
1803 <Message Id="regionhandle" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1804 <Issue Name="Member">
1805 <Item>regionhandle</Item>
1806 <Item>NeighbourInfo.regionhandle</Item>
1807 </Issue>
1808 </Message>
1809 </Messages>
1810 </Member>
1811 <Member Name="RegionLocX">
1812 <Messages>
1813 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1814 <Issue>
1815 <Item>RegionLocX</Item>
1816 </Issue>
1817 </Message>
1818 </Messages>
1819 </Member>
1820 <Member Name="RegionLocY">
1821 <Messages>
1822 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1823 <Issue>
1824 <Item>RegionLocY</Item>
1825 </Issue>
1826 </Message>
1827 </Messages>
1828 </Member>
1829 <Member Name="sim_ip">
1830 <Messages>
1831 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1832 <Issue>
1833 <Item>sim_ip</Item>
1834 </Issue>
1835 </Message>
1836 <Message Id="sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1837 <Issue Name="Member">
1838 <Item>sim</Item>
1839 <Item>NeighbourInfo.sim_ip</Item>
1840 </Issue>
1841 </Message>
1842 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
1843 <Issue Name="Member">
1844 <Item>sim_ip</Item>
1845 </Issue>
1846 </Message>
1847 </Messages>
1848 </Member>
1849 <Member Name="sim_port">
1850 <Messages>
1851 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1852 <Issue>
1853 <Item>sim_port</Item>
1854 </Issue>
1855 </Message>
1856 <Message Id="sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1857 <Issue Name="Member">
1858 <Item>sim</Item>
1859 <Item>NeighbourInfo.sim_port</Item>
1860 </Issue>
1861 </Message>
1862 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
1863 <Issue Name="Member">
1864 <Item>sim_port</Item>
1865 </Issue>
1866 </Message>
1867 </Messages>
1868 </Member>
1869 </Members>
1870 </Type>
1871 <Type Name="RemoteGridBase">
1872 <Members>
1873 <Member Name="agentcircuits">
1874 <Messages>
1875 <Message TypeName="CollectionPropertiesShouldBeReadOnly" Category="Microsoft.Usage" CheckId="CA2227" Created="2007-03-27 04:29:04Z">
1876 <Issue>
1877 <Item>agentcircuits</Item>
1878 </Issue>
1879 </Message>
1880 <Message Id="Member" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
1881 <Issue Name="Member">
1882 <Item>agentcircuits</Item>
1883 </Issue>
1884 </Message>
1885 <Message Id="agentcircuits" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1886 <Issue Name="Member">
1887 <Item>agentcircuits</Item>
1888 <Item>RemoteGridBase.agentcircuits:Dictionary`2&lt;System.UInt32,OpenSim.Framework.Interfaces.AgentCircuitData&gt;</Item>
1889 </Issue>
1890 </Message>
1891 </Messages>
1892 </Member>
1893 <Member Name="LogoutSession(libsecondlife.LLUUID,libsecondlife.LLUUID,System.UInt32):System.Boolean">
1894 <Messages>
1895 <Message Id="Logout" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
1896 <Issue Name="Member">
1897 <Item>Logout</Item>
1898 <Item>LogoutSession</Item>
1899 <Item>LogOff</Item>
1900 </Issue>
1901 </Message>
1902 </Messages>
1903 </Member>
1904 </Members>
1905 </Type>
1906 <Type Name="SimConfig">
1907 <Messages>
1908 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1909 <Issue Name="Type">
1910 <Item>Sim</Item>
1911 <Item>OpenSim.Framework.Interfaces.SimConfig</Item>
1912 </Issue>
1913 </Message>
1914 </Messages>
1915 <Members>
1916 <Member Name="AssetSendKey">
1917 <Messages>
1918 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1919 <Issue>
1920 <Item>AssetSendKey</Item>
1921 </Issue>
1922 </Message>
1923 </Messages>
1924 </Member>
1925 <Member Name="AssetURL">
1926 <Messages>
1927 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1928 <Issue>
1929 <Item>AssetURL</Item>
1930 </Issue>
1931 </Message>
1932 </Messages>
1933 </Member>
1934 <Member Name="GridRecvKey">
1935 <Messages>
1936 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1937 <Issue>
1938 <Item>GridRecvKey</Item>
1939 </Issue>
1940 </Message>
1941 <Message Id="Recv" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1942 <Issue Name="Member">
1943 <Item>Recv</Item>
1944 <Item>SimConfig.GridRecvKey</Item>
1945 </Issue>
1946 </Message>
1947 </Messages>
1948 </Member>
1949 <Member Name="GridSendKey">
1950 <Messages>
1951 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1952 <Issue>
1953 <Item>GridSendKey</Item>
1954 </Issue>
1955 </Message>
1956 </Messages>
1957 </Member>
1958 <Member Name="GridURL">
1959 <Messages>
1960 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1961 <Issue>
1962 <Item>GridURL</Item>
1963 </Issue>
1964 </Message>
1965 </Messages>
1966 </Member>
1967 <Member Name="IPListenAddr">
1968 <Messages>
1969 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1970 <Issue>
1971 <Item>IPListenAddr</Item>
1972 </Issue>
1973 </Message>
1974 <Message Id="Addr" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
1975 <Issue Name="Member">
1976 <Item>Addr</Item>
1977 <Item>SimConfig.IPListenAddr</Item>
1978 </Issue>
1979 </Message>
1980 </Messages>
1981 </Member>
1982 <Member Name="IPListenPort">
1983 <Messages>
1984 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1985 <Issue>
1986 <Item>IPListenPort</Item>
1987 </Issue>
1988 </Message>
1989 </Messages>
1990 </Member>
1991 <Member Name="RegionHandle">
1992 <Messages>
1993 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
1994 <Issue>
1995 <Item>RegionHandle</Item>
1996 </Issue>
1997 </Message>
1998 </Messages>
1999 </Member>
2000 <Member Name="RegionLocX">
2001 <Messages>
2002 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2003 <Issue>
2004 <Item>RegionLocX</Item>
2005 </Issue>
2006 </Message>
2007 </Messages>
2008 </Member>
2009 <Member Name="RegionLocY">
2010 <Messages>
2011 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2012 <Issue>
2013 <Item>RegionLocY</Item>
2014 </Issue>
2015 </Message>
2016 </Messages>
2017 </Member>
2018 <Member Name="RegionName">
2019 <Messages>
2020 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2021 <Issue>
2022 <Item>RegionName</Item>
2023 </Issue>
2024 </Message>
2025 </Messages>
2026 </Member>
2027 <Member Name="SaveMap(System.Single[]):System.Void">
2028 <Messages>
2029 <Message Id="0#heightmap" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2030 <Issue Name="Parameter">
2031 <Item>SimConfig.SaveMap(Single[]):Void</Item>
2032 <Item>heightmap</Item>
2033 <Item>heightmap</Item>
2034 </Issue>
2035 </Message>
2036 </Messages>
2037 </Member>
2038 <Member Name="UserRecvKey">
2039 <Messages>
2040 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2041 <Issue>
2042 <Item>UserRecvKey</Item>
2043 </Issue>
2044 </Message>
2045 <Message Id="Recv" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2046 <Issue Name="Member">
2047 <Item>Recv</Item>
2048 <Item>SimConfig.UserRecvKey</Item>
2049 </Issue>
2050 </Message>
2051 </Messages>
2052 </Member>
2053 <Member Name="UserSendKey">
2054 <Messages>
2055 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2056 <Issue>
2057 <Item>UserSendKey</Item>
2058 </Issue>
2059 </Message>
2060 </Messages>
2061 </Member>
2062 <Member Name="UserURL">
2063 <Messages>
2064 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2065 <Issue>
2066 <Item>UserURL</Item>
2067 </Issue>
2068 </Message>
2069 </Messages>
2070 </Member>
2071 </Members>
2072 </Type>
2073 <Type Name="UUIDBlock">
2074 <Messages>
2075 <Message TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
2076 <Issue Name="Type">
2077 <Item>UUIDBlock</Item>
2078 </Issue>
2079 </Message>
2080 <Message TypeName="OverrideEqualsAndOperatorEqualsOnValueTypes" Category="Microsoft.Performance" CheckId="CA1815" Created="2007-03-27 04:29:04Z">
2081 <Issue Name="Equals">
2082 <Item>OpenSim.Framework.Interfaces.UUIDBlock</Item>
2083 </Issue>
2084 <Issue Name="op_Equality">
2085 <Item>OpenSim.Framework.Interfaces.UUIDBlock</Item>
2086 </Issue>
2087 </Message>
2088 </Messages>
2089 <Members>
2090 <Member Name="BlockEnd">
2091 <Messages>
2092 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2093 <Issue>
2094 <Item>BlockEnd</Item>
2095 </Issue>
2096 </Message>
2097 </Messages>
2098 </Member>
2099 <Member Name="BlockStart">
2100 <Messages>
2101 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2102 <Issue>
2103 <Item>BlockStart</Item>
2104 </Issue>
2105 </Message>
2106 </Messages>
2107 </Member>
2108 </Members>
2109 </Type>
2110 </Types>
2111 </Namespace>
2112 <Namespace Name="OpenSim.Framework.Inventory">
2113 <Types>
2114 <Type Name="AgentInventory">
2115 <Members>
2116 <Member Name=".ctor()">
2117 <Messages>
2118 <Message TypeName="DoNotCallOverridableMethodsInConstructors" Category="Microsoft.Usage" CheckId="CA2214" Created="2007-03-27 04:29:04Z">
2119 <Issue>
2120 <Item>AgentInventory.AgentInventory()</Item>
2121 <Item>&#xD;&#xA;&#xD;&#xA;AgentInventory.AgentInventory()&#xD;&#xA;AgentInventory.Initialise():Void</Item>
2122 </Issue>
2123 </Message>
2124 </Messages>
2125 </Member>
2126 <Member Name="AddToInventory(libsecondlife.LLUUID,OpenSim.Framework.Assets.AssetBase):libsecondlife.LLUUID">
2127 <Messages>
2128 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
2129 <Issue Name="ParameterId">
2130 <Item>ID</Item>
2131 <Item>folderID</Item>
2132 <Item>Id</Item>
2133 </Issue>
2134 </Message>
2135 </Messages>
2136 </Member>
2137 <Member Name="AgentID">
2138 <Messages>
2139 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2140 <Issue>
2141 <Item>AgentID</Item>
2142 </Issue>
2143 </Message>
2144 </Messages>
2145 </Member>
2146 <Member Name="CreateNewFolder(libsecondlife.LLUUID,System.UInt16):System.Boolean">
2147 <Messages>
2148 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
2149 <Issue Name="ParameterId">
2150 <Item>ID</Item>
2151 <Item>folderID</Item>
2152 <Item>Id</Item>
2153 </Issue>
2154 </Message>
2155 </Messages>
2156 </Member>
2157 <Member Name="Initialise():System.Void">
2158 <Messages>
2159 <Message Id="Initialise" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2160 <Issue Name="Member">
2161 <Item>Initialise</Item>
2162 <Item>AgentInventory.Initialise():Void</Item>
2163 </Issue>
2164 </Message>
2165 </Messages>
2166 </Member>
2167 <Member Name="InventoryFolders">
2168 <Messages>
2169 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2170 <Issue>
2171 <Item>InventoryFolders</Item>
2172 </Issue>
2173 </Message>
2174 </Messages>
2175 </Member>
2176 <Member Name="InventoryItems">
2177 <Messages>
2178 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2179 <Issue>
2180 <Item>InventoryItems</Item>
2181 </Issue>
2182 </Message>
2183 </Messages>
2184 </Member>
2185 <Member Name="InventoryRoot">
2186 <Messages>
2187 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2188 <Issue>
2189 <Item>InventoryRoot</Item>
2190 </Issue>
2191 </Message>
2192 </Messages>
2193 </Member>
2194 <Member Name="LastCached">
2195 <Messages>
2196 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2197 <Issue>
2198 <Item>LastCached</Item>
2199 </Issue>
2200 </Message>
2201 </Messages>
2202 </Member>
2203 <Member Name="UpdateItem(libsecondlife.LLUUID,OpenSim.Framework.Assets.AssetBase):System.Boolean">
2204 <Messages>
2205 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
2206 <Issue Name="ParameterId">
2207 <Item>ID</Item>
2208 <Item>itemID</Item>
2209 <Item>Id</Item>
2210 </Issue>
2211 </Message>
2212 </Messages>
2213 </Member>
2214 <Member Name="Wearables">
2215 <Messages>
2216 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2217 <Issue>
2218 <Item>Wearables</Item>
2219 </Issue>
2220 </Message>
2221 <Message Id="Wearables" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2222 <Issue Name="Member">
2223 <Item>Wearables</Item>
2224 <Item>AgentInventory.Wearables</Item>
2225 </Issue>
2226 </Message>
2227 </Messages>
2228 </Member>
2229 </Members>
2230 </Type>
2231 <Type Name="AvatarWearable">
2232 <Members>
2233 <Member Name="AssetID">
2234 <Messages>
2235 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2236 <Issue>
2237 <Item>AssetID</Item>
2238 </Issue>
2239 </Message>
2240 </Messages>
2241 </Member>
2242 <Member Name="ItemID">
2243 <Messages>
2244 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2245 <Issue>
2246 <Item>ItemID</Item>
2247 </Issue>
2248 </Message>
2249 </Messages>
2250 </Member>
2251 </Members>
2252 </Type>
2253 <Type Name="InventoryFolder">
2254 <Members>
2255 <Member Name="DefaultType">
2256 <Messages>
2257 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2258 <Issue>
2259 <Item>DefaultType</Item>
2260 </Issue>
2261 </Message>
2262 </Messages>
2263 </Member>
2264 <Member Name="FolderID">
2265 <Messages>
2266 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2267 <Issue>
2268 <Item>FolderID</Item>
2269 </Issue>
2270 </Message>
2271 </Messages>
2272 </Member>
2273 <Member Name="FolderName">
2274 <Messages>
2275 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2276 <Issue>
2277 <Item>FolderName</Item>
2278 </Issue>
2279 </Message>
2280 </Messages>
2281 </Member>
2282 <Member Name="Items">
2283 <Messages>
2284 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2285 <Issue>
2286 <Item>Items</Item>
2287 </Issue>
2288 </Message>
2289 <Message TypeName="DoNotExposeGenericLists" Category="Microsoft.Design" CheckId="CA1002" Created="2007-03-27 04:29:04Z">
2290 <Issue>
2291 <Item>System.Collections.Generic.List`1&lt;OpenSim.Framework.Inventory.InventoryItem&gt;</Item>
2292 <Item>InventoryFolder.Items</Item>
2293 </Issue>
2294 </Message>
2295 </Messages>
2296 </Member>
2297 <Member Name="OwnerID">
2298 <Messages>
2299 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2300 <Issue>
2301 <Item>OwnerID</Item>
2302 </Issue>
2303 </Message>
2304 </Messages>
2305 </Member>
2306 <Member Name="ParentID">
2307 <Messages>
2308 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2309 <Issue>
2310 <Item>ParentID</Item>
2311 </Issue>
2312 </Message>
2313 </Messages>
2314 </Member>
2315 <Member Name="Version">
2316 <Messages>
2317 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2318 <Issue>
2319 <Item>Version</Item>
2320 </Issue>
2321 </Message>
2322 </Messages>
2323 </Member>
2324 </Members>
2325 </Type>
2326 <Type Name="InventoryItem">
2327 <Members>
2328 <Member Name="AssetID">
2329 <Messages>
2330 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2331 <Issue>
2332 <Item>AssetID</Item>
2333 </Issue>
2334 </Message>
2335 </Messages>
2336 </Member>
2337 <Member Name="CreatorID">
2338 <Messages>
2339 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2340 <Issue>
2341 <Item>CreatorID</Item>
2342 </Issue>
2343 </Message>
2344 </Messages>
2345 </Member>
2346 <Member Name="Description">
2347 <Messages>
2348 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2349 <Issue>
2350 <Item>Description</Item>
2351 </Issue>
2352 </Message>
2353 </Messages>
2354 </Member>
2355 <Member Name="FolderID">
2356 <Messages>
2357 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2358 <Issue>
2359 <Item>FolderID</Item>
2360 </Issue>
2361 </Message>
2362 </Messages>
2363 </Member>
2364 <Member Name="InvType">
2365 <Messages>
2366 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2367 <Issue>
2368 <Item>InvType</Item>
2369 </Issue>
2370 </Message>
2371 </Messages>
2372 </Member>
2373 <Member Name="ItemID">
2374 <Messages>
2375 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2376 <Issue>
2377 <Item>ItemID</Item>
2378 </Issue>
2379 </Message>
2380 </Messages>
2381 </Member>
2382 <Member Name="Name">
2383 <Messages>
2384 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2385 <Issue>
2386 <Item>Name</Item>
2387 </Issue>
2388 </Message>
2389 </Messages>
2390 </Member>
2391 <Member Name="OwnerID">
2392 <Messages>
2393 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2394 <Issue>
2395 <Item>OwnerID</Item>
2396 </Issue>
2397 </Message>
2398 </Messages>
2399 </Member>
2400 <Member Name="Type">
2401 <Messages>
2402 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2403 <Issue>
2404 <Item>Type</Item>
2405 </Issue>
2406 </Message>
2407 </Messages>
2408 </Member>
2409 </Members>
2410 </Type>
2411 </Types>
2412 </Namespace>
2413 <Namespace Name="OpenSim.Framework.Sims">
2414 <Types>
2415 <Type Name="SimProfile">
2416 <Messages>
2417 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2418 <Issue Name="Type">
2419 <Item>Sim</Item>
2420 <Item>OpenSim.Framework.Sims.SimProfile</Item>
2421 </Issue>
2422 </Message>
2423 </Messages>
2424 <Members>
2425 <Member Name="LoadFromGrid(System.UInt64,System.String,System.String,System.String):OpenSim.Framework.Sims.SimProfile">
2426 <Messages>
2427 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
2428 <Issue>
2429 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2430 <Item>System.Exception</Item>
2431 </Issue>
2432 </Message>
2433 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
2434 <Issue Name="Parameter">
2435 <Item>GridURL</Item>
2436 </Issue>
2437 </Message>
2438 <Message Id="2#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
2439 <Issue Name="Parameter">
2440 <Item>SendKey</Item>
2441 </Issue>
2442 </Message>
2443 <Message Id="3#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
2444 <Issue Name="Parameter">
2445 <Item>RecvKey</Item>
2446 </Issue>
2447 </Message>
2448 <Message Id="3#Recv" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2449 <Issue Name="Parameter">
2450 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2451 <Item>Recv</Item>
2452 <Item>RecvKey</Item>
2453 </Issue>
2454 </Message>
2455 <Message Id="0#" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
2456 <Issue Name="Parameter">
2457 <Item>region_handle</Item>
2458 </Issue>
2459 </Message>
2460 <Message Id="1#" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
2461 <Issue Name="Parameter">
2462 <Item>GridURL</Item>
2463 </Issue>
2464 </Message>
2465 <Message Id="RecvKey" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
2466 <Issue>
2467 <Item>RecvKey</Item>
2468 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2469 </Issue>
2470 </Message>
2471 <Message Id="System.Convert.ToUInt16(System.Object)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
2472 <Issue>
2473 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2474 <Item>System.Convert.ToUInt16(System.Object)</Item>
2475 <Item>System.Convert.ToUInt16(System.Object,System.IFormatProvider)</Item>
2476 </Issue>
2477 </Message>
2478 <Message Id="System.Convert.ToUInt32(System.Object)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
2479 <Issue>
2480 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2481 <Item>System.Convert.ToUInt32(System.Object)</Item>
2482 <Item>System.Convert.ToUInt32(System.Object,System.IFormatProvider)</Item>
2483 </Issue>
2484 <Issue>
2485 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2486 <Item>System.Convert.ToUInt32(System.Object)</Item>
2487 <Item>System.Convert.ToUInt32(System.Object,System.IFormatProvider)</Item>
2488 </Issue>
2489 </Message>
2490 <Message Id="System.Convert.ToUInt64(System.Object)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
2491 <Issue>
2492 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2493 <Item>System.Convert.ToUInt64(System.Object)</Item>
2494 <Item>System.Convert.ToUInt64(System.Object,System.IFormatProvider)</Item>
2495 </Issue>
2496 </Message>
2497 <Message Id="System.UInt64.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
2498 <Issue>
2499 <Item>SimProfile.LoadFromGrid(UInt64, String, String, String):SimProfile</Item>
2500 <Item>System.UInt64.ToString</Item>
2501 <Item>System.UInt64.ToString(System.IFormatProvider)</Item>
2502 </Issue>
2503 </Message>
2504 </Messages>
2505 </Member>
2506 </Members>
2507 </Type>
2508 <Type Name="SimProfileBase">
2509 <Messages>
2510 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2511 <Issue Name="Type">
2512 <Item>Sim</Item>
2513 <Item>OpenSim.Framework.Sims.SimProfileBase</Item>
2514 </Issue>
2515 </Message>
2516 </Messages>
2517 <Members>
2518 <Member Name="caps_url">
2519 <Messages>
2520 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2521 <Issue>
2522 <Item>caps_url</Item>
2523 </Issue>
2524 </Message>
2525 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
2526 <Issue Name="Member">
2527 <Item>caps_url</Item>
2528 </Issue>
2529 </Message>
2530 </Messages>
2531 </Member>
2532 <Member Name="recvkey">
2533 <Messages>
2534 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2535 <Issue>
2536 <Item>recvkey</Item>
2537 </Issue>
2538 </Message>
2539 <Message Id="recvkey" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2540 <Issue Name="Member">
2541 <Item>recvkey</Item>
2542 <Item>SimProfileBase.recvkey</Item>
2543 </Issue>
2544 </Message>
2545 </Messages>
2546 </Member>
2547 <Member Name="regionhandle">
2548 <Messages>
2549 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2550 <Issue>
2551 <Item>regionhandle</Item>
2552 </Issue>
2553 </Message>
2554 <Message Id="regionhandle" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2555 <Issue Name="Member">
2556 <Item>regionhandle</Item>
2557 <Item>SimProfileBase.regionhandle</Item>
2558 </Issue>
2559 </Message>
2560 </Messages>
2561 </Member>
2562 <Member Name="RegionLocX">
2563 <Messages>
2564 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2565 <Issue>
2566 <Item>RegionLocX</Item>
2567 </Issue>
2568 </Message>
2569 </Messages>
2570 </Member>
2571 <Member Name="RegionLocY">
2572 <Messages>
2573 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2574 <Issue>
2575 <Item>RegionLocY</Item>
2576 </Issue>
2577 </Message>
2578 </Messages>
2579 </Member>
2580 <Member Name="regionname">
2581 <Messages>
2582 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2583 <Issue>
2584 <Item>regionname</Item>
2585 </Issue>
2586 </Message>
2587 <Message Id="regionname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2588 <Issue Name="Member">
2589 <Item>regionname</Item>
2590 <Item>SimProfileBase.regionname</Item>
2591 </Issue>
2592 </Message>
2593 </Messages>
2594 </Member>
2595 <Member Name="sendkey">
2596 <Messages>
2597 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2598 <Issue>
2599 <Item>sendkey</Item>
2600 </Issue>
2601 </Message>
2602 <Message Id="sendkey" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2603 <Issue Name="Member">
2604 <Item>sendkey</Item>
2605 <Item>SimProfileBase.sendkey</Item>
2606 </Issue>
2607 </Message>
2608 </Messages>
2609 </Member>
2610 <Member Name="sim_ip">
2611 <Messages>
2612 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2613 <Issue>
2614 <Item>sim_ip</Item>
2615 </Issue>
2616 </Message>
2617 <Message Id="sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2618 <Issue Name="Member">
2619 <Item>sim</Item>
2620 <Item>SimProfileBase.sim_ip</Item>
2621 </Issue>
2622 </Message>
2623 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
2624 <Issue Name="Member">
2625 <Item>sim_ip</Item>
2626 </Issue>
2627 </Message>
2628 </Messages>
2629 </Member>
2630 <Member Name="sim_port">
2631 <Messages>
2632 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2633 <Issue>
2634 <Item>sim_port</Item>
2635 </Issue>
2636 </Message>
2637 <Message Id="sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2638 <Issue Name="Member">
2639 <Item>sim</Item>
2640 <Item>SimProfileBase.sim_port</Item>
2641 </Issue>
2642 </Message>
2643 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
2644 <Issue Name="Member">
2645 <Item>sim_port</Item>
2646 </Issue>
2647 </Message>
2648 </Messages>
2649 </Member>
2650 <Member Name="UUID">
2651 <Messages>
2652 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2653 <Issue>
2654 <Item>UUID</Item>
2655 </Issue>
2656 </Message>
2657 </Messages>
2658 </Member>
2659 </Members>
2660 </Type>
2661 </Types>
2662 </Namespace>
2663 <Namespace Name="OpenSim.Framework.Terrain">
2664 <Types>
2665 <Type Name="HeightmapGenHills">
2666 <Messages>
2667 <Message Id="Heightmap" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2668 <Issue Name="Type">
2669 <Item>Heightmap</Item>
2670 <Item>OpenSim.Framework.Terrain.HeightmapGenHills</Item>
2671 </Issue>
2672 </Message>
2673 </Messages>
2674 <Members>
2675 <Member Name="GenerateHeightmap(System.Int32,System.Single,System.Single,System.Boolean):System.Single[]">
2676 <Messages>
2677 <Message Id="0#num" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2678 <Issue Name="Parameter">
2679 <Item>HeightmapGenHills.GenerateHeightmap(Int32, Single, Single, Boolean):Single[]</Item>
2680 <Item>num</Item>
2681 <Item>numHills</Item>
2682 </Issue>
2683 </Message>
2684 <Message Id="Heightmap" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2685 <Issue Name="Member">
2686 <Item>Heightmap</Item>
2687 <Item>HeightmapGenHills.GenerateHeightmap(Int32, Single, Single, Boolean):Single[]</Item>
2688 </Issue>
2689 </Message>
2690 </Messages>
2691 </Member>
2692 <Member Name="NumHills">
2693 <Messages>
2694 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
2695 <Issue>
2696 <Item>HeightmapGenHills.NumHills</Item>
2697 </Issue>
2698 </Message>
2699 </Messages>
2700 </Member>
2701 </Members>
2702 </Type>
2703 </Types>
2704 </Namespace>
2705 <Namespace Name="OpenSim.Framework.User">
2706 <Types>
2707 <Type Name="UserProfile">
2708 <Members>
2709 <Member Name=".ctor()">
2710 <Messages>
2711 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
2712 <Issue>
2713 <Item>UserProfile.UserProfile()</Item>
2714 <Item>IsGridGod</Item>
2715 <Item>System.Boolean</Item>
2716 <Item>false</Item>
2717 </Issue>
2718 </Message>
2719 </Messages>
2720 </Member>
2721 <Member Name="AddSimCircuit(System.UInt32,libsecondlife.LLUUID):System.Void">
2722 <Messages>
2723 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2724 <Issue Name="Member">
2725 <Item>Sim</Item>
2726 <Item>UserProfile.AddSimCircuit(UInt32, LLUUID):Void</Item>
2727 </Issue>
2728 </Message>
2729 <Message Id="1#" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
2730 <Issue Name="Parameter">
2731 <Item>regionUUID</Item>
2732 </Issue>
2733 </Message>
2734 </Messages>
2735 </Member>
2736 <Member Name="AssetURL">
2737 <Messages>
2738 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2739 <Issue>
2740 <Item>AssetURL</Item>
2741 </Issue>
2742 </Message>
2743 </Messages>
2744 </Member>
2745 <Member Name="Circuits">
2746 <Messages>
2747 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2748 <Issue>
2749 <Item>Circuits</Item>
2750 </Issue>
2751 </Message>
2752 </Messages>
2753 </Member>
2754 <Member Name="CurrentSecureSessionID">
2755 <Messages>
2756 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2757 <Issue>
2758 <Item>CurrentSecureSessionID</Item>
2759 </Issue>
2760 </Message>
2761 </Messages>
2762 </Member>
2763 <Member Name="CurrentSessionID">
2764 <Messages>
2765 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2766 <Issue>
2767 <Item>CurrentSessionID</Item>
2768 </Issue>
2769 </Message>
2770 </Messages>
2771 </Member>
2772 <Member Name="firstname">
2773 <Messages>
2774 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2775 <Issue>
2776 <Item>firstname</Item>
2777 </Issue>
2778 </Message>
2779 <Message Id="firstname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2780 <Issue Name="Member">
2781 <Item>firstname</Item>
2782 <Item>UserProfile.firstname</Item>
2783 </Issue>
2784 </Message>
2785 </Messages>
2786 </Member>
2787 <Member Name="homelookat">
2788 <Messages>
2789 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2790 <Issue>
2791 <Item>homelookat</Item>
2792 </Issue>
2793 </Message>
2794 <Message Id="homelookat" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2795 <Issue Name="Member">
2796 <Item>homelookat</Item>
2797 <Item>UserProfile.homelookat</Item>
2798 </Issue>
2799 </Message>
2800 </Messages>
2801 </Member>
2802 <Member Name="homepos">
2803 <Messages>
2804 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2805 <Issue>
2806 <Item>homepos</Item>
2807 </Issue>
2808 </Message>
2809 <Message Id="homepos" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2810 <Issue Name="Member">
2811 <Item>homepos</Item>
2812 <Item>UserProfile.homepos</Item>
2813 </Issue>
2814 </Message>
2815 </Messages>
2816 </Member>
2817 <Member Name="homeregionhandle">
2818 <Messages>
2819 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2820 <Issue>
2821 <Item>homeregionhandle</Item>
2822 </Issue>
2823 </Message>
2824 <Message Id="homeregionhandle" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2825 <Issue Name="Member">
2826 <Item>homeregionhandle</Item>
2827 <Item>UserProfile.homeregionhandle</Item>
2828 </Issue>
2829 </Message>
2830 </Messages>
2831 </Member>
2832 <Member Name="Inventory">
2833 <Messages>
2834 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2835 <Issue>
2836 <Item>Inventory</Item>
2837 </Issue>
2838 </Message>
2839 </Messages>
2840 </Member>
2841 <Member Name="IsGridGod">
2842 <Messages>
2843 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2844 <Issue>
2845 <Item>IsGridGod</Item>
2846 </Issue>
2847 </Message>
2848 </Messages>
2849 </Member>
2850 <Member Name="IsLocal">
2851 <Messages>
2852 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2853 <Issue>
2854 <Item>IsLocal</Item>
2855 </Issue>
2856 </Message>
2857 </Messages>
2858 </Member>
2859 <Member Name="lastname">
2860 <Messages>
2861 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2862 <Issue>
2863 <Item>lastname</Item>
2864 </Issue>
2865 </Message>
2866 <Message Id="lastname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2867 <Issue Name="Member">
2868 <Item>lastname</Item>
2869 <Item>UserProfile.lastname</Item>
2870 </Issue>
2871 </Message>
2872 </Messages>
2873 </Member>
2874 <Member Name="MD5passwd">
2875 <Messages>
2876 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2877 <Issue>
2878 <Item>MD5passwd</Item>
2879 </Issue>
2880 </Message>
2881 </Messages>
2882 </Member>
2883 <Member Name="UUID">
2884 <Messages>
2885 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2886 <Issue>
2887 <Item>UUID</Item>
2888 </Issue>
2889 </Message>
2890 </Messages>
2891 </Member>
2892 </Members>
2893 </Type>
2894 <Type Name="UserProfileManager">
2895 <Members>
2896 <Member Name="CustomiseResponse(System.Collections.Hashtable&amp;,OpenSim.Framework.User.UserProfile):System.Void">
2897 <Messages>
2898 <Message Id="0#" TypeName="DoNotPassTypesByReference" Category="Microsoft.Design" CheckId="CA1045" Created="2007-03-27 04:29:04Z">
2899 <Issue Level="CriticalWarning">
2900 <Item>response</Item>
2901 </Issue>
2902 </Message>
2903 <Message Id="Customise" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2904 <Issue Name="Member">
2905 <Item>Customise</Item>
2906 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2907 </Issue>
2908 </Message>
2909 <Message Id="GridResp" TypeName="RemoveUnusedLocals" Category="Microsoft.Performance" CheckId="CA1804" Created="2007-03-27 04:29:04Z">
2910 <Issue>
2911 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2912 <Item>GridResp</Item>
2913 <Item>Nwc.XmlRpc.XmlRpcResponse</Item>
2914 </Issue>
2915 </Message>
2916 <Message Id="System.Single.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
2917 <Issue>
2918 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2919 <Item>System.Single.ToString</Item>
2920 <Item>System.Single.ToString(System.IFormatProvider)</Item>
2921 </Issue>
2922 <Issue>
2923 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2924 <Item>System.Single.ToString</Item>
2925 <Item>System.Single.ToString(System.IFormatProvider)</Item>
2926 </Issue>
2927 <Issue>
2928 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2929 <Item>System.Single.ToString</Item>
2930 <Item>System.Single.ToString(System.IFormatProvider)</Item>
2931 </Issue>
2932 <Issue>
2933 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2934 <Item>System.Single.ToString</Item>
2935 <Item>System.Single.ToString(System.IFormatProvider)</Item>
2936 </Issue>
2937 <Issue>
2938 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2939 <Item>System.Single.ToString</Item>
2940 <Item>System.Single.ToString(System.IFormatProvider)</Item>
2941 </Issue>
2942 <Issue>
2943 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2944 <Item>System.Single.ToString</Item>
2945 <Item>System.Single.ToString(System.IFormatProvider)</Item>
2946 </Issue>
2947 </Message>
2948 <Message Id="System.UInt32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
2949 <Issue>
2950 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2951 <Item>System.UInt32.ToString</Item>
2952 <Item>System.UInt32.ToString(System.IFormatProvider)</Item>
2953 </Issue>
2954 <Issue>
2955 <Item>UserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
2956 <Item>System.UInt32.ToString</Item>
2957 <Item>System.UInt32.ToString(System.IFormatProvider)</Item>
2958 </Issue>
2959 </Message>
2960 </Messages>
2961 </Member>
2962 <Member Name="DefaultStartupMsg">
2963 <Messages>
2964 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2965 <Issue>
2966 <Item>DefaultStartupMsg</Item>
2967 </Issue>
2968 </Message>
2969 </Messages>
2970 </Member>
2971 <Member Name="GridRecvKey">
2972 <Messages>
2973 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2974 <Issue>
2975 <Item>GridRecvKey</Item>
2976 </Issue>
2977 </Message>
2978 <Message Id="Recv" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
2979 <Issue Name="Member">
2980 <Item>Recv</Item>
2981 <Item>UserProfileManager.GridRecvKey</Item>
2982 </Issue>
2983 </Message>
2984 </Messages>
2985 </Member>
2986 <Member Name="GridSendKey">
2987 <Messages>
2988 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2989 <Issue>
2990 <Item>GridSendKey</Item>
2991 </Issue>
2992 </Message>
2993 </Messages>
2994 </Member>
2995 <Member Name="GridURL">
2996 <Messages>
2997 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
2998 <Issue>
2999 <Item>GridURL</Item>
3000 </Issue>
3001 </Message>
3002 </Messages>
3003 </Member>
3004 <Member Name="ParseXMLRPC(System.String):System.String">
3005 <Messages>
3006 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
3007 <Issue>
3008 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3009 <Item>System.Exception</Item>
3010 </Issue>
3011 </Message>
3012 <Message Id="Member" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
3013 <Issue Name="Member">
3014 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3015 </Issue>
3016 </Message>
3017 <Message Id="System.Int32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
3018 <Issue>
3019 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3020 <Item>System.Int32.ToString</Item>
3021 <Item>System.Int32.ToString(System.IFormatProvider)</Item>
3022 </Issue>
3023 <Issue>
3024 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3025 <Item>System.Int32.ToString</Item>
3026 <Item>System.Int32.ToString(System.IFormatProvider)</Item>
3027 </Issue>
3028 </Message>
3029 <Message Id="System.Single.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
3030 <Issue>
3031 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3032 <Item>System.Single.ToString</Item>
3033 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3034 </Issue>
3035 <Issue>
3036 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3037 <Item>System.Single.ToString</Item>
3038 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3039 </Issue>
3040 <Issue>
3041 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3042 <Item>System.Single.ToString</Item>
3043 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3044 </Issue>
3045 <Issue>
3046 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3047 <Item>System.Single.ToString</Item>
3048 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3049 </Issue>
3050 <Issue>
3051 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3052 <Item>System.Single.ToString</Item>
3053 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3054 </Issue>
3055 <Issue>
3056 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3057 <Item>System.Single.ToString</Item>
3058 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3059 </Issue>
3060 <Issue>
3061 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3062 <Item>System.Single.ToString</Item>
3063 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3064 </Issue>
3065 <Issue>
3066 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3067 <Item>System.Single.ToString</Item>
3068 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3069 </Issue>
3070 <Issue>
3071 <Item>UserProfileManager.ParseXMLRPC(String):String</Item>
3072 <Item>System.Single.ToString</Item>
3073 <Item>System.Single.ToString(System.IFormatProvider)</Item>
3074 </Issue>
3075 </Message>
3076 </Messages>
3077 </Member>
3078 <Member Name="SetKeys(System.String,System.String,System.String,System.String):System.Void">
3079 <Messages>
3080 <Message Id="1#recv" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3081 <Issue Name="Parameter">
3082 <Item>UserProfileManager.SetKeys(String, String, String, String):Void</Item>
3083 <Item>recv</Item>
3084 <Item>recvKey</Item>
3085 </Issue>
3086 </Message>
3087 <Message Id="2#" TypeName="UriParametersShouldNotBeStrings" Category="Microsoft.Design" CheckId="CA1054" Created="2007-03-27 04:29:04Z">
3088 <Issue>
3089 <Item>url</Item>
3090 <Item>UserProfileManager.SetKeys(String, String, String, String):Void</Item>
3091 </Issue>
3092 </Message>
3093 </Messages>
3094 </Member>
3095 </Members>
3096 </Type>
3097 <Type Name="UserProfileManagerBase">
3098 <Members>
3099 <Member Name="AuthenticateUser(System.String,System.String,System.String):System.Boolean">
3100 <Messages>
3101 <Message Id="0#firstname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3102 <Issue Name="Parameter">
3103 <Item>UserProfileManagerBase.AuthenticateUser(String, String, String):Boolean</Item>
3104 <Item>firstname</Item>
3105 <Item>firstname</Item>
3106 </Issue>
3107 </Message>
3108 <Message Id="1#lastname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3109 <Issue Name="Parameter">
3110 <Item>UserProfileManagerBase.AuthenticateUser(String, String, String):Boolean</Item>
3111 <Item>lastname</Item>
3112 <Item>lastname</Item>
3113 </Issue>
3114 </Message>
3115 <Message Id="2#passwd" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3116 <Issue Name="Parameter">
3117 <Item>UserProfileManagerBase.AuthenticateUser(String, String, String):Boolean</Item>
3118 <Item>passwd</Item>
3119 <Item>passwd</Item>
3120 </Issue>
3121 </Message>
3122 </Messages>
3123 </Member>
3124 <Member Name="CreateNewProfile(System.String,System.String,System.String):OpenSim.Framework.User.UserProfile">
3125 <Messages>
3126 <Message Id="2#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
3127 <Issue Name="Parameter">
3128 <Item>MD5passwd</Item>
3129 </Issue>
3130 </Message>
3131 <Message Id="0#firstname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3132 <Issue Name="Parameter">
3133 <Item>UserProfileManagerBase.CreateNewProfile(String, String, String):UserProfile</Item>
3134 <Item>firstname</Item>
3135 <Item>firstname</Item>
3136 </Issue>
3137 </Message>
3138 <Message Id="1#lastname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3139 <Issue Name="Parameter">
3140 <Item>UserProfileManagerBase.CreateNewProfile(String, String, String):UserProfile</Item>
3141 <Item>lastname</Item>
3142 <Item>lastname</Item>
3143 </Issue>
3144 </Message>
3145 <Message Id="2#M" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3146 <Issue Name="Parameter">
3147 <Item>UserProfileManagerBase.CreateNewProfile(String, String, String):UserProfile</Item>
3148 <Item>M</Item>
3149 <Item>MD5passwd</Item>
3150 </Issue>
3151 </Message>
3152 </Messages>
3153 </Member>
3154 <Member Name="GetProfileByLLUUID(libsecondlife.LLUUID):OpenSim.Framework.User.UserProfile">
3155 <Messages>
3156 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
3157 <Issue Name="Parameter">
3158 <Item>ProfileLLUUID</Item>
3159 </Issue>
3160 </Message>
3161 <Message Id="0#" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
3162 <Issue Name="Parameter">
3163 <Item>ProfileLLUUID</Item>
3164 </Issue>
3165 </Message>
3166 <Message Id="Member" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
3167 <Issue Name="Member">
3168 <Item>UserProfileManagerBase.GetProfileByLLUUID(LLUUID):UserProfile</Item>
3169 </Issue>
3170 </Message>
3171 </Messages>
3172 </Member>
3173 <Member Name="GetProfileByName(System.String,System.String):OpenSim.Framework.User.UserProfile">
3174 <Messages>
3175 <Message Id="0#firstname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3176 <Issue Name="Parameter">
3177 <Item>UserProfileManagerBase.GetProfileByName(String, String):UserProfile</Item>
3178 <Item>firstname</Item>
3179 <Item>firstname</Item>
3180 </Issue>
3181 </Message>
3182 <Message Id="1#lastname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3183 <Issue Name="Parameter">
3184 <Item>UserProfileManagerBase.GetProfileByName(String, String):UserProfile</Item>
3185 <Item>lastname</Item>
3186 <Item>lastname</Item>
3187 </Issue>
3188 </Message>
3189 </Messages>
3190 </Member>
3191 <Member Name="GetUsersInventory(libsecondlife.LLUUID):OpenSim.Framework.Inventory.AgentInventory">
3192 <Messages>
3193 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
3194 <Issue Name="ParameterId">
3195 <Item>ID</Item>
3196 <Item>agentID</Item>
3197 <Item>Id</Item>
3198 </Issue>
3199 </Message>
3200 </Messages>
3201 </Member>
3202 <Member Name="SetGod(libsecondlife.LLUUID):System.Void">
3203 <Messages>
3204 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
3205 <Issue Name="Parameter">
3206 <Item>GodID</Item>
3207 </Issue>
3208 </Message>
3209 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
3210 <Issue Name="ParameterId">
3211 <Item>ID</Item>
3212 <Item>GodID</Item>
3213 <Item>Id</Item>
3214 </Issue>
3215 </Message>
3216 </Messages>
3217 </Member>
3218 <Member Name="UserProfiles">
3219 <Messages>
3220 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3221 <Issue>
3222 <Item>UserProfiles</Item>
3223 </Issue>
3224 </Message>
3225 </Messages>
3226 </Member>
3227 </Members>
3228 </Type>
3229 </Types>
3230 </Namespace>
3231 <Namespace Name="OpenSim.Framework.Utilities">
3232 <Types>
3233 <Type Name="BlockingQueue`1">
3234 <Messages>
3235 <Message TypeName="IdentifiersShouldNotHaveIncorrectSuffix" Category="Microsoft.Naming" CheckId="CA1711" Created="2007-03-27 04:29:04Z">
3236 <Issue>
3237 <Item>OpenSim.Framework.Utilities.BlockingQueue`1</Item>
3238 <Item>Queue</Item>
3239 </Issue>
3240 </Message>
3241 </Messages>
3242 </Type>
3243 <Type Name="Util">
3244 <Messages>
3245 <Message Id="Util" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3246 <Issue Name="Type">
3247 <Item>Util</Item>
3248 <Item>OpenSim.Framework.Utilities.Util</Item>
3249 </Issue>
3250 </Message>
3251 <Message TypeName="StaticHolderTypesShouldNotHaveConstructors" Category="Microsoft.Design" CheckId="CA1053" Created="2007-03-27 04:29:04Z">
3252 <Issue>
3253 <Item>Util</Item>
3254 </Issue>
3255 </Message>
3256 <Message TypeName="TypeNamesShouldNotMatchNamespaces" Category="Microsoft.Naming" CheckId="CA1724" Created="2007-03-27 04:29:04Z">
3257 <Issue>
3258 <Item>Util</Item>
3259 <Item>System.Web.Util</Item>
3260 </Issue>
3261 </Message>
3262 </Messages>
3263 <Members>
3264 <Member Name="GetNextXferID():System.UInt32">
3265 <Messages>
3266 <Message Id="Xfer" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3267 <Issue Name="Member">
3268 <Item>Xfer</Item>
3269 <Item>Util.GetNextXferID():UInt32</Item>
3270 </Issue>
3271 </Message>
3272 <Message Id="Member" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
3273 <Issue Name="MemberId">
3274 <Item>Util.GetNextXferID():UInt32</Item>
3275 </Issue>
3276 </Message>
3277 <Message TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024" Created="2007-03-27 04:29:04Z">
3278 <Issue>
3279 <Item>GetNextXferID</Item>
3280 </Issue>
3281 </Message>
3282 </Messages>
3283 </Member>
3284 <Member Name="UIntsToLong(System.UInt32,System.UInt32):System.UInt64">
3285 <Messages>
3286 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
3287 <Issue Name="Parameter">
3288 <Item>X</Item>
3289 </Issue>
3290 </Message>
3291 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
3292 <Issue Name="Parameter">
3293 <Item>Y</Item>
3294 </Issue>
3295 </Message>
3296 <Message Id="0#X" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3297 <Issue Name="ParameterOneLetter">
3298 <Item>Util.UIntsToLong(UInt32, UInt32):UInt64</Item>
3299 <Item>X</Item>
3300 </Issue>
3301 </Message>
3302 <Message Id="1#Y" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3303 <Issue Name="ParameterOneLetter">
3304 <Item>Util.UIntsToLong(UInt32, UInt32):UInt64</Item>
3305 <Item>Y</Item>
3306 </Issue>
3307 </Message>
3308 <Message Id="Ints" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3309 <Issue Name="Member">
3310 <Item>Ints</Item>
3311 <Item>Util.UIntsToLong(UInt32, UInt32):UInt64</Item>
3312 </Issue>
3313 </Message>
3314 </Messages>
3315 </Member>
3316 </Members>
3317 </Type>
3318 </Types>
3319 </Namespace>
3320 </Namespaces>
3321 </Module>
3322 </Modules>
3323 </Target>
3324 <Target Name="$(ProjectDir)/bin/OpenSim.GridInterfaces.Local.dll">
3325 <Modules>
3326 <Module Name="opensim.gridinterfaces.local.dll">
3327 <Messages>
3328 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
3329 <Issue>
3330 <Item>OpenSim.GridInterfaces.Local</Item>
3331 </Issue>
3332 </Message>
3333 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
3334 <Issue Name="NoStrongName">
3335 <Item>OpenSim.GridInterfaces.Local</Item>
3336 </Issue>
3337 </Message>
3338 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
3339 <Issue Name="NoAttr">
3340 <Item>OpenSim.GridInterfaces.Local</Item>
3341 </Issue>
3342 </Message>
3343 </Messages>
3344 <Namespaces>
3345 <Namespace Name="OpenSim.GridInterfaces.Local">
3346 <Types>
3347 <Type Name="AssetStorage">
3348 <Members>
3349 <Member Name="Data">
3350 <Messages>
3351 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3352 <Issue>
3353 <Item>Data</Item>
3354 </Issue>
3355 </Message>
3356 </Messages>
3357 </Member>
3358 <Member Name="Name">
3359 <Messages>
3360 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3361 <Issue>
3362 <Item>Name</Item>
3363 </Issue>
3364 </Message>
3365 </Messages>
3366 </Member>
3367 <Member Name="Type">
3368 <Messages>
3369 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3370 <Issue>
3371 <Item>Type</Item>
3372 </Issue>
3373 </Message>
3374 </Messages>
3375 </Member>
3376 <Member Name="UUID">
3377 <Messages>
3378 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3379 <Issue>
3380 <Item>UUID</Item>
3381 </Issue>
3382 </Message>
3383 </Messages>
3384 </Member>
3385 </Members>
3386 </Type>
3387 <Type Name="AssetUUIDQuery">
3388 <Messages>
3389 <Message TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
3390 <Issue Name="Type">
3391 <Item>AssetUUIDQuery</Item>
3392 </Issue>
3393 </Message>
3394 </Messages>
3395 <Members>
3396 <Member Name="Match(OpenSim.GridInterfaces.Local.AssetStorage):System.Boolean">
3397 <Messages>
3398 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
3399 <Issue>
3400 <Item>'asset'</Item>
3401 <Item>AssetUUIDQuery.Match(AssetStorage):Boolean</Item>
3402 </Issue>
3403 </Message>
3404 </Messages>
3405 </Member>
3406 </Members>
3407 </Type>
3408 <Type Name="LocalAssetPlugin">
3409 <Messages>
3410 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3411 <Issue Name="Type">
3412 <Item>Plugin</Item>
3413 <Item>OpenSim.GridInterfaces.Local.LocalAssetPlugin</Item>
3414 </Issue>
3415 </Message>
3416 </Messages>
3417 </Type>
3418 <Type Name="LocalAssetServer">
3419 <Members>
3420 <Member Name=".ctor()">
3421 <Messages>
3422 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
3423 <Issue>
3424 <Item>LocalAssetServer.LocalAssetServer()</Item>
3425 <Item>System.Exception</Item>
3426 </Issue>
3427 </Message>
3428 </Messages>
3429 </Member>
3430 <Member Name="LoadAsset(OpenSim.Framework.Assets.AssetBase,System.Boolean,System.String):System.Void">
3431 <Messages>
3432 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
3433 <Issue>
3434 <Item>LocalAssetServer.LoadAsset(AssetBase, Boolean, String):Void</Item>
3435 </Issue>
3436 </Message>
3437 <Message Id="image" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
3438 <Issue>
3439 <Item>image</Item>
3440 <Item>LocalAssetServer.LoadAsset(AssetBase, Boolean, String):Void</Item>
3441 </Issue>
3442 </Message>
3443 </Messages>
3444 </Member>
3445 <Member Name="UploadNewAsset(OpenSim.Framework.Assets.AssetBase):System.Void">
3446 <Messages>
3447 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
3448 <Issue>
3449 <Item>'asset'</Item>
3450 <Item>LocalAssetServer.UploadNewAsset(AssetBase):Void</Item>
3451 </Issue>
3452 </Message>
3453 </Messages>
3454 </Member>
3455 </Members>
3456 </Type>
3457 <Type Name="LocalGridPlugin">
3458 <Messages>
3459 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3460 <Issue Name="Type">
3461 <Item>Plugin</Item>
3462 <Item>OpenSim.GridInterfaces.Local.LocalGridPlugin</Item>
3463 </Issue>
3464 </Message>
3465 </Messages>
3466 </Type>
3467 <Type Name="LocalGridServer">
3468 <Members>
3469 <Member Name="LogoutSession(libsecondlife.LLUUID,libsecondlife.LLUUID,System.UInt32):System.Boolean">
3470 <Messages>
3471 <Message Id="Logout" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
3472 <Issue Name="Member">
3473 <Item>Logout</Item>
3474 <Item>LogoutSession</Item>
3475 <Item>LogOff</Item>
3476 </Issue>
3477 </Message>
3478 </Messages>
3479 </Member>
3480 <Member Name="Sessions">
3481 <Messages>
3482 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3483 <Issue>
3484 <Item>Sessions</Item>
3485 </Issue>
3486 </Message>
3487 <Message TypeName="DoNotExposeGenericLists" Category="Microsoft.Design" CheckId="CA1002" Created="2007-03-27 04:29:04Z">
3488 <Issue>
3489 <Item>System.Collections.Generic.List`1&lt;OpenSim.Framework.Interfaces.Login&gt;</Item>
3490 <Item>LocalGridServer.Sessions</Item>
3491 </Issue>
3492 </Message>
3493 </Messages>
3494 </Member>
3495 </Members>
3496 </Type>
3497 </Types>
3498 </Namespace>
3499 </Namespaces>
3500 </Module>
3501 </Modules>
3502 </Target>
3503 <Target Name="$(ProjectDir)/bin/OpenSim.GridInterfaces.Remote.dll">
3504 <Modules>
3505 <Module Name="opensim.gridinterfaces.remote.dll">
3506 <Messages>
3507 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
3508 <Issue>
3509 <Item>OpenSim.GridInterfaces.Remote</Item>
3510 </Issue>
3511 </Message>
3512 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
3513 <Issue Name="NoStrongName">
3514 <Item>OpenSim.GridInterfaces.Remote</Item>
3515 </Issue>
3516 </Message>
3517 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
3518 <Issue Name="NoAttr">
3519 <Item>OpenSim.GridInterfaces.Remote</Item>
3520 </Issue>
3521 </Message>
3522 </Messages>
3523 <Namespaces>
3524 <Namespace Name="OpenSim.GridInterfaces.Remote">
3525 <Types>
3526 <Type Name="RemoteAssetPlugin">
3527 <Messages>
3528 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3529 <Issue Name="Type">
3530 <Item>Plugin</Item>
3531 <Item>OpenSim.GridInterfaces.Remote.RemoteAssetPlugin</Item>
3532 </Issue>
3533 </Message>
3534 </Messages>
3535 </Type>
3536 <Type Name="RemoteGridPlugin">
3537 <Messages>
3538 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3539 <Issue Name="Type">
3540 <Item>Plugin</Item>
3541 <Item>OpenSim.GridInterfaces.Remote.RemoteGridPlugin</Item>
3542 </Issue>
3543 </Message>
3544 </Messages>
3545 </Type>
3546 <Type Name="RemoteGridServer">
3547 <Members>
3548 <Member Name="agentcircuits">
3549 <Messages>
3550 <Message TypeName="CollectionPropertiesShouldBeReadOnly" Category="Microsoft.Usage" CheckId="CA2227" Created="2007-03-27 04:29:04Z">
3551 <Issue>
3552 <Item>agentcircuits</Item>
3553 </Issue>
3554 </Message>
3555 </Messages>
3556 </Member>
3557 <Member Name="AuthenticateSession(libsecondlife.LLUUID,libsecondlife.LLUUID,System.UInt32):OpenSim.Framework.Interfaces.AuthenticateResponse">
3558 <Messages>
3559 <Message Id="2#" TypeName="ParameterNamesShouldMatchBaseDeclaration" Category="Microsoft.Naming" CheckId="CA1725" Created="2007-03-27 04:29:04Z">
3560 <Issue>
3561 <Item>circuitcode</Item>
3562 <Item>RemoteGridServer.AuthenticateSession(LLUUID, LLUUID, UInt32):AuthenticateResponse</Item>
3563 <Item>circuitCode</Item>
3564 <Item>IGridServer.AuthenticateSession(LLUUID, LLUUID, UInt32):AuthenticateResponse</Item>
3565 </Issue>
3566 </Message>
3567 </Messages>
3568 </Member>
3569 <Member Name="GridRecvKey">
3570 <Messages>
3571 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
3572 <Issue>
3573 <Item>RemoteGridServer.GridRecvKey</Item>
3574 </Issue>
3575 </Message>
3576 </Messages>
3577 </Member>
3578 <Member Name="GridSendKey">
3579 <Messages>
3580 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
3581 <Issue>
3582 <Item>RemoteGridServer.GridSendKey</Item>
3583 </Issue>
3584 </Message>
3585 </Messages>
3586 </Member>
3587 <Member Name="LogoutSession(libsecondlife.LLUUID,libsecondlife.LLUUID,System.UInt32):System.Boolean">
3588 <Messages>
3589 <Message TypeName="PassSystemUriObjectsInsteadOfStrings" Category="Microsoft.Usage" CheckId="CA2234" Created="2007-03-27 04:29:04Z">
3590 <Issue>
3591 <Item>RemoteGridServer.LogoutSession(LLUUID, LLUUID, UInt32):Boolean</Item>
3592 <Item>WebRequest.Create(Uri):WebRequest</Item>
3593 <Item>WebRequest.Create(String):WebRequest</Item>
3594 </Issue>
3595 </Message>
3596 <Message Id="GridResponse" TypeName="RemoveUnusedLocals" Category="Microsoft.Performance" CheckId="CA1804" Created="2007-03-27 04:29:04Z">
3597 <Issue>
3598 <Item>RemoteGridServer.LogoutSession(LLUUID, LLUUID, UInt32):Boolean</Item>
3599 <Item>GridResponse</Item>
3600 <Item>System.String</Item>
3601 </Issue>
3602 </Message>
3603 <Message Id="Logout" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
3604 <Issue Name="Member">
3605 <Item>Logout</Item>
3606 <Item>LogoutSession</Item>
3607 <Item>LogOff</Item>
3608 </Issue>
3609 </Message>
3610 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
3611 <Issue>
3612 <Item>'sessionID'</Item>
3613 <Item>RemoteGridServer.LogoutSession(LLUUID, LLUUID, UInt32):Boolean</Item>
3614 </Issue>
3615 </Message>
3616 </Messages>
3617 </Member>
3618 </Members>
3619 </Type>
3620 </Types>
3621 </Namespace>
3622 </Namespaces>
3623 </Module>
3624 </Modules>
3625 </Target>
3626 <Target Name="$(ProjectDir)/bin/OpenSim.Physics.Manager.dll">
3627 <Modules>
3628 <Module Name="opensim.physics.manager.dll">
3629 <Messages>
3630 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
3631 <Issue>
3632 <Item>OpenSim.Physics.Manager</Item>
3633 </Issue>
3634 </Message>
3635 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
3636 <Issue Name="NoStrongName">
3637 <Item>OpenSim.Physics.Manager</Item>
3638 </Issue>
3639 </Message>
3640 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
3641 <Issue Name="NoAttr">
3642 <Item>OpenSim.Physics.Manager</Item>
3643 </Issue>
3644 </Message>
3645 </Messages>
3646 <Namespaces>
3647 <Namespace Name="OpenSim.Physics.Manager">
3648 <Types>
3649 <Type Name="IPhysicsPlugin">
3650 <Messages>
3651 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3652 <Issue Name="Type">
3653 <Item>Plugin</Item>
3654 <Item>OpenSim.Physics.Manager.IPhysicsPlugin</Item>
3655 </Issue>
3656 </Message>
3657 </Messages>
3658 <Members>
3659 <Member Name="GetName():System.String">
3660 <Messages>
3661 <Message TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024" Created="2007-03-27 04:29:04Z">
3662 <Issue Certainty="50">
3663 <Item>GetName</Item>
3664 </Issue>
3665 </Message>
3666 </Messages>
3667 </Member>
3668 <Member Name="GetScene():OpenSim.Physics.Manager.PhysicsScene">
3669 <Messages>
3670 <Message TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024" Created="2007-03-27 04:29:04Z">
3671 <Issue Certainty="50">
3672 <Item>GetScene</Item>
3673 </Issue>
3674 </Message>
3675 </Messages>
3676 </Member>
3677 </Members>
3678 </Type>
3679 <Type Name="NullPhysicsScene">
3680 <Members>
3681 <Member Name="SetTerrain(System.Single[]):System.Void">
3682 <Messages>
3683 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
3684 <Issue>
3685 <Item>'heightMap'</Item>
3686 <Item>NullPhysicsScene.SetTerrain(Single[]):Void</Item>
3687 </Issue>
3688 </Message>
3689 </Messages>
3690 </Member>
3691 <Member Name="Simulate(System.Single):System.Void">
3692 <Messages>
3693 <Message Id="System.Int32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
3694 <Issue>
3695 <Item>NullPhysicsScene.Simulate(Single):Void</Item>
3696 <Item>System.Int32.ToString</Item>
3697 <Item>System.Int32.ToString(System.IFormatProvider)</Item>
3698 </Issue>
3699 </Message>
3700 </Messages>
3701 </Member>
3702 </Members>
3703 </Type>
3704 <Type Name="PhysicsActor">
3705 <Members>
3706 <Member Name="Kinematic">
3707 <Messages>
3708 <Message Id="Kinematic" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3709 <Issue Name="Member">
3710 <Item>Kinematic</Item>
3711 <Item>PhysicsActor.Kinematic:Boolean</Item>
3712 </Issue>
3713 </Message>
3714 </Messages>
3715 </Member>
3716 </Members>
3717 </Type>
3718 <Type Name="PhysicsManager">
3719 <Members>
3720 <Member Name="GetPhysicsScene(System.String):OpenSim.Physics.Manager.PhysicsScene">
3721 <Messages>
3722 <Message Id="System.String.Format(System.String,System.Object)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
3723 <Issue>
3724 <Item>PhysicsManager.GetPhysicsScene(String):PhysicsScene</Item>
3725 <Item>System.String.Format(System.String,System.Object)</Item>
3726 <Item>System.String.Format(System.IFormatProvider,System.String,System.Object[])</Item>
3727 </Issue>
3728 </Message>
3729 </Messages>
3730 </Member>
3731 <Member Name="LoadPlugins():System.Void">
3732 <Messages>
3733 <Message Id="Plugins" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3734 <Issue Name="Member">
3735 <Item>Plugins</Item>
3736 <Item>PhysicsManager.LoadPlugins():Void</Item>
3737 </Issue>
3738 </Message>
3739 </Messages>
3740 </Member>
3741 </Members>
3742 </Type>
3743 <Type Name="PhysicsVector">
3744 <Members>
3745 <Member Name=".ctor(System.Single,System.Single,System.Single)">
3746 <Messages>
3747 <Message Id="0#x" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3748 <Issue Name="ParameterOneLetter">
3749 <Item>PhysicsVector.PhysicsVector(Single, Single, Single)</Item>
3750 <Item>x</Item>
3751 </Issue>
3752 </Message>
3753 <Message Id="1#y" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3754 <Issue Name="ParameterOneLetter">
3755 <Item>PhysicsVector.PhysicsVector(Single, Single, Single)</Item>
3756 <Item>y</Item>
3757 </Issue>
3758 </Message>
3759 <Message Id="2#z" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3760 <Issue Name="ParameterOneLetter">
3761 <Item>PhysicsVector.PhysicsVector(Single, Single, Single)</Item>
3762 <Item>z</Item>
3763 </Issue>
3764 </Message>
3765 </Messages>
3766 </Member>
3767 <Member Name="X">
3768 <Messages>
3769 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3770 <Issue>
3771 <Item>X</Item>
3772 </Issue>
3773 </Message>
3774 <Message Id="X" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3775 <Issue Name="MemberOneLetter">
3776 <Item>X</Item>
3777 <Item>PhysicsVector.X</Item>
3778 </Issue>
3779 </Message>
3780 </Messages>
3781 </Member>
3782 <Member Name="Y">
3783 <Messages>
3784 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3785 <Issue>
3786 <Item>Y</Item>
3787 </Issue>
3788 </Message>
3789 <Message Id="Y" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3790 <Issue Name="MemberOneLetter">
3791 <Item>Y</Item>
3792 <Item>PhysicsVector.Y</Item>
3793 </Issue>
3794 </Message>
3795 </Messages>
3796 </Member>
3797 <Member Name="Z">
3798 <Messages>
3799 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3800 <Issue>
3801 <Item>Z</Item>
3802 </Issue>
3803 </Message>
3804 <Message Id="Z" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3805 <Issue Name="MemberOneLetter">
3806 <Item>Z</Item>
3807 <Item>PhysicsVector.Z</Item>
3808 </Issue>
3809 </Message>
3810 </Messages>
3811 </Member>
3812 <Member Name="Zero">
3813 <Messages>
3814 <Message TypeName="DoNotDeclareReadOnlyMutableReferenceTypes" Category="Microsoft.Security" CheckId="CA2104" Created="2007-03-27 04:29:04Z">
3815 <Issue>
3816 <Item>PhysicsVector.Zero</Item>
3817 <Item>OpenSim.Physics.Manager.PhysicsVector</Item>
3818 </Issue>
3819 </Message>
3820 </Messages>
3821 </Member>
3822 </Members>
3823 </Type>
3824 </Types>
3825 </Namespace>
3826 </Namespaces>
3827 </Module>
3828 </Modules>
3829 </Target>
3830 <Target Name="$(ProjectDir)/bin/OpenSim.RegionServer.dll">
3831 <Modules>
3832 <Module Name="opensim.regionserver.dll">
3833 <Messages>
3834 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
3835 <Issue>
3836 <Item>OpenSim.RegionServer</Item>
3837 </Issue>
3838 </Message>
3839 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
3840 <Issue Name="NoStrongName">
3841 <Item>OpenSim.RegionServer</Item>
3842 </Issue>
3843 </Message>
3844 <Message TypeName="MarkAssembliesWithAssemblyVersion" Category="Microsoft.Design" CheckId="CA1016" Created="2007-03-27 04:29:04Z">
3845 <Issue>
3846 <Item>OpenSim.RegionServer</Item>
3847 </Issue>
3848 </Message>
3849 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
3850 <Issue Name="NoAttr">
3851 <Item>OpenSim.RegionServer</Item>
3852 </Issue>
3853 </Message>
3854 <Message TypeName="MarkAssembliesWithComVisible" Category="Microsoft.Design" CheckId="CA1017" Created="2007-03-27 04:29:04Z">
3855 <Issue Name="NoAttribute" Level="CriticalError">
3856 <Item>OpenSim.RegionServer</Item>
3857 </Issue>
3858 </Message>
3859 </Messages>
3860 <Namespaces>
3861 <Namespace Name="OpenSim">
3862 <Types>
3863 <Type Name="AgentAssetUpload">
3864 <Members>
3865 <Member Name="AddUpload(libsecondlife.LLUUID,OpenSim.Framework.Assets.AssetBase):System.Void">
3866 <Messages>
3867 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
3868 <Issue Name="ParameterId">
3869 <Item>ID</Item>
3870 <Item>transactionID</Item>
3871 <Item>Id</Item>
3872 </Issue>
3873 </Message>
3874 </Messages>
3875 </Member>
3876 <Member Name="AddUploadToAssetCache(libsecondlife.LLUUID):OpenSim.Framework.Assets.AssetBase">
3877 <Messages>
3878 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
3879 <Issue Name="ParameterId">
3880 <Item>ID</Item>
3881 <Item>transactionID</Item>
3882 <Item>Id</Item>
3883 </Issue>
3884 </Message>
3885 </Messages>
3886 </Member>
3887 <Member Name="GetUpload(libsecondlife.LLUUID):OpenSim.Framework.Assets.AssetBase">
3888 <Messages>
3889 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
3890 <Issue Name="ParameterId">
3891 <Item>ID</Item>
3892 <Item>transactionID</Item>
3893 <Item>Id</Item>
3894 </Issue>
3895 </Message>
3896 </Messages>
3897 </Member>
3898 <Member Name="HandleUploadPacket(libsecondlife.Packets.AssetUploadRequestPacket,libsecondlife.LLUUID):System.Void">
3899 <Messages>
3900 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
3901 <Issue Name="ParameterId">
3902 <Item>ID</Item>
3903 <Item>assetID</Item>
3904 <Item>Id</Item>
3905 </Issue>
3906 </Message>
3907 <Message Id="System.Int32.ToString(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
3908 <Issue>
3909 <Item>AgentAssetUpload.HandleUploadPacket(AssetUploadRequestPacket, LLUUID):Void</Item>
3910 <Item>System.Int32.ToString(System.String)</Item>
3911 <Item>System.Int32.ToString(System.String,System.IFormatProvider)</Item>
3912 </Issue>
3913 <Issue>
3914 <Item>AgentAssetUpload.HandleUploadPacket(AssetUploadRequestPacket, LLUUID):Void</Item>
3915 <Item>System.Int32.ToString(System.String)</Item>
3916 <Item>System.Int32.ToString(System.String,System.IFormatProvider)</Item>
3917 </Issue>
3918 </Message>
3919 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
3920 <Issue>
3921 <Item>'assetID'</Item>
3922 <Item>AgentAssetUpload.HandleUploadPacket(AssetUploadRequestPacket, LLUUID):Void</Item>
3923 </Issue>
3924 <Issue>
3925 <Item>'pack'</Item>
3926 <Item>AgentAssetUpload.HandleUploadPacket(AssetUploadRequestPacket, LLUUID):Void</Item>
3927 </Issue>
3928 </Message>
3929 </Messages>
3930 </Member>
3931 <Member Name="HandleXferPacket(libsecondlife.Packets.SendXferPacketPacket):System.Void">
3932 <Messages>
3933 <Message Id="0#xfer" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3934 <Issue Name="Parameter">
3935 <Item>AgentAssetUpload.HandleXferPacket(SendXferPacketPacket):Void</Item>
3936 <Item>xfer</Item>
3937 <Item>xferPacket</Item>
3938 </Issue>
3939 </Message>
3940 <Message Id="Xfer" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
3941 <Issue Name="Member">
3942 <Item>Xfer</Item>
3943 <Item>AgentAssetUpload.HandleXferPacket(SendXferPacketPacket):Void</Item>
3944 </Issue>
3945 </Message>
3946 </Messages>
3947 </Member>
3948 </Members>
3949 </Type>
3950 <Type Name="AssetTransaction">
3951 <Members>
3952 <Member Name=".ctor()">
3953 <Messages>
3954 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
3955 <Issue>
3956 <Item>AssetTransaction.AssetTransaction()</Item>
3957 <Item>UploadComplete</Item>
3958 <Item>System.Boolean</Item>
3959 <Item>false</Item>
3960 </Issue>
3961 </Message>
3962 </Messages>
3963 </Member>
3964 <Member Name="AddToInventory">
3965 <Messages>
3966 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3967 <Issue>
3968 <Item>AddToInventory</Item>
3969 </Issue>
3970 </Message>
3971 </Messages>
3972 </Member>
3973 <Member Name="Asset">
3974 <Messages>
3975 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3976 <Issue>
3977 <Item>Asset</Item>
3978 </Issue>
3979 </Message>
3980 </Messages>
3981 </Member>
3982 <Member Name="InventFolder">
3983 <Messages>
3984 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3985 <Issue>
3986 <Item>InventFolder</Item>
3987 </Issue>
3988 </Message>
3989 </Messages>
3990 </Member>
3991 <Member Name="TransactionID">
3992 <Messages>
3993 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
3994 <Issue>
3995 <Item>TransactionID</Item>
3996 </Issue>
3997 </Message>
3998 </Messages>
3999 </Member>
4000 <Member Name="UploadComplete">
4001 <Messages>
4002 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4003 <Issue>
4004 <Item>UploadComplete</Item>
4005 </Issue>
4006 </Message>
4007 </Messages>
4008 </Member>
4009 <Member Name="XferID">
4010 <Messages>
4011 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4012 <Issue>
4013 <Item>XferID</Item>
4014 </Issue>
4015 </Message>
4016 <Message Id="Xfer" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4017 <Issue Name="Member">
4018 <Item>Xfer</Item>
4019 <Item>AssetTransaction.XferID</Item>
4020 </Issue>
4021 </Message>
4022 </Messages>
4023 </Member>
4024 </Members>
4025 </Type>
4026 <Type Name="Grid">
4027 <Messages>
4028 <Message TypeName="TypeNamesShouldNotMatchNamespaces" Category="Microsoft.Naming" CheckId="CA1724" Created="2007-03-27 04:29:04Z">
4029 <Issue>
4030 <Item>Grid</Item>
4031 <Item>OpenSim.Framework.Grid</Item>
4032 </Issue>
4033 </Message>
4034 </Messages>
4035 <Members>
4036 <Member Name="AssetDll">
4037 <Messages>
4038 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4039 <Issue>
4040 <Item>AssetDll</Item>
4041 </Issue>
4042 </Message>
4043 </Messages>
4044 </Member>
4045 <Member Name="AssetServer">
4046 <Messages>
4047 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4048 <Issue>
4049 <Item>AssetServer</Item>
4050 </Issue>
4051 </Message>
4052 </Messages>
4053 </Member>
4054 <Member Name="GridDll">
4055 <Messages>
4056 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4057 <Issue>
4058 <Item>GridDll</Item>
4059 </Issue>
4060 </Message>
4061 </Messages>
4062 </Member>
4063 <Member Name="GridServer">
4064 <Messages>
4065 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4066 <Issue>
4067 <Item>GridServer</Item>
4068 </Issue>
4069 </Message>
4070 </Messages>
4071 </Member>
4072 <Member Name="Initialise():System.Void">
4073 <Messages>
4074 <Message Id="Initialise" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4075 <Issue Name="Member">
4076 <Item>Initialise</Item>
4077 <Item>Grid.Initialise():Void</Item>
4078 </Issue>
4079 </Message>
4080 </Messages>
4081 </Member>
4082 <Member Name="LoadAssetDll(System.String):OpenSim.Framework.Interfaces.IAssetServer">
4083 <Messages>
4084 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
4085 <Issue>
4086 <Item>Grid.LoadAssetDll(String):IAssetServer</Item>
4087 </Issue>
4088 </Message>
4089 </Messages>
4090 </Member>
4091 <Member Name="LoadGridDll(System.String):OpenSim.Framework.Interfaces.IGridServer">
4092 <Messages>
4093 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
4094 <Issue>
4095 <Item>Grid.LoadGridDll(String):IGridServer</Item>
4096 </Issue>
4097 </Message>
4098 </Messages>
4099 </Member>
4100 </Members>
4101 </Type>
4102 <Type Name="OpenSimApplication">
4103 <Messages>
4104 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4105 <Issue Name="Type">
4106 <Item>Sim</Item>
4107 <Item>OpenSim.OpenSimApplication</Item>
4108 </Issue>
4109 </Message>
4110 </Messages>
4111 <Members>
4112 <Member Name="RemoveClientCircuit(System.UInt32):System.Void">
4113 <Messages>
4114 <Message Id="0#circuitcode" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4115 <Issue Name="Parameter">
4116 <Item>OpenSimApplication.RemoveClientCircuit(UInt32):Void</Item>
4117 <Item>circuitcode</Item>
4118 <Item>circuitcode</Item>
4119 </Issue>
4120 </Message>
4121 </Messages>
4122 </Member>
4123 <Member Name="SendPacketTo(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.UInt32):System.Void">
4124 <Messages>
4125 <Message Id="3#circuitcode" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4126 <Issue Name="Parameter">
4127 <Item>OpenSimApplication.SendPacketTo(Byte[], Int32, SocketFlags, UInt32):Void</Item>
4128 <Item>circuitcode</Item>
4129 <Item>circuitcode</Item>
4130 </Issue>
4131 </Message>
4132 </Messages>
4133 </Member>
4134 <Member Name="StartUp():System.Void">
4135 <Messages>
4136 <Message Id="StartUp" TypeName="CompoundWordsShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1702" Created="2007-03-27 04:29:04Z">
4137 <Issue Name="ShouldBeDiscreteTerm">
4138 <Item>StartUp</Item>
4139 <Item>method</Item>
4140 <Item>StartUp</Item>
4141 <Item>Startup</Item>
4142 </Issue>
4143 </Message>
4144 </Messages>
4145 </Member>
4146 </Members>
4147 </Type>
4148 <Type Name="OpenSimMain">
4149 <Messages>
4150 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4151 <Issue Name="Type">
4152 <Item>Sim</Item>
4153 <Item>OpenSim.OpenSimMain</Item>
4154 </Issue>
4155 </Message>
4156 <Message TypeName="TypesThatOwnDisposableFieldsShouldBeDisposable" Category="Microsoft.Design" CheckId="CA1001" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4157 <Issue>
4158 <Item>OpenSim.OpenSimMain</Item>
4159 <Item>System.Timers.Timer, System.Net.Sockets.Socket</Item>
4160 </Issue>
4161 </Message>
4162 </Messages>
4163 <Members>
4164 <Member Name=".ctor()">
4165 <Messages>
4166 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
4167 <Issue>
4168 <Item>OpenSimMain.OpenSimMain()</Item>
4169 <Item>loginserver</Item>
4170 <Item>System.Boolean</Item>
4171 <Item>false</Item>
4172 </Issue>
4173 <Issue>
4174 <Item>OpenSimMain.OpenSimMain()</Item>
4175 <Item>sandbox</Item>
4176 <Item>System.Boolean</Item>
4177 <Item>false</Item>
4178 </Issue>
4179 </Message>
4180 </Messages>
4181 </Member>
4182 <Member Name="_physicsEngine">
4183 <Messages>
4184 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4185 <Issue>
4186 <Item>_physicsEngine</Item>
4187 </Issue>
4188 </Message>
4189 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
4190 <Issue Name="Member">
4191 <Item>_physicsEngine</Item>
4192 </Issue>
4193 </Message>
4194 </Messages>
4195 </Member>
4196 <Member Name="LoadConfigDll(System.String):OpenSim.Framework.Interfaces.SimConfig">
4197 <Messages>
4198 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
4199 <Issue>
4200 <Item>OpenSimMain.LoadConfigDll(String):SimConfig</Item>
4201 </Issue>
4202 </Message>
4203 </Messages>
4204 </Member>
4205 <Member Name="loginserver">
4206 <Messages>
4207 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4208 <Issue>
4209 <Item>loginserver</Item>
4210 </Issue>
4211 </Message>
4212 <Message Id="loginserver" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4213 <Issue Name="Member">
4214 <Item>loginserver</Item>
4215 <Item>OpenSimMain.loginserver</Item>
4216 </Issue>
4217 </Message>
4218 </Messages>
4219 </Member>
4220 <Member Name="sandbox">
4221 <Messages>
4222 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4223 <Issue>
4224 <Item>sandbox</Item>
4225 </Issue>
4226 </Message>
4227 </Messages>
4228 </Member>
4229 <Member Name="Server">
4230 <Messages>
4231 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4232 <Issue>
4233 <Item>Server</Item>
4234 </Issue>
4235 </Message>
4236 </Messages>
4237 </Member>
4238 <Member Name="StartUp():System.Void">
4239 <Messages>
4240 <Message TypeName="DoNotUseTimersThatPreventPowerStateChanges" Category="Microsoft.Mobility" CheckId="CA1601" Created="2007-03-27 04:29:04Z">
4241 <Issue>
4242 <Item>Timer.set_Interval(Double):Void</Item>
4243 <Item>OpenSimMain.StartUp():Void</Item>
4244 </Issue>
4245 </Message>
4246 <Message Id="System.UInt32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
4247 <Issue>
4248 <Item>OpenSimMain.StartUp():Void</Item>
4249 <Item>System.UInt32.ToString</Item>
4250 <Item>System.UInt32.ToString(System.IFormatProvider)</Item>
4251 </Issue>
4252 <Issue>
4253 <Item>OpenSimMain.StartUp():Void</Item>
4254 <Item>System.UInt32.ToString</Item>
4255 <Item>System.UInt32.ToString(System.IFormatProvider)</Item>
4256 </Issue>
4257 </Message>
4258 </Messages>
4259 </Member>
4260 </Members>
4261 </Type>
4262 <Type Name="OpenSimRoot">
4263 <Messages>
4264 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4265 <Issue Name="Type">
4266 <Item>Sim</Item>
4267 <Item>OpenSim.OpenSimRoot</Item>
4268 </Issue>
4269 </Message>
4270 </Messages>
4271 <Members>
4272 <Member Name=".ctor()">
4273 <Messages>
4274 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
4275 <Issue>
4276 <Item>OpenSimRoot.OpenSimRoot()</Item>
4277 <Item>Sandbox</Item>
4278 <Item>System.Boolean</Item>
4279 <Item>false</Item>
4280 </Issue>
4281 </Message>
4282 </Messages>
4283 </Member>
4284 <Member Name="Application">
4285 <Messages>
4286 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4287 <Issue>
4288 <Item>Application</Item>
4289 </Issue>
4290 </Message>
4291 </Messages>
4292 </Member>
4293 <Member Name="AssetCache">
4294 <Messages>
4295 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4296 <Issue>
4297 <Item>AssetCache</Item>
4298 </Issue>
4299 </Message>
4300 </Messages>
4301 </Member>
4302 <Member Name="Cfg">
4303 <Messages>
4304 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4305 <Issue>
4306 <Item>Cfg</Item>
4307 </Issue>
4308 </Message>
4309 <Message Id="Cfg" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4310 <Issue Name="Member">
4311 <Item>Cfg</Item>
4312 <Item>OpenSimRoot.Cfg</Item>
4313 </Issue>
4314 </Message>
4315 </Messages>
4316 </Member>
4317 <Member Name="ClientThreads">
4318 <Messages>
4319 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4320 <Issue>
4321 <Item>ClientThreads</Item>
4322 </Issue>
4323 </Message>
4324 </Messages>
4325 </Member>
4326 <Member Name="GridServers">
4327 <Messages>
4328 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4329 <Issue>
4330 <Item>GridServers</Item>
4331 </Issue>
4332 </Message>
4333 </Messages>
4334 </Member>
4335 <Member Name="HttpServer">
4336 <Messages>
4337 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4338 <Issue>
4339 <Item>HttpServer</Item>
4340 </Issue>
4341 </Message>
4342 </Messages>
4343 </Member>
4344 <Member Name="InventoryCache">
4345 <Messages>
4346 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4347 <Issue>
4348 <Item>InventoryCache</Item>
4349 </Issue>
4350 </Message>
4351 </Messages>
4352 </Member>
4353 <Member Name="LocalWorld">
4354 <Messages>
4355 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4356 <Issue>
4357 <Item>LocalWorld</Item>
4358 </Issue>
4359 </Message>
4360 </Messages>
4361 </Member>
4362 <Member Name="Sandbox">
4363 <Messages>
4364 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4365 <Issue>
4366 <Item>Sandbox</Item>
4367 </Issue>
4368 </Message>
4369 </Messages>
4370 </Member>
4371 <Member Name="StartUp():System.Void">
4372 <Messages>
4373 <Message Id="StartUp" TypeName="CompoundWordsShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1702" Created="2007-03-27 04:29:04Z">
4374 <Issue Name="ShouldBeDiscreteTerm">
4375 <Item>StartUp</Item>
4376 <Item>method</Item>
4377 <Item>StartUp</Item>
4378 <Item>Startup</Item>
4379 </Issue>
4380 </Message>
4381 </Messages>
4382 </Member>
4383 <Member Name="startuptime">
4384 <Messages>
4385 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4386 <Issue>
4387 <Item>startuptime</Item>
4388 </Issue>
4389 </Message>
4390 <Message Id="startuptime" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4391 <Issue Name="Member">
4392 <Item>startuptime</Item>
4393 <Item>OpenSimRoot.startuptime</Item>
4394 </Issue>
4395 </Message>
4396 </Messages>
4397 </Member>
4398 </Members>
4399 </Type>
4400 <Type Name="QueItem">
4401 <Messages>
4402 <Message Id="Que" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4403 <Issue Name="Type">
4404 <Item>Que</Item>
4405 <Item>OpenSim.QueItem</Item>
4406 </Issue>
4407 </Message>
4408 </Messages>
4409 <Members>
4410 <Member Name="Incoming">
4411 <Messages>
4412 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4413 <Issue>
4414 <Item>Incoming</Item>
4415 </Issue>
4416 </Message>
4417 </Messages>
4418 </Member>
4419 <Member Name="Packet">
4420 <Messages>
4421 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4422 <Issue>
4423 <Item>Packet</Item>
4424 </Issue>
4425 </Message>
4426 </Messages>
4427 </Member>
4428 </Members>
4429 </Type>
4430 <Type Name="SimClient">
4431 <Messages>
4432 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4433 <Issue Name="Type">
4434 <Item>Sim</Item>
4435 <Item>OpenSim.SimClient</Item>
4436 </Issue>
4437 </Message>
4438 <Message TypeName="TypesThatOwnDisposableFieldsShouldBeDisposable" Category="Microsoft.Design" CheckId="CA1001" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4439 <Issue>
4440 <Item>OpenSim.SimClient</Item>
4441 <Item>System.Timers.Timer</Item>
4442 </Issue>
4443 </Message>
4444 </Messages>
4445 <Members>
4446 <Member Name=".ctor(System.Net.EndPoint,libsecondlife.Packets.UseCircuitCodePacket)">
4447 <Messages>
4448 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
4449 <Issue>
4450 <Item>SimClient.SimClient(EndPoint, UseCircuitCodePacket)</Item>
4451 <Item>Sequence</Item>
4452 <Item>System.UInt32</Item>
4453 <Item>0</Item>
4454 </Issue>
4455 <Issue>
4456 <Item>SimClient.SimClient(EndPoint, UseCircuitCodePacket)</Item>
4457 <Item>debug</Item>
4458 <Item>System.Boolean</Item>
4459 <Item>false</Item>
4460 </Issue>
4461 </Message>
4462 <Message TypeName="DoNotUseTimersThatPreventPowerStateChanges" Category="Microsoft.Mobility" CheckId="CA1601" Created="2007-03-27 04:29:04Z">
4463 <Issue>
4464 <Item>Timer.Timer(Double)</Item>
4465 <Item>SimClient.SimClient(EndPoint, UseCircuitCodePacket)</Item>
4466 </Issue>
4467 </Message>
4468 <Message Id="1#initialcirpack" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4469 <Issue Name="Parameter">
4470 <Item>SimClient.SimClient(EndPoint, UseCircuitCodePacket)</Item>
4471 <Item>initialcirpack</Item>
4472 <Item>initialcirpack</Item>
4473 </Issue>
4474 </Message>
4475 </Messages>
4476 </Member>
4477 <Member Name="AgentID">
4478 <Messages>
4479 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4480 <Issue>
4481 <Item>AgentID</Item>
4482 </Issue>
4483 </Message>
4484 </Messages>
4485 </Member>
4486 <Member Name="CircuitCode">
4487 <Messages>
4488 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4489 <Issue>
4490 <Item>CircuitCode</Item>
4491 </Issue>
4492 </Message>
4493 </Messages>
4494 </Member>
4495 <Member Name="ClientAvatar">
4496 <Messages>
4497 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4498 <Issue>
4499 <Item>ClientAvatar</Item>
4500 </Issue>
4501 </Message>
4502 </Messages>
4503 </Member>
4504 <Member Name="InPacket(libsecondlife.Packets.Packet):System.Void">
4505 <Messages>
4506 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
4507 <Issue Name="Parameter">
4508 <Item>NewPack</Item>
4509 </Issue>
4510 </Message>
4511 </Messages>
4512 </Member>
4513 <Member Name="newAssetFolder">
4514 <Messages>
4515 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
4516 <Issue>
4517 <Item>SimClient.newAssetFolder</Item>
4518 </Issue>
4519 </Message>
4520 </Messages>
4521 </Member>
4522 <Member Name="OutPacket(libsecondlife.Packets.Packet):System.Void">
4523 <Messages>
4524 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
4525 <Issue Name="Parameter">
4526 <Item>NewPack</Item>
4527 </Issue>
4528 </Message>
4529 </Messages>
4530 </Member>
4531 <Member Name="ProcessInPacket(libsecondlife.Packets.Packet):System.Void">
4532 <Messages>
4533 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
4534 <Issue Name="Parameter">
4535 <Item>Pack</Item>
4536 </Issue>
4537 </Message>
4538 <Message Id="wear" TypeName="RemoveUnusedLocals" Category="Microsoft.Performance" CheckId="CA1804" Created="2007-03-27 04:29:04Z">
4539 <Issue>
4540 <Item>SimClient.ProcessInPacket(Packet):Void</Item>
4541 <Item>wear</Item>
4542 <Item>libsecondlife.Packets.AgentIsNowWearingPacket</Item>
4543 </Issue>
4544 </Message>
4545 <Message TypeName="TestForEmptyStringsUsingStringLength" Category="Microsoft.Performance" CheckId="CA1820" Created="2007-03-27 04:29:04Z">
4546 <Issue Name="IsNullOrEmpty">
4547 <Item>op_Equality</Item>
4548 <Item>""</Item>
4549 <Item>SimClient.ProcessInPacket(Packet):Void</Item>
4550 </Issue>
4551 </Message>
4552 </Messages>
4553 </Member>
4554 <Member Name="ProcessOutPacket(libsecondlife.Packets.Packet):System.Void">
4555 <Messages>
4556 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
4557 <Issue>
4558 <Item>SimClient.ProcessOutPacket(Packet):Void</Item>
4559 <Item>System.Exception</Item>
4560 </Issue>
4561 </Message>
4562 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
4563 <Issue Name="Parameter">
4564 <Item>Pack</Item>
4565 </Issue>
4566 </Message>
4567 </Messages>
4568 </Member>
4569 <Member Name="SecureSessionID">
4570 <Messages>
4571 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4572 <Issue>
4573 <Item>SecureSessionID</Item>
4574 </Issue>
4575 </Message>
4576 </Messages>
4577 </Member>
4578 <Member Name="SessionID">
4579 <Messages>
4580 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4581 <Issue>
4582 <Item>SessionID</Item>
4583 </Issue>
4584 </Message>
4585 </Messages>
4586 </Member>
4587 <Member Name="userEP">
4588 <Messages>
4589 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4590 <Issue>
4591 <Item>userEP</Item>
4592 </Issue>
4593 </Message>
4594 </Messages>
4595 </Member>
4596 </Members>
4597 </Type>
4598 <Type Name="SimConsole">
4599 <Messages>
4600 <Message TypeName="ComVisibleTypeBaseTypesShouldBeComVisible" Category="Microsoft.Interoperability" CheckId="CA1405" Created="2007-03-27 04:29:04Z">
4601 <Issue>
4602 <Item>OpenSim.SimConsole</Item>
4603 <Item> OpenSim.Framework.Console.ConsoleBase</Item>
4604 </Issue>
4605 </Message>
4606 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4607 <Issue Name="Type">
4608 <Item>Sim</Item>
4609 <Item>OpenSim.SimConsole</Item>
4610 </Issue>
4611 </Message>
4612 </Messages>
4613 <Members>
4614 <Member Name=".ctor(OpenSim.Framework.Console.ConsoleBase+ConsoleType,System.String,System.Int32)">
4615 <Messages>
4616 <Message Id="0#constype" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4617 <Issue Name="Parameter">
4618 <Item>SimConsole.SimConsole(ConsoleType, String, Int32)</Item>
4619 <Item>constype</Item>
4620 <Item>constype</Item>
4621 </Issue>
4622 </Message>
4623 <Message Id="1#sparam" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4624 <Issue Name="Parameter">
4625 <Item>SimConsole.SimConsole(ConsoleType, String, Int32)</Item>
4626 <Item>sparam</Item>
4627 <Item>sparam</Item>
4628 </Issue>
4629 </Message>
4630 <Message Id="2#iparam" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4631 <Issue Name="Parameter">
4632 <Item>SimConsole.SimConsole(ConsoleType, String, Int32)</Item>
4633 <Item>iparam</Item>
4634 <Item>iparam</Item>
4635 </Issue>
4636 </Message>
4637 <Message Id="iparam" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4638 <Issue>
4639 <Item>iparam</Item>
4640 <Item>SimConsole.SimConsole(ConsoleType, String, Int32)</Item>
4641 </Issue>
4642 </Message>
4643 <Message Id="sparam" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4644 <Issue>
4645 <Item>sparam</Item>
4646 <Item>SimConsole.SimConsole(ConsoleType, String, Int32)</Item>
4647 </Issue>
4648 </Message>
4649 </Messages>
4650 </Member>
4651 <Member Name="CmdPrompt(System.String,System.String):System.String">
4652 <Messages>
4653 <Message TypeName="TestForEmptyStringsUsingStringLength" Category="Microsoft.Performance" CheckId="CA1820" Created="2007-03-27 04:29:04Z">
4654 <Issue Name="IsNullOrEmpty">
4655 <Item>op_Equality</Item>
4656 <Item>""</Item>
4657 <Item>SimConsole.CmdPrompt(String, String):String</Item>
4658 </Issue>
4659 </Message>
4660 </Messages>
4661 </Member>
4662 <Member Name="ConsType">
4663 <Messages>
4664 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
4665 <Issue>
4666 <Item>SimConsole.ConsType</Item>
4667 </Issue>
4668 </Message>
4669 </Messages>
4670 </Member>
4671 <Member Name="MainConsolePrompt():System.Void">
4672 <Messages>
4673 <Message Id="System.UInt64.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
4674 <Issue>
4675 <Item>SimConsole.MainConsolePrompt():Void</Item>
4676 <Item>System.UInt64.ToString</Item>
4677 <Item>System.UInt64.ToString(System.IFormatProvider)</Item>
4678 </Issue>
4679 </Message>
4680 </Messages>
4681 </Member>
4682 <Member Name="RunCmd(System.String,System.String[]):System.Object">
4683 <Messages>
4684 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
4685 <Issue>
4686 <Item>'cmdparams'</Item>
4687 <Item>SimConsole.RunCmd(String, String[]):Object</Item>
4688 </Issue>
4689 </Message>
4690 </Messages>
4691 </Member>
4692 <Member Name="ShowCommands(System.String):System.Void">
4693 <Messages>
4694 <Message Id="System.String.Format(System.String,System.Object[])" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
4695 <Issue>
4696 <Item>SimConsole.ShowCommands(String):Void</Item>
4697 <Item>System.String.Format(System.String,System.Object[])</Item>
4698 <Item>System.String.Format(System.IFormatProvider,System.String,System.Object[])</Item>
4699 </Issue>
4700 <Issue>
4701 <Item>SimConsole.ShowCommands(String):Void</Item>
4702 <Item>System.String.Format(System.String,System.Object[])</Item>
4703 <Item>System.String.Format(System.IFormatProvider,System.String,System.Object[])</Item>
4704 </Issue>
4705 </Message>
4706 </Messages>
4707 </Member>
4708 </Members>
4709 </Type>
4710 <Type Name="VersionInfo">
4711 <Members>
4712 <Member Name="Version">
4713 <Messages>
4714 <Message TypeName="NonConstantFieldsShouldNotBeVisible" Category="Microsoft.Usage" CheckId="CA2211" Created="2007-03-27 04:29:04Z">
4715 <Issue>
4716 <Item>Version</Item>
4717 </Issue>
4718 </Message>
4719 </Messages>
4720 </Member>
4721 </Members>
4722 </Type>
4723 </Types>
4724 </Namespace>
4725 <Namespace Name="OpenSim.Assets">
4726 <Types>
4727 <Type Name="AssetCache">
4728 <Members>
4729 <Member Name="AddTextureRequest(OpenSim.SimClient,libsecondlife.LLUUID):System.Void">
4730 <Messages>
4731 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
4732 <Issue Name="ParameterId">
4733 <Item>ID</Item>
4734 <Item>imageID</Item>
4735 <Item>Id</Item>
4736 </Issue>
4737 </Message>
4738 </Messages>
4739 </Member>
4740 <Member Name="AssetRequests">
4741 <Messages>
4742 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4743 <Issue>
4744 <Item>AssetRequests</Item>
4745 </Issue>
4746 </Message>
4747 <Message TypeName="DoNotExposeGenericLists" Category="Microsoft.Design" CheckId="CA1002" Created="2007-03-27 04:29:04Z">
4748 <Issue>
4749 <Item>System.Collections.Generic.List`1&lt;OpenSim.Assets.AssetRequest&gt;</Item>
4750 <Item>AssetCache.AssetRequests</Item>
4751 </Issue>
4752 </Message>
4753 </Messages>
4754 </Member>
4755 <Member Name="Assets">
4756 <Messages>
4757 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4758 <Issue>
4759 <Item>Assets</Item>
4760 </Issue>
4761 </Message>
4762 </Messages>
4763 </Member>
4764 <Member Name="CloneAsset(libsecondlife.LLUUID,OpenSim.Assets.AssetInfo):OpenSim.Assets.AssetInfo">
4765 <Messages>
4766 <Message TypeName="ConsiderPassingBaseTypesAsParameters" Category="Microsoft.Design" CheckId="CA1011" Created="2007-03-27 04:29:04Z">
4767 <Issue>
4768 <Item>sourceAsset</Item>
4769 <Item>AssetCache.CloneAsset(LLUUID, AssetInfo):AssetInfo</Item>
4770 <Item>OpenSim.Assets.AssetInfo</Item>
4771 <Item>OpenSim.Framework.Assets.AssetBase</Item>
4772 </Issue>
4773 </Message>
4774 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4775 <Issue>
4776 <Item>AssetCache.CloneAsset(LLUUID, AssetInfo):AssetInfo</Item>
4777 </Issue>
4778 </Message>
4779 <Message Id="newOwner" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4780 <Issue>
4781 <Item>newOwner</Item>
4782 <Item>AssetCache.CloneAsset(LLUUID, AssetInfo):AssetInfo</Item>
4783 </Issue>
4784 </Message>
4785 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
4786 <Issue>
4787 <Item>'sourceAsset'</Item>
4788 <Item>AssetCache.CloneAsset(LLUUID, AssetInfo):AssetInfo</Item>
4789 </Issue>
4790 </Message>
4791 </Messages>
4792 </Member>
4793 <Member Name="CloneImage(libsecondlife.LLUUID,OpenSim.Assets.TextureImage):OpenSim.Assets.TextureImage">
4794 <Messages>
4795 <Message TypeName="ConsiderPassingBaseTypesAsParameters" Category="Microsoft.Design" CheckId="CA1011" Created="2007-03-27 04:29:04Z">
4796 <Issue>
4797 <Item>source</Item>
4798 <Item>AssetCache.CloneImage(LLUUID, TextureImage):TextureImage</Item>
4799 <Item>OpenSim.Assets.TextureImage</Item>
4800 <Item>OpenSim.Framework.Assets.AssetBase</Item>
4801 </Issue>
4802 </Message>
4803 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4804 <Issue>
4805 <Item>AssetCache.CloneImage(LLUUID, TextureImage):TextureImage</Item>
4806 </Issue>
4807 </Message>
4808 <Message Id="newOwner" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
4809 <Issue>
4810 <Item>newOwner</Item>
4811 <Item>AssetCache.CloneImage(LLUUID, TextureImage):TextureImage</Item>
4812 </Issue>
4813 </Message>
4814 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
4815 <Issue>
4816 <Item>'source'</Item>
4817 <Item>AssetCache.CloneImage(LLUUID, TextureImage):TextureImage</Item>
4818 </Issue>
4819 </Message>
4820 </Messages>
4821 </Member>
4822 <Member Name="CreateNewInventorySet(libsecondlife.LLUUID):OpenSim.Framework.Assets.AssetBase[]">
4823 <Messages>
4824 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
4825 <Issue Name="ParameterId">
4826 <Item>ID</Item>
4827 <Item>agentID</Item>
4828 <Item>Id</Item>
4829 </Issue>
4830 </Message>
4831 </Messages>
4832 </Member>
4833 <Member Name="GetAsset(libsecondlife.LLUUID):OpenSim.Framework.Assets.AssetBase">
4834 <Messages>
4835 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
4836 <Issue Name="ParameterId">
4837 <Item>ID</Item>
4838 <Item>assetID</Item>
4839 <Item>Id</Item>
4840 </Issue>
4841 </Message>
4842 </Messages>
4843 </Member>
4844 <Member Name="RequestedAssets">
4845 <Messages>
4846 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4847 <Issue>
4848 <Item>RequestedAssets</Item>
4849 </Issue>
4850 </Message>
4851 </Messages>
4852 </Member>
4853 <Member Name="RequestedTextures">
4854 <Messages>
4855 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4856 <Issue>
4857 <Item>RequestedTextures</Item>
4858 </Issue>
4859 </Message>
4860 </Messages>
4861 </Member>
4862 <Member Name="RunAssetManager():System.Void">
4863 <Messages>
4864 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
4865 <Issue>
4866 <Item>AssetCache.RunAssetManager():Void</Item>
4867 <Item>System.Exception</Item>
4868 </Issue>
4869 </Message>
4870 </Messages>
4871 </Member>
4872 <Member Name="TextureRequests">
4873 <Messages>
4874 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4875 <Issue>
4876 <Item>TextureRequests</Item>
4877 </Issue>
4878 </Message>
4879 <Message TypeName="DoNotExposeGenericLists" Category="Microsoft.Design" CheckId="CA1002" Created="2007-03-27 04:29:04Z">
4880 <Issue>
4881 <Item>System.Collections.Generic.List`1&lt;OpenSim.Assets.AssetRequest&gt;</Item>
4882 <Item>AssetCache.TextureRequests</Item>
4883 </Issue>
4884 </Message>
4885 </Messages>
4886 </Member>
4887 <Member Name="Textures">
4888 <Messages>
4889 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4890 <Issue>
4891 <Item>Textures</Item>
4892 </Issue>
4893 </Message>
4894 </Messages>
4895 </Member>
4896 </Members>
4897 </Type>
4898 <Type Name="AssetInfo">
4899 <Messages>
4900 <Message TypeName="ComVisibleTypeBaseTypesShouldBeComVisible" Category="Microsoft.Interoperability" CheckId="CA1405" Created="2007-03-27 04:29:04Z">
4901 <Issue>
4902 <Item>OpenSim.Assets.AssetInfo</Item>
4903 <Item> OpenSim.Framework.Assets.AssetBase</Item>
4904 </Issue>
4905 </Message>
4906 </Messages>
4907 <Members>
4908 <Member Name=".ctor(OpenSim.Framework.Assets.AssetBase)">
4909 <Messages>
4910 <Message Id="0#a" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4911 <Issue Name="Parameter">
4912 <Item>AssetInfo.AssetInfo(AssetBase)</Item>
4913 <Item>a</Item>
4914 <Item>aBase</Item>
4915 </Issue>
4916 </Message>
4917 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
4918 <Issue>
4919 <Item>'aBase'</Item>
4920 <Item>AssetInfo.AssetInfo(AssetBase)</Item>
4921 </Issue>
4922 </Message>
4923 </Messages>
4924 </Member>
4925 </Members>
4926 </Type>
4927 <Type Name="AssetRequest">
4928 <Members>
4929 <Member Name=".ctor()">
4930 <Messages>
4931 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
4932 <Issue>
4933 <Item>AssetRequest.AssetRequest()</Item>
4934 <Item>DataPointer</Item>
4935 <Item>System.Int64</Item>
4936 <Item>0</Item>
4937 </Issue>
4938 <Issue>
4939 <Item>AssetRequest.AssetRequest()</Item>
4940 <Item>NumPackets</Item>
4941 <Item>System.Int32</Item>
4942 <Item>0</Item>
4943 </Issue>
4944 <Issue>
4945 <Item>AssetRequest.AssetRequest()</Item>
4946 <Item>PacketCounter</Item>
4947 <Item>System.Int32</Item>
4948 <Item>0</Item>
4949 </Issue>
4950 </Message>
4951 </Messages>
4952 </Member>
4953 <Member Name="AssetInf">
4954 <Messages>
4955 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4956 <Issue>
4957 <Item>AssetInf</Item>
4958 </Issue>
4959 </Message>
4960 </Messages>
4961 </Member>
4962 <Member Name="DataPointer">
4963 <Messages>
4964 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4965 <Issue>
4966 <Item>DataPointer</Item>
4967 </Issue>
4968 </Message>
4969 </Messages>
4970 </Member>
4971 <Member Name="ImageInfo">
4972 <Messages>
4973 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4974 <Issue>
4975 <Item>ImageInfo</Item>
4976 </Issue>
4977 </Message>
4978 </Messages>
4979 </Member>
4980 <Member Name="IsTextureRequest">
4981 <Messages>
4982 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4983 <Issue>
4984 <Item>IsTextureRequest</Item>
4985 </Issue>
4986 </Message>
4987 </Messages>
4988 </Member>
4989 <Member Name="NumPackets">
4990 <Messages>
4991 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
4992 <Issue>
4993 <Item>NumPackets</Item>
4994 </Issue>
4995 </Message>
4996 <Message Id="Num" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
4997 <Issue Name="Member">
4998 <Item>Num</Item>
4999 <Item>AssetRequest.NumPackets</Item>
5000 </Issue>
5001 </Message>
5002 </Messages>
5003 </Member>
5004 <Member Name="PacketCounter">
5005 <Messages>
5006 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5007 <Issue>
5008 <Item>PacketCounter</Item>
5009 </Issue>
5010 </Message>
5011 </Messages>
5012 </Member>
5013 <Member Name="RequestAssetID">
5014 <Messages>
5015 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5016 <Issue>
5017 <Item>RequestAssetID</Item>
5018 </Issue>
5019 </Message>
5020 </Messages>
5021 </Member>
5022 <Member Name="RequestUser">
5023 <Messages>
5024 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5025 <Issue>
5026 <Item>RequestUser</Item>
5027 </Issue>
5028 </Message>
5029 </Messages>
5030 </Member>
5031 <Member Name="TransferRequestID">
5032 <Messages>
5033 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5034 <Issue>
5035 <Item>TransferRequestID</Item>
5036 </Issue>
5037 </Message>
5038 </Messages>
5039 </Member>
5040 </Members>
5041 </Type>
5042 <Type Name="InventoryCache">
5043 <Members>
5044 <Member Name="AddNewInventoryItem(OpenSim.SimClient,libsecondlife.LLUUID,OpenSim.Framework.Assets.AssetBase):libsecondlife.LLUUID">
5045 <Messages>
5046 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
5047 <Issue Name="ParameterId">
5048 <Item>ID</Item>
5049 <Item>folderID</Item>
5050 <Item>Id</Item>
5051 </Issue>
5052 </Message>
5053 </Messages>
5054 </Member>
5055 <Member Name="ClientLeaving(libsecondlife.LLUUID):System.Void">
5056 <Messages>
5057 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
5058 <Issue Name="ParameterId">
5059 <Item>ID</Item>
5060 <Item>clientID</Item>
5061 <Item>Id</Item>
5062 </Issue>
5063 </Message>
5064 </Messages>
5065 </Member>
5066 <Member Name="CreateNewInventoryFolder(OpenSim.SimClient,libsecondlife.LLUUID):System.Boolean">
5067 <Messages>
5068 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
5069 <Issue Name="ParameterId">
5070 <Item>ID</Item>
5071 <Item>folderID</Item>
5072 <Item>Id</Item>
5073 </Issue>
5074 </Message>
5075 </Messages>
5076 </Member>
5077 <Member Name="CreateNewInventoryFolder(OpenSim.SimClient,libsecondlife.LLUUID,System.UInt16):System.Boolean">
5078 <Messages>
5079 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
5080 <Issue Name="ParameterId">
5081 <Item>ID</Item>
5082 <Item>folderID</Item>
5083 <Item>Id</Item>
5084 </Issue>
5085 </Message>
5086 </Messages>
5087 </Member>
5088 <Member Name="FetchInventory(OpenSim.SimClient,libsecondlife.Packets.FetchInventoryPacket):System.Void">
5089 <Messages>
5090 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5091 <Issue Name="Parameter">
5092 <Item>FetchItems</Item>
5093 </Issue>
5094 </Message>
5095 </Messages>
5096 </Member>
5097 <Member Name="FetchInventoryDescendents(OpenSim.SimClient,libsecondlife.Packets.FetchInventoryDescendentsPacket):System.Void">
5098 <Messages>
5099 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5100 <Issue Name="Parameter">
5101 <Item>FetchDescend</Item>
5102 </Issue>
5103 </Message>
5104 </Messages>
5105 </Member>
5106 <Member Name="GetAgentsInventory(libsecondlife.LLUUID):OpenSim.Framework.Inventory.AgentInventory">
5107 <Messages>
5108 <Message Id="0#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
5109 <Issue Name="ParameterId">
5110 <Item>ID</Item>
5111 <Item>agentID</Item>
5112 <Item>Id</Item>
5113 </Issue>
5114 </Message>
5115 </Messages>
5116 </Member>
5117 <Member Name="UpdateInventoryItem(OpenSim.SimClient,libsecondlife.LLUUID,OpenSim.Framework.Assets.AssetBase):System.Boolean">
5118 <Messages>
5119 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
5120 <Issue Name="ParameterId">
5121 <Item>ID</Item>
5122 <Item>itemID</Item>
5123 <Item>Id</Item>
5124 </Issue>
5125 </Message>
5126 </Messages>
5127 </Member>
5128 </Members>
5129 </Type>
5130 <Type Name="TextureImage">
5131 <Messages>
5132 <Message TypeName="ComVisibleTypeBaseTypesShouldBeComVisible" Category="Microsoft.Interoperability" CheckId="CA1405" Created="2007-03-27 04:29:04Z">
5133 <Issue>
5134 <Item>OpenSim.Assets.TextureImage</Item>
5135 <Item> OpenSim.Framework.Assets.AssetBase</Item>
5136 </Issue>
5137 </Message>
5138 </Messages>
5139 <Members>
5140 <Member Name=".ctor(OpenSim.Framework.Assets.AssetBase)">
5141 <Messages>
5142 <Message Id="0#a" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5143 <Issue Name="Parameter">
5144 <Item>TextureImage.TextureImage(AssetBase)</Item>
5145 <Item>a</Item>
5146 <Item>aBase</Item>
5147 </Issue>
5148 </Message>
5149 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
5150 <Issue>
5151 <Item>'aBase'</Item>
5152 <Item>TextureImage.TextureImage(AssetBase)</Item>
5153 </Issue>
5154 </Message>
5155 </Messages>
5156 </Member>
5157 </Members>
5158 </Type>
5159 </Types>
5160 </Namespace>
5161 <Namespace Name="OpenSim.CAPS">
5162 <Types>
5163 <Type Name="SimCAPSHTTPServer">
5164 <Messages>
5165 <Message Id="Sim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5166 <Issue Name="Type">
5167 <Item>Sim</Item>
5168 <Item>OpenSim.CAPS.SimCAPSHTTPServer</Item>
5169 </Issue>
5170 </Message>
5171 <Message TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
5172 <Issue Name="Type">
5173 <Item>SimCAPSHTTPServer</Item>
5174 </Issue>
5175 </Message>
5176 <Message TypeName="TypesThatOwnDisposableFieldsShouldBeDisposable" Category="Microsoft.Design" CheckId="CA1001" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
5177 <Issue>
5178 <Item>OpenSim.CAPS.SimCAPSHTTPServer</Item>
5179 <Item>System.Net.HttpListener</Item>
5180 </Issue>
5181 </Message>
5182 </Messages>
5183 <Members>
5184 <Member Name="HandleRequest(System.Object):System.Void">
5185 <Messages>
5186 <Message Id="0#stateinfo" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5187 <Issue Name="Parameter">
5188 <Item>SimCAPSHTTPServer.HandleRequest(Object):Void</Item>
5189 <Item>stateinfo</Item>
5190 <Item>stateinfo</Item>
5191 </Issue>
5192 </Message>
5193 </Messages>
5194 </Member>
5195 <Member Name="HTTPD">
5196 <Messages>
5197 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5198 <Issue>
5199 <Item>HTTPD</Item>
5200 </Issue>
5201 </Message>
5202 </Messages>
5203 </Member>
5204 <Member Name="Listener">
5205 <Messages>
5206 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5207 <Issue>
5208 <Item>Listener</Item>
5209 </Issue>
5210 </Message>
5211 </Messages>
5212 </Member>
5213 <Member Name="LoadAdminPage():System.Void">
5214 <Messages>
5215 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
5216 <Issue>
5217 <Item>SimCAPSHTTPServer.LoadAdminPage():Void</Item>
5218 <Item>System.Exception</Item>
5219 </Issue>
5220 </Message>
5221 </Messages>
5222 </Member>
5223 <Member Name="ParseLLSDXML(System.String):System.String">
5224 <Messages>
5225 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
5226 <Issue>
5227 <Item>SimCAPSHTTPServer.ParseLLSDXML(String):String</Item>
5228 </Issue>
5229 </Message>
5230 <Message Id="requestBody" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
5231 <Issue>
5232 <Item>requestBody</Item>
5233 <Item>SimCAPSHTTPServer.ParseLLSDXML(String):String</Item>
5234 </Issue>
5235 </Message>
5236 </Messages>
5237 </Member>
5238 <Member Name="ParseREST(System.String,System.String,System.String):System.String">
5239 <Messages>
5240 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
5241 <Issue>
5242 <Item>SimCAPSHTTPServer.ParseREST(String, String, String):String</Item>
5243 <Item>System.Exception</Item>
5244 </Issue>
5245 </Message>
5246 <Message Id="System.String.Format(System.String,System.Object[])" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5247 <Issue>
5248 <Item>SimCAPSHTTPServer.ParseREST(String, String, String):String</Item>
5249 <Item>System.String.Format(System.String,System.Object[])</Item>
5250 <Item>System.String.Format(System.IFormatProvider,System.String,System.Object[])</Item>
5251 </Issue>
5252 </Message>
5253 </Messages>
5254 </Member>
5255 <Member Name="ParseXMLRPC(System.String):System.String">
5256 <Messages>
5257 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
5258 <Issue>
5259 <Item>SimCAPSHTTPServer.ParseXMLRPC(String):String</Item>
5260 <Item>System.Exception</Item>
5261 </Issue>
5262 </Message>
5263 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="NonBreaking">
5264 <Issue>
5265 <Item>SimCAPSHTTPServer.ParseXMLRPC(String):String</Item>
5266 </Issue>
5267 </Message>
5268 <Message Id="System.Convert.ToUInt32(System.Object)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5269 <Issue>
5270 <Item>SimCAPSHTTPServer.ParseXMLRPC(String):String</Item>
5271 <Item>System.Convert.ToUInt32(System.Object)</Item>
5272 <Item>System.Convert.ToUInt32(System.Object,System.IFormatProvider)</Item>
5273 </Issue>
5274 </Message>
5275 </Messages>
5276 </Member>
5277 <Member Name="StartHTTP():System.Void">
5278 <Messages>
5279 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
5280 <Issue>
5281 <Item>SimCAPSHTTPServer.StartHTTP():Void</Item>
5282 <Item>System.Exception</Item>
5283 </Issue>
5284 </Message>
5285 <Message Id="Member" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
5286 <Issue Name="Member">
5287 <Item>SimCAPSHTTPServer.StartHTTP():Void</Item>
5288 </Issue>
5289 </Message>
5290 </Messages>
5291 </Member>
5292 </Members>
5293 </Type>
5294 </Types>
5295 </Namespace>
5296 <Namespace Name="OpenSim.types">
5297 <Types>
5298 <Type Name="Mesh">
5299 <Members>
5300 <Member Name="mesh">
5301 <Messages>
5302 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5303 <Issue>
5304 <Item>mesh</Item>
5305 </Issue>
5306 </Message>
5307 <Message TypeName="DoNotExposeGenericLists" Category="Microsoft.Design" CheckId="CA1002" Created="2007-03-27 04:29:04Z">
5308 <Issue>
5309 <Item>System.Collections.Generic.List`1&lt;OpenSim.types.Triangle&gt;</Item>
5310 <Item>Mesh.mesh</Item>
5311 </Issue>
5312 </Message>
5313 </Messages>
5314 </Member>
5315 <Member Name="op_Addition(OpenSim.types.Mesh,OpenSim.types.Mesh):OpenSim.types.Mesh">
5316 <Messages>
5317 <Message Id="0#a" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5318 <Issue Name="ParameterOneLetter">
5319 <Item>Mesh.op_Addition(Mesh, Mesh):Mesh</Item>
5320 <Item>a</Item>
5321 </Issue>
5322 </Message>
5323 <Message Id="1#b" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5324 <Issue Name="ParameterOneLetter">
5325 <Item>Mesh.op_Addition(Mesh, Mesh):Mesh</Item>
5326 <Item>b</Item>
5327 </Issue>
5328 </Message>
5329 <Message TypeName="OperatorOverloadsHaveNamedAlternates" Category="Microsoft.Usage" CheckId="CA2225" Created="2007-03-27 04:29:04Z">
5330 <Issue>
5331 <Item>Add</Item>
5332 <Item>Mesh.op_Addition(Mesh, Mesh):Mesh</Item>
5333 </Issue>
5334 </Message>
5335 <Message TypeName="OverloadOperatorEqualsOnOverloadingAddAndSubtract" Category="Microsoft.Design" CheckId="CA1013" Created="2007-03-27 04:29:04Z">
5336 <Issue>
5337 <Item>Mesh</Item>
5338 <Item>Mesh.op_Addition(Mesh, Mesh):Mesh</Item>
5339 </Issue>
5340 </Message>
5341 </Messages>
5342 </Member>
5343 </Members>
5344 </Type>
5345 <Type Name="Triangle">
5346 <Members>
5347 <Member Name=".ctor(Axiom.MathLib.Vector3,Axiom.MathLib.Vector3,Axiom.MathLib.Vector3)">
5348 <Messages>
5349 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5350 <Issue Name="Parameter">
5351 <Item>A</Item>
5352 </Issue>
5353 </Message>
5354 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5355 <Issue Name="Parameter">
5356 <Item>B</Item>
5357 </Issue>
5358 </Message>
5359 <Message Id="2#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5360 <Issue Name="Parameter">
5361 <Item>C</Item>
5362 </Issue>
5363 </Message>
5364 <Message Id="0#A" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5365 <Issue Name="ParameterOneLetter">
5366 <Item>Triangle.Triangle(Vector3, Vector3, Vector3)</Item>
5367 <Item>A</Item>
5368 </Issue>
5369 </Message>
5370 <Message Id="1#B" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5371 <Issue Name="ParameterOneLetter">
5372 <Item>Triangle.Triangle(Vector3, Vector3, Vector3)</Item>
5373 <Item>B</Item>
5374 </Issue>
5375 </Message>
5376 <Message Id="2#C" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5377 <Issue Name="ParameterOneLetter">
5378 <Item>Triangle.Triangle(Vector3, Vector3, Vector3)</Item>
5379 <Item>C</Item>
5380 </Issue>
5381 </Message>
5382 </Messages>
5383 </Member>
5384 </Members>
5385 </Type>
5386 </Types>
5387 </Namespace>
5388 <Namespace Name="OpenSim.UserServer">
5389 <Types>
5390 <Type Name="LocalUserProfileManager">
5391 <Members>
5392 <Member Name="CustomiseResponse(System.Collections.Hashtable&amp;,OpenSim.Framework.User.UserProfile):System.Void">
5393 <Messages>
5394 <Message Id="System.Int32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5395 <Issue>
5396 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5397 <Item>System.Int32.ToString</Item>
5398 <Item>System.Int32.ToString(System.IFormatProvider)</Item>
5399 </Issue>
5400 <Issue>
5401 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5402 <Item>System.Int32.ToString</Item>
5403 <Item>System.Int32.ToString(System.IFormatProvider)</Item>
5404 </Issue>
5405 </Message>
5406 <Message Id="System.Single.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5407 <Issue>
5408 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5409 <Item>System.Single.ToString</Item>
5410 <Item>System.Single.ToString(System.IFormatProvider)</Item>
5411 </Issue>
5412 <Issue>
5413 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5414 <Item>System.Single.ToString</Item>
5415 <Item>System.Single.ToString(System.IFormatProvider)</Item>
5416 </Issue>
5417 <Issue>
5418 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5419 <Item>System.Single.ToString</Item>
5420 <Item>System.Single.ToString(System.IFormatProvider)</Item>
5421 </Issue>
5422 <Issue>
5423 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5424 <Item>System.Single.ToString</Item>
5425 <Item>System.Single.ToString(System.IFormatProvider)</Item>
5426 </Issue>
5427 <Issue>
5428 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5429 <Item>System.Single.ToString</Item>
5430 <Item>System.Single.ToString(System.IFormatProvider)</Item>
5431 </Issue>
5432 <Issue>
5433 <Item>LocalUserProfileManager.CustomiseResponse(Hashtable&amp;, UserProfile):Void</Item>
5434 <Item>System.Single.ToString</Item>
5435 <Item>System.Single.ToString(System.IFormatProvider)</Item>
5436 </Issue>
5437 </Message>
5438 </Messages>
5439 </Member>
5440 </Members>
5441 </Type>
5442 <Type Name="LoginServer">
5443 <Messages>
5444 <Message TypeName="ComVisibleTypeBaseTypesShouldBeComVisible" Category="Microsoft.Interoperability" CheckId="CA1405" Created="2007-03-27 04:29:04Z">
5445 <Issue>
5446 <Item>OpenSim.UserServer.LoginServer</Item>
5447 <Item> OpenSim.Framework.Grid.LoginService</Item>
5448 </Issue>
5449 </Message>
5450 <Message TypeName="TypesThatOwnDisposableFieldsShouldBeDisposable" Category="Microsoft.Design" CheckId="CA1001" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
5451 <Issue>
5452 <Item>OpenSim.UserServer.LoginServer</Item>
5453 <Item>System.Net.Sockets.Socket</Item>
5454 </Issue>
5455 </Message>
5456 <Message Id="Login" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
5457 <Issue Name="Type">
5458 <Item>Login</Item>
5459 <Item>LoginServer</Item>
5460 <Item>LogOn</Item>
5461 </Issue>
5462 </Message>
5463 </Messages>
5464 <Members>
5465 <Member Name=".ctor(OpenSim.Framework.Interfaces.IGridServer)">
5466 <Messages>
5467 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
5468 <Issue>
5469 <Item>LoginServer.LoginServer(IGridServer)</Item>
5470 <Item>_needPasswd</Item>
5471 <Item>System.Boolean</Item>
5472 <Item>false</Item>
5473 </Issue>
5474 <Issue>
5475 <Item>LoginServer.LoginServer(IGridServer)</Item>
5476 <Item>userAccounts</Item>
5477 <Item>System.Boolean</Item>
5478 <Item>false</Item>
5479 </Issue>
5480 </Message>
5481 </Messages>
5482 </Member>
5483 <Member Name="Authenticate(System.String,System.String,System.String):System.Boolean">
5484 <Messages>
5485 <Message Id="2#passwd" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5486 <Issue Name="Parameter">
5487 <Item>LoginServer.Authenticate(String, String, String):Boolean</Item>
5488 <Item>passwd</Item>
5489 <Item>passwd</Item>
5490 </Issue>
5491 </Message>
5492 </Messages>
5493 </Member>
5494 <Member Name="clientAddress">
5495 <Messages>
5496 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5497 <Issue>
5498 <Item>clientAddress</Item>
5499 </Issue>
5500 </Message>
5501 </Messages>
5502 </Member>
5503 <Member Name="CustomiseLoginResponse(System.Collections.Hashtable,System.String,System.String):System.Void">
5504 <Messages>
5505 <Message Id="Customise" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5506 <Issue Name="Member">
5507 <Item>Customise</Item>
5508 <Item>LoginServer.CustomiseLoginResponse(Hashtable, String, String):Void</Item>
5509 </Issue>
5510 </Message>
5511 <Message Id="Login" TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726" Created="2007-03-27 04:29:04Z">
5512 <Issue Name="Member">
5513 <Item>Login</Item>
5514 <Item>CustomiseLoginResponse</Item>
5515 <Item>LogOn</Item>
5516 </Issue>
5517 </Message>
5518 </Messages>
5519 </Member>
5520 <Member Name="EncodePassword(System.String):System.String">
5521 <Messages>
5522 <Message Id="System.String.ToLower" TypeName="SpecifyCultureInfo" Category="Microsoft.Globalization" CheckId="CA1304" Created="2007-03-27 04:29:04Z">
5523 <Issue>
5524 <Item>LoginServer.EncodePassword(String):String</Item>
5525 <Item>System.String.ToLower</Item>
5526 <Item>System.String.ToLower(System.Globalization.CultureInfo)</Item>
5527 </Issue>
5528 </Message>
5529 </Messages>
5530 </Member>
5531 <Member Name="GetAgentId(System.String,System.String):libsecondlife.LLUUID">
5532 <Messages>
5533 <Message Id="System.Int32.ToString(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5534 <Issue>
5535 <Item>LoginServer.GetAgentId(String, String):LLUUID</Item>
5536 <Item>System.Int32.ToString(System.String)</Item>
5537 <Item>System.Int32.ToString(System.String,System.IFormatProvider)</Item>
5538 </Issue>
5539 </Message>
5540 </Messages>
5541 </Member>
5542 <Member Name="InitializeLogin():System.Void">
5543 <Messages>
5544 <Message Id="OpenSim.Framework.User.UserProfileManager.SetKeys(System.String,System.String,System.String,System.String)" TypeName="DoNotPassLiteralsAsLocalizedParameters" Category="Microsoft.Globalization" CheckId="CA1303" Created="2007-03-27 04:29:04Z">
5545 <Issue>
5546 <Item>LoginServer.InitializeLogin():Void</Item>
5547 <Item>4</Item>
5548 <Item>UserProfileManager.SetKeys(String, String, String, String):Void</Item>
5549 <Item>Welcome to OpenSim</Item>
5550 </Issue>
5551 </Message>
5552 <Message Id="Sim" TypeName="LiteralsShouldBeSpelledCorrectly" Category="Microsoft.Usage" CheckId="CA2204" Created="2007-03-27 04:29:04Z">
5553 <Issue>
5554 <Item>Sim</Item>
5555 <Item>OpenSim</Item>
5556 </Issue>
5557 </Message>
5558 </Messages>
5559 </Member>
5560 <Member Name="LoginRequest(System.IO.StreamReader,System.IO.StreamWriter):System.Void">
5561 <Messages>
5562 <Message TypeName="DoNotRaiseReservedExceptionTypes" Category="Microsoft.Usage" CheckId="CA2201" Created="2007-03-27 04:29:04Z">
5563 <Issue Name="TooGeneric">
5564 <Item>LoginServer.LoginRequest(StreamReader, StreamWriter):Void</Item>
5565 <Item>System.Exception</Item>
5566 </Issue>
5567 </Message>
5568 <Message Id="System.Convert.ToInt32(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5569 <Issue>
5570 <Item>LoginServer.LoginRequest(StreamReader, StreamWriter):Void</Item>
5571 <Item>System.Convert.ToInt32(System.String)</Item>
5572 <Item>System.Convert.ToInt32(System.String,System.IFormatProvider)</Item>
5573 </Issue>
5574 </Message>
5575 <Message TypeName="TestForEmptyStringsUsingStringLength" Category="Microsoft.Performance" CheckId="CA1820" Created="2007-03-27 04:29:04Z">
5576 <Issue Name="IsNullOrEmpty">
5577 <Item>op_Inequality</Item>
5578 <Item>""</Item>
5579 <Item>LoginServer.LoginRequest(StreamReader, StreamWriter):Void</Item>
5580 </Issue>
5581 </Message>
5582 </Messages>
5583 </Member>
5584 <Member Name="ProcessXmlRequest(Nwc.XmlRpc.XmlRpcRequest,System.IO.StreamWriter):System.Boolean">
5585 <Messages>
5586 <Message TypeName="ConsiderPassingBaseTypesAsParameters" Category="Microsoft.Design" CheckId="CA1011" Created="2007-03-27 04:29:04Z">
5587 <Issue>
5588 <Item>writer</Item>
5589 <Item>LoginServer.ProcessXmlRequest(XmlRpcRequest, StreamWriter):Boolean</Item>
5590 <Item>System.IO.StreamWriter</Item>
5591 <Item>System.IO.TextWriter</Item>
5592 </Issue>
5593 </Message>
5594 <Message Id="System.Int32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5595 <Issue>
5596 <Item>LoginServer.ProcessXmlRequest(XmlRpcRequest, StreamWriter):Boolean</Item>
5597 <Item>System.Int32.ToString</Item>
5598 <Item>System.Int32.ToString(System.IFormatProvider)</Item>
5599 </Issue>
5600 </Message>
5601 <Message Id="System.Int32.ToString(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
5602 <Issue>
5603 <Item>LoginServer.ProcessXmlRequest(XmlRpcRequest, StreamWriter):Boolean</Item>
5604 <Item>System.Int32.ToString(System.String)</Item>
5605 <Item>System.Int32.ToString(System.String,System.IFormatProvider)</Item>
5606 </Issue>
5607 </Message>
5608 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
5609 <Issue>
5610 <Item>'request'</Item>
5611 <Item>LoginServer.ProcessXmlRequest(XmlRpcRequest, StreamWriter):Boolean</Item>
5612 </Issue>
5613 <Issue>
5614 <Item>'writer'</Item>
5615 <Item>LoginServer.ProcessXmlRequest(XmlRpcRequest, StreamWriter):Boolean</Item>
5616 </Issue>
5617 <Issue>
5618 <Item>'writer'</Item>
5619 <Item>LoginServer.ProcessXmlRequest(XmlRpcRequest, StreamWriter):Boolean</Item>
5620 </Issue>
5621 </Message>
5622 </Messages>
5623 </Member>
5624 <Member Name="remoteAddress">
5625 <Messages>
5626 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5627 <Issue>
5628 <Item>remoteAddress</Item>
5629 </Issue>
5630 </Message>
5631 </Messages>
5632 </Member>
5633 <Member Name="RunLogin():System.Void">
5634 <Messages>
5635 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
5636 <Issue>
5637 <Item>LoginServer.RunLogin():Void</Item>
5638 <Item>System.Exception</Item>
5639 </Issue>
5640 <Issue>
5641 <Item>LoginServer.RunLogin():Void</Item>
5642 <Item>System.Exception</Item>
5643 </Issue>
5644 </Message>
5645 <Message Id="clientEndPoint" TypeName="RemoveUnusedLocals" Category="Microsoft.Performance" CheckId="CA1804" Created="2007-03-27 04:29:04Z">
5646 <Issue>
5647 <Item>LoginServer.RunLogin():Void</Item>
5648 <Item>clientEndPoint</Item>
5649 <Item>System.Net.IPEndPoint</Item>
5650 </Issue>
5651 </Message>
5652 </Messages>
5653 </Member>
5654 </Members>
5655 </Type>
5656 </Types>
5657 </Namespace>
5658 <Namespace Name="OpenSim.world">
5659 <Types>
5660 <Type Name="Avatar">
5661 <Members>
5662 <Member Name=".cctor()">
5663 <Messages>
5664 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
5665 <Issue>
5666 <Item>Avatar.Avatar()</Item>
5667 <Item>PhysicsEngineFlying</Item>
5668 <Item>System.Boolean</Item>
5669 <Item>false</Item>
5670 </Issue>
5671 </Message>
5672 </Messages>
5673 </Member>
5674 <Member Name=".ctor(OpenSim.SimClient)">
5675 <Messages>
5676 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
5677 <Issue>
5678 <Item>Avatar.Avatar(SimClient)</Item>
5679 <Item>_updateCount</Item>
5680 <Item>System.Int16</Item>
5681 <Item>0</Item>
5682 </Issue>
5683 <Issue>
5684 <Item>Avatar.Avatar(SimClient)</Item>
5685 <Item>avatarAppearanceTexture</Item>
5686 <Item>libsecondlife.LLObject+TextureEntry</Item>
5687 <Item>null</Item>
5688 </Issue>
5689 <Issue>
5690 <Item>Avatar.Avatar(SimClient)</Item>
5691 <Item>movementflag</Item>
5692 <Item>System.Byte</Item>
5693 <Item>0</Item>
5694 </Issue>
5695 <Issue>
5696 <Item>Avatar.Avatar(SimClient)</Item>
5697 <Item>updateflag</Item>
5698 <Item>System.Boolean</Item>
5699 <Item>false</Item>
5700 </Issue>
5701 </Message>
5702 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5703 <Issue Name="Parameter">
5704 <Item>TheClient</Item>
5705 </Issue>
5706 </Message>
5707 </Messages>
5708 </Member>
5709 <Member Name="anim_seq">
5710 <Messages>
5711 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5712 <Issue>
5713 <Item>anim_seq</Item>
5714 </Issue>
5715 </Message>
5716 <Message Id="anim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5717 <Issue Name="Member">
5718 <Item>anim</Item>
5719 <Item>Avatar.anim_seq</Item>
5720 </Issue>
5721 </Message>
5722 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
5723 <Issue Name="Member">
5724 <Item>anim_seq</Item>
5725 </Issue>
5726 </Message>
5727 </Messages>
5728 </Member>
5729 <Member Name="Animations">
5730 <Messages>
5731 <Message TypeName="NonConstantFieldsShouldNotBeVisible" Category="Microsoft.Usage" CheckId="CA2211" Created="2007-03-27 04:29:04Z">
5732 <Issue>
5733 <Item>Animations</Item>
5734 </Issue>
5735 </Message>
5736 </Messages>
5737 </Member>
5738 <Member Name="CompleteMovement(OpenSim.world.World):System.Void">
5739 <Messages>
5740 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5741 <Issue Name="Parameter">
5742 <Item>RegionInfo</Item>
5743 </Issue>
5744 </Message>
5745 <Message Id="RegionInfo" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
5746 <Issue>
5747 <Item>RegionInfo</Item>
5748 <Item>Avatar.CompleteMovement(World):Void</Item>
5749 </Issue>
5750 </Message>
5751 </Messages>
5752 </Member>
5753 <Member Name="ControllingClient">
5754 <Messages>
5755 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5756 <Issue>
5757 <Item>ControllingClient</Item>
5758 </Issue>
5759 </Message>
5760 </Messages>
5761 </Member>
5762 <Member Name="current_anim">
5763 <Messages>
5764 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5765 <Issue>
5766 <Item>current_anim</Item>
5767 </Issue>
5768 </Message>
5769 <Message Id="anim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5770 <Issue Name="Member">
5771 <Item>anim</Item>
5772 <Item>Avatar.current_anim</Item>
5773 </Issue>
5774 </Message>
5775 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
5776 <Issue Name="Member">
5777 <Item>current_anim</Item>
5778 </Issue>
5779 </Message>
5780 </Messages>
5781 </Member>
5782 <Member Name="firstname">
5783 <Messages>
5784 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5785 <Issue>
5786 <Item>firstname</Item>
5787 </Issue>
5788 </Message>
5789 <Message Id="firstname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5790 <Issue Name="Member">
5791 <Item>firstname</Item>
5792 <Item>Avatar.firstname</Item>
5793 </Issue>
5794 </Message>
5795 </Messages>
5796 </Member>
5797 <Member Name="lastname">
5798 <Messages>
5799 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5800 <Issue>
5801 <Item>lastname</Item>
5802 </Issue>
5803 </Message>
5804 <Message Id="lastname" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5805 <Issue Name="Member">
5806 <Item>lastname</Item>
5807 <Item>Avatar.lastname</Item>
5808 </Issue>
5809 </Message>
5810 </Messages>
5811 </Member>
5812 <Member Name="LoadAnims():System.Void">
5813 <Messages>
5814 <Message Id="Anims" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5815 <Issue Name="Member">
5816 <Item>Anims</Item>
5817 <Item>Avatar.LoadAnims():Void</Item>
5818 </Issue>
5819 </Message>
5820 </Messages>
5821 </Member>
5822 <Member Name="PhysActor">
5823 <Messages>
5824 <Message TypeName="PropertiesShouldNotBeWriteOnly" Category="Microsoft.Design" CheckId="CA1044" Created="2007-03-27 04:29:04Z">
5825 <Issue>
5826 <Item>PhysActor</Item>
5827 </Issue>
5828 </Message>
5829 </Messages>
5830 </Member>
5831 <Member Name="PhysicsEngineFlying">
5832 <Messages>
5833 <Message TypeName="NonConstantFieldsShouldNotBeVisible" Category="Microsoft.Usage" CheckId="CA2211" Created="2007-03-27 04:29:04Z">
5834 <Issue>
5835 <Item>PhysicsEngineFlying</Item>
5836 </Issue>
5837 </Message>
5838 </Messages>
5839 </Member>
5840 <Member Name="SendAnimPack():System.Void">
5841 <Messages>
5842 <Message Id="Anim" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5843 <Issue Name="Member">
5844 <Item>Anim</Item>
5845 <Item>Avatar.SendAnimPack():Void</Item>
5846 </Issue>
5847 </Message>
5848 </Messages>
5849 </Member>
5850 <Member Name="SendAppearanceToOtherAgent(OpenSim.SimClient):System.Void">
5851 <Messages>
5852 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
5853 <Issue>
5854 <Item>'userInfo'</Item>
5855 <Item>Avatar.SendAppearanceToOtherAgent(SimClient):Void</Item>
5856 </Issue>
5857 </Message>
5858 </Messages>
5859 </Member>
5860 <Member Name="SendRegionHandshake(OpenSim.world.World):System.Void">
5861 <Messages>
5862 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5863 <Issue Name="Parameter">
5864 <Item>RegionInfo</Item>
5865 </Issue>
5866 </Message>
5867 <Message Id="RegionInfo" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
5868 <Issue>
5869 <Item>RegionInfo</Item>
5870 <Item>Avatar.SendRegionHandshake(World):Void</Item>
5871 </Issue>
5872 </Message>
5873 </Messages>
5874 </Member>
5875 </Members>
5876 </Type>
5877 <Type Name="AvatarAnimations">
5878 <Members>
5879 <Member Name="AnimsLLUUID">
5880 <Messages>
5881 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5882 <Issue>
5883 <Item>AnimsLLUUID</Item>
5884 </Issue>
5885 </Message>
5886 <Message Id="Anims" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5887 <Issue Name="Member">
5888 <Item>Anims</Item>
5889 <Item>AvatarAnimations.AnimsLLUUID</Item>
5890 </Issue>
5891 </Message>
5892 </Messages>
5893 </Member>
5894 <Member Name="AnimsNames">
5895 <Messages>
5896 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5897 <Issue>
5898 <Item>AnimsNames</Item>
5899 </Issue>
5900 </Message>
5901 <Message Id="Anims" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5902 <Issue Name="Member">
5903 <Item>Anims</Item>
5904 <Item>AvatarAnimations.AnimsNames</Item>
5905 </Issue>
5906 </Message>
5907 </Messages>
5908 </Member>
5909 <Member Name="LoadAnims():System.Void">
5910 <Messages>
5911 <Message Id="Anims" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5912 <Issue Name="Member">
5913 <Item>Anims</Item>
5914 <Item>AvatarAnimations.LoadAnims():Void</Item>
5915 </Issue>
5916 </Message>
5917 </Messages>
5918 </Member>
5919 </Members>
5920 </Type>
5921 <Type Name="Entity">
5922 <Members>
5923 <Member Name=".ctor()">
5924 <Messages>
5925 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
5926 <Issue>
5927 <Item>Entity.Entity()</Item>
5928 <Item>localid</Item>
5929 <Item>System.UInt32</Item>
5930 <Item>0</Item>
5931 </Issue>
5932 </Message>
5933 </Messages>
5934 </Member>
5935 <Member Name="addForces():System.Void">
5936 <Messages>
5937 <Message Id="Member" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5938 <Issue Name="Member">
5939 <Item>addForces</Item>
5940 </Issue>
5941 </Message>
5942 </Messages>
5943 </Member>
5944 <Member Name="BackUp():System.Void">
5945 <Messages>
5946 <Message Id="BackUp" TypeName="CompoundWordsShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1702" Created="2007-03-27 04:29:04Z">
5947 <Issue Name="ShouldBeDiscreteTerm">
5948 <Item>BackUp</Item>
5949 <Item>method</Item>
5950 <Item>BackUp</Item>
5951 <Item>Backup</Item>
5952 </Issue>
5953 </Message>
5954 </Messages>
5955 </Member>
5956 <Member Name="children">
5957 <Messages>
5958 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5959 <Issue>
5960 <Item>children</Item>
5961 </Issue>
5962 </Message>
5963 <Message TypeName="DoNotExposeGenericLists" Category="Microsoft.Design" CheckId="CA1002" Created="2007-03-27 04:29:04Z">
5964 <Issue>
5965 <Item>System.Collections.Generic.List`1&lt;OpenSim.world.Entity&gt;</Item>
5966 <Item>Entity.children</Item>
5967 </Issue>
5968 </Message>
5969 </Messages>
5970 </Member>
5971 <Member Name="getMesh():OpenSim.types.Mesh">
5972 <Messages>
5973 <Message Id="Member" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5974 <Issue Name="Member">
5975 <Item>getMesh</Item>
5976 </Issue>
5977 </Message>
5978 </Messages>
5979 </Member>
5980 <Member Name="getName():System.String">
5981 <Messages>
5982 <Message Id="Member" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
5983 <Issue Name="Member">
5984 <Item>getName</Item>
5985 </Issue>
5986 </Message>
5987 </Messages>
5988 </Member>
5989 <Member Name="localid">
5990 <Messages>
5991 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
5992 <Issue>
5993 <Item>localid</Item>
5994 </Issue>
5995 </Message>
5996 <Message Id="localid" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
5997 <Issue Name="Member">
5998 <Item>localid</Item>
5999 <Item>Entity.localid</Item>
6000 </Issue>
6001 </Message>
6002 </Messages>
6003 </Member>
6004 <Member Name="name">
6005 <Messages>
6006 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6007 <Issue>
6008 <Item>name</Item>
6009 </Issue>
6010 </Message>
6011 </Messages>
6012 </Member>
6013 <Member Name="position">
6014 <Messages>
6015 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6016 <Issue>
6017 <Item>position</Item>
6018 </Issue>
6019 </Message>
6020 </Messages>
6021 </Member>
6022 <Member Name="rotation">
6023 <Messages>
6024 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6025 <Issue>
6026 <Item>rotation</Item>
6027 </Issue>
6028 </Message>
6029 </Messages>
6030 </Member>
6031 <Member Name="update():System.Void">
6032 <Messages>
6033 <Message Id="Member" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6034 <Issue Name="Member">
6035 <Item>update</Item>
6036 </Issue>
6037 </Message>
6038 </Messages>
6039 </Member>
6040 <Member Name="uuid">
6041 <Messages>
6042 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6043 <Issue>
6044 <Item>uuid</Item>
6045 </Issue>
6046 </Message>
6047 <Message Id="uuid" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6048 <Issue Name="Member">
6049 <Item>uuid</Item>
6050 <Item>Entity.uuid</Item>
6051 </Issue>
6052 </Message>
6053 </Messages>
6054 </Member>
6055 <Member Name="velocity">
6056 <Messages>
6057 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6058 <Issue>
6059 <Item>velocity</Item>
6060 </Issue>
6061 </Message>
6062 </Messages>
6063 </Member>
6064 </Members>
6065 </Type>
6066 <Type Name="NewForce">
6067 <Members>
6068 <Member Name="X">
6069 <Messages>
6070 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6071 <Issue>
6072 <Item>X</Item>
6073 </Issue>
6074 </Message>
6075 <Message Id="X" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6076 <Issue Name="MemberOneLetter">
6077 <Item>X</Item>
6078 <Item>NewForce.X</Item>
6079 </Issue>
6080 </Message>
6081 </Messages>
6082 </Member>
6083 <Member Name="Y">
6084 <Messages>
6085 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6086 <Issue>
6087 <Item>Y</Item>
6088 </Issue>
6089 </Message>
6090 <Message Id="Y" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6091 <Issue Name="MemberOneLetter">
6092 <Item>Y</Item>
6093 <Item>NewForce.Y</Item>
6094 </Issue>
6095 </Message>
6096 </Messages>
6097 </Member>
6098 <Member Name="Z">
6099 <Messages>
6100 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6101 <Issue>
6102 <Item>Z</Item>
6103 </Issue>
6104 </Message>
6105 <Message Id="Z" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6106 <Issue Name="MemberOneLetter">
6107 <Item>Z</Item>
6108 <Item>NewForce.Z</Item>
6109 </Issue>
6110 </Message>
6111 </Messages>
6112 </Member>
6113 </Members>
6114 </Type>
6115 <Type Name="Primitive">
6116 <Messages>
6117 <Message TypeName="IdentifiersShouldDifferByMoreThanCase" Category="Microsoft.Naming" CheckId="CA1708" Created="2007-03-27 04:29:04Z">
6118 <Issue Name="Member">
6119 <Item>'UpdateFlag'</Item>
6120 <Item>updateFlag</Item>
6121 </Issue>
6122 </Message>
6123 </Messages>
6124 <Members>
6125 <Member Name=".ctor()">
6126 <Messages>
6127 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
6128 <Issue>
6129 <Item>Primitive.Primitive()</Item>
6130 <Item>dirtyFlag</Item>
6131 <Item>System.Boolean</Item>
6132 <Item>false</Item>
6133 </Issue>
6134 <Issue>
6135 <Item>Primitive.Primitive()</Item>
6136 <Item>mesh_cutbegin</Item>
6137 <Item>System.Single</Item>
6138 <Item>0.0</Item>
6139 </Issue>
6140 <Issue>
6141 <Item>Primitive.Primitive()</Item>
6142 <Item>newPrimFlag</Item>
6143 <Item>System.Boolean</Item>
6144 <Item>false</Item>
6145 </Issue>
6146 <Issue>
6147 <Item>Primitive.Primitive()</Item>
6148 <Item>physicsEnabled</Item>
6149 <Item>System.Boolean</Item>
6150 <Item>false</Item>
6151 </Issue>
6152 <Issue>
6153 <Item>Primitive.Primitive()</Item>
6154 <Item>physicstest</Item>
6155 <Item>System.Boolean</Item>
6156 <Item>false</Item>
6157 </Issue>
6158 <Issue>
6159 <Item>Primitive.Primitive()</Item>
6160 <Item>updateFlag</Item>
6161 <Item>System.Boolean</Item>
6162 <Item>false</Item>
6163 </Issue>
6164 </Message>
6165 </Messages>
6166 </Member>
6167 <Member Name="CreateFromPacket(libsecondlife.Packets.ObjectAddPacket,libsecondlife.LLUUID,System.UInt32):System.Void">
6168 <Messages>
6169 <Message Id="localID-702000" TypeName="OperationsShouldNotOverflow" Category="Microsoft.Usage" CheckId="CA2233" Created="2007-03-27 04:29:04Z">
6170 <Issue>
6171 <Item>localID-702000</Item>
6172 <Item>Primitive.CreateFromPacket(ObjectAddPacket, LLUUID, UInt32):Void</Item>
6173 </Issue>
6174 </Message>
6175 <Message Id="1#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
6176 <Issue Name="ParameterId">
6177 <Item>ID</Item>
6178 <Item>agentID</Item>
6179 <Item>Id</Item>
6180 </Issue>
6181 </Message>
6182 <Message Id="2#" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
6183 <Issue Name="ParameterId">
6184 <Item>ID</Item>
6185 <Item>localID</Item>
6186 <Item>Id</Item>
6187 </Issue>
6188 </Message>
6189 <Message Id="System.UInt32.ToString(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Created="2007-03-27 04:29:04Z">
6190 <Issue>
6191 <Item>Primitive.CreateFromPacket(ObjectAddPacket, LLUUID, UInt32):Void</Item>
6192 <Item>System.UInt32.ToString(System.String)</Item>
6193 <Item>System.UInt32.ToString(System.String,System.IFormatProvider)</Item>
6194 </Issue>
6195 </Message>
6196 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6197 <Issue>
6198 <Item>'addPacket'</Item>
6199 <Item>Primitive.CreateFromPacket(ObjectAddPacket, LLUUID, UInt32):Void</Item>
6200 </Issue>
6201 </Message>
6202 </Messages>
6203 </Member>
6204 <Member Name="CreateFromStorage(OpenSim.Framework.Assets.PrimData):System.Void">
6205 <Messages>
6206 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6207 <Issue>
6208 <Item>'store'</Item>
6209 <Item>Primitive.CreateFromStorage(PrimData):Void</Item>
6210 </Issue>
6211 </Message>
6212 </Messages>
6213 </Member>
6214 <Member Name="dirtyFlag">
6215 <Messages>
6216 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6217 <Issue>
6218 <Item>dirtyFlag</Item>
6219 </Issue>
6220 </Message>
6221 </Messages>
6222 </Member>
6223 <Member Name="mesh_cutbegin">
6224 <Messages>
6225 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6226 <Issue>
6227 <Item>mesh_cutbegin</Item>
6228 </Issue>
6229 </Message>
6230 <Message Id="cutbegin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6231 <Issue Name="Member">
6232 <Item>cutbegin</Item>
6233 <Item>Primitive.mesh_cutbegin</Item>
6234 </Issue>
6235 </Message>
6236 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
6237 <Issue Name="Member">
6238 <Item>mesh_cutbegin</Item>
6239 </Issue>
6240 </Message>
6241 </Messages>
6242 </Member>
6243 <Member Name="mesh_cutend">
6244 <Messages>
6245 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6246 <Issue>
6247 <Item>mesh_cutend</Item>
6248 </Issue>
6249 </Message>
6250 <Message Id="cutend" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6251 <Issue Name="Member">
6252 <Item>cutend</Item>
6253 <Item>Primitive.mesh_cutend</Item>
6254 </Issue>
6255 </Message>
6256 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
6257 <Issue Name="Member">
6258 <Item>mesh_cutend</Item>
6259 </Issue>
6260 </Message>
6261 </Messages>
6262 </Member>
6263 <Member Name="newPrimFlag">
6264 <Messages>
6265 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6266 <Issue>
6267 <Item>newPrimFlag</Item>
6268 </Issue>
6269 </Message>
6270 </Messages>
6271 </Member>
6272 <Member Name="PhysActor">
6273 <Messages>
6274 <Message TypeName="PropertiesShouldNotBeWriteOnly" Category="Microsoft.Design" CheckId="CA1044" Created="2007-03-27 04:29:04Z">
6275 <Issue>
6276 <Item>PhysActor</Item>
6277 </Issue>
6278 </Message>
6279 </Messages>
6280 </Member>
6281 <Member Name="primData">
6282 <Messages>
6283 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6284 <Issue>
6285 <Item>primData</Item>
6286 </Issue>
6287 </Message>
6288 </Messages>
6289 </Member>
6290 <Member Name="UpdateClient(OpenSim.SimClient):System.Void">
6291 <Messages>
6292 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6293 <Issue Name="Parameter">
6294 <Item>RemoteClient</Item>
6295 </Issue>
6296 </Message>
6297 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6298 <Issue>
6299 <Item>'RemoteClient'</Item>
6300 <Item>Primitive.UpdateClient(SimClient):Void</Item>
6301 </Issue>
6302 </Message>
6303 </Messages>
6304 </Member>
6305 <Member Name="updateFlag">
6306 <Messages>
6307 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6308 <Issue>
6309 <Item>updateFlag</Item>
6310 </Issue>
6311 </Message>
6312 </Messages>
6313 </Member>
6314 <Member Name="UpdateObjectFlags(libsecondlife.Packets.ObjectFlagUpdatePacket):System.Void">
6315 <Messages>
6316 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6317 <Issue>
6318 <Item>'pack'</Item>
6319 <Item>Primitive.UpdateObjectFlags(ObjectFlagUpdatePacket):Void</Item>
6320 </Issue>
6321 </Message>
6322 </Messages>
6323 </Member>
6324 <Member Name="UpdateShape(libsecondlife.Packets.ObjectShapePacket+ObjectDataBlock):System.Void">
6325 <Messages>
6326 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6327 <Issue>
6328 <Item>'addPacket'</Item>
6329 <Item>Primitive.UpdateShape(ObjectDataBlock):Void</Item>
6330 </Issue>
6331 </Message>
6332 </Messages>
6333 </Member>
6334 </Members>
6335 </Type>
6336 <Type Name="ScriptEngine">
6337 <Members>
6338 <Member Name=".ctor(OpenSim.world.World)">
6339 <Messages>
6340 <Message Id="0#env" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6341 <Issue Name="Parameter">
6342 <Item>ScriptEngine.ScriptEngine(World)</Item>
6343 <Item>env</Item>
6344 <Item>env</Item>
6345 </Issue>
6346 </Message>
6347 <Message Id="env" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
6348 <Issue>
6349 <Item>env</Item>
6350 <Item>ScriptEngine.ScriptEngine(World)</Item>
6351 </Issue>
6352 </Message>
6353 </Messages>
6354 </Member>
6355 <Member Name="LoadScript():System.Void">
6356 <Messages>
6357 <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
6358 <Issue>
6359 <Item>ScriptEngine.LoadScript():Void</Item>
6360 </Issue>
6361 </Message>
6362 </Messages>
6363 </Member>
6364 </Members>
6365 </Type>
6366 <Type Name="SurfacePatch">
6367 <Members>
6368 <Member Name="HeightMap">
6369 <Messages>
6370 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6371 <Issue>
6372 <Item>HeightMap</Item>
6373 </Issue>
6374 </Message>
6375 </Messages>
6376 </Member>
6377 </Members>
6378 </Type>
6379 <Type Name="World">
6380 <Messages>
6381 <Message TypeName="TypeNamesShouldNotMatchNamespaces" Category="Microsoft.Naming" CheckId="CA1724" Created="2007-03-27 04:29:04Z">
6382 <Issue>
6383 <Item>World</Item>
6384 <Item>OpenSim.world</Item>
6385 </Issue>
6386 </Message>
6387 </Messages>
6388 <Members>
6389 <Member Name=".ctor()">
6390 <Messages>
6391 <Message TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805" Created="2007-03-27 04:29:04Z">
6392 <Issue>
6393 <Item>World.World()</Item>
6394 <Item>_localNumber</Item>
6395 <Item>System.UInt32</Item>
6396 <Item>0</Item>
6397 </Issue>
6398 </Message>
6399 </Messages>
6400 </Member>
6401 <Member Name="_localNumber">
6402 <Messages>
6403 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6404 <Issue>
6405 <Item>_localNumber</Item>
6406 </Issue>
6407 </Message>
6408 <Message Id="Member" TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707" Created="2007-03-27 04:29:04Z">
6409 <Issue Name="Member">
6410 <Item>_localNumber</Item>
6411 </Issue>
6412 </Message>
6413 </Messages>
6414 </Member>
6415 <Member Name="AddNewPrim(libsecondlife.Packets.ObjectAddPacket,OpenSim.SimClient):System.Void">
6416 <Messages>
6417 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6418 <Issue Name="Parameter">
6419 <Item>AgentClient</Item>
6420 </Issue>
6421 </Message>
6422 </Messages>
6423 </Member>
6424 <Member Name="AddViewerAgent(OpenSim.SimClient):System.Void">
6425 <Messages>
6426 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6427 <Issue Name="Parameter">
6428 <Item>AgentClient</Item>
6429 </Issue>
6430 </Message>
6431 </Messages>
6432 </Member>
6433 <Member Name="DeRezObject(libsecondlife.Packets.DeRezObjectPacket,OpenSim.SimClient):System.Void">
6434 <Messages>
6435 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6436 <Issue Name="Parameter">
6437 <Item>DeRezPacket</Item>
6438 </Issue>
6439 </Message>
6440 <Message Id="1#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6441 <Issue Name="Parameter">
6442 <Item>AgentClient</Item>
6443 </Issue>
6444 </Message>
6445 <Message Id="0#Rez" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6446 <Issue Name="Parameter">
6447 <Item>World.DeRezObject(DeRezObjectPacket, SimClient):Void</Item>
6448 <Item>Rez</Item>
6449 <Item>DeRezPacket</Item>
6450 </Issue>
6451 </Message>
6452 <Message Id="Rez" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6453 <Issue Name="Member">
6454 <Item>Rez</Item>
6455 <Item>World.DeRezObject(DeRezObjectPacket, SimClient):Void</Item>
6456 </Issue>
6457 </Message>
6458 <Message Id="AgentClient" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
6459 <Issue>
6460 <Item>AgentClient</Item>
6461 <Item>World.DeRezObject(DeRezObjectPacket, SimClient):Void</Item>
6462 </Issue>
6463 </Message>
6464 <Message Id="Member" TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706" Created="2007-03-27 04:29:04Z">
6465 <Issue Name="Member">
6466 <Item>De</Item>
6467 <Item>World.DeRezObject(DeRezObjectPacket, SimClient):Void</Item>
6468 </Issue>
6469 </Message>
6470 </Messages>
6471 </Member>
6472 <Member Name="Entities">
6473 <Messages>
6474 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6475 <Issue>
6476 <Item>Entities</Item>
6477 </Issue>
6478 </Message>
6479 </Messages>
6480 </Member>
6481 <Member Name="GetInitialPrims(OpenSim.SimClient):System.Void">
6482 <Messages>
6483 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6484 <Issue Name="Parameter">
6485 <Item>RemoteClient</Item>
6486 </Issue>
6487 </Message>
6488 <Message Id="Prims" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6489 <Issue Name="Member">
6490 <Item>Prims</Item>
6491 <Item>World.GetInitialPrims(SimClient):Void</Item>
6492 </Issue>
6493 </Message>
6494 </Messages>
6495 </Member>
6496 <Member Name="LandMap">
6497 <Messages>
6498 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6499 <Issue>
6500 <Item>LandMap</Item>
6501 </Issue>
6502 </Message>
6503 </Messages>
6504 </Member>
6505 <Member Name="LoadPrimsFromStorage():System.Void">
6506 <Messages>
6507 <Message Id="Prims" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6508 <Issue Name="Member">
6509 <Item>Prims</Item>
6510 <Item>World.LoadPrimsFromStorage():Void</Item>
6511 </Issue>
6512 </Message>
6513 </Messages>
6514 </Member>
6515 <Member Name="LoadStorageDLL(System.String):System.Boolean">
6516 <Messages>
6517 <Message Id="Member" TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
6518 <Issue Name="Member">
6519 <Item>World.LoadStorageDLL(String):Boolean</Item>
6520 </Issue>
6521 </Message>
6522 </Messages>
6523 </Member>
6524 <Member Name="localStorage">
6525 <Messages>
6526 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6527 <Issue>
6528 <Item>localStorage</Item>
6529 </Issue>
6530 </Message>
6531 </Messages>
6532 </Member>
6533 <Member Name="Rand">
6534 <Messages>
6535 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
6536 <Issue>
6537 <Item>World.Rand</Item>
6538 </Issue>
6539 </Message>
6540 </Messages>
6541 </Member>
6542 <Member Name="Scripts">
6543 <Messages>
6544 <Message TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051" Created="2007-03-27 04:29:04Z">
6545 <Issue>
6546 <Item>Scripts</Item>
6547 </Issue>
6548 </Message>
6549 </Messages>
6550 </Member>
6551 <Member Name="SendLayerData(OpenSim.SimClient):System.Void">
6552 <Messages>
6553 <Message Id="0#" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Created="2007-03-27 04:29:04Z">
6554 <Issue Name="Parameter">
6555 <Item>RemoteClient</Item>
6556 </Issue>
6557 </Message>
6558 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6559 <Issue>
6560 <Item>'RemoteClient'</Item>
6561 <Item>World.SendLayerData(SimClient):Void</Item>
6562 </Issue>
6563 <Issue>
6564 <Item>'RemoteClient'</Item>
6565 <Item>World.SendLayerData(SimClient):Void</Item>
6566 </Issue>
6567 <Issue>
6568 <Item>'RemoteClient'</Item>
6569 <Item>World.SendLayerData(SimClient):Void</Item>
6570 </Issue>
6571 </Message>
6572 </Messages>
6573 </Member>
6574 </Members>
6575 </Type>
6576 </Types>
6577 </Namespace>
6578 <Namespace Name="OpenSim.world.scripting">
6579 <Types>
6580 <Type Name="IScriptHost">
6581 <Members>
6582 <Member Name="Register(OpenSim.world.scripting.IScript):System.Boolean">
6583 <Messages>
6584 <Message Id="0#iscript" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6585 <Issue Name="Parameter">
6586 <Item>IScriptHost.Register(IScript):Boolean</Item>
6587 <Item>iscript</Item>
6588 <Item>iscript</Item>
6589 </Issue>
6590 </Message>
6591 </Messages>
6592 </Member>
6593 </Members>
6594 </Type>
6595 </Types>
6596 </Namespace>
6597 </Namespaces>
6598 </Module>
6599 </Modules>
6600 </Target>
6601 <Target Name="$(ProjectDir)/bin/OpenSim.Storage.LocalStorageDb4o.dll">
6602 <Modules>
6603 <Module Name="opensim.storage.localstoragedb4o.dll">
6604 <Messages>
6605 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
6606 <Issue>
6607 <Item>OpenSim.Storage.LocalStorageDb4o</Item>
6608 </Issue>
6609 </Message>
6610 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
6611 <Issue Name="NoStrongName">
6612 <Item>OpenSim.Storage.LocalStorageDb4o</Item>
6613 </Issue>
6614 </Message>
6615 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
6616 <Issue Name="NoAttr">
6617 <Item>OpenSim.Storage.LocalStorageDb4o</Item>
6618 </Issue>
6619 </Message>
6620 </Messages>
6621 <Namespaces>
6622 <Namespace Name="OpenSim.Storage.LocalStorageDb4o">
6623 <Types>
6624 <Type Name="Db4LocalStorage">
6625 <Members>
6626 <Member Name=".ctor()">
6627 <Messages>
6628 <Message TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031" Created="2007-03-27 04:29:04Z">
6629 <Issue>
6630 <Item>Db4LocalStorage.Db4LocalStorage()</Item>
6631 <Item>System.Exception</Item>
6632 </Issue>
6633 </Message>
6634 </Messages>
6635 </Member>
6636 <Member Name="LoadPrimitives(OpenSim.Framework.Interfaces.ILocalStorageReceiver):System.Void">
6637 <Messages>
6638 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6639 <Issue>
6640 <Item>'receiver'</Item>
6641 <Item>Db4LocalStorage.LoadPrimitives(ILocalStorageReceiver):Void</Item>
6642 </Issue>
6643 </Message>
6644 </Messages>
6645 </Member>
6646 <Member Name="StorePrim(OpenSim.Framework.Assets.PrimData):System.Void">
6647 <Messages>
6648 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6649 <Issue>
6650 <Item>'prim'</Item>
6651 <Item>Db4LocalStorage.StorePrim(PrimData):Void</Item>
6652 </Issue>
6653 </Message>
6654 </Messages>
6655 </Member>
6656 </Members>
6657 </Type>
6658 <Type Name="UUIDQuery">
6659 <Messages>
6660 <Message TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705" Created="2007-03-27 04:29:04Z">
6661 <Issue Name="Type">
6662 <Item>UUIDQuery</Item>
6663 </Issue>
6664 </Message>
6665 </Messages>
6666 <Members>
6667 <Member Name="Match(OpenSim.Framework.Assets.PrimData):System.Boolean">
6668 <Messages>
6669 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6670 <Issue>
6671 <Item>'prim'</Item>
6672 <Item>UUIDQuery.Match(PrimData):Boolean</Item>
6673 </Issue>
6674 </Message>
6675 </Messages>
6676 </Member>
6677 </Members>
6678 </Type>
6679 </Types>
6680 </Namespace>
6681 </Namespaces>
6682 </Module>
6683 </Modules>
6684 </Target>
6685 <Target Name="$(ProjectDir)/bin/Physics/OpenSim.Physics.BasicPhysicsPlugin.dll">
6686 <Modules>
6687 <Module Name="opensim.physics.basicphysicsplugin.dll">
6688 <Messages>
6689 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Status="Excluded" Created="2007-03-27 04:29:04Z">
6690 <Issue>
6691 <Item>OpenSim.Physics.BasicPhysicsPlugin</Item>
6692 </Issue>
6693 <Notes>
6694 <User Name="Stefan">
6695 <Note Id="2" />
6696 </User>
6697 </Notes>
6698 </Message>
6699 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Status="Excluded" Created="2007-03-27 04:29:04Z">
6700 <Issue Name="NoStrongName">
6701 <Item>OpenSim.Physics.BasicPhysicsPlugin</Item>
6702 </Issue>
6703 <Notes>
6704 <User Name="Stefan">
6705 <Note Id="0" />
6706 </User>
6707 </Notes>
6708 </Message>
6709 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Status="Excluded" Created="2007-03-27 04:29:04Z">
6710 <Issue Name="NoAttr">
6711 <Item>OpenSim.Physics.BasicPhysicsPlugin</Item>
6712 </Issue>
6713 <Notes>
6714 <User Name="Stefan">
6715 <Note Id="1" />
6716 </User>
6717 </Notes>
6718 </Message>
6719 </Messages>
6720 <Namespaces>
6721 <Namespace Name="OpenSim.Physics.BasicPhysicsPlugin">
6722 <Types>
6723 <Type Name="BasicActor">
6724 <Members>
6725 <Member Name="flying">
6726 <Messages>
6727 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
6728 <Issue>
6729 <Item>BasicActor.flying</Item>
6730 </Issue>
6731 </Message>
6732 </Messages>
6733 </Member>
6734 <Member Name="SetAcceleration(OpenSim.Physics.Manager.PhysicsVector):System.Void">
6735 <Messages>
6736 <Message Id="0#accel" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6737 <Issue Name="Parameter">
6738 <Item>BasicActor.SetAcceleration(PhysicsVector):Void</Item>
6739 <Item>accel</Item>
6740 <Item>accel</Item>
6741 </Issue>
6742 </Message>
6743 </Messages>
6744 </Member>
6745 </Members>
6746 </Type>
6747 <Type Name="BasicPhysicsPlugin">
6748 <Messages>
6749 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6750 <Issue Name="Type">
6751 <Item>Plugin</Item>
6752 <Item>OpenSim.Physics.BasicPhysicsPlugin.BasicPhysicsPlugin</Item>
6753 </Issue>
6754 </Message>
6755 <Message TypeName="TypeNamesShouldNotMatchNamespaces" Category="Microsoft.Naming" CheckId="CA1724" Created="2007-03-27 04:29:04Z">
6756 <Issue>
6757 <Item>BasicPhysicsPlugin</Item>
6758 <Item>OpenSim.Physics.BasicPhysicsPlugin</Item>
6759 </Issue>
6760 </Message>
6761 </Messages>
6762 </Type>
6763 </Types>
6764 </Namespace>
6765 </Namespaces>
6766 </Module>
6767 </Modules>
6768 </Target>
6769 <Target Name="$(ProjectDir)/bin/Physics/OpenSim.Physics.OdePlugin.dll">
6770 <Modules>
6771 <Module Name="opensim.physics.odeplugin.dll">
6772 <Messages>
6773 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
6774 <Issue>
6775 <Item>OpenSim.Physics.OdePlugin</Item>
6776 </Issue>
6777 </Message>
6778 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
6779 <Issue Name="NoStrongName">
6780 <Item>OpenSim.Physics.OdePlugin</Item>
6781 </Issue>
6782 </Message>
6783 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
6784 <Issue Name="NoAttr">
6785 <Item>OpenSim.Physics.OdePlugin</Item>
6786 </Issue>
6787 </Message>
6788 </Messages>
6789 <Namespaces>
6790 <Namespace Name="OpenSim.Physics.OdePlugin">
6791 <Types>
6792 <Type Name="OdeCharacter">
6793 <Messages>
6794 <Message TypeName="TypesThatOwnNativeResourcesShouldBeDisposable" Category="Microsoft.Design" CheckId="CA1049" Created="2007-03-27 04:29:04Z">
6795 <Issue>
6796 <Item>OdeCharacter</Item>
6797 </Issue>
6798 </Message>
6799 </Messages>
6800 <Members>
6801 <Member Name=".ctor(OpenSim.Physics.OdePlugin.OdeScene,OpenSim.Physics.Manager.PhysicsVector)">
6802 <Messages>
6803 <Message Id="parent_scene" TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801" Created="2007-03-27 04:29:04Z" FixCategory="Breaking">
6804 <Issue>
6805 <Item>parent_scene</Item>
6806 <Item>OdeCharacter.OdeCharacter(OdeScene, PhysicsVector)</Item>
6807 </Issue>
6808 </Message>
6809 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6810 <Issue>
6811 <Item>'pos'</Item>
6812 <Item>OdeCharacter.OdeCharacter(OdeScene, PhysicsVector)</Item>
6813 </Issue>
6814 </Message>
6815 </Messages>
6816 </Member>
6817 <Member Name="capsule_geom">
6818 <Messages>
6819 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
6820 <Issue>
6821 <Item>OdeCharacter.capsule_geom</Item>
6822 </Issue>
6823 </Message>
6824 </Messages>
6825 </Member>
6826 <Member Name="gravityAccel">
6827 <Messages>
6828 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
6829 <Issue>
6830 <Item>OdeCharacter.gravityAccel</Item>
6831 </Issue>
6832 </Message>
6833 </Messages>
6834 </Member>
6835 <Member Name="SetAcceleration(OpenSim.Physics.Manager.PhysicsVector):System.Void">
6836 <Messages>
6837 <Message Id="0#accel" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6838 <Issue Name="Parameter">
6839 <Item>OdeCharacter.SetAcceleration(PhysicsVector):Void</Item>
6840 <Item>accel</Item>
6841 <Item>accel</Item>
6842 </Issue>
6843 </Message>
6844 </Messages>
6845 </Member>
6846 </Members>
6847 </Type>
6848 <Type Name="OdePlugin">
6849 <Messages>
6850 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6851 <Issue Name="Type">
6852 <Item>Plugin</Item>
6853 <Item>OpenSim.Physics.OdePlugin.OdePlugin</Item>
6854 </Issue>
6855 </Message>
6856 <Message TypeName="TypeNamesShouldNotMatchNamespaces" Category="Microsoft.Naming" CheckId="CA1724" Created="2007-03-27 04:29:04Z">
6857 <Issue>
6858 <Item>OdePlugin</Item>
6859 <Item>OpenSim.Physics.OdePlugin</Item>
6860 </Issue>
6861 </Message>
6862 </Messages>
6863 </Type>
6864 <Type Name="OdePrim">
6865 <Members>
6866 <Member Name="_position">
6867 <Messages>
6868 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
6869 <Issue>
6870 <Item>OdePrim._position</Item>
6871 </Issue>
6872 </Message>
6873 </Messages>
6874 </Member>
6875 <Member Name="SetAcceleration(OpenSim.Physics.Manager.PhysicsVector):System.Void">
6876 <Messages>
6877 <Message Id="0#accel" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
6878 <Issue Name="Parameter">
6879 <Item>OdePrim.SetAcceleration(PhysicsVector):Void</Item>
6880 <Item>accel</Item>
6881 <Item>accel</Item>
6882 </Issue>
6883 </Message>
6884 </Messages>
6885 </Member>
6886 </Members>
6887 </Type>
6888 <Type Name="OdeScene">
6889 <Members>
6890 <Member Name="AddPrim(OpenSim.Physics.Manager.PhysicsVector,OpenSim.Physics.Manager.PhysicsVector):OpenSim.Physics.Manager.PhysicsActor">
6891 <Messages>
6892 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6893 <Issue>
6894 <Item>'position'</Item>
6895 <Item>OdeScene.AddPrim(PhysicsVector, PhysicsVector):PhysicsActor</Item>
6896 </Issue>
6897 <Issue>
6898 <Item>'size'</Item>
6899 <Item>OdeScene.AddPrim(PhysicsVector, PhysicsVector):PhysicsActor</Item>
6900 </Issue>
6901 </Message>
6902 </Messages>
6903 </Member>
6904 <Member Name="Land">
6905 <Messages>
6906 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
6907 <Issue>
6908 <Item>OdeScene.Land</Item>
6909 </Issue>
6910 </Message>
6911 </Messages>
6912 </Member>
6913 <Member Name="LandGeom">
6914 <Messages>
6915 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
6916 <Issue>
6917 <Item>OdeScene.LandGeom</Item>
6918 </Issue>
6919 </Message>
6920 </Messages>
6921 </Member>
6922 <Member Name="SetTerrain(System.Single[]):System.Void">
6923 <Messages>
6924 <Message TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062" Created="2007-03-27 04:29:04Z">
6925 <Issue>
6926 <Item>'heightMap'</Item>
6927 <Item>OdeScene.SetTerrain(Single[]):Void</Item>
6928 </Issue>
6929 <Issue>
6930 <Item>'heightMap'</Item>
6931 <Item>OdeScene.SetTerrain(Single[]):Void</Item>
6932 </Issue>
6933 </Message>
6934 </Messages>
6935 </Member>
6936 <Member Name="space">
6937 <Messages>
6938 <Message TypeName="NonConstantFieldsShouldNotBeVisible" Category="Microsoft.Usage" CheckId="CA2211" Created="2007-03-27 04:29:04Z">
6939 <Issue>
6940 <Item>space</Item>
6941 </Issue>
6942 </Message>
6943 <Message TypeName="PointersShouldNotBeVisible" Category="Microsoft.Security" CheckId="CA2111" Created="2007-03-27 04:29:04Z">
6944 <Issue>
6945 <Item>space</Item>
6946 </Issue>
6947 </Message>
6948 </Messages>
6949 </Member>
6950 <Member Name="world">
6951 <Messages>
6952 <Message TypeName="NonConstantFieldsShouldNotBeVisible" Category="Microsoft.Usage" CheckId="CA2211" Created="2007-03-27 04:29:04Z">
6953 <Issue>
6954 <Item>world</Item>
6955 </Issue>
6956 </Message>
6957 <Message TypeName="PointersShouldNotBeVisible" Category="Microsoft.Security" CheckId="CA2111" Created="2007-03-27 04:29:04Z">
6958 <Issue>
6959 <Item>world</Item>
6960 </Issue>
6961 </Message>
6962 </Messages>
6963 </Member>
6964 </Members>
6965 </Type>
6966 </Types>
6967 </Namespace>
6968 </Namespaces>
6969 </Module>
6970 </Modules>
6971 </Target>
6972 <Target Name="$(ProjectDir)/bin/Physics/OpenSim.Physics.PhysXPlugin.dll">
6973 <Modules>
6974 <Module Name="opensim.physics.physxplugin.dll">
6975 <Messages>
6976 <Message TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209" Created="2007-03-27 04:29:04Z">
6977 <Issue>
6978 <Item>OpenSim.Physics.PhysXPlugin</Item>
6979 </Issue>
6980 </Message>
6981 <Message TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210" Created="2007-03-27 04:29:04Z">
6982 <Issue Name="NoStrongName">
6983 <Item>OpenSim.Physics.PhysXPlugin</Item>
6984 </Issue>
6985 </Message>
6986 <Message TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014" Created="2007-03-27 04:29:04Z">
6987 <Issue Name="NoAttr">
6988 <Item>OpenSim.Physics.PhysXPlugin</Item>
6989 </Issue>
6990 </Message>
6991 </Messages>
6992 <Namespaces>
6993 <Namespace Name="OpenSim.Physics.PhysXPlugin">
6994 <Types>
6995 <Type Name="PhysXCharacter">
6996 <Members>
6997 <Member Name="SetAcceleration(OpenSim.Physics.Manager.PhysicsVector):System.Void">
6998 <Messages>
6999 <Message Id="0#accel" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
7000 <Issue Name="Parameter">
7001 <Item>PhysXCharacter.SetAcceleration(PhysicsVector):Void</Item>
7002 <Item>accel</Item>
7003 <Item>accel</Item>
7004 </Issue>
7005 </Message>
7006 </Messages>
7007 </Member>
7008 </Members>
7009 </Type>
7010 <Type Name="PhysXPlugin">
7011 <Messages>
7012 <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
7013 <Issue Name="Type">
7014 <Item>Plugin</Item>
7015 <Item>OpenSim.Physics.PhysXPlugin.PhysXPlugin</Item>
7016 </Issue>
7017 </Message>
7018 <Message TypeName="TypeNamesShouldNotMatchNamespaces" Category="Microsoft.Naming" CheckId="CA1724" Created="2007-03-27 04:29:04Z">
7019 <Issue>
7020 <Item>PhysXPlugin</Item>
7021 <Item>OpenSim.Physics.PhysXPlugin</Item>
7022 </Issue>
7023 </Message>
7024 </Messages>
7025 </Type>
7026 <Type Name="PhysXPrim">
7027 <Members>
7028 <Member Name="_position">
7029 <Messages>
7030 <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Created="2007-03-27 04:29:04Z">
7031 <Issue>
7032 <Item>PhysXPrim._position</Item>
7033 </Issue>
7034 </Message>
7035 </Messages>
7036 </Member>
7037 <Member Name="SetAcceleration(OpenSim.Physics.Manager.PhysicsVector):System.Void">
7038 <Messages>
7039 <Message Id="0#accel" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Created="2007-03-27 04:29:04Z">
7040 <Issue Name="Parameter">
7041 <Item>PhysXPrim.SetAcceleration(PhysicsVector):Void</Item>
7042 <Item>accel</Item>
7043 <Item>accel</Item>
7044 </Issue>
7045 </Message>
7046 </Messages>
7047 </Member>
7048 </Members>
7049 </Type>
7050 </Types>
7051 </Namespace>
7052 </Namespaces>
7053 </Module>
7054 </Modules>
7055 </Target>
7056 </Targets>
7057 <Notes>
7058 <User Name="Stefan">
7059 <Note Id="0" Modified="2007-03-27 04:30:24Z">Save it for a rainy day.</Note>
7060 <Note Id="1" Modified="2007-03-27 04:30:31Z">Save it for a rainy day.</Note>
7061 <Note Id="2" Modified="2007-03-27 04:30:38Z">Save it for a rainy day.</Note>
7062 </User>
7063 </Notes>
7064 <Rules>
7065 <Rule TypeName="AssembliesShouldDeclareMinimumSecurity" Category="Microsoft.Usage" CheckId="CA2209">
7066 <Resolution Name="Default">No valid permission requests were found for assembly '{0}'. You should always specify the minimum security permissions using SecurityAction.RequestMinimum.</Resolution>
7067 </Rule>
7068 <Rule TypeName="AssembliesShouldHaveValidStrongNames" Category="Microsoft.Design" CheckId="CA2210">
7069 <Resolution Name="NoStrongName">Sign '{0}' with a strong name key.</Resolution>
7070 </Rule>
7071 <Rule TypeName="AvoidNamespacesWithFewTypes" Category="Microsoft.Design" CheckId="CA1020">
7072 <Resolution Name="Default">Consider merging the types defined in '{0}' with another namespace.</Resolution>
7073 </Rule>
7074 <Rule TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823">
7075 <Resolution Name="Default">It appears that field '{0}' is never used or is only ever assigned to. Use this field or remove it.</Resolution>
7076 </Rule>
7077 <Rule TypeName="CollectionPropertiesShouldBeReadOnly" Category="Microsoft.Usage" CheckId="CA2227">
7078 <Resolution Name="Default">Change '{0}' to be read-only by removing the property setter.</Resolution>
7079 </Rule>
7080 <Rule TypeName="CompoundWordsShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1702">
7081 <Resolution Name="ShouldBeDiscreteTerm">The compound word '{0}' in {1} '{2}' exists as a discrete term. If your usage is intended to be single word, case it as '{3}'.</Resolution>
7082 </Rule>
7083 <Rule TypeName="ComVisibleTypeBaseTypesShouldBeComVisible" Category="Microsoft.Interoperability" CheckId="CA1405">
7084 <Resolution Name="Default">'{0}' is marked ComVisible(true) but has the following ComVisible(false) types in its object hierarchy: {1}</Resolution>
7085 </Rule>
7086 <Rule TypeName="ConsiderPassingBaseTypesAsParameters" Category="Microsoft.Design" CheckId="CA1011">
7087 <Resolution Name="Default">Consider changing the type of parameter '{0}' in {1} from {2} to its base type {3}. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature.</Resolution>
7088 </Rule>
7089 <Rule TypeName="DoNotCallOverridableMethodsInConstructors" Category="Microsoft.Usage" CheckId="CA2214">
7090 <Resolution Name="Default">'{0}' contains a call chain that results in a call to a virtual method defined by the class. Review the following call stack for unintended consequences: {1}</Resolution>
7091 </Rule>
7092 <Rule TypeName="DoNotCatchGeneralExceptionTypes" Category="Microsoft.Design" CheckId="CA1031">
7093 <Resolution Name="Default">Modify '{0}' to catch a more specific exception than '{1}' or rethrow the exception.</Resolution>
7094 </Rule>
7095 <Rule TypeName="DoNotDeclareReadOnlyMutableReferenceTypes" Category="Microsoft.Security" CheckId="CA2104">
7096 <Resolution Name="Default">Remove the readonly declaration from '{0}' or change the field to one that is an immutable reference type. If the reference type '{1}' is, in fact, immutable, exclude this message.</Resolution>
7097 </Rule>
7098 <Rule TypeName="DoNotDeclareVisibleInstanceFields" Category="Microsoft.Design" CheckId="CA1051">
7099 <Resolution Name="Default">Make '{0}' private or internal (Friend in VB, public private in C++) and provide a public or protected property to access it.</Resolution>
7100 </Rule>
7101 <Rule TypeName="DoNotExposeGenericLists" Category="Microsoft.Design" CheckId="CA1002">
7102 <Resolution Name="Default">Change '{0}' in {1} to use Collection&lt;T&gt;, ReadOnlyCollection&lt;T&gt; or KeyedCollection&lt;K,V&gt;</Resolution>
7103 </Rule>
7104 <Rule TypeName="DoNotInitializeUnnecessarily" Category="Microsoft.Performance" CheckId="CA1805">
7105 <Resolution Name="Default">{0} initializes field {1} of type {2} to {3}. Remove this initialization as it will be done automatically by the runtime.</Resolution>
7106 </Rule>
7107 <Rule TypeName="DoNotPassLiteralsAsLocalizedParameters" Category="Microsoft.Globalization" CheckId="CA1303">
7108 <Resolution Name="Default">{0} passes a literal as parameter {1} of a call to {2}. Retrieve the following string argument from a resource table instead: '{3}'</Resolution>
7109 </Rule>
7110 <Rule TypeName="DoNotPassTypesByReference" Category="Microsoft.Design" CheckId="CA1045">
7111 <Resolution Name="Default">Consider a design that does not require that '{0}' be a reference parameter.</Resolution>
7112 </Rule>
7113 <Rule TypeName="DoNotRaiseReservedExceptionTypes" Category="Microsoft.Usage" CheckId="CA2201">
7114 <Resolution Name="TooGeneric">{0} creates an exception of type '{1}', an exception type that is not sufficiently specific and should never be raised by user code. If this exception instance might be thrown, use a different exception type.</Resolution>
7115 </Rule>
7116 <Rule TypeName="DoNotUseTimersThatPreventPowerStateChanges" Category="Microsoft.Mobility" CheckId="CA1601">
7117 <Resolution Name="Default">Modify the call to {0} in method {1} to set the timer interval to a value that's greater than or equal to one second.</Resolution>
7118 </Rule>
7119 <Rule TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709">
7120 <Resolution Name="Member">Correct the casing of member name '{0}'.</Resolution>
7121 <Resolution Name="Namespace">Correct the casing of namespace name '{0}'.</Resolution>
7122 <Resolution Name="Parameter">Correct the casing of parameter name '{0}'.</Resolution>
7123 <Resolution Name="Type">Correct the casing of type name '{0}'.</Resolution>
7124 </Rule>
7125 <Rule TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704">
7126 <Resolution Name="Member">Correct the spelling of the unrecognized token '{0}' in member name '{1}'.</Resolution>
7127 <Resolution Name="MemberOneLetter">Consider providing a more meaningful name than the one-letter token '{0}' in member name '{1}'.</Resolution>
7128 <Resolution Name="Namespace">Correct the spelling of the unrecognized token '{0}' in namespace '{1}'.</Resolution>
7129 <Resolution Name="Parameter">In method {0}, correct the spelling of the unrecognized token '{1}' in parameter name '{2}' or strip it entirely if it represents any sort of hungarian notation.</Resolution>
7130 <Resolution Name="ParameterOneLetter">In method {0}, consider providing a more meaningful name than the one-letter parameter name '{1}'.</Resolution>
7131 <Resolution Name="Type">Correct the spelling of the unrecognized token '{0}' in type name '{1}'.</Resolution>
7132 </Rule>
7133 <Rule TypeName="IdentifiersShouldDifferByMoreThanCase" Category="Microsoft.Naming" CheckId="CA1708">
7134 <Resolution Name="Member">Change member names {0} and '{1}' so that they differ by more than case.</Resolution>
7135 </Rule>
7136 <Rule TypeName="IdentifiersShouldNotContainUnderscores" Category="Microsoft.Naming" CheckId="CA1707">
7137 <Resolution Name="Member">Remove all underscores from member '{0}'.</Resolution>
7138 <Resolution Name="Parameter">Remove all underscores from parameter '{0}'.</Resolution>
7139 <Resolution Name="Type">Remove all underscores from type '{0}'.</Resolution>
7140 </Rule>
7141 <Rule TypeName="IdentifiersShouldNotHaveIncorrectSuffix" Category="Microsoft.Naming" CheckId="CA1711">
7142 <Resolution Name="Default">Rename '{0}' so that it does not end in '{1}'.</Resolution>
7143 </Rule>
7144 <Rule TypeName="LiteralsShouldBeSpelledCorrectly" Category="Microsoft.Usage" CheckId="CA2204">
7145 <Resolution Name="Default">Correct the spelling of the unrecognized token '{0}' in the literal '{1}'.</Resolution>
7146 </Rule>
7147 <Rule TypeName="LongAcronymsShouldBePascalCased" Category="Microsoft.Naming" CheckId="CA1705">
7148 <Resolution Name="Member">Correct the capitalization of member name '{0}'.</Resolution>
7149 <Resolution Name="Namespace">Correct the capitalization of namespace name '{0}'.</Resolution>
7150 <Resolution Name="Parameter">Correct the capitalization of parameter name '{0}'.</Resolution>
7151 <Resolution Name="Type">Correct the capitalization of type name '{0}'.</Resolution>
7152 </Rule>
7153 <Rule TypeName="MarkAssembliesWithAssemblyVersion" Category="Microsoft.Design" CheckId="CA1016">
7154 <Resolution Name="Default">Add an AssemblyVersion attribute to '{0}'.</Resolution>
7155 </Rule>
7156 <Rule TypeName="MarkAssembliesWithClsCompliant" Category="Microsoft.Design" CheckId="CA1014">
7157 <Resolution Name="NoAttr">'{0}' should be marked with CLSCompliantAttribute and its value should be true.</Resolution>
7158 </Rule>
7159 <Rule TypeName="MarkAssembliesWithComVisible" Category="Microsoft.Design" CheckId="CA1017">
7160 <Resolution Name="NoAttribute">Mark '{0}' as ComVisible(false) at the assembly level, then mark all types within the assembly that should be exposed to Com clients as ComVisible(true).</Resolution>
7161 </Rule>
7162 <Rule TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822">
7163 <Resolution Name="Default">The 'this' parameter (or 'Me' in VB) of {0} is never used. Mark the member as static (or Shared in VB) or use 'this'/'Me' in the method body or at least one property accessor, if appropriate.</Resolution>
7164 </Rule>
7165 <Rule TypeName="NonConstantFieldsShouldNotBeVisible" Category="Microsoft.Usage" CheckId="CA2211">
7166 <Resolution Name="Default">Consider making '{0}' non-public or a constant.</Resolution>
7167 </Rule>
7168 <Rule TypeName="OperationsShouldNotOverflow" Category="Microsoft.Usage" CheckId="CA2233">
7169 <Resolution Name="Default">Correct the potential overflow in the operation '{0}' in '{1}'.</Resolution>
7170 </Rule>
7171 <Rule TypeName="OperatorOverloadsHaveNamedAlternates" Category="Microsoft.Usage" CheckId="CA2225">
7172 <Resolution Name="Default">Provide a method named '{0}' as a friendly alternate for operator {1}.</Resolution>
7173 </Rule>
7174 <Rule TypeName="OverloadOperatorEqualsOnOverloadingAddAndSubtract" Category="Microsoft.Design" CheckId="CA1013">
7175 <Resolution Name="Default">Consider adding an overload of the equality operator for '{0}' that takes the same parameters as {1}.</Resolution>
7176 </Rule>
7177 <Rule TypeName="OverrideEqualsAndOperatorEqualsOnValueTypes" Category="Microsoft.Performance" CheckId="CA1815">
7178 <Resolution Name="Equals">'{0}' should override Equals.</Resolution>
7179 <Resolution Name="op_Equality">'{0}' should override the equality (==) and inequality (!=) operators.</Resolution>
7180 </Rule>
7181 <Rule TypeName="ParameterNamesShouldMatchBaseDeclaration" Category="Microsoft.Naming" CheckId="CA1725">
7182 <Resolution Name="Default">Change parameter name '{0}' of method {1} to '{2}' in order to match the identifier as it has been declared in {3}.</Resolution>
7183 </Rule>
7184 <Rule TypeName="PassSystemUriObjectsInsteadOfStrings" Category="Microsoft.Usage" CheckId="CA2234">
7185 <Resolution Name="Default">Modify {0} to call {1} instead of {2}.</Resolution>
7186 </Rule>
7187 <Rule TypeName="PointersShouldNotBeVisible" Category="Microsoft.Security" CheckId="CA2111">
7188 <Resolution Name="Default">Make '{0}' private.</Resolution>
7189 </Rule>
7190 <Rule TypeName="PropertiesShouldNotBeWriteOnly" Category="Microsoft.Design" CheckId="CA1044">
7191 <Resolution Name="Default">Add a property getter to '{0}'.</Resolution>
7192 </Rule>
7193 <Rule TypeName="RemoveUnusedLocals" Category="Microsoft.Performance" CheckId="CA1804">
7194 <Resolution Name="Default">{0} declares a local, '{1}', of type {2}, which is never used or is only assigned to. Use this local or remove it.</Resolution>
7195 </Rule>
7196 <Rule TypeName="ReviewUnusedParameters" Category="Microsoft.Usage" CheckId="CA1801">
7197 <Resolution Name="Default">Parameter '{0}' of {1} is never used. Remove the parameter or use it in the method body.</Resolution>
7198 </Rule>
7199 <Rule TypeName="ShortAcronymsShouldBeUppercase" Category="Microsoft.Naming" CheckId="CA1706">
7200 <Resolution Name="Member">Correct the capitalization of '{0}' in member name '{1}'.</Resolution>
7201 <Resolution Name="MemberId">'Id' is an abbreviation and therefore is not subject to acronym casing guidelines. Correct the capitalization of 'ID' in member name '{0}' by changing it to 'Id'.</Resolution>
7202 <Resolution Name="ParameterId">'Id' is an abbreviation and therefore is not subject to acronym casing guidelines. Correct the capitalization of '{0}' in parameter name '{1}' by changing it to '{2}'.</Resolution>
7203 <Resolution Name="Type">Correct the capitalization of '{0}' in type name '{1}'.</Resolution>
7204 </Rule>
7205 <Rule TypeName="SpecifyCultureInfo" Category="Microsoft.Globalization" CheckId="CA1304">
7206 <Resolution Name="Default">{0} makes a call to {1} that does not explicitly provide a CultureInfo. This should be replaced with a call to {2}.</Resolution>
7207 </Rule>
7208 <Rule TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305">
7209 <Resolution Name="Default">{0} makes a call to {1} that does not explicitly provide an IFormatProvider. This should be replaced with a call to {2}.</Resolution>
7210 </Rule>
7211 <Rule TypeName="StaticHolderTypesShouldNotHaveConstructors" Category="Microsoft.Design" CheckId="CA1053">
7212 <Resolution Name="Default">Remove the public constructors from '{0}'.</Resolution>
7213 </Rule>
7214 <Rule TypeName="TestForEmptyStringsUsingStringLength" Category="Microsoft.Performance" CheckId="CA1820">
7215 <Resolution Name="IsNullOrEmpty">Replace the call to String.{0}({1}) in '{2}' with a call to String.IsNullOrEmpty.</Resolution>
7216 </Rule>
7217 <Rule TypeName="TypeNamesShouldNotMatchNamespaces" Category="Microsoft.Naming" CheckId="CA1724">
7218 <Resolution Name="Default">The type name '{0}' conflicts in whole or in part with the namespace name '{1}'. Change either name to eliminate the conflict.</Resolution>
7219 </Rule>
7220 <Rule TypeName="TypesThatOwnDisposableFieldsShouldBeDisposable" Category="Microsoft.Design" CheckId="CA1001">
7221 <Resolution Name="Default">Implement IDisposable on '{0}' as it instantiates members of the following IDisposable types: {1}</Resolution>
7222 </Rule>
7223 <Rule TypeName="TypesThatOwnNativeResourcesShouldBeDisposable" Category="Microsoft.Design" CheckId="CA1049">
7224 <Resolution Name="Default">Implement IDisposable on '{0}'.</Resolution>
7225 </Rule>
7226 <Rule TypeName="UriParametersShouldNotBeStrings" Category="Microsoft.Design" CheckId="CA1054">
7227 <Resolution Name="Default">Change the type of parameter '{0}' of method {1} from string to System.Uri, or provide an overload of {1}, that allows '{0}' to be passed as a System.Uri object.</Resolution>
7228 </Rule>
7229 <Rule TypeName="UsePreferredTerms" Category="Microsoft.Naming" CheckId="CA1726">
7230 <Resolution Name="Member">Replace the term '{0}' in member name '{1}' with the preferred alternate '{2}'.</Resolution>
7231 <Resolution Name="Type">Replace the term '{0}' in type name '{1}' with the preferred alternate '{2}'.</Resolution>
7232 </Rule>
7233 <Rule TypeName="UsePropertiesWhereAppropriate" Category="Microsoft.Design" CheckId="CA1024">
7234 <Resolution Name="Default">Change '{0}' to a property if appropriate.</Resolution>
7235 </Rule>
7236 <Rule TypeName="ValidateArgumentsOfPublicMethods" Category="Microsoft.Design" CheckId="CA1062">
7237 <Resolution Name="Default">Validate parameter {0} passed to externally visible method {1}.</Resolution>
7238 </Rule>
7239 </Rules>
7240 </FxCopReport>
7241</FxCopProject>
diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs
new file mode 100644
index 0000000..109d027
--- /dev/null
+++ b/OpenSim/Framework/Communications/CommunicationsManager.cs
@@ -0,0 +1,70 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
29using libsecondlife;
30using libsecondlife.Packets;
31using OpenSim.Framework.Data;
32using OpenSim.Framework.Interfaces;
33using OpenSim.Framework.Types;
34using OpenSim.Framework.Servers;
35
36namespace OpenSim.Framework.Communications
37{
38
39 public class CommunicationsManager
40 {
41 public IUserServices UserServer;
42 public IGridServices GridServer;
43 public IInterRegionCommunications InterRegion;
44
45 public NetworkServersInfo ServersInfo;
46 public CommunicationsManager(NetworkServersInfo serversInfo, BaseHttpServer httpServer)
47 {
48 ServersInfo = serversInfo;
49 }
50
51 #region Packet Handlers
52 public void HandleUUIDNameRequest(LLUUID uuid, IClientAPI remote_client)
53 {
54 Encoding enc = Encoding.ASCII;
55 UserProfileData profileData = this.UserServer.GetUserProfile(uuid);
56 if (profileData != null)
57 {
58 UUIDNameReplyPacket packet = new UUIDNameReplyPacket();
59 packet.UUIDNameBlock = new UUIDNameReplyPacket.UUIDNameBlockBlock[1];
60 packet.UUIDNameBlock[0] = new UUIDNameReplyPacket.UUIDNameBlockBlock();
61 packet.UUIDNameBlock[0].ID = profileData.UUID;
62 packet.UUIDNameBlock[0].FirstName = enc.GetBytes(profileData.username + "\0");
63 packet.UUIDNameBlock[0].LastName = enc.GetBytes(profileData.surname +"\0");
64 remote_client.OutPacket((Packet)packet);
65 }
66
67 }
68 #endregion
69 }
70}
diff --git a/OpenSim/Framework/Communications/IGridServices.cs b/OpenSim/Framework/Communications/IGridServices.cs
new file mode 100644
index 0000000..c296209
--- /dev/null
+++ b/OpenSim/Framework/Communications/IGridServices.cs
@@ -0,0 +1,43 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System.Collections.Generic;
30using OpenSim.Framework.Types;
31
32namespace OpenSim.Framework.Communications
33{
34
35
36 public interface IGridServices
37 {
38 RegionCommsListener RegisterRegion(RegionInfo regionInfos);
39 List<RegionInfo> RequestNeighbours(RegionInfo regionInfo);
40 RegionInfo RequestNeighbourInfo(ulong regionHandle);
41 List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY);
42 }
43}
diff --git a/OpenSim/Framework/Communications/IInterRegionCommunications.cs b/OpenSim/Framework/Communications/IInterRegionCommunications.cs
new file mode 100644
index 0000000..55f12ac
--- /dev/null
+++ b/OpenSim/Framework/Communications/IInterRegionCommunications.cs
@@ -0,0 +1,38 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using OpenSim.Framework.Types;
30
31namespace OpenSim.Framework.Communications
32{
33 public interface IInterRegionCommunications
34 {
35 bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData);
36 bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position);
37 }
38}
diff --git a/OpenSim/Framework/Communications/IUserServices.cs b/OpenSim/Framework/Communications/IUserServices.cs
new file mode 100644
index 0000000..0b1f86c
--- /dev/null
+++ b/OpenSim/Framework/Communications/IUserServices.cs
@@ -0,0 +1,43 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using OpenSim.Framework.Data;
30
31namespace OpenSim.Framework.Communications
32{
33 public interface IUserServices
34 {
35 UserProfileData GetUserProfile(string firstName, string lastName);
36 UserProfileData GetUserProfile(string name);
37 UserProfileData GetUserProfile(LLUUID avatarID);
38
39 UserProfileData SetupMasterUser(string firstName, string lastName);
40 UserProfileData SetupMasterUser(string firstName, string lastName, string password);
41
42 }
43}
diff --git a/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs b/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..09f6473
--- /dev/null
+++ b/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs
@@ -0,0 +1,60 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// General Information about an assembly is controlled through the following
31// set of attributes. Change these attribute values to modify the information
32// associated with an assembly.
33[assembly: AssemblyTitle("OpenGrid.Framework.Communications")]
34[assembly: AssemblyDescription("")]
35[assembly: AssemblyConfiguration("")]
36[assembly: AssemblyCompany("")]
37[assembly: AssemblyProduct("OpenGrid.Framework.Communications")]
38[assembly: AssemblyCopyright("Copyright © 2007")]
39[assembly: AssemblyTrademark("")]
40[assembly: AssemblyCulture("")]
41
42// Setting ComVisible to false makes the types in this assembly not visible
43// to COM components. If you need to access a type in this assembly from
44// COM, set the ComVisible attribute to true on that type.
45[assembly: ComVisible(false)]
46
47// The following GUID is for the ID of the typelib if this project is exposed to COM
48[assembly: Guid("13e7c396-78a9-4a5c-baf2-6f980ea75d95")]
49
50// Version information for an assembly consists of the following four values:
51//
52// Major Version
53// Minor Version
54// Build Number
55// Revision
56//
57// You can specify all the values or you can default the Revision and Build Numbers
58// by using the '*' as shown below:
59[assembly: AssemblyVersion("1.0.0.0")]
60[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/Console/AssemblyInfo.cs b/OpenSim/Framework/Console/AssemblyInfo.cs
new file mode 100644
index 0000000..30f6167
--- /dev/null
+++ b/OpenSim/Framework/Console/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("ServerConsole")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("ServerConsole")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Framework/Console/ConsoleCallbacksBase.cs b/OpenSim/Framework/Console/ConsoleCallbacksBase.cs
new file mode 100644
index 0000000..346cfe6
--- /dev/null
+++ b/OpenSim/Framework/Console/ConsoleCallbacksBase.cs
@@ -0,0 +1,35 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Console
29{
30 public interface conscmd_callback
31 {
32 void RunCmd(string cmd, string[] cmdparams);
33 void Show(string ShowWhat);
34 }
35}
diff --git a/OpenSim/Framework/Console/LogBase.cs b/OpenSim/Framework/Console/LogBase.cs
new file mode 100644
index 0000000..f73e15e
--- /dev/null
+++ b/OpenSim/Framework/Console/LogBase.cs
@@ -0,0 +1,282 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.IO;
30using System.Net;
31
32namespace OpenSim.Framework.Console
33{
34 public enum LogPriority : int
35 {
36 CRITICAL,
37 HIGH,
38 MEDIUM,
39 NORMAL,
40 LOW,
41 VERBOSE,
42 EXTRAVERBOSE
43 }
44
45 public class LogBase
46 {
47 StreamWriter Log;
48 public conscmd_callback cmdparser;
49 public string componentname;
50 private bool m_silent;
51
52 public LogBase(string LogFile, string componentname, conscmd_callback cmdparser, bool silent)
53 {
54 this.componentname = componentname;
55 this.cmdparser = cmdparser;
56 this.m_silent = silent;
57 System.Console.WriteLine("ServerConsole.cs - creating new local console");
58
59 if (String.IsNullOrEmpty(LogFile))
60 {
61 LogFile = componentname + ".log";
62 }
63
64 System.Console.WriteLine("Logs will be saved to current directory in " + LogFile);
65 Log = File.AppendText(LogFile);
66 Log.WriteLine("========================================================================");
67 Log.WriteLine(componentname + " Started at " + DateTime.Now.ToString());
68 }
69
70 public void Close()
71 {
72 Log.WriteLine("Shutdown at " + DateTime.Now.ToString());
73 Log.Close();
74 }
75
76 public void Write(string format, params object[] args)
77 {
78 Notice(format, args);
79 return;
80 }
81
82 public void WriteLine(LogPriority importance, string format, params object[] args)
83 {
84 Log.WriteLine(format, args);
85 Log.Flush();
86 if (!m_silent)
87 {
88 System.Console.WriteLine(format, args);
89 }
90 return;
91 }
92
93 public void Warn(string format, params object[] args)
94 {
95 WriteNewLine(ConsoleColor.Yellow, format, args);
96 return;
97 }
98
99 public void Notice(string format, params object[] args)
100 {
101 WriteNewLine(ConsoleColor.White, format, args);
102 return;
103 }
104
105 public void Error(string format, params object[] args)
106 {
107 WriteNewLine(ConsoleColor.Red, format, args);
108 return;
109 }
110
111 public void Verbose(string format, params object[] args)
112 {
113 WriteNewLine(ConsoleColor.Gray, format, args);
114 return;
115 }
116
117 public void Status(string format, params object[] args)
118 {
119 WriteNewLine(ConsoleColor.Blue, format, args);
120 return;
121 }
122
123 private void WriteNewLine(ConsoleColor color, string format, params object[] args)
124 {
125 Log.WriteLine(format, args);
126 Log.Flush();
127 if (!m_silent)
128 {
129 try
130 {
131 System.Console.ForegroundColor = color;
132 System.Console.WriteLine(format, args);
133 System.Console.ResetColor();
134 }
135 catch (ArgumentNullException)
136 {
137 // Some older systems dont support coloured text.
138 System.Console.WriteLine(format, args);
139 }
140 }
141 return;
142 }
143
144 public string ReadLine()
145 {
146 string TempStr = System.Console.ReadLine();
147 Log.WriteLine(TempStr);
148 return TempStr;
149 }
150
151 public int Read()
152 {
153 int TempInt = System.Console.Read();
154 Log.Write((char)TempInt);
155 return TempInt;
156 }
157
158 public IPAddress CmdPromptIPAddress(string prompt, string defaultvalue)
159 {
160 IPAddress address;
161 string addressStr;
162
163 while (true)
164 {
165 addressStr = MainLog.Instance.CmdPrompt(prompt, defaultvalue);
166 if (IPAddress.TryParse(addressStr, out address))
167 {
168 break;
169 }
170 else
171 {
172 MainLog.Instance.Error("Illegal address. Please re-enter.");
173 }
174 }
175
176 return address;
177 }
178
179 public int CmdPromptIPPort(string prompt, string defaultvalue)
180 {
181 int port;
182 string portStr;
183
184 while (true)
185 {
186 portStr = MainLog.Instance.CmdPrompt(prompt, defaultvalue);
187 if (int.TryParse(portStr, out port))
188 {
189 if (port >= IPEndPoint.MinPort && port <= IPEndPoint.MaxPort)
190 {
191 break;
192 }
193 }
194
195 MainLog.Instance.Error("Illegal address. Please re-enter.");
196 }
197
198 return port;
199 }
200
201 // Displays a prompt and waits for the user to enter a string, then returns that string
202 // Done with no echo and suitable for passwords
203 public string PasswdPrompt(string prompt)
204 {
205 // FIXME: Needs to be better abstracted
206 Log.WriteLine(prompt);
207 this.Write(prompt);
208 ConsoleColor oldfg = System.Console.ForegroundColor;
209 System.Console.ForegroundColor = System.Console.BackgroundColor;
210 string temp = System.Console.ReadLine();
211 System.Console.ForegroundColor = oldfg;
212 return temp;
213 }
214
215 // Displays a command prompt and waits for the user to enter a string, then returns that string
216 public string CmdPrompt(string prompt)
217 {
218 this.Write(String.Format("{0}: ", prompt));
219 return this.ReadLine();
220 }
221
222 // Displays a command prompt and returns a default value if the user simply presses enter
223 public string CmdPrompt(string prompt, string defaultresponse)
224 {
225 string temp = CmdPrompt(String.Format("{0} [{1}]", prompt, defaultresponse));
226 if (temp == "")
227 {
228 return defaultresponse;
229 }
230 else
231 {
232 return temp;
233 }
234 }
235
236 // Displays a command prompt and returns a default value, user may only enter 1 of 2 options
237 public string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB)
238 {
239 bool itisdone = false;
240 string temp = CmdPrompt(prompt, defaultresponse);
241 while (itisdone == false)
242 {
243 if ((temp == OptionA) || (temp == OptionB))
244 {
245 itisdone = true;
246 }
247 else
248 {
249 Notice("Valid options are " + OptionA + " or " + OptionB);
250 temp = CmdPrompt(prompt, defaultresponse);
251 }
252 }
253 return temp;
254 }
255
256 // Runs a command with a number of parameters
257 public Object RunCmd(string Cmd, string[] cmdparams)
258 {
259 cmdparser.RunCmd(Cmd, cmdparams);
260 return null;
261 }
262
263 // Shows data about something
264 public void ShowCommands(string ShowWhat)
265 {
266 cmdparser.Show(ShowWhat);
267 }
268
269 public void MainLogPrompt()
270 {
271 string[] tempstrarray;
272 string tempstr = this.CmdPrompt(this.componentname + "# ");
273 tempstrarray = tempstr.Split(' ');
274 string cmd = tempstrarray[0];
275 Array.Reverse(tempstrarray);
276 Array.Resize<string>(ref tempstrarray, tempstrarray.Length - 1);
277 Array.Reverse(tempstrarray);
278 string[] cmdparams = (string[])tempstrarray;
279 RunCmd(cmd, cmdparams);
280 }
281 }
282}
diff --git a/OpenSim/Framework/Console/MainLog.cs b/OpenSim/Framework/Console/MainLog.cs
new file mode 100644
index 0000000..7d52622
--- /dev/null
+++ b/OpenSim/Framework/Console/MainLog.cs
@@ -0,0 +1,47 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Console
29{
30 public class MainLog {
31
32 private static LogBase instance;
33
34 public static LogBase Instance
35 {
36 get
37 {
38 return instance;
39 }
40 set
41 {
42 instance = value;
43 }
44 }
45 }
46
47}
diff --git a/OpenSim/Framework/Data.DB4o/DB4oGridData.cs b/OpenSim/Framework/Data.DB4o/DB4oGridData.cs
new file mode 100644
index 0000000..5fec367
--- /dev/null
+++ b/OpenSim/Framework/Data.DB4o/DB4oGridData.cs
@@ -0,0 +1,162 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using libsecondlife;
31
32namespace OpenSim.Framework.Data.DB4o
33{
34 /// <summary>
35 /// A grid server storage mechanism employing the DB4o database system
36 /// </summary>
37 class DB4oGridData : IGridData
38 {
39 /// <summary>
40 /// The database manager object
41 /// </summary>
42 DB4oGridManager manager;
43
44 /// <summary>
45 /// Called when the plugin is first loaded (as constructors are not called)
46 /// </summary>
47 public void Initialise() {
48 manager = new DB4oGridManager("gridserver.yap");
49 }
50
51 /// <summary>
52 /// Returns a list of regions within the specified ranges
53 /// </summary>
54 /// <param name="a">minimum X coordinate</param>
55 /// <param name="b">minimum Y coordinate</param>
56 /// <param name="c">maximum X coordinate</param>
57 /// <param name="d">maximum Y coordinate</param>
58 /// <returns>An array of region profiles</returns>
59 public SimProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d)
60 {
61 return null;
62 }
63
64 /// <summary>
65 /// Returns a region located at the specified regionHandle (warning multiple regions may occupy the one spot, first found is returned)
66 /// </summary>
67 /// <param name="handle">The handle to search for</param>
68 /// <returns>A region profile</returns>
69 public SimProfileData GetProfileByHandle(ulong handle) {
70 lock (manager.simProfiles)
71 {
72 foreach (LLUUID UUID in manager.simProfiles.Keys)
73 {
74 if (manager.simProfiles[UUID].regionHandle == handle)
75 {
76 return manager.simProfiles[UUID];
77 }
78 }
79 }
80 throw new Exception("Unable to find profile with handle (" + handle.ToString() + ")");
81 }
82
83 /// <summary>
84 /// Returns a specific region
85 /// </summary>
86 /// <param name="uuid">The region ID code</param>
87 /// <returns>A region profile</returns>
88 public SimProfileData GetProfileByLLUUID(LLUUID uuid)
89 {
90 lock (manager.simProfiles)
91 {
92 if (manager.simProfiles.ContainsKey(uuid))
93 return manager.simProfiles[uuid];
94 }
95 throw new Exception("Unable to find profile with UUID (" + uuid.ToStringHyphenated() + "). Total Registered Regions: " + manager.simProfiles.Count);
96 }
97
98 /// <summary>
99 /// Adds a new specified region to the database
100 /// </summary>
101 /// <param name="profile">The profile to add</param>
102 /// <returns>A dataresponse enum indicating success</returns>
103 public DataResponse AddProfile(SimProfileData profile)
104 {
105 lock (manager.simProfiles)
106 {
107 if (manager.AddRow(profile))
108 {
109 return DataResponse.RESPONSE_OK;
110 }
111 else
112 {
113 return DataResponse.RESPONSE_ERROR;
114 }
115 }
116 }
117
118 /// <summary>
119 /// Authenticates a new region using the shared secrets. NOT SECURE.
120 /// </summary>
121 /// <param name="uuid">The UUID the region is authenticating with</param>
122 /// <param name="handle">The location the region is logging into (unused in Db4o)</param>
123 /// <param name="key">The shared secret</param>
124 /// <returns>Authenticated?</returns>
125 public bool AuthenticateSim(LLUUID uuid, ulong handle, string key) {
126 if (manager.simProfiles[uuid].regionRecvKey == key)
127 return true;
128 return false;
129 }
130
131 /// <summary>
132 /// Shuts down the database
133 /// </summary>
134 public void Close()
135 {
136 manager = null;
137 }
138
139 /// <summary>
140 /// Returns the providers name
141 /// </summary>
142 /// <returns>The name of the storage system</returns>
143 public string getName()
144 {
145 return "DB4o Grid Provider";
146 }
147
148 /// <summary>
149 /// Returns the providers version
150 /// </summary>
151 /// <returns>The version of the storage system</returns>
152 public string getVersion()
153 {
154 return "0.1";
155 }
156
157 public ReservationData GetReservationAtPoint(uint x, uint y)
158 {
159 return null;
160 }
161 }
162}
diff --git a/OpenSim/Framework/Data.DB4o/DB4oManager.cs b/OpenSim/Framework/Data.DB4o/DB4oManager.cs
new file mode 100644
index 0000000..0df6350
--- /dev/null
+++ b/OpenSim/Framework/Data.DB4o/DB4oManager.cs
@@ -0,0 +1,163 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Db4objects.Db4o;
31using libsecondlife;
32
33namespace OpenSim.Framework.Data.DB4o
34{
35 /// <summary>
36 /// A Database manager for Db4o
37 /// </summary>
38 class DB4oGridManager
39 {
40 /// <summary>
41 /// A list of the current regions connected (in-memory cache)
42 /// </summary>
43 public Dictionary<LLUUID, SimProfileData> simProfiles = new Dictionary<LLUUID, SimProfileData>();
44 /// <summary>
45 /// Database File Name
46 /// </summary>
47 string dbfl;
48
49 /// <summary>
50 /// Creates a new grid storage manager
51 /// </summary>
52 /// <param name="db4odb">Filename to the database file</param>
53 public DB4oGridManager(string db4odb)
54 {
55 dbfl = db4odb;
56 IObjectContainer database;
57 database = Db4oFactory.OpenFile(dbfl);
58 IObjectSet result = database.Get(typeof(SimProfileData));
59 // Loads the file into the in-memory cache
60 foreach(SimProfileData row in result) {
61 simProfiles.Add(row.UUID, row);
62 }
63 database.Close();
64 }
65
66 /// <summary>
67 /// Adds a new profile to the database (Warning: Probably slow.)
68 /// </summary>
69 /// <param name="row">The profile to add</param>
70 /// <returns>Successful?</returns>
71 public bool AddRow(SimProfileData row)
72 {
73 if (simProfiles.ContainsKey(row.UUID))
74 {
75 simProfiles[row.UUID] = row;
76 }
77 else
78 {
79 simProfiles.Add(row.UUID, row);
80 }
81
82 try
83 {
84 IObjectContainer database;
85 database = Db4oFactory.OpenFile(dbfl);
86 database.Set(row);
87 database.Close();
88 return true;
89 }
90 catch (Exception)
91 {
92 return false;
93 }
94 }
95
96
97 }
98
99 /// <summary>
100 /// A manager for the DB4o database (user profiles)
101 /// </summary>
102 class DB4oUserManager
103 {
104 /// <summary>
105 /// A list of the user profiles (in memory cache)
106 /// </summary>
107 public Dictionary<LLUUID, UserProfileData> userProfiles = new Dictionary<LLUUID, UserProfileData>();
108 /// <summary>
109 /// Database filename
110 /// </summary>
111 string dbfl;
112
113 /// <summary>
114 /// Initialises a new DB manager
115 /// </summary>
116 /// <param name="db4odb">The filename to the database</param>
117 public DB4oUserManager(string db4odb)
118 {
119 dbfl = db4odb;
120 IObjectContainer database;
121 database = Db4oFactory.OpenFile(dbfl);
122 // Load to cache
123 IObjectSet result = database.Get(typeof(UserProfileData));
124 foreach (UserProfileData row in result)
125 {
126 userProfiles.Add(row.UUID, row);
127 }
128 database.Close();
129 }
130
131 /// <summary>
132 /// Adds a new profile to the database (Warning: Probably slow.)
133 /// </summary>
134 /// <param name="row">The profile to add</param>
135 /// <returns>Successful?</returns>
136 public bool AddRow(UserProfileData row)
137 {
138 if (userProfiles.ContainsKey(row.UUID))
139 {
140 userProfiles[row.UUID] = row;
141 }
142 else
143 {
144 userProfiles.Add(row.UUID, row);
145 }
146
147 try
148 {
149 IObjectContainer database;
150 database = Db4oFactory.OpenFile(dbfl);
151 database.Set(row);
152 database.Close();
153 return true;
154 }
155 catch (Exception)
156 {
157 return false;
158 }
159 }
160
161
162 }
163}
diff --git a/OpenSim/Framework/Data.DB4o/DB4oUserData.cs b/OpenSim/Framework/Data.DB4o/DB4oUserData.cs
new file mode 100644
index 0000000..2e33ab0
--- /dev/null
+++ b/OpenSim/Framework/Data.DB4o/DB4oUserData.cs
@@ -0,0 +1,202 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
30
31namespace OpenSim.Framework.Data.DB4o
32{
33 /// <summary>
34 /// A User storage interface for the DB4o database system
35 /// </summary>
36 public class DB4oUserData : IUserData
37 {
38 /// <summary>
39 /// The database manager
40 /// </summary>
41 DB4oUserManager manager;
42
43 /// <summary>
44 /// Artificial constructor called upon plugin load
45 /// </summary>
46 public void Initialise()
47 {
48 manager = new DB4oUserManager("userprofiles.yap");
49 }
50
51 /// <summary>
52 /// Loads a specified user profile from a UUID
53 /// </summary>
54 /// <param name="uuid">The users UUID</param>
55 /// <returns>A user profile</returns>
56 public UserProfileData getUserByUUID(LLUUID uuid)
57 {
58 if(manager.userProfiles.ContainsKey(uuid))
59 return manager.userProfiles[uuid];
60 return null;
61 }
62
63 /// <summary>
64 /// Returns a user by searching for its name
65 /// </summary>
66 /// <param name="name">The users account name</param>
67 /// <returns>A matching users profile</returns>
68 public UserProfileData getUserByName(string name)
69 {
70 return getUserByName(name.Split(' ')[0], name.Split(' ')[1]);
71 }
72
73 /// <summary>
74 /// Returns a user by searching for its name
75 /// </summary>
76 /// <param name="fname">The first part of the users account name</param>
77 /// <param name="lname">The second part of the users account name</param>
78 /// <returns>A matching users profile</returns>
79 public UserProfileData getUserByName(string fname, string lname)
80 {
81 foreach (UserProfileData profile in manager.userProfiles.Values)
82 {
83 if (profile.username == fname && profile.surname == lname)
84 return profile;
85 }
86 return null;
87 }
88
89 /// <summary>
90 /// Returns a user by UUID direct
91 /// </summary>
92 /// <param name="uuid">The users account ID</param>
93 /// <returns>A matching users profile</returns>
94 public UserAgentData getAgentByUUID(LLUUID uuid)
95 {
96 try
97 {
98 return getUserByUUID(uuid).currentAgent;
99 }
100 catch (Exception)
101 {
102 return null;
103 }
104 }
105
106 /// <summary>
107 /// Returns a session by account name
108 /// </summary>
109 /// <param name="name">The account name</param>
110 /// <returns>The users session agent</returns>
111 public UserAgentData getAgentByName(string name)
112 {
113 return getAgentByName(name.Split(' ')[0], name.Split(' ')[1]);
114 }
115
116 /// <summary>
117 /// Returns a session by account name
118 /// </summary>
119 /// <param name="fname">The first part of the users account name</param>
120 /// <param name="lname">The second part of the users account name</param>
121 /// <returns>A user agent</returns>
122 public UserAgentData getAgentByName(string fname, string lname)
123 {
124 try
125 {
126 return getUserByName(fname,lname).currentAgent;
127 }
128 catch (Exception)
129 {
130 return null;
131 }
132 }
133
134 /// <summary>
135 /// Creates a new user profile
136 /// </summary>
137 /// <param name="user">The profile to add to the database</param>
138 public void addNewUserProfile(UserProfileData user)
139 {
140 try
141 {
142 manager.AddRow(user);
143 }
144 catch (Exception e)
145 {
146 Console.WriteLine(e.ToString());
147 }
148 }
149
150 /// <summary>
151 /// Creates a new user agent
152 /// </summary>
153 /// <param name="agent">The agent to add to the database</param>
154 public void addNewUserAgent(UserAgentData agent)
155 {
156 // Do nothing. yet.
157 }
158
159 /// <summary>
160 /// Transfers money between two user accounts
161 /// </summary>
162 /// <param name="from">Starting account</param>
163 /// <param name="to">End account</param>
164 /// <param name="amount">The amount to move</param>
165 /// <returns>Success?</returns>
166 public bool moneyTransferRequest(LLUUID from, LLUUID to, uint amount)
167 {
168 return true;
169 }
170
171 /// <summary>
172 /// Transfers inventory between two accounts
173 /// </summary>
174 /// <remarks>Move to inventory server</remarks>
175 /// <param name="from">Senders account</param>
176 /// <param name="to">Recievers account</param>
177 /// <param name="item">Inventory item</param>
178 /// <returns>Success?</returns>
179 public bool inventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item)
180 {
181 return true;
182 }
183
184 /// <summary>
185 /// Returns the name of the storage provider
186 /// </summary>
187 /// <returns>Storage provider name</returns>
188 public string getName()
189 {
190 return "DB4o Userdata";
191 }
192
193 /// <summary>
194 /// Returns the version of the storage provider
195 /// </summary>
196 /// <returns>Storage provider version</returns>
197 public string getVersion()
198 {
199 return "0.1";
200 }
201 }
202}
diff --git a/OpenSim/Framework/Data.DB4o/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.DB4o/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..905cd9b
--- /dev/null
+++ b/OpenSim/Framework/Data.DB4o/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.Framework.Data.DB4o")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.Framework.Data.DB4o")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("57991e15-79da-41b7-aa06-2e6b49165a63")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs
new file mode 100644
index 0000000..ca9196a5
--- /dev/null
+++ b/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs
@@ -0,0 +1,194 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using System.Security.Cryptography;
32using System.Text;
33using libsecondlife;
34
35namespace OpenSim.Framework.Data.MSSQL
36{
37 /// <summary>
38 /// A grid data interface for Microsoft SQL Server
39 /// </summary>
40 public class SqlGridData : IGridData
41 {
42 /// <summary>
43 /// Database manager
44 /// </summary>
45 private MSSqlManager database;
46
47 /// <summary>
48 /// Initialises the Grid Interface
49 /// </summary>
50 public void Initialise()
51 {
52 database = new MSSqlManager("localhost", "db", "user", "password", "false");
53 }
54
55 /// <summary>
56 /// Shuts down the grid interface
57 /// </summary>
58 public void Close()
59 {
60 database.Close();
61 }
62
63 /// <summary>
64 /// Returns the storage system name
65 /// </summary>
66 /// <returns>A string containing the storage system name</returns>
67 public string getName()
68 {
69 return "Sql OpenGridData";
70 }
71
72 /// <summary>
73 /// Returns the storage system version
74 /// </summary>
75 /// <returns>A string containing the storage system version</returns>
76 public string getVersion()
77 {
78 return "0.1";
79 }
80
81 /// <summary>
82 /// Returns a list of regions within the specified ranges
83 /// </summary>
84 /// <param name="a">minimum X coordinate</param>
85 /// <param name="b">minimum Y coordinate</param>
86 /// <param name="c">maximum X coordinate</param>
87 /// <param name="d">maximum Y coordinate</param>
88 /// <returns>An array of region profiles</returns>
89 public SimProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d)
90 {
91 return null;
92 }
93
94 /// <summary>
95 /// Returns a sim profile from it's location
96 /// </summary>
97 /// <param name="handle">Region location handle</param>
98 /// <returns>Sim profile</returns>
99 public SimProfileData GetProfileByHandle(ulong handle)
100 {
101 Dictionary<string, string> param = new Dictionary<string, string>();
102 param["handle"] = handle.ToString();
103
104 IDbCommand result = database.Query("SELECT * FROM regions WHERE handle = @handle", param);
105 IDataReader reader = result.ExecuteReader();
106
107 SimProfileData row = database.getRow(reader);
108 reader.Close();
109 result.Dispose();
110
111 return row;
112 }
113
114 /// <summary>
115 /// Returns a sim profile from it's UUID
116 /// </summary>
117 /// <param name="uuid">The region UUID</param>
118 /// <returns>The sim profile</returns>
119 public SimProfileData GetProfileByLLUUID(LLUUID uuid)
120 {
121 Dictionary<string, string> param = new Dictionary<string, string>();
122 param["uuid"] = uuid.ToStringHyphenated();
123
124 IDbCommand result = database.Query("SELECT * FROM regions WHERE uuid = @uuid", param);
125 IDataReader reader = result.ExecuteReader();
126
127 SimProfileData row = database.getRow(reader);
128 reader.Close();
129 result.Dispose();
130
131 return row;
132 }
133
134 /// <summary>
135 /// Adds a new specified region to the database
136 /// </summary>
137 /// <param name="profile">The profile to add</param>
138 /// <returns>A dataresponse enum indicating success</returns>
139 public DataResponse AddProfile(SimProfileData profile)
140 {
141 if (database.insertRow(profile))
142 {
143 return DataResponse.RESPONSE_OK;
144 }
145 else
146 {
147 return DataResponse.RESPONSE_ERROR;
148 }
149 }
150
151 /// <summary>
152 /// DEPRECIATED. Attempts to authenticate a region by comparing a shared secret.
153 /// </summary>
154 /// <param name="uuid">The UUID of the challenger</param>
155 /// <param name="handle">The attempted regionHandle of the challenger</param>
156 /// <param name="authkey">The secret</param>
157 /// <returns>Whether the secret and regionhandle match the database entry for UUID</returns>
158 public bool AuthenticateSim(LLUUID uuid, ulong handle, string authkey)
159 {
160 bool throwHissyFit = false; // Should be true by 1.0
161
162 if (throwHissyFit)
163 throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential.");
164
165 SimProfileData data = GetProfileByLLUUID(uuid);
166
167 return (handle == data.regionHandle && authkey == data.regionSecret);
168 }
169
170 /// <summary>
171 /// NOT YET FUNCTIONAL. Provides a cryptographic authentication of a region
172 /// </summary>
173 /// <remarks>This requires a security audit.</remarks>
174 /// <param name="uuid"></param>
175 /// <param name="handle"></param>
176 /// <param name="authhash"></param>
177 /// <param name="challenge"></param>
178 /// <returns></returns>
179 public bool AuthenticateSim(LLUUID uuid, ulong handle, string authhash, string challenge)
180 {
181 SHA512Managed HashProvider = new SHA512Managed();
182 ASCIIEncoding TextProvider = new ASCIIEncoding();
183
184 byte[] stream = TextProvider.GetBytes(uuid.ToStringHyphenated() + ":" + handle.ToString() + ":" + challenge);
185 byte[] hash = HashProvider.ComputeHash(stream);
186 return false;
187 }
188 public ReservationData GetReservationAtPoint(uint x, uint y)
189 {
190 return null;
191 }
192 }
193
194}
diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs b/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs
new file mode 100644
index 0000000..49bf31c
--- /dev/null
+++ b/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs
@@ -0,0 +1,211 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using System.Data.SqlClient;
32using libsecondlife;
33
34namespace OpenSim.Framework.Data.MSSQL
35{
36 /// <summary>
37 /// A management class for the MS SQL Storage Engine
38 /// </summary>
39 class MSSqlManager
40 {
41 /// <summary>
42 /// The database connection object
43 /// </summary>
44 IDbConnection dbcon;
45
46 /// <summary>
47 /// Initialises and creates a new Sql connection and maintains it.
48 /// </summary>
49 /// <param name="hostname">The Sql server being connected to</param>
50 /// <param name="database">The name of the Sql database being used</param>
51 /// <param name="username">The username logging into the database</param>
52 /// <param name="password">The password for the user logging in</param>
53 /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param>
54 public MSSqlManager(string hostname, string database, string username, string password, string cpooling)
55 {
56 try
57 {
58 string connectionString = "Server=" + hostname + ";Database=" + database + ";User ID=" + username + ";Password=" + password + ";Pooling=" + cpooling + ";";
59 dbcon = new SqlConnection(connectionString);
60
61 dbcon.Open();
62 }
63 catch (Exception e)
64 {
65 throw new Exception("Error initialising Sql Database: " + e.ToString());
66 }
67 }
68
69 /// <summary>
70 /// Shuts down the database connection
71 /// </summary>
72 public void Close()
73 {
74 dbcon.Close();
75 dbcon = null;
76 }
77
78 /// <summary>
79 /// Runs a query with protection against SQL Injection by using parameterised input.
80 /// </summary>
81 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param>
82 /// <param name="parameters">The parameters - index so that @y is indexed as 'y'</param>
83 /// <returns>A Sql DB Command</returns>
84 public IDbCommand Query(string sql, Dictionary<string, string> parameters)
85 {
86 SqlCommand dbcommand = (SqlCommand)dbcon.CreateCommand();
87 dbcommand.CommandText = sql;
88 foreach (KeyValuePair<string, string> param in parameters)
89 {
90 dbcommand.Parameters.AddWithValue(param.Key, param.Value);
91 }
92
93 return (IDbCommand)dbcommand;
94 }
95
96 /// <summary>
97 /// Runs a database reader object and returns a region row
98 /// </summary>
99 /// <param name="reader">An active database reader</param>
100 /// <returns>A region row</returns>
101 public SimProfileData getRow(IDataReader reader)
102 {
103 SimProfileData regionprofile = new SimProfileData();
104
105 if (reader.Read())
106 {
107 // Region Main
108 regionprofile.regionHandle = (ulong)reader["regionHandle"];
109 regionprofile.regionName = (string)reader["regionName"];
110 regionprofile.UUID = new LLUUID((string)reader["uuid"]);
111
112 // Secrets
113 regionprofile.regionRecvKey = (string)reader["regionRecvKey"];
114 regionprofile.regionSecret = (string)reader["regionSecret"];
115 regionprofile.regionSendKey = (string)reader["regionSendKey"];
116
117 // Region Server
118 regionprofile.regionDataURI = (string)reader["regionDataURI"];
119 regionprofile.regionOnline = false; // Needs to be pinged before this can be set.
120 regionprofile.serverIP = (string)reader["serverIP"];
121 regionprofile.serverPort = (uint)reader["serverPort"];
122 regionprofile.serverURI = (string)reader["serverURI"];
123
124 // Location
125 regionprofile.regionLocX = (uint)((int)reader["locX"]);
126 regionprofile.regionLocY = (uint)((int)reader["locY"]);
127 regionprofile.regionLocZ = (uint)((int)reader["locZ"]);
128
129 // Neighbours - 0 = No Override
130 regionprofile.regionEastOverrideHandle = (ulong)reader["eastOverrideHandle"];
131 regionprofile.regionWestOverrideHandle = (ulong)reader["westOverrideHandle"];
132 regionprofile.regionSouthOverrideHandle = (ulong)reader["southOverrideHandle"];
133 regionprofile.regionNorthOverrideHandle = (ulong)reader["northOverrideHandle"];
134
135 // Assets
136 regionprofile.regionAssetURI = (string)reader["regionAssetURI"];
137 regionprofile.regionAssetRecvKey = (string)reader["regionAssetRecvKey"];
138 regionprofile.regionAssetSendKey = (string)reader["regionAssetSendKey"];
139
140 // Userserver
141 regionprofile.regionUserURI = (string)reader["regionUserURI"];
142 regionprofile.regionUserRecvKey = (string)reader["regionUserRecvKey"];
143 regionprofile.regionUserSendKey = (string)reader["regionUserSendKey"];
144 }
145 else
146 {
147 throw new Exception("No rows to return");
148 }
149 return regionprofile;
150 }
151
152 /// <summary>
153 /// Creates a new region in the database
154 /// </summary>
155 /// <param name="profile">The region profile to insert</param>
156 /// <returns>Successful?</returns>
157 public bool insertRow(SimProfileData profile)
158 {
159 string sql = "REPLACE INTO regions VALUES (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, ";
160 sql += "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, ";
161 sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey) VALUES ";
162
163 sql += "(@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, ";
164 sql += "@serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, ";
165 sql += "@regionAssetSendKey, @regionUserURI, @regionUserRecvKey, @regionUserSendKey);";
166
167 Dictionary<string, string> parameters = new Dictionary<string, string>();
168
169 parameters["regionHandle"] = profile.regionHandle.ToString();
170 parameters["regionName"] = profile.regionName;
171 parameters["uuid"] = profile.UUID.ToString();
172 parameters["regionRecvKey"] = profile.regionRecvKey;
173 parameters["regionSendKey"] = profile.regionSendKey;
174 parameters["regionDataURI"] = profile.regionDataURI;
175 parameters["serverIP"] = profile.serverIP;
176 parameters["serverPort"] = profile.serverPort.ToString();
177 parameters["serverURI"] = profile.serverURI;
178 parameters["locX"] = profile.regionLocX.ToString();
179 parameters["locY"] = profile.regionLocY.ToString();
180 parameters["locZ"] = profile.regionLocZ.ToString();
181 parameters["eastOverrideHandle"] = profile.regionEastOverrideHandle.ToString();
182 parameters["westOverrideHandle"] = profile.regionWestOverrideHandle.ToString();
183 parameters["northOverrideHandle"] = profile.regionNorthOverrideHandle.ToString();
184 parameters["southOverrideHandle"] = profile.regionSouthOverrideHandle.ToString();
185 parameters["regionAssetURI"] = profile.regionAssetURI;
186 parameters["regionAssetRecvKey"] = profile.regionAssetRecvKey;
187 parameters["regionAssetSendKey"] = profile.regionAssetSendKey;
188 parameters["regionUserURI"] = profile.regionUserURI;
189 parameters["regionUserRecvKey"] = profile.regionUserRecvKey;
190 parameters["regionUserSendKey"] = profile.regionUserSendKey;
191
192 bool returnval = false;
193
194 try
195 {
196 IDbCommand result = Query(sql, parameters);
197
198 if (result.ExecuteNonQuery() == 1)
199 returnval = true;
200
201 result.Dispose();
202 }
203 catch (Exception)
204 {
205 return false;
206 }
207
208 return returnval;
209 }
210 }
211}
diff --git a/OpenSim/Framework/Data.MSSQL/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.MSSQL/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..066c739
--- /dev/null
+++ b/OpenSim/Framework/Data.MSSQL/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.Framework.Data.MSSQL")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.Framework.Data.MSSQL")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("0e1c1ca4-2cf2-4315-b0e7-432c02feea8a")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/Data.MySQL/MySQLGridData.cs b/OpenSim/Framework/Data.MySQL/MySQLGridData.cs
new file mode 100644
index 0000000..ef643d2
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/MySQLGridData.cs
@@ -0,0 +1,287 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using System.Security.Cryptography;
32using System.Text;
33using libsecondlife;
34
35namespace OpenSim.Framework.Data.MySQL
36{
37 /// <summary>
38 /// A MySQL Interface for the Grid Server
39 /// </summary>
40 public class MySQLGridData : IGridData
41 {
42 /// <summary>
43 /// MySQL Database Manager
44 /// </summary>
45 private MySQLManager database;
46
47 /// <summary>
48 /// Initialises the Grid Interface
49 /// </summary>
50 public void Initialise()
51 {
52 IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
53 string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname");
54 string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database");
55 string settingUsername = GridDataMySqlFile.ParseFileReadValue("username");
56 string settingPassword = GridDataMySqlFile.ParseFileReadValue("password");
57 string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling");
58 string settingPort = GridDataMySqlFile.ParseFileReadValue("port");
59
60 database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort);
61 }
62
63 /// <summary>
64 /// Shuts down the grid interface
65 /// </summary>
66 public void Close()
67 {
68 database.Close();
69 }
70
71 /// <summary>
72 /// Returns the plugin name
73 /// </summary>
74 /// <returns>Plugin name</returns>
75 public string getName()
76 {
77 return "MySql OpenGridData";
78 }
79
80 /// <summary>
81 /// Returns the plugin version
82 /// </summary>
83 /// <returns>Plugin version</returns>
84 public string getVersion()
85 {
86 return "0.1";
87 }
88
89 /// <summary>
90 /// Returns all the specified region profiles within coordates -- coordinates are inclusive
91 /// </summary>
92 /// <param name="xmin">Minimum X coordinate</param>
93 /// <param name="ymin">Minimum Y coordinate</param>
94 /// <param name="xmax">Maximum X coordinate</param>
95 /// <param name="ymax">Maximum Y coordinate</param>
96 /// <returns></returns>
97 public SimProfileData[] GetProfilesInRange(uint xmin, uint ymin, uint xmax, uint ymax)
98 {
99 try
100 {
101 lock (database)
102 {
103 Dictionary<string, string> param = new Dictionary<string, string>();
104 param["?xmin"] = xmin.ToString();
105 param["?ymin"] = ymin.ToString();
106 param["?xmax"] = xmax.ToString();
107 param["?ymax"] = ymax.ToString();
108
109 IDbCommand result = database.Query("SELECT * FROM regions WHERE locX >= ?xmin AND locX <= ?xmax AND locY >= ?ymin AND locY <= ?ymax", param);
110 IDataReader reader = result.ExecuteReader();
111
112 SimProfileData row;
113
114 List<SimProfileData> rows = new List<SimProfileData>();
115
116 while ((row = database.readSimRow(reader)) != null)
117 {
118 rows.Add(row);
119 }
120 reader.Close();
121 result.Dispose();
122
123 return rows.ToArray();
124
125 }
126 }
127 catch (Exception e)
128 {
129 database.Reconnect();
130 Console.WriteLine(e.ToString());
131 return null;
132 }
133 }
134
135 /// <summary>
136 /// Returns a sim profile from it's location
137 /// </summary>
138 /// <param name="handle">Region location handle</param>
139 /// <returns>Sim profile</returns>
140 public SimProfileData GetProfileByHandle(ulong handle)
141 {
142 try
143 {
144 lock (database)
145 {
146 Dictionary<string, string> param = new Dictionary<string, string>();
147 param["?handle"] = handle.ToString();
148
149 IDbCommand result = database.Query("SELECT * FROM regions WHERE regionHandle = ?handle", param);
150 IDataReader reader = result.ExecuteReader();
151
152 SimProfileData row = database.readSimRow(reader);
153 reader.Close();
154 result.Dispose();
155
156 return row;
157 }
158 }
159 catch (Exception e)
160 {
161 database.Reconnect();
162 Console.WriteLine(e.ToString());
163 return null;
164 }
165 }
166
167 /// <summary>
168 /// Returns a sim profile from it's UUID
169 /// </summary>
170 /// <param name="uuid">The region UUID</param>
171 /// <returns>The sim profile</returns>
172 public SimProfileData GetProfileByLLUUID(LLUUID uuid)
173 {
174 try
175 {
176 lock (database)
177 {
178 Dictionary<string, string> param = new Dictionary<string, string>();
179 param["?uuid"] = uuid.ToStringHyphenated();
180
181 IDbCommand result = database.Query("SELECT * FROM regions WHERE uuid = ?uuid", param);
182 IDataReader reader = result.ExecuteReader();
183
184 SimProfileData row = database.readSimRow(reader);
185 reader.Close();
186 result.Dispose();
187
188 return row;
189 }
190 }
191 catch (Exception e)
192 {
193 database.Reconnect();
194 Console.WriteLine(e.ToString());
195 return null;
196 }
197 }
198
199 /// <summary>
200 /// Adds a new profile to the database
201 /// </summary>
202 /// <param name="profile">The profile to add</param>
203 /// <returns>Successful?</returns>
204 public DataResponse AddProfile(SimProfileData profile)
205 {
206 lock (database)
207 {
208 if (database.insertRegion(profile))
209 {
210 return DataResponse.RESPONSE_OK;
211 }
212 else
213 {
214 return DataResponse.RESPONSE_ERROR;
215 }
216 }
217 }
218
219 /// <summary>
220 /// DEPRECIATED. Attempts to authenticate a region by comparing a shared secret.
221 /// </summary>
222 /// <param name="uuid">The UUID of the challenger</param>
223 /// <param name="handle">The attempted regionHandle of the challenger</param>
224 /// <param name="authkey">The secret</param>
225 /// <returns>Whether the secret and regionhandle match the database entry for UUID</returns>
226 public bool AuthenticateSim(LLUUID uuid, ulong handle, string authkey)
227 {
228 bool throwHissyFit = false; // Should be true by 1.0
229
230 if (throwHissyFit)
231 throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential.");
232
233 SimProfileData data = GetProfileByLLUUID(uuid);
234
235 return (handle == data.regionHandle && authkey == data.regionSecret);
236 }
237
238 /// <summary>
239 /// NOT YET FUNCTIONAL. Provides a cryptographic authentication of a region
240 /// </summary>
241 /// <remarks>This requires a security audit.</remarks>
242 /// <param name="uuid"></param>
243 /// <param name="handle"></param>
244 /// <param name="authhash"></param>
245 /// <param name="challenge"></param>
246 /// <returns></returns>
247 public bool AuthenticateSim(LLUUID uuid, ulong handle, string authhash, string challenge)
248 {
249 SHA512Managed HashProvider = new SHA512Managed();
250 ASCIIEncoding TextProvider = new ASCIIEncoding();
251
252 byte[] stream = TextProvider.GetBytes(uuid.ToStringHyphenated() + ":" + handle.ToString() + ":" + challenge);
253 byte[] hash = HashProvider.ComputeHash(stream);
254
255 return false;
256 }
257
258 public ReservationData GetReservationAtPoint(uint x, uint y)
259 {
260 try
261 {
262 lock (database)
263 {
264 Dictionary<string, string> param = new Dictionary<string, string>();
265 param["?x"] = x.ToString();
266 param["?y"] = y.ToString();
267 IDbCommand result = database.Query("SELECT * FROM reservations WHERE resXMin <= ?x AND resXMax >= ?x AND resYMin <= ?y AND resYMax >= ?y", param);
268 IDataReader reader = result.ExecuteReader();
269
270 ReservationData row = database.readReservationRow(reader);
271 reader.Close();
272 result.Dispose();
273
274 return row;
275 }
276 }
277 catch (Exception e)
278 {
279 database.Reconnect();
280 Console.WriteLine(e.ToString());
281 return null;
282 }
283 }
284 }
285
286
287}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
new file mode 100644
index 0000000..790759a
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
@@ -0,0 +1,309 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using libsecondlife;
32
33namespace OpenSim.Framework.Data.MySQL
34{
35 /// <summary>
36 /// A MySQL interface for the inventory server
37 /// </summary>
38 class MySQLInventoryData : IInventoryData
39 {
40 /// <summary>
41 /// The database manager
42 /// </summary>
43 public MySQLManager database;
44
45 /// <summary>
46 /// Loads and initialises this database plugin
47 /// </summary>
48 public void Initialise()
49 {
50 IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
51 string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname");
52 string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database");
53 string settingUsername = GridDataMySqlFile.ParseFileReadValue("username");
54 string settingPassword = GridDataMySqlFile.ParseFileReadValue("password");
55 string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling");
56 string settingPort = GridDataMySqlFile.ParseFileReadValue("port");
57
58 database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort);
59 }
60
61 /// <summary>
62 /// The name of this DB provider
63 /// </summary>
64 /// <returns>Name of DB provider</returns>
65 public string getName()
66 {
67 return "MySQL Inventory Data Interface";
68 }
69
70 /// <summary>
71 /// Closes this DB provider
72 /// </summary>
73 public void Close()
74 {
75 // Do nothing.
76 }
77
78 /// <summary>
79 /// Returns the version of this DB provider
80 /// </summary>
81 /// <returns>A string containing the DB provider</returns>
82 public string getVersion()
83 {
84 return "0.1";
85 }
86
87 /// <summary>
88 /// Returns a list of items in a specified folder
89 /// </summary>
90 /// <param name="folderID">The folder to search</param>
91 /// <returns>A list containing inventory items</returns>
92 public List<InventoryItemBase> getInventoryInFolder(LLUUID folderID)
93 {
94 try
95 {
96 lock (database)
97 {
98 Dictionary<string, string> param = new Dictionary<string, string>();
99 param["?uuid"] = folderID.ToStringHyphenated();
100
101 IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid", param);
102 IDataReader reader = result.ExecuteReader();
103
104 List<InventoryItemBase> items = database.readInventoryItems(reader);
105
106 reader.Close();
107 result.Dispose();
108
109 return items;
110 }
111 }
112 catch (Exception e)
113 {
114 database.Reconnect();
115 Console.WriteLine(e.ToString());
116 return null;
117 }
118 }
119
120 /// <summary>
121 /// Returns a list of the root folders within a users inventory
122 /// </summary>
123 /// <param name="user">The user whos inventory is to be searched</param>
124 /// <returns>A list of folder objects</returns>
125 public List<InventoryFolderBase> getUserRootFolders(LLUUID user)
126 {
127 try
128 {
129 lock (database)
130 {
131 Dictionary<string, string> param = new Dictionary<string, string>();
132 param["?uuid"] = user.ToStringHyphenated();
133 param["?zero"] = LLUUID.Zero.ToStringHyphenated();
134
135 IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param);
136 IDataReader reader = result.ExecuteReader();
137
138 List<InventoryFolderBase> items = database.readInventoryFolders(reader);
139
140 reader.Close();
141 result.Dispose();
142
143 return items;
144 }
145 }
146 catch (Exception e)
147 {
148 database.Reconnect();
149 Console.WriteLine(e.ToString());
150 return null;
151 }
152 }
153
154 /// <summary>
155 /// Returns a list of folders in a users inventory contained within the specified folder
156 /// </summary>
157 /// <param name="parentID">The folder to search</param>
158 /// <returns>A list of inventory folders</returns>
159 public List<InventoryFolderBase> getInventoryFolders(LLUUID parentID)
160 {
161 try
162 {
163 lock (database)
164 {
165 Dictionary<string, string> param = new Dictionary<string, string>();
166 param["?uuid"] = parentID.ToStringHyphenated();
167
168 IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid", param);
169 IDataReader reader = result.ExecuteReader();
170
171 List<InventoryFolderBase> items = database.readInventoryFolders(reader);
172
173 reader.Close();
174 result.Dispose();
175
176 return items;
177 }
178 }
179 catch (Exception e)
180 {
181 database.Reconnect();
182 Console.WriteLine(e.ToString());
183 return null;
184 }
185 }
186
187 /// <summary>
188 /// Returns a specified inventory item
189 /// </summary>
190 /// <param name="item">The item to return</param>
191 /// <returns>An inventory item</returns>
192 public InventoryItemBase getInventoryItem(LLUUID item)
193 {
194 try
195 {
196 lock (database)
197 {
198 Dictionary<string, string> param = new Dictionary<string, string>();
199 param["?uuid"] = item.ToStringHyphenated();
200
201 IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", param);
202 IDataReader reader = result.ExecuteReader();
203
204 List<InventoryItemBase> items = database.readInventoryItems(reader);
205
206 reader.Close();
207 result.Dispose();
208
209 if (items.Count > 0)
210 {
211 return items[0];
212 }
213 else
214 {
215 return null;
216 }
217 }
218 }
219 catch (Exception e)
220 {
221 database.Reconnect();
222 Console.WriteLine(e.ToString());
223 return null;
224 }
225 }
226
227 /// <summary>
228 /// Returns a specified inventory folder
229 /// </summary>
230 /// <param name="folder">The folder to return</param>
231 /// <returns>A folder class</returns>
232 public InventoryFolderBase getInventoryFolder(LLUUID folder)
233 {
234 try
235 {
236 lock (database)
237 {
238 Dictionary<string, string> param = new Dictionary<string, string>();
239 param["?uuid"] = folder.ToStringHyphenated();
240
241 IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", param);
242 IDataReader reader = result.ExecuteReader();
243
244 List<InventoryFolderBase> items = database.readInventoryFolders(reader);
245
246 reader.Close();
247 result.Dispose();
248
249 if (items.Count > 0)
250 {
251 return items[0];
252 }
253 else
254 {
255 return null;
256 }
257 }
258 }
259 catch (Exception e)
260 {
261 database.Reconnect();
262 Console.WriteLine(e.ToString());
263 return null;
264 }
265 }
266
267 /// <summary>
268 /// Adds a specified item to the database
269 /// </summary>
270 /// <param name="item">The inventory item</param>
271 public void addInventoryItem(InventoryItemBase item)
272 {
273 lock (database)
274 {
275 database.insertItem(item);
276 }
277 }
278
279 /// <summary>
280 /// Updates the specified inventory item
281 /// </summary>
282 /// <param name="item">Inventory item to update</param>
283 public void updateInventoryItem(InventoryItemBase item)
284 {
285 addInventoryItem(item);
286 }
287
288 /// <summary>
289 /// Creates a new inventory folder
290 /// </summary>
291 /// <param name="folder">Folder to create</param>
292 public void addInventoryFolder(InventoryFolderBase folder)
293 {
294 lock (database)
295 {
296 database.insertFolder(folder);
297 }
298 }
299
300 /// <summary>
301 /// Updates an inventory folder
302 /// </summary>
303 /// <param name="folder">Folder to update</param>
304 public void updateInventoryFolder(InventoryFolderBase folder)
305 {
306 addInventoryFolder(folder);
307 }
308 }
309}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLLogData.cs b/OpenSim/Framework/Data.MySQL/MySQLLogData.cs
new file mode 100644
index 0000000..38f9fd3
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/MySQLLogData.cs
@@ -0,0 +1,105 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29
30namespace OpenSim.Framework.Data.MySQL
31{
32 /// <summary>
33 /// An interface to the log database for MySQL
34 /// </summary>
35 class MySQLLogData : ILogData
36 {
37 /// <summary>
38 /// The database manager
39 /// </summary>
40 public MySQLManager database;
41
42 /// <summary>
43 /// Artificial constructor called when the plugin is loaded
44 /// </summary>
45 public void Initialise()
46 {
47 IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
48 string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname");
49 string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database");
50 string settingUsername = GridDataMySqlFile.ParseFileReadValue("username");
51 string settingPassword = GridDataMySqlFile.ParseFileReadValue("password");
52 string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling");
53 string settingPort = GridDataMySqlFile.ParseFileReadValue("port");
54
55 database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort);
56 }
57
58 /// <summary>
59 /// Saves a log item to the database
60 /// </summary>
61 /// <param name="serverDaemon">The daemon triggering the event</param>
62 /// <param name="target">The target of the action (region / agent UUID, etc)</param>
63 /// <param name="methodCall">The method call where the problem occured</param>
64 /// <param name="arguments">The arguments passed to the method</param>
65 /// <param name="priority">How critical is this?</param>
66 /// <param name="logMessage">The message to log</param>
67 public void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority, string logMessage)
68 {
69 try
70 {
71 database.insertLogRow(serverDaemon, target, methodCall, arguments, priority, logMessage);
72 }
73 catch
74 {
75 database.Reconnect();
76 }
77 }
78
79 /// <summary>
80 /// Returns the name of this DB provider
81 /// </summary>
82 /// <returns>A string containing the DB provider name</returns>
83 public string getName()
84 {
85 return "MySQL Logdata Interface";
86 }
87
88 /// <summary>
89 /// Closes the database provider
90 /// </summary>
91 public void Close()
92 {
93 // Do nothing.
94 }
95
96 /// <summary>
97 /// Returns the version of this DB provider
98 /// </summary>
99 /// <returns>A string containing the provider version</returns>
100 public string getVersion()
101 {
102 return "0.1";
103 }
104 }
105}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLManager.cs b/OpenSim/Framework/Data.MySQL/MySQLManager.cs
new file mode 100644
index 0000000..88365a3
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/MySQLManager.cs
@@ -0,0 +1,602 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using libsecondlife;
32using MySql.Data.MySqlClient;
33
34namespace OpenSim.Framework.Data.MySQL
35{
36 /// <summary>
37 /// A MySQL Database manager
38 /// </summary>
39 class MySQLManager
40 {
41 /// <summary>
42 /// The database connection object
43 /// </summary>
44 IDbConnection dbcon;
45 /// <summary>
46 /// Connection string for ADO.net
47 /// </summary>
48 string connectionString;
49
50 /// <summary>
51 /// Initialises and creates a new MySQL connection and maintains it.
52 /// </summary>
53 /// <param name="hostname">The MySQL server being connected to</param>
54 /// <param name="database">The name of the MySQL database being used</param>
55 /// <param name="username">The username logging into the database</param>
56 /// <param name="password">The password for the user logging in</param>
57 /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param>
58 public MySQLManager(string hostname, string database, string username, string password, string cpooling, string port)
59 {
60 try
61 {
62 connectionString = "Server=" + hostname + ";Port=" + port + ";Database=" + database + ";User ID=" + username + ";Password=" + password + ";Pooling=" + cpooling + ";";
63 dbcon = new MySqlConnection(connectionString);
64
65 dbcon.Open();
66
67 Console.WriteLine("MySQL connection established");
68 }
69 catch (Exception e)
70 {
71 throw new Exception("Error initialising MySql Database: " + e.ToString());
72 }
73 }
74
75 /// <summary>
76 /// Shuts down the database connection
77 /// </summary>
78 public void Close()
79 {
80 dbcon.Close();
81 dbcon = null;
82 }
83
84 /// <summary>
85 /// Reconnects to the database
86 /// </summary>
87 public void Reconnect()
88 {
89 lock (dbcon)
90 {
91 try
92 {
93 // Close the DB connection
94 dbcon.Close();
95 // Try reopen it
96 dbcon = new MySqlConnection(connectionString);
97 dbcon.Open();
98 }
99 catch (Exception e)
100 {
101 Console.WriteLine("Unable to reconnect to database " + e.ToString());
102 }
103 }
104 }
105
106 /// <summary>
107 /// Runs a query with protection against SQL Injection by using parameterised input.
108 /// </summary>
109 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param>
110 /// <param name="parameters">The parameters - index so that @y is indexed as 'y'</param>
111 /// <returns>A MySQL DB Command</returns>
112 public IDbCommand Query(string sql, Dictionary<string, string> parameters)
113 {
114 try
115 {
116 MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand();
117 dbcommand.CommandText = sql;
118 foreach (KeyValuePair<string, string> param in parameters)
119 {
120 dbcommand.Parameters.Add(param.Key, param.Value);
121 }
122
123 return (IDbCommand)dbcommand;
124 }
125 catch
126 {
127 lock (dbcon)
128 {
129 // Close the DB connection
130 try
131 {
132 dbcon.Close();
133 }
134 catch { }
135
136 // Try reopen it
137 try
138 {
139 dbcon = new MySqlConnection(connectionString);
140 dbcon.Open();
141 }
142 catch (Exception e)
143 {
144 Console.WriteLine("Unable to reconnect to database " + e.ToString());
145 }
146
147 // Run the query again
148 try
149 {
150 MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand();
151 dbcommand.CommandText = sql;
152 foreach (KeyValuePair<string, string> param in parameters)
153 {
154 dbcommand.Parameters.Add(param.Key, param.Value);
155 }
156
157 return (IDbCommand)dbcommand;
158 }
159 catch (Exception e)
160 {
161 // Return null if it fails.
162 Console.WriteLine("Failed during Query generation: " + e.ToString());
163 return null;
164 }
165 }
166 }
167 }
168
169 /// <summary>
170 /// Reads a region row from a database reader
171 /// </summary>
172 /// <param name="reader">An active database reader</param>
173 /// <returns>A region profile</returns>
174 public SimProfileData readSimRow(IDataReader reader)
175 {
176 SimProfileData retval = new SimProfileData();
177
178 if (reader.Read())
179 {
180 // Region Main
181 retval.regionHandle = Convert.ToUInt64(reader["regionHandle"].ToString());
182 retval.regionName = (string)reader["regionName"];
183 retval.UUID = new LLUUID((string)reader["uuid"]);
184
185 // Secrets
186 retval.regionRecvKey = (string)reader["regionRecvKey"];
187 retval.regionSecret = (string)reader["regionSecret"];
188 retval.regionSendKey = (string)reader["regionSendKey"];
189
190 // Region Server
191 retval.regionDataURI = (string)reader["regionDataURI"];
192 retval.regionOnline = false; // Needs to be pinged before this can be set.
193 retval.serverIP = (string)reader["serverIP"];
194 retval.serverPort = (uint)reader["serverPort"];
195 retval.serverURI = (string)reader["serverURI"];
196
197 // Location
198 retval.regionLocX = Convert.ToUInt32(reader["locX"].ToString());
199 retval.regionLocY = Convert.ToUInt32(reader["locY"].ToString());
200 retval.regionLocZ = Convert.ToUInt32(reader["locZ"].ToString());
201
202 // Neighbours - 0 = No Override
203 retval.regionEastOverrideHandle = Convert.ToUInt64(reader["eastOverrideHandle"].ToString());
204 retval.regionWestOverrideHandle = Convert.ToUInt64(reader["westOverrideHandle"].ToString());
205 retval.regionSouthOverrideHandle = Convert.ToUInt64(reader["southOverrideHandle"].ToString());
206 retval.regionNorthOverrideHandle = Convert.ToUInt64(reader["northOverrideHandle"].ToString());
207
208 // Assets
209 retval.regionAssetURI = (string)reader["regionAssetURI"];
210 retval.regionAssetRecvKey = (string)reader["regionAssetRecvKey"];
211 retval.regionAssetSendKey = (string)reader["regionAssetSendKey"];
212
213 // Userserver
214 retval.regionUserURI = (string)reader["regionUserURI"];
215 retval.regionUserRecvKey = (string)reader["regionUserRecvKey"];
216 retval.regionUserSendKey = (string)reader["regionUserSendKey"];
217
218 // World Map Addition
219 string tempRegionMap = reader["regionMapTexture"].ToString();
220 if (tempRegionMap != "")
221 {
222 retval.regionMapTextureID = new LLUUID(tempRegionMap);
223 }
224 else
225 {
226 retval.regionMapTextureID = new LLUUID();
227 }
228 }
229 else
230 {
231 return null;
232 }
233 return retval;
234 }
235
236 /// <summary>
237 /// Reads a reservation row from a database reader
238 /// </summary>
239 /// <param name="reader">An active database reader</param>
240 /// <returns>A reservation data object</returns>
241 public ReservationData readReservationRow(IDataReader reader)
242 {
243 ReservationData retval = new ReservationData();
244 if (reader.Read())
245 {
246 retval.gridRecvKey = (string)reader["gridRecvKey"];
247 retval.gridSendKey = (string)reader["gridSendKey"];
248 retval.reservationCompany = (string)reader["resCompany"];
249 retval.reservationMaxX = Convert.ToInt32(reader["resXMax"].ToString());
250 retval.reservationMaxY = Convert.ToInt32(reader["resYMax"].ToString());
251 retval.reservationMinX = Convert.ToInt32(reader["resXMin"].ToString());
252 retval.reservationMinY = Convert.ToInt32(reader["resYMin"].ToString());
253 retval.reservationName = (string)reader["resName"];
254 retval.status = Convert.ToInt32(reader["status"].ToString()) == 1;
255 retval.userUUID = new LLUUID((string)reader["userUUID"]);
256
257 }
258 else
259 {
260 return null;
261 }
262 return retval;
263 }
264 /// <summary>
265 /// Reads an agent row from a database reader
266 /// </summary>
267 /// <param name="reader">An active database reader</param>
268 /// <returns>A user session agent</returns>
269 public UserAgentData readAgentRow(IDataReader reader)
270 {
271 UserAgentData retval = new UserAgentData();
272
273 if (reader.Read())
274 {
275 // Agent IDs
276 retval.UUID = new LLUUID((string)reader["UUID"]);
277 retval.sessionID = new LLUUID((string)reader["sessionID"]);
278 retval.secureSessionID = new LLUUID((string)reader["secureSessionID"]);
279
280 // Agent Who?
281 retval.agentIP = (string)reader["agentIP"];
282 retval.agentPort = Convert.ToUInt32(reader["agentPort"].ToString());
283 retval.agentOnline = Convert.ToBoolean(reader["agentOnline"].ToString());
284
285 // Login/Logout times (UNIX Epoch)
286 retval.loginTime = Convert.ToInt32(reader["loginTime"].ToString());
287 retval.logoutTime = Convert.ToInt32(reader["logoutTime"].ToString());
288
289 // Current position
290 retval.currentRegion = (string)reader["currentRegion"];
291 retval.currentHandle = Convert.ToUInt64(reader["currentHandle"].ToString());
292 LLVector3.TryParse((string)reader["currentPos"], out retval.currentPos);
293 }
294 else
295 {
296 return null;
297 }
298 return retval;
299 }
300
301 /// <summary>
302 /// Reads a user profile from an active data reader
303 /// </summary>
304 /// <param name="reader">An active database reader</param>
305 /// <returns>A user profile</returns>
306 public UserProfileData readUserRow(IDataReader reader)
307 {
308 UserProfileData retval = new UserProfileData();
309
310 if (reader.Read())
311 {
312 retval.UUID = new LLUUID((string)reader["UUID"]);
313 retval.username = (string)reader["username"];
314 retval.surname = (string)reader["lastname"];
315
316 retval.passwordHash = (string)reader["passwordHash"];
317 retval.passwordSalt = (string)reader["passwordSalt"];
318
319 retval.homeRegion = Convert.ToUInt64(reader["homeRegion"].ToString());
320 retval.homeLocation = new LLVector3(
321 Convert.ToSingle(reader["homeLocationX"].ToString()),
322 Convert.ToSingle(reader["homeLocationY"].ToString()),
323 Convert.ToSingle(reader["homeLocationZ"].ToString()));
324 retval.homeLookAt = new LLVector3(
325 Convert.ToSingle(reader["homeLookAtX"].ToString()),
326 Convert.ToSingle(reader["homeLookAtY"].ToString()),
327 Convert.ToSingle(reader["homeLookAtZ"].ToString()));
328
329 retval.created = Convert.ToInt32(reader["created"].ToString());
330 retval.lastLogin = Convert.ToInt32(reader["lastLogin"].ToString());
331
332 retval.userInventoryURI = (string)reader["userInventoryURI"];
333 retval.userAssetURI = (string)reader["userAssetURI"];
334
335 retval.profileCanDoMask = Convert.ToUInt32(reader["profileCanDoMask"].ToString());
336 retval.profileWantDoMask = Convert.ToUInt32(reader["profileWantDoMask"].ToString());
337
338 retval.profileAboutText = (string)reader["profileAboutText"];
339 retval.profileFirstText = (string)reader["profileFirstText"];
340
341 retval.profileImage = new LLUUID((string)reader["profileImage"]);
342 retval.profileFirstImage = new LLUUID((string)reader["profileFirstImage"]);
343
344 }
345 else
346 {
347 return null;
348 }
349 return retval;
350 }
351
352 /// <summary>
353 /// Reads a list of inventory folders returned by a query.
354 /// </summary>
355 /// <param name="reader">A MySQL Data Reader</param>
356 /// <returns>A List containing inventory folders</returns>
357 public List<InventoryFolderBase> readInventoryFolders(IDataReader reader)
358 {
359 List<InventoryFolderBase> rows = new List<InventoryFolderBase>();
360
361 while(reader.Read())
362 {
363 try
364 {
365 InventoryFolderBase folder = new InventoryFolderBase();
366
367 folder.agentID = new LLUUID((string)reader["agentID"]);
368 folder.parentID = new LLUUID((string)reader["parentFolderID"]);
369 folder.folderID = new LLUUID((string)reader["folderID"]);
370 folder.name = (string)reader["folderName"];
371
372 rows.Add(folder);
373 }
374 catch (Exception e)
375 {
376 Console.WriteLine(e.ToString());
377 }
378 }
379
380 return rows;
381 }
382
383 /// <summary>
384 /// Reads a collection of items from an SQL result
385 /// </summary>
386 /// <param name="reader">The SQL Result</param>
387 /// <returns>A List containing Inventory Items</returns>
388 public List<InventoryItemBase> readInventoryItems(IDataReader reader)
389 {
390 List<InventoryItemBase> rows = new List<InventoryItemBase>();
391
392 while (reader.Read())
393 {
394 try
395 {
396 InventoryItemBase item = new InventoryItemBase();
397
398 item.assetID = new LLUUID((string)reader["assetID"]);
399 item.avatarID = new LLUUID((string)reader["avatarID"]);
400 item.inventoryCurrentPermissions = Convert.ToUInt32(reader["inventoryCurrentPermissions"].ToString());
401 item.inventoryDescription = (string)reader["inventoryDescription"];
402 item.inventoryID = new LLUUID((string)reader["inventoryID"]);
403 item.inventoryName = (string)reader["inventoryName"];
404 item.inventoryNextPermissions = Convert.ToUInt32(reader["inventoryNextPermissions"].ToString());
405 item.parentFolderID = new LLUUID((string)reader["parentFolderID"]);
406 item.type = Convert.ToInt32(reader["type"].ToString());
407
408 rows.Add(item);
409 }
410 catch (Exception e)
411 {
412 Console.WriteLine(e.ToString());
413 }
414 }
415
416 return rows;
417 }
418
419 /// <summary>
420 /// Inserts a new row into the log database
421 /// </summary>
422 /// <param name="serverDaemon">The daemon which triggered this event</param>
423 /// <param name="target">Who were we operating on when this occured (region UUID, user UUID, etc)</param>
424 /// <param name="methodCall">The method call where the problem occured</param>
425 /// <param name="arguments">The arguments passed to the method</param>
426 /// <param name="priority">How critical is this?</param>
427 /// <param name="logMessage">Extra message info</param>
428 /// <returns>Saved successfully?</returns>
429 public bool insertLogRow(string serverDaemon, string target, string methodCall, string arguments, int priority, string logMessage)
430 {
431 string sql = "INSERT INTO logs (`target`, `server`, `method`, `arguments`, `priority`, `message`) VALUES ";
432 sql += "(?target, ?server, ?method, ?arguments, ?priority, ?message)";
433
434 Dictionary<string, string> parameters = new Dictionary<string, string>();
435 parameters["?server"] = serverDaemon;
436 parameters["?target"] = target;
437 parameters["?method"] = methodCall;
438 parameters["?arguments"] = arguments;
439 parameters["?priority"] = priority.ToString();
440 parameters["?message"] = logMessage;
441
442 bool returnval = false;
443
444 try
445 {
446 IDbCommand result = Query(sql, parameters);
447
448 if (result.ExecuteNonQuery() == 1)
449 returnval = true;
450
451 result.Dispose();
452 }
453 catch (Exception e)
454 {
455 Console.WriteLine(e.ToString());
456 return false;
457 }
458
459 return returnval;
460 }
461
462 /// <summary>
463 /// Inserts a new item into the database
464 /// </summary>
465 /// <param name="item">The item</param>
466 /// <returns>Success?</returns>
467 public bool insertItem(InventoryItemBase item)
468 {
469 string sql = "REPLACE INTO inventoryitems (inventoryID, assetID, type, parentFolderID, avatarID, inventoryName, inventoryDescription, inventoryNextPermissions, inventoryCurrentPermissions) VALUES ";
470 sql += "(?inventoryID, ?assetID, ?type, ?parentFolderID, ?avatarID, ?inventoryName, ?inventoryDescription, ?inventoryNextPermissions, ?inventoryCurrentPermissions)";
471
472 Dictionary<string, string> parameters = new Dictionary<string, string>();
473 parameters["?inventoryID"] = item.inventoryID.ToStringHyphenated();
474 parameters["?assetID"] = item.assetID.ToStringHyphenated();
475 parameters["?type"] = item.type.ToString();
476 parameters["?parentFolderID"] = item.parentFolderID.ToStringHyphenated();
477 parameters["?avatarID"] = item.avatarID.ToStringHyphenated();
478 parameters["?inventoryName"] = item.inventoryName;
479 parameters["?inventoryDescription"] = item.inventoryDescription;
480 parameters["?inventoryNextPermissions"] = item.inventoryNextPermissions.ToString();
481 parameters["?inventoryCurrentPermissions"] = item.inventoryCurrentPermissions.ToString();
482
483 bool returnval = false;
484
485 try
486 {
487 IDbCommand result = Query(sql, parameters);
488
489 if (result.ExecuteNonQuery() == 1)
490 returnval = true;
491
492 result.Dispose();
493 }
494 catch (Exception e)
495 {
496 Console.WriteLine(e.ToString());
497 return false;
498 }
499
500 return returnval;
501 }
502
503 /// <summary>
504 /// Inserts a new folder into the database
505 /// </summary>
506 /// <param name="folder">The folder</param>
507 /// <returns>Success?</returns>
508 public bool insertFolder(InventoryFolderBase folder)
509 {
510 string sql = "REPLACE INTO inventoryfolders (folderID, agentID, parentFolderID, folderName) VALUES ";
511 sql += "(?folderID, ?agentID, ?parentFolderID, ?folderName)";
512
513 Dictionary<string, string> parameters = new Dictionary<string, string>();
514 parameters["?folderID"] = folder.folderID.ToStringHyphenated();
515 parameters["?agentID"] = folder.agentID.ToStringHyphenated();
516 parameters["?parentFolderID"] = folder.parentID.ToStringHyphenated();
517 parameters["?folderName"] = folder.name;
518
519 bool returnval = false;
520 try
521 {
522 IDbCommand result = Query(sql, parameters);
523
524 if (result.ExecuteNonQuery() == 1)
525 returnval = true;
526
527 result.Dispose();
528 }
529 catch (Exception e)
530 {
531 Console.WriteLine(e.ToString());
532 return false;
533 }
534 return returnval;
535 }
536
537 /// <summary>
538 /// Inserts a new region into the database
539 /// </summary>
540 /// <param name="profile">The region to insert</param>
541 /// <returns>Success?</returns>
542 public bool insertRegion(SimProfileData regiondata)
543 {
544 string sql = "REPLACE INTO regions (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, ";
545 sql += "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, ";
546 sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey, regionMapTexture) VALUES ";
547
548 sql += "(?regionHandle, ?regionName, ?uuid, ?regionRecvKey, ?regionSecret, ?regionSendKey, ?regionDataURI, ";
549 sql += "?serverIP, ?serverPort, ?serverURI, ?locX, ?locY, ?locZ, ?eastOverrideHandle, ?westOverrideHandle, ?southOverrideHandle, ?northOverrideHandle, ?regionAssetURI, ?regionAssetRecvKey, ";
550 sql += "?regionAssetSendKey, ?regionUserURI, ?regionUserRecvKey, ?regionUserSendKey, ?regionMapTexture);";
551
552 Dictionary<string, string> parameters = new Dictionary<string, string>();
553
554 parameters["?regionHandle"] = regiondata.regionHandle.ToString();
555 parameters["?regionName"] = regiondata.regionName.ToString();
556 parameters["?uuid"] = regiondata.UUID.ToStringHyphenated();
557 parameters["?regionRecvKey"] = regiondata.regionRecvKey.ToString();
558 parameters["?regionSecret"] = regiondata.regionSecret.ToString();
559 parameters["?regionSendKey"] = regiondata.regionSendKey.ToString();
560 parameters["?regionDataURI"] = regiondata.regionDataURI.ToString();
561 parameters["?serverIP"] = regiondata.serverIP.ToString();
562 parameters["?serverPort"] = regiondata.serverPort.ToString();
563 parameters["?serverURI"] = regiondata.serverURI.ToString();
564 parameters["?locX"] = regiondata.regionLocX.ToString();
565 parameters["?locY"] = regiondata.regionLocY.ToString();
566 parameters["?locZ"] = regiondata.regionLocZ.ToString();
567 parameters["?eastOverrideHandle"] = regiondata.regionEastOverrideHandle.ToString();
568 parameters["?westOverrideHandle"] = regiondata.regionWestOverrideHandle.ToString();
569 parameters["?northOverrideHandle"] = regiondata.regionNorthOverrideHandle.ToString();
570 parameters["?southOverrideHandle"] = regiondata.regionSouthOverrideHandle.ToString();
571 parameters["?regionAssetURI"] = regiondata.regionAssetURI.ToString();
572 parameters["?regionAssetRecvKey"] = regiondata.regionAssetRecvKey.ToString();
573 parameters["?regionAssetSendKey"] = regiondata.regionAssetSendKey.ToString();
574 parameters["?regionUserURI"] = regiondata.regionUserURI.ToString();
575 parameters["?regionUserRecvKey"] = regiondata.regionUserRecvKey.ToString();
576 parameters["?regionUserSendKey"] = regiondata.regionUserSendKey.ToString();
577 parameters["?regionMapTexture"] = regiondata.regionMapTextureID.ToStringHyphenated();
578
579 bool returnval = false;
580
581 try
582 {
583
584 IDbCommand result = Query(sql, parameters);
585
586 //Console.WriteLine(result.CommandText);
587
588 if (result.ExecuteNonQuery() == 1)
589 returnval = true;
590
591 result.Dispose();
592 }
593 catch (Exception e)
594 {
595 Console.WriteLine(e.ToString());
596 return false;
597 }
598
599 return returnval;
600 }
601 }
602}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLUserData.cs b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs
new file mode 100644
index 0000000..c116536
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs
@@ -0,0 +1,256 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using libsecondlife;
32
33namespace OpenSim.Framework.Data.MySQL
34{
35 /// <summary>
36 /// A database interface class to a user profile storage system
37 /// </summary>
38 class MySQLUserData : IUserData
39 {
40 /// <summary>
41 /// Database manager for MySQL
42 /// </summary>
43 public MySQLManager database;
44
45 /// <summary>
46 /// Loads and initialises the MySQL storage plugin
47 /// </summary>
48 public void Initialise()
49 {
50 // Load from an INI file connection details
51 // TODO: move this to XML?
52 IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
53 string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname");
54 string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database");
55 string settingUsername = GridDataMySqlFile.ParseFileReadValue("username");
56 string settingPassword = GridDataMySqlFile.ParseFileReadValue("password");
57 string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling");
58 string settingPort = GridDataMySqlFile.ParseFileReadValue("port");
59
60 database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort);
61 }
62
63 /// <summary>
64 /// Searches the database for a specified user profile
65 /// </summary>
66 /// <param name="name">The account name of the user</param>
67 /// <returns>A user profile</returns>
68 public UserProfileData getUserByName(string name)
69 {
70 return getUserByName(name.Split(' ')[0], name.Split(' ')[1]);
71 }
72
73 /// <summary>
74 /// Searches the database for a specified user profile by name components
75 /// </summary>
76 /// <param name="user">The first part of the account name</param>
77 /// <param name="last">The second part of the account name</param>
78 /// <returns>A user profile</returns>
79 public UserProfileData getUserByName(string user, string last)
80 {
81 try
82 {
83 lock (database)
84 {
85 Dictionary<string, string> param = new Dictionary<string, string>();
86 param["?first"] = user;
87 param["?second"] = last;
88
89 IDbCommand result = database.Query("SELECT * FROM users WHERE username = ?first AND lastname = ?second", param);
90 IDataReader reader = result.ExecuteReader();
91
92 UserProfileData row = database.readUserRow(reader);
93
94 reader.Close();
95 result.Dispose();
96
97 return row;
98 }
99 }
100 catch (Exception e)
101 {
102 database.Reconnect();
103 Console.WriteLine(e.ToString());
104 return null;
105 }
106 }
107
108 /// <summary>
109 /// Searches the database for a specified user profile by UUID
110 /// </summary>
111 /// <param name="uuid">The account ID</param>
112 /// <returns>The users profile</returns>
113 public UserProfileData getUserByUUID(LLUUID uuid)
114 {
115 try
116 {
117 lock (database)
118 {
119 Dictionary<string, string> param = new Dictionary<string, string>();
120 param["?uuid"] = uuid.ToStringHyphenated();
121
122 IDbCommand result = database.Query("SELECT * FROM users WHERE UUID = ?uuid", param);
123 IDataReader reader = result.ExecuteReader();
124
125 UserProfileData row = database.readUserRow(reader);
126
127 reader.Close();
128 result.Dispose();
129
130 return row;
131 }
132 }
133 catch (Exception e)
134 {
135 database.Reconnect();
136 Console.WriteLine(e.ToString());
137 return null;
138 }
139 }
140
141 /// <summary>
142 /// Returns a user session searching by name
143 /// </summary>
144 /// <param name="name">The account name</param>
145 /// <returns>The users session</returns>
146 public UserAgentData getAgentByName(string name)
147 {
148 return getAgentByName(name.Split(' ')[0], name.Split(' ')[1]);
149 }
150
151 /// <summary>
152 /// Returns a user session by account name
153 /// </summary>
154 /// <param name="user">First part of the users account name</param>
155 /// <param name="last">Second part of the users account name</param>
156 /// <returns>The users session</returns>
157 public UserAgentData getAgentByName(string user, string last)
158 {
159 UserProfileData profile = getUserByName(user, last);
160 return getAgentByUUID(profile.UUID);
161 }
162
163 /// <summary>
164 /// Returns an agent session by account UUID
165 /// </summary>
166 /// <param name="uuid">The accounts UUID</param>
167 /// <returns>The users session</returns>
168 public UserAgentData getAgentByUUID(LLUUID uuid)
169 {
170 try
171 {
172 lock (database)
173 {
174 Dictionary<string, string> param = new Dictionary<string, string>();
175 param["?uuid"] = uuid.ToStringHyphenated();
176
177 IDbCommand result = database.Query("SELECT * FROM agents WHERE UUID = ?uuid", param);
178 IDataReader reader = result.ExecuteReader();
179
180 UserAgentData row = database.readAgentRow(reader);
181
182 reader.Close();
183 result.Dispose();
184
185 return row;
186 }
187 }
188 catch (Exception e)
189 {
190 database.Reconnect();
191 Console.WriteLine(e.ToString());
192 return null;
193 }
194 }
195
196 /// <summary>
197 /// Creates a new users profile
198 /// </summary>
199 /// <param name="user">The user profile to create</param>
200 public void addNewUserProfile(UserProfileData user)
201 {
202 }
203
204 /// <summary>
205 /// Creates a new agent
206 /// </summary>
207 /// <param name="agent">The agent to create</param>
208 public void addNewUserAgent(UserAgentData agent)
209 {
210 // Do nothing.
211 }
212
213 /// <summary>
214 /// Performs a money transfer request between two accounts
215 /// </summary>
216 /// <param name="from">The senders account ID</param>
217 /// <param name="to">The recievers account ID</param>
218 /// <param name="amount">The amount to transfer</param>
219 /// <returns>Success?</returns>
220 public bool moneyTransferRequest(LLUUID from, LLUUID to, uint amount)
221 {
222 return false;
223 }
224
225 /// <summary>
226 /// Performs an inventory transfer request between two accounts
227 /// </summary>
228 /// <remarks>TODO: Move to inventory server</remarks>
229 /// <param name="from">The senders account ID</param>
230 /// <param name="to">The recievers account ID</param>
231 /// <param name="item">The item to transfer</param>
232 /// <returns>Success?</returns>
233 public bool inventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item)
234 {
235 return false;
236 }
237
238 /// <summary>
239 /// Database provider name
240 /// </summary>
241 /// <returns>Provider name</returns>
242 public string getName()
243 {
244 return "MySQL Userdata Interface";
245 }
246
247 /// <summary>
248 /// Database provider version
249 /// </summary>
250 /// <returns>provider version</returns>
251 public string getVersion()
252 {
253 return "0.1";
254 }
255 }
256}
diff --git a/OpenSim/Framework/Data.MySQL/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.MySQL/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..52d6a54
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.Framework.Data.MySQL")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.Framework.Data.MySQL")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("e49826b2-dcef-41be-a5bd-596733fa3304")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/Data.SQLite/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.SQLite/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9de5edb
--- /dev/null
+++ b/OpenSim/Framework/Data.SQLite/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.Framework.Data.SQLite")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.Framework.Data.SQLite")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("6113d5ce-4547-49f4-9236-0dcc503457b1")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteGridData.cs b/OpenSim/Framework/Data.SQLite/SQLiteGridData.cs
new file mode 100644
index 0000000..511c5f0
--- /dev/null
+++ b/OpenSim/Framework/Data.SQLite/SQLiteGridData.cs
@@ -0,0 +1,197 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using System.Security.Cryptography;
32using System.Text;
33using libsecondlife;
34
35namespace OpenSim.Framework.Data.SQLite
36{
37 /// <summary>
38 /// A Grid Interface to the SQLite database
39 /// </summary>
40 public class SQLiteGridData : IGridData
41 {
42 /// <summary>
43 /// A database manager
44 /// </summary>
45 private SQLiteManager database;
46
47 /// <summary>
48 /// Initialises the Grid Interface
49 /// </summary>
50 public void Initialise()
51 {
52 database = new SQLiteManager("localhost", "db", "user", "password", "false");
53 }
54
55 /// <summary>
56 /// Shuts down the grid interface
57 /// </summary>
58 public void Close()
59 {
60 database.Close();
61 }
62
63 /// <summary>
64 /// Returns the name of this grid interface
65 /// </summary>
66 /// <returns>A string containing the grid interface</returns>
67 public string getName()
68 {
69 return "SQLite OpenGridData";
70 }
71
72 /// <summary>
73 /// Returns the version of this grid interface
74 /// </summary>
75 /// <returns>A string containing the version</returns>
76 public string getVersion()
77 {
78 return "0.1";
79 }
80
81 /// <summary>
82 /// Returns a list of regions within the specified ranges
83 /// </summary>
84 /// <param name="a">minimum X coordinate</param>
85 /// <param name="b">minimum Y coordinate</param>
86 /// <param name="c">maximum X coordinate</param>
87 /// <param name="d">maximum Y coordinate</param>
88 /// <returns>An array of region profiles</returns>
89 public SimProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d)
90 {
91 return null;
92 }
93
94 /// <summary>
95 /// Returns a sim profile from it's location
96 /// </summary>
97 /// <param name="handle">Region location handle</param>
98 /// <returns>Sim profile</returns>
99 public SimProfileData GetProfileByHandle(ulong handle)
100 {
101 Dictionary<string, string> param = new Dictionary<string, string>();
102 param["handle"] = handle.ToString();
103
104 IDbCommand result = database.Query("SELECT * FROM regions WHERE handle = @handle", param);
105 IDataReader reader = result.ExecuteReader();
106
107 SimProfileData row = database.getRow(reader);
108 reader.Close();
109 result.Dispose();
110
111 return row;
112 }
113
114 /// <summary>
115 /// Returns a sim profile from it's UUID
116 /// </summary>
117 /// <param name="uuid">The region UUID</param>
118 /// <returns>The sim profile</returns>
119 public SimProfileData GetProfileByLLUUID(LLUUID uuid)
120 {
121 Dictionary<string, string> param = new Dictionary<string, string>();
122 param["uuid"] = uuid.ToStringHyphenated();
123
124 IDbCommand result = database.Query("SELECT * FROM regions WHERE uuid = @uuid", param);
125 IDataReader reader = result.ExecuteReader();
126
127 SimProfileData row = database.getRow(reader);
128 reader.Close();
129 result.Dispose();
130
131 return row;
132 }
133
134 /// <summary>
135 /// Adds a new specified region to the database
136 /// </summary>
137 /// <param name="profile">The profile to add</param>
138 /// <returns>A dataresponse enum indicating success</returns>
139 public DataResponse AddProfile(SimProfileData profile)
140 {
141 if (database.insertRow(profile))
142 {
143 return DataResponse.RESPONSE_OK;
144 }
145 else
146 {
147 return DataResponse.RESPONSE_ERROR;
148 }
149 }
150
151 /// <summary>
152 /// DEPRECIATED. Attempts to authenticate a region by comparing a shared secret.
153 /// </summary>
154 /// <param name="uuid">The UUID of the challenger</param>
155 /// <param name="handle">The attempted regionHandle of the challenger</param>
156 /// <param name="authkey">The secret</param>
157 /// <returns>Whether the secret and regionhandle match the database entry for UUID</returns>
158 public bool AuthenticateSim(LLUUID uuid, ulong handle, string authkey)
159 {
160 bool throwHissyFit = false; // Should be true by 1.0
161
162 if (throwHissyFit)
163 throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential.");
164
165 SimProfileData data = GetProfileByLLUUID(uuid);
166
167 return (handle == data.regionHandle && authkey == data.regionSecret);
168 }
169
170 /// <summary>
171 /// NOT YET FUNCTIONAL. Provides a cryptographic authentication of a region
172 /// </summary>
173 /// <remarks>This requires a security audit.</remarks>
174 /// <param name="uuid"></param>
175 /// <param name="handle"></param>
176 /// <param name="authhash"></param>
177 /// <param name="challenge"></param>
178 /// <returns></returns>
179 public bool AuthenticateSim(LLUUID uuid, ulong handle, string authhash, string challenge)
180 {
181 SHA512Managed HashProvider = new SHA512Managed();
182 ASCIIEncoding TextProvider = new ASCIIEncoding();
183
184 byte[] stream = TextProvider.GetBytes(uuid.ToStringHyphenated() + ":" + handle.ToString() + ":" + challenge);
185 byte[] hash = HashProvider.ComputeHash(stream);
186
187 return false;
188 }
189
190 public ReservationData GetReservationAtPoint(uint x, uint y)
191 {
192 return null;
193 }
194 }
195
196
197}
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteManager.cs b/OpenSim/Framework/Data.SQLite/SQLiteManager.cs
new file mode 100644
index 0000000..c9931ab
--- /dev/null
+++ b/OpenSim/Framework/Data.SQLite/SQLiteManager.cs
@@ -0,0 +1,206 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Data;
31using System.Data.SQLite;
32using libsecondlife;
33
34namespace OpenSim.Framework.Data.SQLite
35{
36 class SQLiteManager
37 {
38 IDbConnection dbcon;
39
40 /// <summary>
41 /// Initialises and creates a new SQLite connection and maintains it.
42 /// </summary>
43 /// <param name="hostname">The SQLite server being connected to</param>
44 /// <param name="database">The name of the SQLite database being used</param>
45 /// <param name="username">The username logging into the database</param>
46 /// <param name="password">The password for the user logging in</param>
47 /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param>
48 public SQLiteManager(string hostname, string database, string username, string password, string cpooling)
49 {
50 try
51 {
52 string connectionString = "URI=file:GridServerSqlite.db;";
53 dbcon = new SQLiteConnection(connectionString);
54
55 dbcon.Open();
56 }
57 catch (Exception e)
58 {
59 throw new Exception("Error initialising SQLite Database: " + e.ToString());
60 }
61 }
62
63 /// <summary>
64 /// Shuts down the database connection
65 /// </summary>
66 public void Close()
67 {
68 dbcon.Close();
69 dbcon = null;
70 }
71
72 /// <summary>
73 /// Runs a query with protection against SQL Injection by using parameterised input.
74 /// </summary>
75 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param>
76 /// <param name="parameters">The parameters - index so that @y is indexed as 'y'</param>
77 /// <returns>A SQLite DB Command</returns>
78 public IDbCommand Query(string sql, Dictionary<string, string> parameters)
79 {
80 SQLiteCommand dbcommand = (SQLiteCommand)dbcon.CreateCommand();
81 dbcommand.CommandText = sql;
82 foreach (KeyValuePair<string, string> param in parameters)
83 {
84 SQLiteParameter paramx = new SQLiteParameter(param.Key,param.Value);
85 dbcommand.Parameters.Add(paramx);
86 }
87
88 return (IDbCommand)dbcommand;
89 }
90
91 /// <summary>
92 /// Reads a region row from a database reader
93 /// </summary>
94 /// <param name="reader">An active database reader</param>
95 /// <returns>A region profile</returns>
96 public SimProfileData getRow(IDataReader reader)
97 {
98 SimProfileData retval = new SimProfileData();
99
100 if (reader.Read())
101 {
102 // Region Main
103 retval.regionHandle = (ulong)reader["regionHandle"];
104 retval.regionName = (string)reader["regionName"];
105 retval.UUID = new LLUUID((string)reader["uuid"]);
106
107 // Secrets
108 retval.regionRecvKey = (string)reader["regionRecvKey"];
109 retval.regionSecret = (string)reader["regionSecret"];
110 retval.regionSendKey = (string)reader["regionSendKey"];
111
112 // Region Server
113 retval.regionDataURI = (string)reader["regionDataURI"];
114 retval.regionOnline = false; // Needs to be pinged before this can be set.
115 retval.serverIP = (string)reader["serverIP"];
116 retval.serverPort = (uint)reader["serverPort"];
117 retval.serverURI = (string)reader["serverURI"];
118
119 // Location
120 retval.regionLocX = (uint)((int)reader["locX"]);
121 retval.regionLocY = (uint)((int)reader["locY"]);
122 retval.regionLocZ = (uint)((int)reader["locZ"]);
123
124 // Neighbours - 0 = No Override
125 retval.regionEastOverrideHandle = (ulong)reader["eastOverrideHandle"];
126 retval.regionWestOverrideHandle = (ulong)reader["westOverrideHandle"];
127 retval.regionSouthOverrideHandle = (ulong)reader["southOverrideHandle"];
128 retval.regionNorthOverrideHandle = (ulong)reader["northOverrideHandle"];
129
130 // Assets
131 retval.regionAssetURI = (string)reader["regionAssetURI"];
132 retval.regionAssetRecvKey = (string)reader["regionAssetRecvKey"];
133 retval.regionAssetSendKey = (string)reader["regionAssetSendKey"];
134
135 // Userserver
136 retval.regionUserURI = (string)reader["regionUserURI"];
137 retval.regionUserRecvKey = (string)reader["regionUserRecvKey"];
138 retval.regionUserSendKey = (string)reader["regionUserSendKey"];
139 }
140 else
141 {
142 throw new Exception("No rows to return");
143 }
144 return retval;
145 }
146
147 /// <summary>
148 /// Inserts a new region into the database
149 /// </summary>
150 /// <param name="profile">The region to insert</param>
151 /// <returns>Success?</returns>
152 public bool insertRow(SimProfileData profile)
153 {
154 string sql = "REPLACE INTO regions VALUES (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, ";
155 sql += "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, ";
156 sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey) VALUES ";
157
158 sql += "(@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, ";
159 sql += "@serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, ";
160 sql += "@regionAssetSendKey, @regionUserURI, @regionUserRecvKey, @regionUserSendKey);";
161
162 Dictionary<string, string> parameters = new Dictionary<string, string>();
163
164 parameters["regionHandle"] = profile.regionHandle.ToString();
165 parameters["regionName"] = profile.regionName;
166 parameters["uuid"] = profile.UUID.ToString();
167 parameters["regionRecvKey"] = profile.regionRecvKey;
168 parameters["regionSendKey"] = profile.regionSendKey;
169 parameters["regionDataURI"] = profile.regionDataURI;
170 parameters["serverIP"] = profile.serverIP;
171 parameters["serverPort"] = profile.serverPort.ToString();
172 parameters["serverURI"] = profile.serverURI;
173 parameters["locX"] = profile.regionLocX.ToString();
174 parameters["locY"] = profile.regionLocY.ToString();
175 parameters["locZ"] = profile.regionLocZ.ToString();
176 parameters["eastOverrideHandle"] = profile.regionEastOverrideHandle.ToString();
177 parameters["westOverrideHandle"] = profile.regionWestOverrideHandle.ToString();
178 parameters["northOverrideHandle"] = profile.regionNorthOverrideHandle.ToString();
179 parameters["southOverrideHandle"] = profile.regionSouthOverrideHandle.ToString();
180 parameters["regionAssetURI"] = profile.regionAssetURI;
181 parameters["regionAssetRecvKey"] = profile.regionAssetRecvKey;
182 parameters["regionAssetSendKey"] = profile.regionAssetSendKey;
183 parameters["regionUserURI"] = profile.regionUserURI;
184 parameters["regionUserRecvKey"] = profile.regionUserRecvKey;
185 parameters["regionUserSendKey"] = profile.regionUserSendKey;
186
187 bool returnval = false;
188
189 try
190 {
191 IDbCommand result = Query(sql, parameters);
192
193 if (result.ExecuteNonQuery() == 1)
194 returnval = true;
195
196 result.Dispose();
197 }
198 catch (Exception)
199 {
200 return false;
201 }
202
203 return returnval;
204 }
205 }
206}
diff --git a/OpenSim/Framework/Data/GridData.cs b/OpenSim/Framework/Data/GridData.cs
new file mode 100644
index 0000000..5a17d20
--- /dev/null
+++ b/OpenSim/Framework/Data/GridData.cs
@@ -0,0 +1,111 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Data
31{
32 public enum DataResponse
33 {
34 RESPONSE_OK,
35 RESPONSE_AUTHREQUIRED,
36 RESPONSE_INVALIDCREDENTIALS,
37 RESPONSE_ERROR
38 }
39
40 /// <summary>
41 /// A standard grid interface
42 /// </summary>
43 public interface IGridData
44 {
45 /// <summary>
46 /// Returns a sim profile from a regionHandle
47 /// </summary>
48 /// <param name="regionHandle">A 64bit Region Handle</param>
49 /// <returns>A simprofile</returns>
50 SimProfileData GetProfileByHandle(ulong regionHandle);
51
52 /// <summary>
53 /// Returns a sim profile from a UUID
54 /// </summary>
55 /// <param name="UUID">A 128bit UUID</param>
56 /// <returns>A sim profile</returns>
57 SimProfileData GetProfileByLLUUID(LLUUID UUID);
58
59 /// <summary>
60 /// Returns all profiles within the specified range
61 /// </summary>
62 /// <param name="Xmin">Minimum sim coordinate (X)</param>
63 /// <param name="Ymin">Minimum sim coordinate (Y)</param>
64 /// <param name="Xmax">Maximum sim coordinate (X)</param>
65 /// <param name="Ymin">Maximum sim coordinate (Y)</param>
66 /// <returns>An array containing all the sim profiles in the specified range</returns>
67 SimProfileData[] GetProfilesInRange(uint Xmin, uint Ymin, uint Xmax, uint Ymax);
68
69 /// <summary>
70 /// Authenticates a sim by use of it's recv key.
71 /// WARNING: Insecure
72 /// </summary>
73 /// <param name="UUID">The UUID sent by the sim</param>
74 /// <param name="regionHandle">The regionhandle sent by the sim</param>
75 /// <param name="simrecvkey">The recieving key sent by the sim</param>
76 /// <returns>Whether the sim has been authenticated</returns>
77 bool AuthenticateSim(LLUUID UUID, ulong regionHandle, string simrecvkey);
78
79 /// <summary>
80 /// Initialises the interface
81 /// </summary>
82 void Initialise();
83
84 /// <summary>
85 /// Closes the interface
86 /// </summary>
87 void Close();
88
89 /// <summary>
90 /// The plugin being loaded
91 /// </summary>
92 /// <returns>A string containing the plugin name</returns>
93 string getName();
94
95 /// <summary>
96 /// The plugins version
97 /// </summary>
98 /// <returns>A string containing the plugin version</returns>
99 string getVersion();
100
101 /// <summary>
102 /// Adds a new profile to the database
103 /// </summary>
104 /// <param name="profile">The profile to add</param>
105 /// <returns>RESPONSE_OK if successful, error if not.</returns>
106 DataResponse AddProfile(SimProfileData profile);
107
108 ReservationData GetReservationAtPoint(uint x, uint y);
109
110 }
111}
diff --git a/OpenSim/Framework/Data/ILogData.cs b/OpenSim/Framework/Data/ILogData.cs
new file mode 100644
index 0000000..059fef5
--- /dev/null
+++ b/OpenSim/Framework/Data/ILogData.cs
@@ -0,0 +1,90 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Data
29{
30 /// <summary>
31 /// The severity of an individual log message
32 /// </summary>
33 public enum LogSeverity : int
34 {
35 /// <summary>
36 /// Critical: systems failure
37 /// </summary>
38 CRITICAL = 1,
39 /// <summary>
40 /// Major: warning prior to systems failure
41 /// </summary>
42 MAJOR = 2,
43 /// <summary>
44 /// Medium: an individual non-critical task failed
45 /// </summary>
46 MEDIUM = 3,
47 /// <summary>
48 /// Low: Informational warning
49 /// </summary>
50 LOW = 4,
51 /// <summary>
52 /// Info: Information
53 /// </summary>
54 INFO = 5,
55 /// <summary>
56 /// Verbose: Debug Information
57 /// </summary>
58 VERBOSE = 6
59 }
60
61 /// <summary>
62 /// An interface to a LogData storage system
63 /// </summary>
64 public interface ILogData
65 {
66 void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority,string logMessage);
67 /// <summary>
68 /// Initialises the interface
69 /// </summary>
70 void Initialise();
71
72 /// <summary>
73 /// Closes the interface
74 /// </summary>
75 void Close();
76
77 /// <summary>
78 /// The plugin being loaded
79 /// </summary>
80 /// <returns>A string containing the plugin name</returns>
81 string getName();
82
83 /// <summary>
84 /// The plugins version
85 /// </summary>
86 /// <returns>A string containing the plugin version</returns>
87 string getVersion();
88 }
89
90}
diff --git a/OpenSim/Framework/Data/IniConfig.cs b/OpenSim/Framework/Data/IniConfig.cs
new file mode 100644
index 0000000..2b52fd1
--- /dev/null
+++ b/OpenSim/Framework/Data/IniConfig.cs
@@ -0,0 +1,96 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.IO;
29using System.Text.RegularExpressions;
30/*
31 Taken from public code listing at by Alex Pinsker
32 http://alexpinsker.blogspot.com/2005/12/reading-ini-file-from-c_113432097333021549.html
33 */
34
35namespace OpenSim.Framework.Data
36{
37 /// <summary>
38 /// Parse settings from ini-like files
39 /// </summary>
40 public class IniFile
41 {
42 static IniFile()
43 {
44 _iniKeyValuePatternRegex = new Regex(
45 @"((\s)*(?<Key>([^\=^\s^\n]+))[\s^\n]*
46 # key part (surrounding whitespace stripped)
47 \=
48 (\s)*(?<Value>([^\n^\s]+(\n){0,1})))
49 # value part (surrounding whitespace stripped)
50 ",
51 RegexOptions.IgnorePatternWhitespace |
52 RegexOptions.Compiled |
53 RegexOptions.CultureInvariant);
54 }
55 static private Regex _iniKeyValuePatternRegex;
56
57 public IniFile(string iniFileName)
58 {
59 _iniFileName = iniFileName;
60 }
61
62 public string ParseFileReadValue(string key)
63 {
64 using (StreamReader reader =
65 new StreamReader(_iniFileName))
66 {
67 do
68 {
69 string line = reader.ReadLine();
70 Match match =
71 _iniKeyValuePatternRegex.Match(line);
72 if (match.Success)
73 {
74 string currentKey =
75 match.Groups["Key"].Value as string;
76 if (currentKey != null &&
77 currentKey.Trim().CompareTo(key) == 0)
78 {
79 string value =
80 match.Groups["Value"].Value as string;
81 return value;
82 }
83 }
84
85 }
86 while (reader.Peek() != -1);
87 }
88 return null;
89 }
90
91 public string IniFileName
92 {
93 get { return _iniFileName; }
94 } private string _iniFileName;
95 }
96}
diff --git a/OpenSim/Framework/Data/InventoryData.cs b/OpenSim/Framework/Data/InventoryData.cs
new file mode 100644
index 0000000..c2a1d06
--- /dev/null
+++ b/OpenSim/Framework/Data/InventoryData.cs
@@ -0,0 +1,185 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using libsecondlife;
30
31namespace OpenSim.Framework.Data
32{
33 /// <summary>
34 /// Inventory Item - contains all the properties associated with an individual inventory piece.
35 /// </summary>
36 public class InventoryItemBase
37 {
38 /// <summary>
39 /// A UUID containing the ID for the inventory item itself
40 /// </summary>
41 public LLUUID inventoryID;
42 /// <summary>
43 /// The UUID of the associated asset on the asset server
44 /// </summary>
45 public LLUUID assetID;
46 /// <summary>
47 /// This is an enumerated value determining the type of asset (eg Notecard, Sound, Object, etc)
48 /// </summary>
49 public int type;
50 /// <summary>
51 /// The folder this item is contained in (NULL_KEY = Inventory Root)
52 /// </summary>
53 public LLUUID parentFolderID;
54 /// <summary>
55 /// The owner of this inventory item
56 /// </summary>
57 public LLUUID avatarID;
58 /// <summary>
59 /// The name of the inventory item (must be less than 64 characters)
60 /// </summary>
61 public string inventoryName;
62 /// <summary>
63 /// The description of the inventory item (must be less than 64 characters)
64 /// </summary>
65 public string inventoryDescription;
66 /// <summary>
67 /// A mask containing the permissions for the next owner (cannot be enforced)
68 /// </summary>
69 public uint inventoryNextPermissions;
70 /// <summary>
71 /// A mask containing permissions for the current owner (cannot be enforced)
72 /// </summary>
73 public uint inventoryCurrentPermissions;
74 }
75
76 /// <summary>
77 /// A Class for folders which contain users inventory
78 /// </summary>
79 public class InventoryFolderBase
80 {
81 /// <summary>
82 /// The name of the folder (64 characters or less)
83 /// </summary>
84 public string name;
85 /// <summary>
86 /// The agent who's inventory this is contained by
87 /// </summary>
88 public LLUUID agentID;
89 /// <summary>
90 /// The folder this folder is contained in (NULL_KEY for root)
91 /// </summary>
92 public LLUUID parentID;
93 /// <summary>
94 /// The UUID for this folder
95 /// </summary>
96 public LLUUID folderID;
97 }
98
99 /// <summary>
100 /// An interface for accessing inventory data from a storage server
101 /// </summary>
102 public interface IInventoryData
103 {
104 /// <summary>
105 /// Initialises the interface
106 /// </summary>
107 void Initialise();
108
109 /// <summary>
110 /// Closes the interface
111 /// </summary>
112 void Close();
113
114 /// <summary>
115 /// The plugin being loaded
116 /// </summary>
117 /// <returns>A string containing the plugin name</returns>
118 string getName();
119
120 /// <summary>
121 /// The plugins version
122 /// </summary>
123 /// <returns>A string containing the plugin version</returns>
124 string getVersion();
125
126 /// <summary>
127 /// Returns a list of inventory items contained within the specified folder
128 /// </summary>
129 /// <param name="folderID">The UUID of the target folder</param>
130 /// <returns>A List of InventoryItemBase items</returns>
131 List<InventoryItemBase> getInventoryInFolder(LLUUID folderID);
132
133 /// <summary>
134 /// Returns a list of folders in the users inventory root.
135 /// </summary>
136 /// <param name="user">The UUID of the user who is having inventory being returned</param>
137 /// <returns>A list of folders</returns>
138 List<InventoryFolderBase> getUserRootFolders(LLUUID user);
139
140 /// <summary>
141 /// Returns a list of inventory folders contained in the folder 'parentID'
142 /// </summary>
143 /// <param name="parentID">The folder to get subfolders for</param>
144 /// <returns>A list of inventory folders</returns>
145 List<InventoryFolderBase> getInventoryFolders(LLUUID parentID);
146
147 /// <summary>
148 /// Returns an inventory item by its UUID
149 /// </summary>
150 /// <param name="item">The UUID of the item to be returned</param>
151 /// <returns>A class containing item information</returns>
152 InventoryItemBase getInventoryItem(LLUUID item);
153
154 /// <summary>
155 /// Returns a specified inventory folder by its UUID
156 /// </summary>
157 /// <param name="folder">The UUID of the folder to be returned</param>
158 /// <returns>A class containing folder information</returns>
159 InventoryFolderBase getInventoryFolder(LLUUID folder);
160
161 /// <summary>
162 /// Creates a new inventory item based on item
163 /// </summary>
164 /// <param name="item">The item to be created</param>
165 void addInventoryItem(InventoryItemBase item);
166
167 /// <summary>
168 /// Updates an inventory item with item (updates based on ID)
169 /// </summary>
170 /// <param name="item">The updated item</param>
171 void updateInventoryItem(InventoryItemBase item);
172
173 /// <summary>
174 /// Adds a new folder specified by folder
175 /// </summary>
176 /// <param name="folder">The inventory folder</param>
177 void addInventoryFolder(InventoryFolderBase folder);
178
179 /// <summary>
180 /// Updates a folder based on its ID with folder
181 /// </summary>
182 /// <param name="folder">The inventory folder</param>
183 void updateInventoryFolder(InventoryFolderBase folder);
184 }
185}
diff --git a/OpenSim/Framework/Data/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f9260a1
--- /dev/null
+++ b/OpenSim/Framework/Data/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.Framework.Data")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.Framework.Data")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("3a711c34-b0c0-4264-b0fe-f366eabf9d7b")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/Data/ReservationData.cs b/OpenSim/Framework/Data/ReservationData.cs
new file mode 100644
index 0000000..0078df0
--- /dev/null
+++ b/OpenSim/Framework/Data/ReservationData.cs
@@ -0,0 +1,47 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Data
31{
32 public class ReservationData
33 {
34 public LLUUID userUUID = new LLUUID();
35 public int reservationMinX = 0;
36 public int reservationMinY = 0;
37 public int reservationMaxX = 65536;
38 public int reservationMaxY = 65536;
39
40 public string reservationName = "";
41 public string reservationCompany = "";
42 public bool status = true;
43
44 public string gridSendKey = "";
45 public string gridRecvKey = "";
46 }
47}
diff --git a/OpenSim/Framework/Data/SimProfileData.cs b/OpenSim/Framework/Data/SimProfileData.cs
new file mode 100644
index 0000000..b920cab
--- /dev/null
+++ b/OpenSim/Framework/Data/SimProfileData.cs
@@ -0,0 +1,192 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using Nwc.XmlRpc;
30
31using System;
32using System.Collections;
33
34namespace OpenSim.Framework.Data
35{
36 /// <summary>
37 /// A class which contains information known to the grid server about a region
38 /// </summary>
39 public class SimProfileData
40 {
41 /// <summary>
42 /// The name of the region
43 /// </summary>
44 public string regionName = "";
45
46 /// <summary>
47 /// A 64-bit number combining map position into a (mostly) unique ID
48 /// </summary>
49 public ulong regionHandle;
50
51 /// <summary>
52 /// OGS/OpenSim Specific ID for a region
53 /// </summary>
54 public LLUUID UUID;
55
56 /// <summary>
57 /// Coordinates of the region
58 /// </summary>
59 public uint regionLocX;
60 public uint regionLocY;
61 public uint regionLocZ; // Reserved (round-robin, layers, etc)
62
63 /// <summary>
64 /// Authentication secrets
65 /// </summary>
66 /// <remarks>Not very secure, needs improvement.</remarks>
67 public string regionSendKey = "";
68 public string regionRecvKey = "";
69 public string regionSecret = "";
70
71 /// <summary>
72 /// Whether the region is online
73 /// </summary>
74 public bool regionOnline;
75
76 /// <summary>
77 /// Information about the server that the region is currently hosted on
78 /// </summary>
79 public string serverIP = "";
80 public uint serverPort;
81 public string serverURI = "";
82
83 public uint httpPort;
84 public uint remotingPort;
85 public string httpServerURI = "";
86
87 /// <summary>
88 /// Set of optional overrides. Can be used to create non-eulicidean spaces.
89 /// </summary>
90 public ulong regionNorthOverrideHandle;
91 public ulong regionSouthOverrideHandle;
92 public ulong regionEastOverrideHandle;
93 public ulong regionWestOverrideHandle;
94
95 /// <summary>
96 /// Optional: URI Location of the region database
97 /// </summary>
98 /// <remarks>Used for floating sim pools where the region data is not nessecarily coupled to a specific server</remarks>
99 public string regionDataURI = "";
100
101 /// <summary>
102 /// Region Asset Details
103 /// </summary>
104 public string regionAssetURI = "";
105 public string regionAssetSendKey = "";
106 public string regionAssetRecvKey = "";
107
108 /// <summary>
109 /// Region Userserver Details
110 /// </summary>
111 public string regionUserURI = "";
112 public string regionUserSendKey = "";
113 public string regionUserRecvKey = "";
114
115 /// <summary>
116 /// Region Map Texture Asset
117 /// </summary>
118 public LLUUID regionMapTextureID = new LLUUID("00000000-0000-0000-9999-000000000006");
119
120 /// <summary>
121 /// Get Sim profile data from grid server when in grid mode
122 /// </summary>
123 /// <param name="region_uuid"></param>
124 /// <param name="gridserver_url"></param>
125 /// <param name="?"></param>
126 /// <returns></returns>
127 public SimProfileData RequestSimProfileData(LLUUID region_uuid, string gridserver_url, string gridserver_sendkey, string gridserver_recvkey)
128 {
129 Hashtable requestData = new Hashtable();
130 requestData["region_uuid"] = region_uuid.UUID.ToString();
131 requestData["authkey"] = gridserver_sendkey;
132 ArrayList SendParams = new ArrayList();
133 SendParams.Add(requestData);
134 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
135 XmlRpcResponse GridResp = GridReq.Send(gridserver_url, 3000);
136
137 Hashtable responseData = (Hashtable)GridResp.Value;
138
139 if (responseData.ContainsKey("error"))
140 {
141 return null;
142 }
143
144 SimProfileData simData = new SimProfileData();
145 simData.regionLocX = Convert.ToUInt32((string)responseData["region_locx"]);
146 simData.regionLocY = Convert.ToUInt32((string)responseData["region_locy"]);
147 simData.regionHandle = Helpers.UIntsToLong((simData.regionLocX * 256), (simData.regionLocY * 256));
148 simData.serverIP = (string)responseData["sim_ip"];
149 simData.serverPort = Convert.ToUInt32((string)responseData["sim_port"]);
150 simData.httpPort = Convert.ToUInt32((string)responseData["http_port"]);
151 simData.remotingPort = Convert.ToUInt32((string)responseData["remoting_port"]);
152 simData.serverURI = "http://" + simData.serverIP + ":" + simData.serverPort.ToString() + "/";
153 simData.httpServerURI = "http://" + simData.serverIP + ":" + simData.httpPort.ToString() + "/";
154 simData.UUID = new LLUUID((string)responseData["region_UUID"]);
155 simData.regionName = (string)responseData["region_name"];
156
157 return simData;
158 }
159 public SimProfileData RequestSimProfileData(ulong region_handle, string gridserver_url, string gridserver_sendkey, string gridserver_recvkey)
160 {
161 Hashtable requestData = new Hashtable();
162 requestData["region_handle"] = region_handle.ToString();
163 requestData["authkey"] = gridserver_sendkey;
164 ArrayList SendParams = new ArrayList();
165 SendParams.Add(requestData);
166 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
167 XmlRpcResponse GridResp = GridReq.Send(gridserver_url, 3000);
168
169 Hashtable responseData = (Hashtable)GridResp.Value;
170
171 if (responseData.ContainsKey("error"))
172 {
173 return null;
174 }
175
176 SimProfileData simData = new SimProfileData();
177 simData.regionLocX = Convert.ToUInt32((string)responseData["region_locx"]);
178 simData.regionLocY = Convert.ToUInt32((string)responseData["region_locy"]);
179 simData.regionHandle = Helpers.UIntsToLong((simData.regionLocX * 256), (simData.regionLocY * 256));
180 simData.serverIP = (string)responseData["sim_ip"];
181 simData.serverPort = Convert.ToUInt32((string)responseData["sim_port"]);
182 simData.httpPort = Convert.ToUInt32((string)responseData["http_port"]);
183 simData.remotingPort = Convert.ToUInt32((string)responseData["remoting_port"]);
184 simData.httpServerURI = "http://" + simData.serverIP + ":" + simData.httpPort.ToString() + "/";
185 simData.serverURI = "http://" + simData.serverIP + ":" + simData.serverPort.ToString() + "/";
186 simData.UUID = new LLUUID((string)responseData["region_UUID"]);
187 simData.regionName = (string)responseData["region_name"];
188
189 return simData;
190 }
191 }
192}
diff --git a/OpenSim/Framework/Data/UserData.cs b/OpenSim/Framework/Data/UserData.cs
new file mode 100644
index 0000000..c65f9fd
--- /dev/null
+++ b/OpenSim/Framework/Data/UserData.cs
@@ -0,0 +1,128 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Data
31{
32 /// <summary>
33 /// An interface for connecting to user storage servers.
34 /// </summary>
35 public interface IUserData
36 {
37 /// <summary>
38 /// Returns a user profile from a database via their UUID
39 /// </summary>
40 /// <param name="user">The accounts UUID</param>
41 /// <returns>The user data profile</returns>
42 UserProfileData getUserByUUID(LLUUID user);
43
44 /// <summary>
45 /// Returns a users profile by searching their username
46 /// </summary>
47 /// <param name="name">The users username</param>
48 /// <returns>The user data profile</returns>
49 UserProfileData getUserByName(string name);
50
51 /// <summary>
52 /// Returns a users profile by searching their username parts
53 /// </summary>
54 /// <param name="fname">Account firstname</param>
55 /// <param name="lname">Account lastname</param>
56 /// <returns>The user data profile</returns>
57 UserProfileData getUserByName(string fname, string lname);
58
59 /// <summary>
60 /// Returns the current agent for a user searching by it's UUID
61 /// </summary>
62 /// <param name="user">The users UUID</param>
63 /// <returns>The current agent session</returns>
64 UserAgentData getAgentByUUID(LLUUID user);
65
66 /// <summary>
67 /// Returns the current session agent for a user searching by username
68 /// </summary>
69 /// <param name="name">The users account name</param>
70 /// <returns>The current agent session</returns>
71 UserAgentData getAgentByName(string name);
72
73 /// <summary>
74 /// Returns the current session agent for a user searching by username parts
75 /// </summary>
76 /// <param name="fname">The users first account name</param>
77 /// <param name="lname">The users account surname</param>
78 /// <returns>The current agent session</returns>
79 UserAgentData getAgentByName(string fname, string lname);
80
81 /// <summary>
82 /// Adds a new User profile to the database
83 /// </summary>
84 /// <param name="user">UserProfile to add</param>
85 void addNewUserProfile(UserProfileData user);
86
87 /// <summary>
88 /// Adds a new agent to the database
89 /// </summary>
90 /// <param name="agent">The agent to add</param>
91 void addNewUserAgent(UserAgentData agent);
92
93 /// <summary>
94 /// Attempts to move currency units between accounts (NOT RELIABLE / TRUSTWORTHY. DONT TRY RUN YOUR OWN CURRENCY EXCHANGE WITH REAL VALUES)
95 /// </summary>
96 /// <param name="from">The account to transfer from</param>
97 /// <param name="to">The account to transfer to</param>
98 /// <param name="amount">The amount to transfer</param>
99 /// <returns>Successful?</returns>
100 bool moneyTransferRequest(LLUUID from, LLUUID to, uint amount);
101
102 /// <summary>
103 /// Attempts to move inventory between accounts, if inventory is copyable it will be copied into the target account.
104 /// </summary>
105 /// <param name="from">User to transfer from</param>
106 /// <param name="to">User to transfer to</param>
107 /// <param name="inventory">Specified inventory item</param>
108 /// <returns>Successful?</returns>
109 bool inventoryTransferRequest(LLUUID from, LLUUID to, LLUUID inventory);
110
111 /// <summary>
112 /// Returns the plugin version
113 /// </summary>
114 /// <returns>Plugin version in MAJOR.MINOR.REVISION.BUILD format</returns>
115 string getVersion();
116
117 /// <summary>
118 /// Returns the plugin name
119 /// </summary>
120 /// <returns>Plugin name, eg MySQL User Provider</returns>
121 string getName();
122
123 /// <summary>
124 /// Initialises the plugin (artificial constructor)
125 /// </summary>
126 void Initialise();
127 }
128}
diff --git a/OpenSim/Framework/Data/UserProfileData.cs b/OpenSim/Framework/Data/UserProfileData.cs
new file mode 100644
index 0000000..bb7d48c
--- /dev/null
+++ b/OpenSim/Framework/Data/UserProfileData.cs
@@ -0,0 +1,180 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
30
31namespace OpenSim.Framework.Data
32{
33 /// <summary>
34 /// Information about a particular user known to the userserver
35 /// </summary>
36 public class UserProfileData
37 {
38 /// <summary>
39 /// The ID value for this user
40 /// </summary>
41 public LLUUID UUID;
42
43 /// <summary>
44 /// The first component of a users account name
45 /// </summary>
46 public string username;
47 /// <summary>
48 /// The second component of a users account name
49 /// </summary>
50 public string surname;
51
52 /// <summary>
53 /// A salted hash containing the users password, in the format md5(md5(password) + ":" + salt)
54 /// </summary>
55 /// <remarks>This is double MD5'd because the client sends an unsalted MD5 to the loginserver</remarks>
56 public string passwordHash;
57 /// <summary>
58 /// The salt used for the users hash, should be 32 bytes or longer
59 /// </summary>
60 public string passwordSalt;
61
62 /// <summary>
63 /// The regionhandle of the users preffered home region. If multiple sims occupy the same spot, the grid may decide which region the user logs into
64 /// </summary>
65 public ulong homeRegion;
66 /// <summary>
67 /// The coordinates inside the region of the home location
68 /// </summary>
69 public LLVector3 homeLocation;
70 /// <summary>
71 /// Where the user will be looking when they rez.
72 /// </summary>
73 public LLVector3 homeLookAt;
74
75 /// <summary>
76 /// A UNIX Timestamp (seconds since epoch) for the users creation
77 /// </summary>
78 public int created;
79 /// <summary>
80 /// A UNIX Timestamp for the users last login date / time
81 /// </summary>
82 public int lastLogin;
83
84 /// <summary>
85 /// A URI to the users inventory server, used for foreigners and large grids
86 /// </summary>
87 public string userInventoryURI;
88 /// <summary>
89 /// A URI to the users asset server, used for foreigners and large grids.
90 /// </summary>
91 public string userAssetURI;
92
93 /// <summary>
94 /// A uint mask containing the "I can do" fields of the users profile
95 /// </summary>
96 public uint profileCanDoMask;
97 /// <summary>
98 /// A uint mask containing the "I want to do" part of the users profile
99 /// </summary>
100 public uint profileWantDoMask; // Profile window "I want to" mask
101
102 /// <summary>
103 /// The about text listed in a users profile.
104 /// </summary>
105 public string profileAboutText;
106 /// <summary>
107 /// The first life about text listed in a users profile
108 /// </summary>
109 public string profileFirstText;
110
111 /// <summary>
112 /// The profile image for an avatar stored on the asset server
113 /// </summary>
114 public LLUUID profileImage;
115 /// <summary>
116 /// The profile image for the users first life tab
117 /// </summary>
118 public LLUUID profileFirstImage;
119 /// <summary>
120 /// The users last registered agent (filled in on the user server)
121 /// </summary>
122 public UserAgentData currentAgent;
123 }
124
125 /// <summary>
126 /// Information about a users session
127 /// </summary>
128 public class UserAgentData
129 {
130 /// <summary>
131 /// The UUID of the users avatar (not the agent!)
132 /// </summary>
133 public LLUUID UUID;
134 /// <summary>
135 /// The IP address of the user
136 /// </summary>
137 public string agentIP = String.Empty;
138 /// <summary>
139 /// The port of the user
140 /// </summary>
141 public uint agentPort;
142 /// <summary>
143 /// Is the user online?
144 /// </summary>
145 public bool agentOnline;
146 /// <summary>
147 /// The session ID for the user (also the agent ID)
148 /// </summary>
149 public LLUUID sessionID;
150 /// <summary>
151 /// The "secure" session ID for the user
152 /// </summary>
153 /// <remarks>Not very secure. Dont rely on it for anything more than Linden Lab does.</remarks>
154 public LLUUID secureSessionID;
155 /// <summary>
156 /// The region the user logged into initially
157 /// </summary>
158 public LLUUID regionID;
159 /// <summary>
160 /// A unix timestamp from when the user logged in
161 /// </summary>
162 public int loginTime;
163 /// <summary>
164 /// When this agent expired and logged out, 0 if still online
165 /// </summary>
166 public int logoutTime;
167 /// <summary>
168 /// Current region the user is logged into
169 /// </summary>
170 public LLUUID currentRegion;
171 /// <summary>
172 /// Region handle of the current region the user is in
173 /// </summary>
174 public ulong currentHandle;
175 /// <summary>
176 /// The position of the user within the region
177 /// </summary>
178 public LLVector3 currentPos;
179 }
180}
diff --git a/OpenSim/Framework/General/AgentInventory.cs b/OpenSim/Framework/General/AgentInventory.cs
new file mode 100644
index 0000000..e45a0cd
--- /dev/null
+++ b/OpenSim/Framework/General/AgentInventory.cs
@@ -0,0 +1,265 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using libsecondlife;
30using libsecondlife.Packets;
31using OpenSim.Framework.Types;
32using OpenSim.Framework.Utilities;
33
34namespace OpenSim.Framework.Inventory
35{
36 public class AgentInventory
37 {
38 //Holds the local copy of Inventory info for a agent
39 public Dictionary<LLUUID, InventoryFolder> InventoryFolders;
40 public Dictionary<LLUUID, InventoryItem> InventoryItems;
41 public InventoryFolder InventoryRoot;
42 public int LastCached; //maybe used by opensim app, time this was last stored/compared to user server
43 public LLUUID AgentID;
44 public AvatarWearable[] Wearables;
45
46 public AgentInventory()
47 {
48 InventoryFolders = new Dictionary<LLUUID, InventoryFolder>();
49 InventoryItems = new Dictionary<LLUUID, InventoryItem>();
50 this.Initialise();
51 }
52
53 public virtual void Initialise()
54 {
55 Wearables = new AvatarWearable[13]; //should be 12 of these
56 for (int i = 0; i < 13; i++)
57 {
58 Wearables[i] = new AvatarWearable();
59 }
60
61 }
62
63 public bool CreateNewFolder(LLUUID folderID, ushort type)
64 {
65 InventoryFolder Folder = new InventoryFolder();
66 Folder.FolderID = folderID;
67 Folder.OwnerID = this.AgentID;
68 Folder.DefaultType = type;
69 this.InventoryFolders.Add(Folder.FolderID, Folder);
70 return (true);
71 }
72
73 public void CreateRootFolder(LLUUID newAgentID, bool createTextures)
74 {
75 this.AgentID = newAgentID;
76 InventoryRoot = new InventoryFolder();
77 InventoryRoot.FolderID = LLUUID.Random();
78 InventoryRoot.ParentID = new LLUUID();
79 InventoryRoot.Version = 1;
80 InventoryRoot.DefaultType = 8;
81 InventoryRoot.OwnerID = this.AgentID;
82 InventoryRoot.FolderName = "My Inventory";
83 InventoryFolders.Add(InventoryRoot.FolderID, InventoryRoot);
84 InventoryRoot.OwnerID = this.AgentID;
85 if (createTextures)
86 {
87 this.CreateNewFolder(LLUUID.Random(), 0, "Textures", InventoryRoot.FolderID);
88 }
89 }
90
91 public bool CreateNewFolder(LLUUID folderID, ushort type, string folderName)
92 {
93 InventoryFolder Folder = new InventoryFolder();
94 Folder.FolderID = folderID;
95 Folder.OwnerID = this.AgentID;
96 Folder.DefaultType = type;
97 Folder.FolderName = folderName;
98 this.InventoryFolders.Add(Folder.FolderID, Folder);
99
100 return (true);
101 }
102
103 public bool CreateNewFolder(LLUUID folderID, ushort type, string folderName, LLUUID parent)
104 {
105 if (!this.InventoryFolders.ContainsKey(folderID))
106 {
107 System.Console.WriteLine("creating new folder called " + folderName + " in agents inventory");
108 InventoryFolder Folder = new InventoryFolder();
109 Folder.FolderID = folderID;
110 Folder.OwnerID = this.AgentID;
111 Folder.DefaultType = type;
112 Folder.FolderName = folderName;
113 Folder.ParentID = parent;
114 this.InventoryFolders.Add(Folder.FolderID, Folder);
115 }
116
117 return (true);
118 }
119
120 public bool HasFolder(LLUUID folderID)
121 {
122 if (this.InventoryFolders.ContainsKey(folderID))
123 {
124 return true;
125 }
126 return false;
127 }
128
129 public LLUUID GetFolderID(string folderName)
130 {
131 foreach (InventoryFolder inv in this.InventoryFolders.Values)
132 {
133 if (inv.FolderName == folderName)
134 {
135 return inv.FolderID;
136 }
137 }
138
139 return LLUUID.Zero;
140 }
141
142 public bool UpdateItemAsset(LLUUID itemID, AssetBase asset)
143 {
144 if(this.InventoryItems.ContainsKey(itemID))
145 {
146 InventoryItem Item = this.InventoryItems[itemID];
147 Item.AssetID = asset.FullID;
148 System.Console.WriteLine("updated inventory item " + itemID.ToStringHyphenated() + " so it now is set to asset " + asset.FullID.ToStringHyphenated());
149 //TODO need to update the rest of the info
150 }
151 return true;
152 }
153
154 public bool UpdateItemDetails(LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet)
155 {
156 System.Console.WriteLine("updating inventory item details");
157 if (this.InventoryItems.ContainsKey(itemID))
158 {
159 System.Console.WriteLine("changing name to "+ Util.FieldToString(packet.Name));
160 InventoryItem Item = this.InventoryItems[itemID];
161 Item.Name = Util.FieldToString(packet.Name);
162 System.Console.WriteLine("updated inventory item " + itemID.ToStringHyphenated());
163 //TODO need to update the rest of the info
164 }
165 return true;
166 }
167
168 public LLUUID AddToInventory(LLUUID folderID, AssetBase asset)
169 {
170 if (this.InventoryFolders.ContainsKey(folderID))
171 {
172 LLUUID NewItemID = LLUUID.Random();
173
174 InventoryItem Item = new InventoryItem();
175 Item.FolderID = folderID;
176 Item.OwnerID = AgentID;
177 Item.AssetID = asset.FullID;
178 Item.ItemID = NewItemID;
179 Item.Type = asset.Type;
180 Item.Name = asset.Name;
181 Item.Description = asset.Description;
182 Item.InvType = asset.InvType;
183 this.InventoryItems.Add(Item.ItemID, Item);
184 InventoryFolder Folder = InventoryFolders[Item.FolderID];
185 Folder.Items.Add(Item);
186 return (Item.ItemID);
187 }
188 else
189 {
190 return (null);
191 }
192 }
193
194 public bool DeleteFromInventory(LLUUID itemID)
195 {
196 bool res = false;
197 if (this.InventoryItems.ContainsKey(itemID))
198 {
199 InventoryItem item = this.InventoryItems[itemID];
200 this.InventoryItems.Remove(itemID);
201 foreach (InventoryFolder fold in InventoryFolders.Values)
202 {
203 if (fold.Items.Contains(item))
204 {
205 fold.Items.Remove(item);
206 break;
207 }
208 }
209 res = true;
210
211 }
212 return res;
213 }
214 }
215
216 public class InventoryFolder
217 {
218 public List<InventoryItem> Items;
219 //public List<InventoryFolder> Subfolders;
220 public LLUUID FolderID;
221 public LLUUID OwnerID;
222 public LLUUID ParentID = LLUUID.Zero;
223 public string FolderName;
224 public ushort DefaultType;
225 public ushort Version;
226
227 public InventoryFolder()
228 {
229 Items = new List<InventoryItem>();
230 //Subfolders = new List<InventoryFolder>();
231 }
232
233 }
234
235 public class InventoryItem
236 {
237 public LLUUID FolderID;
238 public LLUUID OwnerID;
239 public LLUUID ItemID;
240 public LLUUID AssetID;
241 public LLUUID CreatorID;
242 public sbyte InvType;
243 public sbyte Type;
244 public string Name ="";
245 public string Description;
246
247 public InventoryItem()
248 {
249 this.CreatorID = LLUUID.Zero;
250 }
251
252 public string ExportString()
253 {
254 string typ = "notecard";
255 string result = "";
256 result += "\tinv_object\t0\n\t{\n";
257 result += "\t\tobj_id\t%s\n";
258 result += "\t\tparent_id\t"+ ItemID.ToString() +"\n";
259 result += "\t\ttype\t"+ typ +"\n";
260 result += "\t\tname\t" + Name+"|\n";
261 result += "\t}\n";
262 return result;
263 }
264 }
265}
diff --git a/OpenSim/Framework/General/AuthenticateSessionBase.cs b/OpenSim/Framework/General/AuthenticateSessionBase.cs
new file mode 100644
index 0000000..71616e3
--- /dev/null
+++ b/OpenSim/Framework/General/AuthenticateSessionBase.cs
@@ -0,0 +1,130 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using libsecondlife;
30using OpenSim.Framework.Interfaces;
31using OpenSim.Framework.Types;
32
33namespace OpenSim.Framework
34{
35 public class AuthenticateSessionsBase
36 {
37 public Dictionary<uint, AgentCircuitData> AgentCircuits = new Dictionary<uint, AgentCircuitData>();
38
39 public AuthenticateSessionsBase()
40 {
41
42 }
43
44 public virtual AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitcode)
45 {
46 AgentCircuitData validcircuit = null;
47 if (this.AgentCircuits.ContainsKey(circuitcode))
48 {
49 validcircuit = this.AgentCircuits[circuitcode];
50 }
51 AuthenticateResponse user = new AuthenticateResponse();
52 if (validcircuit == null)
53 {
54 //don't have this circuit code in our list
55 user.Authorised = false;
56 return (user);
57 }
58
59 if ((sessionID == validcircuit.SessionID) && (agentID == validcircuit.AgentID))
60 {
61 user.Authorised = true;
62 user.LoginInfo = new Login();
63 user.LoginInfo.Agent = agentID;
64 user.LoginInfo.Session = sessionID;
65 user.LoginInfo.SecureSession = validcircuit.SecureSessionID;
66 user.LoginInfo.First = validcircuit.firstname;
67 user.LoginInfo.Last = validcircuit.lastname;
68 user.LoginInfo.InventoryFolder = validcircuit.InventoryFolder;
69 user.LoginInfo.BaseFolder = validcircuit.BaseFolder;
70 }
71 else
72 {
73 // Invalid
74 user.Authorised = false;
75 }
76
77 return (user);
78 }
79
80 public virtual void AddNewCircuit(uint circuitCode, AgentCircuitData agentData)
81 {
82 if (this.AgentCircuits.ContainsKey(circuitCode))
83 {
84 this.AgentCircuits[circuitCode] = agentData;
85 }
86 else
87 {
88 this.AgentCircuits.Add(circuitCode, agentData);
89 }
90 }
91
92 public LLVector3 GetPosition(uint circuitCode)
93 {
94 LLVector3 vec = new LLVector3();
95 if (this.AgentCircuits.ContainsKey(circuitCode))
96 {
97 vec = this.AgentCircuits[circuitCode].startpos;
98 }
99 return vec;
100 }
101
102 public void UpdateAgentData(AgentCircuitData agentData)
103 {
104 if (this.AgentCircuits.ContainsKey((uint)agentData.circuitcode))
105 {
106 this.AgentCircuits[(uint)agentData.circuitcode].firstname = agentData.firstname;
107 this.AgentCircuits[(uint)agentData.circuitcode].lastname = agentData.lastname;
108 this.AgentCircuits[(uint)agentData.circuitcode].startpos = agentData.startpos;
109 // Console.WriteLine("update user start pos is " + agentData.startpos.X + " , " + agentData.startpos.Y + " , " + agentData.startpos.Z);
110 }
111 }
112
113 public void UpdateAgentChildStatus(uint circuitcode, bool childstatus)
114 {
115 if (this.AgentCircuits.ContainsKey(circuitcode))
116 {
117 this.AgentCircuits[circuitcode].child = childstatus;
118 }
119 }
120
121 public bool GetAgentChildStatus(uint circuitcode)
122 {
123 if (this.AgentCircuits.ContainsKey(circuitcode))
124 {
125 return this.AgentCircuits[circuitcode].child;
126 }
127 return false;
128 }
129 }
130} \ No newline at end of file
diff --git a/OpenSim/Framework/General/BlockingQueue.cs b/OpenSim/Framework/General/BlockingQueue.cs
new file mode 100644
index 0000000..0cc8124
--- /dev/null
+++ b/OpenSim/Framework/General/BlockingQueue.cs
@@ -0,0 +1,58 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using System.Threading;
30
31namespace OpenSim.Framework.Utilities
32{
33 public class BlockingQueue<T>
34 {
35 private Queue<T> _queue = new Queue<T>();
36 private object _queueSync = new object();
37
38 public void Enqueue(T value)
39 {
40 lock (_queueSync)
41 {
42 _queue.Enqueue(value);
43 Monitor.Pulse(_queueSync);
44 }
45 }
46
47 public T Dequeue()
48 {
49 lock (_queueSync)
50 {
51 if (_queue.Count < 1)
52 Monitor.Wait(_queueSync);
53
54 return _queue.Dequeue();
55 }
56 }
57 }
58}
diff --git a/OpenSim/Framework/General/ClientManager.cs b/OpenSim/Framework/General/ClientManager.cs
new file mode 100644
index 0000000..b560ca8
--- /dev/null
+++ b/OpenSim/Framework/General/ClientManager.cs
@@ -0,0 +1,36 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using OpenSim.Framework.Interfaces;
5
6namespace OpenSim.Framework
7{
8 public delegate void ForEachClientDelegate( IClientAPI client );
9 public class ClientManager
10 {
11 private Dictionary<uint, IClientAPI> m_clients;
12
13 public void ForEachClient(ForEachClientDelegate whatToDo)
14 {
15 foreach (IClientAPI client in m_clients.Values)
16 {
17 whatToDo(client);
18 }
19 }
20
21 public ClientManager()
22 {
23 m_clients = new Dictionary<uint, IClientAPI>();
24 }
25
26 public void Remove(uint id)
27 {
28 m_clients.Remove(id);
29 }
30
31 public void Add(uint id, IClientAPI client )
32 {
33 m_clients.Add( id, client );
34 }
35 }
36}
diff --git a/OpenSim/Framework/General/IRegionCommsListener.cs b/OpenSim/Framework/General/IRegionCommsListener.cs
new file mode 100644
index 0000000..32444f9
--- /dev/null
+++ b/OpenSim/Framework/General/IRegionCommsListener.cs
@@ -0,0 +1,46 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using libsecondlife;
30using OpenSim.Framework.Interfaces;
31using OpenSim.Framework.Types;
32
33namespace OpenSim.Framework
34{
35 public delegate void ExpectUserDelegate(ulong regionHandle, AgentCircuitData agent);
36 public delegate void UpdateNeighbours(List<RegionInfo> neighbours);
37 public delegate void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position);
38
39 public interface IRegionCommsListener
40 {
41 event ExpectUserDelegate OnExpectUser;
42 event GenericCall2 OnExpectChildAgent;
43 event AgentCrossing OnAvatarCrossingIntoRegion;
44 event UpdateNeighbours OnNeighboursUpdate;
45 }
46}
diff --git a/OpenSim/Framework/General/Interfaces/AuthenticateResponse.cs b/OpenSim/Framework/General/Interfaces/AuthenticateResponse.cs
new file mode 100644
index 0000000..508485b
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/AuthenticateResponse.cs
@@ -0,0 +1,43 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 OpenSim.Framework.Types;
29
30namespace OpenSim.Framework.Interfaces
31{
32 public class AuthenticateResponse
33 {
34 public bool Authorised;
35 public Login LoginInfo;
36
37 public AuthenticateResponse()
38 {
39
40 }
41
42 }
43}
diff --git a/OpenSim/Framework/General/Interfaces/Config/IGenericConfig.cs b/OpenSim/Framework/General/Interfaces/Config/IGenericConfig.cs
new file mode 100644
index 0000000..2c379dd
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/Config/IGenericConfig.cs
@@ -0,0 +1,38 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Interfaces
29{
30 public interface IGenericConfig
31 {
32 void LoadData();
33 string GetAttribute(string attributeName);
34 bool SetAttribute(string attributeName, string attributeValue);
35 void Commit();
36 void Close();
37 }
38}
diff --git a/OpenSim/Framework/General/Interfaces/Config/IGridConfig.cs b/OpenSim/Framework/General/Interfaces/Config/IGridConfig.cs
new file mode 100644
index 0000000..81dc293
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/Config/IGridConfig.cs
@@ -0,0 +1,59 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29//using OpenSim.world;
30
31namespace OpenSim.Framework.Interfaces
32{
33 /// <summary>
34 /// </summary>
35
36
37 public abstract class GridConfig
38 {
39 public string GridOwner;
40 public string DefaultStartupMsg;
41 public string DefaultAssetServer;
42 public string AssetSendKey;
43 public string AssetRecvKey;
44 public string DefaultUserServer;
45 public string UserSendKey;
46 public string UserRecvKey;
47 public string SimSendKey;
48 public string SimRecvKey;
49
50
51 public abstract void InitConfig();
52
53 }
54
55 public interface IGridConfig
56 {
57 GridConfig GetConfigObject();
58 }
59}
diff --git a/OpenSim/Framework/General/Interfaces/Config/IUserConfig.cs b/OpenSim/Framework/General/Interfaces/Config/IUserConfig.cs
new file mode 100644
index 0000000..ae6cedb
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/Config/IUserConfig.cs
@@ -0,0 +1,53 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29//using OpenSim.world;
30
31namespace OpenSim.Framework.Interfaces
32{
33 /// <summary>
34 /// </summary>
35
36
37 public abstract class UserConfig
38 {
39 public string DefaultStartupMsg;
40 public string GridServerURL;
41 public string GridSendKey;
42 public string GridRecvKey;
43
44
45 public abstract void InitConfig();
46
47 }
48
49 public interface IUserConfig
50 {
51 UserConfig GetConfigObject();
52 }
53}
diff --git a/OpenSim/Framework/General/Interfaces/IAssetServer.cs b/OpenSim/Framework/General/Interfaces/IAssetServer.cs
new file mode 100644
index 0000000..ab60dd7
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/IAssetServer.cs
@@ -0,0 +1,64 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using OpenSim.Framework.Types;
30
31namespace OpenSim.Framework.Interfaces
32{
33 /// <summary>
34 /// Description of IAssetServer.
35 /// </summary>
36
37 public interface IAssetServer
38 {
39 void SetReceiver(IAssetReceiver receiver);
40 void RequestAsset(LLUUID assetID, bool isTexture);
41 void UpdateAsset(AssetBase asset);
42 void UploadNewAsset(AssetBase asset);
43 void SetServerInfo(string ServerUrl, string ServerKey);
44 void Close();
45 }
46
47 // could change to delegate?
48 public interface IAssetReceiver
49 {
50 void AssetReceived(AssetBase asset, bool IsTexture);
51 void AssetNotFound(AssetBase asset);
52 }
53
54 public interface IAssetPlugin
55 {
56 IAssetServer GetAssetServer();
57 }
58
59 public struct ARequest
60 {
61 public LLUUID AssetID;
62 public bool IsTexture;
63 }
64}
diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs
new file mode 100644
index 0000000..1b0c682
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs
@@ -0,0 +1,180 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using System.Net;
30using libsecondlife;
31using libsecondlife.Packets;
32using OpenSim.Framework.Types;
33
34namespace OpenSim.Framework.Interfaces
35{
36 public delegate void ChatFromViewer(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID);
37 public delegate void ImprovedInstantMessage(LLUUID fromAgentID, LLUUID toAgentID, uint timestamp, string fromAgentName, string message); // Cut down from full list
38 public delegate void RezObject(AssetBase primAsset, LLVector3 pos);
39 public delegate void ModifyTerrain(float height, float seconds, byte size, byte action, float north, float west);
40 public delegate void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam);
41 public delegate void StartAnim(LLUUID animID, int seq);
42 public delegate void LinkObjects(uint parent, List<uint> children);
43 public delegate void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY);
44 public delegate void TeleportLocationRequest(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags);
45
46 public delegate void GenericCall(IClientAPI remoteClient);
47 public delegate void GenericCall2();
48 public delegate void GenericCall3(Packet packet); // really don't want to be passing packets in these events, so this is very temporary.
49 public delegate void GenericCall4(Packet packet, IClientAPI remoteClient);
50 public delegate void GenericCall5(IClientAPI remoteClient, bool status);
51 public delegate void GenericCall6(LLUUID uid);
52 public delegate void GenericCall7(uint localID, string message);
53
54 public delegate void UpdateShape(uint localID, ObjectShapePacket.ObjectDataBlock shapeBlock);
55 public delegate void ObjectSelect(uint localID, IClientAPI remoteClient);
56 public delegate void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient);
57 public delegate void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient);
58 public delegate void UpdateVector(uint localID, LLVector3 pos, IClientAPI remoteClient);
59 public delegate void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient);
60 public delegate void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient);
61 public delegate void UpdatePrimGroupRotation(uint localID,LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient);
62 public delegate void ObjectDuplicate(uint localID, LLVector3 offset, uint dupeFlags);
63 public delegate void StatusChange(bool status);
64 public delegate void NewAvatar(IClientAPI remoteClient, LLUUID agentID, bool status);
65 public delegate void UpdateAgent(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation);
66 public delegate void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 grapPos, IClientAPI remoteClient);
67
68 public delegate void ParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client);
69 public delegate void ParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client);
70 public delegate void ParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client);
71 public delegate void ParcelPropertiesUpdateRequest(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client); // NOTETOSELFremove the packet part
72
73 public delegate void EstateOwnerMessageRequest(EstateOwnerMessagePacket packet, IClientAPI remote_client);
74
75 public delegate void UUIDNameRequest(LLUUID id, IClientAPI remote_client);
76
77 public interface IClientAPI
78 {
79 event ImprovedInstantMessage OnInstantMessage;
80 event ChatFromViewer OnChatFromViewer;
81 event RezObject OnRezObject;
82 event ModifyTerrain OnModifyTerrain;
83 event SetAppearance OnSetAppearance;
84 event StartAnim OnStartAnim;
85 event LinkObjects OnLinkObjects;
86 event RequestMapBlocks OnRequestMapBlocks;
87 event TeleportLocationRequest OnTeleportLocationRequest;
88
89 event GenericCall4 OnDeRezObject;
90 event GenericCall OnRegionHandShakeReply;
91 event GenericCall OnRequestWearables;
92 event GenericCall2 OnCompleteMovementToRegion;
93 event UpdateAgent OnAgentUpdate;
94 event GenericCall OnRequestAvatarsData;
95 event GenericCall4 OnAddPrim;
96 event ObjectDuplicate OnObjectDuplicate;
97 event UpdateVector OnGrapObject;
98 event ObjectSelect OnDeGrapObject;
99 event MoveObject OnGrapUpdate;
100
101 event UpdateShape OnUpdatePrimShape;
102 event ObjectSelect OnObjectSelect;
103 event GenericCall7 OnObjectDescription;
104 event GenericCall7 OnObjectName;
105 event UpdatePrimFlags OnUpdatePrimFlags;
106 event UpdatePrimTexture OnUpdatePrimTexture;
107 event UpdateVector OnUpdatePrimGroupPosition;
108 event UpdateVector OnUpdatePrimSinglePosition;
109 event UpdatePrimRotation OnUpdatePrimGroupRotation;
110 event UpdatePrimSingleRotation OnUpdatePrimSingleRotation;
111 event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation;
112 event UpdateVector OnUpdatePrimScale;
113 event StatusChange OnChildAgentStatus;
114 event GenericCall2 OnStopMovement;
115 event NewAvatar OnNewAvatar;
116 event GenericCall6 OnRemoveAvatar;
117
118 event UUIDNameRequest OnNameFromUUIDRequest;
119
120 event ParcelPropertiesRequest OnParcelPropertiesRequest;
121 event ParcelDivideRequest OnParcelDivideRequest;
122 event ParcelJoinRequest OnParcelJoinRequest;
123 event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
124
125 event EstateOwnerMessageRequest OnEstateOwnerMessage;
126
127 LLVector3 StartPos
128 {
129 get;
130 set;
131 }
132
133 LLUUID AgentId
134 {
135 get;
136 }
137
138 string FirstName
139 {
140 get;
141 }
142
143 string LastName
144 {
145 get;
146 }
147
148 void OutPacket(Packet newPack);
149 void SendWearables(AvatarWearable[] wearables);
150 void SendStartPingCheck(byte seq);
151 void SendKillObject(ulong regionHandle, uint avatarLocalID);
152 void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId);
153 void SendRegionHandshake(RegionInfo regionInfo);
154 void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID);
155 void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID);
156 void SendInstantMessage(string message, LLUUID target);
157 void SendLayerData(float[] map);
158 void SendLayerData(int px, int py, float[] map);
159 void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look);
160 void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourExternalEndPoint );
161 AgentCircuitData RequestClientInfo();
162 void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, IPEndPoint newRegionExternalEndPoint );
163 void SendMapBlock(List<MapBlockData> mapBlocks);
164 void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags);
165 void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint, uint locationID, uint flags);
166 void SendTeleportCancel();
167 void SendTeleportLocationStart();
168 void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance);
169
170 void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos, byte[] textureEntry);
171 void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity);
172
173 void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint);
174 void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID , uint flags);
175 void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags);
176 void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID);
177 void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID);
178 void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation);
179 }
180}
diff --git a/OpenSim/Framework/General/Interfaces/ILocalStorage.cs b/OpenSim/Framework/General/Interfaces/ILocalStorage.cs
new file mode 100644
index 0000000..dbdb25d
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/ILocalStorage.cs
@@ -0,0 +1,68 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using libsecondlife;
30using OpenSim.Framework.Types;
31
32namespace OpenSim.Framework.Interfaces
33{
34 /// <summary>
35 /// ILocalStorage. Really hacked together right now needs cleaning up
36 /// </summary>
37 public interface ILocalStorage
38 {
39 void Initialise(string datastore);
40
41 void StorePrim(PrimData prim);
42 void RemovePrim(LLUUID primID);
43 void LoadPrimitives(ILocalStorageReceiver receiver);
44
45 float[] LoadWorld();
46 void SaveMap(float[] heightmap);
47
48 void SaveParcels(ParcelData[] parcels);
49 void SaveParcel(ParcelData parcel);
50 void RemoveParcel(ParcelData parcel);
51 void RemoveAllParcels();
52 void LoadParcels(ILocalStorageParcelReceiver recv);
53
54 void ShutDown();
55 }
56
57 public interface ILocalStorageReceiver
58 {
59 void PrimFromStorage(PrimData prim);
60 }
61
62 public interface ILocalStorageParcelReceiver
63 {
64 void ParcelFromStorage(ParcelData data);
65 void NoParcelDataFromStorage();
66 }
67}
68
diff --git a/OpenSim/Framework/General/Interfaces/IUserServer.cs b/OpenSim/Framework/General/Interfaces/IUserServer.cs
new file mode 100644
index 0000000..b3700d2
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/IUserServer.cs
@@ -0,0 +1,39 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using OpenSim.Framework.Inventory;
30
31namespace OpenSim.Framework.Interfaces
32{
33 public interface IUserServer
34 {
35 AgentInventory RequestAgentsInventory(LLUUID agentID);
36 void SetServerInfo(string ServerUrl, string SendKey, string RecvKey);
37 bool UpdateAgentsInventory(LLUUID agentID, AgentInventory inventory);
38 }
39}
diff --git a/OpenSim/Framework/General/Interfaces/IWorld.cs b/OpenSim/Framework/General/Interfaces/IWorld.cs
new file mode 100644
index 0000000..204c01b
--- /dev/null
+++ b/OpenSim/Framework/General/Interfaces/IWorld.cs
@@ -0,0 +1,42 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using OpenSim.Framework.Types;
30
31namespace OpenSim.Framework.Interfaces
32{
33 public interface IWorld
34 {
35 void AddNewClient(IClientAPI client, bool child);
36 void RemoveClient(LLUUID agentID);
37
38 RegionInfo RegionInfo { get; }
39 object SyncRoot { get; }
40 uint NextLocalId { get; }
41 }
42}
diff --git a/OpenSim/Framework/General/LoginService.cs b/OpenSim/Framework/General/LoginService.cs
new file mode 100644
index 0000000..02efcec
--- /dev/null
+++ b/OpenSim/Framework/General/LoginService.cs
@@ -0,0 +1,34 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Grid
29{
30 public abstract class LoginService
31 {
32
33 }
34} \ No newline at end of file
diff --git a/OpenSim/Framework/General/Properties/AssemblyInfo.cs b/OpenSim/Framework/General/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..004040b
--- /dev/null
+++ b/OpenSim/Framework/General/Properties/AssemblyInfo.cs
@@ -0,0 +1,31 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.FrameWork")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.FrameWork")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("a08e20c7-f191-4137-b1f0-9291408fa521")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30[assembly: AssemblyVersion("1.0.0.0")]
31[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/General/RegionCommsListener.cs b/OpenSim/Framework/General/RegionCommsListener.cs
new file mode 100644
index 0000000..2b0bc62
--- /dev/null
+++ b/OpenSim/Framework/General/RegionCommsListener.cs
@@ -0,0 +1,68 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using OpenSim.Framework.Interfaces;
30using OpenSim.Framework.Types;
31
32namespace OpenSim.Framework
33{
34 public class RegionCommsListener :IRegionCommsListener
35 {
36 public event ExpectUserDelegate OnExpectUser;
37 public event GenericCall2 OnExpectChildAgent;
38 public event AgentCrossing OnAvatarCrossingIntoRegion;
39 public event UpdateNeighbours OnNeighboursUpdate;
40
41 /// <summary>
42 ///
43 /// </summary>
44 /// <param name="agent"></param>
45 /// <returns></returns>
46 public virtual bool TriggerExpectUser(ulong regionHandle, AgentCircuitData agent)
47 {
48 if(OnExpectUser != null)
49 {
50
51 OnExpectUser(regionHandle, agent);
52 return true;
53 }
54
55 return false;
56 }
57
58 public virtual bool TriggerExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position)
59 {
60 if (OnAvatarCrossingIntoRegion != null)
61 {
62 OnAvatarCrossingIntoRegion(regionHandle, agentID, position);
63 return true;
64 }
65 return false;
66 }
67 }
68}
diff --git a/OpenSim/Framework/General/Remoting.cs b/OpenSim/Framework/General/Remoting.cs
new file mode 100644
index 0000000..df32db2
--- /dev/null
+++ b/OpenSim/Framework/General/Remoting.cs
@@ -0,0 +1,135 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Security.Cryptography;
30using System.Text;
31
32namespace OpenSim.Framework
33{
34 /// <summary>
35 /// NEEDS AUDIT.
36 /// </summary>
37 /// <remarks>
38 /// Suggested implementation
39 /// <para>Store two digests for each foreign host. A local copy of the local hash using the local challenge (when issued), and a local copy of the remote hash using the remote challenge.</para>
40 /// <para>When sending data to the foreign host - run 'Sign' on the data and affix the returned byte[] to the message.</para>
41 /// <para>When recieving data from the foreign host - run 'Authenticate' against the data and the attached byte[].</para>
42 /// <para>Both hosts should be performing these operations for this to be effective.</para>
43 /// </remarks>
44 class RemoteDigest
45 {
46 private byte[] currentHash;
47 private byte[] secret;
48
49 private SHA512Managed SHA512;
50
51 /// <summary>
52 /// Initialises a new RemoteDigest authentication mechanism
53 /// </summary>
54 /// <remarks>Needs an audit by a cryptographic professional - was not "roll your own"'d by choice but rather a serious lack of decent authentication mechanisms in .NET remoting</remarks>
55 /// <param name="sharedSecret">The shared secret between systems (for inter-sim, this is provided in encrypted form during connection, for grid this is input manually in setup)</param>
56 /// <param name="salt">Binary salt - some common value - to be decided what</param>
57 /// <param name="challenge">The challenge key provided by the third party</param>
58 public RemoteDigest(string sharedSecret, byte[] salt, string challenge)
59 {
60 SHA512 = new SHA512Managed();
61 Rfc2898DeriveBytes RFC2898 = new Rfc2898DeriveBytes(sharedSecret,salt);
62 secret = RFC2898.GetBytes(512);
63 ASCIIEncoding ASCII = new ASCIIEncoding();
64
65 currentHash = SHA512.ComputeHash(AppendArrays(secret, ASCII.GetBytes(challenge)));
66 }
67
68 /// <summary>
69 /// Authenticates a piece of incoming data against the local digest. Upon successful authentication, digest string is incremented.
70 /// </summary>
71 /// <param name="data">The incoming data</param>
72 /// <param name="digest">The remote digest</param>
73 /// <returns></returns>
74 public bool Authenticate(byte[] data, byte[] digest)
75 {
76 byte[] newHash = SHA512.ComputeHash(AppendArrays(AppendArrays(currentHash, secret), data));
77 if (digest == newHash)
78 {
79 currentHash = newHash;
80 return true;
81 }
82 else
83 {
84 throw new Exception("Hash comparison failed. Key resync required.");
85 }
86 }
87
88 /// <summary>
89 /// Signs a new bit of data with the current hash. Returns a byte array which should be affixed to the message.
90 /// Signing a piece of data will automatically increment the hash - if you sign data and do not send it, the
91 /// hashes will get out of sync and throw an exception when validation is attempted.
92 /// </summary>
93 /// <param name="data">The outgoing data</param>
94 /// <returns>The local digest</returns>
95 public byte[] Sign(byte[] data)
96 {
97 currentHash = SHA512.ComputeHash(AppendArrays(AppendArrays(currentHash, secret), data));
98 return currentHash;
99 }
100
101 /// <summary>
102 /// Generates a new challenge string to be issued to a foreign host. Challenges are 1024-bit (effective strength of less than 512-bits) messages generated using the Crytographic Random Number Generator.
103 /// </summary>
104 /// <returns>A 128-character hexadecimal string containing the challenge.</returns>
105 public static string GenerateChallenge()
106 {
107 RNGCryptoServiceProvider RNG = new RNGCryptoServiceProvider();
108 byte[] bytes = new byte[64];
109 RNG.GetBytes(bytes);
110
111 StringBuilder sb = new StringBuilder(bytes.Length * 2);
112 foreach (byte b in bytes)
113 {
114 sb.AppendFormat("{0:x2}", b);
115 }
116 return sb.ToString();
117 }
118
119 /// <summary>
120 /// Helper function, merges two byte arrays
121 /// </summary>
122 /// <remarks>Sourced from MSDN Forum</remarks>
123 /// <param name="a">A</param>
124 /// <param name="b">B</param>
125 /// <returns>C</returns>
126 private byte[] AppendArrays(byte[] a, byte[] b)
127 {
128 byte[] c = new byte[a.Length + b.Length];
129 Buffer.BlockCopy(a, 0, c, 0, a.Length);
130 Buffer.BlockCopy(b, 0, c, a.Length, b.Length);
131 return c;
132 }
133
134 }
135}
diff --git a/OpenSim/Framework/General/Types/AgentCiruitData.cs b/OpenSim/Framework/General/Types/AgentCiruitData.cs
new file mode 100644
index 0000000..ed9ee3c
--- /dev/null
+++ b/OpenSim/Framework/General/Types/AgentCiruitData.cs
@@ -0,0 +1,49 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using System;
30
31namespace OpenSim.Framework.Types
32{
33 [Serializable]
34 public class AgentCircuitData
35 {
36 public AgentCircuitData() { }
37 public LLUUID AgentID;
38 public LLUUID SessionID;
39 public LLUUID SecureSessionID;
40 public LLVector3 startpos;
41 public string firstname;
42 public string lastname;
43 public uint circuitcode;
44 public bool child;
45 public LLUUID InventoryFolder;
46 public LLUUID BaseFolder;
47 public string CapsPath = "";
48 }
49}
diff --git a/OpenSim/Framework/General/Types/AgentWearable.cs b/OpenSim/Framework/General/Types/AgentWearable.cs
new file mode 100644
index 0000000..6152b7d
--- /dev/null
+++ b/OpenSim/Framework/General/Types/AgentWearable.cs
@@ -0,0 +1,57 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Types
31{
32 public class AvatarWearable
33 {
34 public LLUUID AssetID = new LLUUID("00000000-0000-0000-0000-000000000000");
35 public LLUUID ItemID = new LLUUID("00000000-0000-0000-0000-000000000000");
36
37 public AvatarWearable()
38 {
39
40 }
41
42 public static AvatarWearable[] DefaultWearables
43 {
44 get
45 {
46 AvatarWearable[] defaultWearables = new AvatarWearable[13]; //should be 13 of these
47 for (int i = 0; i < 13; i++)
48 {
49 defaultWearables[i] = new AvatarWearable();
50 }
51 defaultWearables[0].AssetID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
52 defaultWearables[0].ItemID = LLUUID.Random();
53 return defaultWearables;
54 }
55 }
56 }
57}
diff --git a/OpenSim/Framework/General/Types/AssetBase.cs b/OpenSim/Framework/General/Types/AssetBase.cs
new file mode 100644
index 0000000..c203f51
--- /dev/null
+++ b/OpenSim/Framework/General/Types/AssetBase.cs
@@ -0,0 +1,46 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Types
31{
32 public class AssetBase
33 {
34 public byte[] Data;
35 public LLUUID FullID;
36 public sbyte Type;
37 public sbyte InvType;
38 public string Name;
39 public string Description;
40
41 public AssetBase()
42 {
43
44 }
45 }
46}
diff --git a/OpenSim/Framework/General/Types/AssetLandmark.cs b/OpenSim/Framework/General/Types/AssetLandmark.cs
new file mode 100644
index 0000000..8aa872e
--- /dev/null
+++ b/OpenSim/Framework/General/Types/AssetLandmark.cs
@@ -0,0 +1,59 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
29using libsecondlife;
30
31namespace OpenSim.Framework.Types
32{
33 public class AssetLandmark : AssetBase
34 {
35 public int Version;
36 public LLVector3 Position;
37 public LLUUID RegionID;
38
39 public AssetLandmark(AssetBase a)
40 {
41 this.Data = a.Data;
42 this.FullID = a.FullID;
43 this.Type = a.Type;
44 this.InvType = a.InvType;
45 this.Name = a.Name;
46 this.Description = a.Description;
47 InternData();
48 }
49
50 private void InternData()
51 {
52 string temp = Encoding.UTF8.GetString(Data).Trim();
53 string[] parts = temp.Split('\n');
54 int.TryParse(parts[0].Substring(17, 1), out Version);
55 LLUUID.TryParse(parts[1].Substring(10, 36), out RegionID);
56 LLVector3.TryParse(parts[2].Substring(11, parts[2].Length - 11), out Position);
57 }
58 }
59}
diff --git a/OpenSim/Framework/General/Types/AssetStorage.cs b/OpenSim/Framework/General/Types/AssetStorage.cs
new file mode 100644
index 0000000..3681336
--- /dev/null
+++ b/OpenSim/Framework/General/Types/AssetStorage.cs
@@ -0,0 +1,47 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Types
31{
32 public class AssetStorage
33 {
34
35 public AssetStorage() {
36 }
37
38 public AssetStorage(LLUUID assetUUID) {
39 UUID=assetUUID;
40 }
41
42 public byte[] Data;
43 public sbyte Type;
44 public string Name;
45 public LLUUID UUID;
46 }
47}
diff --git a/OpenSim/Framework/General/Types/EstateSettings.cs b/OpenSim/Framework/General/Types/EstateSettings.cs
new file mode 100644
index 0000000..436b109
--- /dev/null
+++ b/OpenSim/Framework/General/Types/EstateSettings.cs
@@ -0,0 +1,93 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using libsecondlife;
30
31namespace OpenSim.Framework.Types
32{
33 public class EstateSettings
34 {
35 //Settings to this island
36 public float billableFactor = (float)0.0;
37 public uint estateID = 0;
38 public uint parentEstateID = 0;
39
40 public byte maxAgents = 40;
41 public float objectBonusFactor = (float)1.0;
42
43 public int redirectGridX = 0; //??
44 public int redirectGridY = 0; //??
45 public Simulator.RegionFlags regionFlags = Simulator.RegionFlags.None; //Booleam values of various region settings
46 public Simulator.SimAccess simAccess = Simulator.SimAccess.Mature; //Is sim PG, Mature, etc? Mature by default.
47 public float sunHour = 0;
48
49 public float terrainRaiseLimit = 0;
50 public float terrainLowerLimit = 0;
51
52 public bool useFixedSun = false;
53 public int pricePerMeter = 1;
54
55 public ushort regionWaterHeight = 20;
56 public bool regionAllowTerraform = true;
57
58 // Region Information
59 // Low resolution 'base' textures. No longer used.
60 public LLUUID terrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); // Default
61 public LLUUID terrainBase1 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3"); // Default
62 public LLUUID terrainBase2 = new LLUUID("179cdabd-398a-9b6b-1391-4dc333ba321f"); // Default
63 public LLUUID terrainBase3 = new LLUUID("beb169c7-11ea-fff2-efe5-0f24dc881df2"); // Default
64
65 // Higher resolution terrain textures
66 public LLUUID terrainDetail0 = new LLUUID("00000000-0000-0000-0000-000000000000");
67 public LLUUID terrainDetail1 = new LLUUID("00000000-0000-0000-0000-000000000000");
68 public LLUUID terrainDetail2 = new LLUUID("00000000-0000-0000-0000-000000000000");
69 public LLUUID terrainDetail3 = new LLUUID("00000000-0000-0000-0000-000000000000");
70
71 // First quad - each point is bilinearly interpolated at each meter of terrain
72 public float terrainStartHeight0 = 10.0f;
73 public float terrainStartHeight1 = 10.0f;
74 public float terrainStartHeight2 = 10.0f;
75 public float terrainStartHeight3 = 10.0f;
76
77 // Second quad - also bilinearly interpolated.
78 // Terrain texturing is done that:
79 // 0..3 (0 = base0, 3 = base3) = (terrain[x,y] - start[x,y]) / range[x,y]
80 public float terrainHeightRange0 = 60.0f; //00
81 public float terrainHeightRange1 = 60.0f; //01
82 public float terrainHeightRange2 = 60.0f; //10
83 public float terrainHeightRange3 = 60.0f; //11
84
85 // Terrain Default (Must be in F32 Format!)
86 public string terrainFile = "default.r32";
87 public double terrainMultiplier = 60.0;
88 public float waterHeight = (float)20.0;
89
90 public LLUUID terrainImageID = LLUUID.Zero; // the assetID that is the current Map image for this region
91
92 }
93}
diff --git a/OpenSim/Framework/General/Types/Login.cs b/OpenSim/Framework/General/Types/Login.cs
new file mode 100644
index 0000000..d54c019
--- /dev/null
+++ b/OpenSim/Framework/General/Types/Login.cs
@@ -0,0 +1,49 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Types
31{
32 public class Login
33 {
34 public string First = "Test";
35 public string Last = "User";
36 public LLUUID Agent;
37 public LLUUID Session;
38 public LLUUID SecureSession = LLUUID.Zero;
39 public LLUUID InventoryFolder;
40 public LLUUID BaseFolder;
41 public uint CircuitCode;
42 public string CapsPath ="";
43
44 public Login()
45 {
46
47 }
48 }
49}
diff --git a/OpenSim/Framework/General/Types/MapBlockData.cs b/OpenSim/Framework/General/Types/MapBlockData.cs
new file mode 100644
index 0000000..fbb3b73
--- /dev/null
+++ b/OpenSim/Framework/General/Types/MapBlockData.cs
@@ -0,0 +1,23 @@
1using System;
2using libsecondlife;
3
4namespace OpenSim.Framework.Types
5{
6 public class MapBlockData
7 {
8 public uint Flags;
9 public ushort X;
10 public ushort Y;
11 public byte Agents;
12 public byte Access;
13 public byte WaterHeight;
14 public LLUUID MapImageId;
15 public String Name;
16 public uint RegionFlags;
17
18 public MapBlockData()
19 {
20
21 }
22 }
23}
diff --git a/OpenSim/Framework/General/Types/NeighbourInfo.cs b/OpenSim/Framework/General/Types/NeighbourInfo.cs
new file mode 100644
index 0000000..bb67981
--- /dev/null
+++ b/OpenSim/Framework/General/Types/NeighbourInfo.cs
@@ -0,0 +1,42 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Types
29{
30 public class NeighbourInfo
31 {
32 public NeighbourInfo()
33 {
34 }
35
36 public ulong regionhandle;
37 public uint RegionLocX;
38 public uint RegionLocY;
39 public string sim_ip;
40 public uint sim_port;
41 }
42}
diff --git a/OpenSim/Framework/General/Types/NetworkServersInfo.cs b/OpenSim/Framework/General/Types/NetworkServersInfo.cs
new file mode 100644
index 0000000..89ebf94
--- /dev/null
+++ b/OpenSim/Framework/General/Types/NetworkServersInfo.cs
@@ -0,0 +1,219 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 OpenSim.Framework.Console;
30using OpenSim.Framework.Interfaces;
31
32namespace OpenSim.Framework.Types
33{
34 public class NetworkServersInfo
35 {
36 public string AssetURL = "http://127.0.0.1:8003/";
37 public string AssetSendKey = "";
38
39 public string GridURL = "";
40 public string GridSendKey = "";
41 public string GridRecvKey = "";
42 public string UserURL = "";
43 public string UserSendKey = "";
44 public string UserRecvKey = "";
45 public bool isSandbox;
46
47 public uint DefaultHomeLocX = 0;
48 public uint DefaultHomeLocY = 0;
49
50 public int HttpListenerPort = 9000;
51 public int RemotingListenerPort = 8895;
52
53 public void InitConfig(bool sandboxMode, IGenericConfig configData)
54 {
55 this.isSandbox = sandboxMode;
56
57 try
58 {
59 string attri = "";
60
61 attri = "";
62 attri = configData.GetAttribute("HttpListenerPort");
63 if (attri == "")
64 {
65 string location = MainLog.Instance.CmdPrompt("Http Listener Port", "9000");
66 configData.SetAttribute("HttpListenerPort", location);
67 this.HttpListenerPort = Convert.ToInt32(location);
68 }
69 else
70 {
71 this.HttpListenerPort = Convert.ToInt32(attri);
72 }
73
74 attri = "";
75 attri = configData.GetAttribute("RemotingListenerPort");
76 if (attri == "")
77 {
78 string location = MainLog.Instance.CmdPrompt("Remoting Listener Port", "8895");
79 configData.SetAttribute("RemotingListenerPort", location);
80 this.RemotingListenerPort = Convert.ToInt32(location);
81 }
82 else
83 {
84 this.RemotingListenerPort = Convert.ToInt32(attri);
85 }
86
87 if (sandboxMode)
88 {
89 // default home location X
90 attri = "";
91 attri = configData.GetAttribute("DefaultLocationX");
92 if (attri == "")
93 {
94 string location = MainLog.Instance.CmdPrompt("Default Home Location X", "1000");
95 configData.SetAttribute("DefaultLocationX", location);
96 this.DefaultHomeLocX = (uint)Convert.ToUInt32(location);
97 }
98 else
99 {
100 this.DefaultHomeLocX = (uint)Convert.ToUInt32(attri);
101 }
102
103 // default home location Y
104 attri = "";
105 attri = configData.GetAttribute("DefaultLocationY");
106 if (attri == "")
107 {
108 string location = MainLog.Instance.CmdPrompt("Default Home Location Y", "1000");
109 configData.SetAttribute("DefaultLocationY", location);
110 this.DefaultHomeLocY = (uint)Convert.ToUInt32(location);
111 }
112 else
113 {
114 this.DefaultHomeLocY = (uint)Convert.ToUInt32(attri);
115 }
116 }
117 if (!isSandbox)
118 {
119 //Grid Server
120 attri = "";
121 attri = configData.GetAttribute("GridServerURL");
122 if (attri == "")
123 {
124 this.GridURL = MainLog.Instance.CmdPrompt("Grid server URL", "http://127.0.0.1:8001/");
125 configData.SetAttribute("GridServerURL", this.GridURL);
126 }
127 else
128 {
129 this.GridURL = attri;
130 }
131
132 //Grid Send Key
133 attri = "";
134 attri = configData.GetAttribute("GridSendKey");
135 if (attri == "")
136 {
137 this.GridSendKey = MainLog.Instance.CmdPrompt("Key to send to grid server", "null");
138 configData.SetAttribute("GridSendKey", this.GridSendKey);
139 }
140 else
141 {
142 this.GridSendKey = attri;
143 }
144
145 //Grid Receive Key
146 attri = "";
147 attri = configData.GetAttribute("GridRecvKey");
148 if (attri == "")
149 {
150 this.GridRecvKey = MainLog.Instance.CmdPrompt("Key to expect from grid server", "null");
151 configData.SetAttribute("GridRecvKey", this.GridRecvKey);
152 }
153 else
154 {
155 this.GridRecvKey = attri;
156 }
157
158 //Grid Server
159 attri = "";
160 attri = configData.GetAttribute("UserServerURL");
161 if (attri == "")
162 {
163 this.UserURL= MainLog.Instance.CmdPrompt("User server URL", "http://127.0.0.1:8002/");
164 configData.SetAttribute("UserServerURL", this.UserURL);
165 }
166 else
167 {
168 this.UserURL = attri;
169 }
170
171 //Grid Send Key
172 attri = "";
173 attri = configData.GetAttribute("UserSendKey");
174 if (attri == "")
175 {
176 this.UserSendKey = MainLog.Instance.CmdPrompt("Key to send to user server", "null");
177 configData.SetAttribute("UserSendKey", this.UserSendKey);
178 }
179 else
180 {
181 this.UserSendKey = attri;
182 }
183
184 //Grid Receive Key
185 attri = "";
186 attri = configData.GetAttribute("UserRecvKey");
187 if (attri == "")
188 {
189 this.UserRecvKey = MainLog.Instance.CmdPrompt("Key to expect from user server", "null");
190 configData.SetAttribute("GridRecvKey", this.UserRecvKey);
191 }
192 else
193 {
194 this.UserRecvKey = attri;
195 }
196
197 attri = "";
198 attri = configData.GetAttribute("AssetServerURL");
199 if (attri == "")
200 {
201 this.AssetURL = MainLog.Instance.CmdPrompt("Asset server URL", "http://127.0.0.1:8003/");
202 configData.SetAttribute("AssetServerURL", this.GridURL);
203 }
204 else
205 {
206 this.AssetURL = attri;
207 }
208
209 }
210 configData.Commit();
211 }
212 catch (Exception e)
213 {
214 MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured");
215 MainLog.Instance.Warn(e.ToString());
216 }
217 }
218 }
219}
diff --git a/OpenSim/Framework/General/Types/ParcelData.cs b/OpenSim/Framework/General/Types/ParcelData.cs
new file mode 100644
index 0000000..761d55e
--- /dev/null
+++ b/OpenSim/Framework/General/Types/ParcelData.cs
@@ -0,0 +1,112 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Framework.Types
31{
32
33 public class ParcelData
34 {
35 public byte[] parcelBitmapByteArray = new byte[512];
36 public string parcelName = "";
37 public string parcelDesc = "";
38 public LLUUID ownerID = new LLUUID();
39 public bool isGroupOwned = false;
40 public LLVector3 AABBMin = new LLVector3();
41 public LLVector3 AABBMax = new LLVector3();
42 public int area = 0;
43 public uint auctionID = 0; //Unemplemented. If set to 0, not being auctioned
44 public LLUUID authBuyerID = new LLUUID(); //Unemplemented. Authorized Buyer's UUID
45 public Parcel.ParcelCategory category = new Parcel.ParcelCategory(); //Unemplemented. Parcel's chosen category
46 public int claimDate = 0; //Unemplemented
47 public int claimPrice = 0; //Unemplemented
48 public LLUUID groupID = new LLUUID(); //Unemplemented
49 public int groupPrims = 0; //Unemplemented
50 public int salePrice = 0; //Unemeplemented. Parcels price.
51 public Parcel.ParcelStatus parcelStatus = Parcel.ParcelStatus.None;
52 public Parcel.ParcelFlags parcelFlags = Parcel.ParcelFlags.None;
53 public byte landingType = 0;
54 public byte mediaAutoScale = 0;
55 public LLUUID mediaID = LLUUID.Zero;
56 public int localID = 0;
57 public LLUUID globalID = new LLUUID();
58
59 public string mediaURL = "";
60 public string musicURL = "";
61 public float passHours = 0;
62 public int passPrice = 0;
63 public LLUUID snapshotID = LLUUID.Zero;
64 public LLVector3 userLocation = new LLVector3();
65 public LLVector3 userLookAt = new LLVector3();
66
67 public ParcelData()
68 {
69 globalID = LLUUID.Random();
70 }
71
72 public ParcelData Copy()
73 {
74 ParcelData parcelData = new ParcelData();
75
76 parcelData.AABBMax = this.AABBMax;
77 parcelData.AABBMin = this.AABBMin;
78 parcelData.area = this.area;
79 parcelData.auctionID = this.auctionID;
80 parcelData.authBuyerID = this.authBuyerID;
81 parcelData.category = this.category;
82 parcelData.claimDate = this.claimDate;
83 parcelData.claimPrice = this.claimPrice;
84 parcelData.globalID = this.globalID;
85 parcelData.groupID = this.groupID;
86 parcelData.groupPrims = this.groupPrims;
87 parcelData.isGroupOwned = this.isGroupOwned;
88 parcelData.localID = this.localID;
89 parcelData.landingType = this.landingType;
90 parcelData.mediaAutoScale = this.mediaAutoScale;
91 parcelData.mediaID = this.mediaID;
92 parcelData.mediaURL = this.mediaURL;
93 parcelData.musicURL = this.musicURL;
94 parcelData.ownerID = this.ownerID;
95 parcelData.parcelBitmapByteArray = (byte[])this.parcelBitmapByteArray.Clone();
96 parcelData.parcelDesc = this.parcelDesc;
97 parcelData.parcelFlags = this.parcelFlags;
98 parcelData.parcelName = this.parcelName;
99 parcelData.parcelStatus = this.parcelStatus;
100 parcelData.passHours = this.passHours;
101 parcelData.passPrice = this.passPrice;
102 parcelData.salePrice = this.salePrice;
103 parcelData.snapshotID = this.snapshotID;
104 parcelData.userLocation = this.userLocation;
105 parcelData.userLookAt = this.userLookAt;
106
107 return parcelData;
108
109 }
110 }
111
112}
diff --git a/OpenSim/Framework/General/Types/PrimData.cs b/OpenSim/Framework/General/Types/PrimData.cs
new file mode 100644
index 0000000..ff81bcd
--- /dev/null
+++ b/OpenSim/Framework/General/Types/PrimData.cs
@@ -0,0 +1,228 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
30
31namespace OpenSim.Framework.Types
32{
33 public class PrimData
34 {
35 private const uint FULL_MASK_PERMISSIONS = 2147483647;
36
37 public LLUUID OwnerID;
38 public byte PCode;
39 public ushort PathBegin;
40 public ushort PathEnd;
41 public byte PathScaleX;
42 public byte PathScaleY;
43 public byte PathShearX;
44 public byte PathShearY;
45 public sbyte PathSkew;
46 public ushort ProfileBegin;
47 public ushort ProfileEnd;
48 public LLVector3 Scale;
49 public byte PathCurve;
50 public byte ProfileCurve;
51 public uint ParentID = 0;
52 public ushort ProfileHollow;
53 public sbyte PathRadiusOffset;
54 public byte PathRevolutions;
55 public sbyte PathTaperX;
56 public sbyte PathTaperY;
57 public sbyte PathTwist;
58 public sbyte PathTwistBegin;
59 public byte[] TextureEntry; // a LL textureEntry in byte[] format
60
61 public Int32 CreationDate;
62 public uint OwnerMask = FULL_MASK_PERMISSIONS;
63 public uint NextOwnerMask = FULL_MASK_PERMISSIONS;
64 public uint GroupMask = FULL_MASK_PERMISSIONS;
65 public uint EveryoneMask = FULL_MASK_PERMISSIONS;
66 public uint BaseMask = FULL_MASK_PERMISSIONS;
67
68 //following only used during prim storage
69 public LLVector3 Position;
70 public LLQuaternion Rotation = new LLQuaternion(0, 1, 0, 0);
71 public uint LocalID;
72 public LLUUID FullID;
73
74 public PrimData()
75 {
76
77 }
78
79 public PrimData(byte[] data)
80 {
81 int i = 0;
82
83 this.OwnerID = new LLUUID(data, i); i += 16;
84 this.PCode = data[i++];
85 this.PathBegin = (ushort)(data[i++] + (data[i++] << 8));
86 this.PathEnd = (ushort)(data[i++] + (data[i++] << 8));
87 this.PathScaleX = data[i++];
88 this.PathScaleY = data[i++];
89 this.PathShearX = data[i++];
90 this.PathShearY = data[i++];
91 this.PathSkew = (sbyte)data[i++];
92 this.ProfileBegin = (ushort)(data[i++] + (data[i++] << 8));
93 this.ProfileEnd = (ushort)(data[i++] + (data[i++] << 8));
94 this.Scale = new LLVector3(data, i); i += 12;
95 this.PathCurve = data[i++];
96 this.ProfileCurve = data[i++];
97 this.ParentID = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
98 this.ProfileHollow = (ushort)(data[i++] + (data[i++] << 8));
99 this.PathRadiusOffset = (sbyte)data[i++];
100 this.PathRevolutions = data[i++];
101 this.PathTaperX = (sbyte)data[i++];
102 this.PathTaperY = (sbyte)data[i++];
103 this.PathTwist = (sbyte)data[i++];
104 this.PathTwistBegin = (sbyte)data[i++];
105 ushort length = (ushort)(data[i++] + (data[i++] << 8));
106 this.TextureEntry = new byte[length];
107 Array.Copy(data, i, TextureEntry, 0, length); i += length;
108 this.CreationDate = (Int32)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
109 this.OwnerMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
110 this.NextOwnerMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
111 this.GroupMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
112 this.EveryoneMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
113 this.BaseMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
114 this.Position = new LLVector3(data, i); i += 12;
115 this.Rotation = new LLQuaternion(data, i, true); i += 12;
116 this.LocalID = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));
117 this.FullID = new LLUUID(data, i); i += 16;
118
119 }
120
121 public byte[] ToBytes()
122 {
123 int i = 0;
124 byte[] bytes = new byte[126 + TextureEntry.Length];
125 Array.Copy(OwnerID.GetBytes(), 0, bytes, i, 16); i += 16;
126 bytes[i++] = this.PCode;
127 bytes[i++] = (byte)(this.PathBegin % 256);
128 bytes[i++] = (byte)((this.PathBegin >> 8) % 256);
129 bytes[i++] = (byte)(this.PathEnd % 256);
130 bytes[i++] = (byte)((this.PathEnd >> 8) % 256);
131 bytes[i++] = this.PathScaleX;
132 bytes[i++] = this.PathScaleY;
133 bytes[i++] = this.PathShearX;
134 bytes[i++] = this.PathShearY;
135 bytes[i++] = (byte)this.PathSkew;
136 bytes[i++] = (byte)(this.ProfileBegin % 256);
137 bytes[i++] = (byte)((this.ProfileBegin >> 8) % 256);
138 bytes[i++] = (byte)(this.ProfileEnd % 256);
139 bytes[i++] = (byte)((this.ProfileEnd >> 8) % 256);
140 Array.Copy(Scale.GetBytes(), 0, bytes, i, 12); i += 12;
141 bytes[i++] = this.PathCurve;
142 bytes[i++] = this.ProfileCurve;
143 bytes[i++] = (byte)(ParentID % 256);
144 bytes[i++] = (byte)((ParentID >> 8) % 256);
145 bytes[i++] = (byte)((ParentID >> 16) % 256);
146 bytes[i++] = (byte)((ParentID >> 24) % 256);
147 bytes[i++] = (byte)(this.ProfileHollow % 256);
148 bytes[i++] = (byte)((this.ProfileHollow >> 8) % 256);
149 bytes[i++] = ((byte)this.PathRadiusOffset);
150 bytes[i++] = this.PathRevolutions;
151 bytes[i++] = ((byte)this.PathTaperX);
152 bytes[i++] = ((byte)this.PathTaperY);
153 bytes[i++] = ((byte)this.PathTwist);
154 bytes[i++] = ((byte)this.PathTwistBegin);
155 bytes[i++] = (byte)(TextureEntry.Length % 256);
156 bytes[i++] = (byte)((TextureEntry.Length >> 8) % 256);
157 Array.Copy(TextureEntry, 0, bytes, i, TextureEntry.Length); i += TextureEntry.Length;
158 bytes[i++] = (byte)(this.CreationDate % 256);
159 bytes[i++] = (byte)((this.CreationDate >> 8) % 256);
160 bytes[i++] = (byte)((this.CreationDate >> 16) % 256);
161 bytes[i++] = (byte)((this.CreationDate >> 24) % 256);
162 bytes[i++] = (byte)(this.OwnerMask % 256);
163 bytes[i++] = (byte)((this.OwnerMask >> 8) % 256);
164 bytes[i++] = (byte)((this.OwnerMask >> 16) % 256);
165 bytes[i++] = (byte)((this.OwnerMask >> 24) % 256);
166 bytes[i++] = (byte)(this.NextOwnerMask % 256);
167 bytes[i++] = (byte)((this.NextOwnerMask >> 8) % 256);
168 bytes[i++] = (byte)((this.NextOwnerMask >> 16) % 256);
169 bytes[i++] = (byte)((this.NextOwnerMask >> 24) % 256);
170 bytes[i++] = (byte)(this.GroupMask % 256);
171 bytes[i++] = (byte)((this.GroupMask >> 8) % 256);
172 bytes[i++] = (byte)((this.GroupMask >> 16) % 256);
173 bytes[i++] = (byte)((this.GroupMask >> 24) % 256);
174 bytes[i++] = (byte)(this.EveryoneMask % 256);
175 bytes[i++] = (byte)((this.EveryoneMask >> 8) % 256);
176 bytes[i++] = (byte)((this.EveryoneMask >> 16) % 256);
177 bytes[i++] = (byte)((this.EveryoneMask >> 24) % 256);
178 bytes[i++] = (byte)(this.BaseMask % 256);
179 bytes[i++] = (byte)((this.BaseMask >> 8) % 256);
180 bytes[i++] = (byte)((this.BaseMask >> 16) % 256);
181 bytes[i++] = (byte)((this.BaseMask >> 24) % 256);
182 Array.Copy(this.Position.GetBytes(), 0, bytes, i, 12); i += 12;
183 if (this.Rotation == new LLQuaternion(0, 0, 0, 0))
184 {
185 this.Rotation = new LLQuaternion(0, 1, 0, 0);
186 }
187 Array.Copy(this.Rotation.GetBytes(), 0, bytes, i, 12); i += 12;
188 bytes[i++] = (byte)(this.LocalID % 256);
189 bytes[i++] = (byte)((this.LocalID >> 8) % 256);
190 bytes[i++] = (byte)((this.LocalID >> 16) % 256);
191 bytes[i++] = (byte)((this.LocalID >> 24) % 256);
192 Array.Copy(FullID.GetBytes(), 0, bytes, i, 16); i += 16;
193
194 return bytes;
195 }
196
197 public static PrimData DefaultCube()
198 {
199 PrimData primData = new PrimData();
200 primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
201 primData.FullID = LLUUID.Random();
202 primData.Scale = new LLVector3(0.5f, 0.5f, 0.5f);
203 primData.Rotation = new LLQuaternion(0, 0, 0, 1);
204 primData.PCode = 9;
205 primData.ParentID = 0;
206 primData.PathBegin = 0;
207 primData.PathEnd = 0;
208 primData.PathScaleX = 0;
209 primData.PathScaleY = 0;
210 primData.PathShearX = 0;
211 primData.PathShearY = 0;
212 primData.PathSkew = 0;
213 primData.ProfileBegin = 0;
214 primData.ProfileEnd = 0;
215 primData.PathCurve = 16;
216 primData.ProfileCurve = 1;
217 primData.ProfileHollow = 0;
218 primData.PathRadiusOffset = 0;
219 primData.PathRevolutions = 0;
220 primData.PathTaperX = 0;
221 primData.PathTaperY = 0;
222 primData.PathTwist = 0;
223 primData.PathTwistBegin = 0;
224
225 return primData;
226 }
227 }
228}
diff --git a/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
new file mode 100644
index 0000000..a6671d1
--- /dev/null
+++ b/OpenSim/Framework/General/Types/PrimitiveBaseShape.cs
@@ -0,0 +1,102 @@
1using libsecondlife;
2
3namespace OpenSim.Framework.Types
4{
5 public enum ShapeType
6 {
7 Box,
8 Sphere,
9 Ring,
10 Tube,
11 Torus,
12 Prism,
13 Scuplted,
14 Cylinder,
15 Foliage,
16 Unknown
17 }
18
19 public class PrimitiveBaseShape
20 {
21 private ShapeType type = ShapeType.Unknown;
22
23 public byte PCode;
24 public ushort PathBegin;
25 public ushort PathEnd;
26 public byte PathScaleX;
27 public byte PathScaleY;
28 public byte PathShearX;
29 public byte PathShearY;
30 public sbyte PathSkew;
31 public ushort ProfileBegin;
32 public ushort ProfileEnd;
33 public LLVector3 Scale;
34 public byte PathCurve;
35 public byte ProfileCurve;
36 public ushort ProfileHollow;
37 public sbyte PathRadiusOffset;
38 public byte PathRevolutions;
39 public sbyte PathTaperX;
40 public sbyte PathTaperY;
41 public sbyte PathTwist;
42 public sbyte PathTwistBegin;
43 public byte[] TextureEntry; // a LL textureEntry in byte[] format
44
45 public ShapeType PrimType
46 {
47 get
48 {
49 return this.type;
50 }
51 }
52
53 public LLVector3 PrimScale
54 {
55 get
56 {
57 return this.Scale;
58 }
59 }
60
61 public PrimitiveBaseShape()
62 {
63
64 }
65
66 //void returns need to change of course
67 public void GetMesh()
68 {
69
70 }
71
72 public static PrimitiveBaseShape DefaultBox()
73 {
74 PrimitiveBaseShape primShape = new PrimitiveBaseShape();
75
76 primShape.type = ShapeType.Box;
77 primShape.Scale = new LLVector3(0.5f, 0.5f, 0.5f);
78 primShape.PCode = 9;
79 primShape.PathBegin = 0;
80 primShape.PathEnd = 0;
81 primShape.PathScaleX = 0;
82 primShape.PathScaleY = 0;
83 primShape.PathShearX = 0;
84 primShape.PathShearY = 0;
85 primShape.PathSkew = 0;
86 primShape.ProfileBegin = 0;
87 primShape.ProfileEnd = 0;
88 primShape.PathCurve = 16;
89 primShape.ProfileCurve = 1;
90 primShape.ProfileHollow = 0;
91 primShape.PathRadiusOffset = 0;
92 primShape.PathRevolutions = 0;
93 primShape.PathTaperX = 0;
94 primShape.PathTaperY = 0;
95 primShape.PathTwist = 0;
96 primShape.PathTwistBegin = 0;
97
98 return primShape;
99 }
100 }
101
102}
diff --git a/OpenSim/Framework/General/Types/RegionHandle.cs b/OpenSim/Framework/General/Types/RegionHandle.cs
new file mode 100644
index 0000000..4a055ad
--- /dev/null
+++ b/OpenSim/Framework/General/Types/RegionHandle.cs
@@ -0,0 +1,121 @@
1using System;
2using System.Net;
3
4namespace OpenSim.Framework.Types
5{
6 /// <summary>
7 /// A class for manipulating RegionHandle coordinates
8 /// </summary>
9 class RegionHandle
10 {
11 private UInt64 handle;
12
13 /// <summary>
14 /// Initialises a new grid-aware RegionHandle
15 /// </summary>
16 /// <param name="ip">IP Address of the Grid Server for this region</param>
17 /// <param name="x">Grid X Coordinate</param>
18 /// <param name="y">Grid Y Coordinate</param>
19 public RegionHandle(string ip, short x, short y)
20 {
21 IPAddress addr = IPAddress.Parse(ip);
22
23 if (addr.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork)
24 throw new Exception("Bad RegionHandle Parameter - must be an IPv4 address");
25
26 uint baseHandle = BitConverter.ToUInt32(addr.GetAddressBytes(), 0);
27
28 // Split the IP address in half
29 short a = (short)((baseHandle << 16) & 0xFFFF);
30 short b = (short)((baseHandle << 0) & 0xFFFF);
31
32 // Raise the bounds a little
33 uint nx = (uint)x;
34 uint ny = (uint)y;
35
36 // Multiply grid coords to get region coords
37 nx *= 256;
38 ny *= 256;
39
40 // Stuff the IP address in too
41 nx = (uint)a << 16;
42 ny = (uint)b << 16;
43
44 handle = ((UInt64)nx << 32) | (uint)ny;
45 }
46
47 /// <summary>
48 /// Initialises a new RegionHandle that is not inter-grid aware
49 /// </summary>
50 /// <param name="x">Grid X Coordinate</param>
51 /// <param name="y">Grid Y Coordinate</param>
52 public RegionHandle(uint x, uint y)
53 {
54 handle = ((x * 256) << 32) | (y * 256);
55 }
56
57 /// <summary>
58 /// Initialises a new RegionHandle from an existing value
59 /// </summary>
60 /// <param name="Region">A U64 RegionHandle</param>
61 public RegionHandle(UInt64 Region)
62 {
63 handle = Region;
64 }
65
66 /// <summary>
67 /// Returns the Grid Masked RegionHandle - For use in Teleport packets and other packets where sending the grid IP address may be handy.
68 /// </summary>
69 /// <remarks>Do not use for SimulatorEnable packets. The client will choke.</remarks>
70 /// <returns>Region Handle including IP Address encoding</returns>
71 public UInt64 getTeleportHandle()
72 {
73 return handle;
74 }
75
76 /// <summary>
77 /// Returns a RegionHandle which may be used for SimulatorEnable packets. Removes the IP address encoding and returns the lower bounds.
78 /// </summary>
79 /// <returns>A U64 RegionHandle for use in SimulatorEnable packets.</returns>
80 public UInt64 getNeighbourHandle()
81 {
82 UInt64 mask = 0x0000FFFF0000FFFF;
83
84 return handle | mask;
85 }
86
87 /// <summary>
88 /// Returns the IP Address of the GridServer from a Grid-Encoded RegionHandle
89 /// </summary>
90 /// <returns>Grid Server IP Address</returns>
91 public IPAddress getGridIP()
92 {
93 uint a = (uint)((handle >> 16) & 0xFFFF);
94 uint b = (uint)((handle >> 48) & 0xFFFF);
95
96 return new IPAddress((long)(a << 16) | (long)b);
97 }
98
99 /// <summary>
100 /// Returns the X Coordinate from a Grid-Encoded RegionHandle
101 /// </summary>
102 /// <returns>X Coordinate</returns>
103 public uint getGridX()
104 {
105 uint x = (uint)((handle >> 32) & 0xFFFF);
106
107 return x;
108 }
109
110 /// <summary>
111 /// Returns the Y Coordinate from a Grid-Encoded RegionHandle
112 /// </summary>
113 /// <returns>Y Coordinate</returns>
114 public uint getGridY()
115 {
116 uint y = (uint)((handle >> 0) & 0xFFFF);
117
118 return y;
119 }
120 }
121}
diff --git a/OpenSim/Framework/General/Types/RegionInfo.cs b/OpenSim/Framework/General/Types/RegionInfo.cs
new file mode 100644
index 0000000..cfc0925
--- /dev/null
+++ b/OpenSim/Framework/General/Types/RegionInfo.cs
@@ -0,0 +1,342 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Globalization;
30using System.Net;
31using System.Net.Sockets;
32using libsecondlife;
33using OpenSim.Framework.Console;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Utilities;
36
37namespace OpenSim.Framework.Types
38{
39 public class RegionInfo
40 {
41 public LLUUID SimUUID = new LLUUID();
42 public string RegionName = "";
43
44 private IPEndPoint m_internalEndPoint;
45 public IPEndPoint InternalEndPoint
46 {
47 get
48 {
49 return m_internalEndPoint;
50 }
51 }
52
53 public IPEndPoint ExternalEndPoint
54 {
55 get
56 {
57 // Old one defaults to IPv6
58 //return new IPEndPoint( Dns.GetHostAddresses( m_externalHostName )[0], m_internalEndPoint.Port );
59
60 // New method favors IPv4
61 IPAddress ia = null;
62 foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName))
63 {
64 if (ia == null)
65 ia = Adr;
66
67 if (Adr.AddressFamily == AddressFamily.InterNetwork)
68 {
69 ia = Adr;
70 break;
71 }
72
73 }
74
75 return new IPEndPoint(ia, m_internalEndPoint.Port);
76 }
77 }
78
79 private string m_externalHostName;
80 public string ExternalHostName
81 {
82 get
83 {
84 return m_externalHostName;
85 }
86 }
87
88 private uint? m_regionLocX;
89 public uint RegionLocX
90 {
91 get
92 {
93 return m_regionLocX.Value;
94 }
95 }
96
97 private uint? m_regionLocY;
98 public uint RegionLocY
99 {
100 get
101 {
102 return m_regionLocY.Value;
103 }
104 }
105
106 private ulong? m_regionHandle;
107 public ulong RegionHandle
108 {
109 get
110 {
111 if (!m_regionHandle.HasValue)
112 {
113 m_regionHandle = Util.UIntsToLong((RegionLocX * 256), (RegionLocY * 256));
114 }
115
116 return m_regionHandle.Value;
117 }
118 }
119
120 // Only used for remote regions , ie ones not in the current instance
121 private uint m_remotingPort;
122 public uint RemotingPort
123 {
124 get
125 {
126 return m_remotingPort;
127 }
128 set
129 {
130 m_remotingPort = value;
131 }
132 }
133 public string RemotingAddress;
134
135 public string DataStore = "";
136 public bool isSandbox = false;
137
138 public LLUUID MasterAvatarAssignedUUID = new LLUUID();
139 public string MasterAvatarFirstName = "";
140 public string MasterAvatarLastName = "";
141 public string MasterAvatarSandboxPassword = "";
142
143 public EstateSettings estateSettings;
144
145 public RegionInfo()
146 {
147 estateSettings = new EstateSettings();
148 }
149
150 public RegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri)
151 : this()
152 {
153 m_regionLocX = regionLocX;
154 m_regionLocY = regionLocY;
155
156 m_internalEndPoint = internalEndPoint;
157 m_externalHostName = externalUri;
158 }
159
160 public void InitConfig(bool sandboxMode, IGenericConfig configData)
161 {
162 this.isSandbox = sandboxMode;
163 try
164 {
165 string attri = "";
166
167 // Sim UUID
168 string simId = configData.GetAttribute("SimUUID");
169 if (String.IsNullOrEmpty( simId ))
170 {
171 this.SimUUID = LLUUID.Random();
172 }
173 else
174 {
175 this.SimUUID = new LLUUID(simId);
176 }
177 configData.SetAttribute("SimUUID", this.SimUUID.ToString());
178
179 this.RegionName = GetString(configData, "SimName", "OpenSim test", "Region Name");
180
181 //m_regionLocX = (uint) GetInt(configData, "SimLocationX", 1000, "Grid Location X");
182
183 attri = "";
184 attri = configData.GetAttribute("SimLocationX");
185 if (attri == "")
186 {
187 string location = MainLog.Instance.CmdPrompt("Grid Location X", "1000");
188 configData.SetAttribute("SimLocationX", location);
189 m_regionLocX = (uint)Convert.ToUInt32(location);
190 }
191 else
192 {
193 m_regionLocX = (uint)Convert.ToUInt32(attri);
194 }
195 // Sim/Grid location Y
196 attri = "";
197 attri = configData.GetAttribute("SimLocationY");
198 if (attri == "")
199 {
200 string location = MainLog.Instance.CmdPrompt("Grid Location Y", "1000");
201 configData.SetAttribute("SimLocationY", location);
202 m_regionLocY = (uint)Convert.ToUInt32(location);
203 }
204 else
205 {
206 m_regionLocY = (uint)Convert.ToUInt32(attri);
207 }
208
209 m_regionHandle = null;
210
211 this.DataStore = GetString(configData, "Datastore", "localworld.yap", "Filename for local storage");
212
213 IPAddress internalAddress = GetIPAddress(configData, "InternalIPAddress", "0.0.0.0", "Internal IP Address for UDP client connections");
214 int internalPort = GetIPPort(configData, "InternalIPPort", "9000", "Internal IP Port for UDP client connections");
215 m_internalEndPoint = new IPEndPoint(internalAddress, internalPort);
216
217 m_externalHostName = GetString(configData, "ExternalHostName", "127.0.0.1", "External Host Name");
218
219 estateSettings.terrainFile =
220 GetString(configData, "TerrainFile", "default.r32", "GENERAL SETTING: Default Terrain File");
221
222 attri = "";
223 attri = configData.GetAttribute("TerrainMultiplier");
224 if (attri == "")
225 {
226 string re = MainLog.Instance.CmdPrompt("GENERAL SETTING: Terrain Height Multiplier", "60.0");
227 this.estateSettings.terrainMultiplier = Convert.ToDouble(re, CultureInfo.InvariantCulture);
228 configData.SetAttribute("TerrainMultiplier", this.estateSettings.terrainMultiplier.ToString());
229 }
230 else
231 {
232 this.estateSettings.terrainMultiplier = Convert.ToDouble(attri);
233 }
234
235 attri = "";
236 attri = configData.GetAttribute("MasterAvatarFirstName");
237 if (attri == "")
238 {
239 this.MasterAvatarFirstName = MainLog.Instance.CmdPrompt("First name of Master Avatar (Land and Region Owner)", "Test");
240
241 configData.SetAttribute("MasterAvatarFirstName", this.MasterAvatarFirstName);
242 }
243 else
244 {
245 this.MasterAvatarFirstName = attri;
246 }
247
248 attri = "";
249 attri = configData.GetAttribute("MasterAvatarLastName");
250 if (attri == "")
251 {
252 this.MasterAvatarLastName = MainLog.Instance.CmdPrompt("Last name of Master Avatar (Land and Region Owner)", "User");
253
254 configData.SetAttribute("MasterAvatarLastName", this.MasterAvatarLastName);
255 }
256 else
257 {
258 this.MasterAvatarLastName = attri;
259 }
260
261 if (isSandbox) //Sandbox Mode Specific Settings
262 {
263 attri = "";
264 attri = configData.GetAttribute("MasterAvatarSandboxPassword");
265 if (attri == "")
266 {
267 this.MasterAvatarSandboxPassword = MainLog.Instance.CmdPrompt("Password of Master Avatar (Needed for sandbox mode account creation only)", "test");
268
269 //Should I store this?
270 configData.SetAttribute("MasterAvatarSandboxPassword", this.MasterAvatarSandboxPassword);
271 }
272 else
273 {
274 this.MasterAvatarSandboxPassword = attri;
275 }
276 }
277
278 configData.Commit();
279 }
280 catch (Exception e)
281 {
282 MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured");
283 MainLog.Instance.Warn(e.ToString());
284 }
285
286 MainLog.Instance.Verbose("Sim settings loaded:");
287 MainLog.Instance.Verbose("UUID: " + this.SimUUID.ToStringHyphenated());
288 MainLog.Instance.Verbose("Name: " + this.RegionName);
289 MainLog.Instance.Verbose("Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]");
290 MainLog.Instance.Verbose("Region Handle: " + this.RegionHandle.ToString());
291 MainLog.Instance.Verbose("Listening on IP end point: " + m_internalEndPoint.ToString() );
292 MainLog.Instance.Verbose("Sandbox Mode? " + isSandbox.ToString());
293
294 }
295
296 private uint GetInt(IGenericConfig configData, string p, int p_3, string p_4)
297 {
298 throw new Exception("The method or operation is not implemented.");
299 }
300
301 private string GetString(IGenericConfig configData, string attrName, string defaultvalue, string prompt)
302 {
303 string s = configData.GetAttribute(attrName);
304
305 if (String.IsNullOrEmpty( s ))
306 {
307 s = MainLog.Instance.CmdPrompt(prompt, defaultvalue);
308 configData.SetAttribute(attrName, s );
309 }
310 return s;
311 }
312
313 private IPAddress GetIPAddress(IGenericConfig configData, string attrName, string defaultvalue, string prompt)
314 {
315 string addressStr = configData.GetAttribute(attrName);
316
317 IPAddress address;
318
319 if (!IPAddress.TryParse(addressStr, out address))
320 {
321 address = MainLog.Instance.CmdPromptIPAddress(prompt, defaultvalue);
322 configData.SetAttribute(attrName, address.ToString());
323 }
324 return address;
325 }
326
327 private int GetIPPort(IGenericConfig configData, string attrName, string defaultvalue, string prompt)
328 {
329 string portStr = configData.GetAttribute(attrName);
330
331 int port;
332
333 if (!int.TryParse(portStr, out port))
334 {
335 port = MainLog.Instance.CmdPromptIPPort(prompt, defaultvalue);
336 configData.SetAttribute(attrName, port.ToString());
337 }
338
339 return port;
340 }
341 }
342}
diff --git a/OpenSim/Framework/General/Types/UUID.cs b/OpenSim/Framework/General/Types/UUID.cs
new file mode 100644
index 0000000..9cde18e
--- /dev/null
+++ b/OpenSim/Framework/General/Types/UUID.cs
@@ -0,0 +1,127 @@
1using System;
2using libsecondlife;
3
4namespace OpenSim.Framework.Types
5{
6 class UUID
7 {
8 public LLUUID llUUID;
9
10 public UUID(string uuid)
11 {
12 llUUID = new LLUUID(uuid);
13 }
14
15 public UUID(byte[] uuid)
16 {
17 llUUID = new LLUUID(uuid, 0);
18 }
19
20 public UUID(byte[] uuid, int offset)
21 {
22 llUUID = new LLUUID(uuid, offset);
23 }
24
25 public UUID()
26 {
27 llUUID = LLUUID.Zero;
28 }
29
30 public UUID(ulong uuid)
31 {
32 llUUID = new LLUUID(uuid);
33 }
34
35 public UUID(UInt32 first, UInt32 second, UInt32 third, UInt32 fourth)
36 {
37 byte[] uuid = new byte[16];
38
39 byte[] n = BitConverter.GetBytes(first);
40 n.CopyTo(uuid, 0);
41 n = BitConverter.GetBytes(second);
42 n.CopyTo(uuid, 4);
43 n = BitConverter.GetBytes(third);
44 n.CopyTo(uuid, 8);
45 n = BitConverter.GetBytes(fourth);
46 n.CopyTo(uuid, 12);
47
48 llUUID = new LLUUID(uuid,0);
49 }
50
51 public override string ToString()
52 {
53 return llUUID.ToString();
54 }
55
56 public string ToStringHyphenated()
57 {
58 return llUUID.ToStringHyphenated();
59 }
60
61 public byte[] GetBytes()
62 {
63 return llUUID.GetBytes();
64 }
65
66 public UInt32[] GetInts()
67 {
68 UInt32[] ints = new UInt32[4];
69 ints[0] = BitConverter.ToUInt32(llUUID.Data, 0);
70 ints[1] = BitConverter.ToUInt32(llUUID.Data, 4);
71 ints[2] = BitConverter.ToUInt32(llUUID.Data, 8);
72 ints[3] = BitConverter.ToUInt32(llUUID.Data, 12);
73
74 return ints;
75 }
76
77 public LLUUID GetLLUUID()
78 {
79 return llUUID;
80 }
81
82 public uint CRC()
83 {
84 return llUUID.CRC();
85 }
86
87 public override int GetHashCode()
88 {
89 return llUUID.GetHashCode();
90 }
91
92 public void Combine(UUID other)
93 {
94 llUUID.Combine(other.GetLLUUID());
95 }
96
97 public void Combine(LLUUID other)
98 {
99 llUUID.Combine(other);
100 }
101
102 public override bool Equals(Object other)
103 {
104 return llUUID.Equals(other);
105 }
106
107 public static bool operator ==(UUID a, UUID b)
108 {
109 return a.llUUID.Equals(b.GetLLUUID());
110 }
111
112 public static bool operator !=(UUID a, UUID b)
113 {
114 return !a.llUUID.Equals(b.GetLLUUID());
115 }
116
117 public static bool operator ==(UUID a, LLUUID b)
118 {
119 return a.Equals(b);
120 }
121
122 public static bool operator !=(UUID a, LLUUID b)
123 {
124 return !a.Equals(b);
125 }
126 }
127}
diff --git a/OpenSim/Framework/General/UserProfile.cs b/OpenSim/Framework/General/UserProfile.cs
new file mode 100644
index 0000000..243208a
--- /dev/null
+++ b/OpenSim/Framework/General/UserProfile.cs
@@ -0,0 +1,87 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using System.Security.Cryptography;
30using libsecondlife;
31using OpenSim.Framework.Inventory;
32
33namespace OpenSim.Framework.User
34{
35 public class UserProfile
36 {
37
38 public string firstname;
39 public string lastname;
40 public ulong homeregionhandle;
41 public LLVector3 homepos;
42 public LLVector3 homelookat;
43
44 public bool IsGridGod = false;
45 public bool IsLocal = true; // will be used in future for visitors from foreign grids
46 public string AssetURL;
47 public string MD5passwd;
48
49 public LLUUID CurrentSessionID;
50 public LLUUID CurrentSecureSessionID;
51 public LLUUID UUID;
52 public Dictionary<LLUUID, uint> Circuits = new Dictionary<LLUUID, uint>(); // tracks circuit codes
53
54 public AgentInventory Inventory;
55
56 public UserProfile()
57 {
58 Circuits = new Dictionary<LLUUID, uint>();
59 Inventory = new AgentInventory();
60 homeregionhandle = Helpers.UIntsToLong((1000 * 256), (1000 * 256));
61 homepos = new LLVector3();
62 homelookat = new LLVector3();
63 }
64
65 public void InitSessionData()
66 {
67 RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();
68
69 byte[] randDataS = new byte[16];
70 byte[] randDataSS = new byte[16];
71
72 rand.GetBytes(randDataS);
73 rand.GetBytes(randDataSS);
74
75 CurrentSecureSessionID = new LLUUID(randDataSS,0);
76 CurrentSessionID = new LLUUID(randDataS,0);
77
78 }
79
80 public void AddSimCircuit(uint circuitCode, LLUUID regionUUID)
81 {
82 if (this.Circuits.ContainsKey(regionUUID) == false)
83 this.Circuits.Add(regionUUID, circuitCode);
84 }
85
86 }
87}
diff --git a/OpenSim/Framework/General/Util.cs b/OpenSim/Framework/General/Util.cs
new file mode 100644
index 0000000..13e3af2
--- /dev/null
+++ b/OpenSim/Framework/General/Util.cs
@@ -0,0 +1,184 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Security.Cryptography;
30using System.Text;
31using libsecondlife;
32
33namespace OpenSim.Framework.Utilities
34{
35 public class Util
36 {
37 private static Random randomClass = new Random();
38 private static uint nextXferID = 5000;
39 private static object XferLock = new object();
40
41 public static ulong UIntsToLong(uint X, uint Y)
42 {
43 return Helpers.UIntsToLong(X, Y);
44 }
45
46 public static Random RandomClass
47 {
48 get
49 {
50 return randomClass;
51 }
52 }
53
54 public static uint GetNextXferID()
55 {
56 uint id = 0;
57 lock(XferLock)
58 {
59 id = nextXferID;
60 nextXferID++;
61 }
62 return id;
63 }
64
65 public static int UnixTimeSinceEpoch()
66 {
67 TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
68 int timestamp = (int)t.TotalSeconds;
69 return timestamp;
70 }
71
72 public static string Md5Hash(string pass)
73 {
74 MD5 md5 = MD5CryptoServiceProvider.Create();
75 byte[] dataMd5 = md5.ComputeHash(Encoding.Default.GetBytes(pass));
76 StringBuilder sb = new StringBuilder();
77 for (int i = 0; i < dataMd5.Length; i++)
78 sb.AppendFormat("{0:x2}", dataMd5[i]);
79 return sb.ToString();
80 }
81
82 public static string GetRandomCapsPath()
83 {
84 LLUUID caps = LLUUID.Random();
85 string capsPath = caps.ToStringHyphenated();
86 capsPath = capsPath.Remove(capsPath.Length - 4, 4);
87 return capsPath;
88 }
89
90 //public static int fast_distance2d(int x, int y)
91 //{
92 // x = System.Math.Abs(x);
93 // y = System.Math.Abs(y);
94
95 // int min = System.Math.Min(x, y);
96
97 // return (x + y - (min >> 1) - (min >> 2) + (min >> 4));
98 //}
99
100 public static string FieldToString(byte[] bytes)
101 {
102 return FieldToString(bytes, String.Empty);
103 }
104
105 /// <summary>
106 /// Convert a variable length field (byte array) to a string, with a
107 /// field name prepended to each line of the output
108 /// </summary>
109 /// <remarks>If the byte array has unprintable characters in it, a
110 /// hex dump will be put in the string instead</remarks>
111 /// <param name="bytes">The byte array to convert to a string</param>
112 /// <param name="fieldName">A field name to prepend to each line of output</param>
113 /// <returns>An ASCII string or a string containing a hex dump, minus
114 /// the null terminator</returns>
115 public static string FieldToString(byte[] bytes, string fieldName)
116 {
117 // Check for a common case
118 if (bytes.Length == 0) return String.Empty;
119
120 StringBuilder output = new StringBuilder();
121 bool printable = true;
122
123 for (int i = 0; i < bytes.Length; ++i)
124 {
125 // Check if there are any unprintable characters in the array
126 if ((bytes[i] < 0x20 || bytes[i] > 0x7E) && bytes[i] != 0x09
127 && bytes[i] != 0x0D && bytes[i] != 0x0A && bytes[i] != 0x00)
128 {
129 printable = false;
130 break;
131 }
132 }
133
134 if (printable)
135 {
136 if (fieldName.Length > 0)
137 {
138 output.Append(fieldName);
139 output.Append(": ");
140 }
141
142 if (bytes[bytes.Length - 1] == 0x00)
143 output.Append(UTF8Encoding.UTF8.GetString(bytes, 0, bytes.Length - 1));
144 else
145 output.Append(UTF8Encoding.UTF8.GetString(bytes));
146 }
147 else
148 {
149 for (int i = 0; i < bytes.Length; i += 16)
150 {
151 if (i != 0)
152 output.Append(Environment.NewLine);
153 if (fieldName.Length > 0)
154 {
155 output.Append(fieldName);
156 output.Append(": ");
157 }
158
159 for (int j = 0; j < 16; j++)
160 {
161 if ((i + j) < bytes.Length)
162 output.Append(String.Format("{0:X2} ", bytes[i + j]));
163 else
164 output.Append(" ");
165 }
166
167 for (int j = 0; j < 16 && (i + j) < bytes.Length; j++)
168 {
169 if (bytes[i + j] >= 0x20 && bytes[i + j] < 0x7E)
170 output.Append((char)bytes[i + j]);
171 else
172 output.Append(".");
173 }
174 }
175 }
176
177 return output.ToString();
178 }
179 public Util()
180 {
181
182 }
183 }
184}
diff --git a/OpenSim/Framework/GenericConfig/Xml/Properties/AssemblyInfo.cs b/OpenSim/Framework/GenericConfig/Xml/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..fcffd67
--- /dev/null
+++ b/OpenSim/Framework/GenericConfig/Xml/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.GenericConfig")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.GenericConfig")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("285a3047-f165-46c8-8767-b51428738a09")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Framework/GenericConfig/Xml/XmlConfig.cs b/OpenSim/Framework/GenericConfig/Xml/XmlConfig.cs
new file mode 100644
index 0000000..7fa085d
--- /dev/null
+++ b/OpenSim/Framework/GenericConfig/Xml/XmlConfig.cs
@@ -0,0 +1,122 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.IO;
30using System.Xml;
31using OpenSim.Framework.Interfaces;
32
33namespace OpenSim.GenericConfig
34{
35 public class XmlConfig : IGenericConfig
36 {
37 private XmlDocument doc;
38 private XmlNode rootNode;
39 private XmlNode configNode;
40 private string fileName;
41 private bool createdFile = false;
42
43 public XmlConfig(string filename)
44 {
45 fileName = filename;
46 }
47
48 public void LoadData()
49 {
50 doc = new XmlDocument();
51
52 if (File.Exists(fileName))
53 {
54 XmlTextReader reader = new XmlTextReader(fileName);
55 reader.WhitespaceHandling = WhitespaceHandling.None;
56 doc.Load(reader);
57 reader.Close();
58 }
59 else
60 {
61 createdFile = true;
62 rootNode = doc.CreateNode(XmlNodeType.Element, "Root", "");
63 doc.AppendChild(rootNode);
64 configNode = doc.CreateNode(XmlNodeType.Element, "Config", "");
65 rootNode.AppendChild(configNode);
66 }
67
68
69 rootNode = doc.FirstChild;
70 if (rootNode.Name != "Root")
71 throw new Exception("Error: Invalid .xml File. Missing <Root>");
72
73 configNode = rootNode.FirstChild;
74 if (configNode.Name != "Config")
75 throw new Exception("Error: Invalid .xml File. <Root> first child should be <Config>");
76
77 if (createdFile)
78 {
79 this.Commit();
80 }
81 }
82
83 public string GetAttribute(string attributeName)
84 {
85 string result = "";
86 if (configNode.Attributes[attributeName] != null)
87 {
88 result = ((XmlAttribute)configNode.Attributes.GetNamedItem(attributeName)).Value;
89 }
90 return result;
91 }
92
93 public bool SetAttribute(string attributeName, string attributeValue)
94 {
95 if (configNode.Attributes[attributeName] != null)
96 {
97 ((XmlAttribute)configNode.Attributes.GetNamedItem(attributeName)).Value = attributeValue;
98 }
99 else
100 {
101 XmlAttribute attri;
102 attri = doc.CreateAttribute(attributeName);
103 attri.Value = attributeValue;
104 configNode.Attributes.Append(attri);
105 }
106 return true;
107 }
108
109 public void Commit()
110 {
111 doc.Save(fileName);
112 }
113
114 public void Close()
115 {
116 configNode = null;
117 rootNode = null;
118 doc = null;
119 }
120
121 }
122}
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs
new file mode 100644
index 0000000..f790477
--- /dev/null
+++ b/OpenSim/Framework/Servers/BaseHttpServer.cs
@@ -0,0 +1,224 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using System.Collections.Generic;
31using System.IO;
32using System.Net;
33using System.Text;
34using System.Text.RegularExpressions;
35using System.Threading;
36using Nwc.XmlRpc;
37using OpenSim.Framework.Console;
38
39namespace OpenSim.Framework.Servers
40{
41 public class BaseHttpServer
42 {
43 protected Thread m_workerThread;
44 protected HttpListener m_httpListener;
45 protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>();
46 protected Dictionary<string, IStreamHandler> m_streamHandlers = new Dictionary<string, IStreamHandler>();
47 protected int m_port;
48 protected bool m_firstcaps = true;
49
50 public BaseHttpServer(int port)
51 {
52 m_port = port;
53 }
54
55 public void AddStreamHandler( IStreamHandler handler)
56 {
57 string httpMethod = handler.HttpMethod;
58 string path = handler.Path;
59
60 string handlerKey = GetHandlerKey(httpMethod, path);
61 m_streamHandlers.Add(handlerKey, handler);
62 }
63
64 private static string GetHandlerKey(string httpMethod, string path)
65 {
66 return httpMethod + ":" + path;
67 }
68
69 public bool AddXmlRPCHandler(string method, XmlRpcMethod handler)
70 {
71 if (!this.m_rpcHandlers.ContainsKey(method))
72 {
73 this.m_rpcHandlers.Add(method, handler);
74 return true;
75 }
76
77 //must already have a handler for that path so return false
78 return false;
79 }
80
81
82 public virtual void HandleRequest(Object stateinfo)
83 {
84 HttpListenerContext context = (HttpListenerContext)stateinfo;
85
86 HttpListenerRequest request = context.Request;
87 HttpListenerResponse response = context.Response;
88
89 response.KeepAlive = false;
90 response.SendChunked = false;
91
92 string path = request.RawUrl;
93 string handlerKey = GetHandlerKey( request.HttpMethod, path );
94
95 IStreamHandler streamHandler;
96
97 if (TryGetStreamHandler( handlerKey, out streamHandler))
98 {
99 byte[] buffer = streamHandler.Handle(path, request.InputStream);
100 request.InputStream.Close();
101
102 response.ContentType = streamHandler.ContentType;
103 response.ContentLength64 = buffer.LongLength;
104 response.OutputStream.Write(buffer, 0, buffer.Length);
105 response.OutputStream.Close();
106 }
107 else
108 {
109 HandleXmlRpcRequests(request, response);
110 }
111 }
112
113 private bool TryGetStreamHandler(string handlerKey, out IStreamHandler streamHandler)
114 {
115 string bestMatch = null;
116
117 foreach (string pattern in m_streamHandlers.Keys)
118 {
119 if (handlerKey.StartsWith(pattern))
120 {
121 if (String.IsNullOrEmpty(bestMatch) || pattern.Length > bestMatch.Length)
122 {
123 bestMatch = pattern;
124 }
125 }
126 }
127
128 if (String.IsNullOrEmpty(bestMatch))
129 {
130 streamHandler = null;
131 return false;
132 }
133 else
134 {
135 streamHandler = m_streamHandlers[bestMatch];
136 return true;
137 }
138 }
139
140 private void HandleXmlRpcRequests(HttpListenerRequest request, HttpListenerResponse response)
141 {
142 Stream requestStream = request.InputStream;
143
144 Encoding encoding = Encoding.UTF8;
145 StreamReader reader = new StreamReader(requestStream, encoding);
146
147 string requestBody = reader.ReadToEnd();
148 reader.Close();
149 requestStream.Close();
150
151 XmlRpcRequest xmlRprcRequest = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
152
153 string methodName = xmlRprcRequest.MethodName;
154
155 XmlRpcResponse xmlRpcResponse;
156
157 XmlRpcMethod method;
158 if (this.m_rpcHandlers.TryGetValue(methodName, out method))
159 {
160 xmlRpcResponse = method(xmlRprcRequest);
161 }
162 else
163 {
164 xmlRpcResponse = new XmlRpcResponse();
165 Hashtable unknownMethodError = new Hashtable();
166 unknownMethodError["reason"] = "XmlRequest"; ;
167 unknownMethodError["message"] = "Unknown Rpc Request ["+methodName+"]";
168 unknownMethodError["login"] = "false";
169 xmlRpcResponse.Value = unknownMethodError;
170 }
171
172 response.AddHeader("Content-type", "text/xml");
173
174 string responseString = XmlRpcResponseSerializer.Singleton.Serialize(xmlRpcResponse);
175
176 byte[] buffer = Encoding.UTF8.GetBytes(responseString);
177
178 response.SendChunked = false;
179 response.ContentLength64 = buffer.Length;
180 response.ContentEncoding = Encoding.UTF8;
181
182 response.OutputStream.Write(buffer, 0, buffer.Length);
183 response.OutputStream.Close();
184 }
185
186 public void Start()
187 {
188 MainLog.Instance.WriteLine(LogPriority.LOW, "BaseHttpServer.cs: Starting up HTTP Server");
189
190 m_workerThread = new Thread(new ThreadStart(StartHTTP));
191 m_workerThread.IsBackground = true;
192 m_workerThread.Start();
193 }
194
195 private void StartHTTP()
196 {
197 try
198 {
199 MainLog.Instance.WriteLine(LogPriority.LOW, "BaseHttpServer.cs: StartHTTP() - Spawned main thread OK");
200 m_httpListener = new HttpListener();
201
202 m_httpListener.Prefixes.Add("http://+:" + m_port + "/");
203 m_httpListener.Start();
204
205 HttpListenerContext context;
206 while (true)
207 {
208 context = m_httpListener.GetContext();
209 ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context);
210 }
211 }
212 catch (Exception e)
213 {
214 MainLog.Instance.WriteLine(LogPriority.MEDIUM, e.Message);
215 }
216 }
217
218
219 public void RemoveStreamHandler(string httpMethod, string path)
220 {
221 m_streamHandlers.Remove(GetHandlerKey(httpMethod, path));
222 }
223 }
224}
diff --git a/OpenSim/Framework/Servers/BaseStreamHandler.cs b/OpenSim/Framework/Servers/BaseStreamHandler.cs
new file mode 100644
index 0000000..0d9c674
--- /dev/null
+++ b/OpenSim/Framework/Servers/BaseStreamHandler.cs
@@ -0,0 +1,40 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6namespace OpenSim.Framework.Servers
7{
8 public abstract class BaseStreamHandler : IStreamHandler
9 {
10 virtual public string ContentType
11 {
12 get { return "application/xml"; }
13 }
14
15 private string m_httpMethod;
16 virtual public string HttpMethod
17 {
18 get { return m_httpMethod; }
19 }
20
21 private string m_path;
22 virtual public string Path
23 {
24 get { return m_path; }
25 }
26
27 protected string GetParam( string path )
28 {
29 return path.Substring( m_path.Length );
30 }
31
32 public abstract byte[] Handle(string path, Stream request);
33
34 protected BaseStreamHandler(string httpMethod, string path)
35 {
36 m_httpMethod = httpMethod;
37 m_path = path;
38 }
39 }
40}
diff --git a/OpenSim/Framework/Servers/CheckSumServer.cs b/OpenSim/Framework/Servers/CheckSumServer.cs
new file mode 100644
index 0000000..89ec095
--- /dev/null
+++ b/OpenSim/Framework/Servers/CheckSumServer.cs
@@ -0,0 +1,127 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Servers
29{/*
30 public class CheckSumServer : UDPServerBase
31 {
32 //protected ConsoleBase m_log;
33
34 public CheckSumServer(int port)
35 : base(port)
36 {
37 }
38
39 protected override void OnReceivedData(IAsyncResult result)
40 {
41 ipeSender = new IPEndPoint(IPAddress.Any, 0);
42 epSender = (EndPoint)ipeSender;
43 Packet packet = null;
44 int numBytes = Server.EndReceiveFrom(result, ref epSender);
45 int packetEnd = numBytes - 1;
46
47 packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer);
48
49 if (packet.Type == PacketType.SecuredTemplateChecksumRequest)
50 {
51 SecuredTemplateChecksumRequestPacket checksum = (SecuredTemplateChecksumRequestPacket)packet;
52 TemplateChecksumReplyPacket checkreply = new TemplateChecksumReplyPacket();
53 checkreply.DataBlock.Checksum = 3220703154;//180572585;
54 checkreply.DataBlock.Flags = 0;
55 checkreply.DataBlock.MajorVersion = 1;
56 checkreply.DataBlock.MinorVersion = 15;
57 checkreply.DataBlock.PatchVersion = 0;
58 checkreply.DataBlock.ServerVersion = 0;
59 checkreply.TokenBlock.Token = checksum.TokenBlock.Token;
60 this.SendPacket(checkreply, epSender);
61
62 /*
63 //if we wanted to echo the the checksum/ version from the client (so that any client worked)
64 SecuredTemplateChecksumRequestPacket checkrequest = new SecuredTemplateChecksumRequestPacket();
65 checkrequest.TokenBlock.Token = checksum.TokenBlock.Token;
66 this.SendPacket(checkrequest, epSender);
67
68 }
69 else if (packet.Type == PacketType.TemplateChecksumReply)
70 {
71 //echo back the client checksum reply (Hegemon's method)
72 TemplateChecksumReplyPacket checksum2 = (TemplateChecksumReplyPacket)packet;
73 TemplateChecksumReplyPacket checkreply2 = new TemplateChecksumReplyPacket();
74 checkreply2.DataBlock.Checksum = checksum2.DataBlock.Checksum;
75 checkreply2.DataBlock.Flags = checksum2.DataBlock.Flags;
76 checkreply2.DataBlock.MajorVersion = checksum2.DataBlock.MajorVersion;
77 checkreply2.DataBlock.MinorVersion = checksum2.DataBlock.MinorVersion;
78 checkreply2.DataBlock.PatchVersion = checksum2.DataBlock.PatchVersion;
79 checkreply2.DataBlock.ServerVersion = checksum2.DataBlock.ServerVersion;
80 checkreply2.TokenBlock.Token = checksum2.TokenBlock.Token;
81 this.SendPacket(checkreply2, epSender);
82 }
83 else
84 {
85 }
86
87 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
88 }
89
90 private void SendPacket(Packet Pack, EndPoint endp)
91 {
92 if (!Pack.Header.Resent)
93 {
94 Pack.Header.Sequence = 1;
95 }
96
97 byte[] ZeroOutBuffer = new byte[4096];
98 byte[] sendbuffer;
99 sendbuffer = Pack.ToBytes();
100
101 try
102 {
103 if (Pack.Header.Zerocoded)
104 {
105 int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
106 this.SendPackTo(ZeroOutBuffer, packetsize, SocketFlags.None, endp);
107 }
108 else
109 {
110 this.SendPackTo(sendbuffer, sendbuffer.Length, SocketFlags.None, endp);
111 }
112 }
113 catch (Exception)
114 {
115 OpenSim.Framework.Console.MainLog.Instance.Warn("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection ");
116
117 }
118 }
119
120 private void SendPackTo(byte[] buffer, int size, SocketFlags flags, EndPoint endp)
121 {
122 this.Server.SendTo(buffer, size, flags, endp);
123 }
124 * }
125 */
126
127} \ No newline at end of file
diff --git a/OpenSim/Framework/Servers/IStreamHandler.cs b/OpenSim/Framework/Servers/IStreamHandler.cs
new file mode 100644
index 0000000..6cab40d
--- /dev/null
+++ b/OpenSim/Framework/Servers/IStreamHandler.cs
@@ -0,0 +1,22 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6namespace OpenSim.Framework.Servers
7{
8 public interface IStreamHandler
9 {
10 // Handle request stream, return byte array
11 byte[] Handle(string path, Stream request );
12
13 // Return response content type
14 string ContentType { get; }
15
16 // Return required http method
17 string HttpMethod { get;}
18
19 // Return path
20 string Path { get; }
21 }
22}
diff --git a/OpenSim/Framework/Servers/RestMethod.cs b/OpenSim/Framework/Servers/RestMethod.cs
new file mode 100644
index 0000000..c6cb230
--- /dev/null
+++ b/OpenSim/Framework/Servers/RestMethod.cs
@@ -0,0 +1,31 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Framework.Servers
29{
30 public delegate string RestMethod( string request, string path, string param );
31}
diff --git a/OpenSim/Framework/Servers/RestStreamHandler.cs b/OpenSim/Framework/Servers/RestStreamHandler.cs
new file mode 100644
index 0000000..1b3b41c
--- /dev/null
+++ b/OpenSim/Framework/Servers/RestStreamHandler.cs
@@ -0,0 +1,31 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6namespace OpenSim.Framework.Servers
7{
8 public class RestStreamHandler : BaseStreamHandler
9 {
10 RestMethod m_restMethod;
11
12 override public byte[] Handle(string path, Stream request )
13 {
14 Encoding encoding = Encoding.UTF8;
15 StreamReader streamReader = new StreamReader(request, encoding);
16
17 string requestBody = streamReader.ReadToEnd();
18 streamReader.Close();
19
20 string param = GetParam(path);
21 string responseString = m_restMethod(requestBody, path, param );
22
23 return Encoding.UTF8.GetBytes(responseString);
24 }
25
26 public RestStreamHandler(string httpMethod, string path, RestMethod restMethod) : base( httpMethod, path )
27 {
28 m_restMethod = restMethod;
29 }
30 }
31}
diff --git a/OpenSim/Framework/Servers/UDPServerBase.cs b/OpenSim/Framework/Servers/UDPServerBase.cs
new file mode 100644
index 0000000..508eb9d
--- /dev/null
+++ b/OpenSim/Framework/Servers/UDPServerBase.cs
@@ -0,0 +1,87 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Net;
30using System.Net.Sockets;
31using libsecondlife.Packets;
32
33namespace OpenSim.Framework.Servers
34{
35 public class UDPServerBase
36 {
37 public Socket Server;
38 protected IPEndPoint ServerIncoming;
39 protected byte[] RecvBuffer = new byte[4096];
40 protected byte[] ZeroBuffer = new byte[8192];
41 protected IPEndPoint ipeSender;
42 protected EndPoint epSender;
43 protected AsyncCallback ReceivedData;
44 protected int listenPort;
45
46 public UDPServerBase(int port)
47 {
48 listenPort = port;
49 }
50
51 protected virtual void OnReceivedData(IAsyncResult result)
52 {
53 ipeSender = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
54 epSender = (EndPoint)ipeSender;
55 Packet packet = null;
56 int numBytes = Server.EndReceiveFrom(result, ref epSender);
57 int packetEnd = numBytes - 1;
58
59 packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer);
60
61 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
62 }
63
64 protected virtual void AddNewClient(Packet packet)
65 {
66 }
67
68 public virtual void ServerListener()
69 {
70
71 ServerIncoming = new IPEndPoint(IPAddress.Parse("0.0.0.0"), listenPort);
72 Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
73 Server.Bind(ServerIncoming);
74
75 ipeSender = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
76 epSender = (EndPoint)ipeSender;
77 ReceivedData = new AsyncCallback(this.OnReceivedData);
78 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
79 }
80
81 public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)
82 {
83
84 }
85 }
86}
87
diff --git a/OpenSim/Framework/Servers/XmlRpcMethod.cs b/OpenSim/Framework/Servers/XmlRpcMethod.cs
new file mode 100644
index 0000000..b76ac51
--- /dev/null
+++ b/OpenSim/Framework/Servers/XmlRpcMethod.cs
@@ -0,0 +1,33 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Nwc.XmlRpc;
29
30namespace OpenSim.Framework.Servers
31{
32 public delegate XmlRpcResponse XmlRpcMethod( XmlRpcRequest request );
33}
diff --git a/OpenSim/Framework/UserManager/LoginResponse.cs b/OpenSim/Framework/UserManager/LoginResponse.cs
new file mode 100644
index 0000000..abcbd48
--- /dev/null
+++ b/OpenSim/Framework/UserManager/LoginResponse.cs
@@ -0,0 +1,643 @@
1using System;
2using System.Collections;
3using libsecondlife;
4using Nwc.XmlRpc;
5using OpenSim.Framework.Console;
6
7namespace OpenSim.Framework.UserManagement
8{
9
10 /// <summary>
11 /// A temp class to handle login response.
12 /// Should make use of UserProfileManager where possible.
13 /// </summary>
14
15 public class LoginResponse
16 {
17 private Hashtable loginFlagsHash;
18 private Hashtable globalTexturesHash;
19 private Hashtable loginError;
20 private Hashtable eventCategoriesHash;
21 private Hashtable uiConfigHash;
22 private Hashtable classifiedCategoriesHash;
23
24 private ArrayList loginFlags;
25 private ArrayList globalTextures;
26 private ArrayList eventCategories;
27 private ArrayList uiConfig;
28 private ArrayList classifiedCategories;
29 private ArrayList inventoryRoot;
30 private ArrayList initialOutfit;
31 private ArrayList agentInventory;
32
33 private UserInfo userProfile;
34
35 private LLUUID agentID;
36 private LLUUID sessionID;
37 private LLUUID secureSessionID;
38
39 // Login Flags
40 private string dst;
41 private string stipendSinceLogin;
42 private string gendered;
43 private string everLoggedIn;
44 private string login;
45 private int simPort;
46 private string simAddress;
47 private string agentAccess;
48 private Int32 circuitCode;
49 private uint regionX;
50 private uint regionY;
51
52 // Login
53 private string firstname;
54 private string lastname;
55
56 // Global Textures
57 private string sunTexture;
58 private string cloudTexture;
59 private string moonTexture;
60
61 // Error Flags
62 private string errorReason;
63 private string errorMessage;
64
65 // Response
66 private XmlRpcResponse xmlRpcResponse;
67 private XmlRpcResponse defaultXmlRpcResponse;
68
69 private string welcomeMessage;
70 private string startLocation;
71 private string allowFirstLife;
72 private string home;
73 private string seedCapability;
74 private string lookAt;
75
76 public LoginResponse()
77 {
78 this.loginFlags = new ArrayList();
79 this.globalTextures = new ArrayList();
80 this.eventCategories = new ArrayList();
81 this.uiConfig = new ArrayList();
82 this.classifiedCategories = new ArrayList();
83
84 this.loginError = new Hashtable();
85 this.eventCategoriesHash = new Hashtable();
86 this.classifiedCategoriesHash = new Hashtable();
87 this.uiConfigHash = new Hashtable();
88
89 this.defaultXmlRpcResponse = new XmlRpcResponse();
90 this.userProfile = new UserInfo();
91 this.inventoryRoot = new ArrayList();
92 this.initialOutfit = new ArrayList();
93 this.agentInventory = new ArrayList();
94
95 this.xmlRpcResponse = new XmlRpcResponse();
96 this.defaultXmlRpcResponse = new XmlRpcResponse();
97
98 this.SetDefaultValues();
99 } // LoginServer
100
101 public void SetDefaultValues()
102 {
103 this.DST = "N";
104 this.StipendSinceLogin = "N";
105 this.Gendered = "Y";
106 this.EverLoggedIn = "Y";
107 this.login = "false";
108 this.firstname = "Test";
109 this.lastname = "User";
110 this.agentAccess = "M";
111 this.startLocation = "last";
112 this.allowFirstLife = "Y";
113
114 this.SunTexture = "cce0f112-878f-4586-a2e2-a8f104bba271";
115 this.CloudTexture = "fc4b9f0b-d008-45c6-96a4-01dd947ac621";
116 this.MoonTexture = "fc4b9f0b-d008-45c6-96a4-01dd947ac621";
117
118 this.ErrorMessage = "You have entered an invalid name/password combination. Check Caps/lock.";
119 this.ErrorReason = "key";
120 this.welcomeMessage = "Welcome to OpenSim!";
121 this.seedCapability = "";
122 this.home = "{'region_handle':[r" + (1000 * 256).ToString() + ",r" + (1000 * 256).ToString() + "], 'position':[r" + this.userProfile.homepos.X.ToString() + ",r" + this.userProfile.homepos.Y.ToString() + ",r" + this.userProfile.homepos.Z.ToString() + "], 'look_at':[r" + this.userProfile.homelookat.X.ToString() + ",r" + this.userProfile.homelookat.Y.ToString() + ",r" + this.userProfile.homelookat.Z.ToString() + "]}";
123 this.lookAt = "[r0.99949799999999999756,r0.03166859999999999814,r0]";
124 this.RegionX = (uint)255232;
125 this.RegionY = (uint)254976;
126
127 // Classifieds;
128 this.AddClassifiedCategory((Int32)1, "Shopping");
129 this.AddClassifiedCategory((Int32)2, "Land Rental");
130 this.AddClassifiedCategory((Int32)3, "Property Rental");
131 this.AddClassifiedCategory((Int32)4, "Special Attraction");
132 this.AddClassifiedCategory((Int32)5, "New Products");
133 this.AddClassifiedCategory((Int32)6, "Employment");
134 this.AddClassifiedCategory((Int32)7, "Wanted");
135 this.AddClassifiedCategory((Int32)8, "Service");
136 this.AddClassifiedCategory((Int32)9, "Personal");
137
138
139 this.SessionID = LLUUID.Random();
140 this.SecureSessionID = LLUUID.Random();
141 this.AgentID = LLUUID.Random();
142
143 Hashtable InitialOutfitHash = new Hashtable();
144 InitialOutfitHash["folder_name"] = "Nightclub Female";
145 InitialOutfitHash["gender"] = "female";
146 this.initialOutfit.Add(InitialOutfitHash);
147
148
149 } // SetDefaultValues
150
151 #region Login Failure Methods
152 public XmlRpcResponse GenerateFailureResponse(string reason, string message, string login)
153 {
154 // Overwrite any default values;
155 this.xmlRpcResponse = new XmlRpcResponse();
156
157 // Ensure Login Failed message/reason;
158 this.ErrorMessage = message;
159 this.ErrorReason = reason;
160
161 this.loginError["reason"] = this.ErrorReason;
162 this.loginError["message"] = this.ErrorMessage;
163 this.loginError["login"] = login;
164 this.xmlRpcResponse.Value = this.loginError;
165 return (this.xmlRpcResponse);
166 } // GenerateResponse
167
168 public XmlRpcResponse CreateFailedResponse()
169 {
170 return (this.CreateLoginFailedResponse());
171 } // CreateErrorConnectingToGridResponse()
172
173 public XmlRpcResponse CreateLoginFailedResponse()
174 {
175 return (this.GenerateFailureResponse("key", "Could not authenticate your avatar. Please check your username and password, and check the grid if problems persist.", "false"));
176 } // LoginFailedResponse
177
178 public XmlRpcResponse CreateAlreadyLoggedInResponse()
179 {
180 return (this.GenerateFailureResponse("presence", "You appear to be already logged in, if this is not the case please wait for your session to timeout, if this takes longer than a few minutes please contact the grid owner", "false"));
181 } // CreateAlreadyLoggedInResponse()
182
183 public XmlRpcResponse CreateDeadRegionResponse()
184 {
185 return (this.GenerateFailureResponse("key", "The region you are attempting to log into is not responding. Please select another region and try again.", "false"));
186 }
187
188 public XmlRpcResponse CreateGridErrorResponse()
189 {
190 return (this.GenerateFailureResponse("key", "Error connecting to grid. Could not percieve credentials from login XML.", "false"));
191 }
192
193 #endregion
194
195 public XmlRpcResponse ToXmlRpcResponse()
196 {
197 try
198 {
199
200 Hashtable responseData = new Hashtable();
201
202 this.loginFlagsHash = new Hashtable();
203 this.loginFlagsHash["daylight_savings"] = this.DST;
204 this.loginFlagsHash["stipend_since_login"] = this.StipendSinceLogin;
205 this.loginFlagsHash["gendered"] = this.Gendered;
206 this.loginFlagsHash["ever_logged_in"] = this.EverLoggedIn;
207 this.loginFlags.Add(this.loginFlagsHash);
208
209 responseData["first_name"] = this.Firstname;
210 responseData["last_name"] = this.Lastname;
211 responseData["agent_access"] = this.agentAccess;
212
213 this.globalTexturesHash = new Hashtable();
214 this.globalTexturesHash["sun_texture_id"] = this.SunTexture;
215 this.globalTexturesHash["cloud_texture_id"] = this.CloudTexture;
216 this.globalTexturesHash["moon_texture_id"] = this.MoonTexture;
217 this.globalTextures.Add(this.globalTexturesHash);
218 this.eventCategories.Add(this.eventCategoriesHash);
219
220 this.AddToUIConfig("allow_first_life", this.allowFirstLife);
221 this.uiConfig.Add(this.uiConfigHash);
222
223 responseData["sim_port"] =(Int32) this.SimPort;
224 responseData["sim_ip"] = this.SimAddress;
225
226 MainLog.Instance.Warn("SIM IP: " + responseData["sim_ip"] + "; SIM PORT: " + responseData["sim_port"]);
227
228 responseData["agent_id"] = this.AgentID.ToStringHyphenated();
229 responseData["session_id"] = this.SessionID.ToStringHyphenated();
230 responseData["secure_session_id"] = this.SecureSessionID.ToStringHyphenated();
231 responseData["circuit_code"] = this.CircuitCode;
232 responseData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
233 responseData["login-flags"] = this.loginFlags;
234 responseData["global-textures"] = this.globalTextures;
235 responseData["seed_capability"] = this.seedCapability;
236
237 responseData["event_categories"] = this.eventCategories;
238 responseData["event_notifications"] = new ArrayList(); // todo
239 responseData["classified_categories"] = this.classifiedCategories;
240 responseData["ui-config"] = this.uiConfig;
241
242 responseData["inventory-skeleton"] = this.agentInventory;
243 responseData["inventory-skel-lib"] = new ArrayList(); // todo
244 responseData["inventory-root"] = this.inventoryRoot;
245 responseData["gestures"] = new ArrayList(); // todo
246 responseData["inventory-lib-owner"] = new ArrayList(); // todo
247 responseData["initial-outfit"] = this.initialOutfit;
248 responseData["start_location"] = this.startLocation;
249 responseData["seed_capability"] = this.seedCapability;
250 responseData["home"] = this.home;
251 responseData["look_at"] = this.lookAt;
252 responseData["message"] = this.welcomeMessage;
253 responseData["region_x"] = (Int32)this.RegionX * 256;
254 responseData["region_y"] = (Int32)this.RegionY * 256;
255
256 //responseData["inventory-lib-root"] = new ArrayList(); // todo
257 //responseData["buddy-list"] = new ArrayList(); // todo
258
259 responseData["login"] = "true";
260 this.xmlRpcResponse.Value = responseData;
261
262 return (this.xmlRpcResponse);
263 }
264 catch (Exception e)
265 {
266 MainLog.Instance.WriteLine(
267 LogPriority.LOW,
268 "LoginResponse: Error creating XML-RPC Response: " + e.Message
269 );
270 return (this.GenerateFailureResponse("Internal Error", "Error generating Login Response", "false"));
271
272 }
273
274 } // ToXmlRpcResponse
275
276 public void SetEventCategories(string category, string value)
277 {
278 this.eventCategoriesHash[category] = value;
279 } // SetEventCategories
280
281 public void AddToUIConfig(string itemName, string item)
282 {
283 this.uiConfigHash[itemName] = item;
284 } // SetUIConfig
285
286 public void AddClassifiedCategory(Int32 ID, string categoryName)
287 {
288 this.classifiedCategoriesHash["category_name"] = categoryName;
289 this.classifiedCategoriesHash["category_id"] = ID;
290 this.classifiedCategories.Add(this.classifiedCategoriesHash);
291 // this.classifiedCategoriesHash.Clear();
292 } // SetClassifiedCategory
293
294 #region Properties
295 public string Login
296 {
297 get
298 {
299 return this.login;
300 }
301 set
302 {
303 this.login = value;
304 }
305 } // Login
306
307 public string DST
308 {
309 get
310 {
311 return this.dst;
312 }
313 set
314 {
315 this.dst = value;
316 }
317 } // DST
318
319 public string StipendSinceLogin
320 {
321 get
322 {
323 return this.stipendSinceLogin;
324 }
325 set
326 {
327 this.stipendSinceLogin = value;
328 }
329 } // StipendSinceLogin
330
331 public string Gendered
332 {
333 get
334 {
335 return this.gendered;
336 }
337 set
338 {
339 this.gendered = value;
340 }
341 } // Gendered
342
343 public string EverLoggedIn
344 {
345 get
346 {
347 return this.everLoggedIn;
348 }
349 set
350 {
351 this.everLoggedIn = value;
352 }
353 } // EverLoggedIn
354
355 public int SimPort
356 {
357 get
358 {
359 return this.simPort;
360 }
361 set
362 {
363 this.simPort = value;
364 }
365 } // SimPort
366
367 public string SimAddress
368 {
369 get
370 {
371 return this.simAddress;
372 }
373 set
374 {
375 this.simAddress = value;
376 }
377 } // SimAddress
378
379 public LLUUID AgentID
380 {
381 get
382 {
383 return this.agentID;
384 }
385 set
386 {
387 this.agentID = value;
388 }
389 } // AgentID
390
391 public LLUUID SessionID
392 {
393 get
394 {
395 return this.sessionID;
396 }
397 set
398 {
399 this.sessionID = value;
400 }
401 } // SessionID
402
403 public LLUUID SecureSessionID
404 {
405 get
406 {
407 return this.secureSessionID;
408 }
409 set
410 {
411 this.secureSessionID = value;
412 }
413 } // SecureSessionID
414
415 public Int32 CircuitCode
416 {
417 get
418 {
419 return this.circuitCode;
420 }
421 set
422 {
423 this.circuitCode = value;
424 }
425 } // CircuitCode
426
427 public uint RegionX
428 {
429 get
430 {
431 return this.regionX;
432 }
433 set
434 {
435 this.regionX = value;
436 }
437 } // RegionX
438
439 public uint RegionY
440 {
441 get
442 {
443 return this.regionY;
444 }
445 set
446 {
447 this.regionY = value;
448 }
449 } // RegionY
450
451 public string SunTexture
452 {
453 get
454 {
455 return this.sunTexture;
456 }
457 set
458 {
459 this.sunTexture = value;
460 }
461 } // SunTexture
462
463 public string CloudTexture
464 {
465 get
466 {
467 return this.cloudTexture;
468 }
469 set
470 {
471 this.cloudTexture = value;
472 }
473 } // CloudTexture
474
475 public string MoonTexture
476 {
477 get
478 {
479 return this.moonTexture;
480 }
481 set
482 {
483 this.moonTexture = value;
484 }
485 } // MoonTexture
486
487 public string Firstname
488 {
489 get
490 {
491 return this.firstname;
492 }
493 set
494 {
495 this.firstname = value;
496 }
497 } // Firstname
498
499 public string Lastname
500 {
501 get
502 {
503 return this.lastname;
504 }
505 set
506 {
507 this.lastname = value;
508 }
509 } // Lastname
510
511 public string AgentAccess
512 {
513 get
514 {
515 return this.agentAccess;
516 }
517 set
518 {
519 this.agentAccess = value;
520 }
521 }
522
523 public string StartLocation
524 {
525 get
526 {
527 return this.startLocation;
528 }
529 set
530 {
531 this.startLocation = value;
532 }
533 } // StartLocation
534
535 public string LookAt
536 {
537 get
538 {
539 return this.lookAt;
540 }
541 set
542 {
543 this.lookAt = value;
544 }
545 }
546
547 public string SeedCapability
548 {
549 get
550 {
551 return this.seedCapability;
552 }
553 set
554 {
555 this.seedCapability = value;
556 }
557 } // SeedCapability
558
559 public string ErrorReason
560 {
561 get
562 {
563 return this.errorReason;
564 }
565 set
566 {
567 this.errorReason = value;
568 }
569 } // ErrorReason
570
571 public string ErrorMessage
572 {
573 get
574 {
575 return this.errorMessage;
576 }
577 set
578 {
579 this.errorMessage = value;
580 }
581 } // ErrorMessage
582
583 public ArrayList InventoryRoot
584 {
585 get
586 {
587 return this.inventoryRoot;
588 }
589 set
590 {
591 this.inventoryRoot = value;
592 }
593 }
594
595 public ArrayList InventorySkeleton
596 {
597 get
598 {
599 return this.agentInventory;
600 }
601 set
602 {
603 this.agentInventory = value;
604 }
605 }
606
607 public string Home
608 {
609 get
610 {
611 return this.home;
612 }
613 set
614 {
615 this.home = value;
616 }
617 }
618
619 public string Message
620 {
621 get
622 {
623 return this.welcomeMessage;
624 }
625 set
626 {
627 this.welcomeMessage = value;
628 }
629 }
630 #endregion
631
632
633 public class UserInfo
634 {
635 public string firstname;
636 public string lastname;
637 public ulong homeregionhandle;
638 public LLVector3 homepos;
639 public LLVector3 homelookat;
640 }
641 }
642}
643
diff --git a/OpenSim/Framework/UserManager/UserManagerBase.cs b/OpenSim/Framework/UserManager/UserManagerBase.cs
new file mode 100644
index 0000000..df6fbb2
--- /dev/null
+++ b/OpenSim/Framework/UserManager/UserManagerBase.cs
@@ -0,0 +1,630 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using System.Collections.Generic;
31using System.Reflection;
32using System.Security.Cryptography;
33using libsecondlife;
34using Nwc.XmlRpc;
35using OpenSim.Framework.Console;
36using OpenSim.Framework.Data;
37using OpenSim.Framework.Interfaces;
38using OpenSim.Framework.Inventory;
39using OpenSim.Framework.Utilities;
40
41namespace OpenSim.Framework.UserManagement
42{
43 public abstract class UserManagerBase
44 {
45 public UserConfig _config;
46 Dictionary<string, IUserData> _plugins = new Dictionary<string, IUserData>();
47
48 /// <summary>
49 /// Adds a new user server plugin - user servers will be requested in the order they were loaded.
50 /// </summary>
51 /// <param name="FileName">The filename to the user server plugin DLL</param>
52 public void AddPlugin(string FileName)
53 {
54 MainLog.Instance.Verbose( "Userstorage: Attempting to load " + FileName);
55 Assembly pluginAssembly = Assembly.LoadFrom(FileName);
56
57 MainLog.Instance.Verbose( "Userstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces.");
58 foreach (Type pluginType in pluginAssembly.GetTypes())
59 {
60 if (!pluginType.IsAbstract)
61 {
62 Type typeInterface = pluginType.GetInterface("IUserData", true);
63
64 if (typeInterface != null)
65 {
66 IUserData plug = (IUserData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
67 plug.Initialise();
68 this._plugins.Add(plug.getName(), plug);
69 MainLog.Instance.Verbose( "Userstorage: Added IUserData Interface");
70 }
71
72 typeInterface = null;
73 }
74 }
75
76 pluginAssembly = null;
77 }
78
79 #region Get UserProfile
80 /// <summary>
81 /// Loads a user profile from a database by UUID
82 /// </summary>
83 /// <param name="uuid">The target UUID</param>
84 /// <returns>A user profile</returns>
85 public UserProfileData getUserProfile(LLUUID uuid)
86 {
87 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
88 {
89 try
90 {
91 UserProfileData profile = plugin.Value.getUserByUUID(uuid);
92 profile.currentAgent = getUserAgent(profile.UUID);
93 return profile;
94 }
95 catch (Exception e)
96 {
97 MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")");
98 }
99 }
100
101 return null;
102 }
103
104
105 /// <summary>
106 /// Loads a user profile by name
107 /// </summary>
108 /// <param name="name">The target name</param>
109 /// <returns>A user profile</returns>
110 public UserProfileData getUserProfile(string name)
111 {
112 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
113 {
114 try
115 {
116 UserProfileData profile = plugin.Value.getUserByName(name);
117 profile.currentAgent = getUserAgent(profile.UUID);
118 return profile;
119 }
120 catch (Exception e)
121 {
122 MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")");
123 }
124 }
125
126 return null;
127 }
128
129 /// <summary>
130 /// Loads a user profile by name
131 /// </summary>
132 /// <param name="fname">First name</param>
133 /// <param name="lname">Last name</param>
134 /// <returns>A user profile</returns>
135 public UserProfileData getUserProfile(string fname, string lname)
136 {
137 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
138 {
139 try
140 {
141 UserProfileData profile = plugin.Value.getUserByName(fname,lname);
142
143 profile.currentAgent = getUserAgent(profile.UUID);
144
145 return profile;
146 }
147 catch (Exception e)
148 {
149 MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")");
150 }
151 }
152
153 return null;
154 }
155 #endregion
156
157 #region Get UserAgent
158 /// <summary>
159 /// Loads a user agent by uuid (not called directly)
160 /// </summary>
161 /// <param name="uuid">The agents UUID</param>
162 /// <returns>Agent profiles</returns>
163 public UserAgentData getUserAgent(LLUUID uuid)
164 {
165 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
166 {
167 try
168 {
169 return plugin.Value.getAgentByUUID(uuid);
170 }
171 catch (Exception e)
172 {
173 MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")");
174 }
175 }
176
177 return null;
178 }
179
180 /// <summary>
181 /// Loads a user agent by name (not called directly)
182 /// </summary>
183 /// <param name="name">The agents name</param>
184 /// <returns>A user agent</returns>
185 public UserAgentData getUserAgent(string name)
186 {
187 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
188 {
189 try
190 {
191 return plugin.Value.getAgentByName(name);
192 }
193 catch (Exception e)
194 {
195 MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")");
196 }
197 }
198
199 return null;
200 }
201
202 /// <summary>
203 /// Loads a user agent by name (not called directly)
204 /// </summary>
205 /// <param name="fname">The agents firstname</param>
206 /// <param name="lname">The agents lastname</param>
207 /// <returns>A user agent</returns>
208 public UserAgentData getUserAgent(string fname, string lname)
209 {
210 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
211 {
212 try
213 {
214 return plugin.Value.getAgentByName(fname,lname);
215 }
216 catch (Exception e)
217 {
218 MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")");
219 }
220 }
221
222 return null;
223 }
224
225 #endregion
226
227 #region CreateAgent
228 /// <summary>
229 /// Creates and initialises a new user agent - make sure to use CommitAgent when done to submit to the DB
230 /// </summary>
231 /// <param name="profile">The users profile</param>
232 /// <param name="request">The users loginrequest</param>
233 public void CreateAgent(UserProfileData profile, XmlRpcRequest request)
234 {
235 Hashtable requestData = (Hashtable)request.Params[0];
236
237 UserAgentData agent = new UserAgentData();
238
239 // User connection
240 agent.agentOnline = true;
241
242 // Generate sessions
243 RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();
244 byte[] randDataS = new byte[16];
245 byte[] randDataSS = new byte[16];
246 rand.GetBytes(randDataS);
247 rand.GetBytes(randDataSS);
248
249 agent.secureSessionID = new LLUUID(randDataSS, 0);
250 agent.sessionID = new LLUUID(randDataS, 0);
251
252 // Profile UUID
253 agent.UUID = profile.UUID;
254
255 // Current position (from Home)
256 agent.currentHandle = profile.homeRegion;
257 agent.currentPos = profile.homeLocation;
258
259 // If user specified additional start, use that
260 if (requestData.ContainsKey("start"))
261 {
262 string startLoc = ((string)requestData["start"]).Trim();
263 if (!(startLoc == "last" || startLoc == "home"))
264 {
265 // Format: uri:Ahern&162&213&34
266 try
267 {
268 string[] parts = startLoc.Remove(0, 4).Split('&');
269 string region = parts[0];
270
271 ////////////////////////////////////////////////////
272 //SimProfile SimInfo = new SimProfile();
273 //SimInfo = SimInfo.LoadFromGrid(theUser.currentAgent.currentHandle, _config.GridServerURL, _config.GridSendKey, _config.GridRecvKey);
274 }
275 catch (Exception)
276 {
277
278 }
279 }
280 }
281
282 // What time did the user login?
283 agent.loginTime = Util.UnixTimeSinceEpoch();
284 agent.logoutTime = 0;
285
286 // Current location
287 agent.regionID = new LLUUID(); // Fill in later
288 agent.currentRegion = new LLUUID(); // Fill in later
289
290 profile.currentAgent = agent;
291 }
292
293 /// <summary>
294 /// Saves a target agent to the database
295 /// </summary>
296 /// <param name="profile">The users profile</param>
297 /// <returns>Successful?</returns>
298 public bool CommitAgent(ref UserProfileData profile)
299 {
300 // Saves the agent to database
301 return true;
302 }
303
304 #endregion
305
306 /// <summary>
307 /// Checks a user against it's password hash
308 /// </summary>
309 /// <param name="profile">The users profile</param>
310 /// <param name="password">The supplied password</param>
311 /// <returns>Authenticated?</returns>
312 public virtual bool AuthenticateUser(UserProfileData profile, string password)
313 {
314 MainLog.Instance.Verbose(
315 "Authenticating " + profile.username + " " + profile.surname);
316
317 password = password.Remove(0, 3); //remove $1$
318
319 string s = Util.Md5Hash(password + ":" + profile.passwordSalt);
320
321 return profile.passwordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase);
322 }
323
324 #region Xml Response
325
326 /// <summary>
327 ///
328 /// </summary>
329 /// <param name="firstname"></param>
330 /// <param name="lastname"></param>
331 /// <returns></returns>
332 public virtual UserProfileData GetTheUser(string firstname, string lastname)
333 {
334 return getUserProfile(firstname, lastname);
335 }
336
337 /// <summary>
338 ///
339 /// </summary>
340 /// <returns></returns>
341 public virtual string GetMessage()
342 {
343 return _config.DefaultStartupMsg;
344 }
345
346 /// <summary>
347 /// Customises the login response and fills in missing values.
348 /// </summary>
349 /// <param name="response">The existing response</param>
350 /// <param name="theUser">The user profile</param>
351 public abstract void CustomiseResponse( LoginResponse response, UserProfileData theUser);
352
353 /// <summary>
354 /// Main user login function
355 /// </summary>
356 /// <param name="request">The XMLRPC request</param>
357 /// <returns>The response to send</returns>
358 public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request)
359 {
360
361 System.Console.WriteLine("Attempting login now...");
362 XmlRpcResponse response = new XmlRpcResponse();
363 Hashtable requestData = (Hashtable)request.Params[0];
364
365 bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd"));
366 bool GoodLogin = false;
367 string firstname = "";
368 string lastname = "";
369 string passwd = "";
370
371 UserProfileData userProfile;
372 LoginResponse logResponse = new LoginResponse();
373
374 if (GoodXML)
375 {
376 firstname = (string)requestData["first"];
377 lastname = (string)requestData["last"];
378 passwd = (string)requestData["passwd"];
379
380 userProfile = GetTheUser(firstname, lastname);
381 if (userProfile == null)
382 return logResponse.CreateLoginFailedResponse();
383
384 GoodLogin = AuthenticateUser(userProfile, passwd);
385 }
386 else
387 {
388 return logResponse.CreateGridErrorResponse();
389 }
390
391 if (!GoodLogin)
392 {
393 return logResponse.CreateLoginFailedResponse();
394 }
395 else
396 {
397 // If we already have a session...
398 if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline)
399 {
400 // Reject the login
401 return logResponse.CreateAlreadyLoggedInResponse();
402 }
403 // Otherwise...
404 // Create a new agent session
405 CreateAgent( userProfile, request);
406
407 try
408 {
409
410 LLUUID AgentID = userProfile.UUID;
411
412 // Inventory Library Section
413 ArrayList AgentInventoryArray = new ArrayList();
414 Hashtable TempHash;
415
416 AgentInventory Library = new AgentInventory();
417 Library.CreateRootFolder(AgentID, true);
418
419 foreach (InventoryFolder InvFolder in Library.InventoryFolders.Values)
420 {
421 TempHash = new Hashtable();
422 TempHash["name"] = InvFolder.FolderName;
423 TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated();
424 TempHash["version"] = (Int32)InvFolder.Version;
425 TempHash["type_default"] = (Int32)InvFolder.DefaultType;
426 TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated();
427 AgentInventoryArray.Add(TempHash);
428 }
429
430 Hashtable InventoryRootHash = new Hashtable();
431 InventoryRootHash["folder_id"] = Library.InventoryRoot.FolderID.ToStringHyphenated();
432 ArrayList InventoryRoot = new ArrayList();
433 InventoryRoot.Add(InventoryRootHash);
434
435 // Circuit Code
436 uint circode = (uint)(Util.RandomClass.Next());
437
438 logResponse.Lastname = userProfile.surname;
439 logResponse.Firstname = userProfile.username;
440 logResponse.AgentID = AgentID.ToStringHyphenated();
441 logResponse.SessionID = userProfile.currentAgent.sessionID.ToStringHyphenated();
442 logResponse.SecureSessionID = userProfile.currentAgent.secureSessionID.ToStringHyphenated();
443 logResponse.InventoryRoot = InventoryRoot;
444 logResponse.InventorySkeleton = AgentInventoryArray;
445 logResponse.CircuitCode = (Int32)circode;
446 //logResponse.RegionX = 0; //overwritten
447 //logResponse.RegionY = 0; //overwritten
448 logResponse.Home = "!!null temporary value {home}!!"; // Overwritten
449 //logResponse.LookAt = "\n[r" + TheUser.homeLookAt.X.ToString() + ",r" + TheUser.homeLookAt.Y.ToString() + ",r" + TheUser.homeLookAt.Z.ToString() + "]\n";
450 //logResponse.SimAddress = "127.0.0.1"; //overwritten
451 //logResponse.SimPort = 0; //overwritten
452 logResponse.Message = this.GetMessage();
453
454 try
455 {
456 this.CustomiseResponse( logResponse, userProfile);
457 }
458 catch (Exception e)
459 {
460 System.Console.WriteLine(e.ToString());
461 return logResponse.CreateDeadRegionResponse();
462 //return logResponse.ToXmlRpcResponse();
463 }
464 CommitAgent(ref userProfile);
465 return logResponse.ToXmlRpcResponse();
466
467 }
468
469 catch (Exception E)
470 {
471 System.Console.WriteLine(E.ToString());
472 }
473 //}
474 }
475 return response;
476
477 }
478
479 #endregion
480
481 /// <summary>
482 /// Deletes an active agent session
483 /// </summary>
484 /// <param name="request">The request</param>
485 /// <param name="path">The path (eg /bork/narf/test)</param>
486 /// <param name="param">Parameters sent</param>
487 /// <returns>Success "OK" else error</returns>
488 public string RestDeleteUserSessionMethod(string request, string path, string param)
489 {
490 // TODO! Important!
491
492 return "OK";
493 }
494
495 /// <summary>
496 ///
497 /// </summary>
498 /// <param name="user"></param>
499 public void AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY)
500 {
501 UserProfileData user = new UserProfileData();
502 user.homeLocation = new LLVector3(128, 128, 100);
503 user.UUID = LLUUID.Random();
504 user.username = firstName;
505 user.surname = lastName;
506 user.passwordHash = pass;
507 user.passwordSalt = "";
508 user.created = Util.UnixTimeSinceEpoch();
509 user.homeLookAt = new LLVector3(100, 100, 100);
510 user.homeRegion = Util.UIntsToLong((regX * 256), (regY * 256));
511
512 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
513 {
514 try
515 {
516 plugin.Value.addNewUserProfile(user);
517
518 }
519 catch (Exception e)
520 {
521 MainLog.Instance.Verbose("Unable to add user via " + plugin.Key + "(" + e.ToString() + ")");
522 }
523 }
524 }
525
526 /// <summary>
527 /// Returns an error message that the user could not be found in the database
528 /// </summary>
529 /// <returns>XML string consisting of a error element containing individual error(s)</returns>
530 public XmlRpcResponse CreateUnknownUserErrorResponse()
531 {
532 XmlRpcResponse response = new XmlRpcResponse();
533 Hashtable responseData = new Hashtable();
534 responseData["error_type"] = "unknown_user";
535 responseData["error_desc"] = "The user requested is not in the database";
536
537 response.Value = responseData;
538 return response;
539 }
540
541 /// <summary>
542 /// Converts a user profile to an XML element which can be returned
543 /// </summary>
544 /// <param name="profile">The user profile</param>
545 /// <returns>A string containing an XML Document of the user profile</returns>
546 public XmlRpcResponse ProfileToXmlRPCResponse(UserProfileData profile)
547 {
548 XmlRpcResponse response = new XmlRpcResponse();
549 Hashtable responseData = new Hashtable();
550
551 // Account information
552 responseData["firstname"] = profile.username;
553 responseData["lastname"] = profile.surname;
554 responseData["uuid"] = profile.UUID.ToStringHyphenated();
555 // Server Information
556 responseData["server_inventory"] = profile.userInventoryURI;
557 responseData["server_asset"] = profile.userAssetURI;
558 // Profile Information
559 responseData["profile_about"] = profile.profileAboutText;
560 responseData["profile_firstlife_about"] = profile.profileFirstText;
561 responseData["profile_firstlife_image"] = profile.profileFirstImage.ToStringHyphenated();
562 responseData["profile_can_do"] = profile.profileCanDoMask.ToString();
563 responseData["profile_want_do"] = profile.profileWantDoMask.ToString();
564 responseData["profile_image"] = profile.profileImage.ToStringHyphenated();
565 responseData["profile_created"] = profile.created.ToString();
566 responseData["profile_lastlogin"] = profile.lastLogin.ToString();
567 // Home region information
568 responseData["home_coordinates_x"] = profile.homeLocation.X.ToString();
569 responseData["home_coordinates_y"] = profile.homeLocation.Y.ToString();
570 responseData["home_coordinates_z"] = profile.homeLocation.Z.ToString();
571
572 responseData["home_region"] = profile.homeRegion.ToString();
573
574 responseData["home_look_x"] = profile.homeLookAt.X.ToString();
575 responseData["home_look_y"] = profile.homeLookAt.Y.ToString();
576 responseData["home_look_z"] = profile.homeLookAt.Z.ToString();
577 response.Value = responseData;
578 return response;
579 }
580
581 #region XMLRPC User Methods
582 //should most likely move out of here and into the grid's userserver sub class
583 public XmlRpcResponse XmlRPCGetUserMethodName(XmlRpcRequest request)
584 {
585 XmlRpcResponse response = new XmlRpcResponse();
586 Hashtable requestData = (Hashtable)request.Params[0];
587 UserProfileData userProfile;
588
589 if (requestData.Contains("avatar_name"))
590 {
591 userProfile = getUserProfile((string)requestData["avatar_name"]);
592 if (userProfile == null)
593 {
594 return CreateUnknownUserErrorResponse();
595 }
596 }
597 else
598 {
599 return CreateUnknownUserErrorResponse();
600 }
601
602
603 return ProfileToXmlRPCResponse(userProfile);
604 }
605
606 public XmlRpcResponse XmlRPCGetUserMethodUUID(XmlRpcRequest request)
607 {
608 XmlRpcResponse response = new XmlRpcResponse();
609 Hashtable requestData = (Hashtable)request.Params[0];
610 UserProfileData userProfile;
611 if (requestData.Contains("avatar_uuid"))
612 {
613 userProfile = getUserProfile((LLUUID)requestData["avatar_uuid"]);
614 if (userProfile == null)
615 {
616 return CreateUnknownUserErrorResponse();
617 }
618 }
619 else
620 {
621 return CreateUnknownUserErrorResponse();
622 }
623
624
625 return ProfileToXmlRPCResponse(userProfile);
626 }
627 #endregion
628
629 }
630}
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
new file mode 100644
index 0000000..3e302d8
--- /dev/null
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -0,0 +1,406 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using System.IO;
31using System.Text;
32using Db4objects.Db4o;
33using libsecondlife;
34using OpenSim.Framework.Console;
35using OpenSim.Framework.Types;
36using OpenSim.Framework.Servers;
37
38namespace OpenSim.Grid.AssetServer
39{
40 /// <summary>
41 /// An asset server
42 /// </summary>
43 public class OpenAsset_Main : conscmd_callback
44 {
45 private IObjectContainer db;
46
47 public static OpenAsset_Main assetserver;
48
49 private LogBase m_console;
50
51 [STAThread]
52 public static void Main(string[] args)
53 {
54 Console.WriteLine("Starting...\n");
55
56 assetserver = new OpenAsset_Main();
57 assetserver.Startup();
58
59 assetserver.Work();
60 }
61
62 private void Work()
63 {
64 m_console.Notice("Enter help for a list of commands");
65
66 while (true)
67 {
68 m_console.MainLogPrompt();
69 }
70 }
71
72 private OpenAsset_Main()
73 {
74 m_console = new LogBase("opengrid-AssetServer-console.log", "OpenAsset", this, false);
75 MainLog.Instance = m_console;
76 }
77
78 public void Startup()
79 {
80 m_console.Verbose("Main.cs:Startup() - Setting up asset DB");
81 setupDB();
82
83 m_console.Verbose("Main.cs:Startup() - Starting HTTP process");
84 BaseHttpServer httpServer = new BaseHttpServer(8003);
85
86 httpServer.AddStreamHandler( new GetAssetStreamHandler(this));
87 httpServer.AddStreamHandler(new PostAssetStreamHandler( this ));
88
89 //httpServer.AddRestHandler("GET", "/assets/", this.assetGetMethod);
90 //httpServer.AddRestHandler("POST", "/assets/", this.assetPostMethod);
91
92 httpServer.Start();
93
94 }
95
96 //public string AssetPostMethod(string requestBody, string path, string param)
97 //{
98 // AssetBase asset = new AssetBase();
99 // asset.Name = "";
100 // asset.FullID = new LLUUID(param);
101 // Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
102 // byte[] buffer = Windows1252Encoding.GetBytes(requestBody);
103 // asset.Data = buffer;
104 // AssetStorage store = new AssetStorage();
105 // store.Data = asset.Data;
106 // store.Name = asset.Name;
107 // store.UUID = asset.FullID;
108 // db.Set(store);
109 // db.Commit();
110 // return "";
111 //}
112
113 //public string AssetGetMethod(string request, string path, string param)
114 //{
115 // Console.WriteLine("got a request " + param);
116 // byte[] assetdata = GetAssetData(new LLUUID(param), false);
117 // if (assetdata != null)
118 // {
119 // Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
120 // string ret = Windows1252Encoding.GetString(assetdata);
121 // //string ret = System.Text.Encoding.Unicode.GetString(assetdata);
122
123 // return ret;
124
125 // }
126 // else
127 // {
128 // return "";
129 // }
130
131 //}
132
133 public byte[] GetAssetData(LLUUID assetID, bool isTexture)
134 {
135 bool found = false;
136 AssetStorage foundAsset = null;
137
138 IObjectSet result = db.Get(new AssetStorage(assetID));
139 if (result.Count > 0)
140 {
141 foundAsset = (AssetStorage)result.Next();
142 found = true;
143 }
144
145 if (found)
146 {
147 return foundAsset.Data;
148 }
149 else
150 {
151 return null;
152 }
153 }
154
155 public void setupDB()
156 {
157 bool yapfile = File.Exists("assets.yap");
158 try
159 {
160 db = Db4oFactory.OpenFile("assets.yap");
161 MainLog.Instance.Verbose("Main.cs:setupDB() - creation");
162 }
163 catch (Exception e)
164 {
165 db.Close();
166 MainLog.Instance.Warn("Main.cs:setupDB() - Exception occured");
167 MainLog.Instance.Warn(e.ToString());
168 }
169 if (!yapfile)
170 {
171 this.LoadDB();
172 }
173 }
174
175 public void LoadDB()
176 {
177 try
178 {
179
180 Console.WriteLine("setting up Asset database");
181
182 AssetBase Image = new AssetBase();
183 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000001");
184 Image.Name = "Bricks";
185 this.LoadAsset(Image, true, "bricks.jp2");
186 AssetStorage store = new AssetStorage();
187 store.Data = Image.Data;
188 store.Name = Image.Name;
189 store.UUID = Image.FullID;
190 db.Set(store);
191 db.Commit();
192
193 Image = new AssetBase();
194 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000002");
195 Image.Name = "Plywood";
196 this.LoadAsset(Image, true, "plywood.jp2");
197 store = new AssetStorage();
198 store.Data = Image.Data;
199 store.Name = Image.Name;
200 store.UUID = Image.FullID;
201 db.Set(store);
202 db.Commit();
203
204 Image = new AssetBase();
205 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000003");
206 Image.Name = "Rocks";
207 this.LoadAsset(Image, true, "rocks.jp2");
208 store = new AssetStorage();
209 store.Data = Image.Data;
210 store.Name = Image.Name;
211 store.UUID = Image.FullID;
212 db.Set(store);
213 db.Commit();
214
215 Image = new AssetBase();
216 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000004");
217 Image.Name = "Granite";
218 this.LoadAsset(Image, true, "granite.jp2");
219 store = new AssetStorage();
220 store.Data = Image.Data;
221 store.Name = Image.Name;
222 store.UUID = Image.FullID;
223 db.Set(store);
224 db.Commit();
225
226 Image = new AssetBase();
227 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000005");
228 Image.Name = "Hardwood";
229 this.LoadAsset(Image, true, "hardwood.jp2");
230 store = new AssetStorage();
231 store.Data = Image.Data;
232 store.Name = Image.Name;
233 store.UUID = Image.FullID;
234 db.Set(store);
235 db.Commit();
236
237 Image = new AssetBase();
238 Image.FullID = new LLUUID("00000000-0000-0000-5005-000000000005");
239 Image.Name = "Prim Base Texture";
240 this.LoadAsset(Image, true, "plywood.jp2");
241 store = new AssetStorage();
242 store.Data = Image.Data;
243 store.Name = Image.Name;
244 store.UUID = Image.FullID;
245 db.Set(store);
246 db.Commit();
247
248 Image = new AssetBase();
249 Image.FullID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
250 Image.Name = "Shape";
251 this.LoadAsset(Image, false, "base_shape.dat");
252 store = new AssetStorage();
253 store.Data = Image.Data;
254 store.Name = Image.Name;
255 store.UUID = Image.FullID;
256 db.Set(store);
257 db.Commit();
258 }
259 catch (Exception e)
260 {
261 Console.WriteLine(e.Message);
262 }
263 }
264
265 private void LoadAsset(AssetBase info, bool image, string filename)
266 {
267
268
269 string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder;
270 string fileName = Path.Combine(dataPath, filename);
271 FileInfo fInfo = new FileInfo(fileName);
272 long numBytes = fInfo.Length;
273 FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
274 byte[] idata = new byte[numBytes];
275 BinaryReader br = new BinaryReader(fStream);
276 idata = br.ReadBytes((int)numBytes);
277 br.Close();
278 fStream.Close();
279 info.Data = idata;
280 //info.loaded=true;
281 }
282
283 /*private GridConfig LoadConfigDll(string dllName)
284 {
285 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
286 GridConfig config = null;
287
288 foreach (Type pluginType in pluginAssembly.GetTypes())
289 {
290 if (pluginType.IsPublic)
291 {
292 if (!pluginType.IsAbstract)
293 {
294 Type typeInterface = pluginType.GetInterface("IGridConfig", true);
295
296 if (typeInterface != null)
297 {
298 IGridConfig plug = (IGridConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
299 config = plug.GetConfigObject();
300 break;
301 }
302
303 typeInterface = null;
304 }
305 }
306 }
307 pluginAssembly = null;
308 return config;
309 }*/
310
311 public void CreateAsset(LLUUID assetId, byte[] assetData)
312 {
313 AssetBase asset = new AssetBase();
314 asset.Name = "";
315 asset.FullID = assetId;
316 asset.Data = assetData;
317
318 AssetStorage store = new AssetStorage();
319 store.Data = asset.Data;
320 store.Name = asset.Name;
321 store.UUID = asset.FullID;
322 db.Set(store);
323 db.Commit();
324 }
325
326 public void RunCmd(string cmd, string[] cmdparams)
327 {
328 switch (cmd)
329 {
330 case "help":
331 m_console.Notice("shutdown - shutdown this asset server (USE CAUTION!)");
332 break;
333
334 case "shutdown":
335 m_console.Close();
336 Environment.Exit(0);
337 break;
338 }
339 }
340
341 public void Show(string ShowWhat)
342 {
343 }
344 }
345
346 public class GetAssetStreamHandler : BaseStreamHandler
347 {
348 OpenAsset_Main m_assetManager;
349
350 override public byte[] Handle(string path, Stream request)
351 {
352 string param = GetParam(path);
353
354 byte[] assetdata = m_assetManager.GetAssetData(new LLUUID(param), false);
355 if (assetdata != null)
356 {
357 return assetdata;
358 }
359 else
360 {
361 return new byte[]{};
362 }
363 }
364
365 public GetAssetStreamHandler(OpenAsset_Main assetManager):base( "/assets/", "GET")
366 {
367 m_assetManager = assetManager;
368 }
369 }
370
371 public class PostAssetStreamHandler : BaseStreamHandler
372 {
373 OpenAsset_Main m_assetManager;
374
375 override public byte[] Handle(string path, Stream request)
376 {
377 string param = GetParam(path);
378 LLUUID assetId = new LLUUID(param);
379 byte[] txBuffer = new byte[4096];
380
381 using( BinaryReader binReader = new BinaryReader( request ) )
382 {
383 using (MemoryStream memoryStream = new MemoryStream(4096))
384 {
385 int count;
386 while ((count = binReader.Read(txBuffer, 0, 4096)) > 0)
387 {
388 memoryStream.Write(txBuffer, 0, count);
389 }
390
391 byte[] assetData = memoryStream.ToArray();
392
393 m_assetManager.CreateAsset(assetId, assetData);
394 }
395 }
396
397 return new byte[]{};
398 }
399
400 public PostAssetStreamHandler( OpenAsset_Main assetManager )
401 : base("/assets/", "POST")
402 {
403 m_assetManager = assetManager;
404 }
405 }
406}
diff --git a/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..dc39ce2
--- /dev/null
+++ b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,58 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// General Information about an assembly is controlled through the following
31// set of attributes. Change these attribute values to modify the information
32// associated with an assembly.
33[assembly: AssemblyTitle("OGS-AssetServer")]
34[assembly: AssemblyDescription("")]
35[assembly: AssemblyConfiguration("")]
36[assembly: AssemblyCompany("")]
37[assembly: AssemblyProduct("OGS-AssetServer")]
38[assembly: AssemblyCopyright("Copyright © 2007")]
39[assembly: AssemblyTrademark("")]
40[assembly: AssemblyCulture("")]
41
42// Setting ComVisible to false makes the types in this assembly not visible
43// to COM components. If you need to access a type in this assembly from
44// COM, set the ComVisible attribute to true on that type.
45[assembly: ComVisible(false)]
46
47// The following GUID is for the ID of the typelib if this project is exposed to COM
48[assembly: Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")]
49
50// Version information for an assembly consists of the following four values:
51//
52// Major Version
53// Minor Version
54// Build Number
55// Revision
56//
57[assembly: AssemblyVersion("1.0.0.0")]
58[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Grid/Framework.Manager/GridManagementAgent.cs b/OpenSim/Grid/Framework.Manager/GridManagementAgent.cs
new file mode 100644
index 0000000..6c916a2
--- /dev/null
+++ b/OpenSim/Grid/Framework.Manager/GridManagementAgent.cs
@@ -0,0 +1,138 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections;
29using libsecondlife;
30using Nwc.XmlRpc;
31using OpenSim.Framework.Servers;
32
33namespace OpenSim.Framework.Manager
34{
35 /// <summary>
36 /// Used to pass messages to the gridserver
37 /// </summary>
38 /// <param name="param">Pass this argument</param>
39 public delegate void GridManagerCallback(string param);
40
41 /// <summary>
42 /// Serverside listener for grid commands
43 /// </summary>
44 public class GridManagementAgent
45 {
46 /// <summary>
47 /// Passes grid server messages
48 /// </summary>
49 private GridManagerCallback thecallback;
50
51 /// <summary>
52 /// Security keys
53 /// </summary>
54 private string sendkey;
55 private string recvkey;
56
57 /// <summary>
58 /// Our component type
59 /// </summary>
60 private string component_type;
61
62 /// <summary>
63 /// List of active sessions
64 /// </summary>
65 private static ArrayList Sessions;
66
67 /// <summary>
68 /// Initialises a new GridManagementAgent
69 /// </summary>
70 /// <param name="app_httpd">HTTP Daemon for this server</param>
71 /// <param name="component_type">What component type are we?</param>
72 /// <param name="sendkey">Security send key</param>
73 /// <param name="recvkey">Security recieve key</param>
74 /// <param name="thecallback">Message callback</param>
75 public GridManagementAgent(BaseHttpServer app_httpd, string component_type, string sendkey, string recvkey, GridManagerCallback thecallback)
76 {
77 this.sendkey = sendkey;
78 this.recvkey = recvkey;
79 this.component_type = component_type;
80 this.thecallback = thecallback;
81 Sessions = new ArrayList();
82
83 app_httpd.AddXmlRPCHandler("manager_login", XmlRpcLoginMethod);
84
85 switch (component_type)
86 {
87 case "gridserver":
88 GridServerManager.sendkey = this.sendkey;
89 GridServerManager.recvkey = this.recvkey;
90 GridServerManager.thecallback = thecallback;
91 app_httpd.AddXmlRPCHandler("shutdown", GridServerManager.XmlRpcShutdownMethod);
92 break;
93 }
94 }
95
96 /// <summary>
97 /// Checks if a session exists
98 /// </summary>
99 /// <param name="sessionID">The session ID</param>
100 /// <returns>Exists?</returns>
101 public static bool SessionExists(LLUUID sessionID)
102 {
103 return Sessions.Contains(sessionID);
104 }
105
106 /// <summary>
107 /// Logs a new session to the grid manager
108 /// </summary>
109 /// <param name="request">the XMLRPC request</param>
110 /// <returns>An XMLRPC reply</returns>
111 public static XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request)
112 {
113 XmlRpcResponse response = new XmlRpcResponse();
114 Hashtable requestData = (Hashtable)request.Params[0];
115 Hashtable responseData = new Hashtable();
116
117 // TODO: Switch this over to using OpenSim.Framework.Data
118 if (requestData["username"].Equals("admin") && requestData["password"].Equals("supersecret"))
119 {
120 response.IsFault = false;
121 LLUUID new_session = LLUUID.Random();
122 Sessions.Add(new_session);
123 responseData["session_id"] = new_session.ToString();
124 responseData["msg"] = "Login OK";
125 }
126 else
127 {
128 response.IsFault = true;
129 responseData["error"] = "Invalid username or password";
130 }
131
132 response.Value = responseData;
133 return response;
134
135 }
136
137 }
138}
diff --git a/OpenSim/Grid/Framework.Manager/GridServerManager.cs b/OpenSim/Grid/Framework.Manager/GridServerManager.cs
new file mode 100644
index 0000000..67cd35d
--- /dev/null
+++ b/OpenSim/Grid/Framework.Manager/GridServerManager.cs
@@ -0,0 +1,93 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using System.Collections;
31using System.Threading;
32using libsecondlife;
33using Nwc.XmlRpc;
34
35namespace OpenSim.Framework.Manager {
36
37 /// <summary>
38 /// A remote management system for the grid server
39 /// </summary>
40 public class GridServerManager
41 {
42 /// <summary>
43 /// Triggers events from the grid manager
44 /// </summary>
45 public static GridManagerCallback thecallback;
46
47 /// <summary>
48 /// Security keys
49 /// </summary>
50 public static string sendkey;
51 public static string recvkey;
52
53 /// <summary>
54 /// Disconnects the grid server and shuts it down
55 /// </summary>
56 /// <param name="request">XmlRpc Request</param>
57 /// <returns>An XmlRpc response containing either a "msg" or an "error"</returns>
58 public static XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request)
59 {
60 XmlRpcResponse response = new XmlRpcResponse();
61 Hashtable requestData = (Hashtable)request.Params[0];
62 Hashtable responseData = new Hashtable();
63
64 if(requestData.ContainsKey("session_id")) {
65 if(GridManagementAgent.SessionExists(new LLUUID((string)requestData["session_id"]))) {
66 responseData["msg"]="Shutdown command accepted";
67 (new Thread(new ThreadStart(ShutdownServer))).Start();
68 } else {
69 response.IsFault=true;
70 responseData["error"]="bad session ID";
71 }
72 } else {
73 response.IsFault=true;
74 responseData["error"]="no session ID";
75 }
76
77 response.Value = responseData;
78 return response;
79 }
80
81 /// <summary>
82 /// Shuts down the grid server
83 /// </summary>
84 public static void ShutdownServer()
85 {
86 Console.WriteLine("Shutting down the grid server - recieved a grid manager request");
87 Console.WriteLine("Terminating in three seconds...");
88 Thread.Sleep(3000);
89 thecallback("shutdown");
90 }
91 }
92}
93
diff --git a/OpenSim/Grid/GridServer.Config/AssemblyInfo.cs b/OpenSim/Grid/GridServer.Config/AssemblyInfo.cs
new file mode 100644
index 0000000..39c9e8f
--- /dev/null
+++ b/OpenSim/Grid/GridServer.Config/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("GridConfig")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("GridConfig")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Grid/GridServer.Config/DbGridConfig.cs b/OpenSim/Grid/GridServer.Config/DbGridConfig.cs
new file mode 100644
index 0000000..4acf81d
--- /dev/null
+++ b/OpenSim/Grid/GridServer.Config/DbGridConfig.cs
@@ -0,0 +1,160 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Db4objects.Db4o;
30using OpenSim.Framework.Console;
31using OpenSim.Framework.Interfaces;
32
33namespace OpenGrid.Config.GridConfigDb4o
34{
35 /// <summary>
36 /// A grid configuration interface for returning the DB4o Config Provider
37 /// </summary>
38 public class Db40ConfigPlugin: IGridConfig
39 {
40 /// <summary>
41 /// Loads and returns a configuration objeect
42 /// </summary>
43 /// <returns>A grid configuration object</returns>
44 public GridConfig GetConfigObject()
45 {
46 MainLog.Instance.Verbose("Loading Db40Config dll");
47 return ( new DbGridConfig());
48 }
49 }
50
51 /// <summary>
52 /// A DB4o based Gridserver configuration object
53 /// </summary>
54 public class DbGridConfig : GridConfig
55 {
56 /// <summary>
57 /// The DB4o Database
58 /// </summary>
59 private IObjectContainer db;
60
61 /// <summary>
62 /// User configuration for the Grid Config interfaces
63 /// </summary>
64 public void LoadDefaults() {
65 MainLog.Instance.Notice("Config.cs:LoadDefaults() - Please press enter to retain default or enter new settings");
66
67 // About the grid options
68 this.GridOwner = MainLog.Instance.CmdPrompt("Grid owner", "OGS development team");
69
70 // Asset Options
71 this.DefaultAssetServer = MainLog.Instance.CmdPrompt("Default asset server","http://127.0.0.1:8003/");
72 this.AssetSendKey = MainLog.Instance.CmdPrompt("Key to send to asset server","null");
73 this.AssetRecvKey = MainLog.Instance.CmdPrompt("Key to expect from asset server","null");
74
75 // User Server Options
76 this.DefaultUserServer = MainLog.Instance.CmdPrompt("Default user server","http://127.0.0.1:8002/");
77 this.UserSendKey = MainLog.Instance.CmdPrompt("Key to send to user server","null");
78 this.UserRecvKey = MainLog.Instance.CmdPrompt("Key to expect from user server","null");
79
80 // Region Server Options
81 this.SimSendKey = MainLog.Instance.CmdPrompt("Key to send to sims","null");
82 this.SimRecvKey = MainLog.Instance.CmdPrompt("Key to expect from sims","null");
83 }
84
85 /// <summary>
86 /// Initialises a new configuration object
87 /// </summary>
88 public override void InitConfig() {
89 try {
90 // Perform Db4o initialisation
91 db = Db4oFactory.OpenFile("opengrid.yap");
92
93 // Locate the grid configuration object
94 IObjectSet result = db.Get(typeof(DbGridConfig));
95 // Found?
96 if(result.Count==1) {
97 MainLog.Instance.Verbose("Config.cs:InitConfig() - Found a GridConfig object in the local database, loading");
98 foreach (DbGridConfig cfg in result) {
99 // Import each setting into this class
100 // Grid Settings
101 this.GridOwner=cfg.GridOwner;
102 // Asset Settings
103 this.DefaultAssetServer=cfg.DefaultAssetServer;
104 this.AssetSendKey=cfg.AssetSendKey;
105 this.AssetRecvKey=cfg.AssetRecvKey;
106 // User Settings
107 this.DefaultUserServer=cfg.DefaultUserServer;
108 this.UserSendKey=cfg.UserSendKey;
109 this.UserRecvKey=cfg.UserRecvKey;
110 // Region Settings
111 this.SimSendKey=cfg.SimSendKey;
112 this.SimRecvKey=cfg.SimRecvKey;
113 }
114 // Create a new configuration object from this class
115 } else {
116 MainLog.Instance.Verbose("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults");
117
118 // Load default settings into this class
119 LoadDefaults();
120
121 // Saves to the database file...
122 MainLog.Instance.Verbose( "Writing out default settings to local database");
123 db.Set(this);
124
125 // Closes file locks
126 db.Close();
127 }
128 } catch(Exception e) {
129 MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured");
130 MainLog.Instance.Warn(e.ToString());
131 }
132
133 // Grid Settings
134 MainLog.Instance.Verbose("Grid settings loaded:");
135 MainLog.Instance.Verbose("Grid owner: " + this.GridOwner);
136
137 // Asset Settings
138 MainLog.Instance.Verbose("Default asset server: " + this.DefaultAssetServer);
139 MainLog.Instance.Verbose("Key to send to asset server: " + this.AssetSendKey);
140 MainLog.Instance.Verbose("Key to expect from asset server: " + this.AssetRecvKey);
141
142 // User Settings
143 MainLog.Instance.Verbose("Default user server: " + this.DefaultUserServer);
144 MainLog.Instance.Verbose("Key to send to user server: " + this.UserSendKey);
145 MainLog.Instance.Verbose("Key to expect from user server: " + this.UserRecvKey);
146
147 // Region Settings
148 MainLog.Instance.Verbose("Key to send to sims: " + this.SimSendKey);
149 MainLog.Instance.Verbose("Key to expect from sims: " + this.SimRecvKey);
150 }
151
152 /// <summary>
153 /// Closes down the database and releases filesystem locks
154 /// </summary>
155 public void Shutdown() {
156 db.Close();
157 }
158 }
159
160}
diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs
new file mode 100644
index 0000000..1f97f53
--- /dev/null
+++ b/OpenSim/Grid/GridServer/GridManager.cs
@@ -0,0 +1,703 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using System.Collections.Generic;
31using System.Reflection;
32using System.Xml;
33using libsecondlife;
34using Nwc.XmlRpc;
35using OpenSim.Framework.Console;
36using OpenSim.Framework.Data;
37using OpenSim.Framework.Interfaces;
38using OpenSim.Framework.Utilities;
39
40namespace OpenSim.Grid.GridServer
41{
42 class GridManager
43 {
44 Dictionary<string, IGridData> _plugins = new Dictionary<string, IGridData>();
45 Dictionary<string, ILogData> _logplugins = new Dictionary<string, ILogData>();
46
47 public GridConfig config;
48
49 /// <summary>
50 /// Adds a new grid server plugin - grid servers will be requested in the order they were loaded.
51 /// </summary>
52 /// <param name="FileName">The filename to the grid server plugin DLL</param>
53 public void AddPlugin(string FileName)
54 {
55 MainLog.Instance.Verbose("Storage: Attempting to load " + FileName);
56 Assembly pluginAssembly = Assembly.LoadFrom(FileName);
57
58 MainLog.Instance.Verbose("Storage: Found " + pluginAssembly.GetTypes().Length + " interfaces.");
59 foreach (Type pluginType in pluginAssembly.GetTypes())
60 {
61 if (!pluginType.IsAbstract)
62 {
63 // Regions go here
64 Type typeInterface = pluginType.GetInterface("IGridData", true);
65
66 if (typeInterface != null)
67 {
68 IGridData plug = (IGridData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
69 plug.Initialise();
70 this._plugins.Add(plug.getName(), plug);
71 MainLog.Instance.Verbose("Storage: Added IGridData Interface");
72 }
73
74 typeInterface = null;
75
76 // Logs go here
77 typeInterface = pluginType.GetInterface("ILogData", true);
78
79 if (typeInterface != null)
80 {
81 ILogData plug = (ILogData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
82 plug.Initialise();
83 this._logplugins.Add(plug.getName(), plug);
84 MainLog.Instance.Verbose( "Storage: Added ILogData Interface");
85 }
86
87 typeInterface = null;
88 }
89 }
90
91 pluginAssembly = null;
92 }
93
94 /// <summary>
95 /// Logs a piece of information to the database
96 /// </summary>
97 /// <param name="target">What you were operating on (in grid server, this will likely be the region UUIDs)</param>
98 /// <param name="method">Which method is being called?</param>
99 /// <param name="args">What arguments are being passed?</param>
100 /// <param name="priority">How high priority is this? 1 = Max, 6 = Verbose</param>
101 /// <param name="message">The message to log</param>
102 private void logToDB(string target, string method, string args, int priority, string message)
103 {
104 foreach (KeyValuePair<string, ILogData> kvp in _logplugins)
105 {
106 try
107 {
108 kvp.Value.saveLog("Gridserver", target, method, args, priority, message);
109 }
110 catch (Exception)
111 {
112 MainLog.Instance.Warn("Storage: unable to write log via " + kvp.Key);
113 }
114 }
115 }
116
117 /// <summary>
118 /// Returns a region by argument
119 /// </summary>
120 /// <param name="uuid">A UUID key of the region to return</param>
121 /// <returns>A SimProfileData for the region</returns>
122 public SimProfileData getRegion(LLUUID uuid)
123 {
124 foreach(KeyValuePair<string,IGridData> kvp in _plugins) {
125 try
126 {
127 return kvp.Value.GetProfileByLLUUID(uuid);
128 }
129 catch (Exception e)
130 {
131 MainLog.Instance.Warn("Message from Storage: " + e.Message);
132 }
133 }
134 return null;
135 }
136
137 /// <summary>
138 /// Returns a region by argument
139 /// </summary>
140 /// <param name="uuid">A regionHandle of the region to return</param>
141 /// <returns>A SimProfileData for the region</returns>
142 public SimProfileData getRegion(ulong handle)
143 {
144 foreach (KeyValuePair<string, IGridData> kvp in _plugins)
145 {
146 try
147 {
148 return kvp.Value.GetProfileByHandle(handle);
149 }
150 catch
151 {
152 MainLog.Instance.Warn("Storage: Unable to find region " + handle.ToString() + " via " + kvp.Key);
153 }
154 }
155 return null;
156 }
157
158 public Dictionary<ulong, SimProfileData> getRegions(uint xmin, uint ymin, uint xmax, uint ymax)
159 {
160 Dictionary<ulong, SimProfileData> regions = new Dictionary<ulong, SimProfileData>();
161
162 SimProfileData[] neighbours;
163
164 foreach (KeyValuePair<string, IGridData> kvp in _plugins)
165 {
166 try
167 {
168 neighbours = kvp.Value.GetProfilesInRange(xmin, ymin, xmax, ymax);
169 foreach (SimProfileData neighbour in neighbours)
170 {
171 regions[neighbour.regionHandle] = neighbour;
172 }
173 }
174 catch
175 {
176 MainLog.Instance.Warn("Storage: Unable to query regionblock via " + kvp.Key);
177 }
178 }
179
180 return regions;
181 }
182
183
184
185 /// <summary>
186 /// Returns a XML String containing a list of the neighbouring regions
187 /// </summary>
188 /// <param name="reqhandle">The regionhandle for the center sim</param>
189 /// <returns>An XML string containing neighbour entities</returns>
190 public string GetXMLNeighbours(ulong reqhandle)
191 {
192 string response = "";
193 SimProfileData central_region = getRegion(reqhandle);
194 SimProfileData neighbour;
195 for (int x = -1; x < 2; x++) for (int y = -1; y < 2; y++)
196 {
197 if (getRegion(Util.UIntsToLong((uint)((central_region.regionLocX + x) * 256), (uint)(central_region.regionLocY + y) * 256)) != null)
198 {
199 neighbour = getRegion(Util.UIntsToLong((uint)((central_region.regionLocX + x) * 256), (uint)(central_region.regionLocY + y) * 256));
200 response += "<neighbour>";
201 response += "<sim_ip>" + neighbour.serverIP + "</sim_ip>";
202 response += "<sim_port>" + neighbour.serverPort.ToString() + "</sim_port>";
203 response += "<locx>" + neighbour.regionLocX.ToString() + "</locx>";
204 response += "<locy>" + neighbour.regionLocY.ToString() + "</locy>";
205 response += "<regionhandle>" + neighbour.regionHandle.ToString() + "</regionhandle>";
206 response += "</neighbour>";
207
208 }
209 }
210 return response;
211 }
212
213 /// <summary>
214 /// Performed when a region connects to the grid server initially.
215 /// </summary>
216 /// <param name="request">The XMLRPC Request</param>
217 /// <returns>Startup parameters</returns>
218 public XmlRpcResponse XmlRpcSimulatorLoginMethod(XmlRpcRequest request)
219 {
220
221 XmlRpcResponse response = new XmlRpcResponse();
222 Hashtable responseData = new Hashtable();
223 response.Value = responseData;
224
225 SimProfileData TheSim = null;
226 Hashtable requestData = (Hashtable)request.Params[0];
227
228 if (requestData.ContainsKey("UUID"))
229 {
230 TheSim = getRegion(new LLUUID((string)requestData["UUID"]));
231
232 logToDB((new LLUUID((string)requestData["UUID"])).ToStringHyphenated(),"XmlRpcSimulatorLoginMethod","", 5,"Region attempting login with UUID.");
233 }
234 else if (requestData.ContainsKey("region_handle"))
235 {
236
237 TheSim = getRegion((ulong)Convert.ToUInt64(requestData["region_handle"]));
238 logToDB((string)requestData["region_handle"], "XmlRpcSimulatorLoginMethod", "", 5, "Region attempting login with regionHandle.");
239 }
240 else
241 {
242 responseData["error"] = "No UUID or region_handle passed to grid server - unable to connect you";
243 return response;
244 }
245
246 if (TheSim == null) // Shouldnt this be in the REST Simulator Set method?
247 {
248 //NEW REGION
249 TheSim = new SimProfileData();
250
251 TheSim.regionRecvKey = config.SimRecvKey;
252 TheSim.regionSendKey = config.SimSendKey;
253 TheSim.regionSecret = config.SimRecvKey;
254 TheSim.regionDataURI = "";
255 TheSim.regionAssetURI = config.DefaultAssetServer;
256 TheSim.regionAssetRecvKey = config.AssetRecvKey;
257 TheSim.regionAssetSendKey = config.AssetSendKey;
258 TheSim.regionUserURI = config.DefaultUserServer;
259 TheSim.regionUserSendKey = config.UserSendKey;
260 TheSim.regionUserRecvKey = config.UserRecvKey;
261
262 TheSim.serverIP = (string)requestData["sim_ip"];
263 TheSim.serverPort = Convert.ToUInt32((string)requestData["sim_port"]);
264 TheSim.httpPort = Convert.ToUInt32((string)requestData["http_port"]);
265 TheSim.remotingPort = Convert.ToUInt32((string)requestData["remoting_port"]);
266 TheSim.regionLocX = Convert.ToUInt32((string)requestData["region_locx"]);
267 TheSim.regionLocY = Convert.ToUInt32((string)requestData["region_locy"]);
268 TheSim.regionLocZ = 0;
269 TheSim.regionMapTextureID = new LLUUID((string)requestData["map-image-id"]);
270
271 TheSim.regionHandle = Helpers.UIntsToLong((TheSim.regionLocX * 256), (TheSim.regionLocY * 256));
272 System.Console.WriteLine("adding region " + TheSim.regionLocX + " , " + TheSim.regionLocY + " , " + TheSim.regionHandle);
273 TheSim.serverURI = "http://" + TheSim.serverIP + ":" + TheSim.serverPort + "/";
274 TheSim.httpServerURI = "http://" + TheSim.serverIP + ":" + TheSim.httpPort + "/";
275
276 Console.WriteLine("NEW SIM: " + TheSim.serverURI);
277 TheSim.regionName = (string)requestData["sim_name"];
278 TheSim.UUID = new LLUUID((string)requestData["UUID"]);
279
280 foreach (KeyValuePair<string, IGridData> kvp in _plugins)
281 {
282 try
283 {
284 DataResponse insertResponse = kvp.Value.AddProfile(TheSim);
285 switch(insertResponse)
286 {
287 case DataResponse.RESPONSE_OK:
288 OpenSim.Framework.Console.MainLog.Instance.Verbose("New sim creation successful: " + TheSim.regionName);
289 break;
290 case DataResponse.RESPONSE_ERROR:
291 OpenSim.Framework.Console.MainLog.Instance.Warn("New sim creation failed (Error): " + TheSim.regionName);
292 break;
293 case DataResponse.RESPONSE_INVALIDCREDENTIALS:
294 OpenSim.Framework.Console.MainLog.Instance.Warn("New sim creation failed (Invalid Credentials): " + TheSim.regionName);
295 break;
296 case DataResponse.RESPONSE_AUTHREQUIRED:
297 OpenSim.Framework.Console.MainLog.Instance.Warn("New sim creation failed (Authentication Required): " + TheSim.regionName);
298 break;
299 }
300
301 }
302 catch (Exception e)
303 {
304 OpenSim.Framework.Console.MainLog.Instance.Warn("Storage: Unable to add region " + TheSim.UUID.ToStringHyphenated() + " via " + kvp.Key);
305 }
306 }
307
308
309 if (getRegion(TheSim.regionHandle) == null)
310 {
311 responseData["error"] = "Unable to add new region";
312 return response;
313 }
314 }
315
316
317 ArrayList SimNeighboursData = new ArrayList();
318
319 SimProfileData neighbour;
320 Hashtable NeighbourBlock;
321
322 bool fastMode = false; // Only compatible with MySQL right now
323
324 if (fastMode)
325 {
326 Dictionary<ulong, SimProfileData> neighbours = getRegions(TheSim.regionLocX - 1, TheSim.regionLocY - 1, TheSim.regionLocX + 1, TheSim.regionLocY + 1);
327
328 foreach (KeyValuePair<ulong, SimProfileData> aSim in neighbours)
329 {
330 NeighbourBlock = new Hashtable();
331 NeighbourBlock["sim_ip"] = aSim.Value.serverIP.ToString();
332 NeighbourBlock["sim_port"] = aSim.Value.serverPort.ToString();
333 NeighbourBlock["region_locx"] = aSim.Value.regionLocX.ToString();
334 NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString();
335 NeighbourBlock["UUID"] = aSim.Value.UUID.ToString();
336
337 if (aSim.Value.UUID != TheSim.UUID)
338 SimNeighboursData.Add(NeighbourBlock);
339 }
340 }
341 else
342 {
343 for (int x = -1; x < 2; x++) for (int y = -1; y < 2; y++)
344 {
345 if (getRegion(Helpers.UIntsToLong((uint)((TheSim.regionLocX + x) * 256), (uint)(TheSim.regionLocY + y) * 256)) != null)
346 {
347 neighbour = getRegion(Helpers.UIntsToLong((uint)((TheSim.regionLocX + x) * 256), (uint)(TheSim.regionLocY + y) * 256));
348
349 NeighbourBlock = new Hashtable();
350 NeighbourBlock["sim_ip"] = neighbour.serverIP;
351 NeighbourBlock["sim_port"] = neighbour.serverPort.ToString();
352 NeighbourBlock["region_locx"] = neighbour.regionLocX.ToString();
353 NeighbourBlock["region_locy"] = neighbour.regionLocY.ToString();
354 NeighbourBlock["UUID"] = neighbour.UUID.ToString();
355
356 if (neighbour.UUID != TheSim.UUID) SimNeighboursData.Add(NeighbourBlock);
357 }
358 }
359 }
360
361 responseData["UUID"] = TheSim.UUID.ToString();
362 responseData["region_locx"] = TheSim.regionLocX.ToString();
363 responseData["region_locy"] = TheSim.regionLocY.ToString();
364 responseData["regionname"] = TheSim.regionName;
365 responseData["estate_id"] = "1";
366 responseData["neighbours"] = SimNeighboursData;
367
368 responseData["sim_ip"] = TheSim.serverIP;
369 responseData["sim_port"] = TheSim.serverPort.ToString();
370 responseData["asset_url"] = TheSim.regionAssetURI;
371 responseData["asset_sendkey"] = TheSim.regionAssetSendKey;
372 responseData["asset_recvkey"] = TheSim.regionAssetRecvKey;
373 responseData["user_url"] = TheSim.regionUserURI;
374 responseData["user_sendkey"] = TheSim.regionUserSendKey;
375 responseData["user_recvkey"] = TheSim.regionUserRecvKey;
376 responseData["authkey"] = TheSim.regionSecret;
377
378 // New! If set, use as URL to local sim storage (ie http://remotehost/region.yap)
379 responseData["data_uri"] = TheSim.regionDataURI;
380
381
382 return response;
383 }
384
385 public XmlRpcResponse XmlRpcSimulatorDataRequestMethod(XmlRpcRequest request)
386 {
387 Hashtable requestData = (Hashtable)request.Params[0];
388 Hashtable responseData = new Hashtable();
389 SimProfileData simData = null;
390 if (requestData.ContainsKey("region_UUID"))
391 {
392 simData = getRegion(new LLUUID((string)requestData["region_UUID"]));
393 }
394 else if (requestData.ContainsKey("region_handle"))
395 {
396 Console.WriteLine("requesting data for region " + (string)requestData["region_handle"]);
397 simData = getRegion(Convert.ToUInt64((string)requestData["region_handle"]));
398 }
399
400 if (simData == null)
401 {
402 //Sim does not exist
403 Console.WriteLine("region not found");
404 responseData["error"] = "Sim does not exist";
405 }
406 else
407 {
408 Console.WriteLine("found region");
409 responseData["sim_ip"] = simData.serverIP;
410 responseData["sim_port"] = simData.serverPort.ToString();
411 responseData["http_port"] = simData.httpPort.ToString();
412 responseData["remoting_port"] = simData.remotingPort.ToString();
413 responseData["region_locx"] = simData.regionLocX.ToString() ;
414 responseData["region_locy"] = simData.regionLocY.ToString();
415 responseData["region_UUID"] = simData.UUID.UUID.ToString();
416 responseData["region_name"] = simData.regionName;
417 }
418
419 XmlRpcResponse response = new XmlRpcResponse();
420 response.Value = responseData;
421 return response;
422 }
423
424 public XmlRpcResponse XmlRpcMapBlockMethod(XmlRpcRequest request)
425 {
426 int xmin=980, ymin=980, xmax=1020, ymax=1020;
427
428 Hashtable requestData = (Hashtable)request.Params[0];
429 if (requestData.ContainsKey("xmin"))
430 {
431 xmin = (Int32)requestData["xmin"];
432 }
433 if (requestData.ContainsKey("ymin"))
434 {
435 ymin = (Int32)requestData["ymin"];
436 }
437 if (requestData.ContainsKey("xmax"))
438 {
439 xmax = (Int32)requestData["xmax"];
440 }
441 if (requestData.ContainsKey("ymax"))
442 {
443 ymax = (Int32)requestData["ymax"];
444 }
445
446 XmlRpcResponse response = new XmlRpcResponse();
447 Hashtable responseData = new Hashtable();
448 response.Value = responseData;
449 IList simProfileList = new ArrayList();
450
451 bool fastMode = false; // MySQL Only
452
453 if (fastMode)
454 {
455 Dictionary<ulong, SimProfileData> neighbours = getRegions((uint)xmin, (uint)ymin, (uint)xmax, (uint)ymax);
456
457 foreach (KeyValuePair<ulong, SimProfileData> aSim in neighbours)
458 {
459 Hashtable simProfileBlock = new Hashtable();
460 simProfileBlock["x"] = aSim.Value.regionLocX.ToString();
461 simProfileBlock["y"] = aSim.Value.regionLocY.ToString();
462 System.Console.WriteLine("send neighbour info for " + aSim.Value.regionLocX.ToString() + " , " + aSim.Value.regionLocY.ToString());
463 simProfileBlock["name"] = aSim.Value.regionName;
464 simProfileBlock["access"] = 21;
465 simProfileBlock["region-flags"] = 512;
466 simProfileBlock["water-height"] = 0;
467 simProfileBlock["agents"] = 1;
468 simProfileBlock["map-image-id"] = aSim.Value.regionMapTextureID.ToString();
469
470 // For Sugilite compatibility
471 simProfileBlock["regionhandle"] = aSim.Value.regionHandle.ToString();
472 simProfileBlock["sim_ip"] = aSim.Value.serverIP.ToString();
473 simProfileBlock["sim_port"] = aSim.Value.serverPort.ToString();
474 simProfileBlock["sim_uri"] = aSim.Value.serverURI.ToString();
475 simProfileBlock["uuid"] = aSim.Value.UUID.ToStringHyphenated();
476
477 simProfileList.Add(simProfileBlock);
478 }
479 MainLog.Instance.Verbose("World map request processed, returned " + simProfileList.Count.ToString() + " region(s) in range via FastMode");
480 }
481 else
482 {
483 SimProfileData simProfile;
484 for (int x = xmin; x < xmax+1; x++)
485 {
486 for (int y = ymin; y < ymax+1; y++)
487 {
488 ulong regHandle = Helpers.UIntsToLong((uint)(x * 256), (uint)(y * 256));
489 simProfile = getRegion(regHandle);
490 if (simProfile != null)
491 {
492 Hashtable simProfileBlock = new Hashtable();
493 simProfileBlock["x"] = x;
494 simProfileBlock["y"] = y;
495 simProfileBlock["name"] = simProfile.regionName;
496 simProfileBlock["access"] = 0;
497 simProfileBlock["region-flags"] = 0;
498 simProfileBlock["water-height"] = 20;
499 simProfileBlock["agents"] = 1;
500 simProfileBlock["map-image-id"] = simProfile.regionMapTextureID.ToStringHyphenated();
501
502 // For Sugilite compatibility
503 simProfileBlock["regionhandle"] = simProfile.regionHandle.ToString();
504 simProfileBlock["sim_ip"] = simProfile.serverIP.ToString();
505 simProfileBlock["sim_port"] = simProfile.serverPort.ToString();
506 simProfileBlock["sim_uri"] = simProfile.serverURI.ToString();
507 simProfileBlock["uuid"] = simProfile.UUID.ToStringHyphenated();
508
509 simProfileList.Add(simProfileBlock);
510 }
511 }
512 }
513 MainLog.Instance.Verbose("World map request processed, returned " + simProfileList.Count.ToString() + " region(s) in range via Standard Mode");
514 }
515
516 responseData["sim-profiles"] = simProfileList;
517
518 return response;
519 }
520
521
522
523 /// <summary>
524 /// Performs a REST Get Operation
525 /// </summary>
526 /// <param name="request"></param>
527 /// <param name="path"></param>
528 /// <param name="param"></param>
529 /// <returns></returns>
530 public string RestGetRegionMethod(string request, string path, string param)
531 {
532 return RestGetSimMethod("", "/sims/", param);
533 }
534
535 /// <summary>
536 /// Performs a REST Set Operation
537 /// </summary>
538 /// <param name="request"></param>
539 /// <param name="path"></param>
540 /// <param name="param"></param>
541 /// <returns></returns>
542 public string RestSetRegionMethod(string request, string path, string param)
543 {
544 return RestSetSimMethod("", "/sims/", param);
545 }
546
547 /// <summary>
548 /// Returns information about a sim via a REST Request
549 /// </summary>
550 /// <param name="request"></param>
551 /// <param name="path"></param>
552 /// <param name="param"></param>
553 /// <returns>Information about the sim in XML</returns>
554 public string RestGetSimMethod(string request, string path, string param)
555 {
556 string respstring = String.Empty;
557
558 SimProfileData TheSim;
559 LLUUID UUID = new LLUUID(param);
560 TheSim = getRegion(UUID);
561
562 if (!(TheSim == null))
563 {
564 respstring = "<Root>";
565 respstring += "<authkey>" + TheSim.regionSendKey + "</authkey>";
566 respstring += "<sim>";
567 respstring += "<uuid>" + TheSim.UUID.ToString() + "</uuid>";
568 respstring += "<regionname>" + TheSim.regionName + "</regionname>";
569 respstring += "<sim_ip>" + TheSim.serverIP + "</sim_ip>";
570 respstring += "<sim_port>" + TheSim.serverPort.ToString() + "</sim_port>";
571 respstring += "<region_locx>" + TheSim.regionLocX.ToString() + "</region_locx>";
572 respstring += "<region_locy>" + TheSim.regionLocY.ToString() + "</region_locy>";
573 respstring += "<estate_id>1</estate_id>";
574 respstring += "</sim>";
575 respstring += "</Root>";
576 }
577
578 return respstring;
579 }
580
581 /// <summary>
582 /// Creates or updates a sim via a REST Method Request
583 /// BROKEN with SQL Update
584 /// </summary>
585 /// <param name="request"></param>
586 /// <param name="path"></param>
587 /// <param name="param"></param>
588 /// <returns>"OK" or an error</returns>
589 public string RestSetSimMethod(string request, string path, string param)
590 {
591 Console.WriteLine("Processing region update via REST method");
592 SimProfileData TheSim;
593 TheSim = getRegion(new LLUUID(param));
594 if ((TheSim) == null)
595 {
596 TheSim = new SimProfileData();
597 LLUUID UUID = new LLUUID(param);
598 TheSim.UUID = UUID;
599 TheSim.regionRecvKey = config.SimRecvKey;
600 }
601
602 XmlDocument doc = new XmlDocument();
603 doc.LoadXml(request);
604 XmlNode rootnode = doc.FirstChild;
605 XmlNode authkeynode = rootnode.ChildNodes[0];
606 if (authkeynode.Name != "authkey")
607 {
608 return "ERROR! bad XML - expected authkey tag";
609 }
610
611 XmlNode simnode = rootnode.ChildNodes[1];
612 if (simnode.Name != "sim")
613 {
614 return "ERROR! bad XML - expected sim tag";
615 }
616
617 //TheSim.regionSendKey = Cfg;
618 TheSim.regionRecvKey = config.SimRecvKey;
619 TheSim.regionSendKey = config.SimSendKey;
620 TheSim.regionSecret = config.SimRecvKey;
621 TheSim.regionDataURI = "";
622 TheSim.regionAssetURI = config.DefaultAssetServer;
623 TheSim.regionAssetRecvKey = config.AssetRecvKey;
624 TheSim.regionAssetSendKey = config.AssetSendKey;
625 TheSim.regionUserURI = config.DefaultUserServer;
626 TheSim.regionUserSendKey = config.UserSendKey;
627 TheSim.regionUserRecvKey = config.UserRecvKey;
628
629
630 for (int i = 0; i < simnode.ChildNodes.Count; i++)
631 {
632 switch (simnode.ChildNodes[i].Name)
633 {
634 case "regionname":
635 TheSim.regionName = simnode.ChildNodes[i].InnerText;
636 break;
637
638 case "sim_ip":
639 TheSim.serverIP = simnode.ChildNodes[i].InnerText;
640 break;
641
642 case "sim_port":
643 TheSim.serverPort = Convert.ToUInt32(simnode.ChildNodes[i].InnerText);
644 break;
645
646 case "region_locx":
647 TheSim.regionLocX = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
648 TheSim.regionHandle = Helpers.UIntsToLong((TheSim.regionLocX * 256), (TheSim.regionLocY * 256));
649 break;
650
651 case "region_locy":
652 TheSim.regionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
653 TheSim.regionHandle = Helpers.UIntsToLong((TheSim.regionLocX * 256), (TheSim.regionLocY * 256));
654 break;
655 }
656 }
657
658 TheSim.serverURI = "http://" + TheSim.serverIP + ":" + TheSim.serverPort + "/";
659
660 bool requirePublic = false;
661
662 if (requirePublic && (TheSim.serverIP.StartsWith("172.16") || TheSim.serverIP.StartsWith("192.168") || TheSim.serverIP.StartsWith("10.") || TheSim.serverIP.StartsWith("0.") || TheSim.serverIP.StartsWith("255.")))
663 {
664 return "ERROR! Servers must register with public addresses.";
665 }
666
667
668 try
669 {
670 MainLog.Instance.Verbose("Updating / adding via " + _plugins.Count + " storage provider(s) registered.");
671 foreach (KeyValuePair<string, IGridData> kvp in _plugins)
672 {
673 try
674 {
675 //Check reservations
676 ReservationData reserveData = kvp.Value.GetReservationAtPoint(TheSim.regionLocX, TheSim.regionLocY);
677 if ((reserveData != null && reserveData.gridRecvKey == TheSim.regionRecvKey) || (reserveData == null && authkeynode.InnerText != TheSim.regionRecvKey))
678 {
679 kvp.Value.AddProfile(TheSim);
680 MainLog.Instance.Verbose("New sim added to grid (" + TheSim.regionName + ")");
681 logToDB(TheSim.UUID.ToStringHyphenated(), "RestSetSimMethod", "", 5, "Region successfully updated and connected to grid.");
682 }
683 else
684 {
685 MainLog.Instance.Warn("Unable to update region (RestSetSimMethod): Incorrect reservation auth key.");// Wanted: " + reserveData.gridRecvKey + ", Got: " + TheSim.regionRecvKey + ".");
686 return "Unable to update region (RestSetSimMethod): Incorrect auth key.";
687 }
688 }
689 catch (Exception e)
690 {
691 MainLog.Instance.Verbose("getRegionPlugin Handle " + kvp.Key + " unable to add new sim: " + e.ToString());
692 }
693 }
694 return "OK";
695 }
696 catch (Exception e)
697 {
698 return "ERROR! Could not save to database! (" + e.ToString() + ")";
699 }
700 }
701
702 }
703}
diff --git a/OpenSim/Grid/GridServer/Main.cs b/OpenSim/Grid/GridServer/Main.cs
new file mode 100644
index 0000000..dc5e4fa
--- /dev/null
+++ b/OpenSim/Grid/GridServer/Main.cs
@@ -0,0 +1,258 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using System.Reflection;
31using System.Threading;
32using System.Timers;
33using OpenSim.Framework.Console;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Servers;
36using OpenSim.GenericConfig;
37using Timer=System.Timers.Timer;
38
39namespace OpenSim.Grid.GridServer
40{
41 /// <summary>
42 /// </summary>
43 public class OpenGrid_Main : conscmd_callback
44 {
45 private string ConfigDll = "OpenSim.Grid.GridServer.Config.dll";
46 private string GridDll = "OpenSim.Framework.Data.MySQL.dll";
47 public GridConfig Cfg;
48
49 public static OpenGrid_Main thegrid;
50 protected IGenericConfig localXMLConfig;
51
52 public static bool setuponly;
53
54 //public LLUUID highestUUID;
55
56 // private SimProfileManager m_simProfileManager;
57
58 private GridManager m_gridManager;
59
60 private LogBase m_console;
61
62 [STAThread]
63 public static void Main(string[] args)
64 {
65 if (args.Length > 0)
66 {
67 if (args[0] == "-setuponly") setuponly = true;
68 }
69 Console.WriteLine("Starting...\n");
70
71 thegrid = new OpenGrid_Main();
72 thegrid.Startup();
73
74 thegrid.Work();
75 }
76
77 private void Work()
78 {
79 m_console.Notice("Enter help for a list of commands\n");
80
81 while (true)
82 {
83 m_console.MainLogPrompt();
84 }
85 }
86
87 private OpenGrid_Main()
88 {
89 m_console = new LogBase("opengrid-gridserver-console.log", "OpenGrid", this, false);
90 MainLog.Instance = m_console;
91
92
93 }
94
95 public void managercallback(string cmd)
96 {
97 switch (cmd)
98 {
99 case "shutdown":
100 RunCmd("shutdown", new string[0]);
101 break;
102 }
103 }
104
105
106 public void Startup()
107 {
108 this.localXMLConfig = new XmlConfig("GridServerConfig.xml");
109 this.localXMLConfig.LoadData();
110 this.ConfigDB(this.localXMLConfig);
111 this.localXMLConfig.Close();
112
113 m_console.Verbose( "Main.cs:Startup() - Loading configuration");
114 Cfg = this.LoadConfigDll(this.ConfigDll);
115 Cfg.InitConfig();
116 if (setuponly) Environment.Exit(0);
117
118 m_console.Verbose( "Main.cs:Startup() - Connecting to Storage Server");
119 m_gridManager = new GridManager();
120 m_gridManager.AddPlugin(GridDll); // Made of win
121 m_gridManager.config = Cfg;
122
123 m_console.Verbose( "Main.cs:Startup() - Starting HTTP process");
124 BaseHttpServer httpServer = new BaseHttpServer(8001);
125 //GridManagementAgent GridManagerAgent = new GridManagementAgent(httpServer, "gridserver", Cfg.SimSendKey, Cfg.SimRecvKey, managercallback);
126
127 httpServer.AddXmlRPCHandler("simulator_login", m_gridManager.XmlRpcSimulatorLoginMethod);
128 httpServer.AddXmlRPCHandler("simulator_data_request", m_gridManager.XmlRpcSimulatorDataRequestMethod);
129 httpServer.AddXmlRPCHandler("map_block", m_gridManager.XmlRpcMapBlockMethod);
130
131 httpServer.AddStreamHandler(new RestStreamHandler("GET", "/sims/", m_gridManager.RestGetSimMethod ));
132 httpServer.AddStreamHandler(new RestStreamHandler("POST", "/sims/", m_gridManager.RestSetSimMethod ));
133
134 httpServer.AddStreamHandler( new RestStreamHandler("GET", "/regions/", m_gridManager.RestGetRegionMethod ));
135 httpServer.AddStreamHandler( new RestStreamHandler("POST","/regions/", m_gridManager.RestSetRegionMethod ));
136
137 //httpServer.AddRestHandler("GET", "/sims/", m_gridManager.RestGetSimMethod);
138 //httpServer.AddRestHandler("POST", "/sims/", m_gridManager.RestSetSimMethod);
139 //httpServer.AddRestHandler("GET", "/regions/", m_gridManager.RestGetRegionMethod);
140 //httpServer.AddRestHandler("POST", "/regions/", m_gridManager.RestSetRegionMethod);
141
142 httpServer.Start();
143
144 m_console.Verbose( "Main.cs:Startup() - Starting sim status checker");
145
146 Timer simCheckTimer = new Timer(3600000 * 3); // 3 Hours between updates.
147 simCheckTimer.Elapsed += new ElapsedEventHandler(CheckSims);
148 simCheckTimer.Enabled = true;
149 }
150
151 private GridConfig LoadConfigDll(string dllName)
152 {
153 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
154 GridConfig config = null;
155
156 foreach (Type pluginType in pluginAssembly.GetTypes())
157 {
158 if (pluginType.IsPublic)
159 {
160 if (!pluginType.IsAbstract)
161 {
162 Type typeInterface = pluginType.GetInterface("IGridConfig", true);
163
164 if (typeInterface != null)
165 {
166 IGridConfig plug = (IGridConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
167 config = plug.GetConfigObject();
168 break;
169 }
170
171 typeInterface = null;
172 }
173 }
174 }
175 pluginAssembly = null;
176 return config;
177 }
178
179 public void CheckSims(object sender, ElapsedEventArgs e)
180 {
181 /*
182 foreach (SimProfileBase sim in m_simProfileManager.SimProfiles.Values)
183 {
184 string SimResponse = "";
185 try
186 {
187 WebRequest CheckSim = WebRequest.Create("http://" + sim.sim_ip + ":" + sim.sim_port.ToString() + "/checkstatus/");
188 CheckSim.Method = "GET";
189 CheckSim.ContentType = "text/plaintext";
190 CheckSim.ContentLength = 0;
191
192 StreamWriter stOut = new StreamWriter(CheckSim.GetRequestStream(), System.Text.Encoding.ASCII);
193 stOut.Write("");
194 stOut.Close();
195
196 StreamReader stIn = new StreamReader(CheckSim.GetResponse().GetResponseStream());
197 SimResponse = stIn.ReadToEnd();
198 stIn.Close();
199 }
200 catch
201 {
202 }
203
204 if (SimResponse == "OK")
205 {
206 m_simProfileManager.SimProfiles[sim.UUID].online = true;
207 }
208 else
209 {
210 m_simProfileManager.SimProfiles[sim.UUID].online = false;
211 }
212 }
213 */
214 }
215
216 public void RunCmd(string cmd, string[] cmdparams)
217 {
218 switch (cmd)
219 {
220 case "help":
221 m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)");
222 break;
223
224 case "shutdown":
225 m_console.Close();
226 Environment.Exit(0);
227 break;
228 }
229 }
230
231 public void Show(string ShowWhat)
232 {
233 }
234
235 private void ConfigDB(IGenericConfig configData)
236 {
237 try
238 {
239 string attri = "";
240 attri = configData.GetAttribute("DataBaseProvider");
241 if (attri == "")
242 {
243 GridDll = "OpenSim.Framework.Data.DB4o.dll";
244 configData.SetAttribute("DataBaseProvider", "OpenSim.Framework.Data.DB4o.dll");
245 }
246 else
247 {
248 GridDll = attri;
249 }
250 configData.Commit();
251 }
252 catch
253 {
254
255 }
256 }
257 }
258}
diff --git a/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..62a68a8
--- /dev/null
+++ b/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,58 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// General Information about an assembly is controlled through the following
31// set of attributes. Change these attribute values to modify the information
32// associated with an assembly.
33[assembly: AssemblyTitle("OGS-GridServer")]
34[assembly: AssemblyDescription("")]
35[assembly: AssemblyConfiguration("")]
36[assembly: AssemblyCompany("")]
37[assembly: AssemblyProduct("OGS-GridServer")]
38[assembly: AssemblyCopyright("Copyright © 2007")]
39[assembly: AssemblyTrademark("")]
40[assembly: AssemblyCulture("")]
41
42// Setting ComVisible to false makes the types in this assembly not visible
43// to COM components. If you need to access a type in this assembly from
44// COM, set the ComVisible attribute to true on that type.
45[assembly: ComVisible(false)]
46
47// The following GUID is for the ID of the typelib if this project is exposed to COM
48[assembly: Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")]
49
50// Version information for an assembly consists of the following four values:
51//
52// Major Version
53// Minor Version
54// Build Number
55// Revision
56//
57[assembly: AssemblyVersion("1.0.0.0")]
58[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Grid/InventoryServer/InventoryManager.cs b/OpenSim/Grid/InventoryServer/InventoryManager.cs
new file mode 100644
index 0000000..9ca9b5e
--- /dev/null
+++ b/OpenSim/Grid/InventoryServer/InventoryManager.cs
@@ -0,0 +1,125 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using System.Collections.Generic;
31using System.Text;
32using OpenGrid.Framework.Data;
33using libsecondlife;
34using System.Reflection;
35
36using System.Xml;
37using Nwc.XmlRpc;
38using OpenSim.Framework.Sims;
39using OpenSim.Framework.Inventory;
40using OpenSim.Framework.Utilities;
41
42using System.Security.Cryptography;
43
44namespace OpenGridServices.InventoryServer
45{
46 class InventoryManager
47 {
48 Dictionary<string, IInventoryData> _plugins = new Dictionary<string, IInventoryData>();
49
50 /// <summary>
51 /// Adds a new inventory server plugin - user servers will be requested in the order they were loaded.
52 /// </summary>
53 /// <param name="FileName">The filename to the inventory server plugin DLL</param>
54 public void AddPlugin(string FileName)
55 {
56 OpenSim.Framework.Console.MainConsole.Instance.Verbose( "Invenstorage: Attempting to load " + FileName);
57 Assembly pluginAssembly = Assembly.LoadFrom(FileName);
58
59 OpenSim.Framework.Console.MainConsole.Instance.Verbose( "Invenstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces.");
60 foreach (Type pluginType in pluginAssembly.GetTypes())
61 {
62 if (!pluginType.IsAbstract)
63 {
64 Type typeInterface = pluginType.GetInterface("IInventoryData", true);
65
66 if (typeInterface != null)
67 {
68 IInventoryData plug = (IInventoryData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
69 plug.Initialise();
70 this._plugins.Add(plug.getName(), plug);
71 OpenSim.Framework.Console.MainConsole.Instance.Verbose( "Invenstorage: Added IUserData Interface");
72 }
73
74 typeInterface = null;
75 }
76 }
77
78 pluginAssembly = null;
79 }
80
81 public List<InventoryFolderBase> getRootFolders(LLUUID user)
82 {
83 foreach (KeyValuePair<string, IInventoryData> kvp in _plugins)
84 {
85 try
86 {
87 return kvp.Value.getUserRootFolders(user);
88 }
89 catch (Exception e)
90 {
91 OpenSim.Framework.Console.MainConsole.Instance.Notice("Unable to get root folders via " + kvp.Key + " (" + e.ToString() + ")");
92 }
93 }
94 return null;
95 }
96
97 public XmlRpcResponse XmlRpcInventoryRequest(XmlRpcRequest request)
98 {
99 XmlRpcResponse response = new XmlRpcResponse();
100 Hashtable requestData = (Hashtable)request.Params[0];
101
102 Hashtable responseData = new Hashtable();
103
104 // Stuff happens here
105
106 if (requestData.ContainsKey("Access-type"))
107 {
108 if (requestData["access-type"] == "rootfolders")
109 {
110// responseData["rootfolders"] =
111 }
112 }
113 else
114 {
115 responseData["error"] = "No access-type specified.";
116 }
117
118
119 // Stuff stops happening here
120
121 response.Value = responseData;
122 return response;
123 }
124 }
125}
diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs
new file mode 100644
index 0000000..f479a79
--- /dev/null
+++ b/OpenSim/Grid/InventoryServer/Main.cs
@@ -0,0 +1,87 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using System.Collections.Generic;
31using System.Reflection;
32using System.IO;
33using System.Text;
34using libsecondlife;
35using OpenSim.Framework.User;
36using OpenSim.Framework.Sims;
37using OpenSim.Framework.Inventory;
38using OpenSim.Framework.Interfaces;
39using OpenSim.Framework.Console;
40using OpenSim.Servers;
41using OpenSim.Framework.Utilities;
42
43namespace OpenGridServices.InventoryServer
44{
45 public class OpenInventory_Main : BaseServer, conscmd_callback
46 {
47 ConsoleBase m_console;
48 InventoryManager m_inventoryManager;
49
50 public static void Main(string[] args)
51 {
52 }
53
54 public OpenInventory_Main()
55 {
56 m_console = new ConsoleBase("opengrid-inventory-console.log", "OpenInventory", this, false);
57 MainConsole.Instance = m_console;
58 }
59
60 public void Startup()
61 {
62 MainConsole.Instance.Notice("Initialising inventory manager...");
63 m_inventoryManager = new InventoryManager();
64
65 MainConsole.Instance.Notice("Starting HTTP server");
66 BaseHttpServer httpServer = new BaseHttpServer(8004);
67
68 httpServer.AddXmlRPCHandler("rootfolders", m_inventoryManager.XmlRpcInventoryRequest);
69 //httpServer.AddRestHandler("GET","/rootfolders/",Rest
70 }
71
72 public void RunCmd(string cmd, string[] cmdparams)
73 {
74 switch (cmd)
75 {
76 case "shutdown":
77 m_console.Close();
78 Environment.Exit(0);
79 break;
80 }
81 }
82
83 public void Show(string ShowWhat)
84 {
85 }
86 }
87}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager.mds b/OpenSim/Grid/Manager/OpenGridServices.Manager.mds
new file mode 100644
index 0000000..ed7bc24
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager.mds
@@ -0,0 +1,16 @@
1<Combine name="OpenGridServices.Manager" fileversion="2.0" outputpath="../../mono-1.2.3.1/lib/monodevelop/bin" MakePkgConfig="False" MakeLibPC="True">
2 <Configurations active="Debug">
3 <Configuration name="Debug" ctype="CombineConfiguration">
4 <Entry build="True" name="OpenGridServices.Manager" configuration="Debug" />
5 </Configuration>
6 <Configuration name="Release" ctype="CombineConfiguration">
7 <Entry build="True" name="OpenGridServices.Manager" configuration="Release" />
8 </Configuration>
9 </Configurations>
10 <StartMode startupentry="OpenGridServices.Manager" single="True">
11 <Execute type="None" entry="OpenGridServices.Manager" />
12 </StartMode>
13 <Entries>
14 <Entry filename="./OpenGridServices.Manager/OpenGridServices.Manager.mdp" />
15 </Entries>
16</Combine> \ No newline at end of file
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager.userprefs b/OpenSim/Grid/Manager/OpenGridServices.Manager.userprefs
new file mode 100644
index 0000000..f221509
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager.userprefs
@@ -0,0 +1,39 @@
1<?xml version="1.0"?>
2<UserCombinePreferences filename="/home/gareth/OpenGridServices.Manager/OpenGridServices.Manager.mds">
3 <Files>
4 <File filename="Welcome" />
5 <File filename="./OpenGridServices.Manager/MainWindow.cs" />
6 <File filename="./OpenGridServices.Manager/ConnectToGridServerDialog.cs" />
7 <File filename="./OpenGridServices.Manager/Main.cs" />
8 </Files>
9 <Views>
10 <ViewMemento Id="MonoDevelop.Ide.Gui.Pads.ProjectPad">
11 <TreeView>
12 <Node expanded="True">
13 <Node name="OpenGridServices.Manager" expanded="True">
14 <Node name="References" expanded="True" />
15 <Node name="Resources" expanded="True" />
16 <Node name="UserInterface" expanded="True" />
17 <Node name="ConnectToGridServerDialog.cs" expanded="False" selected="True" />
18 </Node>
19 </Node>
20 </TreeView>
21 </ViewMemento>
22 <ViewMemento Id="MonoDevelop.Ide.Gui.Pads.ClassPad">
23 <TreeView>
24 <Node expanded="True" />
25 </TreeView>
26 </ViewMemento>
27 <ViewMemento Id="MonoDevelop.NUnit.TestPad">
28 <TreeView>
29 <Node expanded="False" />
30 </TreeView>
31 </ViewMemento>
32 </Views>
33 <Properties>
34 <Properties>
35 <Property key="ActiveConfiguration" value="Debug" />
36 <Property key="ActiveWindow" value="/home/gareth/OpenGridServices.Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs" />
37 </Properties>
38 </Properties>
39</UserCombinePreferences> \ No newline at end of file
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager.usertasks b/OpenSim/Grid/Manager/OpenGridServices.Manager.usertasks
new file mode 100644
index 0000000..d887d0e
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager.usertasks
@@ -0,0 +1,2 @@
1<?xml version="1.0" encoding="utf-8"?>
2<ArrayOfUserTask xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> \ No newline at end of file
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/AssemblyInfo.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/AssemblyInfo.cs
new file mode 100644
index 0000000..af4e275
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/AssemblyInfo.cs
@@ -0,0 +1,32 @@
1using System.Reflection;
2using System.Runtime.CompilerServices;
3
4// Information about this assembly is defined by the following
5// attributes.
6//
7// change them to the information which is associated with the assembly
8// you compile.
9
10[assembly: AssemblyTitle("")]
11[assembly: AssemblyDescription("")]
12[assembly: AssemblyConfiguration("")]
13[assembly: AssemblyCompany("")]
14[assembly: AssemblyProduct("")]
15[assembly: AssemblyCopyright("")]
16[assembly: AssemblyTrademark("")]
17[assembly: AssemblyCulture("")]
18
19// The assembly version has following format :
20//
21// Major.Minor.Build.Revision
22//
23// You can specify all values by your own or you can build default build and revision
24// numbers with the '*' character (the default):
25
26[assembly: AssemblyVersion("1.0.*")]
27
28// The following attributes specify the key for the sign of your assembly. See the
29// .NET Framework documentation for more information about signing.
30// This is not required, if you don't want signing let these attributes like they're.
31[assembly: AssemblyDelaySign(false)]
32[assembly: AssemblyKeyFile("")]
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/BlockingQueue.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/BlockingQueue.cs
new file mode 100644
index 0000000..83685fc
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/BlockingQueue.cs
@@ -0,0 +1,33 @@
1using System;
2using System.Threading;
3using System.Collections.Generic;
4using System.Text;
5
6namespace OpenGridServices.Manager
7{
8 public class BlockingQueue<T>
9 {
10 private Queue<T> _queue = new Queue<T>();
11 private object _queueSync = new object();
12
13 public void Enqueue(T value)
14 {
15 lock (_queueSync)
16 {
17 _queue.Enqueue(value);
18 Monitor.Pulse(_queueSync);
19 }
20 }
21
22 public T Dequeue()
23 {
24 lock (_queueSync)
25 {
26 if (_queue.Count < 1)
27 Monitor.Wait(_queueSync);
28
29 return _queue.Dequeue();
30 }
31 }
32 }
33}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/Connect to grid server.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/Connect to grid server.cs
new file mode 100644
index 0000000..0d509ef
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/Connect to grid server.cs
@@ -0,0 +1,16 @@
1
2using System;
3
4namespace OpenGridServices.Manager
5{
6
7
8 public partial class Connect to grid server : Gtk.Dialog
9 {
10
11 public Connect to grid server()
12 {
13 this.Build();
14 }
15 }
16}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs
new file mode 100644
index 0000000..8a80b1d
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs
@@ -0,0 +1,29 @@
1using Gtk;
2using System;
3
4namespace OpenGridServices.Manager {
5 public partial class ConnectToGridServerDialog : Gtk.Dialog
6 {
7
8 public ConnectToGridServerDialog()
9 {
10 this.Build();
11 }
12
13 protected virtual void OnResponse(object o, Gtk.ResponseArgs args)
14 {
15 switch(args.ResponseId) {
16 case Gtk.ResponseType.Ok:
17 MainClass.PendingOperations.Enqueue("connect_to_gridserver " + this.entry1.Text + " " + this.entry2.Text + " " + this.entry3.Text);
18 break;
19
20 case Gtk.ResponseType.Cancel:
21 break;
22 }
23 this.Hide();
24
25 }
26
27 }
28
29} \ No newline at end of file
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/GridServerConnectionManager.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/GridServerConnectionManager.cs
new file mode 100644
index 0000000..6b632d6
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/GridServerConnectionManager.cs
@@ -0,0 +1,106 @@
1using Nwc.XmlRpc;
2using System;
3using System.Net;
4using System.IO;
5using System.Xml;
6using System.Collections;
7using System.Collections.Generic;
8using libsecondlife;
9
10namespace OpenGridServices.Manager
11{
12 public class GridServerConnectionManager
13 {
14 private string ServerURL;
15 public LLUUID SessionID;
16 public bool connected=false;
17
18 public RegionBlock[][] WorldMap;
19
20 public bool Connect(string GridServerURL, string username, string password)
21 {
22 try {
23 this.ServerURL=GridServerURL;
24 Hashtable LoginParamsHT = new Hashtable();
25 LoginParamsHT["username"]=username;
26 LoginParamsHT["password"]=password;
27 ArrayList LoginParams = new ArrayList();
28 LoginParams.Add(LoginParamsHT);
29 XmlRpcRequest GridLoginReq = new XmlRpcRequest("manager_login",LoginParams);
30 XmlRpcResponse GridResp = GridLoginReq.Send(ServerURL,3000);
31 if(GridResp.IsFault) {
32 connected=false;
33 return false;
34 } else {
35 Hashtable gridrespData = (Hashtable)GridResp.Value;
36 this.SessionID = new LLUUID((string)gridrespData["session_id"]);
37 connected=true;
38 return true;
39 }
40 } catch(Exception e) {
41 Console.WriteLine(e.ToString());
42 connected=false;
43 return false;
44 }
45 }
46
47 public void DownloadMap()
48 {
49 System.Net.WebClient mapdownloader = new WebClient();
50 Stream regionliststream = mapdownloader.OpenRead(ServerURL + "/regionlist");
51
52 RegionBlock TempRegionData;
53
54 XmlDocument doc = new XmlDocument();
55 doc.Load(regionliststream);
56 regionliststream.Close();
57 XmlNode rootnode = doc.FirstChild;
58 if (rootnode.Name != "regions")
59 {
60 // TODO - ERROR!
61 }
62
63 for(int i=0; i<=rootnode.ChildNodes.Count; i++)
64 {
65 if(rootnode.ChildNodes.Item(i).Name != "region") {
66 // TODO - ERROR!
67 } else {
68 TempRegionData = new RegionBlock();
69
70
71 }
72 }
73 }
74
75 public bool RestartServer()
76 {
77 return true;
78 }
79
80 public bool ShutdownServer()
81 {
82 try {
83 Hashtable ShutdownParamsHT = new Hashtable();
84 ArrayList ShutdownParams = new ArrayList();
85 ShutdownParamsHT["session_id"]=this.SessionID.ToString();
86 ShutdownParams.Add(ShutdownParamsHT);
87 XmlRpcRequest GridShutdownReq = new XmlRpcRequest("shutdown",ShutdownParams);
88 XmlRpcResponse GridResp = GridShutdownReq.Send(this.ServerURL,3000);
89 if(GridResp.IsFault) {
90 return false;
91 } else {
92 connected=false;
93 return true;
94 }
95 } catch(Exception e) {
96 Console.WriteLine(e.ToString());
97 return false;
98 }
99 }
100
101 public void DisconnectServer()
102 {
103 this.connected=false;
104 }
105 }
106}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/Main.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/Main.cs
new file mode 100644
index 0000000..42e09e0
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/Main.cs
@@ -0,0 +1,96 @@
1// project created on 5/14/2007 at 2:04 PM
2using System;
3using System.Threading;
4using Gtk;
5
6namespace OpenGridServices.Manager
7{
8 class MainClass
9 {
10
11 public static bool QuitReq=false;
12 public static BlockingQueue<string> PendingOperations = new BlockingQueue<string>();
13
14 private static Thread OperationsRunner;
15
16 private static GridServerConnectionManager gridserverConn;
17
18 private static MainWindow win;
19
20 public static void DoMainLoop()
21 {
22 while(!QuitReq)
23 {
24 Application.RunIteration();
25 }
26 }
27
28 public static void RunOperations()
29 {
30 string operation;
31 string cmd;
32 char[] sep = new char[1];
33 sep[0]=' ';
34 while(!QuitReq)
35 {
36 operation=PendingOperations.Dequeue();
37 Console.WriteLine(operation);
38 cmd = operation.Split(sep)[0];
39 switch(cmd) {
40 case "connect_to_gridserver":
41 win.SetStatus("Connecting to grid server...");
42 if(gridserverConn.Connect(operation.Split(sep)[1],operation.Split(sep)[2],operation.Split(sep)[3])) {
43 win.SetStatus("Connected OK with session ID:" + gridserverConn.SessionID);
44 win.SetGridServerConnected(true);
45 Thread.Sleep(3000);
46 win.SetStatus("Downloading region maps...");
47 gridserverConn.DownloadMap();
48 } else {
49 win.SetStatus("Could not connect");
50 }
51 break;
52
53 case "restart_gridserver":
54 win.SetStatus("Restarting grid server...");
55 if(gridserverConn.RestartServer()) {
56 win.SetStatus("Restarted server OK");
57 Thread.Sleep(3000);
58 win.SetStatus("");
59 } else {
60 win.SetStatus("Error restarting grid server!!!");
61 }
62 break;
63
64 case "shutdown_gridserver":
65 win.SetStatus("Shutting down grid server...");
66 if(gridserverConn.ShutdownServer()) {
67 win.SetStatus("Grid server shutdown");
68 win.SetGridServerConnected(false);
69 Thread.Sleep(3000);
70 win.SetStatus("");
71 } else {
72 win.SetStatus("Could not shutdown grid server!!!");
73 }
74 break;
75
76 case "disconnect_gridserver":
77 gridserverConn.DisconnectServer();
78 win.SetGridServerConnected(false);
79 break;
80 }
81 }
82 }
83
84 public static void Main (string[] args)
85 {
86 gridserverConn = new GridServerConnectionManager();
87 Application.Init ();
88 win = new MainWindow ();
89 win.Show ();
90 OperationsRunner = new Thread(new ThreadStart(RunOperations));
91 OperationsRunner.IsBackground=true;
92 OperationsRunner.Start();
93 DoMainLoop();
94 }
95 }
96} \ No newline at end of file
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/MainWindow.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/MainWindow.cs
new file mode 100644
index 0000000..1db38f0
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/MainWindow.cs
@@ -0,0 +1,76 @@
1using System;
2using Gtk;
3
4namespace OpenGridServices.Manager {
5 public partial class MainWindow: Gtk.Window
6 {
7 public MainWindow (): base (Gtk.WindowType.Toplevel)
8 {
9 Build ();
10 }
11
12 public void SetStatus(string statustext)
13 {
14 this.statusbar1.Pop(0);
15 this.statusbar1.Push(0,statustext);
16 }
17
18 public void DrawGrid(RegionBlock[][] regions)
19 {
20 for(int x=0; x<=regions.GetUpperBound(0); x++) {
21 for(int y=0; y<=regions.GetUpperBound(1); y++) {
22 Gdk.Image themap = new Gdk.Image(Gdk.ImageType.Fastest,Gdk.Visual.System,256,256);
23 this.drawingarea1.GdkWindow.DrawImage(new Gdk.GC(this.drawingarea1.GdkWindow),themap,0,0,x*256,y*256,256,256);
24 }
25 }
26 }
27
28 public void SetGridServerConnected(bool connected)
29 {
30 if(connected) {
31 this.ConnectToGridserver.Visible=false;
32 this.DisconnectFromGridServer.Visible=true;
33 } else {
34 this.ConnectToGridserver.Visible=true;
35 this.DisconnectFromGridServer.Visible=false;
36 }
37 }
38
39 protected void OnDeleteEvent (object sender, DeleteEventArgs a)
40 {
41 Application.Quit ();
42 MainClass.QuitReq=true;
43 a.RetVal = true;
44 }
45
46 protected virtual void QuitMenu(object sender, System.EventArgs e)
47 {
48 MainClass.QuitReq=true;
49 Application.Quit();
50 }
51
52 protected virtual void ConnectToGridServerMenu(object sender, System.EventArgs e)
53 {
54 ConnectToGridServerDialog griddialog = new ConnectToGridServerDialog ();
55 griddialog.Show();
56 }
57
58 protected virtual void RestartGridserverMenu(object sender, System.EventArgs e)
59 {
60 MainClass.PendingOperations.Enqueue("restart_gridserver");
61 }
62
63 protected virtual void ShutdownGridserverMenu(object sender, System.EventArgs e)
64 {
65 MainClass.PendingOperations.Enqueue("shutdown_gridserver");
66 }
67
68 protected virtual void DisconnectGridServerMenu(object sender, System.EventArgs e)
69 {
70 MainClass.PendingOperations.Enqueue("disconnect_gridserver");
71 }
72
73 }
74}
75
76 \ No newline at end of file
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.mdp b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.mdp
new file mode 100644
index 0000000..cfdc085
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.mdp
@@ -0,0 +1,43 @@
1<Project name="OpenGridServices.Manager" fileversion="2.0" language="C#" clr-version="Net_2_0" ctype="DotNetProject">
2 <Configurations active="Debug">
3 <Configuration name="Debug" ctype="DotNetProjectConfiguration">
4 <Output directory="./bin/Debug" assembly="OpenGridServices.Manager" />
5 <Build debugmode="True" target="Exe" />
6 <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
7 <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
8 </Configuration>
9 <Configuration name="Release" ctype="DotNetProjectConfiguration">
10 <Output directory="./bin/Release" assembly="OpenGridServices.Manager" />
11 <Build debugmode="False" target="Exe" />
12 <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
13 <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
14 </Configuration>
15 </Configurations>
16 <Contents>
17 <File name="./gtk-gui/gui.stetic" subtype="Code" buildaction="EmbedAsResource" />
18 <File name="./gtk-gui/generated.cs" subtype="Code" buildaction="Compile" />
19 <File name="./MainWindow.cs" subtype="Code" buildaction="Compile" />
20 <File name="./Main.cs" subtype="Code" buildaction="Compile" />
21 <File name="./AssemblyInfo.cs" subtype="Code" buildaction="Compile" />
22 <File name="./ConnectToGridServerDialog.cs" subtype="Code" buildaction="Compile" />
23 <File name="./Util.cs" subtype="Code" buildaction="Compile" />
24 <File name="./gtk-gui/OpenGridServices.Manager.MainWindow.cs" subtype="Code" buildaction="Compile" />
25 <File name="./BlockingQueue.cs" subtype="Code" buildaction="Compile" />
26 <File name="./gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs" subtype="Code" buildaction="Compile" />
27 <File name="./GridServerConnectionManager.cs" subtype="Code" buildaction="Compile" />
28 <File name="./RegionBlock.cs" subtype="Code" buildaction="Compile" />
29 </Contents>
30 <References>
31 <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
32 <ProjectReference type="Gac" localcopy="True" refto="gdk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
33 <ProjectReference type="Gac" localcopy="True" refto="glib-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
34 <ProjectReference type="Gac" localcopy="True" refto="glade-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
35 <ProjectReference type="Gac" localcopy="True" refto="pango-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
36 <ProjectReference type="Assembly" localcopy="True" refto="../../bin/libsecondlife.dll" />
37 <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
38 <ProjectReference type="Gac" localcopy="True" refto="Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
39 <ProjectReference type="Assembly" localcopy="True" refto="../../bin/XMLRPC.dll" />
40 <ProjectReference type="Gac" localcopy="True" refto="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
41 </References>
42 <GtkDesignInfo partialTypes="True" />
43</Project> \ No newline at end of file
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.pidb b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.pidb
new file mode 100644
index 0000000..44e7a61
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.pidb
Binary files differ
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/RegionBlock.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/RegionBlock.cs
new file mode 100644
index 0000000..00f7c65
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/RegionBlock.cs
@@ -0,0 +1,37 @@
1using System;
2using System.Xml;
3using libsecondlife;
4using OpenSim.Framework.Utilities;
5
6namespace OpenGridServices.Manager
7{
8
9
10 public class RegionBlock
11 {
12 public uint regloc_x;
13 public uint regloc_y;
14
15 public string httpd_url;
16
17 public string region_name;
18
19 public ulong regionhandle {
20 get { return Util.UIntsToLong(regloc_x*256,regloc_y*256); }
21 }
22
23 public Gdk.Pixbuf MiniMap;
24
25 public RegionBlock()
26 {
27 }
28
29 public void LoadFromXmlNode(XmlNode sourcenode)
30 {
31 this.regloc_x=Convert.ToUInt32(sourcenode.Attributes.GetNamedItem("loc_x").Value);
32 this.regloc_y=Convert.ToUInt32(sourcenode.Attributes.GetNamedItem("loc_y").Value);
33 this.region_name=sourcenode.Attributes.GetNamedItem("region_name").Value;
34 this.httpd_url=sourcenode.Attributes.GetNamedItem("httpd_url").Value;
35 }
36 }
37}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/Util.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/Util.cs
new file mode 100644
index 0000000..5bf7ff9
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/Util.cs
@@ -0,0 +1,133 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using libsecondlife;
5using libsecondlife.Packets;
6
7namespace OpenSim.Framework.Utilities
8{
9 public class Util
10 {
11 private static Random randomClass = new Random();
12 private static uint nextXferID = 5000;
13 private static object XferLock = new object();
14
15 public static ulong UIntsToLong(uint X, uint Y)
16 {
17 return Helpers.UIntsToLong(X, Y);
18 }
19
20 public static Random RandomClass
21 {
22 get
23 {
24 return randomClass;
25 }
26 }
27
28 public static uint GetNextXferID()
29 {
30 uint id = 0;
31 lock(XferLock)
32 {
33 id = nextXferID;
34 nextXferID++;
35 }
36 return id;
37 }
38
39 //public static int fast_distance2d(int x, int y)
40 //{
41 // x = System.Math.Abs(x);
42 // y = System.Math.Abs(y);
43
44 // int min = System.Math.Min(x, y);
45
46 // return (x + y - (min >> 1) - (min >> 2) + (min >> 4));
47 //}
48
49 public static string FieldToString(byte[] bytes)
50 {
51 return FieldToString(bytes, String.Empty);
52 }
53
54 /// <summary>
55 /// Convert a variable length field (byte array) to a string, with a
56 /// field name prepended to each line of the output
57 /// </summary>
58 /// <remarks>If the byte array has unprintable characters in it, a
59 /// hex dump will be put in the string instead</remarks>
60 /// <param name="bytes">The byte array to convert to a string</param>
61 /// <param name="fieldName">A field name to prepend to each line of output</param>
62 /// <returns>An ASCII string or a string containing a hex dump, minus
63 /// the null terminator</returns>
64 public static string FieldToString(byte[] bytes, string fieldName)
65 {
66 // Check for a common case
67 if (bytes.Length == 0) return String.Empty;
68
69 StringBuilder output = new StringBuilder();
70 bool printable = true;
71
72 for (int i = 0; i < bytes.Length; ++i)
73 {
74 // Check if there are any unprintable characters in the array
75 if ((bytes[i] < 0x20 || bytes[i] > 0x7E) && bytes[i] != 0x09
76 && bytes[i] != 0x0D && bytes[i] != 0x0A && bytes[i] != 0x00)
77 {
78 printable = false;
79 break;
80 }
81 }
82
83 if (printable)
84 {
85 if (fieldName.Length > 0)
86 {
87 output.Append(fieldName);
88 output.Append(": ");
89 }
90
91 if (bytes[bytes.Length - 1] == 0x00)
92 output.Append(UTF8Encoding.UTF8.GetString(bytes, 0, bytes.Length - 1));
93 else
94 output.Append(UTF8Encoding.UTF8.GetString(bytes));
95 }
96 else
97 {
98 for (int i = 0; i < bytes.Length; i += 16)
99 {
100 if (i != 0)
101 output.Append(Environment.NewLine);
102 if (fieldName.Length > 0)
103 {
104 output.Append(fieldName);
105 output.Append(": ");
106 }
107
108 for (int j = 0; j < 16; j++)
109 {
110 if ((i + j) < bytes.Length)
111 output.Append(String.Format("{0:X2} ", bytes[i + j]));
112 else
113 output.Append(" ");
114 }
115
116 for (int j = 0; j < 16 && (i + j) < bytes.Length; j++)
117 {
118 if (bytes[i + j] >= 0x20 && bytes[i + j] < 0x7E)
119 output.Append((char)bytes[i + j]);
120 else
121 output.Append(".");
122 }
123 }
124 }
125
126 return output.ToString();
127 }
128 public Util()
129 {
130
131 }
132 }
133}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs
new file mode 100644
index 0000000..da6739e
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs
@@ -0,0 +1,226 @@
1// ------------------------------------------------------------------------------
2// <autogenerated>
3// This code was generated by a tool.
4// Mono Runtime Version: 2.0.50727.42
5//
6// Changes to this file may cause incorrect behavior and will be lost if
7// the code is regenerated.
8// </autogenerated>
9// ------------------------------------------------------------------------------
10
11namespace OpenGridServices.Manager {
12
13
14 public partial class ConnectToGridServerDialog {
15
16 private Gtk.VBox vbox2;
17
18 private Gtk.VBox vbox3;
19
20 private Gtk.HBox hbox1;
21
22 private Gtk.Label label1;
23
24 private Gtk.Entry entry1;
25
26 private Gtk.HBox hbox2;
27
28 private Gtk.Label label2;
29
30 private Gtk.Entry entry2;
31
32 private Gtk.HBox hbox3;
33
34 private Gtk.Label label3;
35
36 private Gtk.Entry entry3;
37
38 private Gtk.Button button2;
39
40 private Gtk.Button button8;
41
42 protected virtual void Build() {
43 Stetic.Gui.Initialize();
44 // Widget OpenGridServices.Manager.ConnectToGridServerDialog
45 this.Events = ((Gdk.EventMask)(256));
46 this.Name = "OpenGridServices.Manager.ConnectToGridServerDialog";
47 this.Title = Mono.Unix.Catalog.GetString("Connect to Grid server");
48 this.WindowPosition = ((Gtk.WindowPosition)(4));
49 this.HasSeparator = false;
50 // Internal child OpenGridServices.Manager.ConnectToGridServerDialog.VBox
51 Gtk.VBox w1 = this.VBox;
52 w1.Events = ((Gdk.EventMask)(256));
53 w1.Name = "dialog_VBox";
54 w1.BorderWidth = ((uint)(2));
55 // Container child dialog_VBox.Gtk.Box+BoxChild
56 this.vbox2 = new Gtk.VBox();
57 this.vbox2.Name = "vbox2";
58 // Container child vbox2.Gtk.Box+BoxChild
59 this.vbox3 = new Gtk.VBox();
60 this.vbox3.Name = "vbox3";
61 // Container child vbox3.Gtk.Box+BoxChild
62 this.hbox1 = new Gtk.HBox();
63 this.hbox1.Name = "hbox1";
64 // Container child hbox1.Gtk.Box+BoxChild
65 this.label1 = new Gtk.Label();
66 this.label1.Name = "label1";
67 this.label1.Xalign = 1F;
68 this.label1.LabelProp = Mono.Unix.Catalog.GetString("Grid server URL: ");
69 this.label1.Justify = ((Gtk.Justification)(1));
70 this.hbox1.Add(this.label1);
71 Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.hbox1[this.label1]));
72 w2.Position = 0;
73 // Container child hbox1.Gtk.Box+BoxChild
74 this.entry1 = new Gtk.Entry();
75 this.entry1.CanFocus = true;
76 this.entry1.Name = "entry1";
77 this.entry1.Text = Mono.Unix.Catalog.GetString("http://gridserver:8001");
78 this.entry1.IsEditable = true;
79 this.entry1.MaxLength = 255;
80 this.entry1.InvisibleChar = '•';
81 this.hbox1.Add(this.entry1);
82 Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.hbox1[this.entry1]));
83 w3.Position = 1;
84 this.vbox3.Add(this.hbox1);
85 Gtk.Box.BoxChild w4 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox1]));
86 w4.Position = 0;
87 w4.Expand = false;
88 w4.Fill = false;
89 // Container child vbox3.Gtk.Box+BoxChild
90 this.hbox2 = new Gtk.HBox();
91 this.hbox2.Name = "hbox2";
92 // Container child hbox2.Gtk.Box+BoxChild
93 this.label2 = new Gtk.Label();
94 this.label2.Name = "label2";
95 this.label2.Xalign = 1F;
96 this.label2.LabelProp = Mono.Unix.Catalog.GetString("Username:");
97 this.label2.Justify = ((Gtk.Justification)(1));
98 this.hbox2.Add(this.label2);
99 Gtk.Box.BoxChild w5 = ((Gtk.Box.BoxChild)(this.hbox2[this.label2]));
100 w5.Position = 0;
101 // Container child hbox2.Gtk.Box+BoxChild
102 this.entry2 = new Gtk.Entry();
103 this.entry2.CanFocus = true;
104 this.entry2.Name = "entry2";
105 this.entry2.IsEditable = true;
106 this.entry2.InvisibleChar = '•';
107 this.hbox2.Add(this.entry2);
108 Gtk.Box.BoxChild w6 = ((Gtk.Box.BoxChild)(this.hbox2[this.entry2]));
109 w6.Position = 1;
110 this.vbox3.Add(this.hbox2);
111 Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox2]));
112 w7.Position = 1;
113 w7.Expand = false;
114 w7.Fill = false;
115 // Container child vbox3.Gtk.Box+BoxChild
116 this.hbox3 = new Gtk.HBox();
117 this.hbox3.Name = "hbox3";
118 // Container child hbox3.Gtk.Box+BoxChild
119 this.label3 = new Gtk.Label();
120 this.label3.Name = "label3";
121 this.label3.Xalign = 1F;
122 this.label3.LabelProp = Mono.Unix.Catalog.GetString("Password:");
123 this.label3.Justify = ((Gtk.Justification)(1));
124 this.hbox3.Add(this.label3);
125 Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.hbox3[this.label3]));
126 w8.Position = 0;
127 // Container child hbox3.Gtk.Box+BoxChild
128 this.entry3 = new Gtk.Entry();
129 this.entry3.CanFocus = true;
130 this.entry3.Name = "entry3";
131 this.entry3.IsEditable = true;
132 this.entry3.InvisibleChar = '•';
133 this.hbox3.Add(this.entry3);
134 Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.hbox3[this.entry3]));
135 w9.Position = 1;
136 this.vbox3.Add(this.hbox3);
137 Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox3]));
138 w10.Position = 2;
139 w10.Expand = false;
140 w10.Fill = false;
141 this.vbox2.Add(this.vbox3);
142 Gtk.Box.BoxChild w11 = ((Gtk.Box.BoxChild)(this.vbox2[this.vbox3]));
143 w11.Position = 2;
144 w11.Expand = false;
145 w11.Fill = false;
146 w1.Add(this.vbox2);
147 Gtk.Box.BoxChild w12 = ((Gtk.Box.BoxChild)(w1[this.vbox2]));
148 w12.Position = 0;
149 // Internal child OpenGridServices.Manager.ConnectToGridServerDialog.ActionArea
150 Gtk.HButtonBox w13 = this.ActionArea;
151 w13.Events = ((Gdk.EventMask)(256));
152 w13.Name = "OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea";
153 w13.Spacing = 6;
154 w13.BorderWidth = ((uint)(5));
155 w13.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
156 // Container child OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild
157 this.button2 = new Gtk.Button();
158 this.button2.CanDefault = true;
159 this.button2.CanFocus = true;
160 this.button2.Name = "button2";
161 this.button2.UseUnderline = true;
162 // Container child button2.Gtk.Container+ContainerChild
163 Gtk.Alignment w14 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
164 w14.Name = "GtkAlignment";
165 // Container child GtkAlignment.Gtk.Container+ContainerChild
166 Gtk.HBox w15 = new Gtk.HBox();
167 w15.Name = "GtkHBox";
168 w15.Spacing = 2;
169 // Container child GtkHBox.Gtk.Container+ContainerChild
170 Gtk.Image w16 = new Gtk.Image();
171 w16.Name = "image1";
172 w16.Pixbuf = Gtk.IconTheme.Default.LoadIcon("gtk-apply", 16, 0);
173 w15.Add(w16);
174 // Container child GtkHBox.Gtk.Container+ContainerChild
175 Gtk.Label w18 = new Gtk.Label();
176 w18.Name = "GtkLabel";
177 w18.LabelProp = Mono.Unix.Catalog.GetString("Connect");
178 w18.UseUnderline = true;
179 w15.Add(w18);
180 w14.Add(w15);
181 this.button2.Add(w14);
182 this.AddActionWidget(this.button2, -5);
183 Gtk.ButtonBox.ButtonBoxChild w22 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.button2]));
184 w22.Expand = false;
185 w22.Fill = false;
186 // Container child OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild
187 this.button8 = new Gtk.Button();
188 this.button8.CanDefault = true;
189 this.button8.CanFocus = true;
190 this.button8.Name = "button8";
191 this.button8.UseUnderline = true;
192 // Container child button8.Gtk.Container+ContainerChild
193 Gtk.Alignment w23 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
194 w23.Name = "GtkAlignment1";
195 // Container child GtkAlignment1.Gtk.Container+ContainerChild
196 Gtk.HBox w24 = new Gtk.HBox();
197 w24.Name = "GtkHBox1";
198 w24.Spacing = 2;
199 // Container child GtkHBox1.Gtk.Container+ContainerChild
200 Gtk.Image w25 = new Gtk.Image();
201 w25.Name = "image2";
202 w25.Pixbuf = Gtk.IconTheme.Default.LoadIcon("gtk-cancel", 16, 0);
203 w24.Add(w25);
204 // Container child GtkHBox1.Gtk.Container+ContainerChild
205 Gtk.Label w27 = new Gtk.Label();
206 w27.Name = "GtkLabel1";
207 w27.LabelProp = Mono.Unix.Catalog.GetString("Cancel");
208 w27.UseUnderline = true;
209 w24.Add(w27);
210 w23.Add(w24);
211 this.button8.Add(w23);
212 this.AddActionWidget(this.button8, -6);
213 Gtk.ButtonBox.ButtonBoxChild w31 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.button8]));
214 w31.Position = 1;
215 w31.Expand = false;
216 w31.Fill = false;
217 if ((this.Child != null)) {
218 this.Child.ShowAll();
219 }
220 this.DefaultWidth = 476;
221 this.DefaultHeight = 137;
222 this.Show();
223 this.Response += new Gtk.ResponseHandler(this.OnResponse);
224 }
225 }
226}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.MainWindow.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.MainWindow.cs
new file mode 100644
index 0000000..8798dac
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.MainWindow.cs
@@ -0,0 +1,256 @@
1// ------------------------------------------------------------------------------
2// <autogenerated>
3// This code was generated by a tool.
4// Mono Runtime Version: 2.0.50727.42
5//
6// Changes to this file may cause incorrect behavior and will be lost if
7// the code is regenerated.
8// </autogenerated>
9// ------------------------------------------------------------------------------
10
11namespace OpenGridServices.Manager {
12
13
14 public partial class MainWindow {
15
16 private Gtk.Action Grid;
17
18 private Gtk.Action User;
19
20 private Gtk.Action Asset;
21
22 private Gtk.Action Region;
23
24 private Gtk.Action Services;
25
26 private Gtk.Action ConnectToGridserver;
27
28 private Gtk.Action RestartWholeGrid;
29
30 private Gtk.Action ShutdownWholeGrid;
31
32 private Gtk.Action ExitGridManager;
33
34 private Gtk.Action ConnectToUserserver;
35
36 private Gtk.Action AccountManagment;
37
38 private Gtk.Action GlobalNotice;
39
40 private Gtk.Action DisableAllLogins;
41
42 private Gtk.Action DisableNonGodUsersOnly;
43
44 private Gtk.Action ShutdownUserServer;
45
46 private Gtk.Action ShutdownGridserverOnly;
47
48 private Gtk.Action RestartGridserverOnly;
49
50 private Gtk.Action DefaultLocalGridUserserver;
51
52 private Gtk.Action CustomUserserver;
53
54 private Gtk.Action RemoteGridDefaultUserserver;
55
56 private Gtk.Action DisconnectFromGridServer;
57
58 private Gtk.Action UploadAsset;
59
60 private Gtk.Action AssetManagement;
61
62 private Gtk.Action ConnectToAssetServer;
63
64 private Gtk.Action ConnectToDefaultAssetServerForGrid;
65
66 private Gtk.Action DefaultForLocalGrid;
67
68 private Gtk.Action DefaultForRemoteGrid;
69
70 private Gtk.Action CustomAssetServer;
71
72 private Gtk.VBox vbox1;
73
74 private Gtk.MenuBar menubar2;
75
76 private Gtk.HBox hbox1;
77
78 private Gtk.ScrolledWindow scrolledwindow1;
79
80 private Gtk.DrawingArea drawingarea1;
81
82 private Gtk.TreeView treeview1;
83
84 private Gtk.Statusbar statusbar1;
85
86 protected virtual void Build() {
87 Stetic.Gui.Initialize();
88 // Widget OpenGridServices.Manager.MainWindow
89 Gtk.UIManager w1 = new Gtk.UIManager();
90 Gtk.ActionGroup w2 = new Gtk.ActionGroup("Default");
91 this.Grid = new Gtk.Action("Grid", Mono.Unix.Catalog.GetString("Grid"), null, null);
92 this.Grid.HideIfEmpty = false;
93 this.Grid.ShortLabel = Mono.Unix.Catalog.GetString("Grid");
94 w2.Add(this.Grid, "<Alt><Mod2>g");
95 this.User = new Gtk.Action("User", Mono.Unix.Catalog.GetString("User"), null, null);
96 this.User.HideIfEmpty = false;
97 this.User.ShortLabel = Mono.Unix.Catalog.GetString("User");
98 w2.Add(this.User, null);
99 this.Asset = new Gtk.Action("Asset", Mono.Unix.Catalog.GetString("Asset"), null, null);
100 this.Asset.HideIfEmpty = false;
101 this.Asset.ShortLabel = Mono.Unix.Catalog.GetString("Asset");
102 w2.Add(this.Asset, null);
103 this.Region = new Gtk.Action("Region", Mono.Unix.Catalog.GetString("Region"), null, null);
104 this.Region.ShortLabel = Mono.Unix.Catalog.GetString("Region");
105 w2.Add(this.Region, null);
106 this.Services = new Gtk.Action("Services", Mono.Unix.Catalog.GetString("Services"), null, null);
107 this.Services.ShortLabel = Mono.Unix.Catalog.GetString("Services");
108 w2.Add(this.Services, null);
109 this.ConnectToGridserver = new Gtk.Action("ConnectToGridserver", Mono.Unix.Catalog.GetString("Connect to gridserver..."), null, "gtk-connect");
110 this.ConnectToGridserver.HideIfEmpty = false;
111 this.ConnectToGridserver.ShortLabel = Mono.Unix.Catalog.GetString("Connect to gridserver");
112 w2.Add(this.ConnectToGridserver, null);
113 this.RestartWholeGrid = new Gtk.Action("RestartWholeGrid", Mono.Unix.Catalog.GetString("Restart whole grid"), null, "gtk-refresh");
114 this.RestartWholeGrid.ShortLabel = Mono.Unix.Catalog.GetString("Restart whole grid");
115 w2.Add(this.RestartWholeGrid, null);
116 this.ShutdownWholeGrid = new Gtk.Action("ShutdownWholeGrid", Mono.Unix.Catalog.GetString("Shutdown whole grid"), null, "gtk-stop");
117 this.ShutdownWholeGrid.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown whole grid");
118 w2.Add(this.ShutdownWholeGrid, null);
119 this.ExitGridManager = new Gtk.Action("ExitGridManager", Mono.Unix.Catalog.GetString("Exit grid manager"), null, "gtk-close");
120 this.ExitGridManager.ShortLabel = Mono.Unix.Catalog.GetString("Exit grid manager");
121 w2.Add(this.ExitGridManager, null);
122 this.ConnectToUserserver = new Gtk.Action("ConnectToUserserver", Mono.Unix.Catalog.GetString("Connect to userserver"), null, "gtk-connect");
123 this.ConnectToUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Connect to userserver");
124 w2.Add(this.ConnectToUserserver, null);
125 this.AccountManagment = new Gtk.Action("AccountManagment", Mono.Unix.Catalog.GetString("Account managment"), null, "gtk-properties");
126 this.AccountManagment.ShortLabel = Mono.Unix.Catalog.GetString("Account managment");
127 w2.Add(this.AccountManagment, null);
128 this.GlobalNotice = new Gtk.Action("GlobalNotice", Mono.Unix.Catalog.GetString("Global notice"), null, "gtk-network");
129 this.GlobalNotice.ShortLabel = Mono.Unix.Catalog.GetString("Global notice");
130 w2.Add(this.GlobalNotice, null);
131 this.DisableAllLogins = new Gtk.Action("DisableAllLogins", Mono.Unix.Catalog.GetString("Disable all logins"), null, "gtk-no");
132 this.DisableAllLogins.ShortLabel = Mono.Unix.Catalog.GetString("Disable all logins");
133 w2.Add(this.DisableAllLogins, null);
134 this.DisableNonGodUsersOnly = new Gtk.Action("DisableNonGodUsersOnly", Mono.Unix.Catalog.GetString("Disable non-god users only"), null, "gtk-no");
135 this.DisableNonGodUsersOnly.ShortLabel = Mono.Unix.Catalog.GetString("Disable non-god users only");
136 w2.Add(this.DisableNonGodUsersOnly, null);
137 this.ShutdownUserServer = new Gtk.Action("ShutdownUserServer", Mono.Unix.Catalog.GetString("Shutdown user server"), null, "gtk-stop");
138 this.ShutdownUserServer.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown user server");
139 w2.Add(this.ShutdownUserServer, null);
140 this.ShutdownGridserverOnly = new Gtk.Action("ShutdownGridserverOnly", Mono.Unix.Catalog.GetString("Shutdown gridserver only"), null, "gtk-stop");
141 this.ShutdownGridserverOnly.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown gridserver only");
142 w2.Add(this.ShutdownGridserverOnly, null);
143 this.RestartGridserverOnly = new Gtk.Action("RestartGridserverOnly", Mono.Unix.Catalog.GetString("Restart gridserver only"), null, "gtk-refresh");
144 this.RestartGridserverOnly.ShortLabel = Mono.Unix.Catalog.GetString("Restart gridserver only");
145 w2.Add(this.RestartGridserverOnly, null);
146 this.DefaultLocalGridUserserver = new Gtk.Action("DefaultLocalGridUserserver", Mono.Unix.Catalog.GetString("Default local grid userserver"), null, null);
147 this.DefaultLocalGridUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Default local grid userserver");
148 w2.Add(this.DefaultLocalGridUserserver, null);
149 this.CustomUserserver = new Gtk.Action("CustomUserserver", Mono.Unix.Catalog.GetString("Custom userserver..."), null, null);
150 this.CustomUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Custom userserver");
151 w2.Add(this.CustomUserserver, null);
152 this.RemoteGridDefaultUserserver = new Gtk.Action("RemoteGridDefaultUserserver", Mono.Unix.Catalog.GetString("Remote grid default userserver..."), null, null);
153 this.RemoteGridDefaultUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Remote grid default userserver");
154 w2.Add(this.RemoteGridDefaultUserserver, null);
155 this.DisconnectFromGridServer = new Gtk.Action("DisconnectFromGridServer", Mono.Unix.Catalog.GetString("Disconnect from grid server"), null, "gtk-disconnect");
156 this.DisconnectFromGridServer.ShortLabel = Mono.Unix.Catalog.GetString("Disconnect from grid server");
157 this.DisconnectFromGridServer.Visible = false;
158 w2.Add(this.DisconnectFromGridServer, null);
159 this.UploadAsset = new Gtk.Action("UploadAsset", Mono.Unix.Catalog.GetString("Upload asset"), null, null);
160 this.UploadAsset.ShortLabel = Mono.Unix.Catalog.GetString("Upload asset");
161 w2.Add(this.UploadAsset, null);
162 this.AssetManagement = new Gtk.Action("AssetManagement", Mono.Unix.Catalog.GetString("Asset management"), null, null);
163 this.AssetManagement.ShortLabel = Mono.Unix.Catalog.GetString("Asset management");
164 w2.Add(this.AssetManagement, null);
165 this.ConnectToAssetServer = new Gtk.Action("ConnectToAssetServer", Mono.Unix.Catalog.GetString("Connect to asset server"), null, null);
166 this.ConnectToAssetServer.ShortLabel = Mono.Unix.Catalog.GetString("Connect to asset server");
167 w2.Add(this.ConnectToAssetServer, null);
168 this.ConnectToDefaultAssetServerForGrid = new Gtk.Action("ConnectToDefaultAssetServerForGrid", Mono.Unix.Catalog.GetString("Connect to default asset server for grid"), null, null);
169 this.ConnectToDefaultAssetServerForGrid.ShortLabel = Mono.Unix.Catalog.GetString("Connect to default asset server for grid");
170 w2.Add(this.ConnectToDefaultAssetServerForGrid, null);
171 this.DefaultForLocalGrid = new Gtk.Action("DefaultForLocalGrid", Mono.Unix.Catalog.GetString("Default for local grid"), null, null);
172 this.DefaultForLocalGrid.ShortLabel = Mono.Unix.Catalog.GetString("Default for local grid");
173 w2.Add(this.DefaultForLocalGrid, null);
174 this.DefaultForRemoteGrid = new Gtk.Action("DefaultForRemoteGrid", Mono.Unix.Catalog.GetString("Default for remote grid..."), null, null);
175 this.DefaultForRemoteGrid.ShortLabel = Mono.Unix.Catalog.GetString("Default for remote grid...");
176 w2.Add(this.DefaultForRemoteGrid, null);
177 this.CustomAssetServer = new Gtk.Action("CustomAssetServer", Mono.Unix.Catalog.GetString("Custom asset server..."), null, null);
178 this.CustomAssetServer.ShortLabel = Mono.Unix.Catalog.GetString("Custom asset server...");
179 w2.Add(this.CustomAssetServer, null);
180 w1.InsertActionGroup(w2, 0);
181 this.AddAccelGroup(w1.AccelGroup);
182 this.WidthRequest = 800;
183 this.HeightRequest = 600;
184 this.Name = "OpenGridServices.Manager.MainWindow";
185 this.Title = Mono.Unix.Catalog.GetString("Open Grid Services Manager");
186 this.Icon = Gtk.IconTheme.Default.LoadIcon("gtk-network", 48, 0);
187 // Container child OpenGridServices.Manager.MainWindow.Gtk.Container+ContainerChild
188 this.vbox1 = new Gtk.VBox();
189 this.vbox1.Name = "vbox1";
190 // Container child vbox1.Gtk.Box+BoxChild
191 w1.AddUiFromString("<ui><menubar name='menubar2'><menu action='Grid'><menuitem action='ConnectToGridserver'/><menuitem action='DisconnectFromGridServer'/><separator/><menuitem action='RestartWholeGrid'/><menuitem action='RestartGridserverOnly'/><separator/><menuitem action='ShutdownWholeGrid'/><menuitem action='ShutdownGridserverOnly'/><separator/><menuitem action='ExitGridManager'/></menu><menu action='User'><menu action='ConnectToUserserver'><menuitem action='DefaultLocalGridUserserver'/><menuitem action='CustomUserserver'/><menuitem action='RemoteGridDefaultUserserver'/></menu><separator/><menuitem action='AccountManagment'/><menuitem action='GlobalNotice'/><separator/><menuitem action='DisableAllLogins'/><menuitem action='DisableNonGodUsersOnly'/><separator/><menuitem action='ShutdownUserServer'/></menu><menu action='Asset'><menuitem action='UploadAsset'/><menuitem action='AssetManagement'/><menu action='ConnectToAssetServer'><menuitem action='DefaultForLocalGrid'/><menuitem action='DefaultForRemoteGrid'/><menuitem action='CustomAssetServer'/></menu></menu><menu action='Region'/><menu action='Services'/></menubar></ui>");
192 this.menubar2 = ((Gtk.MenuBar)(w1.GetWidget("/menubar2")));
193 this.menubar2.HeightRequest = 25;
194 this.menubar2.Name = "menubar2";
195 this.vbox1.Add(this.menubar2);
196 Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.vbox1[this.menubar2]));
197 w3.Position = 0;
198 w3.Expand = false;
199 w3.Fill = false;
200 // Container child vbox1.Gtk.Box+BoxChild
201 this.hbox1 = new Gtk.HBox();
202 this.hbox1.Name = "hbox1";
203 // Container child hbox1.Gtk.Box+BoxChild
204 this.scrolledwindow1 = new Gtk.ScrolledWindow();
205 this.scrolledwindow1.CanFocus = true;
206 this.scrolledwindow1.Name = "scrolledwindow1";
207 this.scrolledwindow1.VscrollbarPolicy = ((Gtk.PolicyType)(1));
208 this.scrolledwindow1.HscrollbarPolicy = ((Gtk.PolicyType)(1));
209 // Container child scrolledwindow1.Gtk.Container+ContainerChild
210 Gtk.Viewport w4 = new Gtk.Viewport();
211 w4.Name = "GtkViewport";
212 w4.ShadowType = ((Gtk.ShadowType)(0));
213 // Container child GtkViewport.Gtk.Container+ContainerChild
214 this.drawingarea1 = new Gtk.DrawingArea();
215 this.drawingarea1.Name = "drawingarea1";
216 w4.Add(this.drawingarea1);
217 this.scrolledwindow1.Add(w4);
218 this.hbox1.Add(this.scrolledwindow1);
219 Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.hbox1[this.scrolledwindow1]));
220 w7.Position = 1;
221 // Container child hbox1.Gtk.Box+BoxChild
222 this.treeview1 = new Gtk.TreeView();
223 this.treeview1.CanFocus = true;
224 this.treeview1.Name = "treeview1";
225 this.hbox1.Add(this.treeview1);
226 Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.hbox1[this.treeview1]));
227 w8.Position = 2;
228 this.vbox1.Add(this.hbox1);
229 Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.vbox1[this.hbox1]));
230 w9.Position = 1;
231 // Container child vbox1.Gtk.Box+BoxChild
232 this.statusbar1 = new Gtk.Statusbar();
233 this.statusbar1.Name = "statusbar1";
234 this.statusbar1.Spacing = 5;
235 this.vbox1.Add(this.statusbar1);
236 Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox1[this.statusbar1]));
237 w10.PackType = ((Gtk.PackType)(1));
238 w10.Position = 2;
239 w10.Expand = false;
240 w10.Fill = false;
241 this.Add(this.vbox1);
242 if ((this.Child != null)) {
243 this.Child.ShowAll();
244 }
245 this.DefaultWidth = 800;
246 this.DefaultHeight = 800;
247 this.Show();
248 this.DeleteEvent += new Gtk.DeleteEventHandler(this.OnDeleteEvent);
249 this.ConnectToGridserver.Activated += new System.EventHandler(this.ConnectToGridServerMenu);
250 this.ExitGridManager.Activated += new System.EventHandler(this.QuitMenu);
251 this.ShutdownGridserverOnly.Activated += new System.EventHandler(this.ShutdownGridserverMenu);
252 this.RestartGridserverOnly.Activated += new System.EventHandler(this.RestartGridserverMenu);
253 this.DisconnectFromGridServer.Activated += new System.EventHandler(this.DisconnectGridServerMenu);
254 }
255 }
256}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/generated.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/generated.cs
new file mode 100644
index 0000000..dd4abdd
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/generated.cs
@@ -0,0 +1,35 @@
1// ------------------------------------------------------------------------------
2// <autogenerated>
3// This code was generated by a tool.
4// Mono Runtime Version: 2.0.50727.42
5//
6// Changes to this file may cause incorrect behavior and will be lost if
7// the code is regenerated.
8// </autogenerated>
9// ------------------------------------------------------------------------------
10
11namespace Stetic {
12
13
14 internal class Gui {
15
16 private static bool initialized;
17
18 internal static void Initialize() {
19 if ((Stetic.Gui.initialized == false)) {
20 Stetic.Gui.initialized = true;
21 }
22 }
23 }
24
25 internal class ActionGroups {
26
27 public static Gtk.ActionGroup GetActionGroup(System.Type type) {
28 return Stetic.ActionGroups.GetActionGroup(type.FullName);
29 }
30
31 public static Gtk.ActionGroup GetActionGroup(string name) {
32 return null;
33 }
34 }
35}
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/gui.stetic b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/gui.stetic
new file mode 100644
index 0000000..c883f08
--- /dev/null
+++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/gui.stetic
@@ -0,0 +1,502 @@
1<?xml version="1.0" encoding="utf-8"?>
2<stetic-interface>
3 <widget class="Gtk.Window" id="OpenGridServices.Manager.MainWindow" design-size="800 800">
4 <action-group name="Default">
5 <action id="Grid">
6 <property name="Type">Action</property>
7 <property name="Accelerator">&lt;Alt&gt;&lt;Mod2&gt;g</property>
8 <property name="HideIfEmpty">False</property>
9 <property name="Label" translatable="yes">Grid</property>
10 <property name="ShortLabel" translatable="yes">Grid</property>
11 </action>
12 <action id="User">
13 <property name="Type">Action</property>
14 <property name="HideIfEmpty">False</property>
15 <property name="Label" translatable="yes">User</property>
16 <property name="ShortLabel" translatable="yes">User</property>
17 </action>
18 <action id="Asset">
19 <property name="Type">Action</property>
20 <property name="HideIfEmpty">False</property>
21 <property name="Label" translatable="yes">Asset</property>
22 <property name="ShortLabel" translatable="yes">Asset</property>
23 </action>
24 <action id="Region">
25 <property name="Type">Action</property>
26 <property name="Label" translatable="yes">Region</property>
27 <property name="ShortLabel" translatable="yes">Region</property>
28 </action>
29 <action id="Services">
30 <property name="Type">Action</property>
31 <property name="Label" translatable="yes">Services</property>
32 <property name="ShortLabel" translatable="yes">Services</property>
33 </action>
34 <action id="ConnectToGridserver">
35 <property name="Type">Action</property>
36 <property name="HideIfEmpty">False</property>
37 <property name="Label" translatable="yes">Connect to gridserver...</property>
38 <property name="ShortLabel" translatable="yes">Connect to gridserver</property>
39 <property name="StockId">gtk-connect</property>
40 <signal name="Activated" handler="ConnectToGridServerMenu" />
41 </action>
42 <action id="RestartWholeGrid">
43 <property name="Type">Action</property>
44 <property name="Label" translatable="yes">Restart whole grid</property>
45 <property name="ShortLabel" translatable="yes">Restart whole grid</property>
46 <property name="StockId">gtk-refresh</property>
47 </action>
48 <action id="ShutdownWholeGrid">
49 <property name="Type">Action</property>
50 <property name="Label" translatable="yes">Shutdown whole grid</property>
51 <property name="ShortLabel" translatable="yes">Shutdown whole grid</property>
52 <property name="StockId">gtk-stop</property>
53 </action>
54 <action id="ExitGridManager">
55 <property name="Type">Action</property>
56 <property name="Label" translatable="yes">Exit grid manager</property>
57 <property name="ShortLabel" translatable="yes">Exit grid manager</property>
58 <property name="StockId">gtk-close</property>
59 <signal name="Activated" handler="QuitMenu" after="yes" />
60 </action>
61 <action id="ConnectToUserserver">
62 <property name="Type">Action</property>
63 <property name="Label" translatable="yes">Connect to userserver</property>
64 <property name="ShortLabel" translatable="yes">Connect to userserver</property>
65 <property name="StockId">gtk-connect</property>
66 </action>
67 <action id="AccountManagment">
68 <property name="Type">Action</property>
69 <property name="Label" translatable="yes">Account managment</property>
70 <property name="ShortLabel" translatable="yes">Account managment</property>
71 <property name="StockId">gtk-properties</property>
72 </action>
73 <action id="GlobalNotice">
74 <property name="Type">Action</property>
75 <property name="Label" translatable="yes">Global notice</property>
76 <property name="ShortLabel" translatable="yes">Global notice</property>
77 <property name="StockId">gtk-network</property>
78 </action>
79 <action id="DisableAllLogins">
80 <property name="Type">Action</property>
81 <property name="Label" translatable="yes">Disable all logins</property>
82 <property name="ShortLabel" translatable="yes">Disable all logins</property>
83 <property name="StockId">gtk-no</property>
84 </action>
85 <action id="DisableNonGodUsersOnly">
86 <property name="Type">Action</property>
87 <property name="Label" translatable="yes">Disable non-god users only</property>
88 <property name="ShortLabel" translatable="yes">Disable non-god users only</property>
89 <property name="StockId">gtk-no</property>
90 </action>
91 <action id="ShutdownUserServer">
92 <property name="Type">Action</property>
93 <property name="Label" translatable="yes">Shutdown user server</property>
94 <property name="ShortLabel" translatable="yes">Shutdown user server</property>
95 <property name="StockId">gtk-stop</property>
96 </action>
97 <action id="ShutdownGridserverOnly">
98 <property name="Type">Action</property>
99 <property name="Label" translatable="yes">Shutdown gridserver only</property>
100 <property name="ShortLabel" translatable="yes">Shutdown gridserver only</property>
101 <property name="StockId">gtk-stop</property>
102 <signal name="Activated" handler="ShutdownGridserverMenu" after="yes" />
103 </action>
104 <action id="RestartGridserverOnly">
105 <property name="Type">Action</property>
106 <property name="Label" translatable="yes">Restart gridserver only</property>
107 <property name="ShortLabel" translatable="yes">Restart gridserver only</property>
108 <property name="StockId">gtk-refresh</property>
109 <signal name="Activated" handler="RestartGridserverMenu" after="yes" />
110 </action>
111 <action id="DefaultLocalGridUserserver">
112 <property name="Type">Action</property>
113 <property name="Label" translatable="yes">Default local grid userserver</property>
114 <property name="ShortLabel" translatable="yes">Default local grid userserver</property>
115 </action>
116 <action id="CustomUserserver">
117 <property name="Type">Action</property>
118 <property name="Label" translatable="yes">Custom userserver...</property>
119 <property name="ShortLabel" translatable="yes">Custom userserver</property>
120 </action>
121 <action id="RemoteGridDefaultUserserver">
122 <property name="Type">Action</property>
123 <property name="Label" translatable="yes">Remote grid default userserver...</property>
124 <property name="ShortLabel" translatable="yes">Remote grid default userserver</property>
125 </action>
126 <action id="DisconnectFromGridServer">
127 <property name="Type">Action</property>
128 <property name="Label" translatable="yes">Disconnect from grid server</property>
129 <property name="ShortLabel" translatable="yes">Disconnect from grid server</property>
130 <property name="StockId">gtk-disconnect</property>
131 <property name="Visible">False</property>
132 <signal name="Activated" handler="DisconnectGridServerMenu" after="yes" />
133 </action>
134 <action id="UploadAsset">
135 <property name="Type">Action</property>
136 <property name="Label" translatable="yes">Upload asset</property>
137 <property name="ShortLabel" translatable="yes">Upload asset</property>
138 </action>
139 <action id="AssetManagement">
140 <property name="Type">Action</property>
141 <property name="Label" translatable="yes">Asset management</property>
142 <property name="ShortLabel" translatable="yes">Asset management</property>
143 </action>
144 <action id="ConnectToAssetServer">
145 <property name="Type">Action</property>
146 <property name="Label" translatable="yes">Connect to asset server</property>
147 <property name="ShortLabel" translatable="yes">Connect to asset server</property>
148 </action>
149 <action id="ConnectToDefaultAssetServerForGrid">
150 <property name="Type">Action</property>
151 <property name="Label" translatable="yes">Connect to default asset server for grid</property>
152 <property name="ShortLabel" translatable="yes">Connect to default asset server for grid</property>
153 </action>
154 <action id="DefaultForLocalGrid">
155 <property name="Type">Action</property>
156 <property name="Label" translatable="yes">Default for local grid</property>
157 <property name="ShortLabel" translatable="yes">Default for local grid</property>
158 </action>
159 <action id="DefaultForRemoteGrid">
160 <property name="Type">Action</property>
161 <property name="Label" translatable="yes">Default for remote grid...</property>
162 <property name="ShortLabel" translatable="yes">Default for remote grid...</property>
163 </action>
164 <action id="CustomAssetServer">
165 <property name="Type">Action</property>
166 <property name="Label" translatable="yes">Custom asset server...</property>
167 <property name="ShortLabel" translatable="yes">Custom asset server...</property>
168 </action>
169 </action-group>
170 <property name="MemberName" />
171 <property name="WidthRequest">800</property>
172 <property name="HeightRequest">600</property>
173 <property name="Title" translatable="yes">Open Grid Services Manager</property>
174 <property name="Icon">stock:gtk-network Dialog</property>
175 <signal name="DeleteEvent" handler="OnDeleteEvent" />
176 <child>
177 <widget class="Gtk.VBox" id="vbox1">
178 <property name="MemberName" />
179 <child>
180 <widget class="Gtk.MenuBar" id="menubar2">
181 <property name="MemberName" />
182 <property name="HeightRequest">25</property>
183 <node name="menubar2" type="Menubar">
184 <node type="Menu" action="Grid">
185 <node type="Menuitem" action="ConnectToGridserver" />
186 <node type="Menuitem" action="DisconnectFromGridServer" />
187 <node type="Separator" />
188 <node type="Menuitem" action="RestartWholeGrid" />
189 <node type="Menuitem" action="RestartGridserverOnly" />
190 <node type="Separator" />
191 <node type="Menuitem" action="ShutdownWholeGrid" />
192 <node type="Menuitem" action="ShutdownGridserverOnly" />
193 <node type="Separator" />
194 <node type="Menuitem" action="ExitGridManager" />
195 </node>
196 <node type="Menu" action="User">
197 <node type="Menu" action="ConnectToUserserver">
198 <node type="Menuitem" action="DefaultLocalGridUserserver" />
199 <node type="Menuitem" action="CustomUserserver" />
200 <node type="Menuitem" action="RemoteGridDefaultUserserver" />
201 </node>
202 <node type="Separator" />
203 <node type="Menuitem" action="AccountManagment" />
204 <node type="Menuitem" action="GlobalNotice" />
205 <node type="Separator" />
206 <node type="Menuitem" action="DisableAllLogins" />
207 <node type="Menuitem" action="DisableNonGodUsersOnly" />
208 <node type="Separator" />
209 <node type="Menuitem" action="ShutdownUserServer" />
210 </node>
211 <node type="Menu" action="Asset">
212 <node type="Menuitem" action="UploadAsset" />
213 <node type="Menuitem" action="AssetManagement" />
214 <node type="Menu" action="ConnectToAssetServer">
215 <node type="Menuitem" action="DefaultForLocalGrid" />
216 <node type="Menuitem" action="DefaultForRemoteGrid" />
217 <node type="Menuitem" action="CustomAssetServer" />
218 </node>
219 </node>
220 <node type="Menu" action="Region" />
221 <node type="Menu" action="Services" />
222 </node>
223 </widget>
224 <packing>
225 <property name="Position">0</property>
226 <property name="AutoSize">False</property>
227 <property name="Expand">False</property>
228 <property name="Fill">False</property>
229 </packing>
230 </child>
231 <child>
232 <widget class="Gtk.HBox" id="hbox1">
233 <property name="MemberName" />
234 <child>
235 <placeholder />
236 </child>
237 <child>
238 <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
239 <property name="MemberName" />
240 <property name="CanFocus">True</property>
241 <property name="VscrollbarPolicy">Automatic</property>
242 <property name="HscrollbarPolicy">Automatic</property>
243 <child>
244 <widget class="Gtk.Viewport" id="GtkViewport">
245 <property name="MemberName" />
246 <property name="ShadowType">None</property>
247 <child>
248 <widget class="Gtk.DrawingArea" id="drawingarea1">
249 <property name="MemberName" />
250 </widget>
251 </child>
252 </widget>
253 </child>
254 </widget>
255 <packing>
256 <property name="Position">1</property>
257 <property name="AutoSize">True</property>
258 </packing>
259 </child>
260 <child>
261 <widget class="Gtk.TreeView" id="treeview1">
262 <property name="MemberName" />
263 <property name="CanFocus">True</property>
264 </widget>
265 <packing>
266 <property name="Position">2</property>
267 <property name="AutoSize">True</property>
268 </packing>
269 </child>
270 </widget>
271 <packing>
272 <property name="Position">1</property>
273 <property name="AutoSize">True</property>
274 </packing>
275 </child>
276 <child>
277 <widget class="Gtk.Statusbar" id="statusbar1">
278 <property name="MemberName">statusBar1</property>
279 <property name="Spacing">5</property>
280 <child>
281 <placeholder />
282 </child>
283 <child>
284 <placeholder />
285 </child>
286 </widget>
287 <packing>
288 <property name="PackType">End</property>
289 <property name="Position">2</property>
290 <property name="AutoSize">False</property>
291 <property name="Expand">False</property>
292 <property name="Fill">False</property>
293 </packing>
294 </child>
295 </widget>
296 </child>
297 </widget>
298 <widget class="Gtk.Dialog" id="OpenGridServices.Manager.ConnectToGridServerDialog" design-size="476 137">
299 <property name="MemberName" />
300 <property name="Events">ButtonPressMask</property>
301 <property name="Title" translatable="yes">Connect to Grid server</property>
302 <property name="WindowPosition">CenterOnParent</property>
303 <property name="Buttons">2</property>
304 <property name="HelpButton">False</property>
305 <property name="HasSeparator">False</property>
306 <signal name="Response" handler="OnResponse" />
307 <child internal-child="VBox">
308 <widget class="Gtk.VBox" id="dialog_VBox">
309 <property name="MemberName" />
310 <property name="Events">ButtonPressMask</property>
311 <property name="BorderWidth">2</property>
312 <child>
313 <widget class="Gtk.VBox" id="vbox2">
314 <property name="MemberName" />
315 <child>
316 <placeholder />
317 </child>
318 <child>
319 <placeholder />
320 </child>
321 <child>
322 <widget class="Gtk.VBox" id="vbox3">
323 <property name="MemberName" />
324 <child>
325 <widget class="Gtk.HBox" id="hbox1">
326 <property name="MemberName" />
327 <child>
328 <widget class="Gtk.Label" id="label1">
329 <property name="MemberName" />
330 <property name="Xalign">1</property>
331 <property name="LabelProp" translatable="yes">Grid server URL: </property>
332 <property name="Justify">Right</property>
333 </widget>
334 <packing>
335 <property name="Position">0</property>
336 <property name="AutoSize">False</property>
337 </packing>
338 </child>
339 <child>
340 <widget class="Gtk.Entry" id="entry1">
341 <property name="MemberName" />
342 <property name="CanFocus">True</property>
343 <property name="Text" translatable="yes">http://gridserver:8001</property>
344 <property name="IsEditable">True</property>
345 <property name="MaxLength">255</property>
346 <property name="InvisibleChar">•</property>
347 </widget>
348 <packing>
349 <property name="Position">1</property>
350 <property name="AutoSize">False</property>
351 </packing>
352 </child>
353 <child>
354 <placeholder />
355 </child>
356 </widget>
357 <packing>
358 <property name="Position">0</property>
359 <property name="AutoSize">True</property>
360 <property name="Expand">False</property>
361 <property name="Fill">False</property>
362 </packing>
363 </child>
364 <child>
365 <widget class="Gtk.HBox" id="hbox2">
366 <property name="MemberName" />
367 <child>
368 <widget class="Gtk.Label" id="label2">
369 <property name="MemberName" />
370 <property name="Xalign">1</property>
371 <property name="LabelProp" translatable="yes">Username:</property>
372 <property name="Justify">Right</property>
373 </widget>
374 <packing>
375 <property name="Position">0</property>
376 <property name="AutoSize">False</property>
377 </packing>
378 </child>
379 <child>
380 <widget class="Gtk.Entry" id="entry2">
381 <property name="MemberName" />
382 <property name="CanFocus">True</property>
383 <property name="IsEditable">True</property>
384 <property name="InvisibleChar">•</property>
385 </widget>
386 <packing>
387 <property name="Position">1</property>
388 <property name="AutoSize">True</property>
389 </packing>
390 </child>
391 <child>
392 <placeholder />
393 </child>
394 </widget>
395 <packing>
396 <property name="Position">1</property>
397 <property name="AutoSize">False</property>
398 <property name="Expand">False</property>
399 <property name="Fill">False</property>
400 </packing>
401 </child>
402 <child>
403 <widget class="Gtk.HBox" id="hbox3">
404 <property name="MemberName" />
405 <child>
406 <widget class="Gtk.Label" id="label3">
407 <property name="MemberName" />
408 <property name="Xalign">1</property>
409 <property name="LabelProp" translatable="yes">Password:</property>
410 <property name="Justify">Right</property>
411 </widget>
412 <packing>
413 <property name="Position">0</property>
414 <property name="AutoSize">False</property>
415 </packing>
416 </child>
417 <child>
418 <widget class="Gtk.Entry" id="entry3">
419 <property name="MemberName" />
420 <property name="CanFocus">True</property>
421 <property name="IsEditable">True</property>
422 <property name="InvisibleChar">•</property>
423 </widget>
424 <packing>
425 <property name="Position">1</property>
426 <property name="AutoSize">True</property>
427 </packing>
428 </child>
429 <child>
430 <placeholder />
431 </child>
432 </widget>
433 <packing>
434 <property name="Position">2</property>
435 <property name="AutoSize">True</property>
436 <property name="Expand">False</property>
437 <property name="Fill">False</property>
438 </packing>
439 </child>
440 </widget>
441 <packing>
442 <property name="Position">2</property>
443 <property name="AutoSize">True</property>
444 <property name="Expand">False</property>
445 <property name="Fill">False</property>
446 </packing>
447 </child>
448 </widget>
449 <packing>
450 <property name="Position">0</property>
451 <property name="AutoSize">True</property>
452 </packing>
453 </child>
454 </widget>
455 </child>
456 <child internal-child="ActionArea">
457 <widget class="Gtk.HButtonBox" id="OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea">
458 <property name="MemberName" />
459 <property name="Events">ButtonPressMask</property>
460 <property name="Spacing">6</property>
461 <property name="BorderWidth">5</property>
462 <property name="Size">2</property>
463 <property name="LayoutStyle">End</property>
464 <child>
465 <widget class="Gtk.Button" id="button2">
466 <property name="MemberName" />
467 <property name="CanDefault">True</property>
468 <property name="CanFocus">True</property>
469 <property name="Type">TextAndIcon</property>
470 <property name="Icon">stock:gtk-apply Menu</property>
471 <property name="Label" translatable="yes">Connect</property>
472 <property name="UseUnderline">True</property>
473 <property name="IsDialogButton">True</property>
474 <property name="ResponseId">-5</property>
475 </widget>
476 <packing>
477 <property name="Expand">False</property>
478 <property name="Fill">False</property>
479 </packing>
480 </child>
481 <child>
482 <widget class="Gtk.Button" id="button8">
483 <property name="MemberName" />
484 <property name="CanDefault">True</property>
485 <property name="CanFocus">True</property>
486 <property name="Type">TextAndIcon</property>
487 <property name="Icon">stock:gtk-cancel Menu</property>
488 <property name="Label" translatable="yes">Cancel</property>
489 <property name="UseUnderline">True</property>
490 <property name="IsDialogButton">True</property>
491 <property name="ResponseId">-6</property>
492 </widget>
493 <packing>
494 <property name="Position">1</property>
495 <property name="Expand">False</property>
496 <property name="Fill">False</property>
497 </packing>
498 </child>
499 </widget>
500 </child>
501 </widget>
502</stetic-interface> \ No newline at end of file
diff --git a/OpenSim/Grid/UserServer.Config/AssemblyInfo.cs b/OpenSim/Grid/UserServer.Config/AssemblyInfo.cs
new file mode 100644
index 0000000..15298e8
--- /dev/null
+++ b/OpenSim/Grid/UserServer.Config/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("UserConfig")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("UserConfig")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Grid/UserServer.Config/DbUserConfig.cs b/OpenSim/Grid/UserServer.Config/DbUserConfig.cs
new file mode 100644
index 0000000..c7f8255
--- /dev/null
+++ b/OpenSim/Grid/UserServer.Config/DbUserConfig.cs
@@ -0,0 +1,95 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Db4objects.Db4o;
30using OpenSim.Framework.Console;
31using OpenSim.Framework.Interfaces;
32
33namespace OpenUser.Config.UserConfigDb4o
34{
35 public class Db4oConfigPlugin: IUserConfig
36 {
37 public UserConfig GetConfigObject()
38 {
39 MainLog.Instance.Verbose("Loading Db40Config dll");
40 return ( new DbUserConfig());
41 }
42 }
43
44 public class DbUserConfig : UserConfig
45 {
46 private IObjectContainer db;
47
48 public void LoadDefaults() {
49 MainLog.Instance.Notice("Config.cs:LoadDefaults() - Please press enter to retain default or enter new settings");
50
51 this.DefaultStartupMsg = MainLog.Instance.CmdPrompt("Default startup message", "Welcome to OGS");
52
53 this.GridServerURL = MainLog.Instance.CmdPrompt("Grid server URL","http://127.0.0.1:8001/");
54 this.GridSendKey = MainLog.Instance.CmdPrompt("Key to send to grid server","null");
55 this.GridRecvKey = MainLog.Instance.CmdPrompt("Key to expect from grid server","null");
56 }
57
58 public override void InitConfig() {
59 try {
60 db = Db4oFactory.OpenFile("openuser.yap");
61 IObjectSet result = db.Get(typeof(DbUserConfig));
62 if(result.Count==1) {
63 MainLog.Instance.Verbose("Config.cs:InitConfig() - Found a UserConfig object in the local database, loading");
64 foreach (DbUserConfig cfg in result) {
65 this.GridServerURL=cfg.GridServerURL;
66 this.GridSendKey=cfg.GridSendKey;
67 this.GridRecvKey=cfg.GridRecvKey;
68 this.DefaultStartupMsg=cfg.DefaultStartupMsg;
69 }
70 } else {
71 MainLog.Instance.Verbose("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults");
72 LoadDefaults();
73 MainLog.Instance.Verbose("Writing out default settings to local database");
74 db.Set(this);
75 db.Close();
76 }
77 } catch(Exception e) {
78 MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured");
79 MainLog.Instance.Warn(e.ToString());
80 }
81
82 MainLog.Instance.Verbose("User settings loaded:");
83 MainLog.Instance.Verbose("Default startup message: " + this.DefaultStartupMsg);
84 MainLog.Instance.Verbose("Grid server URL: " + this.GridServerURL);
85 MainLog.Instance.Verbose("Key to send to grid: " + this.GridSendKey);
86 MainLog.Instance.Verbose("Key to expect from grid: " + this.GridRecvKey);
87 }
88
89
90 public void Shutdown() {
91 db.Close();
92 }
93 }
94
95}
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs
new file mode 100644
index 0000000..c792918
--- /dev/null
+++ b/OpenSim/Grid/UserServer/Main.cs
@@ -0,0 +1,214 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using System.Collections.Generic;
31using System.Reflection;
32using libsecondlife;
33using OpenSim.Framework.Console;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Servers;
36using OpenSim.Framework.User;
37using OpenSim.Framework.Utilities;
38using OpenSim.GenericConfig;
39
40namespace OpenSim.Grid.UserServer
41{
42 /// <summary>
43 /// </summary>
44 public class OpenUser_Main : conscmd_callback
45 {
46 private string ConfigDll = "OpenSim.Grid.UserServer.Config.dll";
47 private string StorageDll = "OpenSim.Framework.Data.MySQL.dll";
48 private UserConfig Cfg;
49 protected IGenericConfig localXMLConfig;
50
51 public UserManager m_userManager;
52
53 public Dictionary<LLUUID, UserProfile> UserSessions = new Dictionary<LLUUID, UserProfile>();
54
55 LogBase m_console;
56
57 [STAThread]
58 public static void Main(string[] args)
59 {
60 Console.WriteLine("Launching UserServer...");
61
62 OpenUser_Main userserver = new OpenUser_Main();
63
64 userserver.Startup();
65 userserver.Work();
66 }
67
68 private OpenUser_Main()
69 {
70 m_console = new LogBase("opengrid-userserver-console.log", "OpenUser", this , false);
71 MainLog.Instance = m_console;
72 }
73
74 private void Work()
75 {
76 m_console.Notice("Enter help for a list of commands\n");
77
78 while (true)
79 {
80 m_console.MainLogPrompt();
81 }
82 }
83
84 public void Startup()
85 {
86 this.localXMLConfig = new XmlConfig("UserServerConfig.xml");
87 this.localXMLConfig.LoadData();
88 this.ConfigDB(this.localXMLConfig);
89 this.localXMLConfig.Close();
90
91 MainLog.Instance.Verbose("Main.cs:Startup() - Loading configuration");
92 Cfg = this.LoadConfigDll(this.ConfigDll);
93 Cfg.InitConfig();
94
95 MainLog.Instance.Verbose("Main.cs:Startup() - Establishing data connection");
96 m_userManager = new UserManager();
97 m_userManager._config = Cfg;
98 m_userManager.AddPlugin(StorageDll);
99
100 MainLog.Instance.Verbose("Main.cs:Startup() - Starting HTTP process");
101 BaseHttpServer httpServer = new BaseHttpServer(8002);
102
103 httpServer.AddXmlRPCHandler("login_to_simulator", m_userManager.XmlRpcLoginMethod);
104
105 httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName);
106 httpServer.AddXmlRPCHandler("get_user_by_uuid", m_userManager.XmlRPCGetUserMethodUUID);
107
108 httpServer.AddStreamHandler( new RestStreamHandler("DELETE", "/usersessions/", m_userManager.RestDeleteUserSessionMethod ));
109
110 httpServer.Start();
111 m_console.Status("Userserver 0.3 - Startup complete");
112 }
113
114
115 public void do_create(string what)
116 {
117 switch (what)
118 {
119 case "user":
120 string tempfirstname;
121 string templastname;
122 string tempMD5Passwd;
123 uint regX = 1000;
124 uint regY = 1000;
125
126 tempfirstname = m_console.CmdPrompt("First name");
127 templastname = m_console.CmdPrompt("Last name");
128 tempMD5Passwd = m_console.PasswdPrompt("Password");
129 regX = Convert.ToUInt32(m_console.CmdPrompt("Start Region X"));
130 regY = Convert.ToUInt32(m_console.CmdPrompt("Start Region Y"));
131
132 tempMD5Passwd = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + "");
133
134 m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY);
135 break;
136 }
137 }
138
139 public void RunCmd(string cmd, string[] cmdparams)
140 {
141 switch (cmd)
142 {
143 case "help":
144 m_console.Notice("create user - create a new user");
145 m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)");
146 break;
147
148 case "create":
149 do_create(cmdparams[0]);
150 break;
151
152 case "shutdown":
153 m_console.Close();
154 Environment.Exit(0);
155 break;
156 }
157 }
158
159 private void ConfigDB(IGenericConfig configData)
160 {
161 try
162 {
163 string attri = "";
164 attri = configData.GetAttribute("DataBaseProvider");
165 if (attri == "")
166 {
167 StorageDll = "OpenSim.Framework.Data.DB4o.dll";
168 configData.SetAttribute("DataBaseProvider", "OpenSim.Framework.Data.DB4o.dll");
169 }
170 else
171 {
172 StorageDll = attri;
173 }
174 configData.Commit();
175 }
176 catch
177 {
178
179 }
180 }
181
182 private UserConfig LoadConfigDll(string dllName)
183 {
184 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
185 UserConfig config = null;
186
187 foreach (Type pluginType in pluginAssembly.GetTypes())
188 {
189 if (pluginType.IsPublic)
190 {
191 if (!pluginType.IsAbstract)
192 {
193 Type typeInterface = pluginType.GetInterface("IUserConfig", true);
194
195 if (typeInterface != null)
196 {
197 IUserConfig plug = (IUserConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
198 config = plug.GetConfigObject();
199 break;
200 }
201
202 typeInterface = null;
203 }
204 }
205 }
206 pluginAssembly = null;
207 return config;
208 }
209
210 public void Show(string ShowWhat)
211 {
212 }
213 }
214}
diff --git a/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a0a6f3c
--- /dev/null
+++ b/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,31 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OGS-UserServer")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OGS-UserServer")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("e266513a-090b-4d38-80f6-8599eef68c8c")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30[assembly: AssemblyVersion("1.0.0.0")]
31[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Grid/UserServer/UserManager.cs b/OpenSim/Grid/UserServer/UserManager.cs
new file mode 100644
index 0000000..04bf64a
--- /dev/null
+++ b/OpenSim/Grid/UserServer/UserManager.cs
@@ -0,0 +1,94 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using Nwc.XmlRpc;
31using OpenSim.Framework.Data;
32using OpenSim.Framework.UserManagement;
33
34namespace OpenSim.Grid.UserServer
35{
36 public class UserManager : UserManagerBase
37 {
38 public UserManager()
39 {
40 }
41
42 /// <summary>
43 /// Customises the login response and fills in missing values.
44 /// </summary>
45 /// <param name="response">The existing response</param>
46 /// <param name="theUser">The user profile</param>
47 public override void CustomiseResponse( LoginResponse response, UserProfileData theUser)
48 {
49 // Load information from the gridserver
50 SimProfileData SimInfo = new SimProfileData();
51 SimInfo = SimInfo.RequestSimProfileData(theUser.currentAgent.currentHandle, _config.GridServerURL, _config.GridSendKey, _config.GridRecvKey);
52
53 // Customise the response
54 // Home Location
55 response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * 256).ToString() + ",r" + (SimInfo.regionLocY * 256).ToString() + "], " +
56 "'position':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "], " +
57 "'look_at':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "]}";
58
59 // Destination
60 Console.WriteLine("CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX + "; Region Y: " + SimInfo.regionLocY);
61 response.SimAddress = SimInfo.serverIP;
62 response.SimPort = (Int32)SimInfo.serverPort;
63 response.RegionX = SimInfo.regionLocX;
64 response.RegionY = SimInfo.regionLocX;
65
66 // Notify the target of an incoming user
67 Console.WriteLine("Notifying " + SimInfo.regionName + " (" + SimInfo.serverURI+ ")");
68
69 // Prepare notification
70 Hashtable SimParams = new Hashtable();
71 SimParams["session_id"] = theUser.currentAgent.sessionID.ToString();
72 SimParams["secure_session_id"] = theUser.currentAgent.secureSessionID.ToString();
73 SimParams["firstname"] = theUser.username;
74 SimParams["lastname"] = theUser.surname;
75 SimParams["agent_id"] = theUser.UUID.ToString();
76 SimParams["circuit_code"] = (Int32)Convert.ToUInt32(response.CircuitCode);
77 SimParams["startpos_x"] = theUser.currentAgent.currentPos.X.ToString();
78 SimParams["startpos_y"] = theUser.currentAgent.currentPos.Y.ToString();
79 SimParams["startpos_z"] = theUser.currentAgent.currentPos.Z.ToString();
80 SimParams["regionhandle"] = theUser.currentAgent.currentHandle.ToString();
81 ArrayList SendParams = new ArrayList();
82 SendParams.Add(SimParams);
83
84 // Update agent with target sim
85 theUser.currentAgent.currentRegion = SimInfo.UUID;
86 theUser.currentAgent.currentHandle = SimInfo.regionHandle;
87
88 System.Console.WriteLine("sending reply");
89 // Send
90 XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
91 XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 3000);
92 }
93 }
94}
diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs
new file mode 100644
index 0000000..0428f5a
--- /dev/null
+++ b/OpenSim/Region/Application/Application.cs
@@ -0,0 +1,120 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 OpenSim.Framework.Console;
30using OpenSim.Region.Environment.Scenes;
31
32namespace OpenSim
33{
34 public class Application
35 {
36 //could move our main function into OpenSimMain and kill this class
37 [STAThread]
38 public static void Main(string[] args)
39 {
40 Console.WriteLine("OpenSim " + VersionInfo.Version + "\n");
41 Console.WriteLine("Starting...\n");
42
43 bool sandBoxMode = false;
44 bool startLoginServer = false;
45 string physicsEngine = "basicphysics";
46 bool allowFlying = false;
47 bool userAccounts = false;
48 bool gridLocalAsset = false;
49 bool useConfigFile = false;
50 bool silent = false;
51 string configFile = "simconfig.xml";
52
53 for (int i = 0; i < args.Length; i++)
54 {
55 if (args[i] == "-sandbox")
56 {
57 sandBoxMode = true;
58 startLoginServer = true;
59 }
60 /*
61 if (args[i] == "-loginserver")
62 {
63 startLoginServer = true;
64 }*/
65 if (args[i] == "-accounts")
66 {
67 userAccounts = true;
68 }
69 if (args[i] == "-realphysx")
70 {
71 physicsEngine = "RealPhysX";
72 allowFlying = true;
73 }
74 if (args[i] == "-ode")
75 {
76 physicsEngine = "OpenDynamicsEngine";
77 allowFlying = true;
78 }
79 if (args[i] == "-localasset")
80 {
81 gridLocalAsset = true;
82 }
83 if (args[i] == "-configfile")
84 {
85 useConfigFile = true;
86 }
87 if (args[i] == "-noverbose")
88 {
89 silent = true;
90 }
91 if (args[i] == "-config")
92 {
93 try
94 {
95 i++;
96 configFile = args[i];
97 }
98 catch (Exception e)
99 {
100 Console.WriteLine("-config: Please specify a config file. (" + e.ToString() + ")");
101 }
102 }
103 }
104
105 OpenSimMain sim = new OpenSimMain(sandBoxMode, startLoginServer, physicsEngine, useConfigFile, silent, configFile);
106 // OpenSimRoot.Instance.Application = sim;
107 sim.m_sandbox = sandBoxMode;
108 sim.user_accounts = userAccounts;
109 sim.gridLocalAsset = gridLocalAsset;
110 ScenePresence.PhysicsEngineFlying = allowFlying;
111
112 sim.StartUp();
113
114 while (true)
115 {
116 MainLog.Instance.MainLogPrompt();
117 }
118 }
119 }
120}
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
new file mode 100644
index 0000000..728329e
--- /dev/null
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -0,0 +1,482 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using System.IO;
31using libsecondlife;
32using OpenSim.Assets;
33using OpenSim.Framework;
34using OpenSim.Framework.Communications;
35using OpenSim.Framework.Console;
36using OpenSim.Framework.Data;
37using OpenSim.Framework.Interfaces;
38using OpenSim.Framework.Servers;
39using OpenSim.Framework.Types;
40using OpenSim.GenericConfig;
41using OpenSim.Physics.Manager;
42using OpenSim.Region.Caches;
43using OpenSim.Region.ClientStack;
44using OpenSim.Region.Communications.Local;
45using OpenSim.Region.Communications.OGS1;
46using OpenSim.Region.Environment.Scenes;
47using System.Text;
48
49namespace OpenSim
50{
51
52 public class OpenSimMain : RegionApplicationBase, conscmd_callback
53 {
54 protected CommunicationsManager commsManager;
55 // private CheckSumServer checkServer;
56
57 private bool m_silent;
58 private string m_logFilename = "region-console-" + Guid.NewGuid().ToString() + ".log";
59
60 public OpenSimMain(bool sandBoxMode, bool startLoginServer, string physicsEngine, bool useConfigFile, bool silent, string configFile)
61 {
62 this.configFileSetup = useConfigFile;
63 m_sandbox = sandBoxMode;
64 m_loginserver = startLoginServer;
65 m_physicsEngine = physicsEngine;
66 m_config = configFile;
67 m_silent = silent;
68 }
69
70 /// <summary>
71 /// Performs initialisation of the world, such as loading configuration from disk.
72 /// </summary>
73 public override void StartUp()
74 {
75 this.serversData = new NetworkServersInfo();
76
77 this.localConfig = new XmlConfig(m_config);
78 this.localConfig.LoadData();
79
80 if (this.configFileSetup)
81 {
82 this.SetupFromConfigFile(this.localConfig);
83 }
84
85 m_log = new LogBase(m_logFilename, "Region", this, m_silent);
86 MainLog.Instance = m_log;
87
88 m_log.Verbose("Main.cs:Startup() - Loading configuration");
89 this.serversData.InitConfig(this.m_sandbox, this.localConfig);
90 this.localConfig.Close();//for now we can close it as no other classes read from it , but this should change
91
92 ScenePresence.LoadTextureFile("avatar-texture.dat");
93
94 ClientView.TerrainManager = new TerrainManager(new SecondLife());
95
96 this.SetupHttpListener();
97
98 if (m_sandbox)
99 {
100 this.SetupLocalGridServers();
101 // this.checkServer = new CheckSumServer(12036);
102 // this.checkServer.ServerListener();
103 }
104 else
105 {
106 this.SetupRemoteGridServers();
107 }
108
109 startuptime = DateTime.Now;
110
111 this.physManager = new PhysicsManager();
112 this.physManager.LoadPlugins();
113
114 this.SetupWorld();
115
116 m_log.Verbose("Main.cs:Startup() - Initialising HTTP server");
117
118 if (m_sandbox)
119 {
120 httpServer.AddXmlRPCHandler("login_to_simulator", ((CommunicationsLocal)this.commsManager).UserServices.XmlRpcLoginMethod);
121 }
122
123 //Start http server
124 m_log.Verbose("Main.cs:Startup() - Starting HTTP server");
125 httpServer.Start();
126
127 // Start UDP servers
128 for (int i = 0; i < m_udpServer.Count; i++)
129 {
130 this.m_udpServer[i].ServerListener();
131 }
132
133 }
134
135 # region Setup methods
136 protected override void SetupLocalGridServers()
137 {
138 try
139 {
140 AssetCache = new AssetCache("OpenSim.Region.GridInterfaces.Local.dll", this.serversData.AssetURL, this.serversData.AssetSendKey);
141 InventoryCache = new InventoryCache();
142 this.commsManager = new CommunicationsLocal(this.serversData, httpServer);
143 }
144 catch (Exception e)
145 {
146 m_log.Error(e.Message + "\nSorry, could not setup local cache");
147 Environment.Exit(1);
148 }
149
150 }
151
152 protected override void SetupRemoteGridServers()
153 {
154 try
155 {
156 AssetCache = new AssetCache("OpenSim.Region.GridInterfaces.Local.dll", this.serversData.AssetURL, this.serversData.AssetSendKey);
157 InventoryCache = new InventoryCache();
158 this.commsManager = new CommunicationsOGS1(this.serversData, httpServer);
159 }
160 catch (Exception e)
161 {
162 m_log.Error(e.Message + "\nSorry, could not setup remote cache");
163 Environment.Exit(1);
164 }
165 }
166
167 protected override void SetupWorld()
168 {
169 IGenericConfig regionConfig;
170 Scene LocalWorld;
171 UDPServer udpServer;
172 RegionInfo regionDat = new RegionInfo();
173 AuthenticateSessionsBase authenBase;
174
175 string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Regions");
176 string[] configFiles = Directory.GetFiles(path, "*.xml");
177
178 if (configFiles.Length == 0)
179 {
180 string path2 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Regions");
181 string path3 = Path.Combine(path2, "default.xml");
182 Console.WriteLine("Creating default region config file");
183 //TODO create default region
184 IGenericConfig defaultConfig = new XmlConfig(path3);
185 defaultConfig.LoadData();
186 defaultConfig.Commit();
187 defaultConfig.Close();
188 defaultConfig = null;
189 configFiles = Directory.GetFiles(path, "*.xml");
190 }
191
192 for (int i = 0; i < configFiles.Length; i++)
193 {
194 regionDat = new RegionInfo();
195 if (m_sandbox)
196 {
197 AuthenticateSessionsBase authen = new AuthenticateSessionsBase(); // new AuthenticateSessionsLocal();
198 this.AuthenticateSessionsHandler.Add(authen);
199 authenBase = authen;
200 }
201 else
202 {
203 AuthenticateSessionsBase authen = new AuthenticateSessionsBase(); //new AuthenticateSessionsRemote();
204 this.AuthenticateSessionsHandler.Add(authen);
205 authenBase = authen;
206 }
207 Console.WriteLine("Loading region config file");
208 regionConfig = new XmlConfig(configFiles[i]);
209 regionConfig.LoadData();
210 regionDat.InitConfig(this.m_sandbox, regionConfig);
211 regionConfig.Close();
212
213 udpServer = new UDPServer(regionDat.InternalEndPoint.Port, this.AssetCache, this.InventoryCache, this.m_log, authenBase);
214
215 m_udpServer.Add(udpServer);
216 this.regionData.Add(regionDat);
217
218 LocalWorld = new Scene(udpServer.PacketServer.ClientManager, regionDat, authenBase, commsManager, this.AssetCache, httpServer);
219 this.m_localWorld.Add(LocalWorld);
220 //LocalWorld.InventoryCache = InventoryCache;
221 //LocalWorld.AssetCache = AssetCache;
222
223 udpServer.LocalWorld = LocalWorld;
224
225 LocalWorld.LoadStorageDLL("OpenSim.Region.Storage.LocalStorageDb4o.dll"); //all these dll names shouldn't be hard coded.
226 LocalWorld.LoadWorldMap();
227
228 m_log.Verbose("Main.cs:Startup() - Starting up messaging system");
229 LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine);
230 LocalWorld.PhysScene.SetTerrain(LocalWorld.Terrain.getHeights1D());
231 LocalWorld.LoadPrimsFromStorage();
232
233 //Master Avatar Setup
234 UserProfileData masterAvatar = commsManager.UserServer.SetupMasterUser(LocalWorld.RegionInfo.MasterAvatarFirstName, LocalWorld.RegionInfo.MasterAvatarLastName, LocalWorld.RegionInfo.MasterAvatarSandboxPassword);
235 if (masterAvatar != null)
236 {
237 LocalWorld.RegionInfo.MasterAvatarAssignedUUID = masterAvatar.UUID;
238 LocalWorld.localStorage.LoadParcels((ILocalStorageParcelReceiver)LocalWorld.parcelManager);
239 }
240
241
242 LocalWorld.StartTimer();
243 }
244 }
245
246 private class SimStatusHandler : IStreamHandler
247 {
248 public byte[] Handle(string path, Stream request)
249 {
250 return Encoding.UTF8.GetBytes("OK");
251 }
252
253 public string ContentType
254 {
255 get { return "text/plain"; }
256 }
257
258 public string HttpMethod
259 {
260 get { return "GET"; }
261 }
262
263 public string Path
264 {
265 get { return "/simstatus/"; }
266 }
267 }
268
269 protected override void SetupHttpListener()
270 {
271 httpServer = new BaseHttpServer(this.serversData.HttpListenerPort); //regionData[0].IPListenPort);
272
273 if (!this.m_sandbox)
274 {
275 httpServer.AddStreamHandler( new SimStatusHandler() );
276 }
277 }
278
279 protected override void ConnectToRemoteGridServer()
280 {
281
282 }
283
284 #endregion
285
286 private void SetupFromConfigFile(IGenericConfig configData)
287 {
288 // Log filename
289 string attri = "";
290 attri = configData.GetAttribute("LogFilename");
291 if (String.IsNullOrEmpty(attri))
292 {
293 }
294 else
295 {
296 m_logFilename = attri;
297 }
298
299 // SandBoxMode
300 attri = "";
301 attri = configData.GetAttribute("SandBox");
302 if ((attri == "") || ((attri != "false") && (attri != "true")))
303 {
304 this.m_sandbox = false;
305 configData.SetAttribute("SandBox", "false");
306 }
307 else
308 {
309 this.m_sandbox = Convert.ToBoolean(attri);
310 }
311
312 // LoginServer
313 attri = "";
314 attri = configData.GetAttribute("LoginServer");
315 if ((attri == "") || ((attri != "false") && (attri != "true")))
316 {
317 this.m_loginserver = false;
318 configData.SetAttribute("LoginServer", "false");
319 }
320 else
321 {
322 this.m_loginserver = Convert.ToBoolean(attri);
323 }
324
325 // Sandbox User accounts
326 attri = "";
327 attri = configData.GetAttribute("UserAccount");
328 if ((attri == "") || ((attri != "false") && (attri != "true")))
329 {
330 this.user_accounts = false;
331 configData.SetAttribute("UserAccounts", "false");
332 }
333 else if (attri == "true")
334 {
335 this.user_accounts = Convert.ToBoolean(attri);
336 }
337
338 // Grid mode hack to use local asset server
339 attri = "";
340 attri = configData.GetAttribute("LocalAssets");
341 if ((attri == "") || ((attri != "false") && (attri != "true")))
342 {
343 this.gridLocalAsset = false;
344 configData.SetAttribute("LocalAssets", "false");
345 }
346 else if (attri == "true")
347 {
348 this.gridLocalAsset = Convert.ToBoolean(attri);
349 }
350
351
352 attri = "";
353 attri = configData.GetAttribute("PhysicsEngine");
354 switch (attri)
355 {
356 default:
357 m_log.Warn("Main.cs: SetupFromConfig() - Invalid value for PhysicsEngine attribute, terminating");
358 Environment.Exit(1);
359 break;
360
361 case "":
362 this.m_physicsEngine = "basicphysics";
363 configData.SetAttribute("PhysicsEngine", "basicphysics");
364 ScenePresence.PhysicsEngineFlying = false;
365 break;
366
367 case "basicphysics":
368 this.m_physicsEngine = "basicphysics";
369 configData.SetAttribute("PhysicsEngine", "basicphysics");
370 ScenePresence.PhysicsEngineFlying = false;
371 break;
372
373 case "RealPhysX":
374 this.m_physicsEngine = "RealPhysX";
375 ScenePresence.PhysicsEngineFlying = true;
376 break;
377
378 case "OpenDynamicsEngine":
379 this.m_physicsEngine = "OpenDynamicsEngine";
380 ScenePresence.PhysicsEngineFlying = true;
381 break;
382 }
383
384 configData.Commit();
385
386 }
387
388 /// <summary>
389 /// Performs any last-minute sanity checking and shuts down the region server
390 /// </summary>
391 public virtual void Shutdown()
392 {
393 m_log.Verbose("Main.cs:Shutdown() - Closing all threads");
394 m_log.Verbose("Main.cs:Shutdown() - Killing listener thread");
395 m_log.Verbose("Main.cs:Shutdown() - Killing clients");
396 // IMPLEMENT THIS
397 m_log.Verbose("Main.cs:Shutdown() - Closing console and terminating");
398 for (int i = 0; i < m_localWorld.Count; i++)
399 {
400 ((Scene)m_localWorld[i]).Close();
401 }
402 m_log.Close();
403 Environment.Exit(0);
404 }
405
406 #region Console Commands
407 /// <summary>
408 /// Runs commands issued by the server console from the operator
409 /// </summary>
410 /// <param name="command">The first argument of the parameter (the command)</param>
411 /// <param name="cmdparams">Additional arguments passed to the command</param>
412 public void RunCmd(string command, string[] cmdparams)
413 {
414 switch (command)
415 {
416 case "help":
417 m_log.Error("show users - show info about connected users");
418 m_log.Error("shutdown - disconnect all clients and shutdown");
419 break;
420
421 case "show":
422 if (cmdparams.Length > 0)
423 {
424 Show(cmdparams[0]);
425 }
426 break;
427
428 case "terrain":
429 string result = "";
430 for (int i = 0; i < m_localWorld.Count; i++)
431 {
432 if (!((Scene)m_localWorld[i]).Terrain.RunTerrainCmd(cmdparams, ref result, m_localWorld[i].RegionInfo.RegionName))
433 {
434 m_log.Error(result);
435 }
436 }
437 break;
438
439 case "shutdown":
440 Shutdown();
441 break;
442
443 default:
444 m_log.Error("Unknown command");
445 break;
446 }
447 }
448
449 /// <summary>
450 /// Outputs to the console information about the region
451 /// </summary>
452 /// <param name="ShowWhat">What information to display (valid arguments are "uptime", "users")</param>
453 public void Show(string ShowWhat)
454 {
455 switch (ShowWhat)
456 {
457 case "uptime":
458 m_log.Error("OpenSim has been running since " + startuptime.ToString());
459 m_log.Error("That is " + (DateTime.Now - startuptime).ToString());
460 break;
461 case "users":
462 ScenePresence TempAv;
463 m_log.Error(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16}{5,-16}{6,-16}", "Firstname", "Lastname", "Agent ID", "Session ID", "Circuit", "IP", "World"));
464 for (int i = 0; i < m_localWorld.Count; i++)
465 {
466 foreach (libsecondlife.LLUUID UUID in ((Scene)m_localWorld[i]).Entities.Keys)
467 {
468 if (((Scene)m_localWorld[i]).Entities[UUID].ToString() == "OpenSim.world.Avatar")
469 {
470 TempAv = (ScenePresence)((Scene)m_localWorld[i]).Entities[UUID];
471 m_log.Error(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}{6,-16}", TempAv.firstname, TempAv.lastname, UUID, TempAv.ControllingClient.AgentId, "Unknown", "Unknown"), ((Scene)m_localWorld[i]).RegionInfo.RegionName);
472 }
473 }
474 }
475 break;
476 }
477 }
478 #endregion
479 }
480
481
482}
diff --git a/OpenSim/Region/Application/VersionInfo.cs b/OpenSim/Region/Application/VersionInfo.cs
new file mode 100644
index 0000000..2c720a3
--- /dev/null
+++ b/OpenSim/Region/Application/VersionInfo.cs
@@ -0,0 +1,36 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim
29{
30 /// <summary>
31 /// </summary>
32 public class VersionInfo
33 {
34 public static string Version = "0.3, SVN build ";
35 }
36}
diff --git a/OpenSim/Region/Caches/AssetCache.cs b/OpenSim/Region/Caches/AssetCache.cs
new file mode 100644
index 0000000..453edbe
--- /dev/null
+++ b/OpenSim/Region/Caches/AssetCache.cs
@@ -0,0 +1,669 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using System.Collections.Generic;
31using System.Reflection;
32using System.Threading;
33using libsecondlife;
34using libsecondlife.Packets;
35using OpenSim.Framework.Interfaces;
36using OpenSim.Framework.Types;
37
38namespace OpenSim.Region.Caches
39{
40 public delegate void DownloadComplete(AssetCache.TextureSender sender);
41
42 /// <summary>
43 /// Manages local cache of assets and their sending to viewers.
44 /// </summary>
45 public class AssetCache : IAssetReceiver
46 {
47 public Dictionary<LLUUID, AssetInfo> Assets;
48 public Dictionary<LLUUID, TextureImage> Textures;
49
50 public List<AssetRequest> AssetRequests = new List<AssetRequest>(); //assets ready to be sent to viewers
51 public List<AssetRequest> TextureRequests = new List<AssetRequest>(); //textures ready to be sent
52
53 public Dictionary<LLUUID, AssetRequest> RequestedAssets = new Dictionary<LLUUID, AssetRequest>(); //Assets requested from the asset server
54 public Dictionary<LLUUID, AssetRequest> RequestedTextures = new Dictionary<LLUUID, AssetRequest>(); //Textures requested from the asset server
55
56 public Dictionary<LLUUID, TextureSender> SendingTextures = new Dictionary<LLUUID, TextureSender>();
57 private IAssetServer _assetServer;
58 private Thread _assetCacheThread;
59 private LLUUID[] textureList = new LLUUID[5];
60
61 /// <summary>
62 ///
63 /// </summary>
64 public AssetCache(IAssetServer assetServer)
65 {
66 Console.WriteLine("Creating Asset cache");
67 _assetServer = assetServer;
68 _assetServer.SetReceiver(this);
69 Assets = new Dictionary<LLUUID, AssetInfo>();
70 Textures = new Dictionary<LLUUID, TextureImage>();
71 this._assetCacheThread = new Thread(new ThreadStart(RunAssetManager));
72 this._assetCacheThread.IsBackground = true;
73 this._assetCacheThread.Start();
74
75 }
76
77 public AssetCache(string assetServerDLLName, string assetServerURL, string assetServerKey)
78 {
79 Console.WriteLine("Creating Asset cache");
80 _assetServer = this.LoadAssetDll(assetServerDLLName);
81 _assetServer.SetServerInfo(assetServerURL, assetServerKey);
82 _assetServer.SetReceiver(this);
83 Assets = new Dictionary<LLUUID, AssetInfo>();
84 Textures = new Dictionary<LLUUID, TextureImage>();
85 this._assetCacheThread = new Thread(new ThreadStart(RunAssetManager));
86 this._assetCacheThread.IsBackground = true;
87 this._assetCacheThread.Start();
88
89 }
90
91 /// <summary>
92 ///
93 /// </summary>
94 public void RunAssetManager()
95 {
96 while (true)
97 {
98 try
99 {
100 //Console.WriteLine("Asset cache loop");
101 this.ProcessAssetQueue();
102 this.ProcessTextureQueue();
103 Thread.Sleep(500);
104 }
105 catch (Exception e)
106 {
107 Console.WriteLine(e.Message);
108 }
109 }
110 }
111
112 public void LoadDefaultTextureSet()
113 {
114 //hack: so we can give each user a set of textures
115 textureList[0] = new LLUUID("00000000-0000-0000-9999-000000000001");
116 textureList[1] = new LLUUID("00000000-0000-0000-9999-000000000002");
117 textureList[2] = new LLUUID("00000000-0000-0000-9999-000000000003");
118 textureList[3] = new LLUUID("00000000-0000-0000-9999-000000000004");
119 textureList[4] = new LLUUID("00000000-0000-0000-9999-000000000005");
120
121 for (int i = 0; i < textureList.Length; i++)
122 {
123 this._assetServer.RequestAsset(textureList[i], true);
124 }
125
126 }
127
128 public AssetBase[] CreateNewInventorySet(LLUUID agentID)
129 {
130 AssetBase[] inventorySet = new AssetBase[this.textureList.Length];
131 for (int i = 0; i < textureList.Length; i++)
132 {
133 if (this.Textures.ContainsKey(textureList[i]))
134 {
135 inventorySet[i] = this.CloneImage(agentID, this.Textures[textureList[i]]);
136 TextureImage image = new TextureImage(inventorySet[i]);
137 this.Textures.Add(image.FullID, image);
138 this._assetServer.UploadNewAsset(image); //save the asset to the asset server
139 }
140 }
141 return inventorySet;
142 }
143
144 public AssetBase GetAsset(LLUUID assetID)
145 {
146 AssetBase asset = null;
147 if (this.Textures.ContainsKey(assetID))
148 {
149 asset = this.Textures[assetID];
150 }
151 else if (this.Assets.ContainsKey(assetID))
152 {
153 asset = this.Assets[assetID];
154 }
155 return asset;
156 }
157
158 public void AddAsset(AssetBase asset)
159 {
160 // Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated());
161 if (asset.Type == 0)
162 {
163 //Console.WriteLine("which is a texture");
164 if (!this.Textures.ContainsKey(asset.FullID))
165 { //texture
166 TextureImage textur = new TextureImage(asset);
167 this.Textures.Add(textur.FullID, textur);
168 this._assetServer.UploadNewAsset(asset);
169 }
170 }
171 else
172 {
173 if (!this.Assets.ContainsKey(asset.FullID))
174 {
175 AssetInfo assetInf = new AssetInfo(asset);
176 this.Assets.Add(assetInf.FullID, assetInf);
177 this._assetServer.UploadNewAsset(asset);
178 }
179 }
180 }
181
182 /// <summary>
183 ///
184 /// </summary>
185 private void ProcessTextureQueue()
186 {
187 if (this.TextureRequests.Count == 0)
188 {
189 //no requests waiting
190 return;
191 }
192 int num;
193 num = this.TextureRequests.Count;
194
195 AssetRequest req;
196 for (int i = 0; i < num; i++)
197 {
198 req = (AssetRequest)this.TextureRequests[i];
199 if (!this.SendingTextures.ContainsKey(req.ImageInfo.FullID))
200 {
201 TextureSender sender = new TextureSender(req);
202 sender.OnComplete += this.TextureSent;
203 lock (this.SendingTextures)
204 {
205 this.SendingTextures.Add(req.ImageInfo.FullID, sender);
206 }
207 }
208
209 }
210
211 this.TextureRequests.Clear();
212 }
213
214 /// <summary>
215 /// Event handler, called by a TextureSender object to say that texture has been sent
216 /// </summary>
217 /// <param name="sender"></param>
218 public void TextureSent(TextureSender sender)
219 {
220 if (this.SendingTextures.ContainsKey(sender.request.ImageInfo.FullID))
221 {
222 lock (this.SendingTextures)
223 {
224 this.SendingTextures.Remove(sender.request.ImageInfo.FullID);
225 }
226 }
227 }
228
229 public void AssetReceived(AssetBase asset, bool IsTexture)
230 {
231 if (asset.FullID != LLUUID.Zero) // if it is set to zero then the asset wasn't found by the server
232 {
233 //check if it is a texture or not
234 //then add to the correct cache list
235 //then check for waiting requests for this asset/texture (in the Requested lists)
236 //and move those requests into the Requests list.
237 if (IsTexture)
238 {
239 TextureImage image = new TextureImage(asset);
240 this.Textures.Add(image.FullID, image);
241 if (this.RequestedTextures.ContainsKey(image.FullID))
242 {
243 AssetRequest req = this.RequestedTextures[image.FullID];
244 req.ImageInfo = image;
245 if (image.Data.LongLength > 600)
246 {
247 //over 600 bytes so split up file
248 req.NumPackets = 1 + (int)(image.Data.Length - 600 + 999) / 1000;
249 }
250 else
251 {
252 req.NumPackets = 1;
253 }
254 this.RequestedTextures.Remove(image.FullID);
255 this.TextureRequests.Add(req);
256 }
257 }
258 else
259 {
260 AssetInfo assetInf = new AssetInfo(asset);
261 this.Assets.Add(assetInf.FullID, assetInf);
262 if (this.RequestedAssets.ContainsKey(assetInf.FullID))
263 {
264 AssetRequest req = this.RequestedAssets[assetInf.FullID];
265 req.AssetInf = assetInf;
266 if (assetInf.Data.LongLength > 600)
267 {
268 //over 600 bytes so split up file
269 req.NumPackets = 1 + (int)(assetInf.Data.Length - 600 + 999) / 1000;
270 }
271 else
272 {
273 req.NumPackets = 1;
274 }
275 this.RequestedAssets.Remove(assetInf.FullID);
276 this.AssetRequests.Add(req);
277 }
278 }
279 }
280 }
281
282 public void AssetNotFound(AssetBase asset)
283 {
284 //the asset server had no knowledge of requested asset
285
286 }
287
288 #region Assets
289 /// <summary>
290 ///
291 /// </summary>
292 /// <param name="userInfo"></param>
293 /// <param name="transferRequest"></param>
294 public void AddAssetRequest(IClientAPI userInfo, TransferRequestPacket transferRequest)
295 {
296 LLUUID requestID = new LLUUID(transferRequest.TransferInfo.Params, 0);
297 //check to see if asset is in local cache, if not we need to request it from asset server.
298
299 if (!this.Assets.ContainsKey(requestID))
300 {
301 //not found asset
302 // so request from asset server
303 if (!this.RequestedAssets.ContainsKey(requestID))
304 {
305 AssetRequest request = new AssetRequest();
306 request.RequestUser = userInfo;
307 request.RequestAssetID = requestID;
308 request.TransferRequestID = transferRequest.TransferInfo.TransferID;
309 this.RequestedAssets.Add(requestID, request);
310 this._assetServer.RequestAsset(requestID, false);
311 }
312 return;
313 }
314 //it is in our cache
315 AssetInfo asset = this.Assets[requestID];
316
317 //work out how many packets it should be sent in
318 // and add to the AssetRequests list
319 AssetRequest req = new AssetRequest();
320 req.RequestUser = userInfo;
321 req.RequestAssetID = requestID;
322 req.TransferRequestID = transferRequest.TransferInfo.TransferID;
323 req.AssetInf = asset;
324
325 if (asset.Data.LongLength > 600)
326 {
327 //over 600 bytes so split up file
328 req.NumPackets = 1 + (int)(asset.Data.Length - 600 + 999) / 1000;
329 }
330 else
331 {
332 req.NumPackets = 1;
333 }
334
335 this.AssetRequests.Add(req);
336 }
337
338 /// <summary>
339 ///
340 /// </summary>
341 private void ProcessAssetQueue()
342 {
343 if (this.AssetRequests.Count == 0)
344 {
345 //no requests waiting
346 return;
347 }
348 int num;
349
350 if (this.AssetRequests.Count < 5)
351 {
352 //lower than 5 so do all of them
353 num = this.AssetRequests.Count;
354 }
355 else
356 {
357 num = 5;
358 }
359 AssetRequest req;
360 for (int i = 0; i < num; i++)
361 {
362 req = (AssetRequest)this.AssetRequests[i];
363
364 TransferInfoPacket Transfer = new TransferInfoPacket();
365 Transfer.TransferInfo.ChannelType = 2;
366 Transfer.TransferInfo.Status = 0;
367 Transfer.TransferInfo.TargetType = 0;
368 Transfer.TransferInfo.Params = req.RequestAssetID.GetBytes();
369 Transfer.TransferInfo.Size = (int)req.AssetInf.Data.Length;
370 Transfer.TransferInfo.TransferID = req.TransferRequestID;
371 req.RequestUser.OutPacket(Transfer);
372
373 if (req.NumPackets == 1)
374 {
375 TransferPacketPacket TransferPacket = new TransferPacketPacket();
376 TransferPacket.TransferData.Packet = 0;
377 TransferPacket.TransferData.ChannelType = 2;
378 TransferPacket.TransferData.TransferID = req.TransferRequestID;
379 TransferPacket.TransferData.Data = req.AssetInf.Data;
380 TransferPacket.TransferData.Status = 1;
381 req.RequestUser.OutPacket(TransferPacket);
382 }
383 else
384 {
385 //more than one packet so split file up , for now it can't be bigger than 2000 bytes
386 TransferPacketPacket TransferPacket = new TransferPacketPacket();
387 TransferPacket.TransferData.Packet = 0;
388 TransferPacket.TransferData.ChannelType = 2;
389 TransferPacket.TransferData.TransferID = req.TransferRequestID;
390 byte[] chunk = new byte[1000];
391 Array.Copy(req.AssetInf.Data, chunk, 1000);
392 TransferPacket.TransferData.Data = chunk;
393 TransferPacket.TransferData.Status = 0;
394 req.RequestUser.OutPacket(TransferPacket);
395
396 TransferPacket = new TransferPacketPacket();
397 TransferPacket.TransferData.Packet = 1;
398 TransferPacket.TransferData.ChannelType = 2;
399 TransferPacket.TransferData.TransferID = req.TransferRequestID;
400 byte[] chunk1 = new byte[(req.AssetInf.Data.Length - 1000)];
401 Array.Copy(req.AssetInf.Data, 1000, chunk1, 0, chunk1.Length);
402 TransferPacket.TransferData.Data = chunk1;
403 TransferPacket.TransferData.Status = 1;
404 req.RequestUser.OutPacket(TransferPacket);
405 }
406
407 }
408
409 //remove requests that have been completed
410 for (int i = 0; i < num; i++)
411 {
412 this.AssetRequests.RemoveAt(0);
413 }
414
415 }
416
417 public AssetInfo CloneAsset(LLUUID newOwner, AssetInfo sourceAsset)
418 {
419 AssetInfo newAsset = new AssetInfo();
420 newAsset.Data = new byte[sourceAsset.Data.Length];
421 Array.Copy(sourceAsset.Data, newAsset.Data, sourceAsset.Data.Length);
422 newAsset.FullID = LLUUID.Random();
423 newAsset.Type = sourceAsset.Type;
424 newAsset.InvType = sourceAsset.InvType;
425 return (newAsset);
426 }
427 #endregion
428
429 #region Textures
430 /// <summary>
431 ///
432 /// </summary>
433 /// <param name="userInfo"></param>
434 /// <param name="imageID"></param>
435 public void AddTextureRequest(IClientAPI userInfo, LLUUID imageID)
436 {
437 //Console.WriteLine("texture request for " + imageID.ToStringHyphenated());
438 //check to see if texture is in local cache, if not request from asset server
439 if (!this.Textures.ContainsKey(imageID))
440 {
441 if (!this.RequestedTextures.ContainsKey(imageID))
442 {
443 //not is cache so request from asset server
444 AssetRequest request = new AssetRequest();
445 request.RequestUser = userInfo;
446 request.RequestAssetID = imageID;
447 request.IsTextureRequest = true;
448 this.RequestedTextures.Add(imageID, request);
449 this._assetServer.RequestAsset(imageID, true);
450 }
451 return;
452 }
453
454 //Console.WriteLine("texture already in cache");
455 TextureImage imag = this.Textures[imageID];
456 AssetRequest req = new AssetRequest();
457 req.RequestUser = userInfo;
458 req.RequestAssetID = imageID;
459 req.IsTextureRequest = true;
460 req.ImageInfo = imag;
461
462 if (imag.Data.LongLength > 600)
463 {
464 //over 600 bytes so split up file
465 req.NumPackets = 1 + (int)(imag.Data.Length - 600 + 999) / 1000;
466 }
467 else
468 {
469 req.NumPackets = 1;
470 }
471 this.TextureRequests.Add(req);
472 }
473
474 public TextureImage CloneImage(LLUUID newOwner, TextureImage source)
475 {
476 TextureImage newImage = new TextureImage();
477 newImage.Data = new byte[source.Data.Length];
478 Array.Copy(source.Data, newImage.Data, source.Data.Length);
479 //newImage.filename = source.filename;
480 newImage.FullID = LLUUID.Random();
481 newImage.Name = source.Name;
482 return (newImage);
483 }
484 #endregion
485
486 private IAssetServer LoadAssetDll(string dllName)
487 {
488 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
489 IAssetServer server = null;
490
491 foreach (Type pluginType in pluginAssembly.GetTypes())
492 {
493 if (pluginType.IsPublic)
494 {
495 if (!pluginType.IsAbstract)
496 {
497 Type typeInterface = pluginType.GetInterface("IAssetPlugin", true);
498
499 if (typeInterface != null)
500 {
501 IAssetPlugin plug = (IAssetPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
502 server = plug.GetAssetServer();
503 break;
504 }
505
506 typeInterface = null;
507 }
508 }
509 }
510 pluginAssembly = null;
511 return server;
512 }
513
514 public class AssetRequest
515 {
516 public IClientAPI RequestUser;
517 public LLUUID RequestAssetID;
518 public AssetInfo AssetInf;
519 public TextureImage ImageInfo;
520 public LLUUID TransferRequestID;
521 public long DataPointer = 0;
522 public int NumPackets = 0;
523 public int PacketCounter = 0;
524 public bool IsTextureRequest;
525 //public bool AssetInCache;
526 //public int TimeRequested;
527
528 public AssetRequest()
529 {
530
531 }
532 }
533
534 public class AssetInfo : AssetBase
535 {
536 public AssetInfo()
537 {
538
539 }
540
541 public AssetInfo(AssetBase aBase)
542 {
543 Data = aBase.Data;
544 FullID = aBase.FullID;
545 Type = aBase.Type;
546 InvType = aBase.InvType;
547 Name = aBase.Name;
548 Description = aBase.Description;
549 }
550 }
551
552 public class TextureImage : AssetBase
553 {
554 public TextureImage()
555 {
556
557 }
558
559 public TextureImage(AssetBase aBase)
560 {
561 Data = aBase.Data;
562 FullID = aBase.FullID;
563 Type = aBase.Type;
564 InvType = aBase.InvType;
565 Name = aBase.Name;
566 Description = aBase.Description;
567 }
568 }
569
570 public class TextureSender
571 {
572 public AssetRequest request;
573 public event DownloadComplete OnComplete;
574 Thread m_thread;
575 public TextureSender(AssetRequest req)
576 {
577 request = req;
578 //Console.WriteLine("creating worker thread for texture " + req.ImageInfo.FullID.ToStringHyphenated());
579 //Console.WriteLine("texture data length is " + req.ImageInfo.Data.Length);
580 // Console.WriteLine("in " + req.NumPackets + " packets");
581 //ThreadPool.QueueUserWorkItem(new WaitCallback(SendTexture), new object());
582
583 //need some sort of custom threadpool here, as using the .net one, overloads it and stops the handling of incoming packets etc
584 //but don't really want to create a thread for every texture download
585 m_thread = new Thread(new ThreadStart(SendTexture));
586 m_thread.IsBackground = true;
587 m_thread.Start();
588 }
589
590 public void SendTexture()
591 {
592 //Console.WriteLine("starting to send sending texture " + request.ImageInfo.FullID.ToStringHyphenated());
593 while (request.PacketCounter != request.NumPackets)
594 {
595 SendPacket();
596 Thread.Sleep(500);
597 }
598
599 //Console.WriteLine("finished sending texture " + request.ImageInfo.FullID.ToStringHyphenated());
600 if (OnComplete != null)
601 {
602 OnComplete(this);
603 }
604 }
605
606 public void SendPacket()
607 {
608 AssetRequest req = request;
609 // Console.WriteLine("sending " + req.ImageInfo.FullID);
610
611 // if (req.ImageInfo.FullID == new LLUUID("00000000-0000-0000-5005-000000000005"))
612 if (req.PacketCounter == 0)
613 {
614 //first time for this request so send imagedata packet
615 if (req.NumPackets == 1)
616 {
617 //only one packet so send whole file
618 ImageDataPacket im = new ImageDataPacket();
619 im.ImageID.Packets = 1;
620 im.ImageID.ID = req.ImageInfo.FullID;
621 im.ImageID.Size = (uint)req.ImageInfo.Data.Length;
622 im.ImageData.Data = req.ImageInfo.Data;
623 im.ImageID.Codec = 2;
624 req.RequestUser.OutPacket(im);
625 req.PacketCounter++;
626 //req.ImageInfo.l= time;
627 //System.Console.WriteLine("sent texture: " + req.ImageInfo.FullID);
628 // Console.WriteLine("sending packet 1 for " + req.ImageInfo.FullID.ToStringHyphenated());
629 }
630 else
631 {
632 //more than one packet so split file up
633 ImageDataPacket im = new ImageDataPacket();
634 im.ImageID.Packets = (ushort)req.NumPackets;
635 im.ImageID.ID = req.ImageInfo.FullID;
636 im.ImageID.Size = (uint)req.ImageInfo.Data.Length;
637 im.ImageData.Data = new byte[600];
638 Array.Copy(req.ImageInfo.Data, 0, im.ImageData.Data, 0, 600);
639 im.ImageID.Codec = 2;
640 req.RequestUser.OutPacket(im);
641 req.PacketCounter++;
642 //req.ImageInfo.last_used = time;
643 //System.Console.WriteLine("sent first packet of texture:
644 // Console.WriteLine("sending packet 1 for " + req.ImageInfo.FullID.ToStringHyphenated());
645 }
646 }
647 else
648 {
649 //Console.WriteLine("sending packet" + req.PacketCounter + "for " + req.ImageInfo.FullID.ToStringHyphenated());
650 //send imagepacket
651 //more than one packet so split file up
652 ImagePacketPacket im = new ImagePacketPacket();
653 im.ImageID.Packet = (ushort)req.PacketCounter;
654 im.ImageID.ID = req.ImageInfo.FullID;
655 int size = req.ImageInfo.Data.Length - 600 - 1000 * (req.PacketCounter - 1);
656 if (size > 1000) size = 1000;
657 im.ImageData.Data = new byte[size];
658 Array.Copy(req.ImageInfo.Data, 600 + 1000 * (req.PacketCounter - 1), im.ImageData.Data, 0, size);
659 req.RequestUser.OutPacket(im);
660 req.PacketCounter++;
661 //req.ImageInfo.last_used = time;
662 //System.Console.WriteLine("sent a packet of texture: "+req.image_info.FullID);
663 }
664
665 }
666 }
667 }
668}
669
diff --git a/OpenSim/Region/Caches/Properties/AssemblyInfo.cs b/OpenSim/Region/Caches/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8389415
--- /dev/null
+++ b/OpenSim/Region/Caches/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.Region.Caches")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.Region.Caches")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("2b15ddbf-0341-49a6-85c0-cece268a4518")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Region/Capabilities/Caps.cs b/OpenSim/Region/Capabilities/Caps.cs
new file mode 100644
index 0000000..6068076
--- /dev/null
+++ b/OpenSim/Region/Capabilities/Caps.cs
@@ -0,0 +1,336 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using System.Collections.Generic;
31using System.Text;
32using libsecondlife;
33using OpenSim.Framework.Servers;
34using OpenSim.Framework.Types;
35using OpenSim.Framework.Utilities;
36using OpenSim.Region.Caches;
37
38namespace OpenSim.Region.Capabilities
39{
40 public delegate void UpLoadedTexture(LLUUID assetID, LLUUID inventoryItem, byte[] data);
41
42 public class Caps
43 {
44 private string m_httpListenerHostName;
45 private int m_httpListenPort;
46 private string m_capsObjectPath = "00001-";
47 private string m_requestPath = "0000/";
48 private string m_mapLayerPath = "0001/";
49 private string m_newInventory = "0002/";
50 private string m_requestTexture = "0003/";
51 private string eventQueue = "0100/";
52 private BaseHttpServer httpListener;
53 private LLUUID agentID;
54 private AssetCache assetCache;
55 private int eventQueueCount = 1;
56 private Queue<string> CapsEventQueue = new Queue<string>();
57
58 public Caps(AssetCache assetCach, BaseHttpServer httpServer, string httpListen, int httpPort, string capsPath, LLUUID agent)
59 {
60 assetCache = assetCach;
61 m_capsObjectPath = capsPath;
62 httpListener = httpServer;
63 m_httpListenerHostName = httpListen;
64 m_httpListenPort = httpPort;
65 agentID = agent;
66 }
67
68 /// <summary>
69 ///
70 /// </summary>
71 public void RegisterHandlers()
72 {
73 Console.WriteLine("registering CAPS handlers");
74 string capsBase = "/CAPS/" + m_capsObjectPath;
75
76
77 //AddLegacyCapsHandler( httpListener, m_mapLayerPath, MapLayer);
78
79 httpListener.AddStreamHandler(
80 new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer ));
81
82 AddLegacyCapsHandler(httpListener, m_requestPath, CapsRequest);
83 AddLegacyCapsHandler(httpListener, m_newInventory, NewAgentInventory);
84 AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue);
85 AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture);
86
87 }
88
89 [Obsolete("Use BaseHttpServer.AddStreamHandler(new LLSDStreamHandler( LLSDMethod delegate )) instead.")]
90 private void AddLegacyCapsHandler(BaseHttpServer httpListener, string path, RestMethod restMethod)
91 {
92 string capsBase = "/CAPS/" + m_capsObjectPath;
93 httpListener.AddStreamHandler(new RestStreamHandler("POST", capsBase + path, restMethod));
94 }
95
96 /// <summary>
97 ///
98 /// </summary>
99 /// <param name="request"></param>
100 /// <param name="path"></param>
101 /// <param name="param"></param>
102 /// <returns></returns>
103 public string CapsRequest(string request, string path, string param)
104 {
105 // Console.WriteLine("Caps Request " + request);
106 string result = "";
107 result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities());
108 return result;
109 }
110
111 /// <summary>
112 ///
113 /// </summary>
114 /// <returns></returns>
115 protected LLSDCapsDetails GetCapabilities()
116 {
117 LLSDCapsDetails caps = new LLSDCapsDetails();
118 string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath;
119
120 caps.MapLayer = capsBaseUrl + m_mapLayerPath;
121 // caps.NewFileAgentInventory = capsBaseUrl + m_newInventory;
122
123 return caps;
124 }
125
126 /// <summary>
127 ///
128 /// </summary>
129 /// <param name="request"></param>
130 /// <param name="path"></param>
131 /// <param name="param"></param>
132 /// <returns></returns>
133 public string MapLayer(string request, string path, string param)
134 {
135 Encoding _enc = Encoding.UTF8;
136 Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(_enc.GetBytes(request));
137 LLSDMapRequest mapReq = new LLSDMapRequest();
138 LLSDHelpers.DeserialiseLLSDMap(hash, mapReq);
139
140 LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
141 mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse());
142 string res = LLSDHelpers.SerialiseLLSDReply(mapResponse);
143
144 return res;
145 }
146
147 public LLSDMapLayerResponse GetMapLayer(LLSDMapRequest mapReq)
148 {
149 LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
150 mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse());
151 return mapResponse;
152 }
153
154
155 /// <summary>
156 ///
157 /// </summary>
158 /// <returns></returns>
159 protected LLSDMapLayer BuildLLSDMapLayerResponse()
160 {
161 LLSDMapLayer mapLayer = new LLSDMapLayer();
162 mapLayer.Right = 5000;
163 mapLayer.Top = 5000;
164 mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006");
165
166 return mapLayer;
167 }
168
169 /// <summary>
170 ///
171 /// </summary>
172 /// <param name="request"></param>
173 /// <param name="path"></param>
174 /// <param name="param"></param>
175 /// <returns></returns>
176 public string RequestTexture(string request, string path, string param)
177 {
178 // Needs implementing (added to remove compiler warning)
179 return "";
180 }
181
182 /// <summary>
183 ///
184 /// </summary>
185 /// <param name="request"></param>
186 /// <param name="path"></param>
187 /// <param name="param"></param>
188 /// <returns></returns>
189 public string ProcessEventQueue(string request, string path, string param)
190 {
191 string res = "";
192
193 if (this.CapsEventQueue.Count > 0)
194 {
195 lock (this.CapsEventQueue)
196 {
197 string item = CapsEventQueue.Dequeue();
198 res = item;
199 }
200 }
201 else
202 {
203 res = this.CreateEmptyEventResponse();
204 }
205 return res;
206 }
207
208 /// <summary>
209 ///
210 /// </summary>
211 /// <param name="caps"></param>
212 /// <param name="ipAddressPort"></param>
213 /// <returns></returns>
214 public string CreateEstablishAgentComms(string caps, string ipAddressPort)
215 {
216 LLSDCapEvent eventItem = new LLSDCapEvent();
217 eventItem.id = eventQueueCount;
218 //should be creating a EstablishAgentComms item, but there isn't a class for it yet
219 eventItem.events.Array.Add(new LLSDEmpty());
220 string res = LLSDHelpers.SerialiseLLSDReply(eventItem);
221 eventQueueCount++;
222
223 this.CapsEventQueue.Enqueue(res);
224 return res;
225 }
226
227 /// <summary>
228 ///
229 /// </summary>
230 /// <returns></returns>
231 public string CreateEmptyEventResponse()
232 {
233 LLSDCapEvent eventItem = new LLSDCapEvent();
234 eventItem.id = eventQueueCount;
235 eventItem.events.Array.Add(new LLSDEmpty());
236 string res = LLSDHelpers.SerialiseLLSDReply(eventItem);
237 eventQueueCount++;
238 return res;
239 }
240
241 /// <summary>
242 ///
243 /// </summary>
244 /// <param name="request"></param>
245 /// <param name="path"></param>
246 /// <param name="param"></param>
247 /// <returns></returns>
248 public string NewAgentInventory(string request, string path, string param)
249 {
250 //Console.WriteLine("received upload request:"+ request);
251 string res = "";
252 LLUUID newAsset = LLUUID.Random();
253 LLUUID newInvItem = LLUUID.Random();
254 string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
255 AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener);
256
257 AddLegacyCapsHandler( httpListener, uploaderPath, uploader.uploaderCaps);
258
259 string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + uploaderPath;
260 //Console.WriteLine("uploader url is " + uploaderURL);
261 res += "<llsd><map>";
262 res += "<key>uploader</key><string>" + uploaderURL + "</string>";
263 //res += "<key>success</key><boolean>true</boolean>";
264 res += "<key>state</key><string>upload</string>";
265 res += "</map></llsd>";
266 uploader.OnUpLoad += this.UploadHandler;
267 return res;
268 }
269
270 /// <summary>
271 ///
272 /// </summary>
273 /// <param name="assetID"></param>
274 /// <param name="inventoryItem"></param>
275 /// <param name="data"></param>
276 public void UploadHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data)
277 {
278 // Console.WriteLine("upload handler called");
279 AssetBase asset;
280 asset = new AssetBase();
281 asset.FullID = assetID;
282 asset.Type = 0;
283 asset.InvType = 0;
284 asset.Name = "UploadedTexture" + Util.RandomClass.Next(1, 1000).ToString("000");
285 asset.Data = data;
286 this.assetCache.AddAsset(asset);
287 }
288
289 public class AssetUploader
290 {
291 public event UpLoadedTexture OnUpLoad;
292
293 private string uploaderPath = "";
294 private LLUUID newAssetID;
295 private LLUUID inventoryItemID;
296 private BaseHttpServer httpListener;
297 public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer)
298 {
299 newAssetID = assetID;
300 inventoryItemID = inventoryItem;
301 uploaderPath = path;
302 httpListener = httpServer;
303
304 }
305
306 public string uploaderCaps(string request, string path, string param)
307 {
308 Encoding _enc = Encoding.UTF8;
309 byte[] data = _enc.GetBytes(request);
310 //Console.WriteLine("recieved upload " + Util.FieldToString(data));
311 LLUUID inv = this.inventoryItemID;
312 string res = "";
313 res += "<llsd><map>";
314 res += "<key>new_asset</key><string>" + newAssetID.ToStringHyphenated() + "</string>";
315 res += "<key>new_inventory_item</key><uuid>" + inv.ToStringHyphenated() + "</uuid>";
316 res += "<key>state</key><string>complete</string>";
317 res += "</map></llsd>";
318
319 // Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated());
320 httpListener.RemoveStreamHandler("POST", "/CAPS/" + uploaderPath);
321
322 if (OnUpLoad != null)
323 {
324 OnUpLoad(newAssetID, inv, data);
325 }
326
327 /*FileStream fs = File.Create("upload.jp2");
328 BinaryWriter bw = new BinaryWriter(fs);
329 bw.Write(data);
330 bw.Close();
331 fs.Close();*/
332 return res;
333 }
334 }
335 }
336}
diff --git a/OpenSim/Region/Capabilities/LLSDArray.cs b/OpenSim/Region/Capabilities/LLSDArray.cs
new file mode 100644
index 0000000..e04849f
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDArray.cs
@@ -0,0 +1,42 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections;
29
30namespace OpenSim.Region.Capabilities
31{
32 [LLSDType("ARRAY")]
33 public class LLSDArray
34 {
35 public ArrayList Array = new ArrayList();
36
37 public LLSDArray()
38 {
39
40 }
41 }
42}
diff --git a/OpenSim/Region/Capabilities/LLSDCapEvent.cs b/OpenSim/Region/Capabilities/LLSDCapEvent.cs
new file mode 100644
index 0000000..51b4fe0
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDCapEvent.cs
@@ -0,0 +1,41 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Region.Capabilities
29{
30 [LLSDType("MAP")]
31 public class LLSDCapEvent
32 {
33 public int id = 0;
34 public LLSDArray events = new LLSDArray();
35
36 public LLSDCapEvent()
37 {
38
39 }
40 }
41}
diff --git a/OpenSim/Region/Capabilities/LLSDCapsDetails.cs b/OpenSim/Region/Capabilities/LLSDCapsDetails.cs
new file mode 100644
index 0000000..1f8b242
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDCapsDetails.cs
@@ -0,0 +1,15 @@
1namespace OpenSim.Region.Capabilities
2{
3 [LLSDType("MAP")]
4 public class LLSDCapsDetails
5 {
6 public string MapLayer = "";
7 //public string NewFileAgentInventory = "";
8 //public string EventQueueGet = "";
9
10 public LLSDCapsDetails()
11 {
12
13 }
14 }
15}
diff --git a/OpenSim/Region/Capabilities/LLSDEmpty.cs b/OpenSim/Region/Capabilities/LLSDEmpty.cs
new file mode 100644
index 0000000..d79c09e
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDEmpty.cs
@@ -0,0 +1,38 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Region.Capabilities
29{
30 [LLSDType("MAP")]
31 public class LLSDEmpty
32 {
33 public LLSDEmpty()
34 {
35
36 }
37 }
38}
diff --git a/OpenSim/Region/Capabilities/LLSDHelpers.cs b/OpenSim/Region/Capabilities/LLSDHelpers.cs
new file mode 100644
index 0000000..19ef0c9
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDHelpers.cs
@@ -0,0 +1,164 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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;
30using System.IO;
31using System.Reflection;
32using System.Xml;
33using libsecondlife;
34
35namespace OpenSim.Region.Capabilities
36{
37 public class LLSDHelpers
38 {
39 public static string SerialiseLLSDReply(object obj)
40 {
41 StringWriter sw = new StringWriter();
42 XmlTextWriter writer = new XmlTextWriter(sw);
43 writer.Formatting = Formatting.None;
44 writer.WriteStartElement(String.Empty, "llsd", String.Empty);
45 SerializeLLSDType(writer, obj);
46 writer.WriteEndElement();
47 writer.Close();
48 return sw.ToString();
49 }
50
51 public static void SerializeLLSDType(XmlTextWriter writer, object obj)
52 {
53 Type myType = obj.GetType();
54 LLSDType[] llsdattributes = (LLSDType[])myType.GetCustomAttributes(typeof(LLSDType), false);
55 if (llsdattributes.Length > 0)
56 {
57 switch (llsdattributes[0].ObjectType)
58 {
59 case "MAP":
60 writer.WriteStartElement(String.Empty, "map", String.Empty);
61 FieldInfo[] fields = myType.GetFields();
62 for (int i = 0; i < fields.Length; i++)
63 {
64 object fieldValue = fields[i].GetValue(obj);
65 LLSDType[] fieldAttributes = (LLSDType[])fieldValue.GetType().GetCustomAttributes(typeof(LLSDType), false);
66 if (fieldAttributes.Length > 0)
67 {
68 writer.WriteStartElement(String.Empty, "key", String.Empty);
69 writer.WriteString(fields[i].Name);
70 writer.WriteEndElement();
71 SerializeLLSDType(writer, fieldValue);
72 }
73 else
74 {
75 writer.WriteStartElement(String.Empty, "key", String.Empty);
76 writer.WriteString(fields[i].Name);
77 writer.WriteEndElement();
78 LLSD.LLSDWriteOne(writer, fieldValue);
79 }
80 }
81 writer.WriteEndElement();
82 break;
83 case "ARRAY":
84 // LLSDArray arrayObject = obj as LLSDArray;
85 // ArrayList a = arrayObject.Array;
86 ArrayList a = (ArrayList)obj.GetType().GetField("Array").GetValue(obj);
87 if (a != null)
88 {
89 writer.WriteStartElement(String.Empty, "array", String.Empty);
90 foreach (object item in a)
91 {
92 SerializeLLSDType(writer, item);
93 }
94 writer.WriteEndElement();
95 }
96 break;
97 }
98 }
99 else
100 {
101 LLSD.LLSDWriteOne(writer, obj);
102 }
103 }
104
105 public static object DeserialiseLLSDMap(Hashtable llsd, object obj)
106 {
107 Type myType = obj.GetType();
108 LLSDType[] llsdattributes = (LLSDType[])myType.GetCustomAttributes(typeof(LLSDType), false);
109 if (llsdattributes.Length > 0)
110 {
111 switch (llsdattributes[0].ObjectType)
112 {
113 case "MAP":
114 IDictionaryEnumerator enumerator = llsd.GetEnumerator();
115 while (enumerator.MoveNext())
116 {
117 FieldInfo field = myType.GetField((string)enumerator.Key);
118 if (field != null)
119 {
120 if (enumerator.Value is Hashtable)
121 {
122 object fieldValue = field.GetValue(obj);
123 DeserialiseLLSDMap((Hashtable) enumerator.Value, fieldValue);
124 }
125 else if (enumerator.Value is ArrayList)
126 {
127 object fieldValue = field.GetValue(obj);
128 fieldValue.GetType().GetField("Array").SetValue(fieldValue, enumerator.Value);
129 //TODO
130 // the LLSD map/array types in the array need to be deserialised
131 // but first we need to know the right class to deserialise them into.
132 }
133 else
134 {
135 field.SetValue(obj, enumerator.Value);
136 }
137 }
138 }
139 break;
140 }
141 }
142 return obj;
143 }
144 }
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164}
diff --git a/OpenSim/Region/Capabilities/LLSDMapLayer.cs b/OpenSim/Region/Capabilities/LLSDMapLayer.cs
new file mode 100644
index 0000000..566d0e9
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDMapLayer.cs
@@ -0,0 +1,46 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Region.Capabilities
31{
32 [LLSDType("MAP")]
33 public class LLSDMapLayer
34 {
35 public int Left = 0;
36 public int Right = 0;
37 public int Top = 0;
38 public int Bottom = 0;
39 public LLUUID ImageID = LLUUID.Zero;
40
41 public LLSDMapLayer()
42 {
43
44 }
45 }
46}
diff --git a/OpenSim/Region/Capabilities/LLSDMapLayerResponse.cs b/OpenSim/Region/Capabilities/LLSDMapLayerResponse.cs
new file mode 100644
index 0000000..ce746ae
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDMapLayerResponse.cs
@@ -0,0 +1,41 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Region.Capabilities
29{
30 [LLSDType("MAP")]
31 public class LLSDMapLayerResponse
32 {
33 public LLSDMapRequest AgentData = new LLSDMapRequest();
34 public LLSDArray LayerData = new LLSDArray();
35
36 public LLSDMapLayerResponse()
37 {
38
39 }
40 }
41}
diff --git a/OpenSim/Region/Capabilities/LLSDMapRequest.cs b/OpenSim/Region/Capabilities/LLSDMapRequest.cs
new file mode 100644
index 0000000..fb739cd
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDMapRequest.cs
@@ -0,0 +1,13 @@
1namespace OpenSim.Region.Capabilities
2{
3 [LLSDType("MAP")]
4 public class LLSDMapRequest
5 {
6 public int Flags = 0;
7
8 public LLSDMapRequest()
9 {
10
11 }
12 }
13}
diff --git a/OpenSim/Region/Capabilities/LLSDMethod.cs b/OpenSim/Region/Capabilities/LLSDMethod.cs
new file mode 100644
index 0000000..5f42f44
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDMethod.cs
@@ -0,0 +1,8 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Region.Capabilities
6{
7 public delegate TResponse LLSDMethod<TRequest, TResponse>(TRequest request);
8}
diff --git a/OpenSim/Region/Capabilities/LLSDStreamHandler.cs b/OpenSim/Region/Capabilities/LLSDStreamHandler.cs
new file mode 100644
index 0000000..7d99b6e
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDStreamHandler.cs
@@ -0,0 +1,42 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using OpenSim.Framework.Servers;
5using System.IO;
6using System.Collections;
7using libsecondlife;
8
9namespace OpenSim.Region.Capabilities
10{
11 public class LLSDStreamhandler<TRequest, TResponse> : BaseStreamHandler
12 where TRequest : new()
13 {
14 private LLSDMethod<TRequest, TResponse> m_method;
15
16 public LLSDStreamhandler(string httpMethod, string path, LLSDMethod<TRequest, TResponse> method)
17 : base(httpMethod, path )
18 {
19 m_method = method;
20 }
21
22 public override byte[] Handle(string path, Stream request)
23 {
24 //Encoding encoding = Encoding.UTF8;
25 //StreamReader streamReader = new StreamReader(request, false);
26
27 //string requestBody = streamReader.ReadToEnd();
28 //streamReader.Close();
29
30 Hashtable hash = (Hashtable)LLSD.LLSDDeserialize( request );
31 TRequest llsdRequest = new TRequest();
32 LLSDHelpers.DeserialiseLLSDMap(hash, llsdRequest);
33
34 TResponse response = m_method(llsdRequest);
35
36 Encoding encoding = new UTF8Encoding(false);
37
38 return encoding.GetBytes( LLSDHelpers.SerialiseLLSDReply(response) );
39
40 }
41 }
42}
diff --git a/OpenSim/Region/Capabilities/LLSDTest.cs b/OpenSim/Region/Capabilities/LLSDTest.cs
new file mode 100644
index 0000000..f23e327
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDTest.cs
@@ -0,0 +1,41 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Region.Capabilities
29{
30 [LLSDType("MAP")]
31 public class LLSDTest
32 {
33 public int Test1 = 20;
34 public int Test2 = 10;
35
36 public LLSDTest()
37 {
38
39 }
40 }
41}
diff --git a/OpenSim/Region/Capabilities/LLSDType.cs b/OpenSim/Region/Capabilities/LLSDType.cs
new file mode 100644
index 0000000..c58a937
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDType.cs
@@ -0,0 +1,59 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29
30namespace OpenSim.Region.Capabilities
31{
32 [AttributeUsage(AttributeTargets.Class)]
33 public class LLSDType : Attribute
34 {
35 protected string myType;
36
37 public LLSDType(string type)
38 {
39 myType = type;
40
41 }
42
43 public string ObjectType
44 {
45 get
46 {
47 return myType;
48 }
49 }
50 }
51
52 [AttributeUsage(AttributeTargets.Class)]
53 public class LLSDMap : LLSDType
54 {
55 public LLSDMap() : base( "MAP" )
56 {
57 }
58 }
59}
diff --git a/OpenSim/Region/Capabilities/LLSDUploadReply.cs b/OpenSim/Region/Capabilities/LLSDUploadReply.cs
new file mode 100644
index 0000000..023a056
--- /dev/null
+++ b/OpenSim/Region/Capabilities/LLSDUploadReply.cs
@@ -0,0 +1,44 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29
30namespace OpenSim.Region.Capabilities
31{
32 [LLSDType("MAP")]
33 public class LLSDUploadReply
34 {
35 public string new_asset = "";
36 public LLUUID new_inventory_item = LLUUID.Zero;
37 public string state = "";
38
39 public LLSDUploadReply()
40 {
41
42 }
43 }
44}
diff --git a/OpenSim/Region/ClientStack/Assets/InventoryCache.cs b/OpenSim/Region/ClientStack/Assets/InventoryCache.cs
new file mode 100644
index 0000000..082c0d0
--- /dev/null
+++ b/OpenSim/Region/ClientStack/Assets/InventoryCache.cs
@@ -0,0 +1,337 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29using System;
30using System.Collections.Generic;
31using System.Text;
32using libsecondlife;
33using libsecondlife.Packets;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Inventory;
36using OpenSim.Framework.Types;
37using OpenSim.Region.ClientStack;
38
39namespace OpenSim.Assets
40{
41 /// <summary>
42 /// Description of InventoryManager.
43 /// </summary>
44 public class InventoryCache
45 {
46 private Dictionary<LLUUID, AgentInventory> _agentsInventory;
47 private List<UserServerRequest> _serverRequests; //list of requests made to user server.
48 private Encoding _enc = Encoding.ASCII;
49 private const uint FULL_MASK_PERMISSIONS = 2147483647;
50
51 public InventoryCache()
52 {
53 _agentsInventory = new Dictionary<LLUUID, AgentInventory>();
54 _serverRequests = new List<UserServerRequest>();
55 }
56
57 public void AddNewAgentsInventory(AgentInventory agentInventory)
58 {
59 if (!this._agentsInventory.ContainsKey(agentInventory.AgentID))
60 {
61 this._agentsInventory.Add(agentInventory.AgentID, agentInventory);
62 }
63 }
64
65 public AgentInventory FetchAgentsInventory(LLUUID agentID, IUserServer userserver)
66 {
67 AgentInventory res = null;
68 if (!this._agentsInventory.ContainsKey(agentID))
69 {
70 res = userserver.RequestAgentsInventory(agentID);
71 this._agentsInventory.Add(agentID,res);
72 }
73 return res;
74 }
75
76 public AgentInventory GetAgentsInventory(LLUUID agentID)
77 {
78 if (this._agentsInventory.ContainsKey(agentID))
79 {
80 return this._agentsInventory[agentID];
81 }
82
83 return null;
84 }
85
86 public void ClientLeaving(LLUUID clientID, IUserServer userserver)
87 {
88 if (this._agentsInventory.ContainsKey(clientID))
89 {
90 if (userserver != null)
91 {
92 userserver.UpdateAgentsInventory(clientID, this._agentsInventory[clientID]);
93 }
94 this._agentsInventory.Remove(clientID);
95 }
96 }
97
98 public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID)
99 {
100 return this.CreateNewInventoryFolder(remoteClient, folderID, 0);
101 }
102
103 public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID, ushort type)
104 {
105 bool res = false;
106 if (folderID != LLUUID.Zero) //don't create a folder with a zero id
107 {
108 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
109 {
110 res = this._agentsInventory[remoteClient.AgentID].CreateNewFolder(folderID, type);
111 }
112 }
113 return res;
114 }
115
116 public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID, ushort type, string folderName, LLUUID parent)
117 {
118 bool res = false;
119 if (folderID != LLUUID.Zero) //don't create a folder with a zero id
120 {
121 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
122 {
123 res = this._agentsInventory[remoteClient.AgentID].CreateNewFolder(folderID, type, folderName, parent);
124 }
125 }
126 return res;
127 }
128
129 public LLUUID AddNewInventoryItem(ClientView remoteClient, LLUUID folderID, AssetBase asset)
130 {
131 LLUUID newItem = null;
132 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
133 {
134 newItem = this._agentsInventory[remoteClient.AgentID].AddToInventory(folderID, asset);
135 if (newItem != null)
136 {
137 InventoryItem Item = this._agentsInventory[remoteClient.AgentID].InventoryItems[newItem];
138 this.SendItemUpdateCreate(remoteClient, Item);
139 }
140 }
141
142 return newItem;
143 }
144 public bool DeleteInventoryItem(ClientView remoteClient, LLUUID itemID)
145 {
146 bool res = false;
147 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
148 {
149 res = this._agentsInventory[remoteClient.AgentID].DeleteFromInventory(itemID);
150 if (res)
151 {
152 RemoveInventoryItemPacket remove = new RemoveInventoryItemPacket();
153 remove.AgentData.AgentID = remoteClient.AgentID;
154 remove.AgentData.SessionID = remoteClient.SessionID;
155 remove.InventoryData = new RemoveInventoryItemPacket.InventoryDataBlock[1];
156 remove.InventoryData[0] = new RemoveInventoryItemPacket.InventoryDataBlock();
157 remove.InventoryData[0].ItemID = itemID;
158 remoteClient.OutPacket(remove);
159 }
160 }
161
162 return res;
163 }
164
165 public bool UpdateInventoryItemAsset(ClientView remoteClient, LLUUID itemID, AssetBase asset)
166 {
167 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
168 {
169 bool res = _agentsInventory[remoteClient.AgentID].UpdateItemAsset(itemID, asset);
170 if (res)
171 {
172 InventoryItem Item = this._agentsInventory[remoteClient.AgentID].InventoryItems[itemID];
173 this.SendItemUpdateCreate(remoteClient, Item);
174 }
175 return res;
176 }
177
178 return false;
179 }
180
181 public bool UpdateInventoryItemDetails(ClientView remoteClient, LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet)
182 {
183 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
184 {
185 bool res = _agentsInventory[remoteClient.AgentID].UpdateItemDetails(itemID, packet);
186 if (res)
187 {
188 InventoryItem Item = this._agentsInventory[remoteClient.AgentID].InventoryItems[itemID];
189 this.SendItemUpdateCreate(remoteClient, Item);
190 }
191 return res;
192 }
193
194 return false;
195 }
196
197 public void FetchInventoryDescendents(ClientView userInfo, FetchInventoryDescendentsPacket FetchDescend)
198 {
199 if (this._agentsInventory.ContainsKey(userInfo.AgentID))
200 {
201 AgentInventory agentInventory = this._agentsInventory[userInfo.AgentID];
202 if (FetchDescend.InventoryData.FetchItems)
203 {
204 if (agentInventory.InventoryFolders.ContainsKey(FetchDescend.InventoryData.FolderID))
205 {
206 InventoryFolder Folder = agentInventory.InventoryFolders[FetchDescend.InventoryData.FolderID];
207 InventoryDescendentsPacket Descend = new InventoryDescendentsPacket();
208 Descend.AgentData.AgentID = userInfo.AgentID;
209 Descend.AgentData.OwnerID = Folder.OwnerID;
210 Descend.AgentData.FolderID = FetchDescend.InventoryData.FolderID;
211 Descend.AgentData.Descendents = Folder.Items.Count;
212 Descend.AgentData.Version = Folder.Items.Count;
213
214
215 Descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[Folder.Items.Count];
216 for (int i = 0; i < Folder.Items.Count; i++)
217 {
218
219 InventoryItem Item = Folder.Items[i];
220 Descend.ItemData[i] = new InventoryDescendentsPacket.ItemDataBlock();
221 Descend.ItemData[i].ItemID = Item.ItemID;
222 Descend.ItemData[i].AssetID = Item.AssetID;
223 Descend.ItemData[i].CreatorID = Item.CreatorID;
224 Descend.ItemData[i].BaseMask = FULL_MASK_PERMISSIONS;
225 Descend.ItemData[i].CreationDate = 1000;
226 Descend.ItemData[i].Description = _enc.GetBytes(Item.Description + "\0");
227 Descend.ItemData[i].EveryoneMask = FULL_MASK_PERMISSIONS;
228 Descend.ItemData[i].Flags = 1;
229 Descend.ItemData[i].FolderID = Item.FolderID;
230 Descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
231 Descend.ItemData[i].GroupMask = FULL_MASK_PERMISSIONS;
232 Descend.ItemData[i].InvType = Item.InvType;
233 Descend.ItemData[i].Name = _enc.GetBytes(Item.Name + "\0");
234 Descend.ItemData[i].NextOwnerMask = FULL_MASK_PERMISSIONS;
235 Descend.ItemData[i].OwnerID = Item.OwnerID;
236 Descend.ItemData[i].OwnerMask = FULL_MASK_PERMISSIONS;
237 Descend.ItemData[i].SalePrice = 100;
238 Descend.ItemData[i].SaleType = 0;
239 Descend.ItemData[i].Type = Item.Type;
240 Descend.ItemData[i].CRC = Helpers.InventoryCRC(1000, 0, Descend.ItemData[i].InvType, Descend.ItemData[i].Type, Descend.ItemData[i].AssetID, Descend.ItemData[i].GroupID, 100, Descend.ItemData[i].OwnerID, Descend.ItemData[i].CreatorID, Descend.ItemData[i].ItemID, Descend.ItemData[i].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS);
241 }
242
243 userInfo.OutPacket(Descend);
244
245 }
246 }
247 else
248 {
249 Console.WriteLine("fetch subfolders");
250 }
251 }
252 }
253
254 public void FetchInventory(ClientView userInfo, FetchInventoryPacket FetchItems)
255 {
256 if (this._agentsInventory.ContainsKey(userInfo.AgentID))
257 {
258 AgentInventory agentInventory = this._agentsInventory[userInfo.AgentID];
259
260 for (int i = 0; i < FetchItems.InventoryData.Length; i++)
261 {
262 if (agentInventory.InventoryItems.ContainsKey(FetchItems.InventoryData[i].ItemID))
263 {
264 InventoryItem Item = agentInventory.InventoryItems[FetchItems.InventoryData[i].ItemID];
265 FetchInventoryReplyPacket InventoryReply = new FetchInventoryReplyPacket();
266 InventoryReply.AgentData.AgentID = userInfo.AgentID;
267 InventoryReply.InventoryData = new FetchInventoryReplyPacket.InventoryDataBlock[1];
268 InventoryReply.InventoryData[0] = new FetchInventoryReplyPacket.InventoryDataBlock();
269 InventoryReply.InventoryData[0].ItemID = Item.ItemID;
270 InventoryReply.InventoryData[0].AssetID = Item.AssetID;
271 InventoryReply.InventoryData[0].CreatorID = Item.CreatorID;
272 InventoryReply.InventoryData[0].BaseMask = FULL_MASK_PERMISSIONS;
273 InventoryReply.InventoryData[0].CreationDate = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
274 InventoryReply.InventoryData[0].Description = _enc.GetBytes(Item.Description + "\0");
275 InventoryReply.InventoryData[0].EveryoneMask = FULL_MASK_PERMISSIONS;
276 InventoryReply.InventoryData[0].Flags = 0;
277 InventoryReply.InventoryData[0].FolderID = Item.FolderID;
278 InventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
279 InventoryReply.InventoryData[0].GroupMask = FULL_MASK_PERMISSIONS;
280 InventoryReply.InventoryData[0].InvType = Item.InvType;
281 InventoryReply.InventoryData[0].Name = _enc.GetBytes(Item.Name + "\0");
282 InventoryReply.InventoryData[0].NextOwnerMask = FULL_MASK_PERMISSIONS;
283 InventoryReply.InventoryData[0].OwnerID = Item.OwnerID;
284 InventoryReply.InventoryData[0].OwnerMask = FULL_MASK_PERMISSIONS;
285 InventoryReply.InventoryData[0].SalePrice = 100;
286 InventoryReply.InventoryData[0].SaleType = 0;
287 InventoryReply.InventoryData[0].Type = Item.Type;
288 InventoryReply.InventoryData[0].CRC = Helpers.InventoryCRC(1000, 0, InventoryReply.InventoryData[0].InvType, InventoryReply.InventoryData[0].Type, InventoryReply.InventoryData[0].AssetID, InventoryReply.InventoryData[0].GroupID, 100, InventoryReply.InventoryData[0].OwnerID, InventoryReply.InventoryData[0].CreatorID, InventoryReply.InventoryData[0].ItemID, InventoryReply.InventoryData[0].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS);
289 userInfo.OutPacket(InventoryReply);
290 }
291 }
292 }
293 }
294
295 private void SendItemUpdateCreate(ClientView remoteClient, InventoryItem Item)
296 {
297
298 UpdateCreateInventoryItemPacket InventoryReply = new UpdateCreateInventoryItemPacket();
299 InventoryReply.AgentData.AgentID = remoteClient.AgentID;
300 InventoryReply.AgentData.SimApproved = true;
301 InventoryReply.InventoryData = new UpdateCreateInventoryItemPacket.InventoryDataBlock[1];
302 InventoryReply.InventoryData[0] = new UpdateCreateInventoryItemPacket.InventoryDataBlock();
303 InventoryReply.InventoryData[0].ItemID = Item.ItemID;
304 InventoryReply.InventoryData[0].AssetID = Item.AssetID;
305 InventoryReply.InventoryData[0].CreatorID = Item.CreatorID;
306 InventoryReply.InventoryData[0].BaseMask = FULL_MASK_PERMISSIONS;
307 InventoryReply.InventoryData[0].CreationDate = 1000;
308 InventoryReply.InventoryData[0].Description = _enc.GetBytes(Item.Description + "\0");
309 InventoryReply.InventoryData[0].EveryoneMask = FULL_MASK_PERMISSIONS;
310 InventoryReply.InventoryData[0].Flags = 0;
311 InventoryReply.InventoryData[0].FolderID = Item.FolderID;
312 InventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
313 InventoryReply.InventoryData[0].GroupMask = FULL_MASK_PERMISSIONS;
314 InventoryReply.InventoryData[0].InvType = Item.InvType;
315 InventoryReply.InventoryData[0].Name = _enc.GetBytes(Item.Name + "\0");
316 InventoryReply.InventoryData[0].NextOwnerMask = FULL_MASK_PERMISSIONS;
317 InventoryReply.InventoryData[0].OwnerID = Item.OwnerID;
318 InventoryReply.InventoryData[0].OwnerMask = FULL_MASK_PERMISSIONS;
319 InventoryReply.InventoryData[0].SalePrice = 100;
320 InventoryReply.InventoryData[0].SaleType = 0;
321 InventoryReply.InventoryData[0].Type = Item.Type;
322 InventoryReply.InventoryData[0].CRC = Helpers.InventoryCRC(1000, 0, InventoryReply.InventoryData[0].InvType, InventoryReply.InventoryData[0].Type, InventoryReply.InventoryData[0].AssetID, InventoryReply.InventoryData[0].GroupID, 100, InventoryReply.InventoryData[0].OwnerID, InventoryReply.InventoryData[0].CreatorID, InventoryReply.InventoryData[0].ItemID, InventoryReply.InventoryData[0].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS);
323
324 remoteClient.OutPacket(InventoryReply);
325 }
326 }
327
328
329
330 public class UserServerRequest
331 {
332 public UserServerRequest()
333 {
334
335 }
336 }
337}
diff --git a/OpenSim/Region/ClientStack/ClientStackNetworkHandler.cs b/OpenSim/Region/ClientStack/ClientStackNetworkHandler.cs
new file mode 100644
index 0000000..f4e537c
--- /dev/null
+++ b/OpenSim/Region/ClientStack/ClientStackNetworkHandler.cs
@@ -0,0 +1,40 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Net.Sockets;
29
30namespace OpenSim.Region.ClientStack
31{
32
33 public interface ClientStackNetworkHandler
34 {
35 void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode);// EndPoint packetSender);
36 void RemoveClientCircuit(uint circuitcode);
37 void RegisterPacketServer(PacketServer server);
38 }
39
40}
diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs
new file mode 100644
index 0000000..225e906
--- /dev/null
+++ b/OpenSim/Region/ClientStack/ClientView.API.cs
@@ -0,0 +1,1122 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Net;
31using System.Text;
32using Axiom.Math;
33using libsecondlife;
34using libsecondlife.Packets;
35using OpenSim.Framework.Console;
36using OpenSim.Framework.Interfaces;
37using OpenSim.Framework.Types;
38
39namespace OpenSim.Region.ClientStack
40{
41 partial class ClientView
42 {
43 public event ImprovedInstantMessage OnInstantMessage;
44 public event ChatFromViewer OnChatFromViewer;
45 public event RezObject OnRezObject;
46 public event GenericCall4 OnDeRezObject;
47 public event ModifyTerrain OnModifyTerrain;
48 public event GenericCall OnRegionHandShakeReply;
49 public event GenericCall OnRequestWearables;
50 public event SetAppearance OnSetAppearance;
51 public event GenericCall2 OnCompleteMovementToRegion;
52 public event UpdateAgent OnAgentUpdate;
53 public event StartAnim OnStartAnim;
54 public event GenericCall OnRequestAvatarsData;
55 public event LinkObjects OnLinkObjects;
56 public event UpdateVector OnGrapObject;
57 public event ObjectSelect OnDeGrapObject;
58 public event ObjectDuplicate OnObjectDuplicate;
59 public event MoveObject OnGrapUpdate;
60 public event GenericCall4 OnAddPrim;
61 public event UpdateShape OnUpdatePrimShape;
62 public event ObjectSelect OnObjectSelect;
63 public event GenericCall7 OnObjectDescription;
64 public event GenericCall7 OnObjectName;
65 public event UpdatePrimFlags OnUpdatePrimFlags;
66 public event UpdatePrimTexture OnUpdatePrimTexture;
67 public event UpdateVector OnUpdatePrimGroupPosition;
68 public event UpdateVector OnUpdatePrimSinglePosition;
69 public event UpdatePrimRotation OnUpdatePrimGroupRotation;
70 public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation;
71 public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation;
72 public event UpdateVector OnUpdatePrimScale;
73 public event StatusChange OnChildAgentStatus;
74 public event GenericCall2 OnStopMovement;
75 public event NewAvatar OnNewAvatar;
76 public event GenericCall6 OnRemoveAvatar;
77 public event RequestMapBlocks OnRequestMapBlocks;
78 public event TeleportLocationRequest OnTeleportLocationRequest;
79
80 public event UUIDNameRequest OnNameFromUUIDRequest;
81
82 public event ParcelPropertiesRequest OnParcelPropertiesRequest;
83 public event ParcelDivideRequest OnParcelDivideRequest;
84 public event ParcelJoinRequest OnParcelJoinRequest;
85 public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
86
87 public event EstateOwnerMessageRequest OnEstateOwnerMessage;
88 /// <summary>
89 ///
90 /// </summary>
91 public LLVector3 StartPos
92 {
93 get
94 {
95 return startpos;
96 }
97 set
98 {
99 startpos = value;
100 }
101 }
102
103 /// <summary>
104 ///
105 /// </summary>
106 public LLUUID AgentId
107 {
108 get
109 {
110 return this.AgentID;
111 }
112 }
113
114 /// <summary>
115 ///
116 /// </summary>
117 public string FirstName
118 {
119 get
120 {
121 return this.firstName;
122 }
123
124 }
125
126 /// <summary>
127 ///
128 /// </summary>
129 public string LastName
130 {
131 get
132 {
133 return this.lastName;
134 }
135 }
136
137 #region World/Avatar to Client
138
139 /// <summary>
140 ///
141 /// </summary>
142 /// <param name="regionInfo"></param>
143 public void SendRegionHandshake(RegionInfo regionInfo)
144 {
145 Encoding _enc = Encoding.ASCII;
146 RegionHandshakePacket handshake = new RegionHandshakePacket();
147
148 handshake.RegionInfo.BillableFactor = regionInfo.estateSettings.billableFactor;
149 handshake.RegionInfo.IsEstateManager = false;
150 handshake.RegionInfo.TerrainHeightRange00 = regionInfo.estateSettings.terrainHeightRange0;
151 handshake.RegionInfo.TerrainHeightRange01 = regionInfo.estateSettings.terrainHeightRange1;
152 handshake.RegionInfo.TerrainHeightRange10 = regionInfo.estateSettings.terrainHeightRange2;
153 handshake.RegionInfo.TerrainHeightRange11 = regionInfo.estateSettings.terrainHeightRange3;
154 handshake.RegionInfo.TerrainStartHeight00 = regionInfo.estateSettings.terrainStartHeight0;
155 handshake.RegionInfo.TerrainStartHeight01 = regionInfo.estateSettings.terrainStartHeight1;
156 handshake.RegionInfo.TerrainStartHeight10 = regionInfo.estateSettings.terrainStartHeight2;
157 handshake.RegionInfo.TerrainStartHeight11 = regionInfo.estateSettings.terrainStartHeight3;
158 handshake.RegionInfo.SimAccess = (byte)regionInfo.estateSettings.simAccess;
159 handshake.RegionInfo.WaterHeight = regionInfo.estateSettings.waterHeight;
160
161
162 handshake.RegionInfo.RegionFlags = (uint)regionInfo.estateSettings.regionFlags;
163
164 handshake.RegionInfo.SimName = _enc.GetBytes(regionInfo.RegionName + "\0");
165 handshake.RegionInfo.SimOwner = regionInfo.MasterAvatarAssignedUUID;
166 handshake.RegionInfo.TerrainBase0 = regionInfo.estateSettings.terrainBase0;
167 handshake.RegionInfo.TerrainBase1 = regionInfo.estateSettings.terrainBase1;
168 handshake.RegionInfo.TerrainBase2 = regionInfo.estateSettings.terrainBase2;
169 handshake.RegionInfo.TerrainBase3 = regionInfo.estateSettings.terrainBase3;
170 handshake.RegionInfo.TerrainDetail0 = regionInfo.estateSettings.terrainDetail0;
171 handshake.RegionInfo.TerrainDetail1 = regionInfo.estateSettings.terrainDetail1;
172 handshake.RegionInfo.TerrainDetail2 = regionInfo.estateSettings.terrainDetail2;
173 handshake.RegionInfo.TerrainDetail3 = regionInfo.estateSettings.terrainDetail3;
174 handshake.RegionInfo.CacheID = LLUUID.Random(); //I guess this is for the client to remember an old setting?
175
176 this.OutPacket(handshake);
177 }
178
179 /// <summary>
180 ///
181 /// </summary>
182 /// <param name="regInfo"></param>
183 public void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look)
184 {
185 AgentMovementCompletePacket mov = new AgentMovementCompletePacket();
186 mov.AgentData.SessionID = this.SessionID;
187 mov.AgentData.AgentID = this.AgentID;
188 mov.Data.RegionHandle = regInfo.RegionHandle;
189 mov.Data.Timestamp = 1172750370; // TODO - dynamicalise this
190
191 if ((pos.X == 0) && (pos.Y == 0) && (pos.Z == 0))
192 {
193 mov.Data.Position = this.startpos;
194 }
195 else
196 {
197 mov.Data.Position = pos;
198 }
199 mov.Data.LookAt = look;
200
201 OutPacket(mov);
202 }
203
204 /// <summary>
205 ///
206 /// </summary>
207 /// <param name="message"></param>
208 /// <param name="type"></param>
209 /// <param name="fromPos"></param>
210 /// <param name="fromName"></param>
211 /// <param name="fromAgentID"></param>
212 public void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
213 {
214 SendChatMessage(Helpers.StringToField(message), type, fromPos, fromName, fromAgentID);
215 }
216
217 /// <summary>
218 ///
219 /// </summary>
220 /// <param name="message"></param>
221 /// <param name="type"></param>
222 /// <param name="fromPos"></param>
223 /// <param name="fromName"></param>
224 /// <param name="fromAgentID"></param>
225 public void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
226 {
227 Encoding enc = Encoding.ASCII;
228 ChatFromSimulatorPacket reply = new ChatFromSimulatorPacket();
229 reply.ChatData.Audible = 1;
230 reply.ChatData.Message = message;
231 reply.ChatData.ChatType = type;
232 reply.ChatData.SourceType = 1;
233 reply.ChatData.Position = fromPos;
234 reply.ChatData.FromName = enc.GetBytes(fromName + "\0");
235 reply.ChatData.OwnerID = fromAgentID;
236 reply.ChatData.SourceID = fromAgentID;
237
238 this.OutPacket(reply);
239 }
240
241 /// <summary>
242 ///
243 /// </summary>
244 /// <remarks>TODO</remarks>
245 /// <param name="message"></param>
246 /// <param name="target"></param>
247 public void SendInstantMessage(string message, LLUUID target)
248 {
249 ImprovedInstantMessagePacket msg = new ImprovedInstantMessagePacket();
250 msg.AgentData.AgentID = this.AgentID;
251 msg.AgentData.SessionID = this.SessionID;
252
253 msg.MessageBlock.Dialog = 0;
254 msg.MessageBlock.FromGroup = false;
255 msg.MessageBlock.ID = target.Combine(this.AgentID);
256 msg.MessageBlock.Offline = 0;
257 msg.MessageBlock.ParentEstateID = 0;
258 msg.MessageBlock.Position = new LLVector3();
259 msg.MessageBlock.RegionID = new LLUUID();
260 msg.MessageBlock.Timestamp = 0;
261 msg.MessageBlock.ToAgentID = target;
262
263 this.OutPacket(msg);
264 }
265
266 /// <summary>
267 /// Send the region heightmap to the client
268 /// </summary>
269 /// <param name="map">heightmap</param>
270 public virtual void SendLayerData(float[] map)
271 {
272 try
273 {
274 int[] patches = new int[4];
275
276 for (int y = 0; y < 16; y++)
277 {
278 for (int x = 0; x < 16; x = x + 4)
279 {
280 patches[0] = x + 0 + y * 16;
281 patches[1] = x + 1 + y * 16;
282 patches[2] = x + 2 + y * 16;
283 patches[3] = x + 3 + y * 16;
284
285 Packet layerpack = TerrainManager.CreateLandPacket(map, patches);
286 OutPacket(layerpack);
287 }
288 }
289 }
290 catch (Exception e)
291 {
292 MainLog.Instance.Warn("ClientView API.cs: SendLayerData() - Failed with exception " + e.ToString());
293 }
294 }
295
296 /// <summary>
297 /// Sends a specified patch to a client
298 /// </summary>
299 /// <param name="px">Patch coordinate (x) 0..16</param>
300 /// <param name="py">Patch coordinate (y) 0..16</param>
301 /// <param name="map">heightmap</param>
302 public void SendLayerData(int px, int py, float[] map)
303 {
304 try
305 {
306 int[] patches = new int[1];
307 int patchx, patchy;
308 patchx = px / 16;
309 patchy = py / 16;
310
311 patches[0] = patchx + 0 + patchy * 16;
312
313 Packet layerpack = TerrainManager.CreateLandPacket(map, patches);
314 OutPacket(layerpack);
315 }
316 catch (Exception e)
317 {
318 MainLog.Instance.Warn("ClientView API .cs: SendLayerData() - Failed with exception " + e.ToString());
319 }
320 }
321
322 /// <summary>
323 ///
324 /// </summary>
325 /// <param name="neighbourHandle"></param>
326 /// <param name="neighbourIP"></param>
327 /// <param name="neighbourPort"></param>
328 public void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourEndPoint )
329 {
330 IPAddress neighbourIP = neighbourEndPoint.Address;
331 ushort neighbourPort = (ushort) neighbourEndPoint.Port;
332
333 EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket();
334 enablesimpacket.SimulatorInfo = new EnableSimulatorPacket.SimulatorInfoBlock();
335 enablesimpacket.SimulatorInfo.Handle = neighbourHandle;
336
337 byte[] byteIP = neighbourIP.GetAddressBytes();
338 enablesimpacket.SimulatorInfo.IP = (uint)byteIP[3] << 24;
339 enablesimpacket.SimulatorInfo.IP += (uint)byteIP[2] << 16;
340 enablesimpacket.SimulatorInfo.IP += (uint)byteIP[1] << 8;
341 enablesimpacket.SimulatorInfo.IP += (uint)byteIP[0];
342 enablesimpacket.SimulatorInfo.Port = neighbourPort;
343 OutPacket(enablesimpacket);
344 }
345
346 /// <summary>
347 ///
348 /// </summary>
349 /// <returns></returns>
350 public AgentCircuitData RequestClientInfo()
351 {
352 AgentCircuitData agentData = new AgentCircuitData();
353 agentData.AgentID = this.AgentId;
354 agentData.SessionID = this.SessionID;
355 agentData.SecureSessionID = this.SecureSessionID;
356 agentData.circuitcode = this.CircuitCode;
357 agentData.child = false;
358 agentData.firstname = this.firstName;
359 agentData.lastname = this.lastName;
360
361 return agentData;
362 }
363
364 public void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, IPEndPoint externalIPEndPoint)
365 {
366 LLVector3 look = new LLVector3(lookAt.X * 10, lookAt.Y * 10, lookAt.Z * 10);
367
368 CrossedRegionPacket newSimPack = new CrossedRegionPacket();
369 newSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock();
370 newSimPack.AgentData.AgentID = this.AgentID;
371 newSimPack.AgentData.SessionID = this.SessionID;
372 newSimPack.Info = new CrossedRegionPacket.InfoBlock();
373 newSimPack.Info.Position = pos;
374 newSimPack.Info.LookAt = look; // new LLVector3(0.0f, 0.0f, 0.0f); // copied from Avatar.cs - SHOULD BE DYNAMIC!!!!!!!!!!
375 newSimPack.RegionData = new CrossedRegionPacket.RegionDataBlock();
376 newSimPack.RegionData.RegionHandle = newRegionHandle;
377 byte[] byteIP = externalIPEndPoint.Address.GetAddressBytes();
378 newSimPack.RegionData.SimIP = (uint)byteIP[3] << 24;
379 newSimPack.RegionData.SimIP += (uint)byteIP[2] << 16;
380 newSimPack.RegionData.SimIP += (uint)byteIP[1] << 8;
381 newSimPack.RegionData.SimIP += (uint)byteIP[0];
382 newSimPack.RegionData.SimPort = (ushort)externalIPEndPoint.Port;
383 newSimPack.RegionData.SeedCapability = new byte[0];
384
385 this.OutPacket(newSimPack);
386 //this.DowngradeClient();
387 }
388
389 public void SendMapBlock(List<MapBlockData> mapBlocks)
390 {
391 Encoding _enc = Encoding.ASCII;
392
393 MapBlockReplyPacket mapReply = new MapBlockReplyPacket();
394 mapReply.AgentData.AgentID = this.AgentID;
395 mapReply.Data = new MapBlockReplyPacket.DataBlock[mapBlocks.Count];
396 mapReply.AgentData.Flags = 0;
397
398 for (int i = 0; i < mapBlocks.Count; i++)
399 {
400 mapReply.Data[i] = new MapBlockReplyPacket.DataBlock();
401 mapReply.Data[i].MapImageID = mapBlocks[i].MapImageId;
402 mapReply.Data[i].X = mapBlocks[i].X;
403 mapReply.Data[i].Y = mapBlocks[i].Y;
404 mapReply.Data[i].WaterHeight = mapBlocks[i].WaterHeight;
405 mapReply.Data[i].Name = _enc.GetBytes(mapBlocks[i].Name);
406 mapReply.Data[i].RegionFlags = mapBlocks[i].RegionFlags;
407 mapReply.Data[i].Access = mapBlocks[i].Access;
408 mapReply.Data[i].Agents = mapBlocks[i].Agents;
409 }
410 this.OutPacket(mapReply);
411 }
412
413 public void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags)
414 {
415 TeleportLocalPacket tpLocal = new TeleportLocalPacket();
416 tpLocal.Info.AgentID = this.AgentID;
417 tpLocal.Info.TeleportFlags = flags;
418 tpLocal.Info.LocationID = 2;
419 tpLocal.Info.LookAt = lookAt;
420 tpLocal.Info.Position = position;
421 OutPacket(tpLocal);
422 }
423
424 public void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint newRegionEndPoint, uint locationID, uint flags)
425 {
426 TeleportFinishPacket teleport = new TeleportFinishPacket();
427 teleport.Info.AgentID = this.AgentID;
428 teleport.Info.RegionHandle = regionHandle;
429 teleport.Info.SimAccess = simAccess;
430 teleport.Info.SeedCapability = new byte[0];
431
432 IPAddress oIP = newRegionEndPoint.Address;
433 byte[] byteIP = oIP.GetAddressBytes();
434 uint ip = (uint)byteIP[3] << 24;
435 ip += (uint)byteIP[2] << 16;
436 ip += (uint)byteIP[1] << 8;
437 ip += (uint)byteIP[0];
438
439 teleport.Info.SimIP = ip;
440 teleport.Info.SimPort = (ushort)newRegionEndPoint.Port;
441 teleport.Info.LocationID = 4;
442 teleport.Info.TeleportFlags = 1 << 4;
443 OutPacket(teleport);
444 }
445
446 /// <summary>
447 ///
448 /// </summary>
449 public void SendTeleportCancel()
450 {
451 TeleportCancelPacket tpCancel = new TeleportCancelPacket();
452 tpCancel.Info.SessionID = this.SessionID;
453 tpCancel.Info.AgentID = this.AgentID;
454
455 OutPacket(tpCancel);
456 }
457
458 /// <summary>
459 ///
460 /// </summary>
461 public void SendTeleportLocationStart()
462 {
463 TeleportStartPacket tpStart = new TeleportStartPacket();
464 tpStart.Info.TeleportFlags = 16; // Teleport via location
465 OutPacket(tpStart);
466 }
467
468 public void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance)
469 {
470 MoneyBalanceReplyPacket money = new MoneyBalanceReplyPacket();
471 money.MoneyData.AgentID = this.AgentID;
472 money.MoneyData.TransactionID = transaction;
473 money.MoneyData.TransactionSuccess = success;
474 money.MoneyData.Description = description;
475 money.MoneyData.MoneyBalance = balance;
476 OutPacket(money);
477 }
478
479 public void SendStartPingCheck(byte seq)
480 {
481 StartPingCheckPacket pc = new StartPingCheckPacket();
482 pc.PingID.PingID = seq;
483 OutPacket(pc);
484 }
485
486 public void SendKillObject(ulong regionHandle, uint avatarLocalID)
487 {
488 KillObjectPacket kill = new KillObjectPacket();
489 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
490 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
491 kill.ObjectData[0].ID = avatarLocalID;
492 OutPacket(kill);
493 }
494
495
496 #region Appearance/ Wearables Methods
497
498 /// <summary>
499 ///
500 /// </summary>
501 /// <param name="wearables"></param>
502 public void SendWearables(AvatarWearable[] wearables)
503 {
504 AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
505 aw.AgentData.AgentID = this.AgentID;
506 aw.AgentData.SerialNum = 0;
507 aw.AgentData.SessionID = this.SessionID;
508
509 aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
510 AgentWearablesUpdatePacket.WearableDataBlock awb;
511 for (int i = 0; i < wearables.Length; i++)
512 {
513 awb = new AgentWearablesUpdatePacket.WearableDataBlock();
514 awb.WearableType = (byte)i;
515 awb.AssetID = wearables[i].AssetID;
516 awb.ItemID = wearables[i].ItemID;
517 aw.WearableData[i] = awb;
518 }
519
520 this.OutPacket(aw);
521 }
522
523 /// <summary>
524 ///
525 /// </summary>
526 /// <param name="agentID"></param>
527 /// <param name="visualParams"></param>
528 /// <param name="textureEntry"></param>
529 public void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry)
530 {
531 AvatarAppearancePacket avp = new AvatarAppearancePacket();
532 avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
533 avp.ObjectData.TextureEntry = textureEntry;
534
535 AvatarAppearancePacket.VisualParamBlock avblock = null;
536 for (int i = 0; i < visualParams.Length; i++)
537 {
538 avblock = new AvatarAppearancePacket.VisualParamBlock();
539 avblock.ParamValue = visualParams[i];
540 avp.VisualParam[i] = avblock;
541 }
542
543 avp.Sender.IsTrial = false;
544 avp.Sender.ID = agentID;
545 OutPacket(avp);
546 }
547
548 public void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId)
549 {
550 AvatarAnimationPacket ani = new AvatarAnimationPacket();
551 ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[1];
552 ani.AnimationSourceList[0] = new AvatarAnimationPacket.AnimationSourceListBlock();
553 ani.AnimationSourceList[0].ObjectID = sourceAgentId;
554 ani.Sender = new AvatarAnimationPacket.SenderBlock();
555 ani.Sender.ID = sourceAgentId;
556 ani.AnimationList = new AvatarAnimationPacket.AnimationListBlock[1];
557 ani.AnimationList[0] = new AvatarAnimationPacket.AnimationListBlock();
558 ani.AnimationList[0].AnimID = animID;
559 ani.AnimationList[0].AnimSequenceID = seq;
560 this.OutPacket(ani);
561 }
562
563 #endregion
564
565 #region Avatar Packet/data sending Methods
566
567 /// <summary>
568 ///
569 /// </summary>
570 /// <param name="regionInfo"></param>
571 /// <param name="firstName"></param>
572 /// <param name="lastName"></param>
573 /// <param name="avatarID"></param>
574 /// <param name="avatarLocalID"></param>
575 /// <param name="Pos"></param>
576 public void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos, byte[] textureEntry)
577 {
578 Encoding _enc = Encoding.ASCII;
579 //send a objectupdate packet with information about the clients avatar
580
581 ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
582 objupdate.RegionData.RegionHandle = regionHandle;
583 objupdate.RegionData.TimeDilation = 64096;
584 objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
585 objupdate.ObjectData[0] = this.CreateDefaultAvatarPacket(textureEntry);
586 //give this avatar object a local id and assign the user a name
587
588 objupdate.ObjectData[0].ID = avatarLocalID;
589 objupdate.ObjectData[0].FullID = avatarID;
590 objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstName + "\nLastName STRING RW SV " + lastName + " \0");
591 LLVector3 pos2 = new LLVector3((float)Pos.X, (float)Pos.Y, (float)Pos.Z);
592 byte[] pb = pos2.GetBytes();
593 Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
594
595 OutPacket(objupdate);
596
597 }
598
599 /// <summary>
600 ///
601 /// </summary>
602 /// <param name="regionHandle"></param>
603 /// <param name="timeDilation"></param>
604 /// <param name="localID"></param>
605 /// <param name="position"></param>
606 /// <param name="velocity"></param>
607 public void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity)
608 {
609 ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = this.CreateAvatarImprovedBlock(localID, position, velocity);
610 ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
611 terse.RegionData.RegionHandle = regionHandle;
612 terse.RegionData.TimeDilation = timeDilation;
613 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
614 terse.ObjectData[0] = terseBlock;
615
616 this.OutPacket(terse);
617 }
618
619 #endregion
620
621 #region Primitive Packet/data Sending Methods
622
623 /// <summary>
624 ///
625 /// </summary>
626 /// <param name="localID"></param>
627 /// <param name="rotation"></param>
628 /// <param name="attachPoint"></param>
629 public void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint)
630 {
631 ObjectAttachPacket attach = new ObjectAttachPacket();
632 attach.AgentData.AgentID = this.AgentID;
633 attach.AgentData.SessionID = this.SessionID;
634 attach.AgentData.AttachmentPoint = attachPoint;
635 attach.ObjectData = new ObjectAttachPacket.ObjectDataBlock[1];
636 attach.ObjectData[0] = new ObjectAttachPacket.ObjectDataBlock();
637 attach.ObjectData[0].ObjectLocalID = localID;
638 attach.ObjectData[0].Rotation = rotation;
639
640 this.OutPacket(attach);
641 }
642
643 /// <summary>
644 /// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive
645 /// or big changes to a existing primitive.
646 /// </summary>
647 /// <param name="regionHandle"></param>
648 /// <param name="timeDilation"></param>
649 /// <param name="localID"></param>
650 /// <param name="primData"></param>
651 /// <param name="pos"></param>
652 /// <param name="rotation"></param>
653 /// <param name="textureID"></param>
654 public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags)
655 {
656 ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
657 outPacket.RegionData.RegionHandle = regionHandle;
658 outPacket.RegionData.TimeDilation = timeDilation;
659 outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
660 outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID, flags);
661 outPacket.ObjectData[0].ID = localID;
662 outPacket.ObjectData[0].FullID = primData.FullID;
663 byte[] pb = pos.GetBytes();
664 Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
665 byte[] rot = rotation.GetBytes();
666 Array.Copy(rot, 0, outPacket.ObjectData[0].ObjectData, 48, rot.Length);
667 OutPacket(outPacket);
668 }
669
670 /// <summary>
671 /// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive
672 /// or big changes to a existing primitive.
673 /// Uses default rotation
674 /// </summary>
675 /// <param name="primData"></param>
676 /// <param name="pos"></param>
677 public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID , uint flags)
678 {
679 ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
680 outPacket.RegionData.RegionHandle = regionHandle;
681 outPacket.RegionData.TimeDilation = timeDilation;
682 outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
683 outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID, flags);
684 outPacket.ObjectData[0].ID = localID;
685 outPacket.ObjectData[0].FullID = primData.FullID;
686 byte[] pb = pos.GetBytes();
687 Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
688
689 OutPacket(outPacket);
690 }
691
692
693 public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID)
694 {
695 ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
696 outPacket.RegionData.RegionHandle = regionHandle;
697 outPacket.RegionData.TimeDilation = timeDilation;
698 outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
699 outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primShape, textureID, flags);
700 outPacket.ObjectData[0].ID = localID;
701 outPacket.ObjectData[0].FullID = objectID;
702 outPacket.ObjectData[0].OwnerID = ownerID;
703 outPacket.ObjectData[0].Text = enc.GetBytes(text);
704 outPacket.ObjectData[0].ParentID = parentID;
705 byte[] pb = pos.GetBytes();
706 Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
707 byte[] rot = rotation.GetBytes();
708 Array.Copy(rot, 0, outPacket.ObjectData[0].ObjectData, 36, rot.Length);
709 OutPacket(outPacket);
710 }
711
712 public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID)
713 {
714 ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
715 outPacket.RegionData.RegionHandle = regionHandle;
716 outPacket.RegionData.TimeDilation = timeDilation;
717 outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
718 outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primShape, textureID, flags);
719 outPacket.ObjectData[0].ID = localID;
720 outPacket.ObjectData[0].FullID = objectID;
721 outPacket.ObjectData[0].OwnerID = ownerID;
722 outPacket.ObjectData[0].Text = enc.GetBytes(text);
723 outPacket.ObjectData[0].ParentID = parentID;
724 byte[] pb = pos.GetBytes();
725 Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
726
727 OutPacket(outPacket);
728 }
729 /// <summary>
730 ///
731 /// </summary>
732 /// <param name="regionHandle"></param>
733 /// <param name="timeDilation"></param>
734 /// <param name="localID"></param>
735 /// <param name="position"></param>
736 /// <param name="rotation"></param>
737 public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation)
738 {
739 ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
740 terse.RegionData.RegionHandle = regionHandle;
741 terse.RegionData.TimeDilation = timeDilation;
742 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
743 terse.ObjectData[0] = this.CreatePrimImprovedBlock(localID, position, rotation);
744
745 this.OutPacket(terse);
746 }
747
748 #endregion
749
750 #endregion
751
752 #region Helper Methods
753
754 protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateAvatarImprovedBlock(uint localID, LLVector3 pos, LLVector3 velocity)
755 {
756 byte[] bytes = new byte[60];
757 int i = 0;
758 ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
759
760 dat.TextureEntry = new byte[0];// AvatarTemplate.TextureEntry;
761
762 uint ID = localID;
763
764 bytes[i++] = (byte)(ID % 256);
765 bytes[i++] = (byte)((ID >> 8) % 256);
766 bytes[i++] = (byte)((ID >> 16) % 256);
767 bytes[i++] = (byte)((ID >> 24) % 256);
768 bytes[i++] = 0;
769 bytes[i++] = 1;
770 i += 14;
771 bytes[i++] = 128;
772 bytes[i++] = 63;
773
774 byte[] pb = pos.GetBytes();
775 Array.Copy(pb, 0, bytes, i, pb.Length);
776 i += 12;
777 ushort InternVelocityX;
778 ushort InternVelocityY;
779 ushort InternVelocityZ;
780 Vector3 internDirec = new Vector3(0, 0, 0);
781
782 internDirec = new Vector3(velocity.X, velocity.Y, velocity.Z);
783
784 internDirec = internDirec / 128.0f;
785 internDirec.x += 1;
786 internDirec.y += 1;
787 internDirec.z += 1;
788
789 InternVelocityX = (ushort)(32768 * internDirec.x);
790 InternVelocityY = (ushort)(32768 * internDirec.y);
791 InternVelocityZ = (ushort)(32768 * internDirec.z);
792
793 ushort ac = 32767;
794 bytes[i++] = (byte)(InternVelocityX % 256);
795 bytes[i++] = (byte)((InternVelocityX >> 8) % 256);
796 bytes[i++] = (byte)(InternVelocityY % 256);
797 bytes[i++] = (byte)((InternVelocityY >> 8) % 256);
798 bytes[i++] = (byte)(InternVelocityZ % 256);
799 bytes[i++] = (byte)((InternVelocityZ >> 8) % 256);
800
801 //accel
802 bytes[i++] = (byte)(ac % 256);
803 bytes[i++] = (byte)((ac >> 8) % 256);
804 bytes[i++] = (byte)(ac % 256);
805 bytes[i++] = (byte)((ac >> 8) % 256);
806 bytes[i++] = (byte)(ac % 256);
807 bytes[i++] = (byte)((ac >> 8) % 256);
808
809 //rot
810 bytes[i++] = (byte)(ac % 256);
811 bytes[i++] = (byte)((ac >> 8) % 256);
812 bytes[i++] = (byte)(ac % 256);
813 bytes[i++] = (byte)((ac >> 8) % 256);
814 bytes[i++] = (byte)(ac % 256);
815 bytes[i++] = (byte)((ac >> 8) % 256);
816 bytes[i++] = (byte)(ac % 256);
817 bytes[i++] = (byte)((ac >> 8) % 256);
818
819 //rotation vel
820 bytes[i++] = (byte)(ac % 256);
821 bytes[i++] = (byte)((ac >> 8) % 256);
822 bytes[i++] = (byte)(ac % 256);
823 bytes[i++] = (byte)((ac >> 8) % 256);
824 bytes[i++] = (byte)(ac % 256);
825 bytes[i++] = (byte)((ac >> 8) % 256);
826
827 dat.Data = bytes;
828 return (dat);
829 }
830
831 /// <summary>
832 ///
833 /// </summary>
834 /// <param name="localID"></param>
835 /// <param name="position"></param>
836 /// <param name="rotation"></param>
837 /// <returns></returns>
838 protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreatePrimImprovedBlock(uint localID, LLVector3 position, LLQuaternion rotation)
839 {
840 uint ID = localID;
841 byte[] bytes = new byte[60];
842
843 int i = 0;
844 ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
845 dat.TextureEntry = new byte[0];
846 bytes[i++] = (byte)(ID % 256);
847 bytes[i++] = (byte)((ID >> 8) % 256);
848 bytes[i++] = (byte)((ID >> 16) % 256);
849 bytes[i++] = (byte)((ID >> 24) % 256);
850 bytes[i++] = 0;
851 bytes[i++] = 0;
852
853 byte[] pb = position.GetBytes();
854 Array.Copy(pb, 0, bytes, i, pb.Length);
855 i += 12;
856 ushort ac = 32767;
857
858 //vel
859 bytes[i++] = (byte)(ac % 256);
860 bytes[i++] = (byte)((ac >> 8) % 256);
861 bytes[i++] = (byte)(ac % 256);
862 bytes[i++] = (byte)((ac >> 8) % 256);
863 bytes[i++] = (byte)(ac % 256);
864 bytes[i++] = (byte)((ac >> 8) % 256);
865
866 //accel
867 bytes[i++] = (byte)(ac % 256);
868 bytes[i++] = (byte)((ac >> 8) % 256);
869 bytes[i++] = (byte)(ac % 256);
870 bytes[i++] = (byte)((ac >> 8) % 256);
871 bytes[i++] = (byte)(ac % 256);
872 bytes[i++] = (byte)((ac >> 8) % 256);
873
874 ushort rw, rx, ry, rz;
875 rw = (ushort)(32768 * (rotation.W + 1));
876 rx = (ushort)(32768 * (rotation.X + 1));
877 ry = (ushort)(32768 * (rotation.Y + 1));
878 rz = (ushort)(32768 * (rotation.Z + 1));
879
880 //rot
881 bytes[i++] = (byte)(rx % 256);
882 bytes[i++] = (byte)((rx >> 8) % 256);
883 bytes[i++] = (byte)(ry % 256);
884 bytes[i++] = (byte)((ry >> 8) % 256);
885 bytes[i++] = (byte)(rz % 256);
886 bytes[i++] = (byte)((rz >> 8) % 256);
887 bytes[i++] = (byte)(rw % 256);
888 bytes[i++] = (byte)((rw >> 8) % 256);
889
890 //rotation vel
891 bytes[i++] = (byte)(ac % 256);
892 bytes[i++] = (byte)((ac >> 8) % 256);
893 bytes[i++] = (byte)(ac % 256);
894 bytes[i++] = (byte)((ac >> 8) % 256);
895 bytes[i++] = (byte)(ac % 256);
896 bytes[i++] = (byte)((ac >> 8) % 256);
897
898 dat.Data = bytes;
899 return dat;
900 }
901
902
903 /// <summary>
904 /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive)
905 /// </summary>
906 /// <param name="primData"></param>
907 /// <returns></returns>
908 protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimData primData, LLUUID textureID, uint flags)
909 {
910 ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock();
911 this.SetDefaultPrimPacketValues(objupdate);
912 objupdate.UpdateFlags = flags;
913 this.SetPrimPacketShapeData(objupdate, primData, textureID);
914
915 return objupdate;
916 }
917
918 /// <summary>
919 /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive)
920 /// </summary>
921 /// <param name="primData"></param>
922 /// <returns></returns>
923 protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimitiveBaseShape primShape, LLUUID textureID, uint flags)
924 {
925 ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock();
926 this.SetDefaultPrimPacketValues(objupdate);
927 objupdate.UpdateFlags = flags;
928 this.SetPrimPacketShapeData(objupdate, primShape, textureID);
929
930 return objupdate;
931 }
932
933
934 /// <summary>
935 /// Copy the data from a PrimData object to a ObjectUpdatePacket
936 /// </summary>
937 /// <param name="objectData"></param>
938 /// <param name="primData"></param>
939 protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimData primData, LLUUID textureID)
940 {
941 LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID);
942 objectData.TextureEntry = ntex.ToBytes();
943 objectData.OwnerID = primData.OwnerID;
944 objectData.ParentID = primData.ParentID;
945 objectData.PCode = primData.PCode;
946 objectData.PathBegin = primData.PathBegin;
947 objectData.PathEnd = primData.PathEnd;
948 objectData.PathScaleX = primData.PathScaleX;
949 objectData.PathScaleY = primData.PathScaleY;
950 objectData.PathShearX = primData.PathShearX;
951 objectData.PathShearY = primData.PathShearY;
952 objectData.PathSkew = primData.PathSkew;
953 objectData.ProfileBegin = primData.ProfileBegin;
954 objectData.ProfileEnd = primData.ProfileEnd;
955 objectData.Scale = primData.Scale;
956 objectData.PathCurve = primData.PathCurve;
957 objectData.ProfileCurve = primData.ProfileCurve;
958 objectData.ProfileHollow = primData.ProfileHollow;
959 objectData.PathRadiusOffset = primData.PathRadiusOffset;
960 objectData.PathRevolutions = primData.PathRevolutions;
961 objectData.PathTaperX = primData.PathTaperX;
962 objectData.PathTaperY = primData.PathTaperY;
963 objectData.PathTwist = primData.PathTwist;
964 objectData.PathTwistBegin = primData.PathTwistBegin;
965 }
966
967 protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimitiveBaseShape primData, LLUUID textureID)
968 {
969 LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID);
970 objectData.TextureEntry = ntex.ToBytes();
971 objectData.PCode = primData.PCode;
972 objectData.PathBegin = primData.PathBegin;
973 objectData.PathEnd = primData.PathEnd;
974 objectData.PathScaleX = primData.PathScaleX;
975 objectData.PathScaleY = primData.PathScaleY;
976 objectData.PathShearX = primData.PathShearX;
977 objectData.PathShearY = primData.PathShearY;
978 objectData.PathSkew = primData.PathSkew;
979 objectData.ProfileBegin = primData.ProfileBegin;
980 objectData.ProfileEnd = primData.ProfileEnd;
981 objectData.Scale = primData.Scale;
982 objectData.PathCurve = primData.PathCurve;
983 objectData.ProfileCurve = primData.ProfileCurve;
984 objectData.ProfileHollow = primData.ProfileHollow;
985 objectData.PathRadiusOffset = primData.PathRadiusOffset;
986 objectData.PathRevolutions = primData.PathRevolutions;
987 objectData.PathTaperX = primData.PathTaperX;
988 objectData.PathTaperY = primData.PathTaperY;
989 objectData.PathTwist = primData.PathTwist;
990 objectData.PathTwistBegin = primData.PathTwistBegin;
991 }
992
993 /// <summary>
994 /// Set some default values in a ObjectUpdatePacket
995 /// </summary>
996 /// <param name="objdata"></param>
997 protected void SetDefaultPrimPacketValues(ObjectUpdatePacket.ObjectDataBlock objdata)
998 {
999 objdata.PSBlock = new byte[0];
1000 objdata.ExtraParams = new byte[1];
1001 objdata.MediaURL = new byte[0];
1002 objdata.NameValue = new byte[0];
1003 objdata.Text = new byte[0];
1004 objdata.TextColor = new byte[4];
1005 objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0);
1006 objdata.JointPivot = new LLVector3(0, 0, 0);
1007 objdata.Material = 3;
1008 objdata.TextureAnim = new byte[0];
1009 objdata.Sound = LLUUID.Zero;
1010 objdata.State = 0;
1011 objdata.Data = new byte[0];
1012
1013 objdata.ObjectData = new byte[60];
1014 objdata.ObjectData[46] = 128;
1015 objdata.ObjectData[47] = 63;
1016 }
1017
1018
1019 /// <summary>
1020 ///
1021 /// </summary>
1022 /// <returns></returns>
1023 protected ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket(byte[] textureEntry)
1024 {
1025 ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i);
1026
1027 SetDefaultAvatarPacketValues(ref objdata);
1028 objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24);
1029 objdata.PathCurve = 16;
1030 objdata.ProfileCurve = 1;
1031 objdata.PathScaleX = 100;
1032 objdata.PathScaleY = 100;
1033 objdata.ParentID = 0;
1034 objdata.OwnerID = LLUUID.Zero;
1035 objdata.Scale = new LLVector3(1, 1, 1);
1036 objdata.PCode = 47;
1037 if (textureEntry != null)
1038 {
1039 objdata.TextureEntry = textureEntry;
1040 }
1041 Encoding enc = Encoding.ASCII;
1042 LLVector3 pos = new LLVector3(objdata.ObjectData, 16);
1043 pos.X = 100f;
1044 objdata.ID = 8880000;
1045 objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0");
1046 LLVector3 pos2 = new LLVector3(100f, 100f, 23f);
1047 //objdata.FullID=user.AgentID;
1048 byte[] pb = pos.GetBytes();
1049 Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length);
1050
1051 return objdata;
1052 }
1053
1054 /// <summary>
1055 ///
1056 /// </summary>
1057 /// <param name="objdata"></param>
1058 protected void SetDefaultAvatarPacketValues(ref ObjectUpdatePacket.ObjectDataBlock objdata)
1059 {
1060 objdata.PSBlock = new byte[0];
1061 objdata.ExtraParams = new byte[1];
1062 objdata.MediaURL = new byte[0];
1063 objdata.NameValue = new byte[0];
1064 objdata.Text = new byte[0];
1065 objdata.TextColor = new byte[4];
1066 objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0);
1067 objdata.JointPivot = new LLVector3(0, 0, 0);
1068 objdata.Material = 4;
1069 objdata.TextureAnim = new byte[0];
1070 objdata.Sound = LLUUID.Zero;
1071 LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
1072 objdata.TextureEntry = ntex.ToBytes();
1073 objdata.State = 0;
1074 objdata.Data = new byte[0];
1075
1076 objdata.ObjectData = new byte[76];
1077 objdata.ObjectData[15] = 128;
1078 objdata.ObjectData[16] = 63;
1079 objdata.ObjectData[56] = 128;
1080 objdata.ObjectData[61] = 102;
1081 objdata.ObjectData[62] = 40;
1082 objdata.ObjectData[63] = 61;
1083 objdata.ObjectData[64] = 189;
1084 }
1085
1086 /// <summary>
1087 ///
1088 /// </summary>
1089 /// <param name="addPacket"></param>
1090 /// <returns></returns>
1091 protected PrimData CreatePrimFromObjectAdd(ObjectAddPacket addPacket)
1092 {
1093 PrimData PData = new PrimData();
1094 PData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
1095 PData.PCode = addPacket.ObjectData.PCode;
1096 PData.PathBegin = addPacket.ObjectData.PathBegin;
1097 PData.PathEnd = addPacket.ObjectData.PathEnd;
1098 PData.PathScaleX = addPacket.ObjectData.PathScaleX;
1099 PData.PathScaleY = addPacket.ObjectData.PathScaleY;
1100 PData.PathShearX = addPacket.ObjectData.PathShearX;
1101 PData.PathShearY = addPacket.ObjectData.PathShearY;
1102 PData.PathSkew = addPacket.ObjectData.PathSkew;
1103 PData.ProfileBegin = addPacket.ObjectData.ProfileBegin;
1104 PData.ProfileEnd = addPacket.ObjectData.ProfileEnd;
1105 PData.Scale = addPacket.ObjectData.Scale;
1106 PData.PathCurve = addPacket.ObjectData.PathCurve;
1107 PData.ProfileCurve = addPacket.ObjectData.ProfileCurve;
1108 PData.ParentID = 0;
1109 PData.ProfileHollow = addPacket.ObjectData.ProfileHollow;
1110 PData.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
1111 PData.PathRevolutions = addPacket.ObjectData.PathRevolutions;
1112 PData.PathTaperX = addPacket.ObjectData.PathTaperX;
1113 PData.PathTaperY = addPacket.ObjectData.PathTaperY;
1114 PData.PathTwist = addPacket.ObjectData.PathTwist;
1115 PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
1116
1117 return PData;
1118 }
1119 #endregion
1120
1121 }
1122}
diff --git a/OpenSim/Region/ClientStack/ClientView.AgentAssetUpload.cs b/OpenSim/Region/ClientStack/ClientView.AgentAssetUpload.cs
new file mode 100644
index 0000000..60cd33a
--- /dev/null
+++ b/OpenSim/Region/ClientStack/ClientView.AgentAssetUpload.cs
@@ -0,0 +1,357 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
31using libsecondlife.Packets;
32using OpenSim.Assets;
33using OpenSim.Framework.Interfaces;
34using OpenSim.Framework.Types;
35using OpenSim.Framework.Utilities;
36using OpenSim.Region.Caches;
37
38namespace OpenSim.Region.ClientStack
39{
40 partial class ClientView
41 {
42 public class AgentAssetUpload
43 {
44 private Dictionary<LLUUID, AssetTransaction> transactions = new Dictionary<LLUUID, AssetTransaction>();
45 private ClientView ourClient;
46 private AssetCache m_assetCache;
47 private InventoryCache m_inventoryCache;
48
49 public AgentAssetUpload(ClientView client, AssetCache assetCache, InventoryCache inventoryCache)
50 {
51 this.ourClient = client;
52 m_assetCache = assetCache;
53 m_inventoryCache = inventoryCache;
54 }
55
56 public void AddUpload(LLUUID transactionID, AssetBase asset)
57 {
58 AssetTransaction upload = new AssetTransaction();
59 lock (this.transactions)
60 {
61 upload.Asset = asset;
62 upload.TransactionID = transactionID;
63 this.transactions.Add(transactionID, upload);
64 }
65 if (upload.Asset.Data.Length > 2)
66 {
67 //is complete
68 upload.UploadComplete = true;
69 AssetUploadCompletePacket response = new AssetUploadCompletePacket();
70 response.AssetBlock.Type = asset.Type;
71 response.AssetBlock.Success = true;
72 response.AssetBlock.UUID = transactionID.Combine(this.ourClient.SecureSessionID);
73 this.ourClient.OutPacket(response);
74 m_assetCache.AddAsset(asset);
75 }
76 else
77 {
78 upload.UploadComplete = false;
79 upload.XferID = Util.GetNextXferID();
80 RequestXferPacket xfer = new RequestXferPacket();
81 xfer.XferID.ID = upload.XferID;
82 xfer.XferID.VFileType = upload.Asset.Type;
83 xfer.XferID.VFileID = transactionID.Combine(this.ourClient.SecureSessionID);
84 xfer.XferID.FilePath = 0;
85 xfer.XferID.Filename = new byte[0];
86 this.ourClient.OutPacket(xfer);
87 }
88
89 }
90
91 public AssetBase GetUpload(LLUUID transactionID)
92 {
93 if (this.transactions.ContainsKey(transactionID))
94 {
95 return this.transactions[transactionID].Asset;
96 }
97
98 return null;
99 }
100
101 public void HandleUploadPacket(AssetUploadRequestPacket pack, LLUUID assetID)
102 {
103 // Console.Write("asset upload request , type = " + pack.AssetBlock.Type.ToString());
104 AssetBase asset = null;
105 if (pack.AssetBlock.Type == 0)
106 {
107
108 //first packet for transaction
109 asset = new AssetBase();
110 asset.FullID = assetID;
111 asset.Type = pack.AssetBlock.Type;
112 asset.InvType = asset.Type;
113 asset.Name = "UploadedTexture" + Util.RandomClass.Next(1, 1000).ToString("000");
114 asset.Data = pack.AssetBlock.AssetData;
115
116
117 }
118 else if (pack.AssetBlock.Type == 13 | pack.AssetBlock.Type == 5 | pack.AssetBlock.Type == 7)
119 {
120
121 asset = new AssetBase();
122 asset.FullID = assetID;
123 // Console.WriteLine("skin asset id is " + assetID.ToStringHyphenated());
124 asset.Type = pack.AssetBlock.Type;
125 asset.InvType = asset.Type;
126 asset.Name = "NewClothing" + Util.RandomClass.Next(1, 1000).ToString("000");
127 asset.Data = pack.AssetBlock.AssetData;
128
129
130 }
131
132 if (asset != null)
133 {
134 this.AddUpload(pack.AssetBlock.TransactionID, asset);
135 }
136 else
137 {
138
139 //currently we don't support this asset type
140 //so lets just tell the client that the upload is complete
141 AssetUploadCompletePacket response = new AssetUploadCompletePacket();
142 response.AssetBlock.Type = pack.AssetBlock.Type;
143 response.AssetBlock.Success = true;
144 response.AssetBlock.UUID = pack.AssetBlock.TransactionID.Combine(this.ourClient.SecureSessionID);
145 this.ourClient.OutPacket(response);
146 }
147
148 }
149
150 #region Xfer packet system for larger uploads
151
152 public void HandleXferPacket(SendXferPacketPacket xferPacket)
153 {
154 lock (this.transactions)
155 {
156 foreach (AssetTransaction trans in this.transactions.Values)
157 {
158 if (trans.XferID == xferPacket.XferID.ID)
159 {
160 if (trans.Asset.Data.Length > 1)
161 {
162 byte[] newArray = new byte[trans.Asset.Data.Length + xferPacket.DataPacket.Data.Length];
163 Array.Copy(trans.Asset.Data, 0, newArray, 0, trans.Asset.Data.Length);
164 Array.Copy(xferPacket.DataPacket.Data, 0, newArray, trans.Asset.Data.Length, xferPacket.DataPacket.Data.Length);
165 trans.Asset.Data = newArray;
166 }
167 else
168 {
169 byte[] newArray = new byte[xferPacket.DataPacket.Data.Length - 4];
170 Array.Copy(xferPacket.DataPacket.Data, 4, newArray, 0, xferPacket.DataPacket.Data.Length - 4);
171 trans.Asset.Data = newArray;
172 }
173
174 if ((xferPacket.XferID.Packet & 2147483648) != 0)
175 {
176 //end of transfer
177 trans.UploadComplete = true;
178 AssetUploadCompletePacket response = new AssetUploadCompletePacket();
179 response.AssetBlock.Type = trans.Asset.Type;
180 response.AssetBlock.Success = true;
181 response.AssetBlock.UUID = trans.TransactionID.Combine(this.ourClient.SecureSessionID);
182 this.ourClient.OutPacket(response);
183
184 m_assetCache.AddAsset(trans.Asset);
185 //check if we should add it to inventory
186 if (trans.AddToInventory)
187 {
188 // m_assetCache.AddAsset(trans.Asset);
189 m_inventoryCache.AddNewInventoryItem(this.ourClient, trans.InventFolder, trans.Asset);
190 }
191
192
193 }
194 break;
195 }
196
197 }
198 }
199
200 ConfirmXferPacketPacket confirmXfer = new ConfirmXferPacketPacket();
201 confirmXfer.XferID.ID = xferPacket.XferID.ID;
202 confirmXfer.XferID.Packet = xferPacket.XferID.Packet;
203 this.ourClient.OutPacket(confirmXfer);
204 }
205
206 #endregion
207
208 public AssetBase AddUploadToAssetCache(LLUUID transactionID)
209 {
210 AssetBase asset = null;
211 if (this.transactions.ContainsKey(transactionID))
212 {
213 AssetTransaction trans = this.transactions[transactionID];
214 if (trans.UploadComplete)
215 {
216 m_assetCache.AddAsset(trans.Asset);
217 asset = trans.Asset;
218 }
219 }
220
221 return asset;
222 }
223
224 public void CreateInventoryItem(CreateInventoryItemPacket packet)
225 {
226 if (this.transactions.ContainsKey(packet.InventoryBlock.TransactionID))
227 {
228 AssetTransaction trans = this.transactions[packet.InventoryBlock.TransactionID];
229 trans.Asset.Description = Util.FieldToString(packet.InventoryBlock.Description);
230 trans.Asset.Name = Util.FieldToString(packet.InventoryBlock.Name);
231 trans.Asset.Type = packet.InventoryBlock.Type;
232 trans.Asset.InvType = packet.InventoryBlock.InvType;
233 if (trans.UploadComplete)
234 {
235 //already complete so we can add it to the inventory
236 //m_assetCache.AddAsset(trans.Asset);
237 m_inventoryCache.AddNewInventoryItem(this.ourClient, packet.InventoryBlock.FolderID, trans.Asset);
238 }
239 else
240 {
241 trans.AddToInventory = true;
242 trans.InventFolder = packet.InventoryBlock.FolderID;
243 }
244 }
245 }
246
247 private class AssetTransaction
248 {
249 public uint XferID;
250 public AssetBase Asset;
251 public bool AddToInventory;
252 public LLUUID InventFolder = LLUUID.Zero;
253 public bool UploadComplete = false;
254 public LLUUID TransactionID = LLUUID.Zero;
255
256 public AssetTransaction()
257 {
258
259 }
260 }
261
262 //new class , not currently used.
263 public class AssetXferUploader
264 {
265 private IClientAPI ourClient;
266
267 public bool UploadComplete = false;
268
269 public bool AddToInventory;
270 public LLUUID InventFolder = LLUUID.Zero;
271
272 public uint XferID;
273 public AssetBase Asset;
274 public LLUUID TransactionID = LLUUID.Zero;
275
276
277 public AssetXferUploader(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, byte[] data)
278 {
279 ourClient = remoteClient;
280 Asset = new AssetBase();
281 Asset.FullID = assetID;
282 Asset.InvType = type;
283 Asset.Type = type;
284 Asset.Data = data;
285 Asset.Name = "blank";
286 Asset.Description = "empty";
287 TransactionID = transaction;
288
289 if (Asset.Data.Length > 2)
290 {
291 //data block should only have data in it, if there is no more data to be uploaded
292 this.SendCompleteMessage();
293 }
294 else
295 {
296 this.ReqestStartXfer();
297 }
298 }
299
300 protected void SendCompleteMessage()
301 {
302 UploadComplete = true;
303 AssetUploadCompletePacket response = new AssetUploadCompletePacket();
304 response.AssetBlock.Type = Asset.Type;
305 response.AssetBlock.Success = true;
306 response.AssetBlock.UUID = Asset.FullID;
307 this.ourClient.OutPacket(response);
308
309 //TODO trigger event
310 }
311
312 protected void ReqestStartXfer()
313 {
314 UploadComplete = false;
315 XferID = Util.GetNextXferID();
316 RequestXferPacket xfer = new RequestXferPacket();
317 xfer.XferID.ID = XferID;
318 xfer.XferID.VFileType = Asset.Type;
319 xfer.XferID.VFileID = Asset.FullID;
320 xfer.XferID.FilePath = 0;
321 xfer.XferID.Filename = new byte[0];
322 this.ourClient.OutPacket(xfer);
323 }
324
325 public void HandleXferPacket(uint xferID, uint packetID, byte[] data)
326 {
327 if (XferID == xferID)
328 {
329 if (Asset.Data.Length > 1)
330 {
331 byte[] newArray = new byte[Asset.Data.Length + data.Length];
332 Array.Copy(Asset.Data, 0, newArray, 0, Asset.Data.Length);
333 Array.Copy(data, 0, newArray, Asset.Data.Length, data.Length);
334 Asset.Data = newArray;
335 }
336 else
337 {
338 byte[] newArray = new byte[data.Length - 4];
339 Array.Copy(data, 4, newArray, 0, data.Length - 4);
340 Asset.Data = newArray;
341 }
342
343 ConfirmXferPacketPacket confirmXfer = new ConfirmXferPacketPacket();
344 confirmXfer.XferID.ID = xferID;
345 confirmXfer.XferID.Packet = packetID;
346 this.ourClient.OutPacket(confirmXfer);
347
348 if ((packetID & 2147483648) != 0)
349 {
350 this.SendCompleteMessage();
351 }
352 }
353 }
354 }
355 }
356 }
357}
diff --git a/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs
new file mode 100644
index 0000000..e67807e
--- /dev/null
+++ b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs
@@ -0,0 +1,236 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using libsecondlife.Packets;
30using OpenSim.Framework.Console;
31
32namespace OpenSim.Region.ClientStack
33{
34 public partial class ClientView
35 {
36 protected virtual void RegisterLocalPacketHandlers()
37 {
38 this.AddLocalPacketHandler(PacketType.LogoutRequest, this.Logout);
39 this.AddLocalPacketHandler(PacketType.AgentCachedTexture, this.AgentTextureCached);
40 this.AddLocalPacketHandler(PacketType.MultipleObjectUpdate, this.MultipleObjUpdate);
41 }
42
43 protected virtual bool Logout(ClientView simClient, Packet packet)
44 {
45 MainLog.Instance.Verbose( "OpenSimClient.cs:ProcessInPacket() - Got a logout request");
46 //send reply to let the client logout
47 LogoutReplyPacket logReply = new LogoutReplyPacket();
48 logReply.AgentData.AgentID = this.AgentID;
49 logReply.AgentData.SessionID = this.SessionID;
50 logReply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[1];
51 logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock();
52 logReply.InventoryData[0].ItemID = LLUUID.Zero;
53 OutPacket(logReply);
54 //
55 this.KillClient();
56 return true;
57 }
58
59 protected bool AgentTextureCached(ClientView simclient, Packet packet)
60 {
61 // Console.WriteLine(packet.ToString());
62 AgentCachedTexturePacket chechedtex = (AgentCachedTexturePacket)packet;
63 AgentCachedTextureResponsePacket cachedresp = new AgentCachedTextureResponsePacket();
64 cachedresp.AgentData.AgentID = this.AgentID;
65 cachedresp.AgentData.SessionID = this.SessionID;
66 cachedresp.AgentData.SerialNum = this.cachedtextureserial;
67 this.cachedtextureserial++;
68 cachedresp.WearableData = new AgentCachedTextureResponsePacket.WearableDataBlock[chechedtex.WearableData.Length];
69 for (int i = 0; i < chechedtex.WearableData.Length; i++)
70 {
71 cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
72 cachedresp.WearableData[i].TextureIndex = chechedtex.WearableData[i].TextureIndex;
73 cachedresp.WearableData[i].TextureID = LLUUID.Zero;
74 cachedresp.WearableData[i].HostName = new byte[0];
75 }
76 this.OutPacket(cachedresp);
77 return true;
78 }
79
80 protected bool MultipleObjUpdate(ClientView simClient, Packet packet)
81 {
82 MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet;
83 //System.Console.WriteLine("new multi update packet " + multipleupdate.ToString());
84 for (int i = 0; i < multipleupdate.ObjectData.Length; i++)
85 {
86 #region position
87 if (multipleupdate.ObjectData[i].Type == 9) //change position
88 {
89 if (OnUpdatePrimGroupPosition != null)
90 {
91 LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0);
92 OnUpdatePrimGroupPosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this);
93 }
94
95 }
96 else if (multipleupdate.ObjectData[i].Type == 1) //single item of group change position
97 {
98 if (OnUpdatePrimSinglePosition != null)
99 {
100 libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0);
101 // System.Console.WriteLine("new movement position is " + pos.X + " , " + pos.Y + " , " + pos.Z);
102 OnUpdatePrimSinglePosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this);
103 }
104 }
105 #endregion position
106 #region rotation
107 else if (multipleupdate.ObjectData[i].Type == 2)// single item of group rotation from tab
108 {
109 if (OnUpdatePrimSingleRotation != null)
110 {
111 LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true);
112 // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W);
113 OnUpdatePrimSingleRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this);
114 }
115 }
116 else if (multipleupdate.ObjectData[i].Type == 3)// single item of group rotation from mouse
117 {
118 if (OnUpdatePrimSingleRotation != null)
119 {
120 libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 12, true);
121 // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W);
122 OnUpdatePrimSingleRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this);
123 }
124 }
125 else if (multipleupdate.ObjectData[i].Type == 10)//group rotation from object tab
126 {
127 if (OnUpdatePrimGroupRotation != null)
128 {
129 libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true);
130 // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W);
131 OnUpdatePrimGroupRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this);
132 }
133 }
134 else if (multipleupdate.ObjectData[i].Type == 11)//group rotation from mouse
135 {
136 if (OnUpdatePrimGroupMouseRotation != null)
137 {
138 libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0);
139 libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 12, true);
140 //Console.WriteLine("new rotation position is " + pos.X + " , " + pos.Y + " , " + pos.Z);
141 // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W);
142 OnUpdatePrimGroupMouseRotation(multipleupdate.ObjectData[i].ObjectLocalID, pos, rot, this);
143 }
144 }
145 #endregion
146 #region scale
147 else if (multipleupdate.ObjectData[i].Type == 13)//group scale from object tab
148 {
149 if (OnUpdatePrimScale != null)
150 {
151 LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12);
152 //Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z);
153 OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this);
154 }
155 }
156 else if (multipleupdate.ObjectData[i].Type == 29)//group scale from mouse
157 {
158 if (OnUpdatePrimScale != null)
159 {
160 libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 0);
161 // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z );
162 // OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this);
163 }
164 }
165 else if (multipleupdate.ObjectData[i].Type == 5)//single prim scale from object tab
166 {
167 if (OnUpdatePrimScale != null)
168 {
169 libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12);
170 // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z);
171 OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this);
172 }
173 }
174 else if (multipleupdate.ObjectData[i].Type == 21)//single prim scale from mouse
175 {
176 if (OnUpdatePrimScale != null)
177 {
178 libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12);
179 // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z);
180 OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this);
181 }
182 }
183 #endregion
184 }
185 return true;
186 }
187
188 public void RequestMapLayer()
189 {
190 //should be getting the map layer from the grid server
191 //send a layer covering the 800,800 - 1200,1200 area (should be covering the requested area)
192 MapLayerReplyPacket mapReply = new MapLayerReplyPacket();
193 mapReply.AgentData.AgentID = this.AgentID;
194 mapReply.AgentData.Flags = 0;
195 mapReply.LayerData = new MapLayerReplyPacket.LayerDataBlock[1];
196 mapReply.LayerData[0] = new MapLayerReplyPacket.LayerDataBlock();
197 mapReply.LayerData[0].Bottom = 0;
198 mapReply.LayerData[0].Left = 0;
199 mapReply.LayerData[0].Top = 30000;
200 mapReply.LayerData[0].Right = 30000;
201 mapReply.LayerData[0].ImageID = new LLUUID("00000000-0000-0000-9999-000000000006");
202 this.OutPacket(mapReply);
203 }
204
205 public void RequestMapBlocks(int minX, int minY, int maxX, int maxY)
206 {
207 /*
208 IList simMapProfiles = m_gridServer.RequestMapBlocks(minX, minY, maxX, maxY);
209 MapBlockReplyPacket mbReply = new MapBlockReplyPacket();
210 mbReply.AgentData.AgentID = this.AgentID;
211 int len;
212 if (simMapProfiles == null)
213 len = 0;
214 else
215 len = simMapProfiles.Count;
216
217 mbReply.Data = new MapBlockReplyPacket.DataBlock[len];
218 int iii;
219 for (iii = 0; iii < len; iii++)
220 {
221 Hashtable mp = (Hashtable)simMapProfiles[iii];
222 mbReply.Data[iii] = new MapBlockReplyPacket.DataBlock();
223 mbReply.Data[iii].Name = System.Text.Encoding.UTF8.GetBytes((string)mp["name"]);
224 mbReply.Data[iii].Access = System.Convert.ToByte(mp["access"]);
225 mbReply.Data[iii].Agents = System.Convert.ToByte(mp["agents"]);
226 mbReply.Data[iii].MapImageID = new LLUUID((string)mp["map-image-id"]);
227 mbReply.Data[iii].RegionFlags = System.Convert.ToUInt32(mp["region-flags"]);
228 mbReply.Data[iii].WaterHeight = System.Convert.ToByte(mp["water-height"]);
229 mbReply.Data[iii].X = System.Convert.ToUInt16(mp["x"]);
230 mbReply.Data[iii].Y = System.Convert.ToUInt16(mp["y"]);
231 }
232 this.OutPacket(mbReply);
233 */
234 }
235 }
236}
diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs
new file mode 100644
index 0000000..3265898
--- /dev/null
+++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs
@@ -0,0 +1,596 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using libsecondlife;
32using libsecondlife.Packets;
33using OpenSim.Framework.Inventory;
34using OpenSim.Framework.Types;
35using OpenSim.Framework.Utilities;
36
37namespace OpenSim.Region.ClientStack
38{
39 public partial class ClientView
40 {
41 protected override void ProcessInPacket(Packet Pack)
42 {
43 ack_pack(Pack);
44 if (debug)
45 {
46 if (Pack.Type != PacketType.AgentUpdate)
47 {
48 Console.WriteLine(CircuitCode + ":IN: " + Pack.Type.ToString());
49 }
50 }
51
52 if (this.ProcessPacketMethod(Pack))
53 {
54 //there is a handler registered that handled this packet type
55 return;
56 }
57 else
58 {
59 Encoding _enc = Encoding.ASCII;
60
61 switch (Pack.Type)
62 {
63 case PacketType.ViewerEffect:
64 ViewerEffectPacket viewer = (ViewerEffectPacket)Pack;
65 foreach (ClientView client in m_clientThreads.Values)
66 {
67 if (client.AgentID != this.AgentID)
68 {
69 viewer.AgentData.AgentID = client.AgentID;
70 viewer.AgentData.SessionID = client.SessionID;
71 client.OutPacket(viewer);
72 }
73 }
74 break;
75
76 #region World/Avatar
77 case PacketType.ChatFromViewer:
78 ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack;
79 if (Util.FieldToString(inchatpack.ChatData.Message) == "")
80 {
81 //empty message so don't bother with it
82 break;
83 }
84 string fromName = ""; //ClientAvatar.firstname + " " + ClientAvatar.lastname;
85 byte[] message = inchatpack.ChatData.Message;
86 byte type = inchatpack.ChatData.Type;
87 LLVector3 fromPos = new LLVector3(); // ClientAvatar.Pos;
88 LLUUID fromAgentID = AgentID;
89 if (OnChatFromViewer != null)
90 {
91 this.OnChatFromViewer(message, type, fromPos, fromName, fromAgentID);
92 }
93 break;
94 case PacketType.ImprovedInstantMessage:
95 ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack;
96
97 string IMfromName = Util.FieldToString(msgpack.MessageBlock.FromAgentName);
98 string IMmessage = Util.FieldToString(msgpack.MessageBlock.Message);
99
100 if (OnInstantMessage != null)
101 {
102 this.OnInstantMessage(msgpack.AgentData.AgentID, msgpack.MessageBlock.ToAgentID,
103 msgpack.MessageBlock.Timestamp, IMfromName, IMmessage);
104 }
105
106 break;
107
108 case PacketType.RezObject:
109 RezObjectPacket rezPacket = (RezObjectPacket)Pack;
110 AgentInventory inven = this.m_inventoryCache.GetAgentsInventory(this.AgentID);
111 if (inven != null)
112 {
113 if (inven.InventoryItems.ContainsKey(rezPacket.InventoryData.ItemID))
114 {
115 AssetBase asset = this.m_assetCache.GetAsset(inven.InventoryItems[rezPacket.InventoryData.ItemID].AssetID);
116 if (asset != null)
117 {
118 if (OnRezObject != null)
119 {
120 this.OnRezObject(asset, rezPacket.RezData.RayEnd);
121 this.m_inventoryCache.DeleteInventoryItem(this, rezPacket.InventoryData.ItemID);
122 }
123 }
124 }
125 }
126 break;
127 case PacketType.DeRezObject:
128 if (OnDeRezObject != null)
129 {
130 OnDeRezObject(Pack, this);
131 }
132 break;
133 case PacketType.ModifyLand:
134 ModifyLandPacket modify = (ModifyLandPacket)Pack;
135 if (modify.ParcelData.Length > 0)
136 {
137 if (OnModifyTerrain != null)
138 {
139 OnModifyTerrain(modify.ModifyBlock.Height, modify.ModifyBlock.Seconds, modify.ModifyBlock.BrushSize,
140 modify.ModifyBlock.Action, modify.ParcelData[0].North, modify.ParcelData[0].West);
141 }
142 }
143 break;
144 case PacketType.RegionHandshakeReply:
145 if (OnRegionHandShakeReply != null)
146 {
147 OnRegionHandShakeReply(this);
148 }
149 break;
150 case PacketType.AgentWearablesRequest:
151 if (OnRequestWearables != null)
152 {
153 OnRequestWearables(this);
154 }
155 if (OnRequestAvatarsData != null)
156 {
157 OnRequestAvatarsData(this);
158 }
159 break;
160 case PacketType.AgentSetAppearance:
161 AgentSetAppearancePacket appear = (AgentSetAppearancePacket)Pack;
162 if (OnSetAppearance != null)
163 {
164 OnSetAppearance(appear.ObjectData.TextureEntry, appear.VisualParam);
165 }
166 break;
167 case PacketType.CompleteAgentMovement:
168 if (OnCompleteMovementToRegion != null)
169 {
170 OnCompleteMovementToRegion();
171 }
172 break;
173 case PacketType.AgentUpdate:
174 if (OnAgentUpdate != null)
175 {
176 AgentUpdatePacket agenUpdate = (AgentUpdatePacket)Pack;
177 OnAgentUpdate(this, agenUpdate.AgentData.ControlFlags, agenUpdate.AgentData.BodyRotation);
178 }
179 break;
180 case PacketType.AgentAnimation:
181 if (!m_child)
182 {
183 AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
184 for (int i = 0; i < AgentAni.AnimationList.Length; i++)
185 {
186 if (AgentAni.AnimationList[i].StartAnim)
187 {
188 if (OnStartAnim != null)
189 {
190 OnStartAnim(AgentAni.AnimationList[i].AnimID, 1);
191 }
192 }
193 }
194 }
195 break;
196
197 #endregion
198
199 #region Objects/Prims
200 case PacketType.ObjectLink:
201 // OpenSim.Framework.Console.MainLog.Instance.Verbose( Pack.ToString());
202 ObjectLinkPacket link = (ObjectLinkPacket)Pack;
203 uint parentprimid = 0;
204 List<uint> childrenprims = new List<uint>();
205 if (link.ObjectData.Length > 1)
206 {
207 parentprimid = link.ObjectData[0].ObjectLocalID;
208
209 for (int i = 1; i < link.ObjectData.Length; i++)
210 {
211 childrenprims.Add(link.ObjectData[i].ObjectLocalID);
212 }
213 }
214 if (OnLinkObjects != null)
215 {
216 OnLinkObjects(parentprimid, childrenprims);
217 }
218 break;
219 case PacketType.ObjectAdd:
220 if (OnAddPrim != null)
221 {
222 OnAddPrim(Pack, this);
223 }
224 break;
225 case PacketType.ObjectShape:
226 ObjectShapePacket shape = (ObjectShapePacket)Pack;
227 for (int i = 0; i < shape.ObjectData.Length; i++)
228 {
229 if (OnUpdatePrimShape != null)
230 {
231 OnUpdatePrimShape(shape.ObjectData[i].ObjectLocalID, shape.ObjectData[i]);
232 }
233 }
234 break;
235 case PacketType.ObjectDuplicate:
236 ObjectDuplicatePacket dupe = (ObjectDuplicatePacket)Pack;
237 for (int i = 0; i < dupe.ObjectData.Length; i++)
238 {
239 if (OnObjectDuplicate != null)
240 {
241 OnObjectDuplicate(dupe.ObjectData[i].ObjectLocalID, dupe.SharedData.Offset, dupe.SharedData.DuplicateFlags);
242 }
243 }
244
245 break;
246
247 case PacketType.ObjectSelect:
248 ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack;
249 for (int i = 0; i < incomingselect.ObjectData.Length; i++)
250 {
251 if (OnObjectSelect != null)
252 {
253 OnObjectSelect(incomingselect.ObjectData[i].ObjectLocalID, this);
254 }
255 }
256 break;
257 case PacketType.ObjectFlagUpdate:
258 ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack;
259 if (OnUpdatePrimFlags != null)
260 {
261 OnUpdatePrimFlags(flags.AgentData.ObjectLocalID, Pack, this);
262 }
263 break;
264 case PacketType.ObjectImage:
265 ObjectImagePacket imagePack = (ObjectImagePacket)Pack;
266 for (int i = 0; i < imagePack.ObjectData.Length; i++)
267 {
268 if (OnUpdatePrimTexture != null)
269 {
270 OnUpdatePrimTexture(imagePack.ObjectData[i].ObjectLocalID, imagePack.ObjectData[i].TextureEntry, this);
271 }
272 }
273 break;
274 case PacketType.ObjectGrab:
275 ObjectGrabPacket grap = (ObjectGrabPacket)Pack;
276 if (OnGrapObject != null)
277 {
278 OnGrapObject(grap.ObjectData.LocalID, grap.ObjectData.GrabOffset, this);
279 }
280 break;
281 case PacketType.ObjectGrabUpdate:
282 ObjectGrabUpdatePacket grapUpdate = (ObjectGrabUpdatePacket)Pack;
283 if (OnGrapUpdate != null)
284 {
285 OnGrapUpdate(grapUpdate.ObjectData.ObjectID, grapUpdate.ObjectData.GrabOffsetInitial, grapUpdate.ObjectData.GrabPosition, this);
286 }
287 break;
288 case PacketType.ObjectDeGrab:
289 ObjectDeGrabPacket deGrap = (ObjectDeGrabPacket)Pack;
290 if (OnDeGrapObject != null)
291 {
292 OnDeGrapObject(deGrap.ObjectData.LocalID, this);
293 }
294 break;
295 case PacketType.ObjectDescription:
296 ObjectDescriptionPacket objDes = (ObjectDescriptionPacket)Pack;
297 for (int i = 0; i < objDes.ObjectData.Length; i++)
298 {
299 if (OnObjectDescription != null)
300 {
301 OnObjectDescription(objDes.ObjectData[i].LocalID, enc.GetString(objDes.ObjectData[i].Description));
302 }
303 }
304 break;
305 case PacketType.ObjectName:
306 ObjectNamePacket objName = (ObjectNamePacket)Pack;
307 for (int i = 0; i < objName.ObjectData.Length; i++)
308 {
309 if (OnObjectName != null)
310 {
311 OnObjectName(objName.ObjectData[i].LocalID, enc.GetString(objName.ObjectData[i].Name));
312 }
313 }
314 break;
315 case PacketType.ObjectPermissions:
316 //Console.WriteLine("permissions set " + Pack.ToString());
317 break;
318 #endregion
319
320 #region Inventory/Asset/Other related packets
321 case PacketType.RequestImage:
322 RequestImagePacket imageRequest = (RequestImagePacket)Pack;
323 for (int i = 0; i < imageRequest.RequestImage.Length; i++)
324 {
325 m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
326 }
327 break;
328 case PacketType.TransferRequest:
329 //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request");
330 TransferRequestPacket transfer = (TransferRequestPacket)Pack;
331 m_assetCache.AddAssetRequest(this, transfer);
332 break;
333 case PacketType.AssetUploadRequest:
334 AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack;
335 this.UploadAssets.HandleUploadPacket(request, request.AssetBlock.TransactionID.Combine(this.SecureSessionID));
336 break;
337 case PacketType.RequestXfer:
338 //Console.WriteLine(Pack.ToString());
339 break;
340 case PacketType.SendXferPacket:
341 this.UploadAssets.HandleXferPacket((SendXferPacketPacket)Pack);
342 break;
343 case PacketType.CreateInventoryFolder:
344 CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack;
345 m_inventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type, Util.FieldToString(invFolder.FolderData.Name), invFolder.FolderData.ParentID);
346 //Console.WriteLine(Pack.ToString());
347 break;
348 case PacketType.CreateInventoryItem:
349 //Console.WriteLine(Pack.ToString());
350 CreateInventoryItemPacket createItem = (CreateInventoryItemPacket)Pack;
351 if (createItem.InventoryBlock.TransactionID != LLUUID.Zero)
352 {
353 this.UploadAssets.CreateInventoryItem(createItem);
354 }
355 else
356 {
357 // Console.Write(Pack.ToString());
358 this.CreateInventoryItem(createItem);
359 }
360 break;
361 case PacketType.FetchInventory:
362 //Console.WriteLine("fetch item packet");
363 FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack;
364 m_inventoryCache.FetchInventory(this, FetchInventory);
365 break;
366 case PacketType.FetchInventoryDescendents:
367 FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack;
368 m_inventoryCache.FetchInventoryDescendents(this, Fetch);
369 break;
370 case PacketType.UpdateInventoryItem:
371 UpdateInventoryItemPacket update = (UpdateInventoryItemPacket)Pack;
372 //Console.WriteLine(Pack.ToString());
373 for (int i = 0; i < update.InventoryData.Length; i++)
374 {
375 if (update.InventoryData[i].TransactionID != LLUUID.Zero)
376 {
377 AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID));
378 if (asset != null)
379 {
380 // Console.WriteLine("updating inventory item, found asset" + asset.FullID.ToStringHyphenated() + " already in cache");
381 m_inventoryCache.UpdateInventoryItemAsset(this, update.InventoryData[i].ItemID, asset);
382 }
383 else
384 {
385 asset = this.UploadAssets.AddUploadToAssetCache(update.InventoryData[i].TransactionID);
386 if (asset != null)
387 {
388 //Console.WriteLine("updating inventory item, adding asset" + asset.FullID.ToStringHyphenated() + " to cache");
389 m_inventoryCache.UpdateInventoryItemAsset(this, update.InventoryData[i].ItemID, asset);
390 }
391 else
392 {
393 //Console.WriteLine("trying to update inventory item, but asset is null");
394 }
395 }
396 }
397 else
398 {
399 m_inventoryCache.UpdateInventoryItemDetails(this, update.InventoryData[i].ItemID, update.InventoryData[i]); ;
400 }
401 }
402 break;
403 case PacketType.RequestTaskInventory:
404 // Console.WriteLine(Pack.ToString());
405 RequestTaskInventoryPacket requesttask = (RequestTaskInventoryPacket)Pack;
406 ReplyTaskInventoryPacket replytask = new ReplyTaskInventoryPacket();
407 //bool foundent = false;
408 /* foreach (Entity ent in m_world.Entities.Values)
409 {
410 if (ent.localid == requesttask.InventoryData.LocalID)
411 {
412 replytask.InventoryData.TaskID = ent.uuid;
413 replytask.InventoryData.Serial = 0;
414 replytask.InventoryData.Filename = new byte[0];
415 foundent = true;
416 }
417 }
418 if (foundent)
419 {
420 this.OutPacket(replytask);
421 }*/
422 break;
423 case PacketType.UpdateTaskInventory:
424 // Console.WriteLine(Pack.ToString());
425 UpdateTaskInventoryPacket updatetask = (UpdateTaskInventoryPacket)Pack;
426 AgentInventory myinventory = this.m_inventoryCache.GetAgentsInventory(this.AgentID);
427 /*if (myinventory != null)
428 {
429 if (updatetask.UpdateData.Key == 0)
430 {
431 if (myinventory.InventoryItems[updatetask.InventoryData.ItemID] != null)
432 {
433 if (myinventory.InventoryItems[updatetask.InventoryData.ItemID].Type == 7)
434 {
435 LLUUID noteaid = myinventory.InventoryItems[updatetask.InventoryData.ItemID].AssetID;
436 AssetBase assBase = this.m_assetCache.GetAsset(noteaid);
437 if (assBase != null)
438 {
439 foreach (Entity ent in m_world.Entities.Values)
440 {
441 if (ent.localid == updatetask.UpdateData.LocalID)
442 {
443 if (ent is OpenSim.world.Primitive)
444 {
445 this.m_world.AddScript(ent, Util.FieldToString(assBase.Data));
446 }
447 }
448 }
449 }
450 }
451 }
452 }
453 }*/
454 break;
455 case PacketType.MapLayerRequest:
456 this.RequestMapLayer();
457 break;
458 case PacketType.MapBlockRequest:
459 MapBlockRequestPacket MapRequest = (MapBlockRequestPacket)Pack;
460 if (OnRequestMapBlocks != null)
461 {
462 OnRequestMapBlocks(this, MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY);
463 }
464 break;
465 case PacketType.TeleportLandmarkRequest:
466 TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack;
467
468 TeleportStartPacket tpStart = new TeleportStartPacket();
469 tpStart.Info.TeleportFlags = 8; // tp via lm
470 this.OutPacket(tpStart);
471
472 TeleportProgressPacket tpProgress = new TeleportProgressPacket();
473 tpProgress.Info.Message = (new ASCIIEncoding()).GetBytes("sending_landmark");
474 tpProgress.Info.TeleportFlags = 8;
475 tpProgress.AgentData.AgentID = tpReq.Info.AgentID;
476 this.OutPacket(tpProgress);
477
478 // Fetch landmark
479 LLUUID lmid = tpReq.Info.LandmarkID;
480 AssetBase lma = this.m_assetCache.GetAsset(lmid);
481 if (lma != null)
482 {
483 AssetLandmark lm = new AssetLandmark(lma);
484
485 if (lm.RegionID == m_world.RegionInfo.SimUUID)
486 {
487 TeleportLocalPacket tpLocal = new TeleportLocalPacket();
488
489 tpLocal.Info.AgentID = tpReq.Info.AgentID;
490 tpLocal.Info.TeleportFlags = 8; // Teleport via landmark
491 tpLocal.Info.LocationID = 2;
492 tpLocal.Info.Position = lm.Position;
493 OutPacket(tpLocal);
494 }
495 else
496 {
497 TeleportCancelPacket tpCancel = new TeleportCancelPacket();
498 tpCancel.Info.AgentID = tpReq.Info.AgentID;
499 tpCancel.Info.SessionID = tpReq.Info.SessionID;
500 OutPacket(tpCancel);
501 }
502 }
503 else
504 {
505 Console.WriteLine("Cancelling Teleport - fetch asset not yet implemented");
506
507 TeleportCancelPacket tpCancel = new TeleportCancelPacket();
508 tpCancel.Info.AgentID = tpReq.Info.AgentID;
509 tpCancel.Info.SessionID = tpReq.Info.SessionID;
510 OutPacket(tpCancel);
511 }
512 break;
513 case PacketType.TeleportLocationRequest:
514 TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack;
515 // Console.WriteLine(tpLocReq.ToString());
516
517 if (OnTeleportLocationRequest != null)
518 {
519 OnTeleportLocationRequest(this, tpLocReq.Info.RegionHandle, tpLocReq.Info.Position, tpLocReq.Info.LookAt, 16);
520 }
521 else
522 {
523 //no event handler so cancel request
524 TeleportCancelPacket tpCancel = new TeleportCancelPacket();
525 tpCancel.Info.SessionID = tpLocReq.AgentData.SessionID;
526 tpCancel.Info.AgentID = tpLocReq.AgentData.AgentID;
527 OutPacket(tpCancel);
528 }
529 break;
530 #endregion
531
532 case PacketType.MoneyBalanceRequest:
533 this.SendMoneyBalance(LLUUID.Zero, true, new byte[0], 1000);
534 break;
535 case PacketType.UUIDNameRequest:
536 UUIDNameRequestPacket incoming = (UUIDNameRequestPacket)Pack;
537 foreach (UUIDNameRequestPacket.UUIDNameBlockBlock UUIDBlock in incoming.UUIDNameBlock)
538 {
539 OnNameFromUUIDRequest(UUIDBlock.ID, this);
540 }
541 break;
542 #region Parcel related packets
543 case PacketType.ParcelPropertiesRequest:
544 ParcelPropertiesRequestPacket propertiesRequest = (ParcelPropertiesRequestPacket)Pack;
545 if (OnParcelPropertiesRequest != null)
546 {
547 OnParcelPropertiesRequest((int)Math.Round(propertiesRequest.ParcelData.West), (int)Math.Round(propertiesRequest.ParcelData.South), (int)Math.Round(propertiesRequest.ParcelData.East), (int)Math.Round(propertiesRequest.ParcelData.North), propertiesRequest.ParcelData.SequenceID, propertiesRequest.ParcelData.SnapSelection, this);
548 }
549 break;
550 case PacketType.ParcelDivide:
551 ParcelDividePacket parcelDivide = (ParcelDividePacket)Pack;
552 if (OnParcelDivideRequest != null)
553 {
554 OnParcelDivideRequest((int)Math.Round(parcelDivide.ParcelData.West), (int)Math.Round(parcelDivide.ParcelData.South), (int)Math.Round(parcelDivide.ParcelData.East), (int)Math.Round(parcelDivide.ParcelData.North), this);
555 }
556 break;
557 case PacketType.ParcelJoin:
558 ParcelJoinPacket parcelJoin = (ParcelJoinPacket)Pack;
559 if (OnParcelJoinRequest != null)
560 {
561 OnParcelJoinRequest((int)Math.Round(parcelJoin.ParcelData.West), (int)Math.Round(parcelJoin.ParcelData.South), (int)Math.Round(parcelJoin.ParcelData.East), (int)Math.Round(parcelJoin.ParcelData.North), this);
562 }
563 break;
564 case PacketType.ParcelPropertiesUpdate:
565 ParcelPropertiesUpdatePacket updatePacket = (ParcelPropertiesUpdatePacket)Pack;
566 if (OnParcelPropertiesUpdateRequest != null)
567 {
568 OnParcelPropertiesUpdateRequest(updatePacket, this);
569 }
570 break;
571 #endregion
572
573 #region Estate Packets
574 case PacketType.EstateOwnerMessage:
575 EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack;
576 if (OnEstateOwnerMessage != null)
577 {
578 OnEstateOwnerMessage(messagePacket, this);
579 }
580 break;
581 #endregion
582
583 #region unimplemented handlers
584 case PacketType.AgentIsNowWearing:
585 // AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack;
586 //Console.WriteLine(Pack.ToString());
587 break;
588 case PacketType.ObjectScale:
589 //OpenSim.Framework.Console.MainLog.Instance.Verbose( Pack.ToString());
590 break;
591 #endregion
592 }
593 }
594 }
595 }
596}
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs
new file mode 100644
index 0000000..0fe3884
--- /dev/null
+++ b/OpenSim/Region/ClientStack/ClientView.cs
@@ -0,0 +1,293 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Net;
31using System.Text;
32using System.Threading;
33using System.Timers;
34using libsecondlife;
35using libsecondlife.Packets;
36using OpenSim.Assets;
37using OpenSim.Framework;
38using OpenSim.Framework.Console;
39using OpenSim.Framework.Interfaces;
40using OpenSim.Framework.Inventory;
41using OpenSim.Framework.Types;
42using OpenSim.Framework.Utilities;
43using OpenSim.Region.Caches;
44using Timer=System.Timers.Timer;
45
46namespace OpenSim.Region.ClientStack
47{
48 public delegate bool PacketMethod(ClientView simClient, Packet packet);
49
50 /// <summary>
51 /// Handles new client connections
52 /// Constructor takes a single Packet and authenticates everything
53 /// </summary>
54 public partial class ClientView : ClientViewBase, IClientAPI
55 {
56 public static TerrainManager TerrainManager;
57
58 protected static Dictionary<PacketType, PacketMethod> PacketHandlers = new Dictionary<PacketType, PacketMethod>(); //Global/static handlers for all clients
59 protected Dictionary<PacketType, PacketMethod> m_packetHandlers = new Dictionary<PacketType, PacketMethod>(); //local handlers for this instance
60
61 public LLUUID AgentID;
62 public LLUUID SessionID;
63 public LLUUID SecureSessionID = LLUUID.Zero;
64 public string firstName;
65 public string lastName;
66 public bool m_child = false;
67 private UseCircuitCodePacket cirpack;
68 public Thread ClientThread;
69 public LLVector3 startpos;
70
71 private AgentAssetUpload UploadAssets;
72 private LLUUID newAssetFolder = LLUUID.Zero;
73 private bool debug = false;
74 protected IWorld m_world;
75 private Dictionary<uint, ClientView> m_clientThreads;
76 private AssetCache m_assetCache;
77 private InventoryCache m_inventoryCache;
78 private int cachedtextureserial = 0;
79 protected AuthenticateSessionsBase m_authenticateSessionsHandler;
80 private Encoding enc = Encoding.ASCII;
81 // Dead client detection vars
82 private Timer clientPingTimer;
83 private int packetsReceived = 0;
84 private int probesWithNoIngressPackets = 0;
85 private int lastPacketsReceived = 0;
86
87 public ClientView(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, Dictionary<uint, ClientView> clientThreads, IWorld world, AssetCache assetCache, PacketServer packServer, InventoryCache inventoryCache, AuthenticateSessionsBase authenSessions )
88 {
89 m_world = world;
90 m_clientThreads = clientThreads;
91 m_assetCache = assetCache;
92
93 m_networkServer = packServer;
94 m_inventoryCache = inventoryCache;
95 m_authenticateSessionsHandler = authenSessions;
96
97 MainLog.Instance.Verbose( "OpenSimClient.cs - Started up new client thread to handle incoming request");
98 cirpack = initialcirpack;
99 userEP = remoteEP;
100
101 this.startpos = m_authenticateSessionsHandler.GetPosition(initialcirpack.CircuitCode.Code);
102
103 PacketQueue = new BlockingQueue<QueItem>();
104
105 this.UploadAssets = new AgentAssetUpload(this, m_assetCache, m_inventoryCache);
106 AckTimer = new Timer(500);
107 AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed);
108 AckTimer.Start();
109
110 this.RegisterLocalPacketHandlers();
111
112 ClientThread = new Thread(new ThreadStart(AuthUser));
113 ClientThread.IsBackground = true;
114 ClientThread.Start();
115 }
116
117 # region Client Methods
118
119 public void KillClient()
120 {
121 clientPingTimer.Stop();
122 this.m_inventoryCache.ClientLeaving(this.AgentID, null);
123 m_world.RemoveClient(this.AgentId);
124
125 m_clientThreads.Remove(this.CircuitCode);
126 m_networkServer.RemoveClientCircuit(this.CircuitCode);
127 this.ClientThread.Abort();
128 }
129 #endregion
130
131 # region Packet Handling
132 public static bool AddPacketHandler(PacketType packetType, PacketMethod handler)
133 {
134 bool result = false;
135 lock (PacketHandlers)
136 {
137 if (!PacketHandlers.ContainsKey(packetType))
138 {
139 PacketHandlers.Add(packetType, handler);
140 result = true;
141 }
142 }
143 return result;
144 }
145
146 public bool AddLocalPacketHandler(PacketType packetType, PacketMethod handler)
147 {
148 bool result = false;
149 lock (m_packetHandlers)
150 {
151 if (!m_packetHandlers.ContainsKey(packetType))
152 {
153 m_packetHandlers.Add(packetType, handler);
154 result = true;
155 }
156 }
157 return result;
158 }
159
160 protected virtual bool ProcessPacketMethod(Packet packet)
161 {
162 bool result = false;
163 bool found = false;
164 PacketMethod method;
165 if (m_packetHandlers.TryGetValue(packet.Type, out method))
166 {
167 //there is a local handler for this packet type
168 result = method(this, packet);
169 }
170 else
171 {
172 //there is not a local handler so see if there is a Global handler
173 lock (PacketHandlers)
174 {
175 found = PacketHandlers.TryGetValue(packet.Type, out method);
176 }
177 if (found)
178 {
179 result = method(this, packet);
180 }
181 }
182 return result;
183 }
184
185 protected virtual void ClientLoop()
186 {
187 MainLog.Instance.Verbose( "OpenSimClient.cs:ClientLoop() - Entered loop");
188 while (true)
189 {
190 QueItem nextPacket = PacketQueue.Dequeue();
191 if (nextPacket.Incoming)
192 {
193 //is a incoming packet
194 if (nextPacket.Packet.Type != PacketType.AgentUpdate) {
195 packetsReceived++;
196 }
197 ProcessInPacket(nextPacket.Packet);
198 }
199 else
200 {
201 //is a out going packet
202 ProcessOutPacket(nextPacket.Packet);
203 }
204 }
205 }
206 # endregion
207
208 protected void CheckClientConnectivity(object sender, ElapsedEventArgs e)
209 {
210 if (packetsReceived == lastPacketsReceived) {
211 probesWithNoIngressPackets++;
212 if (probesWithNoIngressPackets > 30) {
213 this.KillClient();
214 } else {
215 // this will normally trigger at least one packet (ping response)
216 SendStartPingCheck(0);
217 }
218 } else {
219 // Something received in the meantime - we can reset the counters
220 probesWithNoIngressPackets = 0;
221 lastPacketsReceived = packetsReceived;
222 }
223 }
224
225 # region Setup
226
227 protected virtual void InitNewClient()
228 {
229 clientPingTimer = new Timer(1000);
230 clientPingTimer.Elapsed += new ElapsedEventHandler(CheckClientConnectivity);
231 clientPingTimer.Enabled = true;
232
233 MainLog.Instance.Verbose( "OpenSimClient.cs:InitNewClient() - Adding viewer agent to world");
234 this.m_world.AddNewClient(this, false);
235 }
236
237 protected virtual void AuthUser()
238 {
239 // AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
240 AuthenticateResponse sessionInfo = this.m_authenticateSessionsHandler.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
241 if (!sessionInfo.Authorised)
242 {
243 //session/circuit not authorised
244 MainLog.Instance.Notice("OpenSimClient.cs:AuthUser() - New user request denied to " + userEP.ToString());
245 ClientThread.Abort();
246 }
247 else
248 {
249 MainLog.Instance.Notice("OpenSimClient.cs:AuthUser() - Got authenticated connection from " + userEP.ToString());
250 //session is authorised
251 this.AgentID = cirpack.CircuitCode.ID;
252 this.SessionID = cirpack.CircuitCode.SessionID;
253 this.CircuitCode = cirpack.CircuitCode.Code;
254 this.firstName = sessionInfo.LoginInfo.First;
255 this.lastName = sessionInfo.LoginInfo.Last;
256
257 if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero)
258 {
259 this.SecureSessionID = sessionInfo.LoginInfo.SecureSession;
260 }
261 InitNewClient();
262
263 ClientLoop();
264 }
265 }
266 # endregion
267
268
269 protected override void KillThread()
270 {
271 this.ClientThread.Abort();
272 }
273
274 #region Inventory Creation
275 private void SetupInventory(AuthenticateResponse sessionInfo)
276 {
277
278 }
279 private AgentInventory CreateInventory(LLUUID baseFolder)
280 {
281 AgentInventory inventory = null;
282
283 return inventory;
284 }
285
286 private void CreateInventoryItem(CreateInventoryItemPacket packet)
287 {
288
289 }
290 #endregion
291
292 }
293}
diff --git a/OpenSim/Region/ClientStack/ClientViewBase.cs b/OpenSim/Region/ClientStack/ClientViewBase.cs
new file mode 100644
index 0000000..048f4df
--- /dev/null
+++ b/OpenSim/Region/ClientStack/ClientViewBase.cs
@@ -0,0 +1,326 @@
1
2/*
3* Copyright (c) Contributors, http://www.openmetaverse.org/
4* See CONTRIBUTORS.TXT for a full list of copyright holders.
5*
6* Redistribution and use in source and binary forms, with or without
7* modification, are permitted provided that the following conditions are met:
8* * Redistributions of source code must retain the above copyright
9* notice, this list of conditions and the following disclaimer.
10* * Redistributions in binary form must reproduce the above copyright
11* notice, this list of conditions and the following disclaimer in the
12* documentation and/or other materials provided with the distribution.
13* * Neither the name of the OpenSim Project nor the
14* names of its contributors may be used to endorse or promote products
15* derived from this software without specific prior written permission.
16*
17* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
18* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
21* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*
28*/
29using System;
30using System.Collections.Generic;
31using System.Net;
32using System.Net.Sockets;
33using System.Timers;
34using libsecondlife;
35using libsecondlife.Packets;
36using OpenSim.Framework.Console;
37using OpenSim.Framework.Utilities;
38
39namespace OpenSim.Region.ClientStack
40{
41 public class ClientViewBase
42 {
43 protected BlockingQueue<QueItem> PacketQueue;
44 protected Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>();
45 protected Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>();
46
47 protected Timer AckTimer;
48 protected uint Sequence = 0;
49 protected object SequenceLock = new object();
50 protected const int MAX_APPENDED_ACKS = 10;
51 protected const int RESEND_TIMEOUT = 4000;
52 protected const int MAX_SEQUENCE = 0xFFFFFF;
53
54 public uint CircuitCode;
55 public EndPoint userEP;
56
57 protected PacketServer m_networkServer;
58
59 public ClientViewBase()
60 {
61
62 }
63
64 protected virtual void ProcessInPacket(Packet Pack)
65 {
66
67 }
68
69 protected virtual void ProcessOutPacket(Packet Pack)
70 {
71 // Keep track of when this packet was sent out
72 Pack.TickCount = Environment.TickCount;
73
74 Console.WriteLine(CircuitCode + ":OUT: " + Pack.Type.ToString());
75
76 if (!Pack.Header.Resent)
77 {
78 // Set the sequence number
79 lock (SequenceLock)
80 {
81 if (Sequence >= MAX_SEQUENCE)
82 Sequence = 1;
83 else
84 Sequence++;
85 Pack.Header.Sequence = Sequence;
86 }
87
88 if (Pack.Header.Reliable) //DIRTY HACK
89 {
90 lock (NeedAck)
91 {
92 if (!NeedAck.ContainsKey(Pack.Header.Sequence))
93 {
94 try
95 {
96 NeedAck.Add(Pack.Header.Sequence, Pack);
97 }
98 catch (Exception e) // HACKY
99 {
100 e.ToString();
101 // Ignore
102 // Seems to throw a exception here occasionally
103 // of 'duplicate key' despite being locked.
104 // !?!?!?
105 }
106 }
107 else
108 {
109 // Client.Log("Attempted to add a duplicate sequence number (" +
110 // packet.Header.Sequence + ") to the NeedAck dictionary for packet type " +
111 // packet.Type.ToString(), Helpers.LogLevel.Warning);
112 }
113 }
114
115 // Don't append ACKs to resent packets, in case that's what was causing the
116 // delivery to fail
117 if (!Pack.Header.Resent)
118 {
119 // Append any ACKs that need to be sent out to this packet
120 lock (PendingAcks)
121 {
122 if (PendingAcks.Count > 0 && PendingAcks.Count < MAX_APPENDED_ACKS &&
123 Pack.Type != PacketType.PacketAck &&
124 Pack.Type != PacketType.LogoutRequest)
125 {
126 Pack.Header.AckList = new uint[PendingAcks.Count];
127 int i = 0;
128
129 foreach (uint ack in PendingAcks.Values)
130 {
131 Pack.Header.AckList[i] = ack;
132 i++;
133 }
134
135 PendingAcks.Clear();
136 Pack.Header.AppendedAcks = true;
137 }
138 }
139 }
140 }
141 }
142
143 byte[] ZeroOutBuffer = new byte[4096];
144 byte[] sendbuffer;
145 sendbuffer = Pack.ToBytes();
146
147 try
148 {
149 if (Pack.Header.Zerocoded)
150 {
151 int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
152 m_networkServer.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
153 }
154 else
155 {
156 m_networkServer.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
157 }
158 }
159 catch (Exception)
160 {
161 MainLog.Instance.Warn("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread");
162 this.KillThread();
163 }
164
165 }
166
167 public virtual void InPacket(Packet NewPack)
168 {
169 // Handle appended ACKs
170 if (NewPack.Header.AppendedAcks)
171 {
172 lock (NeedAck)
173 {
174 foreach (uint ack in NewPack.Header.AckList)
175 {
176 NeedAck.Remove(ack);
177 }
178 }
179 }
180
181 // Handle PacketAck packets
182 if (NewPack.Type == PacketType.PacketAck)
183 {
184 PacketAckPacket ackPacket = (PacketAckPacket)NewPack;
185
186 lock (NeedAck)
187 {
188 foreach (PacketAckPacket.PacketsBlock block in ackPacket.Packets)
189 {
190 NeedAck.Remove(block.ID);
191 }
192 }
193 }
194 else if ((NewPack.Type == PacketType.StartPingCheck))
195 {
196 //reply to pingcheck
197 StartPingCheckPacket startPing = (StartPingCheckPacket)NewPack;
198 CompletePingCheckPacket endPing = new CompletePingCheckPacket();
199 endPing.PingID.PingID = startPing.PingID.PingID;
200 OutPacket(endPing);
201 }
202 else
203 {
204 QueItem item = new QueItem();
205 item.Packet = NewPack;
206 item.Incoming = true;
207 this.PacketQueue.Enqueue(item);
208 }
209
210 }
211
212 public virtual void OutPacket(Packet NewPack)
213 {
214 QueItem item = new QueItem();
215 item.Packet = NewPack;
216 item.Incoming = false;
217 this.PacketQueue.Enqueue(item);
218 }
219
220 # region Low Level Packet Methods
221
222 protected void ack_pack(Packet Pack)
223 {
224 if (Pack.Header.Reliable)
225 {
226 PacketAckPacket ack_it = new PacketAckPacket();
227 ack_it.Packets = new PacketAckPacket.PacketsBlock[1];
228 ack_it.Packets[0] = new PacketAckPacket.PacketsBlock();
229 ack_it.Packets[0].ID = Pack.Header.Sequence;
230 ack_it.Header.Reliable = false;
231
232 OutPacket(ack_it);
233
234 }
235 /*
236 if (Pack.Header.Reliable)
237 {
238 lock (PendingAcks)
239 {
240 uint sequence = (uint)Pack.Header.Sequence;
241 if (!PendingAcks.ContainsKey(sequence)) { PendingAcks[sequence] = sequence; }
242 }
243 }*/
244 }
245
246 protected void ResendUnacked()
247 {
248 int now = Environment.TickCount;
249
250 lock (NeedAck)
251 {
252 foreach (Packet packet in NeedAck.Values)
253 {
254 if ((now - packet.TickCount > RESEND_TIMEOUT) && (!packet.Header.Resent))
255 {
256 MainLog.Instance.Verbose( "Resending " + packet.Type.ToString() + " packet, " +
257 (now - packet.TickCount) + "ms have passed");
258
259 packet.Header.Resent = true;
260 OutPacket(packet);
261 }
262 }
263 }
264 }
265
266 protected void SendAcks()
267 {
268 lock (PendingAcks)
269 {
270 if (PendingAcks.Count > 0)
271 {
272 if (PendingAcks.Count > 250)
273 {
274 // FIXME: Handle the odd case where we have too many pending ACKs queued up
275 MainLog.Instance.Verbose( "Too many ACKs queued up!");
276 return;
277 }
278
279 //OpenSim.Framework.Console.MainLog.Instance.WriteLine("Sending PacketAck");
280
281
282 int i = 0;
283 PacketAckPacket acks = new PacketAckPacket();
284 acks.Packets = new PacketAckPacket.PacketsBlock[PendingAcks.Count];
285
286 foreach (uint ack in PendingAcks.Values)
287 {
288 acks.Packets[i] = new PacketAckPacket.PacketsBlock();
289 acks.Packets[i].ID = ack;
290 i++;
291 }
292
293 acks.Header.Reliable = false;
294 OutPacket(acks);
295
296 PendingAcks.Clear();
297 }
298 }
299 }
300
301 protected void AckTimer_Elapsed(object sender, ElapsedEventArgs ea)
302 {
303 SendAcks();
304 ResendUnacked();
305 }
306 #endregion
307
308 protected virtual void KillThread()
309 {
310
311 }
312
313 #region Nested Classes
314
315 public class QueItem
316 {
317 public QueItem()
318 {
319 }
320
321 public Packet Packet;
322 public bool Incoming;
323 }
324 #endregion
325 }
326}
diff --git a/OpenSim/Region/ClientStack/PacketServer.cs b/OpenSim/Region/ClientStack/PacketServer.cs
new file mode 100644
index 0000000..a88c682
--- /dev/null
+++ b/OpenSim/Region/ClientStack/PacketServer.cs
@@ -0,0 +1,184 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using System.Net;
30using System.Net.Sockets;
31using libsecondlife.Packets;
32using OpenSim.Assets;
33using OpenSim.Framework;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Region.Caches;
36
37namespace OpenSim.Region.ClientStack
38{
39 public class PacketServer
40 {
41 private ClientStackNetworkHandler _networkHandler;
42 private IWorld _localWorld;
43 public Dictionary<uint, ClientView> ClientThreads = new Dictionary<uint, ClientView>();
44 private ClientManager m_clientManager = new ClientManager();
45 public ClientManager ClientManager
46 {
47 get { return m_clientManager; }
48 }
49
50 public PacketServer(ClientStackNetworkHandler networkHandler)
51 {
52 _networkHandler = networkHandler;
53 _networkHandler.RegisterPacketServer(this);
54 }
55
56 public IWorld LocalWorld
57 {
58 set
59 {
60 this._localWorld = value;
61 }
62 }
63
64 /// <summary>
65 ///
66 /// </summary>
67 /// <param name="circuitCode"></param>
68 /// <param name="packet"></param>
69 public virtual void ClientInPacket(uint circuitCode, Packet packet)
70 {
71 if (this.ClientThreads.ContainsKey(circuitCode))
72 {
73 ClientThreads[circuitCode].InPacket(packet);
74 }
75 }
76
77 /// <summary>
78 ///
79 /// </summary>
80 /// <param name="circuitCode"></param>
81 /// <returns></returns>
82 public virtual bool AddNewCircuitCodeClient(uint circuitCode)
83 {
84 return false;
85 }
86
87 /// <summary>
88 ///
89 /// </summary>
90 /// <param name="packet"></param>
91 public virtual void SendPacketToAllClients(Packet packet)
92 {
93
94 }
95
96 /// <summary>
97 ///
98 /// </summary>
99 /// <param name="packet"></param>
100 /// <param name="simClient"></param>
101 public virtual void SendPacketToAllExcept(Packet packet, ClientView simClient)
102 {
103
104 }
105
106 /// <summary>
107 ///
108 /// </summary>
109 /// <param name="packetType"></param>
110 /// <param name="handler"></param>
111 public virtual void AddClientPacketHandler(PacketType packetType, PacketMethod handler)
112 {
113
114 }
115
116 /// <summary>
117 ///
118 /// </summary>
119 public virtual void RegisterClientPacketHandlers()
120 {
121
122 }
123
124 /// <summary>
125 ///
126 /// </summary>
127 /// <param name="remoteEP"></param>
128 /// <param name="initialcirpack"></param>
129 /// <param name="clientThreads"></param>
130 /// <param name="world"></param>
131 /// <param name="assetCache"></param>
132 /// <param name="packServer"></param>
133 /// <param name="inventoryCache"></param>
134 /// <param name="authenSessions"></param>
135 /// <returns></returns>
136 protected virtual ClientView CreateNewClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, Dictionary<uint, ClientView> clientThreads, IWorld world, AssetCache assetCache, PacketServer packServer, InventoryCache inventoryCache, AuthenticateSessionsBase authenSessions)
137 {
138 return new ClientView(remoteEP, initialcirpack, clientThreads, world, assetCache, packServer, inventoryCache, authenSessions );
139 }
140
141 /// <summary>
142 ///
143 /// </summary>
144 /// <param name="epSender"></param>
145 /// <param name="useCircuit"></param>
146 /// <param name="assetCache"></param>
147 /// <param name="inventoryCache"></param>
148 /// <param name="authenticateSessionsClass"></param>
149 /// <returns></returns>
150 public virtual bool AddNewClient(EndPoint epSender, UseCircuitCodePacket useCircuit, AssetCache assetCache, InventoryCache inventoryCache, AuthenticateSessionsBase authenticateSessionsClass)
151 {
152 ClientView newuser =
153 CreateNewClient(epSender, useCircuit, ClientThreads, _localWorld, assetCache, this, inventoryCache,
154 authenticateSessionsClass);
155
156 this.ClientThreads.Add(useCircuit.CircuitCode.Code, newuser);
157 this.m_clientManager.Add(useCircuit.CircuitCode.Code, (IClientAPI)newuser);
158
159 return true;
160 }
161
162 /// <summary>
163 ///
164 /// </summary>
165 /// <param name="buffer"></param>
166 /// <param name="size"></param>
167 /// <param name="flags"></param>
168 /// <param name="circuitcode"></param>
169 public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)
170 {
171 this._networkHandler.SendPacketTo(buffer, size, flags, circuitcode);
172 }
173
174 /// <summary>
175 ///
176 /// </summary>
177 /// <param name="circuitcode"></param>
178 public virtual void RemoveClientCircuit(uint circuitcode)
179 {
180 this._networkHandler.RemoveClientCircuit(circuitcode);
181 this.m_clientManager.Remove(circuitcode);
182 }
183 }
184}
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
new file mode 100644
index 0000000..1e99c71
--- /dev/null
+++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
@@ -0,0 +1,117 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Net;
31using OpenSim.Assets;
32using OpenSim.Framework;
33using OpenSim.Framework.Console;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Servers;
36using OpenSim.Framework.Types;
37using OpenSim.Physics.Manager;
38using OpenSim.Region.Caches;
39
40namespace OpenSim.Region.ClientStack
41{
42 public class RegionApplicationBase
43 {
44 protected IGenericConfig localConfig;
45 protected PhysicsManager physManager;
46 protected AssetCache AssetCache;
47 protected InventoryCache InventoryCache;
48 protected Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>();
49 protected DateTime startuptime;
50 protected NetworkServersInfo serversData;
51
52 public string m_physicsEngine;
53 public bool m_sandbox = false;
54 public bool m_loginserver;
55 public bool user_accounts = false;
56 public bool gridLocalAsset = false;
57 protected bool configFileSetup = false;
58 public string m_config;
59
60 protected List<UDPServer> m_udpServer = new List<UDPServer>();
61 protected List<RegionInfo> regionData = new List<RegionInfo>();
62 protected List<IWorld> m_localWorld = new List<IWorld>();
63 protected BaseHttpServer httpServer;
64 protected List<AuthenticateSessionsBase> AuthenticateSessionsHandler = new List<AuthenticateSessionsBase>();
65
66 protected LogBase m_log;
67
68 public RegionApplicationBase()
69 {
70
71 }
72
73 public RegionApplicationBase(bool sandBoxMode, bool startLoginServer, string physicsEngine, bool useConfigFile, bool silent, string configFile)
74 {
75 this.configFileSetup = useConfigFile;
76 m_sandbox = sandBoxMode;
77 m_loginserver = startLoginServer;
78 m_physicsEngine = physicsEngine;
79 m_config = configFile;
80 }
81
82 /*protected World m_localWorld;
83 public World LocalWorld
84 {
85 get { return m_localWorld; }
86 }*/
87
88 /// <summary>
89 /// Performs initialisation of the world, such as loading configuration from disk.
90 /// </summary>
91 public virtual void StartUp()
92 {
93 }
94
95 protected virtual void SetupLocalGridServers()
96 {
97 }
98
99 protected virtual void SetupRemoteGridServers()
100 {
101
102 }
103
104 protected virtual void SetupWorld()
105 {
106 }
107
108 protected virtual void SetupHttpListener()
109 {
110 }
111
112 protected virtual void ConnectToRemoteGridServer()
113 {
114
115 }
116 }
117}
diff --git a/OpenSim/Region/ClientStack/UDPServer.cs b/OpenSim/Region/ClientStack/UDPServer.cs
new file mode 100644
index 0000000..6eea524
--- /dev/null
+++ b/OpenSim/Region/ClientStack/UDPServer.cs
@@ -0,0 +1,196 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Net;
31using System.Net.Sockets;
32using libsecondlife.Packets;
33using OpenSim.Assets;
34using OpenSim.Framework;
35using OpenSim.Framework.Console;
36using OpenSim.Framework.Interfaces;
37using OpenSim.Region.Caches;
38
39namespace OpenSim.Region.ClientStack
40{
41
42 public class UDPServer : ClientStackNetworkHandler
43 {
44 protected Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>();
45 public Socket Server;
46 protected IPEndPoint ServerIncoming;
47 protected byte[] RecvBuffer = new byte[4096];
48 protected byte[] ZeroBuffer = new byte[8192];
49 protected IPEndPoint ipeSender;
50 protected EndPoint epSender;
51 protected AsyncCallback ReceivedData;
52 protected PacketServer _packetServer;
53
54 protected int listenPort;
55 protected IWorld m_localWorld;
56 protected AssetCache m_assetCache;
57 protected InventoryCache m_inventoryCache;
58 protected LogBase m_log;
59 protected AuthenticateSessionsBase m_authenticateSessionsClass;
60
61 public PacketServer PacketServer
62 {
63 get
64 {
65 return _packetServer;
66 }
67 set
68 {
69 _packetServer = value;
70 }
71 }
72
73 public IWorld LocalWorld
74 {
75 set
76 {
77 this.m_localWorld = value;
78 this._packetServer.LocalWorld = this.m_localWorld;
79 }
80 }
81
82 public UDPServer()
83 {
84 }
85
86 public UDPServer(int port, AssetCache assetCache, InventoryCache inventoryCache, LogBase console, AuthenticateSessionsBase authenticateClass)
87 {
88 listenPort = port;
89 this.m_assetCache = assetCache;
90 this.m_inventoryCache = inventoryCache;
91 this.m_log = console;
92 this.m_authenticateSessionsClass = authenticateClass;
93 this.CreatePacketServer();
94
95 }
96
97 protected virtual void CreatePacketServer()
98 {
99 PacketServer packetServer = new PacketServer(this);
100 }
101
102 protected virtual void OnReceivedData(IAsyncResult result)
103 {
104 ipeSender = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
105 epSender = (EndPoint)ipeSender;
106 Packet packet = null;
107 int numBytes = Server.EndReceiveFrom(result, ref epSender);
108 int packetEnd = numBytes - 1;
109
110 packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer);
111
112 // do we already have a circuit for this endpoint
113 if (this.clientCircuits.ContainsKey(epSender))
114 {
115 //if so then send packet to the packetserver
116 this._packetServer.ClientInPacket(this.clientCircuits[epSender], packet);
117 }
118 else if (packet.Type == PacketType.UseCircuitCode)
119 {
120 // new client
121 this.AddNewClient(packet);
122 }
123 else
124 { // invalid client
125 m_log.Warn("UDPServer.cs:OnReceivedData() - WARNING: Got a packet from an invalid client - " + epSender.ToString());
126 }
127
128 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
129 }
130
131 protected virtual void AddNewClient(Packet packet)
132 {
133 UseCircuitCodePacket useCircuit = (UseCircuitCodePacket)packet;
134 this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code);
135
136 this.PacketServer.AddNewClient(epSender, useCircuit, m_assetCache, m_inventoryCache, m_authenticateSessionsClass);
137 }
138
139 public void ServerListener()
140 {
141 m_log.Status("UDPServer.cs:ServerListener() - Opening UDP socket on " + listenPort);
142
143 ServerIncoming = new IPEndPoint(IPAddress.Parse("0.0.0.0"), listenPort);
144 Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
145 Server.Bind(ServerIncoming);
146
147 m_log.Verbose("UDPServer.cs:ServerListener() - UDP socket bound, getting ready to listen");
148
149 ipeSender = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
150 epSender = (EndPoint)ipeSender;
151 ReceivedData = new AsyncCallback(this.OnReceivedData);
152 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
153
154 m_log.Verbose("UDPServer.cs:ServerListener() - Listening...");
155
156 }
157
158 public virtual void RegisterPacketServer(PacketServer server)
159 {
160 this._packetServer = server;
161 }
162
163 public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)//EndPoint packetSender)
164 {
165 // find the endpoint for this circuit
166 EndPoint sendto = null;
167 foreach (KeyValuePair<EndPoint, uint> p in this.clientCircuits)
168 {
169 if (p.Value == circuitcode)
170 {
171 sendto = p.Key;
172 break;
173 }
174 }
175 if (sendto != null)
176 {
177 //we found the endpoint so send the packet to it
178 this.Server.SendTo(buffer, size, flags, sendto);
179 }
180 }
181
182 public virtual void RemoveClientCircuit(uint circuitcode)
183 {
184 foreach (KeyValuePair<EndPoint, uint> p in this.clientCircuits)
185 {
186 if (p.Value == circuitcode)
187 {
188 this.clientCircuits.Remove(p.Key);
189 break;
190 }
191 }
192 }
193
194
195 }
196} \ No newline at end of file
diff --git a/OpenSim/Region/Communications/Local/CommunicationsLocal.cs b/OpenSim/Region/Communications/Local/CommunicationsLocal.cs
new file mode 100644
index 0000000..a047843
--- /dev/null
+++ b/OpenSim/Region/Communications/Local/CommunicationsLocal.cs
@@ -0,0 +1,54 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 OpenSim.Framework.Communications;
29using OpenSim.Framework.Types;
30using OpenSim.Framework.Servers;
31
32namespace OpenSim.Region.Communications.Local
33{
34 public class CommunicationsLocal : CommunicationsManager
35 {
36 public LocalBackEndServices SandBoxServices = new LocalBackEndServices();
37 public LocalUserServices UserServices;
38
39 public CommunicationsLocal(NetworkServersInfo serversInfo, BaseHttpServer httpServer )
40 : base(serversInfo, httpServer)
41 {
42 UserServices = new LocalUserServices(this, serversInfo);
43 UserServices.AddPlugin("OpenSim.Framework.Data.DB4o.dll");
44 UserServer = UserServices;
45 GridServer = SandBoxServices;
46 InterRegion = SandBoxServices;
47 }
48
49 internal void InformRegionOfLogin(ulong regionHandle, Login login)
50 {
51 this.SandBoxServices.AddNewSession(regionHandle, login);
52 }
53 }
54}
diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
new file mode 100644
index 0000000..d0cd991
--- /dev/null
+++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
@@ -0,0 +1,206 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using libsecondlife;
30using OpenSim.Framework;
31using OpenSim.Framework.Communications;
32using OpenSim.Framework.Types;
33
34namespace OpenSim.Region.Communications.Local
35{
36
37 public class LocalBackEndServices : IGridServices, IInterRegionCommunications
38 {
39 protected Dictionary<ulong, RegionInfo> regions = new Dictionary<ulong, RegionInfo>();
40 protected Dictionary<ulong, RegionCommsListener> regionHosts = new Dictionary<ulong, RegionCommsListener>();
41
42 public LocalBackEndServices()
43 {
44
45 }
46
47 /// <summary>
48 /// Register a region method with the BackEnd Services.
49 /// </summary>
50 /// <param name="regionInfo"></param>
51 /// <returns></returns>
52 public RegionCommsListener RegisterRegion(RegionInfo regionInfo)
53 {
54 //Console.WriteLine("CommsManager - Region " + regionInfo.RegionHandle + " , " + regionInfo.RegionLocX + " , "+ regionInfo.RegionLocY +" is registering");
55 if (!this.regions.ContainsKey((uint)regionInfo.RegionHandle))
56 {
57 //Console.WriteLine("CommsManager - Adding Region " + regionInfo.RegionHandle );
58 this.regions.Add(regionInfo.RegionHandle, regionInfo);
59 RegionCommsListener regionHost = new RegionCommsListener();
60 this.regionHosts.Add(regionInfo.RegionHandle, regionHost);
61
62 return regionHost;
63 }
64
65 //already in our list of regions so for now lets return null
66 return null;
67 }
68
69 /// <summary>
70 /// </summary>
71 /// <param name="regionInfo"></param>
72 /// <returns></returns>
73 public List<RegionInfo> RequestNeighbours(RegionInfo regionInfo)
74 {
75 // Console.WriteLine("Finding Neighbours to " + regionInfo.RegionHandle);
76 List<RegionInfo> neighbours = new List<RegionInfo>();
77
78 foreach (RegionInfo reg in this.regions.Values)
79 {
80 // Console.WriteLine("CommsManager- RequestNeighbours() checking region " + reg.RegionLocX + " , "+ reg.RegionLocY);
81 if (reg.RegionHandle != regionInfo.RegionHandle)
82 {
83 //Console.WriteLine("CommsManager- RequestNeighbours() - found a different region in list, checking location");
84 if ((reg.RegionLocX > (regionInfo.RegionLocX - 2)) && (reg.RegionLocX < (regionInfo.RegionLocX + 2)))
85 {
86 if ((reg.RegionLocY > (regionInfo.RegionLocY - 2)) && (reg.RegionLocY < (regionInfo.RegionLocY + 2)))
87 {
88 neighbours.Add(reg);
89 }
90 }
91 }
92 }
93 return neighbours;
94 }
95
96 /// <summary>
97 ///
98 /// </summary>
99 /// <param name="regionHandle"></param>
100 /// <returns></returns>
101 public RegionInfo RequestNeighbourInfo(ulong regionHandle)
102 {
103 if (this.regions.ContainsKey(regionHandle))
104 {
105 return this.regions[regionHandle];
106 }
107 return null;
108 }
109
110 /// <summary>
111 ///
112 /// </summary>
113 /// <param name="minX"></param>
114 /// <param name="minY"></param>
115 /// <param name="maxX"></param>
116 /// <param name="maxY"></param>
117 /// <returns></returns>
118 public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY)
119 {
120 List<MapBlockData> mapBlocks = new List<MapBlockData>();
121 foreach(RegionInfo regInfo in this.regions.Values)
122 {
123 if (((regInfo.RegionLocX >= minX) && (regInfo.RegionLocX <= maxX)) && ((regInfo.RegionLocY >= minY) && (regInfo.RegionLocY <= maxY)))
124 {
125 MapBlockData map = new MapBlockData();
126 map.Name = regInfo.RegionName;
127 map.X = (ushort)regInfo.RegionLocX;
128 map.Y = (ushort)regInfo.RegionLocY;
129 map.WaterHeight =(byte) regInfo.estateSettings.waterHeight;
130 map.MapImageId = regInfo.estateSettings.terrainImageID; //new LLUUID("00000000-0000-0000-9999-000000000007");
131 map.Agents = 1;
132 map.RegionFlags = 72458694;
133 map.Access = 13;
134 mapBlocks.Add(map);
135 }
136 }
137 return mapBlocks;
138 }
139
140 /// <summary>
141 /// </summary>
142 /// <param name="regionHandle"></param>
143 /// <param name="agentData"></param>
144 /// <returns></returns>
145 public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData) //should change from agentCircuitData
146 {
147 //Console.WriteLine("CommsManager- Trying to Inform a region to expect child agent");
148 if (this.regionHosts.ContainsKey(regionHandle))
149 {
150 // Console.WriteLine("CommsManager- Informing a region to expect child agent");
151 this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agentData);
152 return true;
153 }
154 return false;
155 }
156
157 /// <summary>
158 ///
159 /// </summary>
160 /// <param name="regionHandle"></param>
161 /// <param name="agentID"></param>
162 /// <param name="position"></param>
163 /// <returns></returns>
164 public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position)
165 {
166 if (this.regionHosts.ContainsKey(regionHandle))
167 {
168 // Console.WriteLine("CommsManager- Informing a region to expect avatar crossing");
169 this.regionHosts[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position);
170 return true;
171 }
172 return false;
173 }
174
175 /// <summary>
176 /// Is a Sandbox mode method, used by the local Login server to inform a region of a connection user/session
177 /// </summary>
178 /// <param name="regionHandle"></param>
179 /// <param name="loginData"></param>
180 /// <returns></returns>
181 public bool AddNewSession(ulong regionHandle, Login loginData)
182 {
183 AgentCircuitData agent = new AgentCircuitData();
184 agent.AgentID = loginData.Agent;
185 agent.firstname = loginData.First;
186 agent.lastname = loginData.Last;
187 agent.SessionID = loginData.Session;
188 agent.SecureSessionID = loginData.SecureSession;
189 agent.circuitcode = loginData.CircuitCode;
190 agent.BaseFolder = loginData.BaseFolder;
191 agent.InventoryFolder = loginData.InventoryFolder;
192 agent.startpos = new LLVector3(128, 128, 70);
193 agent.CapsPath = loginData.CapsPath;
194
195 if (this.regionHosts.ContainsKey(regionHandle))
196 {
197 this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agent);
198 return true;
199 }
200
201 // region not found
202 return false;
203 }
204 }
205}
206
diff --git a/OpenSim/Region/Communications/Local/LocalUserServices.cs b/OpenSim/Region/Communications/Local/LocalUserServices.cs
new file mode 100644
index 0000000..592b36c
--- /dev/null
+++ b/OpenSim/Region/Communications/Local/LocalUserServices.cs
@@ -0,0 +1,142 @@
1using System;
2using libsecondlife;
3using OpenSim.Framework.Communications;
4using OpenSim.Framework.Data;
5using OpenSim.Framework.Types;
6using OpenSim.Framework.UserManagement;
7using OpenSim.Framework.Utilities;
8
9namespace OpenSim.Region.Communications.Local
10{
11 public class LocalUserServices : UserManagerBase, IUserServices
12 {
13 private CommunicationsLocal m_Parent;
14
15 private NetworkServersInfo serversInfo;
16 private uint defaultHomeX ;
17 private uint defaultHomeY;
18 public LocalUserServices(CommunicationsLocal parent, NetworkServersInfo serversData)
19 {
20 m_Parent = parent;
21 this.serversInfo = serversData;
22 defaultHomeX = this.serversInfo.DefaultHomeLocX;
23 defaultHomeY = this.serversInfo.DefaultHomeLocY;
24 }
25
26 public UserProfileData GetUserProfile(string firstName, string lastName)
27 {
28 return GetUserProfile(firstName + " " + lastName);
29 }
30
31 public UserProfileData GetUserProfile(string name)
32 {
33 return this.getUserProfile(name);
34 }
35
36 public UserProfileData GetUserProfile(LLUUID avatarID)
37 {
38 return this.getUserProfile(avatarID);
39 }
40
41 /// <summary>
42 ///
43 /// </summary>
44 /// <returns></returns>
45 public override string GetMessage()
46 {
47 return "Welcome to OpenSim";
48 }
49
50 public override UserProfileData GetTheUser(string firstname, string lastname)
51 {
52 UserProfileData profile = getUserProfile(firstname, lastname);
53 if (profile != null)
54 {
55
56 return profile;
57 }
58
59 //no current user account so make one
60 Console.WriteLine("No User account found so creating a new one ");
61 this.AddUserProfile(firstname, lastname, "test", defaultHomeX, defaultHomeY);
62
63 profile = getUserProfile(firstname, lastname);
64
65 return profile;
66 }
67
68 public override bool AuthenticateUser(UserProfileData profile, string password)
69 {
70 //for now we will accept any password in sandbox mode
71 Console.WriteLine("authorising user");
72 return true;
73 }
74
75 public override void CustomiseResponse(LoginResponse response, UserProfileData theUser)
76 {
77 ulong currentRegion = theUser.currentAgent.currentHandle;
78 RegionInfo reg = m_Parent.GridServer.RequestNeighbourInfo(currentRegion);
79
80 if (reg != null)
81 {
82 response.Home = "{'region_handle':[r" + (reg.RegionLocX * 256).ToString() + ",r" + (reg.RegionLocY * 256).ToString() + "], " +
83 "'position':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "], " +
84 "'look_at':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "]}";
85 string capsPath = Util.GetRandomCapsPath();
86 response.SimAddress = reg.ExternalEndPoint.Address.ToString();
87 response.SimPort = (Int32)reg.ExternalEndPoint.Port;
88 response.RegionX = reg.RegionLocX ;
89 response.RegionY = reg.RegionLocY ;
90
91 //following port needs changing as we don't want a http listener for every region (or do we?)
92 response.SeedCapability = "http://" + reg.ExternalHostName + ":" + this.serversInfo.HttpListenerPort.ToString() + "/CAPS/" + capsPath + "0000/";
93 theUser.currentAgent.currentRegion = reg.SimUUID;
94 theUser.currentAgent.currentHandle = reg.RegionHandle;
95
96 Login _login = new Login();
97 //copy data to login object
98 _login.First = response.Firstname;
99 _login.Last = response.Lastname;
100 _login.Agent = response.AgentID;
101 _login.Session = response.SessionID;
102 _login.SecureSession = response.SecureSessionID;
103 _login.CircuitCode = (uint)response.CircuitCode;
104 _login.CapsPath = capsPath;
105
106 m_Parent.InformRegionOfLogin(currentRegion, _login);
107 }
108 else
109 {
110 Console.WriteLine("not found region " + currentRegion);
111 }
112
113 }
114
115 public UserProfileData SetupMasterUser(string firstName, string lastName)
116 {
117 return SetupMasterUser(firstName, lastName, "");
118 }
119
120 public UserProfileData SetupMasterUser(string firstName, string lastName, string password)
121 {
122 UserProfileData profile = getUserProfile(firstName, lastName);
123 if (profile != null)
124 {
125
126 return profile;
127 }
128
129 Console.WriteLine("Unknown Master User. Sandbox Mode: Creating Account");
130 this.AddUserProfile(firstName, lastName, password, defaultHomeX, defaultHomeY);
131
132 profile = getUserProfile(firstName, lastName);
133
134 if (profile == null)
135 {
136 Console.WriteLine("Unknown Master User after creation attempt. No clue what to do here.");
137 }
138
139 return profile;
140 }
141 }
142}
diff --git a/OpenSim/Region/Communications/Local/Properties/AssemblyInfo.cs b/OpenSim/Region/Communications/Local/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9afb75e
--- /dev/null
+++ b/OpenSim/Region/Communications/Local/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenSim.Region.Communications.Local")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenSim.Region.Communications.Local")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("fb173926-bd0a-4cd0-bb45-185b2f72ddfb")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs b/OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs
new file mode 100644
index 0000000..cc05845
--- /dev/null
+++ b/OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs
@@ -0,0 +1,18 @@
1using OpenSim.Framework.Communications;
2using OpenSim.Framework.Types;
3using OpenSim.Framework.Servers;
4
5namespace OpenSim.Region.Communications.OGS1
6{
7 public class CommunicationsOGS1 : CommunicationsManager
8 {
9
10 public CommunicationsOGS1(NetworkServersInfo serversInfo, BaseHttpServer httpServer ) :base(serversInfo, httpServer)
11 {
12 OGS1GridServices gridInterComms = new OGS1GridServices(serversInfo, httpServer);
13 GridServer = gridInterComms;
14 InterRegion = gridInterComms;
15 UserServer = new OGS1UserServices(this);
16 }
17 }
18}
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
new file mode 100644
index 0000000..66c1739
--- /dev/null
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -0,0 +1,378 @@
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Net;
5using System.Runtime.Remoting;
6using System.Runtime.Remoting.Channels;
7using System.Runtime.Remoting.Channels.Tcp;
8using libsecondlife;
9using Nwc.XmlRpc;
10using OpenSim.Framework;
11using OpenSim.Framework.Communications;
12using OpenSim.Framework.Console;
13using OpenSim.Framework.Servers;
14using OpenSim.Framework.Types;
15
16namespace OpenSim.Region.Communications.OGS1
17{
18 public class OGS1GridServices : IGridServices, IInterRegionCommunications
19 {
20 public Dictionary<ulong, RegionCommsListener> listeners = new Dictionary<ulong, RegionCommsListener>();
21 protected Dictionary<ulong, RegionInfo> regions = new Dictionary<ulong, RegionInfo>();
22
23 public BaseHttpServer httpListener;
24 public NetworkServersInfo serversInfo;
25 public BaseHttpServer httpServer;
26
27 public OGS1GridServices(NetworkServersInfo servers_info, BaseHttpServer httpServe)
28 {
29 serversInfo = servers_info;
30 httpServer = httpServe;
31 httpServer.AddXmlRPCHandler("expect_user", this.ExpectUser);
32 this.StartRemoting();
33 }
34
35 public RegionCommsListener RegisterRegion(RegionInfo regionInfo)
36 {
37 if (!this.regions.ContainsKey((uint)regionInfo.RegionHandle))
38 {
39 this.regions.Add(regionInfo.RegionHandle, regionInfo);
40 }
41
42 Hashtable GridParams = new Hashtable();
43
44
45 // Login / Authentication
46
47 GridParams["authkey"] = serversInfo.GridSendKey;
48 GridParams["UUID"] = regionInfo.SimUUID.ToStringHyphenated();
49 GridParams["sim_ip"] = regionInfo.ExternalHostName;
50 GridParams["sim_port"] = regionInfo.InternalEndPoint.Port.ToString();
51 GridParams["region_locx"] = regionInfo.RegionLocX.ToString();
52 GridParams["region_locy"] = regionInfo.RegionLocY.ToString();
53 GridParams["sim_name"] = regionInfo.RegionName;
54 GridParams["http_port"] = serversInfo.HttpListenerPort.ToString();
55 GridParams["remoting_port"] = serversInfo.RemotingListenerPort.ToString();
56 GridParams["map-image-id"] = regionInfo.estateSettings.terrainImageID.ToStringHyphenated();
57
58 // Package into an XMLRPC Request
59 ArrayList SendParams = new ArrayList();
60 SendParams.Add(GridParams);
61
62 // Send Request
63 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_login", SendParams);
64 XmlRpcResponse GridResp = GridReq.Send(serversInfo.GridURL, 3000);
65 Hashtable GridRespData = (Hashtable)GridResp.Value;
66
67 Hashtable griddatahash = GridRespData;
68
69 // Process Response
70 if (GridRespData.ContainsKey("error"))
71 {
72 string errorstring = (string)GridRespData["error"];
73 MainLog.Instance.Error("Unable to connect to grid: " + errorstring);
74 return null;
75 }
76
77 /* if (!this.listeners.ContainsKey(regionInfo.RegionHandle))
78 {
79 MainLog.Instance.Verbose("OGS1 - Registering new HTTP listener on port " + regionInfo.InternalEndPoint.Port.ToString());
80 // initialised = true;
81 httpListener = new BaseHttpServer( regionInfo.InternalEndPoint.Port );
82 httpListener.AddXmlRPCHandler("expect_user", this.ExpectUser);
83 httpListener.Start();
84 }*/
85
86 // Initialise the background listeners
87 RegionCommsListener regListener = new RegionCommsListener();
88 if (this.listeners.ContainsKey(regionInfo.RegionHandle))
89 {
90 this.listeners.Add(regionInfo.RegionHandle, regListener);
91 }
92 else
93 {
94 listeners[regionInfo.RegionHandle] = regListener;
95 }
96
97 return regListener;
98 }
99
100 public List<RegionInfo> RequestNeighbours(RegionInfo regionInfo)
101 {
102
103 Hashtable respData = MapBlockQuery((int)regionInfo.RegionLocX - 1, (int)regionInfo.RegionLocY - 1, (int)regionInfo.RegionLocX + 1, (int)regionInfo.RegionLocY + 1);
104
105 List<RegionInfo> neighbours = new List<RegionInfo>();
106
107 foreach (ArrayList a in respData.Values)
108 {
109 foreach (Hashtable n in a)
110 {
111 uint regX = Convert.ToUInt32(n["x"]);
112 uint regY = Convert.ToUInt32(n["y"]);
113 if ((regionInfo.RegionLocX != regX) || (regionInfo.RegionLocY != regY))
114 {
115 string internalIpStr = (string)n["sim_ip"];
116 uint port = Convert.ToUInt32(n["sim_port"]);
117 string externalUri = (string)n["sim_uri"];
118
119 IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int)port);
120 string neighbourExternalUri = externalUri;
121 RegionInfo neighbour = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr);
122
123 //OGS1
124 //neighbour.RegionHandle = (ulong)n["regionhandle"]; is now calculated locally
125
126 neighbour.RegionName = (string)n["name"];
127
128 //OGS1+
129 neighbour.SimUUID = (string)n["uuid"];
130
131 neighbours.Add(neighbour);
132 }
133 }
134 }
135
136 return neighbours;
137 }
138
139 public RegionInfo RequestNeighbourInfo(ulong regionHandle)
140 {
141 if (this.regions.ContainsKey(regionHandle))
142 {
143 return this.regions[regionHandle];
144 }
145 //TODO not a region in this instance so ask remote grid server
146
147 Hashtable requestData = new Hashtable();
148 requestData["region_handle"] = regionHandle.ToString();
149 requestData["authkey"] = this.serversInfo.GridSendKey;
150 ArrayList SendParams = new ArrayList();
151 SendParams.Add(requestData);
152 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
153 XmlRpcResponse GridResp = GridReq.Send(this.serversInfo.GridURL, 3000);
154
155 Hashtable responseData = (Hashtable)GridResp.Value;
156
157 if (responseData.ContainsKey("error"))
158 {
159 Console.WriteLine("error received from grid server" + responseData["error"]);
160 return null;
161 }
162
163 uint regX = Convert.ToUInt32((string)responseData["region_locx"]);
164 uint regY = Convert.ToUInt32((string)responseData["region_locy"]);
165 string internalIpStr = (string)responseData["sim_ip"];
166 uint port = Convert.ToUInt32(responseData["sim_port"]);
167 string externalUri = (string)responseData["sim_uri"];
168
169 IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int)port);
170 string neighbourExternalUri = externalUri;
171 RegionInfo regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr);
172
173 regionInfo.RemotingPort = Convert.ToUInt32((string)responseData["remoting_port"]);
174 regionInfo.RemotingAddress = internalIpStr;
175
176 regionInfo.SimUUID = new LLUUID((string)responseData["region_UUID"]);
177 regionInfo.RegionName = (string)responseData["region_name"];
178
179 return regionInfo;
180 }
181
182 public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY)
183 {
184 Hashtable respData = MapBlockQuery(minX, minY, maxX, maxY);
185
186 List<MapBlockData> neighbours = new List<MapBlockData>();
187
188 foreach (ArrayList a in respData.Values)
189 {
190 foreach (Hashtable n in a)
191 {
192 MapBlockData neighbour = new MapBlockData();
193
194 neighbour.X = Convert.ToUInt16(n["x"]);
195 neighbour.Y = Convert.ToUInt16(n["y"]);
196
197 neighbour.Name = (string)n["name"];
198 neighbour.Access = Convert.ToByte(n["access"]);
199 neighbour.RegionFlags = Convert.ToUInt32(n["region-flags"]);
200 neighbour.WaterHeight = Convert.ToByte(n["water-height"]);
201 neighbour.MapImageId = new LLUUID((string)n["map-image-id"]);
202
203 neighbours.Add(neighbour);
204 }
205 }
206
207 return neighbours;
208 }
209
210 /// <summary>
211 /// Performs a XML-RPC query against the grid server returning mapblock information in the specified coordinates
212 /// </summary>
213 /// <remarks>REDUNDANT - OGS1 is to be phased out in favour of OGS2</remarks>
214 /// <param name="minX">Minimum X value</param>
215 /// <param name="minY">Minimum Y value</param>
216 /// <param name="maxX">Maximum X value</param>
217 /// <param name="maxY">Maximum Y value</param>
218 /// <returns>Hashtable of hashtables containing map data elements</returns>
219 private Hashtable MapBlockQuery(int minX, int minY, int maxX, int maxY)
220 {
221 Hashtable param = new Hashtable();
222 param["xmin"] = minX;
223 param["ymin"] = minY;
224 param["xmax"] = maxX;
225 param["ymax"] = maxY;
226 IList parameters = new ArrayList();
227 parameters.Add(param);
228 XmlRpcRequest req = new XmlRpcRequest("map_block", parameters);
229 XmlRpcResponse resp = req.Send(serversInfo.GridURL, 3000);
230 Hashtable respData = (Hashtable)resp.Value;
231 return respData;
232 }
233
234 // Grid Request Processing
235 public XmlRpcResponse ExpectUser(XmlRpcRequest request)
236 {
237 Console.WriteLine("Expecting User...");
238 Hashtable requestData = (Hashtable)request.Params[0];
239 AgentCircuitData agentData = new AgentCircuitData();
240 agentData.SessionID = new LLUUID((string)requestData["session_id"]);
241 agentData.SecureSessionID = new LLUUID((string)requestData["secure_session_id"]);
242 agentData.firstname = (string)requestData["firstname"];
243 agentData.lastname = (string)requestData["lastname"];
244 agentData.AgentID = new LLUUID((string)requestData["agent_id"]);
245 agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
246 if (requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1"))
247 {
248 agentData.child = true;
249 }
250 else
251 {
252 agentData.startpos = new LLVector3(Convert.ToUInt32(requestData["startpos_x"]), Convert.ToUInt32(requestData["startpos_y"]), Convert.ToUInt32(requestData["startpos_z"]));
253 agentData.child = false;
254
255 }
256
257 if (listeners.ContainsKey(Convert.ToUInt64((string)requestData["regionhandle"])))
258 {
259 this.listeners[Convert.ToUInt64((string)requestData["regionhandle"])].TriggerExpectUser(Convert.ToUInt64((string)requestData["regionhandle"]), agentData);
260 }
261 else
262 {
263 MainLog.Instance.Error("ExpectUser() - Unknown region " + ((ulong)requestData["regionhandle"]).ToString());
264 }
265
266 MainLog.Instance.Verbose("ExpectUser() - Welcoming new user...");
267
268 return new XmlRpcResponse();
269 }
270
271 #region InterRegion Comms
272 private void StartRemoting()
273 {
274 TcpChannel ch = new TcpChannel(this.serversInfo.RemotingListenerPort);
275 ChannelServices.RegisterChannel(ch, true);
276
277 WellKnownServiceTypeEntry wellType = new WellKnownServiceTypeEntry(typeof(OGS1InterRegionRemoting), "InterRegions", WellKnownObjectMode.Singleton);
278 RemotingConfiguration.RegisterWellKnownServiceType(wellType);
279 InterRegionSingleton.Instance.OnArrival += this.IncomingArrival;
280 InterRegionSingleton.Instance.OnChildAgent += this.IncomingChildAgent;
281 }
282
283 #region Methods called by regions in this instance
284 public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData)
285 {
286 if (this.listeners.ContainsKey(regionHandle))
287 {
288 this.listeners[regionHandle].TriggerExpectUser(regionHandle, agentData);
289 return true;
290 }
291 RegionInfo regInfo = this.RequestNeighbourInfo(regionHandle);
292 if (regInfo != null)
293 {
294 //don't want to be creating a new link to the remote instance every time like we are here
295 bool retValue = false;
296
297
298 OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject(
299 typeof(OGS1InterRegionRemoting),
300 "tcp://"+ regInfo.RemotingAddress+":"+regInfo.RemotingPort+"/InterRegions");
301 if (remObject != null)
302 {
303
304 retValue = remObject.InformRegionOfChildAgent(regionHandle, agentData);
305 }
306 else
307 {
308 Console.WriteLine("remoting object not found");
309 }
310 remObject = null;
311
312
313 return retValue;
314 }
315
316 return false;
317 }
318
319 public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position)
320 {
321 if (this.listeners.ContainsKey(regionHandle))
322 {
323 this.listeners[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position);
324 return true;
325 }
326 RegionInfo regInfo = this.RequestNeighbourInfo(regionHandle);
327 if (regInfo != null)
328 {
329 bool retValue = false;
330
331
332 OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject(
333 typeof(OGS1InterRegionRemoting),
334 "tcp://" + regInfo.RemotingAddress + ":" + regInfo.RemotingPort + "/InterRegions");
335 if (remObject != null)
336 {
337
338 retValue = remObject.ExpectAvatarCrossing(regionHandle, agentID, position);
339 }
340 else
341 {
342 Console.WriteLine("remoting object not found");
343 }
344 remObject = null;
345
346
347 return retValue;
348 }
349 //TODO need to see if we know about where this region is and use .net remoting
350 // to inform it.
351 return false;
352 }
353 #endregion
354
355 #region Methods triggered by calls from external instances
356 public bool IncomingChildAgent(ulong regionHandle, AgentCircuitData agentData)
357 {
358 if (this.listeners.ContainsKey(regionHandle))
359 {
360 this.listeners[regionHandle].TriggerExpectUser(regionHandle, agentData);
361 return true;
362 }
363 return false;
364 }
365
366 public bool IncomingArrival(ulong regionHandle, LLUUID agentID, LLVector3 position)
367 {
368 if (this.listeners.ContainsKey(regionHandle))
369 {
370 this.listeners[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position);
371 return true;
372 }
373 return false;
374 }
375 #endregion
376 #endregion
377 }
378}
diff --git a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs
new file mode 100644
index 0000000..f514a29
--- /dev/null
+++ b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs
@@ -0,0 +1,69 @@
1using System;
2using libsecondlife;
3using OpenSim.Framework.Types;
4
5namespace OpenSim.Region.Communications.OGS1
6{
7 public delegate bool InformRegionChild(ulong regionHandle, AgentCircuitData agentData);
8 public delegate bool ExpectArrival(ulong regionHandle, LLUUID agentID, LLVector3 position);
9
10 public sealed class InterRegionSingleton
11 {
12 static readonly InterRegionSingleton instance = new InterRegionSingleton();
13
14 public event InformRegionChild OnChildAgent;
15 public event ExpectArrival OnArrival;
16
17 static InterRegionSingleton()
18 {
19 }
20
21 InterRegionSingleton()
22 {
23 }
24
25 public static InterRegionSingleton Instance
26 {
27 get
28 {
29 return instance;
30 }
31 }
32
33 public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData)
34 {
35 if (OnChildAgent != null)
36 {
37 return OnChildAgent(regionHandle, agentData);
38 }
39 return false;
40 }
41
42 public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position)
43 {
44 if (OnArrival != null)
45 {
46 return OnArrival(regionHandle, agentID, position);
47 }
48 return false;
49 }
50 }
51
52 public class OGS1InterRegionRemoting : MarshalByRefObject
53 {
54
55 public OGS1InterRegionRemoting()
56 {
57 }
58
59 public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData)
60 {
61 return InterRegionSingleton.Instance.InformRegionOfChildAgent(regionHandle, agentData);
62 }
63
64 public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position)
65 {
66 return InterRegionSingleton.Instance.ExpectAvatarCrossing(regionHandle, agentID, position);
67 }
68 }
69}
diff --git a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs
new file mode 100644
index 0000000..2bbaf9d
--- /dev/null
+++ b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs
@@ -0,0 +1,105 @@
1using System;
2using System.Collections;
3using libsecondlife;
4using Nwc.XmlRpc;
5using OpenSim.Framework.Communications;
6using OpenSim.Framework.Data;
7
8namespace OpenSim.Region.Communications.OGS1
9{
10 public class OGS1UserServices :IUserServices
11 {
12 CommunicationsOGS1 m_parent;
13 public OGS1UserServices(CommunicationsOGS1 parent)
14 {
15 m_parent = parent;
16 }
17
18 public UserProfileData ConvertXMLRPCDataToUserProfile(Hashtable data)
19 {
20 if (data.Contains("error_type"))
21 {
22 Console.WriteLine("Error sent by user server when trying to get user profile: (" + data["error_type"] + "): " + data["error_desc"]);
23 return null;
24 }
25
26 UserProfileData userData = new UserProfileData();
27 userData.username = (string)data["firstname"];
28 userData.surname = (string)data["lastname"];
29 userData.UUID = new LLUUID((string)data["uuid"]);
30 userData.userInventoryURI = (string)data["server_inventory"];
31 userData.userAssetURI = (string)data["server_asset"];
32 userData.profileFirstText = (string)data["profile_firstlife_about"];
33 userData.profileFirstImage = new LLUUID((string)data["profile_firstlife_image"]);
34 userData.profileCanDoMask = Convert.ToUInt32((string)data["profile_can_do"]);
35 userData.profileWantDoMask = Convert.ToUInt32(data["profile_want_do"]);
36 userData.profileImage = new LLUUID((string)data["profile_image"]);
37 userData.lastLogin = Convert.ToInt32((string)data["profile_lastlogin"]);
38 userData.homeRegion = Convert.ToUInt64((string)data["home_region"]);
39 userData.homeLocation = new LLVector3((float)Convert.ToDecimal((string)data["home_coordinates_x"]), (float)Convert.ToDecimal((string)data["home_coordinates_y"]), (float)Convert.ToDecimal((string)data["home_coordinates_z"]));
40 userData.homeLookAt = new LLVector3((float)Convert.ToDecimal((string)data["home_look_x"]), (float)Convert.ToDecimal((string)data["home_look_y"]), (float)Convert.ToDecimal((string)data["home_look_z"]));
41
42 return userData;
43 }
44 public UserProfileData GetUserProfile(string firstName, string lastName)
45 {
46 return GetUserProfile(firstName + " " + lastName);
47 }
48 public UserProfileData GetUserProfile(string name)
49 {
50 //try
51 //{
52 Hashtable param = new Hashtable();
53 param["avatar_name"] = name;
54 IList parameters = new ArrayList();
55 parameters.Add(param);
56 XmlRpcRequest req = new XmlRpcRequest("get_user_by_name", parameters);
57 XmlRpcResponse resp = req.Send(m_parent.ServersInfo.UserURL, 3000);
58 Hashtable respData = (Hashtable)resp.Value;
59
60 return ConvertXMLRPCDataToUserProfile(respData);
61 //}
62 //catch (Exception e)
63 //{
64 // Console.WriteLine("Error when trying to fetch profile data by name from remote user server: " + e.Message);
65 //}
66 //return null;
67 }
68 public UserProfileData GetUserProfile(LLUUID avatarID)
69 {
70 try
71 {
72
73 Hashtable param = new Hashtable();
74 param["avatar_uuid"] = avatarID.ToString();
75 IList parameters = new ArrayList();
76 parameters.Add(param);
77 XmlRpcRequest req = new XmlRpcRequest("get_user_by_uuid", parameters);
78 XmlRpcResponse resp = req.Send(m_parent.ServersInfo.UserURL, 3000);
79 Hashtable respData = (Hashtable)resp.Value;
80
81 return ConvertXMLRPCDataToUserProfile(respData);
82 }
83 catch (Exception e)
84 {
85 Console.WriteLine("Error when trying to fetch profile data by uuid from remote user server: " + e.Message);
86 }
87 return null;
88 }
89
90 public UserProfileData SetupMasterUser(string firstName, string lastName)
91 {
92 return SetupMasterUser(firstName, lastName, "");
93 }
94
95 public UserProfileData SetupMasterUser(string firstName, string lastName, string password)
96 {
97 UserProfileData profile = GetUserProfile(firstName, lastName);
98 if (profile == null)
99 {
100 Console.WriteLine("Unknown Master User. Grid Mode: No clue what I should do. Probably would choose the grid owner UUID when that is implemented");
101 }
102 return null;
103 }
104 }
105}
diff --git a/OpenSim/Region/Communications/OGS1/Properties/AssemblyInfo.cs b/OpenSim/Region/Communications/OGS1/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..41f811a
--- /dev/null
+++ b/OpenSim/Region/Communications/OGS1/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("OpenGrid.Framework.Communications.OGS1")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("")]
10[assembly: AssemblyProduct("OpenGrid.Framework.Communications.OGS1")]
11[assembly: AssemblyCopyright("Copyright © 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("a8b2b39b-c83b-41e2-b0b5-7ccfc1fddae7")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30// You can specify all the values or you can default the Revision and Build Numbers
31// by using the '*' as shown below:
32[assembly: AssemblyVersion("1.0.0.0")]
33[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Region/Environment/EstateManager.cs b/OpenSim/Region/Environment/EstateManager.cs
new file mode 100644
index 0000000..b5a74ad
--- /dev/null
+++ b/OpenSim/Region/Environment/EstateManager.cs
@@ -0,0 +1,300 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using libsecondlife;
32using libsecondlife.Packets;
33using OpenSim.Framework.Console;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Types;
36using OpenSim.Region.Environment.Scenes;
37using Avatar = OpenSim.Region.Environment.Scenes.ScenePresence;
38
39
40namespace OpenSim.Region.Environment
41{
42
43 /// <summary>
44 /// Processes requests regarding estates. Refer to EstateSettings.cs in OpenSim.Framework. Types for all of the core settings
45 /// </summary>
46 public class EstateManager
47 {
48 private Scene m_world;
49 private RegionInfo m_regInfo;
50
51 public EstateManager(Scene world,RegionInfo reginfo)
52 {
53 m_world = world; //Estate settings found at world.m_regInfo.estateSettings
54 m_regInfo = reginfo;
55 }
56
57 private bool convertParamStringToBool(byte[] field)
58 {
59 string s = Helpers.FieldToUTF8String(field);
60 if (s == "1" || s.ToLower() == "y" || s.ToLower() == "yes" || s.ToLower() == "t" || s.ToLower() == "true")
61 {
62 return true;
63 }
64 return false;
65 }
66
67 public void handleEstateOwnerMessage(EstateOwnerMessagePacket packet, IClientAPI remote_client)
68 {
69 if (remote_client.AgentId == m_regInfo.MasterAvatarAssignedUUID)
70 {
71 switch (Helpers.FieldToUTF8String(packet.MethodData.Method))
72 {
73 case "getinfo":
74 Console.WriteLine("GETINFO Requested");
75 this.sendRegionInfoPacketToAll();
76
77 break;
78 case "setregioninfo":
79 if (packet.ParamList.Length != 9)
80 {
81 MainLog.Instance.Error("EstateOwnerMessage: SetRegionInfo method has a ParamList of invalid length");
82 }
83 else
84 {
85 m_regInfo.estateSettings.regionFlags = Simulator.RegionFlags.None;
86
87 if (convertParamStringToBool(packet.ParamList[0].Parameter))
88 {
89 m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | Simulator.RegionFlags.BlockTerraform;
90 }
91
92 if (convertParamStringToBool(packet.ParamList[1].Parameter))
93 {
94 m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | Simulator.RegionFlags.NoFly;
95 }
96
97 if (convertParamStringToBool(packet.ParamList[2].Parameter))
98 {
99 m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | Simulator.RegionFlags.AllowDamage;
100 }
101
102 if (convertParamStringToBool(packet.ParamList[3].Parameter) == false)
103 {
104 m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | Simulator.RegionFlags.BlockLandResell;
105 }
106
107
108 int tempMaxAgents = Convert.ToInt16(Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[4].Parameter)));
109 m_regInfo.estateSettings.maxAgents = (byte)tempMaxAgents;
110
111 float tempObjectBonusFactor = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[5].Parameter));
112 m_regInfo.estateSettings.objectBonusFactor = tempObjectBonusFactor;
113
114 int tempMatureLevel = Convert.ToInt16(Helpers.FieldToUTF8String(packet.ParamList[6].Parameter));
115 m_regInfo.estateSettings.simAccess = (Simulator.SimAccess)tempMatureLevel;
116
117
118 if (convertParamStringToBool(packet.ParamList[7].Parameter))
119 {
120 m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | Simulator.RegionFlags.RestrictPushObject;
121 }
122
123 if (convertParamStringToBool(packet.ParamList[8].Parameter))
124 {
125 m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | Simulator.RegionFlags.AllowParcelChanges;
126 }
127
128 sendRegionInfoPacketToAll();
129
130 }
131 break;
132 case "texturebase":
133 foreach (EstateOwnerMessagePacket.ParamListBlock block in packet.ParamList)
134 {
135 string s = Helpers.FieldToUTF8String(block.Parameter);
136 string[] splitField = s.Split(' ');
137 if (splitField.Length == 2)
138 {
139 LLUUID tempUUID = new LLUUID(splitField[1]);
140 switch (Convert.ToInt16(splitField[0]))
141 {
142 case 0:
143 m_regInfo.estateSettings.terrainBase0 = tempUUID;
144 break;
145 case 1:
146 m_regInfo.estateSettings.terrainBase1 = tempUUID;
147 break;
148 case 2:
149 m_regInfo.estateSettings.terrainBase2 = tempUUID;
150 break;
151 case 3:
152 m_regInfo.estateSettings.terrainBase3 = tempUUID;
153 break;
154 }
155 }
156 }
157 break;
158 case "texturedetail":
159 foreach (EstateOwnerMessagePacket.ParamListBlock block in packet.ParamList)
160 {
161
162 string s = Helpers.FieldToUTF8String(block.Parameter);
163 string[] splitField = s.Split(' ');
164 if (splitField.Length == 2)
165 {
166 LLUUID tempUUID = new LLUUID(splitField[1]);
167 switch (Convert.ToInt16(splitField[0]))
168 {
169 case 0:
170 m_regInfo.estateSettings.terrainDetail0 = tempUUID;
171 break;
172 case 1:
173 m_regInfo.estateSettings.terrainDetail1 = tempUUID;
174 break;
175 case 2:
176 m_regInfo.estateSettings.terrainDetail2 = tempUUID;
177 break;
178 case 3:
179 m_regInfo.estateSettings.terrainDetail3 = tempUUID;
180 break;
181 }
182 }
183 }
184 break;
185 case "textureheights":
186 foreach (EstateOwnerMessagePacket.ParamListBlock block in packet.ParamList)
187 {
188
189 string s = Helpers.FieldToUTF8String(block.Parameter);
190 string[] splitField = s.Split(' ');
191 if (splitField.Length == 3)
192 {
193
194 float tempHeightLow = (float)Convert.ToDecimal(splitField[1]);
195 float tempHeightHigh = (float)Convert.ToDecimal(splitField[2]);
196
197 switch (Convert.ToInt16(splitField[0]))
198 {
199 case 0:
200 m_regInfo.estateSettings.terrainStartHeight0 = tempHeightLow;
201 m_regInfo.estateSettings.terrainHeightRange0 = tempHeightHigh;
202 break;
203 case 1:
204 m_regInfo.estateSettings.terrainStartHeight1 = tempHeightLow;
205 m_regInfo.estateSettings.terrainHeightRange1 = tempHeightHigh;
206 break;
207 case 2:
208 m_regInfo.estateSettings.terrainStartHeight2 = tempHeightLow;
209 m_regInfo.estateSettings.terrainHeightRange2 = tempHeightHigh;
210 break;
211 case 3:
212 m_regInfo.estateSettings.terrainStartHeight3 = tempHeightLow;
213 m_regInfo.estateSettings.terrainHeightRange3 = tempHeightHigh;
214 break;
215 }
216 }
217 }
218 break;
219 case "texturecommit":
220 sendRegionHandshakeToAll();
221 break;
222 case "setregionterrain":
223 if (packet.ParamList.Length != 9)
224 {
225 MainLog.Instance.Error("EstateOwnerMessage: SetRegionTerrain method has a ParamList of invalid length");
226 }
227 else
228 {
229 m_regInfo.estateSettings.waterHeight = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[0].Parameter));
230 m_regInfo.estateSettings.terrainRaiseLimit = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[1].Parameter));
231 m_regInfo.estateSettings.terrainLowerLimit = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[2].Parameter));
232 m_regInfo.estateSettings.useFixedSun = this.convertParamStringToBool(packet.ParamList[4].Parameter);
233 m_regInfo.estateSettings.sunHour = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[5].Parameter));
234
235 sendRegionInfoPacketToAll();
236 }
237 break;
238 default:
239 MainLog.Instance.Error("EstateOwnerMessage: Unknown method requested\n" + packet.ToString());
240 break;
241 }
242 }
243 }
244
245 public void sendRegionInfoPacketToAll()
246 {
247 List<Avatar> avatars = m_world.RequestAvatarList();
248
249 for (int i = 0; i < avatars.Count; i++)
250 {
251 this.sendRegionInfoPacket(avatars[i].ControllingClient);
252 }
253 }
254
255 public void sendRegionHandshakeToAll()
256 {
257 List<Avatar> avatars = m_world.RequestAvatarList();
258
259 for (int i = 0; i < avatars.Count; i++)
260 {
261 this.sendRegionHandshake(avatars[i].ControllingClient);
262 }
263 }
264
265 public void sendRegionInfoPacket(IClientAPI remote_client)
266 {
267 Encoding _enc = Encoding.ASCII;
268
269 AgentCircuitData circuitData = remote_client.RequestClientInfo();
270
271 RegionInfoPacket regionInfoPacket = new RegionInfoPacket();
272 regionInfoPacket.AgentData.AgentID = circuitData.AgentID;
273 regionInfoPacket.AgentData.SessionID = circuitData.SessionID;
274 regionInfoPacket.RegionInfo.BillableFactor = m_regInfo.estateSettings.billableFactor;
275 regionInfoPacket.RegionInfo.EstateID = m_regInfo.estateSettings.estateID;
276 regionInfoPacket.RegionInfo.MaxAgents = m_regInfo.estateSettings.maxAgents;
277 regionInfoPacket.RegionInfo.ObjectBonusFactor = m_regInfo.estateSettings.objectBonusFactor;
278 regionInfoPacket.RegionInfo.ParentEstateID = m_regInfo.estateSettings.parentEstateID;
279 regionInfoPacket.RegionInfo.PricePerMeter = m_regInfo.estateSettings.pricePerMeter;
280 regionInfoPacket.RegionInfo.RedirectGridX = m_regInfo.estateSettings.redirectGridX;
281 regionInfoPacket.RegionInfo.RedirectGridY = m_regInfo.estateSettings.redirectGridY;
282 regionInfoPacket.RegionInfo.RegionFlags = (uint)m_regInfo.estateSettings.regionFlags;
283 regionInfoPacket.RegionInfo.SimAccess = (byte)m_regInfo.estateSettings.simAccess;
284 regionInfoPacket.RegionInfo.SimName = _enc.GetBytes( m_regInfo.RegionName);
285 regionInfoPacket.RegionInfo.SunHour = m_regInfo.estateSettings.sunHour;
286 regionInfoPacket.RegionInfo.TerrainLowerLimit = m_regInfo.estateSettings.terrainLowerLimit;
287 regionInfoPacket.RegionInfo.TerrainRaiseLimit = m_regInfo.estateSettings.terrainRaiseLimit;
288 regionInfoPacket.RegionInfo.UseEstateSun = !m_regInfo.estateSettings.useFixedSun;
289 regionInfoPacket.RegionInfo.WaterHeight = m_regInfo.estateSettings.waterHeight;
290
291 remote_client.OutPacket(regionInfoPacket);
292 }
293
294 public void sendRegionHandshake(IClientAPI remoteClient)
295 {
296 remoteClient.SendRegionHandshake(m_regInfo);
297 }
298
299 }
300}
diff --git a/OpenSim/Region/Environment/ParcelManager.cs b/OpenSim/Region/Environment/ParcelManager.cs
new file mode 100644
index 0000000..2059b3f
--- /dev/null
+++ b/OpenSim/Region/Environment/ParcelManager.cs
@@ -0,0 +1,891 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
31using libsecondlife.Packets;
32using OpenSim.Framework.Interfaces;
33using OpenSim.Framework.Types;
34using OpenSim.Region.Environment.Scenes;
35using Avatar = OpenSim.Region.Environment.Scenes.ScenePresence;
36
37namespace OpenSim.Region.Environment
38{
39
40
41 #region ParcelManager Class
42 /// <summary>
43 /// Handles Parcel objects and operations requiring information from other Parcel objects (divide, join, etc)
44 /// </summary>
45 public class ParcelManager : ILocalStorageParcelReceiver
46 {
47
48 #region Constants
49 //Parcel types set with flags in ParcelOverlay.
50 //Only one of these can be used.
51 public const byte PARCEL_TYPE_PUBLIC = (byte)0; //Equals 00000000
52 public const byte PARCEL_TYPE_OWNED_BY_OTHER = (byte)1; //Equals 00000001
53 public const byte PARCEL_TYPE_OWNED_BY_GROUP = (byte)2; //Equals 00000010
54 public const byte PARCEL_TYPE_OWNED_BY_REQUESTER = (byte)3; //Equals 00000011
55 public const byte PARCEL_TYPE_IS_FOR_SALE = (byte)4; //Equals 00000100
56 public const byte PARCEL_TYPE_IS_BEING_AUCTIONED = (byte)5; //Equals 00000101
57
58
59 //Flags that when set, a border on the given side will be placed
60 //NOTE: North and East is assumable by the west and south sides (if parcel to east has a west border, then I have an east border; etc)
61 //This took forever to figure out -- jeesh. /blame LL for even having to send these
62 public const byte PARCEL_FLAG_PROPERTY_BORDER_WEST = (byte)64; //Equals 01000000
63 public const byte PARCEL_FLAG_PROPERTY_BORDER_SOUTH = (byte)128; //Equals 10000000
64
65 //RequestResults (I think these are right, they seem to work):
66 public const int PARCEL_RESULT_ONE_PARCEL = 0; // The request they made contained only one parcel
67 public const int PARCEL_RESULT_MULTIPLE_PARCELS = 1; // The request they made contained more than one parcel
68
69 //These are other constants. Yay!
70 public const int START_PARCEL_LOCAL_ID = 1;
71 #endregion
72
73 #region Member Variables
74 public Dictionary<int, Parcel> parcelList = new Dictionary<int, Parcel>();
75 private int lastParcelLocalID = START_PARCEL_LOCAL_ID - 1;
76 private int[,] parcelIDList = new int[64, 64];
77
78 private Scene m_world;
79 private RegionInfo m_regInfo;
80
81 #endregion
82
83 #region Constructors
84 public ParcelManager(Scene world, RegionInfo reginfo)
85 {
86
87 m_world = world;
88 m_regInfo = reginfo;
89 parcelIDList.Initialize();
90
91 }
92 #endregion
93
94 #region Member Functions
95
96 #region Parcel From Storage Functions
97 public void ParcelFromStorage(ParcelData data)
98 {
99 Parcel new_parcel = new Parcel(data.ownerID, data.isGroupOwned, m_world);
100 new_parcel.parcelData = data.Copy();
101 new_parcel.setParcelBitmapFromByteArray();
102 addParcel(new_parcel);
103
104 }
105
106 public void NoParcelDataFromStorage()
107 {
108 resetSimParcels();
109 }
110 #endregion
111
112 #region Parcel Add/Remove/Get/Create
113 /// <summary>
114 /// Creates a basic Parcel object without an owner (a zeroed key)
115 /// </summary>
116 /// <returns></returns>
117 public Parcel createBaseParcel()
118 {
119 return new Parcel(new LLUUID(), false, m_world);
120 }
121
122 /// <summary>
123 /// Adds a parcel to the stored list and adds them to the parcelIDList to what they own
124 /// </summary>
125 /// <param name="new_parcel">The parcel being added</param>
126 public void addParcel(Parcel new_parcel)
127 {
128 lastParcelLocalID++;
129 new_parcel.parcelData.localID = lastParcelLocalID;
130 parcelList.Add(lastParcelLocalID, new_parcel.Copy());
131
132
133 bool[,] parcelBitmap = new_parcel.getParcelBitmap();
134 int x, y;
135 for (x = 0; x < 64; x++)
136 {
137 for (y = 0; y < 64; y++)
138 {
139 if (parcelBitmap[x, y])
140 {
141 parcelIDList[x, y] = lastParcelLocalID;
142 }
143 }
144 }
145 parcelList[lastParcelLocalID].forceUpdateParcelInfo();
146
147
148 }
149 /// <summary>
150 /// Removes a parcel from the list. Will not remove if local_id is still owning an area in parcelIDList
151 /// </summary>
152 /// <param name="local_id">Parcel.localID of the parcel to remove.</param>
153 public void removeParcel(int local_id)
154 {
155 int x, y;
156 for (x = 0; x < 64; x++)
157 {
158 for (y = 0; y < 64; y++)
159 {
160 if (parcelIDList[x, y] == local_id)
161 {
162 throw new Exception("Could not remove parcel. Still being used at " + x + ", " + y);
163 }
164 }
165 }
166 m_world.localStorage.RemoveParcel(parcelList[local_id].parcelData);
167 parcelList.Remove(local_id);
168 }
169
170 private void performFinalParcelJoin(Parcel master, Parcel slave)
171 {
172 int x, y;
173 bool[,] parcelBitmapSlave = slave.getParcelBitmap();
174 for (x = 0; x < 64; x++)
175 {
176 for (y = 0; y < 64; y++)
177 {
178 if (parcelBitmapSlave[x, y])
179 {
180 parcelIDList[x, y] = master.parcelData.localID;
181 }
182 }
183 }
184 removeParcel(slave.parcelData.localID);
185 }
186 /// <summary>
187 /// Get the parcel at the specified point
188 /// </summary>
189 /// <param name="x">Value between 0 - 256 on the x axis of the point</param>
190 /// <param name="y">Value between 0 - 256 on the y axis of the point</param>
191 /// <returns>Parcel at the point supplied</returns>
192 public Parcel getParcel(int x, int y)
193 {
194 if (x > 256 || y > 256 || x < 0 || y < 0)
195 {
196 throw new Exception("Error: Parcel not found at point " + x + ", " + y);
197 }
198 else
199 {
200 return parcelList[parcelIDList[x / 4, y / 4]];
201 }
202
203 }
204 #endregion
205
206 #region Parcel Modification
207 /// <summary>
208 /// Subdivides a parcel
209 /// </summary>
210 /// <param name="start_x">West Point</param>
211 /// <param name="start_y">South Point</param>
212 /// <param name="end_x">East Point</param>
213 /// <param name="end_y">North Point</param>
214 /// <param name="attempting_user_id">LLUUID of user who is trying to subdivide</param>
215 /// <returns>Returns true if successful</returns>
216 private bool subdivide(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id)
217 {
218 //First, lets loop through the points and make sure they are all in the same parcel
219 //Get the parcel at start
220 Parcel startParcel = getParcel(start_x, start_y);
221 if (startParcel == null) return false; //No such parcel at the beginning
222
223 //Loop through the points
224 try
225 {
226 int totalX = end_x - start_x;
227 int totalY = end_y - start_y;
228 int x, y;
229 for (y = 0; y < totalY; y++)
230 {
231 for (x = 0; x < totalX; x++)
232 {
233 Parcel tempParcel = getParcel(start_x + x, start_y + y);
234 if (tempParcel == null) return false; //No such parcel at that point
235 if (tempParcel != startParcel) return false; //Subdividing over 2 parcels; no-no
236 }
237 }
238 }
239 catch (Exception)
240 {
241 return false; //Exception. For now, lets skip subdivision
242 }
243
244 //If we are still here, then they are subdividing within one parcel
245 //Check owner
246 if (startParcel.parcelData.ownerID != attempting_user_id)
247 {
248 return false; //They cant do this!
249 }
250
251 //Lets create a new parcel with bitmap activated at that point (keeping the old parcels info)
252 Parcel newParcel = startParcel.Copy();
253 newParcel.parcelData.parcelName = "Subdivision of " + newParcel.parcelData.parcelName;
254 newParcel.parcelData.globalID = LLUUID.Random();
255
256 newParcel.setParcelBitmap(Parcel.getSquareParcelBitmap(start_x, start_y, end_x, end_y));
257
258 //Now, lets set the subdivision area of the original to false
259 int startParcelIndex = startParcel.parcelData.localID;
260 parcelList[startParcelIndex].setParcelBitmap(Parcel.modifyParcelBitmapSquare(startParcel.getParcelBitmap(), start_x, start_y, end_x, end_y, false));
261 parcelList[startParcelIndex].forceUpdateParcelInfo();
262
263
264 //Now add the new parcel
265 addParcel(newParcel);
266
267
268
269
270
271 return true;
272 }
273 /// <summary>
274 /// Join 2 parcels together
275 /// </summary>
276 /// <param name="start_x">x value in first parcel</param>
277 /// <param name="start_y">y value in first parcel</param>
278 /// <param name="end_x">x value in second parcel</param>
279 /// <param name="end_y">y value in second parcel</param>
280 /// <param name="attempting_user_id">LLUUID of the avatar trying to join the parcels</param>
281 /// <returns>Returns true if successful</returns>
282 private bool join(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id)
283 {
284 end_x -= 4;
285 end_y -= 4;
286
287 //NOTE: The following only connects the parcels in each corner and not all the parcels that are within the selection box!
288 //This should be fixed later -- somewhat "incomplete code" --Ming
289 Parcel startParcel, endParcel;
290
291 try
292 {
293 startParcel = getParcel(start_x, start_y);
294 endParcel = getParcel(end_x, end_y);
295 }
296 catch (Exception)
297 {
298 return false; //Error occured when trying to get the start and end parcels
299 }
300 if (startParcel == endParcel)
301 {
302 return false; //Subdivision of the same parcel is not allowed
303 }
304
305 //Check the parcel owners:
306 if (startParcel.parcelData.ownerID != endParcel.parcelData.ownerID)
307 {
308 return false;
309 }
310 if (startParcel.parcelData.ownerID != attempting_user_id)
311 {
312 //TODO: Group editing stuff. Avatar owner support for now
313 return false;
314 }
315
316 //Same owners! Lets join them
317 //Merge them to startParcel
318 parcelList[startParcel.parcelData.localID].setParcelBitmap(Parcel.mergeParcelBitmaps(startParcel.getParcelBitmap(), endParcel.getParcelBitmap()));
319 performFinalParcelJoin(startParcel, endParcel);
320
321 return true;
322
323
324
325 }
326 #endregion
327
328 #region Parcel Updating
329 /// <summary>
330 /// Where we send the ParcelOverlay packet to the client
331 /// </summary>
332 /// <param name="remote_client">The object representing the client</param>
333 public void sendParcelOverlay(IClientAPI remote_client)
334 {
335 const int PARCEL_BLOCKS_PER_PACKET = 1024;
336 int x, y = 0;
337 byte[] byteArray = new byte[PARCEL_BLOCKS_PER_PACKET];
338 int byteArrayCount = 0;
339 int sequenceID = 0;
340 ParcelOverlayPacket packet;
341
342 for (y = 0; y < 64; y++)
343 {
344 for (x = 0; x < 64; x++)
345 {
346 byte tempByte = (byte)0; //This represents the byte for the current 4x4
347 Parcel currentParcelBlock = getParcel(x * 4, y * 4);
348
349 if (currentParcelBlock.parcelData.ownerID == remote_client.AgentId)
350 {
351 //Owner Flag
352 tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_OWNED_BY_REQUESTER);
353 }
354 else if (currentParcelBlock.parcelData.salePrice > 0 && (currentParcelBlock.parcelData.authBuyerID == LLUUID.Zero || currentParcelBlock.parcelData.authBuyerID == remote_client.AgentId))
355 {
356 //Sale Flag
357 tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_IS_FOR_SALE);
358 }
359 else if (currentParcelBlock.parcelData.ownerID == LLUUID.Zero)
360 {
361 //Public Flag
362 tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_PUBLIC);
363 }
364 else
365 {
366 //Other Flag
367 tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_OWNED_BY_OTHER);
368 }
369
370
371 //Now for border control
372 if (x == 0)
373 {
374 tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_WEST);
375 }
376 else if (getParcel((x - 1) * 4, y * 4) != currentParcelBlock)
377 {
378 tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_WEST);
379 }
380
381 if (y == 0)
382 {
383 tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_SOUTH);
384 }
385 else if (getParcel(x * 4, (y - 1) * 4) != currentParcelBlock)
386 {
387 tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_SOUTH);
388 }
389
390 byteArray[byteArrayCount] = tempByte;
391 byteArrayCount++;
392 if (byteArrayCount >= PARCEL_BLOCKS_PER_PACKET)
393 {
394 byteArrayCount = 0;
395 packet = new ParcelOverlayPacket();
396 packet.ParcelData.Data = byteArray;
397 packet.ParcelData.SequenceID = sequenceID;
398 remote_client.OutPacket((Packet)packet);
399 sequenceID++;
400 byteArray = new byte[PARCEL_BLOCKS_PER_PACKET];
401 }
402 }
403 }
404
405 packet = new ParcelOverlayPacket();
406 packet.ParcelData.Data = byteArray;
407 packet.ParcelData.SequenceID = sequenceID; //Eh?
408 remote_client.OutPacket((Packet)packet);
409 }
410
411 public void handleParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client)
412 {
413 //Get the parcels within the bounds
414 List<Parcel> temp = new List<Parcel>();
415 int x, y, i;
416 int inc_x = end_x - start_x;
417 int inc_y = end_y - start_y;
418 for (x = 0; x < inc_x; x++)
419 {
420 for (y = 0; y < inc_y; y++)
421 {
422 Parcel currentParcel = getParcel(start_x + x, start_y + y);
423 if (!temp.Contains(currentParcel))
424 {
425 currentParcel.forceUpdateParcelInfo();
426 temp.Add(currentParcel);
427 }
428 }
429 }
430
431 int requestResult = PARCEL_RESULT_ONE_PARCEL;
432 if (temp.Count > 1)
433 {
434 requestResult = PARCEL_RESULT_MULTIPLE_PARCELS;
435 }
436
437 for (i = 0; i < temp.Count; i++)
438 {
439 temp[i].sendParcelProperties(sequence_id, snap_selection, requestResult, remote_client);
440 }
441
442
443 sendParcelOverlay(remote_client);
444 }
445
446 public void handleParcelPropertiesUpdateRequest(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client)
447 {
448 if (parcelList.ContainsKey(packet.ParcelData.LocalID))
449 {
450 parcelList[packet.ParcelData.LocalID].updateParcelProperties(packet, remote_client);
451 }
452 }
453 public void handleParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client)
454 {
455 subdivide(west, south, east, north, remote_client.AgentId);
456 }
457 public void handleParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client)
458 {
459 join(west, south, east, north, remote_client.AgentId);
460
461 }
462 #endregion
463
464 /// <summary>
465 /// Resets the sim to the default parcel (full sim parcel owned by the default user)
466 /// </summary>
467 public void resetSimParcels()
468 {
469 //Remove all the parcels in the sim and add a blank, full sim parcel set to public
470 parcelList.Clear();
471 lastParcelLocalID = START_PARCEL_LOCAL_ID - 1;
472 parcelIDList.Initialize();
473
474 Parcel fullSimParcel = new Parcel(LLUUID.Zero, false, m_world);
475
476 fullSimParcel.setParcelBitmap(Parcel.getSquareParcelBitmap(0, 0, 256, 256));
477 fullSimParcel.parcelData.parcelName = "Your Sim Parcel";
478 fullSimParcel.parcelData.parcelDesc = "";
479
480 fullSimParcel.parcelData.ownerID = m_regInfo.MasterAvatarAssignedUUID;
481 fullSimParcel.parcelData.salePrice = 1;
482 fullSimParcel.parcelData.parcelFlags = libsecondlife.Parcel.ParcelFlags.ForSale;
483 fullSimParcel.parcelData.parcelStatus = libsecondlife.Parcel.ParcelStatus.Leased;
484
485 addParcel(fullSimParcel);
486
487 }
488 #endregion
489 }
490 #endregion
491
492
493 #region Parcel Class
494 /// <summary>
495 /// Keeps track of a specific parcel's information
496 /// </summary>
497 public class Parcel
498 {
499 #region Member Variables
500 public ParcelData parcelData = new ParcelData();
501 public Scene m_world;
502
503 private bool[,] parcelBitmap = new bool[64, 64];
504
505 #endregion
506
507
508 #region Constructors
509 public Parcel(LLUUID owner_id, bool is_group_owned, Scene world)
510 {
511 m_world = world;
512 parcelData.ownerID = owner_id;
513 parcelData.isGroupOwned = is_group_owned;
514
515 }
516 #endregion
517
518
519 #region Member Functions
520
521 #region General Functions
522 /// <summary>
523 /// Checks to see if this parcel contains a point
524 /// </summary>
525 /// <param name="x"></param>
526 /// <param name="y"></param>
527 /// <returns>Returns true if the parcel contains the specified point</returns>
528 public bool containsPoint(int x, int y)
529 {
530 if (x >= 0 && y >= 0 && x <= 256 && x <= 256)
531 {
532 return (parcelBitmap[x / 4, y / 4] == true);
533 }
534 else
535 {
536 return false;
537 }
538 }
539
540 public Parcel Copy()
541 {
542 Parcel newParcel = new Parcel(this.parcelData.ownerID, this.parcelData.isGroupOwned, m_world);
543
544 //Place all new variables here!
545 newParcel.parcelBitmap = (bool[,])(this.parcelBitmap.Clone());
546 newParcel.parcelData = parcelData.Copy();
547
548 return newParcel;
549 }
550
551 #endregion
552
553
554 #region Packet Request Handling
555 /// <summary>
556 /// Sends parcel properties as requested
557 /// </summary>
558 /// <param name="sequence_id">ID sent by client for them to keep track of</param>
559 /// <param name="snap_selection">Bool sent by client for them to use</param>
560 /// <param name="remote_client">Object representing the client</param>
561 public void sendParcelProperties(int sequence_id, bool snap_selection, int request_result, IClientAPI remote_client)
562 {
563
564 ParcelPropertiesPacket updatePacket = new ParcelPropertiesPacket();
565 updatePacket.ParcelData.AABBMax = parcelData.AABBMax;
566 updatePacket.ParcelData.AABBMin = parcelData.AABBMin;
567 updatePacket.ParcelData.Area = parcelData.area;
568 updatePacket.ParcelData.AuctionID = parcelData.auctionID;
569 updatePacket.ParcelData.AuthBuyerID = parcelData.authBuyerID; //unemplemented
570
571 updatePacket.ParcelData.Bitmap = parcelData.parcelBitmapByteArray;
572
573 updatePacket.ParcelData.Desc = Helpers.StringToField(parcelData.parcelDesc);
574 updatePacket.ParcelData.Category = (byte)parcelData.category;
575 updatePacket.ParcelData.ClaimDate = parcelData.claimDate;
576 updatePacket.ParcelData.ClaimPrice = parcelData.claimPrice;
577 updatePacket.ParcelData.GroupID = parcelData.groupID;
578 updatePacket.ParcelData.GroupPrims = parcelData.groupPrims;
579 updatePacket.ParcelData.IsGroupOwned = parcelData.isGroupOwned;
580 updatePacket.ParcelData.LandingType = (byte)parcelData.landingType;
581 updatePacket.ParcelData.LocalID = parcelData.localID;
582 updatePacket.ParcelData.MaxPrims = 1000; //unemplemented
583 updatePacket.ParcelData.MediaAutoScale = parcelData.mediaAutoScale;
584 updatePacket.ParcelData.MediaID = parcelData.mediaID;
585 updatePacket.ParcelData.MediaURL = Helpers.StringToField(parcelData.mediaURL);
586 updatePacket.ParcelData.MusicURL = Helpers.StringToField(parcelData.musicURL);
587 updatePacket.ParcelData.Name = Helpers.StringToField(parcelData.parcelName);
588 updatePacket.ParcelData.OtherCleanTime = 0; //unemplemented
589 updatePacket.ParcelData.OtherCount = 0; //unemplemented
590 updatePacket.ParcelData.OtherPrims = 0; //unemplented
591 updatePacket.ParcelData.OwnerID = parcelData.ownerID;
592 updatePacket.ParcelData.OwnerPrims = 0; //unemplemented
593 updatePacket.ParcelData.ParcelFlags = (uint)parcelData.parcelFlags; //unemplemented
594 updatePacket.ParcelData.ParcelPrimBonus = (float)1.0; //unemplemented
595 updatePacket.ParcelData.PassHours = parcelData.passHours;
596 updatePacket.ParcelData.PassPrice = parcelData.passPrice;
597 updatePacket.ParcelData.PublicCount = 0; //unemplemented
598 updatePacket.ParcelData.RegionDenyAnonymous = false; //unemplemented
599 updatePacket.ParcelData.RegionDenyIdentified = false; //unemplemented
600 updatePacket.ParcelData.RegionDenyTransacted = false; //unemplemented
601 updatePacket.ParcelData.RegionPushOverride = true; //unemplemented
602 updatePacket.ParcelData.RentPrice = 0; //??
603 updatePacket.ParcelData.RequestResult = request_result;
604 updatePacket.ParcelData.SalePrice = parcelData.salePrice; //unemplemented
605 updatePacket.ParcelData.SelectedPrims = 0; //unemeplemented
606 updatePacket.ParcelData.SelfCount = 0;//unemplemented
607 updatePacket.ParcelData.SequenceID = sequence_id;
608 updatePacket.ParcelData.SimWideMaxPrims = 15000; //unemplemented
609 updatePacket.ParcelData.SimWideTotalPrims = 0; //unemplemented
610 updatePacket.ParcelData.SnapSelection = snap_selection;
611 updatePacket.ParcelData.SnapshotID = parcelData.snapshotID;
612 updatePacket.ParcelData.Status = (byte)parcelData.parcelStatus;
613 updatePacket.ParcelData.TotalPrims = 0; //unemplemented
614 updatePacket.ParcelData.UserLocation = parcelData.userLocation;
615 updatePacket.ParcelData.UserLookAt = parcelData.userLookAt;
616 remote_client.OutPacket((Packet)updatePacket);
617 }
618
619 public void updateParcelProperties(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client)
620 {
621 if (remote_client.AgentId == parcelData.ownerID)
622 {
623 //Needs later group support
624 parcelData.authBuyerID = packet.ParcelData.AuthBuyerID;
625 parcelData.category = (libsecondlife.Parcel.ParcelCategory)packet.ParcelData.Category;
626 parcelData.parcelDesc = Helpers.FieldToUTF8String(packet.ParcelData.Desc);
627 parcelData.groupID = packet.ParcelData.GroupID;
628 parcelData.landingType = packet.ParcelData.LandingType;
629 parcelData.mediaAutoScale = packet.ParcelData.MediaAutoScale;
630 parcelData.mediaID = packet.ParcelData.MediaID;
631 parcelData.mediaURL = Helpers.FieldToUTF8String(packet.ParcelData.MediaURL);
632 parcelData.musicURL = Helpers.FieldToUTF8String(packet.ParcelData.MusicURL);
633 parcelData.parcelName = Helpers.FieldToUTF8String(packet.ParcelData.Name);
634 parcelData.parcelFlags = (libsecondlife.Parcel.ParcelFlags)packet.ParcelData.ParcelFlags;
635 parcelData.passHours = packet.ParcelData.PassHours;
636 parcelData.passPrice = packet.ParcelData.PassPrice;
637 parcelData.salePrice = packet.ParcelData.SalePrice;
638 parcelData.snapshotID = packet.ParcelData.SnapshotID;
639 parcelData.userLocation = packet.ParcelData.UserLocation;
640 parcelData.userLookAt = packet.ParcelData.UserLookAt;
641
642 List<Avatar> avatars = m_world.RequestAvatarList();
643
644 for (int i = 0; i < avatars.Count; i++)
645 {
646 Parcel over = m_world.parcelManager.getParcel((int)Math.Round(avatars[i].Pos.X), (int)Math.Round(avatars[i].Pos.Y));
647 if (over == this)
648 {
649 sendParcelProperties(0, false, 0, avatars[i].ControllingClient);
650 }
651 }
652
653 }
654 }
655 #endregion
656
657
658 #region Update Functions
659 /// <summary>
660 /// Updates the AABBMin and AABBMax values after area/shape modification of parcel
661 /// </summary>
662 private void updateAABBAndAreaValues()
663 {
664 int min_x = 64;
665 int min_y = 64;
666 int max_x = 0;
667 int max_y = 0;
668 int tempArea = 0;
669 int x, y;
670 for (x = 0; x < 64; x++)
671 {
672 for (y = 0; y < 64; y++)
673 {
674 if (parcelBitmap[x, y] == true)
675 {
676 if (min_x > x) min_x = x;
677 if (min_y > y) min_y = y;
678 if (max_x < x) max_x = x;
679 if (max_y < y) max_y = y;
680 tempArea += 16; //16sqm parcel
681 }
682 }
683 }
684 parcelData.AABBMin = new LLVector3((float)(min_x * 4), (float)(min_y * 4), (float)m_world.Terrain.get((min_x * 4), (min_y * 4)));
685 parcelData.AABBMax = new LLVector3((float)(max_x * 4), (float)(max_y * 4), (float)m_world.Terrain.get((max_x * 4), (max_y * 4)));
686 parcelData.area = tempArea;
687 }
688
689 public void updateParcelBitmapByteArray()
690 {
691 parcelData.parcelBitmapByteArray = convertParcelBitmapToBytes();
692 }
693
694 /// <summary>
695 /// Update all settings in parcel such as area, bitmap byte array, etc
696 /// </summary>
697 public void forceUpdateParcelInfo()
698 {
699 this.updateAABBAndAreaValues();
700 this.updateParcelBitmapByteArray();
701 }
702
703 public void setParcelBitmapFromByteArray()
704 {
705 parcelBitmap = convertBytesToParcelBitmap();
706 }
707 #endregion
708
709
710 #region Parcel Bitmap Functions
711 /// <summary>
712 /// Sets the parcel's bitmap manually
713 /// </summary>
714 /// <param name="bitmap">64x64 block representing where this parcel is on a map</param>
715 public void setParcelBitmap(bool[,] bitmap)
716 {
717 if (bitmap.GetLength(0) != 64 || bitmap.GetLength(1) != 64 || bitmap.Rank != 2)
718 {
719 //Throw an exception - The bitmap is not 64x64
720 throw new Exception("Error: Invalid Parcel Bitmap");
721 }
722 else
723 {
724 //Valid: Lets set it
725 parcelBitmap = bitmap;
726 forceUpdateParcelInfo();
727
728 }
729 }
730 /// <summary>
731 /// Gets the parcels bitmap manually
732 /// </summary>
733 /// <returns></returns>
734 public bool[,] getParcelBitmap()
735 {
736 return parcelBitmap;
737 }
738 /// <summary>
739 /// Converts the parcel bitmap to a packet friendly byte array
740 /// </summary>
741 /// <returns></returns>
742 private byte[] convertParcelBitmapToBytes()
743 {
744 byte[] tempConvertArr = new byte[512];
745 byte tempByte = 0;
746 int x, y, i, byteNum = 0;
747 i = 0;
748 for (y = 0; y < 64; y++)
749 {
750 for (x = 0; x < 64; x++)
751 {
752 tempByte = Convert.ToByte(tempByte | Convert.ToByte(parcelBitmap[x, y]) << (i++ % 8));
753 if (i % 8 == 0)
754 {
755 tempConvertArr[byteNum] = tempByte;
756 tempByte = (byte)0;
757 i = 0;
758 byteNum++;
759 }
760 }
761 }
762 return tempConvertArr;
763 }
764
765 private bool[,] convertBytesToParcelBitmap()
766 {
767 bool[,] tempConvertMap = new bool[64, 64];
768 tempConvertMap.Initialize();
769 byte tempByte = 0;
770 int x = 0, y = 0, i = 0, bitNum = 0;
771 for (i = 0; i < 512; i++)
772 {
773 tempByte = parcelData.parcelBitmapByteArray[i];
774 for (bitNum = 0; bitNum < 8; bitNum++)
775 {
776 bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte)1);
777 tempConvertMap[x, y] = bit;
778 x++;
779 if (x > 63)
780 {
781 x = 0;
782 y++;
783 }
784
785 }
786
787 }
788 return tempConvertMap;
789 }
790 /// <summary>
791 /// Full sim parcel creation
792 /// </summary>
793 /// <returns></returns>
794 public static bool[,] basicFullRegionParcelBitmap()
795 {
796 return getSquareParcelBitmap(0, 0, 256, 256);
797 }
798
799 /// <summary>
800 /// Used to modify the bitmap between the x and y points. Points use 64 scale
801 /// </summary>
802 /// <param name="start_x"></param>
803 /// <param name="start_y"></param>
804 /// <param name="end_x"></param>
805 /// <param name="end_y"></param>
806 /// <returns></returns>
807 public static bool[,] getSquareParcelBitmap(int start_x, int start_y, int end_x, int end_y)
808 {
809
810 bool[,] tempBitmap = new bool[64, 64];
811 tempBitmap.Initialize();
812
813 tempBitmap = modifyParcelBitmapSquare(tempBitmap, start_x, start_y, end_x, end_y, true);
814 return tempBitmap;
815 }
816
817 /// <summary>
818 /// Change a parcel's bitmap at within a square and set those points to a specific value
819 /// </summary>
820 /// <param name="parcel_bitmap"></param>
821 /// <param name="start_x"></param>
822 /// <param name="start_y"></param>
823 /// <param name="end_x"></param>
824 /// <param name="end_y"></param>
825 /// <param name="set_value"></param>
826 /// <returns></returns>
827 public static bool[,] modifyParcelBitmapSquare(bool[,] parcel_bitmap, int start_x, int start_y, int end_x, int end_y, bool set_value)
828 {
829 if (parcel_bitmap.GetLength(0) != 64 || parcel_bitmap.GetLength(1) != 64 || parcel_bitmap.Rank != 2)
830 {
831 //Throw an exception - The bitmap is not 64x64
832 throw new Exception("Error: Invalid Parcel Bitmap in modifyParcelBitmapSquare()");
833 }
834
835 int x, y;
836 for (y = 0; y < 64; y++)
837 {
838 for (x = 0; x < 64; x++)
839 {
840 if (x >= start_x / 4 && x < end_x / 4
841 && y >= start_y / 4 && y < end_y / 4)
842 {
843 parcel_bitmap[x, y] = set_value;
844 }
845 }
846 }
847 return parcel_bitmap;
848 }
849 /// <summary>
850 /// Join the true values of 2 bitmaps together
851 /// </summary>
852 /// <param name="bitmap_base"></param>
853 /// <param name="bitmap_add"></param>
854 /// <returns></returns>
855 public static bool[,] mergeParcelBitmaps(bool[,] bitmap_base, bool[,] bitmap_add)
856 {
857 if (bitmap_base.GetLength(0) != 64 || bitmap_base.GetLength(1) != 64 || bitmap_base.Rank != 2)
858 {
859 //Throw an exception - The bitmap is not 64x64
860 throw new Exception("Error: Invalid Parcel Bitmap - Bitmap_base in mergeParcelBitmaps");
861 }
862 if (bitmap_add.GetLength(0) != 64 || bitmap_add.GetLength(1) != 64 || bitmap_add.Rank != 2)
863 {
864 //Throw an exception - The bitmap is not 64x64
865 throw new Exception("Error: Invalid Parcel Bitmap - Bitmap_add in mergeParcelBitmaps");
866
867 }
868
869 int x, y;
870 for (y = 0; y < 64; y++)
871 {
872 for (x = 0; x < 64; x++)
873 {
874 if (bitmap_add[x, y])
875 {
876 bitmap_base[x, y] = true;
877 }
878 }
879 }
880 return bitmap_base;
881 }
882 #endregion
883
884 #endregion
885
886
887 }
888 #endregion
889
890
891}
diff --git a/OpenSim/Region/Environment/RegionManager.cs b/OpenSim/Region/Environment/RegionManager.cs
new file mode 100644
index 0000000..cd67e97
--- /dev/null
+++ b/OpenSim/Region/Environment/RegionManager.cs
@@ -0,0 +1,29 @@
1using System.Collections.Generic;
2using OpenSim.Framework;
3using OpenSim.Framework.Communications;
4using OpenSim.Framework.Servers;
5using OpenSim.Region.Capabilities;
6using OpenSim.Region.Environment.Scenes;
7
8namespace OpenSim.Region.Environment
9{
10 public class RegionManager //needs renaming , but first we need to rename the namespace
11 {
12 protected AuthenticateSessionsBase authenticateHandler;
13 protected RegionCommsListener regionCommsHost;
14 protected CommunicationsManager commsManager;
15 protected List<Caps> capsHandlers = new List<Caps>();
16 protected BaseHttpServer httpListener;
17
18 protected Scene m_Scene;
19
20 public ParcelManager parcelManager;
21 public EstateManager estateManager;
22
23 public RegionManager()
24 {
25
26 }
27
28 }
29}
diff --git a/OpenSim/Region/Environment/Scenes/Entity.cs b/OpenSim/Region/Environment/Scenes/Entity.cs
new file mode 100644
index 0000000..084c9ab
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/Entity.cs
@@ -0,0 +1,115 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
30using OpenSim.Physics.Manager;
31
32namespace OpenSim.Region.Environment.Scenes
33{
34 public abstract class Entity :EntityBase //this class (Entity) will be phased out
35 {
36 protected PhysicsActor _physActor;
37
38 /// <summary>
39 ///
40 /// </summary>
41 public override LLVector3 Pos
42 {
43 get
44 {
45 if (this._physActor != null)
46 {
47 m_pos.X = _physActor.Position.X;
48 m_pos.Y = _physActor.Position.Y;
49 m_pos.Z = _physActor.Position.Z;
50 }
51
52 return m_pos;
53 }
54 set
55 {
56 if (this._physActor != null)
57 {
58 try
59 {
60 lock (this.m_world.SyncRoot)
61 {
62
63 this._physActor.Position = new PhysicsVector(value.X, value.Y, value.Z);
64 }
65 }
66 catch (Exception e)
67 {
68 Console.WriteLine(e.Message);
69 }
70 }
71
72 m_pos = value;
73 }
74 }
75
76
77 /// <summary>
78 ///
79 /// </summary>
80 public override LLVector3 Velocity
81 {
82 get
83 {
84 if (this._physActor != null)
85 {
86 m_velocity.X = _physActor.Velocity.X;
87 m_velocity.Y = _physActor.Velocity.Y;
88 m_velocity.Z = _physActor.Velocity.Z;
89 }
90
91 return m_velocity;
92 }
93 set
94 {
95 if (this._physActor != null)
96 {
97 try
98 {
99 lock (this.m_world.SyncRoot)
100 {
101
102 this._physActor.Velocity = new PhysicsVector(value.X, value.Y, value.Z);
103 }
104 }
105 catch (Exception e)
106 {
107 Console.WriteLine(e.Message);
108 }
109 }
110
111 m_velocity = value;
112 }
113 }
114 }
115}
diff --git a/OpenSim/Region/Environment/Scenes/EntityBase.cs b/OpenSim/Region/Environment/Scenes/EntityBase.cs
new file mode 100644
index 0000000..65a0395
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/EntityBase.cs
@@ -0,0 +1,142 @@
1using System.Collections.Generic;
2using Axiom.Math;
3using libsecondlife;
4
5namespace OpenSim.Region.Environment.Scenes
6{
7 public abstract class EntityBase
8 {
9 public LLUUID uuid;
10
11 protected List<EntityBase> children;
12
13 protected Scene m_world;
14 protected string m_name;
15
16 /// <summary>
17 ///
18 /// </summary>
19 public virtual string Name
20 {
21 get { return m_name; }
22 set { m_name = value; }
23 }
24
25 protected LLVector3 m_pos;
26 /// <summary>
27 ///
28 /// </summary>
29 public virtual LLVector3 Pos
30 {
31 get
32 {
33 return m_pos;
34 }
35 set
36 {
37 m_pos = value;
38 }
39 }
40
41 public LLVector3 m_velocity;
42
43 /// <summary>
44 ///
45 /// </summary>
46 public virtual LLVector3 Velocity
47 {
48 get
49 {
50 return m_velocity;
51 }
52 set
53 {
54 m_velocity = value;
55 }
56 }
57
58 protected Quaternion m_rotation = new Quaternion(0,0,1,0);
59
60 public virtual Quaternion Rotation
61 {
62 get
63 {
64 return m_rotation;
65 }
66 set
67 {
68 m_rotation = value;
69 }
70 }
71
72 protected uint m_localId;
73
74 public uint LocalId
75 {
76 get { return m_localId; }
77 set { m_localId = value; }
78 }
79
80 /// <summary>
81 /// Creates a new Entity (should not occur on it's own)
82 /// </summary>
83 public EntityBase()
84 {
85 uuid = new LLUUID();
86
87 m_pos = new LLVector3();
88 m_velocity = new LLVector3();
89 Rotation = new Quaternion();
90 m_name = "(basic entity)";
91 children = new List<EntityBase>();
92 }
93
94 /// <summary>
95 ///
96 /// </summary>
97 public virtual void updateMovement()
98 {
99 foreach (EntityBase child in children)
100 {
101 child.updateMovement();
102 }
103 }
104
105 /// <summary>
106 /// Performs any updates that need to be done at each frame. This function is overridable from it's children.
107 /// </summary>
108 public virtual void update()
109 {
110 // Do any per-frame updates needed that are applicable to every type of entity
111 foreach (EntityBase child in children)
112 {
113 child.update();
114 }
115 }
116
117 /// <summary>
118 /// Called at a set interval to inform entities that they should back themsleves up to the DB
119 /// </summary>
120 public virtual void BackUp()
121 {
122
123 }
124
125 /// <summary>
126 /// Copies the entity
127 /// </summary>
128 /// <returns></returns>
129 public virtual EntityBase Copy()
130 {
131 return (EntityBase)this.MemberwiseClone();
132 }
133
134 /// <summary>
135 /// Infoms the entity that the land (heightmap) has changed
136 /// </summary>
137 public virtual void LandRenegerated()
138 {
139
140 }
141 }
142}
diff --git a/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs
new file mode 100644
index 0000000..7c3a033
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs
@@ -0,0 +1,14 @@
1using libsecondlife;
2using libsecondlife.Packets;
3using OpenSim.Framework.Interfaces;
4
5namespace OpenSim.Region.Environment.Scenes
6{
7 public interface IScenePresenceBody
8 {
9 void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation);
10 void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam);
11 void SendOurAppearance(IClientAPI OurClient);
12 void SendAppearanceToOtherAgent(ScenePresence avatarInfo);
13 }
14}
diff --git a/OpenSim/Region/Environment/Scenes/Primitive.cs b/OpenSim/Region/Environment/Scenes/Primitive.cs
new file mode 100644
index 0000000..d23a569
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/Primitive.cs
@@ -0,0 +1,594 @@
1using System;
2using System.Collections.Generic;
3using Axiom.Math;
4using libsecondlife;
5using libsecondlife.Packets;
6using OpenSim.Framework.Interfaces;
7using OpenSim.Framework.Inventory;
8using OpenSim.Framework.Types;
9
10namespace OpenSim.Region.Environment.Scenes
11{
12 public class Primitive : EntityBase
13 {
14 private const uint FULL_MASK_PERMISSIONS = 2147483647;
15
16 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
17 private ulong m_regionHandle;
18 private byte updateFlag = 0;
19 private uint m_flags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456 + 128;
20
21 private Dictionary<LLUUID, InventoryItem> inventoryItems;
22
23 private string m_description = "";
24
25 public string SitName = "";
26 public string TouchName = "";
27 public string Text = "";
28
29 public LLUUID CreatorID;
30 public LLUUID OwnerID;
31 public LLUUID LastOwnerID;
32 public Int32 CreationDate;
33
34 public uint ParentID = 0;
35
36 public uint OwnerMask = FULL_MASK_PERMISSIONS;
37 public uint NextOwnerMask = FULL_MASK_PERMISSIONS;
38 public uint GroupMask = FULL_MASK_PERMISSIONS;
39 public uint EveryoneMask = FULL_MASK_PERMISSIONS;
40 public uint BaseMask = FULL_MASK_PERMISSIONS;
41
42 private PrimitiveBaseShape m_Shape;
43
44 public SceneObject m_RootParent;
45 public bool m_isRootPrim;
46 public EntityBase m_Parent;
47
48 #region Properties
49 /// <summary>
50 /// If rootprim, will return world position
51 /// otherwise will return local offset from rootprim
52 /// </summary>
53 public override LLVector3 Pos
54 {
55 get
56 {
57 if (m_isRootPrim)
58 {
59 //if we are rootprim then our offset should be zero
60 return this.m_pos + m_Parent.Pos;
61 }
62 else
63 {
64 return this.m_pos;
65 }
66 }
67 set
68 {
69 if (m_isRootPrim)
70 {
71 m_Parent.Pos = value;
72 }
73 this.m_pos = value - m_Parent.Pos;
74 }
75
76 }
77
78 public LLVector3 WorldPos
79 {
80 get
81 {
82 if (!this.m_isRootPrim)
83 {
84 Primitive parentPrim = (Primitive)this.m_Parent;
85 Axiom.Math.Vector3 offsetPos = new Vector3(this.m_pos.X, this.m_pos.Y, this.m_pos.Z);
86 offsetPos = parentPrim.Rotation * offsetPos;
87 return parentPrim.WorldPos + new LLVector3(offsetPos.x, offsetPos.y, offsetPos.z);
88 }
89 else
90 {
91 return this.Pos;
92 }
93 }
94 }
95
96 public string Description
97 {
98 get
99 {
100 return this.m_description;
101 }
102 set
103 {
104 this.m_description = value;
105 }
106 }
107
108 public LLVector3 Scale
109 {
110 set
111 {
112 this.m_Shape.Scale = value;
113 }
114 get
115 {
116 return this.m_Shape.Scale;
117 }
118 }
119 #endregion
120
121 #region Constructors
122 /// <summary>
123 ///
124 /// </summary>
125 /// <param name="regionHandle"></param>
126 /// <param name="world"></param>
127 /// <param name="addPacket"></param>
128 /// <param name="ownerID"></param>
129 /// <param name="localID"></param>
130 /// <param name="isRoot"></param>
131 /// <param name="parent"></param>
132 /// <param name="rootObject"></param>
133 public Primitive(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID, bool isRoot, EntityBase parent, SceneObject rootObject)
134 {
135 m_regionHandle = regionHandle;
136 m_world = world;
137 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
138 this.m_Parent = parent;
139 this.m_isRootPrim = isRoot;
140 this.m_RootParent = rootObject;
141 this.CreateFromPacket(addPacket, ownerID, localID);
142 this.Rotation = Axiom.Math.Quaternion.Identity;
143 }
144
145 /// <summary>
146 ///
147 /// </summary>
148 /// <remarks>Empty constructor for duplication</remarks>
149 public Primitive()
150 {
151
152 }
153
154 #endregion
155
156 #region Duplication
157
158 public Primitive Copy(EntityBase parent, SceneObject rootParent)
159 {
160 Primitive dupe = (Primitive)this.MemberwiseClone();
161 // TODO: Copy this properly.
162 dupe.inventoryItems = this.inventoryItems;
163 dupe.m_Parent = parent;
164 dupe.m_RootParent = rootParent;
165 // TODO: Copy this properly.
166 dupe.m_Shape = this.m_Shape;
167
168 uint newLocalID = this.m_world.PrimIDAllocate();
169 dupe.LocalId = newLocalID;
170
171 dupe.Scale = new LLVector3(this.Scale.X, this.Scale.Y, this.Scale.Z);
172 dupe.Rotation = new Quaternion(this.Rotation.w, this.Rotation.x, this.Rotation.y, this.Rotation.z);
173 dupe.Pos = new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z);
174
175 return dupe;
176 }
177
178 #endregion
179
180
181 #region Override from EntityBase
182 /// <summary>
183 ///
184 /// </summary>
185 public override void update()
186 {
187 if (this.updateFlag == 1) // is a new prim just been created/reloaded or has major changes
188 {
189 this.SendFullUpdateToAllClients();
190 this.updateFlag = 0;
191 }
192 if (this.updateFlag == 2) //some change has been made so update the clients
193 {
194 this.SendTerseUpdateToALLClients();
195 this.updateFlag = 0;
196 }
197
198 foreach (EntityBase child in children)
199 {
200 child.update();
201 }
202 }
203 #endregion
204
205 #region Setup
206 /// <summary>
207 ///
208 /// </summary>
209 /// <param name="addPacket"></param>
210 /// <param name="ownerID"></param>
211 /// <param name="localID"></param>
212 public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
213 {
214 this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
215 this.OwnerID = ownerID;
216 this.CreatorID = this.OwnerID;
217 this.LastOwnerID = LLUUID.Zero;
218 this.Pos = addPacket.ObjectData.RayEnd;
219 this.uuid = LLUUID.Random();
220 this.m_localId = (uint)(localID);
221
222 PrimitiveBaseShape pShape = new PrimitiveBaseShape();
223 this.m_Shape = pShape;
224
225 pShape.PCode = addPacket.ObjectData.PCode;
226 pShape.PathBegin = addPacket.ObjectData.PathBegin;
227 pShape.PathEnd = addPacket.ObjectData.PathEnd;
228 pShape.PathScaleX = addPacket.ObjectData.PathScaleX;
229 pShape.PathScaleY = addPacket.ObjectData.PathScaleY;
230 pShape.PathShearX = addPacket.ObjectData.PathShearX;
231 pShape.PathShearY = addPacket.ObjectData.PathShearY;
232 pShape.PathSkew = addPacket.ObjectData.PathSkew;
233 pShape.ProfileBegin = addPacket.ObjectData.ProfileBegin;
234 pShape.ProfileEnd = addPacket.ObjectData.ProfileEnd;
235 pShape.Scale = addPacket.ObjectData.Scale;
236 pShape.PathCurve = addPacket.ObjectData.PathCurve;
237 pShape.ProfileCurve = addPacket.ObjectData.ProfileCurve;
238 pShape.ProfileHollow = addPacket.ObjectData.ProfileHollow;
239 pShape.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
240 pShape.PathRevolutions = addPacket.ObjectData.PathRevolutions;
241 pShape.PathTaperX = addPacket.ObjectData.PathTaperX;
242 pShape.PathTaperY = addPacket.ObjectData.PathTaperY;
243 pShape.PathTwist = addPacket.ObjectData.PathTwist;
244 pShape.PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
245
246 this.updateFlag = 1;
247 }
248 #endregion
249
250 #region Linking / unlinking
251 /// <summary>
252 ///
253 /// </summary>
254 /// <param name="linkObject"></param>
255 public void AddNewChildren(SceneObject linkObject)
256 {
257 // Console.WriteLine("linking new prims " + linkObject.rootLocalID + " to me (" + this.LocalId + ")");
258 //TODO check permissions
259 this.children.Add(linkObject.rootPrimitive);
260 linkObject.rootPrimitive.SetNewParent(this, this.m_RootParent);
261
262 this.m_world.DeleteEntity(linkObject.rootUUID);
263 linkObject.DeleteAllChildren();
264 }
265
266 /// <summary>
267 ///
268 /// </summary>
269 /// <param name="newParent"></param>
270 /// <param name="rootParent"></param>
271 public void SetNewParent(Primitive newParent, SceneObject rootParent)
272 {
273 LLVector3 oldPos = new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z);
274 this.m_isRootPrim = false;
275 this.m_Parent = newParent;
276 this.ParentID = newParent.LocalId;
277 this.m_RootParent = rootParent;
278 this.m_RootParent.AddChildToList(this);
279 this.Pos = oldPos;
280 Axiom.Math.Vector3 axPos = new Axiom.Math.Vector3(this.m_pos.X, m_pos.Y, m_pos.Z);
281 axPos = this.m_Parent.Rotation.Inverse() * axPos;
282 this.m_pos = new LLVector3(axPos.x, axPos.y, axPos.z);
283 Axiom.Math.Quaternion oldRot = new Quaternion(this.Rotation.w, this.Rotation.x, this.Rotation.y, this.Rotation.z);
284 this.Rotation = this.m_Parent.Rotation.Inverse() * this.Rotation;
285 this.updateFlag = 1;
286
287 foreach (Primitive child in children)
288 {
289 child.SetRootParent(rootParent, newParent, oldPos, oldRot);
290 }
291 children.Clear();
292
293
294 }
295
296 /// <summary>
297 ///
298 /// </summary>
299 /// <param name="newRoot"></param>
300 public void SetRootParent(SceneObject newRoot , Primitive newParent, LLVector3 oldParentPosition, Axiom.Math.Quaternion oldParentRotation)
301 {
302 LLVector3 oldPos = new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z);
303 Axiom.Math.Vector3 axOldPos = new Vector3(oldPos.X, oldPos.Y, oldPos.Z);
304 axOldPos = oldParentRotation * axOldPos;
305 oldPos = new LLVector3(axOldPos.x, axOldPos.y, axOldPos.z);
306 oldPos += oldParentPosition;
307 Axiom.Math.Quaternion oldRot = new Quaternion(this.Rotation.w, this.Rotation.x, this.Rotation.y, this.Rotation.z);
308 this.m_isRootPrim = false;
309 this.m_Parent = newParent;
310 this.ParentID = newParent.LocalId;
311 newParent.AddToChildrenList(this);
312 this.m_RootParent = newRoot;
313 this.m_RootParent.AddChildToList(this);
314 this.Pos = oldPos;
315 Axiom.Math.Vector3 axPos = new Axiom.Math.Vector3(this.m_pos.X, m_pos.Y, m_pos.Z);
316 axPos = this.m_Parent.Rotation.Inverse() * axPos;
317 this.m_pos = new LLVector3(axPos.x, axPos.y, axPos.z);
318 this.Rotation = oldParentRotation * this.Rotation;
319 this.Rotation = this.m_Parent.Rotation.Inverse()* this.Rotation ;
320 this.updateFlag = 1;
321 foreach (Primitive child in children)
322 {
323 child.SetRootParent(newRoot, newParent, oldPos, oldRot);
324 }
325 children.Clear();
326 }
327
328 /// <summary>
329 ///
330 /// </summary>
331 /// <param name="offset"></param>
332 public void AddOffsetToChildren(LLVector3 offset)
333 {
334 foreach (Primitive prim in this.children)
335 {
336 prim.m_pos += offset;
337 prim.updateFlag = 2;
338 }
339 }
340
341 /// <summary>
342 ///
343 /// </summary>
344 /// <param name="prim"></param>
345 public void AddToChildrenList(Primitive prim)
346 {
347 this.children.Add(prim);
348 }
349 #endregion
350
351 #region Resizing/Scale
352 /// <summary>
353 ///
354 /// </summary>
355 /// <param name="scale"></param>
356 public void ResizeGoup(LLVector3 scale)
357 {
358 LLVector3 offset = (scale - this.m_Shape.Scale);
359 offset.X /= 2;
360 offset.Y /= 2;
361 offset.Z /= 2;
362 if (this.m_isRootPrim)
363 {
364 this.m_Parent.Pos += offset;
365 }
366 else
367 {
368 this.m_pos += offset;
369 }
370
371 this.AddOffsetToChildren(new LLVector3(-offset.X, -offset.Y, -offset.Z));
372 this.m_Shape.Scale = scale;
373
374 this.updateFlag = 1;
375 }
376 #endregion
377
378 #region Position
379 /// <summary>
380 ///
381 /// </summary>
382 /// <param name="pos"></param>
383 public void UpdateGroupPosition(LLVector3 pos)
384 {
385 LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z);
386
387 this.Pos = newPos;
388 this.updateFlag = 2;
389 }
390
391 /// <summary>
392 ///
393 /// </summary>
394 /// <param name="pos"></param>
395 public void UpdateSinglePosition(LLVector3 pos)
396 {
397 // Console.WriteLine("updating single prim position");
398 if (this.m_isRootPrim)
399 {
400 LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z);
401 LLVector3 oldPos = new LLVector3(Pos.X, Pos.Y, Pos.Z);
402 LLVector3 diff = oldPos - newPos;
403 Axiom.Math.Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z);
404 axDiff = this.Rotation.Inverse() * axDiff;
405 diff.X = axDiff.x;
406 diff.Y = axDiff.y;
407 diff.Z = axDiff.z;
408 this.Pos = newPos;
409
410 foreach (Primitive prim in this.children)
411 {
412 prim.m_pos += diff;
413 prim.updateFlag = 2;
414 }
415 this.updateFlag = 2;
416 }
417 else
418 {
419 LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z);
420 this.m_pos = newPos;
421 this.updateFlag = 2;
422 }
423 }
424
425 #endregion
426
427 #region Rotation
428 /// <summary>
429 ///
430 /// </summary>
431 /// <param name="rot"></param>
432 public void UpdateGroupRotation(LLQuaternion rot)
433 {
434 this.Rotation = new Axiom.Math.Quaternion(rot.W, rot.X, rot.Y, rot.Z);
435 this.updateFlag = 2;
436
437 }
438
439 /// <summary>
440 ///
441 /// </summary>
442 /// <param name="pos"></param>
443 /// <param name="rot"></param>
444 public void UpdateGroupMouseRotation(LLVector3 pos, LLQuaternion rot)
445 {
446 this.Rotation = new Axiom.Math.Quaternion(rot.W, rot.X, rot.Y, rot.Z);
447 this.Pos = pos;
448 this.updateFlag = 2;
449 }
450
451 /// <summary>
452 ///
453 /// </summary>
454 /// <param name="rot"></param>
455 public void UpdateSingleRotation(LLQuaternion rot)
456 {
457 //Console.WriteLine("updating single prim rotation");
458 Axiom.Math.Quaternion axRot = new Axiom.Math.Quaternion(rot.W, rot.X, rot.Y, rot.Z);
459 Axiom.Math.Quaternion oldParentRot = new Quaternion(this.Rotation.w, this.Rotation.x, this.Rotation.y, this.Rotation.z);
460 this.Rotation = axRot;
461 foreach (Primitive prim in this.children)
462 {
463 Axiom.Math.Vector3 axPos = new Vector3(prim.m_pos.X, prim.m_pos.Y, prim.m_pos.Z);
464 axPos = oldParentRot * axPos;
465 axPos = axRot.Inverse() * axPos;
466 prim.m_pos = new LLVector3(axPos.x, axPos.y, axPos.z);
467 prim.Rotation = oldParentRot * prim.Rotation ;
468 prim.Rotation = axRot.Inverse()* prim.Rotation;
469 prim.updateFlag = 2;
470 }
471 this.updateFlag = 2;
472 }
473 #endregion
474
475 #region Shape
476 /// <summary>
477 ///
478 /// </summary>
479 /// <param name="shapeBlock"></param>
480 public void UpdateShape(ObjectShapePacket.ObjectDataBlock shapeBlock)
481 {
482 this.m_Shape.PathBegin = shapeBlock.PathBegin;
483 this.m_Shape.PathEnd = shapeBlock.PathEnd;
484 this.m_Shape.PathScaleX = shapeBlock.PathScaleX;
485 this.m_Shape.PathScaleY = shapeBlock.PathScaleY;
486 this.m_Shape.PathShearX = shapeBlock.PathShearX;
487 this.m_Shape.PathShearY = shapeBlock.PathShearY;
488 this.m_Shape.PathSkew = shapeBlock.PathSkew;
489 this.m_Shape.ProfileBegin = shapeBlock.ProfileBegin;
490 this.m_Shape.ProfileEnd = shapeBlock.ProfileEnd;
491 this.m_Shape.PathCurve = shapeBlock.PathCurve;
492 this.m_Shape.ProfileCurve = shapeBlock.ProfileCurve;
493 this.m_Shape.ProfileHollow = shapeBlock.ProfileHollow;
494 this.m_Shape.PathRadiusOffset = shapeBlock.PathRadiusOffset;
495 this.m_Shape.PathRevolutions = shapeBlock.PathRevolutions;
496 this.m_Shape.PathTaperX = shapeBlock.PathTaperX;
497 this.m_Shape.PathTaperY = shapeBlock.PathTaperY;
498 this.m_Shape.PathTwist = shapeBlock.PathTwist;
499 this.m_Shape.PathTwistBegin = shapeBlock.PathTwistBegin;
500 this.updateFlag = 1;
501 }
502 #endregion
503
504 #region Client Update Methods
505
506 /// <summary>
507 ///
508 /// </summary>
509 /// <param name="remoteClient"></param>
510 public void SendFullUpdateForAllChildren(IClientAPI remoteClient)
511 {
512 this.SendFullUpdateToClient(remoteClient);
513 for (int i = 0; i < this.children.Count; i++)
514 {
515 if (this.children[i] is Primitive)
516 {
517 ((Primitive)this.children[i]).SendFullUpdateForAllChildren(remoteClient);
518 }
519 }
520 }
521
522 /// <summary>
523 ///
524 /// </summary>
525 /// <param name="remoteClient"></param>
526 public void SendFullUpdateToClient(IClientAPI remoteClient)
527 {
528 LLVector3 lPos;
529 lPos = this.Pos;
530 LLQuaternion lRot;
531 lRot = new LLQuaternion(this.Rotation.x, this.Rotation.y, this.Rotation.z, this.Rotation.w);
532
533 remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.m_Shape, lPos, lRot, new LLUUID("00000000-0000-0000-9999-000000000005"), this.m_flags, this.uuid, this.OwnerID, this.Text, this.ParentID);
534 }
535
536 /// <summary>
537 ///
538 /// </summary>
539 public void SendFullUpdateToAllClients()
540 {
541 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
542 for (int i = 0; i < avatars.Count; i++)
543 {
544 this.SendFullUpdateToClient(avatars[i].ControllingClient);
545 }
546 }
547
548 /// <summary>
549 ///
550 /// </summary>
551 /// <param name="remoteClient"></param>
552 public void SendTerseUpdateForAllChildren(IClientAPI remoteClient)
553 {
554 this.SendTerseUpdateToClient(remoteClient);
555 for (int i = 0; i < this.children.Count; i++)
556 {
557 if (this.children[i] is Primitive)
558 {
559 ((Primitive)this.children[i]).SendTerseUpdateForAllChildren(remoteClient);
560 }
561 }
562 }
563
564 /// <summary>
565 ///
566 /// </summary>
567 /// <param name="RemoteClient"></param>
568 public void SendTerseUpdateToClient(IClientAPI RemoteClient)
569 {
570 LLVector3 lPos;
571 Quaternion lRot;
572
573 lPos = this.Pos;
574 lRot = this.Rotation;
575
576 LLQuaternion mRot = new LLQuaternion(lRot.x, lRot.y, lRot.z, lRot.w);
577 RemoteClient.SendPrimTerseUpdate(this.m_regionHandle, 64096, this.LocalId, lPos, mRot);
578 }
579
580 /// <summary>
581 ///
582 /// </summary>
583 public void SendTerseUpdateToALLClients()
584 {
585 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
586 for (int i = 0; i < avatars.Count; i++)
587 {
588 this.SendTerseUpdateToClient(avatars[i].ControllingClient);
589 }
590 }
591
592 #endregion
593 }
594}
diff --git a/OpenSim/Region/Environment/Scenes/PrimitiveOld.cs b/OpenSim/Region/Environment/Scenes/PrimitiveOld.cs
new file mode 100644
index 0000000..91a4162
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/PrimitiveOld.cs
@@ -0,0 +1,583 @@
1
2/*
3* Copyright (c) Contributors, http://www.openmetaverse.org/
4* See CONTRIBUTORS.TXT for a full list of copyright holders.
5*
6* Redistribution and use in source and binary forms, with or without
7* modification, are permitted provided that the following conditions are met:
8* * Redistributions of source code must retain the above copyright
9* notice, this list of conditions and the following disclaimer.
10* * Redistributions in binary form must reproduce the above copyright
11* notice, this list of conditions and the following disclaimer in the
12* documentation and/or other materials provided with the distribution.
13* * Neither the name of the OpenSim Project nor the
14* names of its contributors may be used to endorse or promote products
15* derived from this software without specific prior written permission.
16*
17* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
18* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
21* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*
28*/
29using System;
30using System.Collections.Generic;
31using System.Text;
32using Axiom.Math;
33using libsecondlife;
34using libsecondlife.Packets;
35using OpenSim.Framework.Interfaces;
36using OpenSim.Framework.Inventory;
37using OpenSim.Framework.Types;
38using OpenSim.Physics.Manager;
39
40namespace OpenSim.Region.Environment.Scenes
41{
42 public class PrimitiveOld : Entity
43 {
44 internal PrimData primData;
45 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
46 // private ClientManager m_clientThreads;
47 private ulong m_regionHandle;
48 private const uint FULL_MASK_PERMISSIONS = 2147483647;
49 private bool physicsEnabled = false;
50 private byte updateFlag = 0;
51 private uint flags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456 + 128;
52
53 private Dictionary<LLUUID, InventoryItem> inventoryItems;
54
55 #region Properties
56
57 public LLVector3 Scale
58 {
59 set
60 {
61 this.primData.Scale = value;
62 //this.dirtyFlag = true;
63 }
64 get
65 {
66 return this.primData.Scale;
67 }
68 }
69
70 public PhysicsActor PhysActor
71 {
72 set
73 {
74 this._physActor = value;
75 }
76 }
77
78 public override LLVector3 Pos
79 {
80 get
81 {
82 return base.Pos;
83 }
84 set
85 {
86 base.Pos = value;
87 }
88 }
89 #endregion
90
91 /// <summary>
92 ///
93 /// </summary>
94 /// <param name="clientThreads"></param>
95 /// <param name="regionHandle"></param>
96 /// <param name="world"></param>
97 public PrimitiveOld( ulong regionHandle, Scene world)
98 {
99 // m_clientThreads = clientThreads;
100 m_regionHandle = regionHandle;
101 m_world = world;
102 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
103 }
104
105 /// <summary>
106 ///
107 /// </summary>
108 /// <param name="regionHandle"></param>
109 /// <param name="world"></param>
110 /// <param name="addPacket"></param>
111 /// <param name="ownerID"></param>
112 /// <param name="localID"></param>
113 public PrimitiveOld(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
114 {
115 // m_clientThreads = clientThreads;
116 m_regionHandle = regionHandle;
117 m_world = world;
118 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
119 this.CreateFromPacket(addPacket, ownerID, localID);
120 }
121
122 /// <summary>
123 ///
124 /// </summary>
125 /// <param name="clientThreads"></param>
126 /// <param name="regionHandle"></param>
127 /// <param name="world"></param>
128 /// <param name="owner"></param>
129 /// <param name="fullID"></param>
130 /// <param name="localID"></param>
131 public PrimitiveOld( ulong regionHandle, Scene world, LLUUID owner, LLUUID fullID, uint localID)
132 {
133 // m_clientThreads = clientThreads;
134 m_regionHandle = regionHandle;
135 m_world = world;
136 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
137 this.primData = new PrimData();
138 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
139 this.primData.OwnerID = owner;
140 this.primData.FullID = this.uuid = fullID;
141 this.primData.LocalID = m_localId = localID;
142 }
143
144 /// <summary>
145 /// Constructor to create a default cube
146 /// </summary>
147 /// <param name="clientThreads"></param>
148 /// <param name="regionHandle"></param>
149 /// <param name="world"></param>
150 /// <param name="owner"></param>
151 /// <param name="localID"></param>
152 /// <param name="position"></param>
153 public PrimitiveOld( ulong regionHandle, Scene world, LLUUID owner, uint localID, LLVector3 position)
154 {
155 //m_clientThreads = clientThreads;
156 m_regionHandle = regionHandle;
157 m_world = world;
158 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
159 this.primData = PrimData.DefaultCube();
160 this.primData.OwnerID = owner;
161 this.primData.LocalID = m_localId = localID;
162 this.Pos = this.primData.Position = position;
163
164 this.updateFlag = 1;
165 }
166
167 /// <summary>
168 ///
169 /// </summary>
170 /// <returns></returns>
171 public byte[] GetByteArray()
172 {
173 byte[] result = null;
174 List<byte[]> dataArrays = new List<byte[]>();
175 dataArrays.Add(primData.ToBytes());
176 foreach (Entity child in children)
177 {
178 if (child is PrimitiveOld)
179 {
180 dataArrays.Add(((PrimitiveOld)child).GetByteArray());
181 }
182 }
183 byte[] primstart = Helpers.StringToField("<Prim>");
184 byte[] primend = Helpers.StringToField("</Prim>");
185 int totalLength = primstart.Length + primend.Length;
186 for (int i = 0; i < dataArrays.Count; i++)
187 {
188 totalLength += dataArrays[i].Length;
189 }
190
191 result = new byte[totalLength];
192 int arraypos = 0;
193 Array.Copy(primstart, 0, result, 0, primstart.Length);
194 arraypos += primstart.Length;
195 for (int i = 0; i < dataArrays.Count; i++)
196 {
197 Array.Copy(dataArrays[i], 0, result, arraypos, dataArrays[i].Length);
198 arraypos += dataArrays[i].Length;
199 }
200 Array.Copy(primend, 0, result, arraypos, primend.Length);
201
202 return result;
203 }
204
205 #region Overridden Methods
206
207 /// <summary>
208 ///
209 /// </summary>
210 public override void update()
211 {
212 if (this.updateFlag == 1) // is a new prim just been created/reloaded
213 {
214 this.SendFullUpdateToAllClients();
215 this.updateFlag = 0;
216 }
217 if (this.updateFlag == 2) //some change has been made so update the clients
218 {
219 this.SendTerseUpdateToALLClients();
220 this.updateFlag = 0;
221 }
222 }
223
224 /// <summary>
225 ///
226 /// </summary>
227 public override void BackUp()
228 {
229
230 }
231
232 #endregion
233
234 #region Packet handlers
235
236 /// <summary>
237 ///
238 /// </summary>
239 /// <param name="pos"></param>
240 public void UpdatePosition(LLVector3 pos)
241 {
242 this.Pos = new LLVector3(pos.X, pos.Y, pos.Z);
243 this.updateFlag = 2;
244 }
245
246 /// <summary>
247 ///
248 /// </summary>
249 /// <param name="addPacket"></param>
250 public void UpdateShape(ObjectShapePacket.ObjectDataBlock updatePacket)
251 {
252 this.primData.PathBegin = updatePacket.PathBegin;
253 this.primData.PathEnd = updatePacket.PathEnd;
254 this.primData.PathScaleX = updatePacket.PathScaleX;
255 this.primData.PathScaleY = updatePacket.PathScaleY;
256 this.primData.PathShearX = updatePacket.PathShearX;
257 this.primData.PathShearY = updatePacket.PathShearY;
258 this.primData.PathSkew = updatePacket.PathSkew;
259 this.primData.ProfileBegin = updatePacket.ProfileBegin;
260 this.primData.ProfileEnd = updatePacket.ProfileEnd;
261 this.primData.PathCurve = updatePacket.PathCurve;
262 this.primData.ProfileCurve = updatePacket.ProfileCurve;
263 this.primData.ProfileHollow = updatePacket.ProfileHollow;
264 this.primData.PathRadiusOffset = updatePacket.PathRadiusOffset;
265 this.primData.PathRevolutions = updatePacket.PathRevolutions;
266 this.primData.PathTaperX = updatePacket.PathTaperX;
267 this.primData.PathTaperY = updatePacket.PathTaperY;
268 this.primData.PathTwist = updatePacket.PathTwist;
269 this.primData.PathTwistBegin = updatePacket.PathTwistBegin;
270 }
271
272 /// <summary>
273 ///
274 /// </summary>
275 /// <param name="tex"></param>
276 public void UpdateTexture(byte[] tex)
277 {
278 this.primData.TextureEntry = tex;
279 }
280
281 /// <summary>
282 ///
283 /// </summary>
284 /// <param name="pack"></param>
285 public void UpdateObjectFlags(ObjectFlagUpdatePacket pack)
286 {
287
288 }
289
290 /// <summary>
291 ///
292 /// </summary>
293 /// <param name="prim"></param>
294 public void AssignToParent(PrimitiveOld prim)
295 {
296
297 }
298
299 #endregion
300
301 # region Inventory Methods
302 /// <summary>
303 ///
304 /// </summary>
305 /// <param name="item"></param>
306 /// <returns></returns>
307 public bool AddToInventory(InventoryItem item)
308 {
309 return false;
310 }
311
312 /// <summary>
313 ///
314 /// </summary>
315 /// <param name="itemID"></param>
316 /// <returns></returns>
317 public InventoryItem RemoveFromInventory(LLUUID itemID)
318 {
319 return null;
320 }
321
322 /// <summary>
323 ///
324 /// </summary>
325 /// <param name="simClient"></param>
326 /// <param name="packet"></param>
327 public void RequestInventoryInfo(IClientAPI simClient, RequestTaskInventoryPacket packet)
328 {
329
330 }
331
332 /// <summary>
333 ///
334 /// </summary>
335 /// <param name="simClient"></param>
336 /// <param name="xferID"></param>
337 public void RequestXferInventory(IClientAPI simClient, ulong xferID)
338 {
339 //will only currently work if the total size of the inventory data array is under about 1000 bytes
340 SendXferPacketPacket send = new SendXferPacketPacket();
341
342 send.XferID.ID = xferID;
343 send.XferID.Packet = 1 + 2147483648;
344 send.DataPacket.Data = this.ConvertInventoryToBytes();
345
346 simClient.OutPacket(send);
347 }
348
349 /// <summary>
350 ///
351 /// </summary>
352 /// <returns></returns>
353 public byte[] ConvertInventoryToBytes()
354 {
355 Encoding enc = Encoding.ASCII;
356 byte[] result = new byte[0];
357 List<byte[]> inventoryData = new List<byte[]>();
358 int totallength = 0;
359 foreach (InventoryItem invItem in inventoryItems.Values)
360 {
361 byte[] data = enc.GetBytes(invItem.ExportString());
362 inventoryData.Add(data);
363 totallength += data.Length;
364 }
365 //TODO: copy arrays into the single result array
366
367 return result;
368 }
369
370 /// <summary>
371 ///
372 /// </summary>
373 /// <param name="data"></param>
374 public void CreateInventoryFromBytes(byte[] data)
375 {
376
377 }
378
379 #endregion
380
381 #region Update viewers Methods
382
383 /// <summary>
384 ///
385 /// </summary>
386 /// <param name="remoteClient"></param>
387 public void SendFullUpdateForAllChildren(IClientAPI remoteClient)
388 {
389 this.SendFullUpdateToClient(remoteClient);
390 for (int i = 0; i < this.children.Count; i++)
391 {
392 if (this.children[i] is PrimitiveOld)
393 {
394 ((PrimitiveOld)this.children[i]).SendFullUpdateForAllChildren(remoteClient);
395 }
396 }
397 }
398
399 /// <summary>
400 ///
401 /// </summary>
402 /// <param name="remoteClient"></param>
403 public void SendFullUpdateToClient(IClientAPI remoteClient)
404 {
405 LLVector3 lPos;
406 if (this._physActor != null && this.physicsEnabled)
407 {
408 PhysicsVector pPos = this._physActor.Position;
409 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
410 }
411 else
412 {
413 lPos = this.Pos;
414 }
415
416 remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.primData, lPos, new LLUUID("00000000-0000-0000-9999-000000000005"), this.flags);
417 }
418
419 /// <summary>
420 ///
421 /// </summary>
422 public void SendFullUpdateToAllClients()
423 {
424 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
425 for (int i = 0; i < avatars.Count; i++)
426 {
427 this.SendFullUpdateToClient(avatars[i].ControllingClient);
428 }
429 }
430
431 /// <summary>
432 ///
433 /// </summary>
434 /// <param name="RemoteClient"></param>
435 public void SendTerseUpdateToClient(IClientAPI RemoteClient)
436 {
437 LLVector3 lPos;
438 Quaternion lRot;
439 if (this._physActor != null && this.physicsEnabled) //is this needed ? doesn't the property fields do this for us?
440 {
441 PhysicsVector pPos = this._physActor.Position;
442 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
443 lRot = this._physActor.Orientation;
444 }
445 else
446 {
447 lPos = this.Pos;
448 lRot = this.Rotation;
449 }
450 LLQuaternion mRot = new LLQuaternion(lRot.x, lRot.y, lRot.z, lRot.w);
451 RemoteClient.SendPrimTerseUpdate(this.m_regionHandle, 64096, this.LocalId, lPos, mRot);
452 }
453
454 /// <summary>
455 ///
456 /// </summary>
457 public void SendTerseUpdateToALLClients()
458 {
459 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
460 for (int i = 0; i < avatars.Count; i++)
461 {
462 this.SendTerseUpdateToClient(avatars[i].ControllingClient);
463 }
464 }
465
466 #endregion
467
468 #region Create Methods
469
470 /// <summary>
471 ///
472 /// </summary>
473 /// <param name="addPacket"></param>
474 /// <param name="ownerID"></param>
475 /// <param name="localID"></param>
476 public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
477 {
478 PrimData PData = new PrimData();
479 this.primData = PData;
480 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
481
482 PData.OwnerID = ownerID;
483 PData.PCode = addPacket.ObjectData.PCode;
484 PData.PathBegin = addPacket.ObjectData.PathBegin;
485 PData.PathEnd = addPacket.ObjectData.PathEnd;
486 PData.PathScaleX = addPacket.ObjectData.PathScaleX;
487 PData.PathScaleY = addPacket.ObjectData.PathScaleY;
488 PData.PathShearX = addPacket.ObjectData.PathShearX;
489 PData.PathShearY = addPacket.ObjectData.PathShearY;
490 PData.PathSkew = addPacket.ObjectData.PathSkew;
491 PData.ProfileBegin = addPacket.ObjectData.ProfileBegin;
492 PData.ProfileEnd = addPacket.ObjectData.ProfileEnd;
493 PData.Scale = addPacket.ObjectData.Scale;
494 PData.PathCurve = addPacket.ObjectData.PathCurve;
495 PData.ProfileCurve = addPacket.ObjectData.ProfileCurve;
496 PData.ParentID = 0;
497 PData.ProfileHollow = addPacket.ObjectData.ProfileHollow;
498 PData.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
499 PData.PathRevolutions = addPacket.ObjectData.PathRevolutions;
500 PData.PathTaperX = addPacket.ObjectData.PathTaperX;
501 PData.PathTaperY = addPacket.ObjectData.PathTaperY;
502 PData.PathTwist = addPacket.ObjectData.PathTwist;
503 PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
504 LLVector3 pos1 = addPacket.ObjectData.RayEnd;
505 this.primData.FullID = this.uuid = LLUUID.Random();
506 this.primData.LocalID = m_localId = (uint)(localID);
507 this.primData.Position = this.Pos = pos1;
508
509 this.updateFlag = 1;
510 }
511
512 /// <summary>
513 ///
514 /// </summary>
515 /// <param name="data"></param>
516 public void CreateFromBytes(byte[] data)
517 {
518
519 }
520
521 /// <summary>
522 ///
523 /// </summary>
524 /// <param name="primData"></param>
525 public void CreateFromPrimData(PrimData primData)
526 {
527 this.CreateFromPrimData(primData, primData.Position, primData.LocalID, false);
528 }
529
530 /// <summary>
531 ///
532 /// </summary>
533 /// <param name="primData"></param>
534 /// <param name="posi"></param>
535 /// <param name="localID"></param>
536 /// <param name="newprim"></param>
537 public void CreateFromPrimData(PrimData primData, LLVector3 posi, uint localID, bool newprim)
538 {
539
540 }
541
542 public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
543 {
544 // Console.WriteLine("moving prim to new location " + pos.X + " , " + pos.Y + " , " + pos.Z);
545 this.Pos = pos;
546 this.SendTerseUpdateToALLClients();
547 }
548
549 public void GetProperites(IClientAPI client)
550 {
551 //needs changing
552 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
553 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
554 proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
555 proper.ObjectData[0].ItemID = LLUUID.Zero;
556 proper.ObjectData[0].CreationDate = (ulong)primData.CreationDate;
557 proper.ObjectData[0].CreatorID = primData.OwnerID;
558 proper.ObjectData[0].FolderID = LLUUID.Zero;
559 proper.ObjectData[0].FromTaskID = LLUUID.Zero;
560 proper.ObjectData[0].GroupID = LLUUID.Zero;
561 proper.ObjectData[0].InventorySerial = 0;
562 proper.ObjectData[0].LastOwnerID = LLUUID.Zero;
563 proper.ObjectData[0].ObjectID = this.uuid;
564 proper.ObjectData[0].OwnerID = primData.OwnerID;
565 proper.ObjectData[0].TouchName = new byte[0];
566 proper.ObjectData[0].TextureID = new byte[0];
567 proper.ObjectData[0].SitName = new byte[0];
568 proper.ObjectData[0].Name = new byte[0];
569 proper.ObjectData[0].Description = new byte[0];
570 proper.ObjectData[0].OwnerMask = primData.OwnerMask;
571 proper.ObjectData[0].NextOwnerMask = primData.NextOwnerMask;
572 proper.ObjectData[0].GroupMask = primData.GroupMask;
573 proper.ObjectData[0].EveryoneMask = primData.EveryoneMask;
574 proper.ObjectData[0].BaseMask = primData.BaseMask;
575
576 client.OutPacket(proper);
577
578 }
579
580 #endregion
581
582 }
583}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
new file mode 100644
index 0000000..69eaa75
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
@@ -0,0 +1,570 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
31using libsecondlife.Packets;
32using OpenSim.Framework.Interfaces;
33using OpenSim.Framework.Types;
34
35namespace OpenSim.Region.Environment.Scenes
36{
37 public partial class Scene
38 {
39 /// <summary>
40 /// Modifies terrain using the specified information
41 /// </summary>
42 /// <param name="height">The height at which the user started modifying the terrain</param>
43 /// <param name="seconds">The number of seconds the modify button was pressed</param>
44 /// <param name="brushsize">The size of the brush used</param>
45 /// <param name="action">The action to be performed</param>
46 /// <param name="north">Distance from the north border where the cursor is located</param>
47 /// <param name="west">Distance from the west border where the cursor is located</param>
48 public void ModifyTerrain(float height, float seconds, byte brushsize, byte action, float north, float west)
49 {
50 // Shiny.
51 double size = (double)(1 << brushsize);
52
53 switch (action)
54 {
55 case 0:
56 // flatten terrain
57 Terrain.flatten(north, west, size, (double)seconds / 100.0);
58 RegenerateTerrain(true, (int)north, (int)west);
59 break;
60 case 1:
61 // raise terrain
62 Terrain.raise(north, west, size, (double)seconds / 100.0);
63 RegenerateTerrain(true, (int)north, (int)west);
64 break;
65 case 2:
66 //lower terrain
67 Terrain.lower(north, west, size, (double)seconds / 100.0);
68 RegenerateTerrain(true, (int)north, (int)west);
69 break;
70 case 3:
71 // smooth terrain
72 Terrain.smooth(north, west, size, (double)seconds / 100.0);
73 RegenerateTerrain(true, (int)north, (int)west);
74 break;
75 case 4:
76 // noise
77 Terrain.noise(north, west, size, (double)seconds / 100.0);
78 RegenerateTerrain(true, (int)north, (int)west);
79 break;
80 case 5:
81 // revert
82 Terrain.revert(north, west, size, (double)seconds / 100.0);
83 RegenerateTerrain(true, (int)north, (int)west);
84 break;
85
86 // CLIENT EXTENSIONS GO HERE
87 case 128:
88 // erode-thermal
89 break;
90 case 129:
91 // erode-aerobic
92 break;
93 case 130:
94 // erode-hydraulic
95 break;
96 }
97 return;
98 }
99
100 /// <summary>
101 ///
102 /// </summary>
103 /// <remarks>Inefficient. TODO: Fixme</remarks>
104 /// <param name="fromAgentID"></param>
105 /// <param name="toAgentID"></param>
106 /// <param name="timestamp"></param>
107 /// <param name="fromAgentName"></param>
108 /// <param name="message"></param>
109 public void InstantMessage(LLUUID fromAgentID, LLUUID toAgentID, uint timestamp, string fromAgentName, string message)
110 {
111 if (this.Avatars.ContainsKey(toAgentID))
112 {
113 if (this.Avatars.ContainsKey(fromAgentID))
114 {
115 // Local sim message
116 ScenePresence avatar = this.Avatars[fromAgentID];
117 avatar.ControllingClient.SendInstantMessage(message, toAgentID);
118 }
119 else
120 {
121 // Message came from a user outside the sim, ignore?
122 }
123 }
124 else
125 {
126 // Grid message
127 }
128 }
129
130 /// <summary>
131 ///
132 /// </summary>
133 /// <param name="message"></param>
134 /// <param name="type"></param>
135 /// <param name="fromPos"></param>
136 /// <param name="fromName"></param>
137 /// <param name="fromAgentID"></param>
138 public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
139 {
140 // Console.WriteLine("Chat message");
141 ScenePresence avatar = null;
142
143 m_clientManager.ForEachClient(delegate(IClientAPI client)
144 {
145 int dis = -1000;
146 if (this.Avatars.ContainsKey(client.AgentId))
147 {
148 avatar = this.Avatars[client.AgentId];
149 // int dis = Util.fast_distance2d((int)(client.ClientAvatar.Pos.X - simClient.ClientAvatar.Pos.X), (int)(client.ClientAvatar.Pos.Y - simClient.ClientAvatar.Pos.Y));
150 dis = (int) avatar.Pos.GetDistanceTo(fromPos);
151 //Console.WriteLine("found avatar at " +dis);
152 }
153
154 switch (type)
155 {
156 case 0: // Whisper
157 if ((dis < 10) && (dis > -10))
158 {
159 //should change so the message is sent through the avatar rather than direct to the ClientView
160 client.SendChatMessage(message, type, fromPos, fromName,
161 fromAgentID);
162 }
163 break;
164 case 1: // Say
165 if ((dis < 30) && (dis > -30))
166 {
167 //Console.WriteLine("sending chat");
168 client.SendChatMessage(message, type, fromPos, fromName,
169 fromAgentID);
170 }
171 break;
172 case 2: // Shout
173 if ((dis < 100) && (dis > -100))
174 {
175 client.SendChatMessage(message, type, fromPos, fromName,
176 fromAgentID);
177 }
178 break;
179
180 case 0xff: // Broadcast
181 client.SendChatMessage(message, type, fromPos, fromName,
182 fromAgentID);
183 break;
184 }
185 });
186 }
187
188 /// <summary>
189 ///
190 /// </summary>
191 /// <param name="primAsset"></param>
192 /// <param name="pos"></param>
193 public void RezObject(AssetBase primAsset, LLVector3 pos)
194 {
195
196 }
197
198 /// <summary>
199 ///
200 /// </summary>
201 /// <param name="packet"></param>
202 /// <param name="simClient"></param>
203 public void DeRezObject(Packet packet, IClientAPI simClient)
204 {
205
206 }
207
208 /// <summary>
209 ///
210 /// </summary>
211 /// <param name="remoteClient"></param>
212 public void SendAvatarsToClient(IClientAPI remoteClient)
213 {
214
215 }
216
217 /// <summary>
218 ///
219 /// </summary>
220 /// <param name="originalPrim"></param>
221 /// <param name="offset"></param>
222 /// <param name="flags"></param>
223 public void DuplicateObject(uint originalPrim, LLVector3 offset, uint flags)
224 {
225 SceneObject originPrim = null;
226 foreach (EntityBase ent in Entities.Values)
227 {
228 if (ent is SceneObject)
229 {
230 if (((SceneObject)ent).rootLocalID == originalPrim)
231 {
232 originPrim = (SceneObject)ent;
233 break;
234 }
235 }
236 }
237
238 if (originPrim != null)
239 {
240 //SceneObject copy = originPrim.Copy();
241
242 }
243 else
244 {
245 OpenSim.Framework.Console.MainLog.Instance.Warn("Attempted to duplicate nonexistant prim");
246 }
247
248 }
249
250 /// <summary>
251 ///
252 /// </summary>
253 /// <param name="parentPrim"></param>
254 /// <param name="childPrims"></param>
255 public void LinkObjects(uint parentPrim, List<uint> childPrims)
256 {
257 SceneObject parenPrim = null;
258 foreach (EntityBase ent in Entities.Values)
259 {
260 if (ent is SceneObject)
261 {
262 if (((SceneObject)ent).rootLocalID == parentPrim)
263 {
264 parenPrim = (SceneObject)ent;
265 break;
266 }
267 }
268 }
269
270 List<SceneObject> children = new List<SceneObject>();
271 if (parenPrim != null)
272 {
273 for (int i = 0; i < childPrims.Count; i++)
274 {
275 foreach (EntityBase ent in Entities.Values)
276 {
277 if (ent is SceneObject)
278 {
279 if (((SceneObject)ent).rootLocalID == childPrims[i])
280 {
281 children.Add((SceneObject)ent);
282 }
283 }
284 }
285 }
286 }
287
288 foreach (SceneObject sceneObj in children)
289 {
290 parenPrim.AddNewChildPrims(sceneObj);
291 }
292 }
293
294 /// <summary>
295 ///
296 /// </summary>
297 /// <param name="primLocalID"></param>
298 /// <param name="shapeBlock"></param>
299 public void UpdatePrimShape(uint primLocalID, ObjectShapePacket.ObjectDataBlock shapeBlock)
300 {
301 Primitive prim = null;
302 foreach (EntityBase ent in Entities.Values)
303 {
304 if (ent is SceneObject)
305 {
306 prim = ((SceneObject)ent).HasChildPrim(primLocalID);
307 if (prim != null)
308 {
309 prim.UpdateShape(shapeBlock);
310 break;
311 }
312 }
313 }
314 }
315
316 /// <summary>
317 ///
318 /// </summary>
319 /// <param name="primLocalID"></param>
320 /// <param name="remoteClient"></param>
321 public void SelectPrim(uint primLocalID, IClientAPI remoteClient)
322 {
323 foreach (EntityBase ent in Entities.Values)
324 {
325 if (ent is SceneObject)
326 {
327 if (((SceneObject)ent).rootLocalID == primLocalID)
328 {
329 ((SceneObject)ent).GetProperites(remoteClient);
330 break;
331 }
332 }
333 }
334 }
335
336 /// <summary>
337 ///
338 /// </summary>
339 /// <param name="primLocalID"></param>
340 /// <param name="description"></param>
341 public void PrimDescription(uint primLocalID, string description)
342 {
343 Primitive prim = null;
344 foreach (EntityBase ent in Entities.Values)
345 {
346 if (ent is SceneObject)
347 {
348 prim = ((SceneObject)ent).HasChildPrim(primLocalID);
349 if (prim != null)
350 {
351 prim.Description = description;
352 break;
353 }
354 }
355 }
356 }
357
358 /// <summary>
359 ///
360 /// </summary>
361 /// <param name="primLocalID"></param>
362 /// <param name="description"></param>
363 public void PrimName(uint primLocalID, string name)
364 {
365 Primitive prim = null;
366 foreach (EntityBase ent in Entities.Values)
367 {
368 if (ent is SceneObject)
369 {
370 prim = ((SceneObject)ent).HasChildPrim(primLocalID);
371 if (prim != null)
372 {
373 prim.Name = name;
374 break;
375 }
376 }
377 }
378 }
379
380 public void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
381 {
382 Primitive prim = null;
383 foreach (EntityBase ent in Entities.Values)
384 {
385 if (ent is SceneObject)
386 {
387 prim = ((SceneObject)ent).HasChildPrim(objectID);
388 if (prim != null)
389 {
390 ((SceneObject)ent).GrapMovement(offset, pos, remoteClient);
391 break;
392 }
393 }
394 }
395 /*
396 if (this.Entities.ContainsKey(objectID))
397 {
398 if (this.Entities[objectID] is SceneObject)
399 {
400 ((SceneObject)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient);
401 }
402 }*/
403 }
404
405 /// <summary>
406 ///
407 /// </summary>
408 /// <param name="localID"></param>
409 /// <param name="packet"></param>
410 /// <param name="remoteClient"></param>
411 public void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient)
412 {
413
414 }
415
416 /// <summary>
417 ///
418 /// </summary>
419 /// <param name="localID"></param>
420 /// <param name="texture"></param>
421 /// <param name="remoteClient"></param>
422 public void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient)
423 {
424
425 }
426
427 /// <summary>
428 ///
429 /// </summary>
430 /// <param name="localID"></param>
431 /// <param name="pos"></param>
432 /// <param name="remoteClient"></param>
433 public void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient)
434 {
435 Primitive prim = null;
436 foreach (EntityBase ent in Entities.Values)
437 {
438 if (ent is SceneObject)
439 {
440 prim = ((SceneObject)ent).HasChildPrim(localID);
441 if (prim != null)
442 {
443 prim.UpdateGroupPosition(pos);
444 break;
445 }
446 }
447 }
448 }
449
450 public void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient)
451 {
452 Primitive prim = null;
453 foreach (EntityBase ent in Entities.Values)
454 {
455 if (ent is SceneObject)
456 {
457 prim = ((SceneObject)ent).HasChildPrim(localID);
458 if (prim != null)
459 {
460 prim.UpdateSinglePosition(pos);
461 break;
462 }
463 }
464 }
465 }
466
467 /// <summary>
468 ///
469 /// </summary>
470 /// <param name="localID"></param>
471 /// <param name="pos"></param>
472 /// <param name="rot"></param>
473 /// <param name="remoteClient"></param>
474 public void UpdatePrimRotation(uint localID, LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient)
475 {
476 Primitive prim = null;
477 foreach (EntityBase ent in Entities.Values)
478 {
479 if (ent is SceneObject)
480 {
481 prim = ((SceneObject)ent).HasChildPrim(localID);
482 if (prim != null)
483 {
484 prim.UpdateGroupMouseRotation( pos, rot);
485 break;
486 }
487 }
488 }
489 }
490
491 /// <summary>
492 ///
493 /// </summary>
494 /// <param name="localID"></param>
495 /// <param name="rot"></param>
496 /// <param name="remoteClient"></param>
497 public void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient)
498 {
499 Primitive prim = null;
500 foreach (EntityBase ent in Entities.Values)
501 {
502 if (ent is SceneObject)
503 {
504 prim = ((SceneObject)ent).HasChildPrim(localID);
505 if (prim != null)
506 {
507 prim.UpdateGroupRotation(rot);
508 break;
509 }
510 }
511 }
512 }
513
514 /// <summary>
515 ///
516 /// </summary>
517 /// <param name="localID"></param>
518 /// <param name="rot"></param>
519 /// <param name="remoteClient"></param>
520 public void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient)
521 {
522 //Console.WriteLine("trying to update single prim rotation");
523 Primitive prim = null;
524 foreach (EntityBase ent in Entities.Values)
525 {
526 if (ent is SceneObject)
527 {
528 prim = ((SceneObject)ent).HasChildPrim(localID);
529 if (prim != null)
530 {
531 prim.UpdateSingleRotation(rot);
532 break;
533 }
534 }
535 }
536 }
537
538 /// <summary>
539 ///
540 /// </summary>
541 /// <param name="localID"></param>
542 /// <param name="scale"></param>
543 /// <param name="remoteClient"></param>
544 public void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient)
545 {
546 Primitive prim = null;
547 foreach (EntityBase ent in Entities.Values)
548 {
549 if (ent is SceneObject)
550 {
551 prim = ((SceneObject)ent).HasChildPrim(localID);
552 if (prim != null)
553 {
554 prim.ResizeGoup(scale);
555 break;
556 }
557 }
558 }
559 }
560
561 /// <summary>
562 /// Sends prims to a client
563 /// </summary>
564 /// <param name="RemoteClient">Client to send to</param>
565 public void GetInitialPrims(IClientAPI RemoteClient)
566 {
567
568 }
569 }
570}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
new file mode 100644
index 0000000..d1f6038
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -0,0 +1,806 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Threading;
31using System.Timers;
32using libsecondlife;
33using libsecondlife.Packets;
34using OpenSim.Framework;
35using OpenSim.Framework.Communications;
36using OpenSim.Framework.Console;
37using OpenSim.Framework.Interfaces;
38using OpenSim.Framework.Servers;
39using OpenSim.Framework.Types;
40using OpenSim.Physics.Manager;
41using OpenSim.Region.Caches;
42using OpenSim.Region.Environment.Scripting;
43using OpenSim.Region.Terrain;
44using Caps=OpenSim.Region.Capabilities.Caps;
45using Timer=System.Timers.Timer;
46
47namespace OpenSim.Region.Environment.Scenes
48{
49 public delegate bool FilterAvatarList(ScenePresence avatar);
50
51 public partial class Scene : SceneBase, ILocalStorageReceiver
52 {
53 protected Timer m_heartbeatTimer = new Timer();
54 protected Dictionary<LLUUID, ScenePresence> Avatars;
55 protected Dictionary<LLUUID, SceneObject> Prims;
56 private PhysicsScene phyScene;
57 private float timeStep = 0.1f;
58 private Random Rand = new Random();
59 private uint _primCount = 702000;
60 private System.Threading.Mutex _primAllocateMutex = new Mutex(false);
61 private int storageCount;
62 private Mutex updateLock;
63
64 protected AuthenticateSessionsBase authenticateHandler;
65 protected RegionCommsListener regionCommsHost;
66 protected CommunicationsManager commsManager;
67
68 protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>();
69 protected BaseHttpServer httpListener;
70
71 public ParcelManager parcelManager;
72 public EstateManager estateManager;
73 public EventManager eventManager;
74 public ScriptManager scriptManager;
75
76 #region Properties
77 /// <summary>
78 ///
79 /// </summary>
80 public PhysicsScene PhysScene
81 {
82 set
83 {
84 this.phyScene = value;
85 }
86 get
87 {
88 return (this.phyScene);
89 }
90 }
91
92 #endregion
93
94 #region Constructors
95 /// <summary>
96 /// Creates a new World class, and a region to go with it.
97 /// </summary>
98 /// <param name="clientThreads">Dictionary to contain client threads</param>
99 /// <param name="regionHandle">Region Handle for this region</param>
100 /// <param name="regionName">Region Name for this region</param>
101 public Scene(ClientManager clientManager, RegionInfo regInfo, AuthenticateSessionsBase authen, CommunicationsManager commsMan, AssetCache assetCach, BaseHttpServer httpServer)
102 {
103 updateLock = new Mutex(false);
104 this.authenticateHandler = authen;
105 this.commsManager = commsMan;
106 this.assetCache = assetCach;
107 m_clientManager = clientManager;
108 m_regInfo = regInfo;
109 m_regionHandle = m_regInfo.RegionHandle;
110 m_regionName = m_regInfo.RegionName;
111 this.m_datastore = m_regInfo.DataStore;
112 this.RegisterRegionWithComms();
113
114 parcelManager = new ParcelManager(this, this.m_regInfo);
115 estateManager = new EstateManager(this, this.m_regInfo);
116 scriptManager = new ScriptManager(this);
117 eventManager = new EventManager();
118
119 MainLog.Instance.Verbose("World.cs - creating new entitities instance");
120 Entities = new Dictionary<LLUUID, EntityBase>();
121 Avatars = new Dictionary<LLUUID, ScenePresence>();
122 Prims = new Dictionary<LLUUID, SceneObject>();
123
124 MainLog.Instance.Verbose("World.cs - creating LandMap");
125 Terrain = new TerrainEngine();
126
127 ScenePresence.LoadAnims();
128 this.httpListener = httpServer;
129 }
130 #endregion
131
132 /// <summary>
133 ///
134 /// </summary>
135 public void StartTimer()
136 {
137 m_heartbeatTimer.Enabled = true;
138 m_heartbeatTimer.Interval = 100;
139 m_heartbeatTimer.Elapsed += new ElapsedEventHandler(this.Heartbeat);
140 }
141
142
143 #region Update Methods
144
145
146 /// <summary>
147 /// Performs per-frame updates regularly
148 /// </summary>
149 /// <param name="sender"></param>
150 /// <param name="e"></param>
151 void Heartbeat(object sender, EventArgs e)
152 {
153 this.Update();
154 }
155
156 /// <summary>
157 /// Performs per-frame updates on the world, this should be the central world loop
158 /// </summary>
159 public override void Update()
160 {
161 updateLock.WaitOne();
162 try
163 {
164 if (this.phyScene.IsThreaded)
165 {
166 this.phyScene.GetResults();
167
168 }
169
170 foreach (LLUUID UUID in Entities.Keys)
171 {
172 Entities[UUID].updateMovement();
173 }
174
175 lock (this.m_syncRoot)
176 {
177 this.phyScene.Simulate(timeStep);
178 }
179
180 foreach (LLUUID UUID in Entities.Keys)
181 {
182 Entities[UUID].update();
183 }
184
185 // General purpose event manager
186 eventManager.TriggerOnFrame();
187
188 //backup world data
189 this.storageCount++;
190 if (storageCount > 1200) //set to how often you want to backup
191 {
192 this.Backup();
193 storageCount = 0;
194 }
195 }
196 catch (Exception e)
197 {
198 MainLog.Instance.Warn("World.cs: Update() - Failed with exception " + e.ToString());
199 }
200 updateLock.ReleaseMutex();
201
202 }
203
204 /// <summary>
205 ///
206 /// </summary>
207 /// <returns></returns>
208 public bool Backup()
209 {
210
211 return true;
212 }
213 #endregion
214
215 #region Regenerate Terrain
216
217 /// <summary>
218 /// Rebuilds the terrain using a procedural algorithm
219 /// </summary>
220 public void RegenerateTerrain()
221 {
222 try
223 {
224 Terrain.hills();
225
226 lock (this.m_syncRoot)
227 {
228 this.phyScene.SetTerrain(Terrain.getHeights1D());
229 }
230 this.localStorage.SaveMap(this.Terrain.getHeights1D());
231
232 m_clientManager.ForEachClient(delegate(IClientAPI client)
233 {
234 this.SendLayerData(client);
235 });
236
237 foreach (LLUUID UUID in Entities.Keys)
238 {
239 Entities[UUID].LandRenegerated();
240 }
241 }
242 catch (Exception e)
243 {
244 MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
245 }
246 }
247
248 /// <summary>
249 /// Rebuilds the terrain using a 2D float array
250 /// </summary>
251 /// <param name="newMap">256,256 float array containing heights</param>
252 public void RegenerateTerrain(float[,] newMap)
253 {
254 try
255 {
256 this.Terrain.setHeights2D(newMap);
257 lock (this.m_syncRoot)
258 {
259 this.phyScene.SetTerrain(this.Terrain.getHeights1D());
260 }
261 this.localStorage.SaveMap(this.Terrain.getHeights1D());
262
263 m_clientManager.ForEachClient(delegate(IClientAPI client)
264 {
265 this.SendLayerData(client);
266 });
267
268 foreach (LLUUID UUID in Entities.Keys)
269 {
270 Entities[UUID].LandRenegerated();
271 }
272 }
273 catch (Exception e)
274 {
275 MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
276 }
277 }
278
279 /// <summary>
280 /// Rebuilds the terrain assuming changes occured at a specified point[?]
281 /// </summary>
282 /// <param name="changes">???</param>
283 /// <param name="pointx">???</param>
284 /// <param name="pointy">???</param>
285 public void RegenerateTerrain(bool changes, int pointx, int pointy)
286 {
287 try
288 {
289 if (changes)
290 {
291 /* Dont save here, rely on tainting system instead */
292
293 m_clientManager.ForEachClient(delegate(IClientAPI client)
294 {
295 this.SendLayerData(pointx, pointy, client);
296 });
297 }
298 }
299 catch (Exception e)
300 {
301 MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
302 }
303 }
304
305 #endregion
306
307 #region Load Terrain
308 /// <summary>
309 /// Loads the World heightmap
310 /// </summary>
311 ///
312 public override void LoadWorldMap()
313 {
314 try
315 {
316 float[] map = this.localStorage.LoadWorld();
317 if (map == null)
318 {
319 if (string.IsNullOrEmpty(this.m_regInfo.estateSettings.terrainFile))
320 {
321 Console.WriteLine("No default terrain, procedurally generating...");
322 this.Terrain.hills();
323
324 this.localStorage.SaveMap(this.Terrain.getHeights1D());
325 }
326 else
327 {
328 try
329 {
330 this.Terrain.loadFromFileF32(this.m_regInfo.estateSettings.terrainFile);
331 this.Terrain *= this.m_regInfo.estateSettings.terrainMultiplier;
332 }
333 catch
334 {
335 Console.WriteLine("Unable to load default terrain, procedurally generating instead...");
336 Terrain.hills();
337 }
338 this.localStorage.SaveMap(this.Terrain.getHeights1D());
339 }
340 }
341 else
342 {
343 this.Terrain.setHeights1D(map);
344 }
345
346 CreateTerrainTexture();
347
348 }
349 catch (Exception e)
350 {
351 MainLog.Instance.Warn("World.cs: LoadWorldMap() - Failed with exception " + e.ToString());
352 }
353 }
354
355 /// <summary>
356 ///
357 /// </summary>
358 private void CreateTerrainTexture()
359 {
360 //create a texture asset of the terrain
361 byte[] data = this.Terrain.exportJpegImage("defaultstripe.png");
362 this.m_regInfo.estateSettings.terrainImageID = LLUUID.Random();
363 AssetBase asset = new AssetBase();
364 asset.FullID = this.m_regInfo.estateSettings.terrainImageID;
365 asset.Data = data;
366 asset.Name = "terrainImage";
367 asset.Type = 0;
368 this.assetCache.AddAsset(asset);
369 }
370 #endregion
371
372 #region Primitives Methods
373
374
375 /// <summary>
376 /// Loads the World's objects
377 /// </summary>
378 public void LoadPrimsFromStorage()
379 {
380 try
381 {
382 MainLog.Instance.Verbose("World.cs: LoadPrimsFromStorage() - Loading primitives");
383 this.localStorage.LoadPrimitives(this);
384 }
385 catch (Exception e)
386 {
387 MainLog.Instance.Warn("World.cs: LoadPrimsFromStorage() - Failed with exception " + e.ToString());
388 }
389 }
390
391 /// <summary>
392 /// Loads a specific object from storage
393 /// </summary>
394 /// <param name="prim">The object to load</param>
395 public void PrimFromStorage(PrimData prim)
396 {
397
398 }
399
400 /// <summary>
401 /// Returns a new unallocated primitive ID
402 /// </summary>
403 /// <returns>A brand new primitive ID</returns>
404 public uint PrimIDAllocate()
405 {
406 uint myID;
407
408 _primAllocateMutex.WaitOne();
409 ++_primCount;
410 myID = _primCount;
411 _primAllocateMutex.ReleaseMutex();
412
413 return myID;
414 }
415
416 /// <summary>
417 ///
418 /// </summary>
419 /// <param name="addPacket"></param>
420 /// <param name="agentClient"></param>
421 public void AddNewPrim(Packet addPacket, IClientAPI agentClient)
422 {
423 AddNewPrim((ObjectAddPacket)addPacket, agentClient.AgentId);
424 }
425
426 /// <summary>
427 ///
428 /// </summary>
429 /// <param name="addPacket"></param>
430 /// <param name="ownerID"></param>
431 public void AddNewPrim(ObjectAddPacket addPacket, LLUUID ownerID)
432 {
433 try
434 {
435 SceneObject sceneOb = new SceneObject(m_regionHandle, this, addPacket, ownerID, this.PrimIDAllocate());
436 this.Entities.Add(sceneOb.rootUUID, sceneOb);
437
438 // Trigger event for listeners
439 // eventManager.TriggerOnNewPrimitive(prim);
440 }
441 catch (Exception e)
442 {
443 MainLog.Instance.Warn("World.cs: AddNewPrim() - Failed with exception " + e.ToString());
444 }
445 }
446
447 public override uint AddNewPrim(LLUUID ownerId, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID texture, int flags)
448 {
449 uint id = NextLocalId;
450
451 throw new NotImplementedException("Not implemented yet.");
452 }
453
454 #endregion
455
456 #region Add/Remove Avatar Methods
457
458 /// <summary>
459 ///
460 /// </summary>
461 /// <param name="remoteClient"></param
462 /// <param name="agentID"></param>
463 /// <param name="child"></param>
464 public override void AddNewClient(IClientAPI client, bool child)
465 {
466 client.OnRegionHandShakeReply += this.SendLayerData;
467 //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
468 client.OnChatFromViewer += this.SimChat;
469 client.OnInstantMessage += this.InstantMessage;
470 client.OnRequestWearables += this.InformClientOfNeighbours;
471 client.OnAddPrim += this.AddNewPrim;
472 client.OnUpdatePrimGroupPosition += this.UpdatePrimPosition;
473 client.OnUpdatePrimSinglePosition += this.UpdatePrimSinglePosition;
474 client.OnUpdatePrimGroupRotation += this.UpdatePrimRotation;
475 client.OnUpdatePrimGroupMouseRotation += this.UpdatePrimRotation;
476 client.OnUpdatePrimSingleRotation += this.UpdatePrimSingleRotation;
477 client.OnUpdatePrimScale += this.UpdatePrimScale;
478 client.OnUpdatePrimShape += this.UpdatePrimShape;
479 client.OnRequestMapBlocks += this.RequestMapBlocks;
480 client.OnTeleportLocationRequest += this.RequestTeleportLocation;
481 client.OnObjectSelect += this.SelectPrim;
482 client.OnGrapUpdate += this.MoveObject;
483 client.OnNameFromUUIDRequest += this.commsManager.HandleUUIDNameRequest;
484 client.OnObjectDescription += this.PrimDescription;
485 client.OnObjectName += this.PrimName;
486 client.OnLinkObjects += this.LinkObjects;
487 client.OnObjectDuplicate += this.DuplicateObject;
488
489 /* remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest);
490 remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest);
491 remoteClient.OnParcelJoinRequest += new ParcelJoinRequest(parcelManager.handleParcelJoinRequest);
492 remoteClient.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(parcelManager.handleParcelPropertiesUpdateRequest);
493 remoteClient.OnEstateOwnerMessage += new EstateOwnerMessageRequest(estateManager.handleEstateOwnerMessage);
494 */
495 this.estateManager.sendRegionHandshake(client);
496
497 CreateAndAddScenePresence(client);
498 return;
499 }
500
501 protected void CreateAndAddScenePresence(IClientAPI client)
502 {
503 ScenePresence newAvatar = null;
504
505 MainLog.Instance.Verbose("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
506 newAvatar = new ScenePresence(client, this, this.m_regInfo);
507 MainLog.Instance.Verbose("World.cs:AddViewerAgent() - Adding new avatar to world");
508 MainLog.Instance.Verbose("World.cs:AddViewerAgent() - Starting RegionHandshake ");
509
510 PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z);
511 lock (this.m_syncRoot)
512 {
513 newAvatar.PhysActor = this.phyScene.AddAvatar(pVec);
514 }
515
516 lock (Entities)
517 {
518 if (!Entities.ContainsKey(client.AgentId))
519 {
520 this.Entities.Add(client.AgentId, newAvatar);
521 }
522 else
523 {
524 Entities[client.AgentId] = newAvatar;
525 }
526 }
527 lock (Avatars)
528 {
529 if (Avatars.ContainsKey(client.AgentId))
530 {
531 Avatars[client.AgentId] = newAvatar;
532 }
533 else
534 {
535 this.Avatars.Add(client.AgentId, newAvatar);
536 }
537 }
538 }
539
540
541 /// <summary>
542 ///
543 /// </summary>
544 /// <param name="agentID"></param>
545 public override void RemoveClient(LLUUID agentID)
546 {
547 eventManager.TriggerOnRemovePresence(agentID);
548
549 ScenePresence avatar = this.RequestAvatar(agentID);
550
551 m_clientManager.ForEachClient(
552 delegate(IClientAPI client)
553 {
554 client.SendKillObject(avatar.RegionHandle, avatar.LocalId);
555 });
556
557 lock (Avatars) {
558 if (Avatars.ContainsKey(agentID)) {
559 Avatars.Remove(agentID);
560 }
561 }
562 lock (Entities) {
563 if (Entities.ContainsKey(agentID)) {
564 Entities.Remove(agentID);
565 }
566 }
567 // TODO: Add the removal from physics ?
568
569
570
571 return;
572 }
573 #endregion
574
575 #region Request Avatars List Methods
576 //The idea is to have a group of method that return a list of avatars meeting some requirement
577 // ie it could be all Avatars within a certain range of the calling prim/avatar.
578
579 /// <summary>
580 /// Request a List of all Avatars in this World
581 /// </summary>
582 /// <returns></returns>
583 public List<ScenePresence> RequestAvatarList()
584 {
585 List<ScenePresence> result = new List<ScenePresence>();
586
587 foreach (ScenePresence avatar in Avatars.Values)
588 {
589 result.Add(avatar);
590 }
591
592 return result;
593 }
594
595 /// <summary>
596 /// Request a filtered list of Avatars in this World
597 /// </summary>
598 /// <returns></returns>
599 public List<ScenePresence> RequestAvatarList(FilterAvatarList filter)
600 {
601 List<ScenePresence> result = new List<ScenePresence>();
602
603 foreach (ScenePresence avatar in Avatars.Values)
604 {
605 if (filter(avatar))
606 {
607 result.Add(avatar);
608 }
609 }
610
611 return result;
612 }
613
614 /// <summary>
615 /// Request a Avatar by UUID
616 /// </summary>
617 /// <param name="avatarID"></param>
618 /// <returns></returns>
619 public ScenePresence RequestAvatar(LLUUID avatarID)
620 {
621 if (this.Avatars.ContainsKey(avatarID))
622 {
623 return Avatars[avatarID];
624 }
625 return null;
626 }
627 #endregion
628
629
630 /// <summary>
631 ///
632 /// </summary>
633 /// <param name="entID"></param>
634 /// <returns></returns>
635 public bool DeleteEntity(LLUUID entID)
636 {
637 if (this.Entities.ContainsKey(entID))
638 {
639 this.Entities.Remove(entID);
640 return true;
641 }
642 return false;
643 }
644
645 public void SendAllSceneObjectsToClient(IClientAPI client)
646 {
647 foreach (EntityBase ent in Entities.Values)
648 {
649 if (ent is SceneObject)
650 {
651 ((SceneObject)ent).SendAllChildPrimsToClient(client);
652 }
653 }
654 }
655
656 #region RegionCommsHost
657
658 /// <summary>
659 ///
660 /// </summary>
661 public void RegisterRegionWithComms()
662 {
663
664 this.regionCommsHost = this.commsManager.GridServer.RegisterRegion(this.m_regInfo);
665 if (this.regionCommsHost != null)
666 {
667 this.regionCommsHost.OnExpectUser += this.NewUserConnection;
668 this.regionCommsHost.OnAvatarCrossingIntoRegion += this.AgentCrossing;
669 }
670 }
671
672 /// <summary>
673 ///
674 /// </summary>
675 /// <param name="regionHandle"></param>
676 /// <param name="agent"></param>
677 public void NewUserConnection(ulong regionHandle, AgentCircuitData agent)
678 {
679 // Console.WriteLine("World.cs - add new user connection");
680 //should just check that its meant for this region
681 if (regionHandle == this.m_regInfo.RegionHandle)
682 {
683 if (agent.CapsPath != "")
684 {
685 //Console.WriteLine("new user, so creating caps handler for it");
686 Caps cap = new Caps(this.assetCache, httpListener, this.m_regInfo.ExternalHostName, this.m_regInfo.ExternalEndPoint.Port, agent.CapsPath, agent.AgentID);
687 cap.RegisterHandlers();
688 this.capsHandlers.Add(agent.AgentID, cap);
689 }
690 this.authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
691 }
692 }
693
694 public void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position)
695 {
696 if (regionHandle == this.m_regInfo.RegionHandle)
697 {
698 if (this.Avatars.ContainsKey(agentID))
699 {
700 this.Avatars[agentID].MakeAvatar(position);
701 }
702 }
703 }
704
705 /// <summary>
706 ///
707 /// </summary>
708 public void InformClientOfNeighbours(IClientAPI remoteClient)
709 {
710 List<RegionInfo> neighbours = this.commsManager.GridServer.RequestNeighbours(this.m_regInfo);
711
712 if (neighbours != null)
713 {
714 for (int i = 0; i < neighbours.Count; i++)
715 {
716 AgentCircuitData agent = remoteClient.RequestClientInfo();
717 agent.BaseFolder = LLUUID.Zero;
718 agent.InventoryFolder = LLUUID.Zero;
719 agent.startpos = new LLVector3(128, 128, 70);
720 agent.child = true;
721 this.commsManager.InterRegion.InformRegionOfChildAgent(neighbours[i].RegionHandle, agent);
722 remoteClient.InformClientOfNeighbour(neighbours[i].RegionHandle, neighbours[i].ExternalEndPoint);
723 //this.capsHandlers[remoteClient.AgentId].CreateEstablishAgentComms("", System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr) + ":" + neighbours[i].CommsIPListenPort);
724 }
725 }
726 }
727
728 /// <summary>
729 ///
730 /// </summary>
731 /// <param name="regionHandle"></param>
732 /// <returns></returns>
733 public RegionInfo RequestNeighbouringRegionInfo(ulong regionHandle)
734 {
735 return this.commsManager.GridServer.RequestNeighbourInfo(regionHandle);
736 }
737
738 /// <summary>
739 ///
740 /// </summary>
741 /// <param name="minX"></param>
742 /// <param name="minY"></param>
743 /// <param name="maxX"></param>
744 /// <param name="maxY"></param>
745 public void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY)
746 {
747 List<MapBlockData> mapBlocks;
748 mapBlocks = this.commsManager.GridServer.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
749 remoteClient.SendMapBlock(mapBlocks);
750 }
751
752 /// <summary>
753 ///
754 /// </summary>
755 /// <param name="remoteClient"></param>
756 /// <param name="RegionHandle"></param>
757 /// <param name="position"></param>
758 /// <param name="lookAt"></param>
759 /// <param name="flags"></param>
760 public void RequestTeleportLocation(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags)
761 {
762 if (regionHandle == this.m_regionHandle)
763 {
764 if (this.Avatars.ContainsKey(remoteClient.AgentId))
765 {
766 remoteClient.SendTeleportLocationStart();
767 remoteClient.SendLocalTeleport(position, lookAt, flags);
768 this.Avatars[remoteClient.AgentId].Teleport(position);
769 }
770 }
771 else
772 {
773 RegionInfo reg = this.RequestNeighbouringRegionInfo(regionHandle);
774 if (reg != null)
775 {
776 remoteClient.SendTeleportLocationStart();
777 AgentCircuitData agent = remoteClient.RequestClientInfo();
778 agent.BaseFolder = LLUUID.Zero;
779 agent.InventoryFolder = LLUUID.Zero;
780 agent.startpos = new LLVector3(128, 128, 70);
781 agent.child = true;
782 this.commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
783 this.commsManager.InterRegion.ExpectAvatarCrossing(regionHandle, remoteClient.AgentId, position);
784
785 remoteClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4));
786
787 }
788 //remoteClient.SendTeleportCancel();
789 }
790 }
791
792 /// <summary>
793 ///
794 /// </summary>
795 /// <param name="regionhandle"></param>
796 /// <param name="agentID"></param>
797 /// <param name="position"></param>
798 public bool InformNeighbourOfCrossing(ulong regionhandle, LLUUID agentID, LLVector3 position)
799 {
800 return this.commsManager.InterRegion.ExpectAvatarCrossing(regionhandle, agentID, position);
801 }
802
803 #endregion
804
805 }
806}
diff --git a/OpenSim/Region/Environment/Scenes/SceneBase.cs b/OpenSim/Region/Environment/Scenes/SceneBase.cs
new file mode 100644
index 0000000..811f54c
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/SceneBase.cs
@@ -0,0 +1,198 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using libsecondlife;
32using OpenSim.Framework.Console;
33using OpenSim.Framework.Interfaces;
34using OpenSim.Framework.Types;
35using OpenSim.Region.Caches;
36using OpenSim.Region.Terrain;
37using OpenSim.Framework;
38
39namespace OpenSim.Region.Environment.Scenes
40{
41 public abstract class SceneBase : IWorld
42 {
43 public Dictionary<LLUUID, EntityBase> Entities;
44 protected ClientManager m_clientManager;
45 protected ulong m_regionHandle;
46 protected string m_regionName;
47 protected RegionInfo m_regInfo;
48
49 public TerrainEngine Terrain;
50
51 public string m_datastore;
52 public ILocalStorage localStorage;
53
54 protected object m_syncRoot = new object();
55 private uint m_nextLocalId = 8880000;
56 protected AssetCache assetCache;
57
58 #region Update Methods
59 /// <summary>
60 /// Normally called once every frame/tick to let the world preform anything required (like running the physics simulation)
61 /// </summary>
62 public abstract void Update();
63
64 #endregion
65
66 #region Terrain Methods
67
68 /// <summary>
69 /// Loads the World heightmap
70 /// </summary>
71 public abstract void LoadWorldMap();
72
73 /// <summary>
74 /// Loads a new storage subsystem from a named library
75 /// </summary>
76 /// <param name="dllName">Storage Library</param>
77 /// <returns>Successful or not</returns>
78 public bool LoadStorageDLL(string dllName)
79 {
80 try
81 {
82 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
83 ILocalStorage store = null;
84
85 foreach (Type pluginType in pluginAssembly.GetTypes())
86 {
87 if (pluginType.IsPublic)
88 {
89 if (!pluginType.IsAbstract)
90 {
91 Type typeInterface = pluginType.GetInterface("ILocalStorage", true);
92
93 if (typeInterface != null)
94 {
95 ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
96 store = plug;
97
98 store.Initialise(this.m_datastore);
99 break;
100 }
101
102 typeInterface = null;
103 }
104 }
105 }
106 pluginAssembly = null;
107 this.localStorage = store;
108 return (store == null);
109 }
110 catch (Exception e)
111 {
112 MainLog.Instance.Warn("World.cs: LoadStorageDLL() - Failed with exception " + e.ToString());
113 return false;
114 }
115 }
116
117
118 /// <summary>
119 /// Send the region heightmap to the client
120 /// </summary>
121 /// <param name="RemoteClient">Client to send to</param>
122 public virtual void SendLayerData(IClientAPI RemoteClient)
123 {
124 RemoteClient.SendLayerData(Terrain.getHeights1D());
125 }
126
127 /// <summary>
128 /// Sends a specified patch to a client
129 /// </summary>
130 /// <param name="px">Patch coordinate (x) 0..16</param>
131 /// <param name="py">Patch coordinate (y) 0..16</param>
132 /// <param name="RemoteClient">The client to send to</param>
133 public virtual void SendLayerData(int px, int py, IClientAPI RemoteClient)
134 {
135 RemoteClient.SendLayerData(px, py, Terrain.getHeights1D());
136 }
137
138 #endregion
139
140 #region Add/Remove Agent/Avatar
141 /// <summary>
142 ///
143 /// </summary>
144 /// <param name="remoteClient"></param>
145 /// <param name="agentID"></param>
146 /// <param name="child"></param>
147 public abstract void AddNewClient(IClientAPI client, bool child);
148
149 public abstract uint AddNewPrim(LLUUID ownerId, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID texture, int flags);
150
151 /// <summary>
152 ///
153 /// </summary>
154 /// <param name="agentID"></param>
155 public abstract void RemoveClient(LLUUID agentID);
156
157 #endregion
158
159 /// <summary>
160 ///
161 /// </summary>
162 /// <returns></returns>
163 public virtual RegionInfo RegionInfo
164 {
165 get { return this.m_regInfo; }
166 }
167
168 public object SyncRoot
169 {
170 get { return m_syncRoot; }
171 }
172
173 public uint NextLocalId
174 {
175 get { return m_nextLocalId++; }
176 }
177
178 #region Shutdown
179 /// <summary>
180 /// Tidy before shutdown
181 /// </summary>
182 public virtual void Close()
183 {
184 try
185 {
186 this.localStorage.ShutDown();
187 }
188 catch (Exception e)
189 {
190 MainLog.Instance.WriteLine(LogPriority.HIGH, "World.cs: Close() - Failed with exception " + e.ToString());
191 }
192 }
193
194 #endregion
195
196
197 }
198}
diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
new file mode 100644
index 0000000..9e383c6
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
@@ -0,0 +1,50 @@
1using libsecondlife;
2
3namespace OpenSim.Region.Environment.Scenes
4{
5 /// <summary>
6 /// A class for triggering remote scene events.
7 /// </summary>
8 public class EventManager
9 {
10 public delegate void OnFrameDelegate();
11 public event OnFrameDelegate OnFrame;
12
13 public delegate void OnNewPresenceDelegate(ScenePresence presence);
14 public event OnNewPresenceDelegate OnNewPresence;
15
16 public delegate void OnNewPrimitiveDelegate(PrimitiveOld prim);
17 public event OnNewPrimitiveDelegate OnNewPrimitive;
18
19 public delegate void OnRemovePresenceDelegate(LLUUID uuid);
20 public event OnRemovePresenceDelegate OnRemovePresence;
21
22 public void TriggerOnFrame()
23 {
24 if (OnFrame != null)
25 {
26 OnFrame();
27 }
28 }
29
30 public void TriggerOnNewPrimitive(PrimitiveOld prim)
31 {
32 if (OnNewPrimitive != null)
33 OnNewPrimitive(prim);
34 }
35
36 public void TriggerOnNewPresence(ScenePresence presence)
37 {
38 if (OnNewPresence != null)
39 OnNewPresence(presence);
40 }
41
42 public void TriggerOnRemovePresence(LLUUID uuid)
43 {
44 if (OnRemovePresence != null)
45 {
46 OnRemovePresence(uuid);
47 }
48 }
49 }
50}
diff --git a/OpenSim/Region/Environment/Scenes/SceneObject.cs b/OpenSim/Region/Environment/Scenes/SceneObject.cs
new file mode 100644
index 0000000..ecd2dee
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/SceneObject.cs
@@ -0,0 +1,246 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using System.Text;
30using libsecondlife;
31using libsecondlife.Packets;
32using OpenSim.Framework.Interfaces;
33using OpenSim.Physics.Manager;
34
35namespace OpenSim.Region.Environment.Scenes
36{
37 public class SceneObject : EntityBase
38 {
39 private Encoding enc = Encoding.ASCII;
40 private Dictionary<LLUUID, Primitive> ChildPrimitives = new Dictionary<LLUUID, Primitive>(); //list of all primitive id's that are part of this group
41 public Primitive rootPrimitive;
42 private new Scene m_world;
43 protected ulong m_regionHandle;
44
45 private bool physicsEnabled = false;
46 private PhysicsScene m_PhysScene;
47 private PhysicsActor m_PhysActor;
48
49 public LLUUID rootUUID
50 {
51 get
52 {
53 this.uuid = this.rootPrimitive.uuid;
54 return this.uuid;
55 }
56 }
57
58 public uint rootLocalID
59 {
60 get
61 {
62 this.m_localId = this.rootPrimitive.LocalId;
63 return this.LocalId;
64 }
65 }
66
67 /// <summary>
68 ///
69 /// </summary>
70 public SceneObject(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
71 {
72 m_regionHandle = regionHandle;
73 m_world = world;
74 this.Pos = addPacket.ObjectData.RayEnd;
75 this.CreateRootFromPacket(addPacket, ownerID, localID);
76 }
77
78 /// <summary>
79 ///
80 /// </summary>
81 /// <remarks>Need a null constructor for duplication</remarks>
82 public SceneObject()
83 {
84
85 }
86
87 /// <summary>
88 ///
89 /// </summary>
90 /// <param name="addPacket"></param>
91 /// <param name="agentID"></param>
92 /// <param name="localID"></param>
93 public void CreateRootFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID)
94 {
95 this.rootPrimitive = new Primitive( this.m_regionHandle, this.m_world, addPacket, agentID, localID, true, this, this);
96 this.children.Add(rootPrimitive);
97 this.ChildPrimitives.Add(this.rootUUID, this.rootPrimitive);
98 }
99
100 /// <summary>
101 ///
102 /// </summary>
103 /// <param name="data"></param>
104 public void CreateFromBytes(byte[] data)
105 {
106
107 }
108
109 /// <summary>
110 ///
111 /// </summary>
112 /// <returns>A complete copy of the object</returns>
113 public SceneObject Copy()
114 {
115 SceneObject dupe = new SceneObject();
116
117 Primitive newRoot = this.rootPrimitive.Copy((EntityBase)dupe, dupe);
118
119 foreach (EntityBase child in this.children)
120 {
121 EntityBase newChild = child.Copy();
122 dupe.children.Add(newChild);
123 }
124
125 return dupe;
126 }
127
128 /// <summary>
129 ///
130 /// </summary>
131 public void DeleteAllChildren()
132 {
133 this.children.Clear();
134 this.ChildPrimitives.Clear();
135 this.rootPrimitive = null;
136 }
137
138 /// <summary>
139 ///
140 /// </summary>
141 /// <param name="primObject"></param>
142 public void AddNewChildPrims(SceneObject primObject)
143 {
144 this.rootPrimitive.AddNewChildren(primObject);
145 }
146
147 public void AddChildToList(Primitive prim)
148 {
149 if (!this.ChildPrimitives.ContainsKey(prim.uuid))
150 {
151 this.ChildPrimitives.Add(prim.uuid, prim);
152 }
153 }
154 /// <summary>
155 ///
156 /// </summary>
157 /// <param name="primID"></param>
158 /// <returns></returns>
159 public Primitive HasChildPrim(LLUUID primID)
160 {
161 if (this.ChildPrimitives.ContainsKey(primID))
162 {
163 return this.ChildPrimitives[primID];
164 }
165
166 return null;
167 }
168
169 /// <summary>
170 ///
171 /// </summary>
172 /// <param name="localID"></param>
173 /// <returns></returns>
174 public Primitive HasChildPrim(uint localID)
175 {
176 Primitive returnPrim = null;
177 foreach (Primitive prim in this.ChildPrimitives.Values)
178 {
179 if (prim.LocalId == localID)
180 {
181 returnPrim = prim;
182 break;
183 }
184 }
185 return returnPrim;
186 }
187
188 public void SendAllChildPrimsToClient(IClientAPI client)
189 {
190 this.rootPrimitive.SendFullUpdateForAllChildren(client);
191 }
192
193 /// <summary>
194 ///
195 /// </summary>
196 public override void BackUp()
197 {
198
199 }
200
201 /// <summary>
202 ///
203 /// </summary>
204 /// <param name="offset"></param>
205 /// <param name="pos"></param>
206 /// <param name="remoteClient"></param>
207 public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
208 {
209 this.rootPrimitive.Pos = pos ;
210 this.rootPrimitive.SendTerseUpdateForAllChildren(remoteClient);
211 }
212
213 /// <summary>
214 ///
215 /// </summary>
216 /// <param name="client"></param>
217 public void GetProperites(IClientAPI client)
218 {
219 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
220 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
221 proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
222 proper.ObjectData[0].ItemID = LLUUID.Zero;
223 proper.ObjectData[0].CreationDate = (ulong)this.rootPrimitive.CreationDate;
224 proper.ObjectData[0].CreatorID = this.rootPrimitive.CreatorID;
225 proper.ObjectData[0].FolderID = LLUUID.Zero;
226 proper.ObjectData[0].FromTaskID = LLUUID.Zero;
227 proper.ObjectData[0].GroupID = LLUUID.Zero;
228 proper.ObjectData[0].InventorySerial = 0;
229 proper.ObjectData[0].LastOwnerID = this.rootPrimitive.LastOwnerID;
230 proper.ObjectData[0].ObjectID = this.rootUUID;
231 proper.ObjectData[0].OwnerID = this.rootPrimitive.OwnerID;
232 proper.ObjectData[0].TouchName = enc.GetBytes(this.rootPrimitive.TouchName + "\0");
233 proper.ObjectData[0].TextureID = new byte[0];
234 proper.ObjectData[0].SitName = enc.GetBytes(this.rootPrimitive.SitName +"\0") ;
235 proper.ObjectData[0].Name = enc.GetBytes(this.rootPrimitive.Name +"\0");
236 proper.ObjectData[0].Description = enc.GetBytes(this.rootPrimitive.Description +"\0");
237 proper.ObjectData[0].OwnerMask = this.rootPrimitive.OwnerMask;
238 proper.ObjectData[0].NextOwnerMask = this.rootPrimitive.NextOwnerMask;
239 proper.ObjectData[0].GroupMask = this.rootPrimitive.GroupMask;
240 proper.ObjectData[0].EveryoneMask = this.rootPrimitive.EveryoneMask;
241 proper.ObjectData[0].BaseMask = this.rootPrimitive.BaseMask;
242
243 client.OutPacket(proper);
244 }
245 }
246}
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.Animations.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.Animations.cs
new file mode 100644
index 0000000..d1f75ed
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.Animations.cs
@@ -0,0 +1,74 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using System.Xml;
30using libsecondlife;
31
32namespace OpenSim.Region.Environment.Scenes
33{
34 partial class ScenePresence
35 {
36 public class AvatarAnimations
37 {
38
39 public Dictionary<string, LLUUID> AnimsLLUUID = new Dictionary<string, LLUUID>();
40 public Dictionary<LLUUID, string> AnimsNames = new Dictionary<LLUUID, string>();
41
42 public AvatarAnimations()
43 {
44 }
45
46 public void LoadAnims()
47 {
48 //OpenSim.Framework.Console.MainLog.Instance.Verbose("Avatar.cs:LoadAnims() - Loading avatar animations");
49 XmlTextReader reader = new XmlTextReader("data/avataranimations.xml");
50
51 XmlDocument doc = new XmlDocument();
52 doc.Load(reader);
53 foreach (XmlNode nod in doc.DocumentElement.ChildNodes)
54 {
55
56 if (nod.Attributes["name"] != null)
57 {
58 AnimsLLUUID.Add(nod.Attributes["name"].Value, nod.InnerText);
59 }
60
61 }
62
63 reader.Close();
64
65 // OpenSim.Framework.Console.MainLog.Instance.Verbose("Loaded " + AnimsLLUUID.Count.ToString() + " animation(s)");
66
67 foreach (KeyValuePair<string, LLUUID> kp in Animations.AnimsLLUUID)
68 {
69 AnimsNames.Add(kp.Value, kp.Key);
70 }
71 }
72 }
73 }
74}
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.Body.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.Body.cs
new file mode 100644
index 0000000..dbb5d3f
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.Body.cs
@@ -0,0 +1,85 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 libsecondlife;
29using libsecondlife.Packets;
30using OpenSim.Framework.Interfaces;
31
32namespace OpenSim.Region.Environment.Scenes
33{
34 partial class ScenePresence
35 {
36 public class Avatar : IScenePresenceBody
37 {
38 public Avatar()
39 {
40
41 }
42
43 public void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation)
44 {
45 }
46
47 public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam)
48 {
49 }
50
51 public void SendOurAppearance(IClientAPI OurClient)
52 {
53 }
54
55 public void SendAppearanceToOtherAgent(ScenePresence avatarInfo)
56 {
57 }
58 }
59
60 public class ChildAgent : IScenePresenceBody //is a ghost
61 {
62 public ChildAgent()
63 {
64
65 }
66
67 public void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation)
68 {
69 }
70
71 public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam)
72 {
73 }
74
75 public void SendOurAppearance(IClientAPI OurClient)
76 {
77 }
78
79 public void SendAppearanceToOtherAgent(ScenePresence avatarInfo)
80 {
81 }
82 }
83 }
84
85}
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
new file mode 100644
index 0000000..e65ab7c
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -0,0 +1,597 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Axiom.Math;
32using libsecondlife;
33using libsecondlife.Packets;
34using OpenSim.Framework.Console;
35using OpenSim.Framework.Interfaces;
36using OpenSim.Framework.Types;
37using OpenSim.Physics.Manager;
38
39namespace OpenSim.Region.Environment.Scenes
40{
41 public partial class ScenePresence : Entity
42 {
43 public static bool PhysicsEngineFlying = false;
44 public static AvatarAnimations Animations;
45 public static byte[] DefaultTexture;
46 public string firstname;
47 public string lastname;
48 public IClientAPI ControllingClient;
49 public LLUUID current_anim;
50 public int anim_seq;
51 private bool updateflag = false;
52 private byte movementflag = 0;
53 private List<NewForce> forcesList = new List<NewForce>();
54 private short _updateCount = 0;
55 private Quaternion bodyRot;
56 private LLObject.TextureEntry avatarAppearanceTexture = null;
57 private byte[] visualParams;
58 private AvatarWearable[] Wearables;
59 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
60 private ulong m_regionHandle;
61 private bool childAgent = false;
62 private bool newForce = false;
63 private bool newAvatar = false;
64 private IScenePresenceBody m_body;
65
66 protected RegionInfo m_regionInfo;
67
68 private Vector3[] Dir_Vectors = new Vector3[6];
69 private enum Dir_ControlFlags
70 {
71 DIR_CONTROL_FLAG_FOWARD = MainAvatar.ControlFlags.AGENT_CONTROL_AT_POS,
72 DIR_CONTROL_FLAG_BACK = MainAvatar.ControlFlags.AGENT_CONTROL_AT_NEG,
73 DIR_CONTROL_FLAG_LEFT = MainAvatar.ControlFlags.AGENT_CONTROL_LEFT_POS,
74 DIR_CONTROL_FLAG_RIGHT = MainAvatar.ControlFlags.AGENT_CONTROL_LEFT_NEG,
75 DIR_CONTROL_FLAG_UP = MainAvatar.ControlFlags.AGENT_CONTROL_UP_POS,
76 DIR_CONTROL_FLAG_DOWN = MainAvatar.ControlFlags.AGENT_CONTROL_UP_NEG
77 }
78
79 #region Properties
80 /// <summary>
81 ///
82 /// </summary>
83 public PhysicsActor PhysActor
84 {
85 set
86 {
87 this._physActor = value;
88 }
89 get
90 {
91 return _physActor;
92 }
93 }
94
95 public ulong RegionHandle
96 {
97 get { return m_regionHandle; }
98 }
99
100 #endregion
101
102 #region Constructor(s)
103 /// <summary>
104 ///
105 /// </summary>
106 /// <param name="theClient"></param>
107 /// <param name="world"></param>
108 /// <param name="clientThreads"></param>
109 /// <param name="regionDat"></param>
110 public ScenePresence(IClientAPI theClient, Scene world, RegionInfo reginfo)
111 {
112
113 m_world = world;
114 this.uuid = theClient.AgentId;
115
116 m_regionInfo = reginfo;
117 m_regionHandle = reginfo.RegionHandle;
118 MainLog.Instance.Verbose("Avatar.cs ");
119 ControllingClient = theClient;
120 this.firstname = ControllingClient.FirstName;
121 this.lastname = ControllingClient.LastName;
122 m_localId = m_world.NextLocalId;
123 Pos = ControllingClient.StartPos;
124 visualParams = new byte[218];
125 for (int i = 0; i < 218; i++)
126 {
127 visualParams[i] = 100;
128 }
129
130 Wearables = AvatarWearable.DefaultWearables;
131 Animations = new ScenePresence.AvatarAnimations();
132 Animations.LoadAnims();
133
134 this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
135
136 //register for events
137 ControllingClient.OnRequestWearables += this.SendOurAppearance;
138 //ControllingClient.OnSetAppearance += new SetAppearance(this.SetAppearance);
139 ControllingClient.OnCompleteMovementToRegion += this.CompleteMovement;
140 ControllingClient.OnCompleteMovementToRegion += this.SendInitialData;
141 ControllingClient.OnAgentUpdate += this.HandleAgentUpdate;
142 // ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack);
143 // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
144 //ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
145
146 Dir_Vectors[0] = new Vector3(1, 0, 0); //FOWARD
147 Dir_Vectors[1] = new Vector3(-1, 0, 0); //BACK
148 Dir_Vectors[2] = new Vector3(0, 1, 0); //LEFT
149 Dir_Vectors[3] = new Vector3(0, -1, 0); //RIGHT
150 Dir_Vectors[4] = new Vector3(0, 0, 1); //UP
151 Dir_Vectors[5] = new Vector3(0, 0, -1); //DOWN
152
153 }
154 #endregion
155
156 #region Status Methods
157 /// <summary>
158 /// Not Used, most likely can be deleted
159 /// </summary>
160 /// <param name="status"></param>
161 public void ChildStatusChange(bool status)
162 {
163 this.childAgent = status;
164
165 if (this.childAgent == true)
166 {
167 this.Velocity = new LLVector3(0, 0, 0);
168 this.Pos = new LLVector3(128, 128, 70);
169
170 }
171 }
172
173 /// <summary>
174 ///
175 /// </summary>
176 /// <param name="pos"></param>
177 public void MakeAvatar(LLVector3 pos)
178 {
179 //this.childAvatar = false;
180 this.Pos = pos;
181 this.newAvatar = true;
182 this.childAgent = false;
183 }
184
185 protected void MakeChildAgent()
186 {
187 this.Velocity = new LLVector3(0, 0, 0);
188 this.Pos = new LLVector3(128, 128, 70);
189 this.childAgent = true;
190 }
191
192 /// <summary>
193 ///
194 /// </summary>
195 /// <param name="pos"></param>
196 public void Teleport(LLVector3 pos)
197 {
198 this.Pos = pos;
199 this.SendTerseUpdateToALLClients();
200 }
201
202 /// <summary>
203 ///
204 /// </summary>
205 public void StopMovement()
206 {
207
208 }
209 #endregion
210
211 #region Event Handlers
212 /// <summary>
213 ///
214 /// </summary>
215 /// <param name="texture"></param>
216 /// <param name="visualParam"></param>
217 public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam)
218 {
219
220 }
221
222 /// <summary>
223 /// Complete Avatar's movement into the region
224 /// </summary>
225 public void CompleteMovement()
226 {
227 LLVector3 look = this.Velocity;
228 if ((look.X == 0) && (look.Y == 0) && (look.Z == 0))
229 {
230 look = new LLVector3(0.99f, 0.042f, 0);
231 }
232 this.ControllingClient.MoveAgentIntoRegion(m_regionInfo, Pos, look);
233 if (this.childAgent)
234 {
235 this.childAgent = false;
236 }
237 }
238
239 /// <summary>
240 ///
241 /// </summary>
242 /// <param name="pack"></param>
243 public void HandleAgentUpdate(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation)
244 {
245 int i = 0;
246 bool update_movementflag = false;
247 bool update_rotation = false;
248 bool DCFlagKeyPressed = false;
249 Vector3 agent_control_v3 = new Vector3(0, 0, 0);
250 Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z);
251
252 this.PhysActor.Flying = ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_FLY) != 0);
253
254 if (q != this.bodyRot)
255 {
256 this.bodyRot = q;
257 update_rotation = true;
258 }
259 foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof(Dir_ControlFlags)))
260 {
261 if ((flags & (uint)DCF) != 0)
262 {
263 DCFlagKeyPressed = true;
264 agent_control_v3 += Dir_Vectors[i];
265 if ((movementflag & (uint)DCF) == 0)
266 {
267 movementflag += (byte)(uint)DCF;
268 update_movementflag = true;
269 }
270 }
271 else
272 {
273 if ((movementflag & (uint)DCF) != 0)
274 {
275 movementflag -= (byte)(uint)DCF;
276 update_movementflag = true;
277 }
278 }
279 i++;
280 }
281 if ((update_movementflag) || (update_rotation && DCFlagKeyPressed))
282 {
283 this.AddNewMovement(agent_control_v3, q);
284 }
285 UpdateMovementAnimations(update_movementflag);
286 }
287
288 protected void UpdateMovementAnimations(bool update_movementflag)
289 {
290 if (update_movementflag)
291 {
292 if (movementflag != 0)
293 {
294 if (this._physActor.Flying)
295 {
296 this.SendAnimPack(Animations.AnimsLLUUID["FLY"], 1);
297 }
298 else
299 {
300 this.SendAnimPack(Animations.AnimsLLUUID["WALK"], 1);
301 }
302 }
303 else
304 {
305 this.SendAnimPack(Animations.AnimsLLUUID["STAND"], 1);
306 }
307 }
308
309 }
310
311
312 protected void AddNewMovement(Vector3 vec, Quaternion rotation)
313 {
314 NewForce newVelocity = new NewForce();
315 Vector3 direc = rotation * vec;
316 direc.Normalize();
317
318 direc = direc * ((0.03f) * 128f);
319 if (this._physActor.Flying)
320 direc *= 4;
321
322 newVelocity.X = direc.x;
323 newVelocity.Y = direc.y;
324 newVelocity.Z = direc.z;
325 this.forcesList.Add(newVelocity);
326 }
327
328 #endregion
329
330 #region Overridden Methods
331 /// <summary>
332 ///
333 /// </summary>
334 public override void LandRenegerated()
335 {
336
337 }
338
339 /// <summary>
340 ///
341 /// </summary>
342 public override void update()
343 {
344 if (this.childAgent == false)
345 {
346 if (this.newForce)
347 {
348 this.SendTerseUpdateToALLClients();
349 _updateCount = 0;
350 }
351 else if (movementflag != 0)
352 {
353 _updateCount++;
354 if (_updateCount > 3)
355 {
356 this.SendTerseUpdateToALLClients();
357 _updateCount = 0;
358 }
359 }
360
361 this.CheckForBorderCrossing();
362 }
363 }
364 #endregion
365
366 #region Update Client(s)
367 /// <summary>
368 ///
369 /// </summary>
370 /// <param name="RemoteClient"></param>
371 public void SendTerseUpdateToClient(IClientAPI RemoteClient)
372 {
373 LLVector3 pos = this.Pos;
374 LLVector3 vel = this.Velocity;
375 RemoteClient.SendAvatarTerseUpdate(this.m_regionHandle, 64096, this.LocalId, new LLVector3(pos.X, pos.Y, pos.Z), new LLVector3(vel.X, vel.Y, vel.Z));
376 }
377
378 /// <summary>
379 ///
380 /// </summary>
381 public void SendTerseUpdateToALLClients()
382 {
383 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
384 for (int i = 0; i < avatars.Count; i++)
385 {
386 this.SendTerseUpdateToClient(avatars[i].ControllingClient);
387 }
388 }
389
390 /// <summary>
391 ///
392 /// </summary>
393 /// <param name="remoteAvatar"></param>
394 public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar)
395 {
396 remoteAvatar.ControllingClient.SendAvatarData(m_regionInfo.RegionHandle, this.firstname, this.lastname, this.uuid, this.LocalId, this.Pos, DefaultTexture);
397 }
398
399 public void SendFullUpdateToALLClients()
400 {
401 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
402 foreach (ScenePresence avatar in this.m_world.RequestAvatarList())
403 {
404 this.SendFullUpdateToOtherClient(avatar);
405 avatar.SendFullUpdateToOtherClient(this);
406 }
407 }
408
409 /// <summary>
410 ///
411 /// </summary>
412 public void SendInitialData()
413 {
414 this.ControllingClient.SendAvatarData(m_regionInfo.RegionHandle, this.firstname, this.lastname, this.uuid, this.LocalId, this.Pos, DefaultTexture);
415 if (this.newAvatar)
416 {
417 this.m_world.InformClientOfNeighbours(this.ControllingClient);
418 this.newAvatar = false;
419 }
420 }
421
422 /// <summary>
423 ///
424 /// </summary>
425 /// <param name="OurClient"></param>
426 public void SendOurAppearance(IClientAPI OurClient)
427 {
428 this.ControllingClient.SendWearables(this.Wearables);
429 this.SendFullUpdateToALLClients();
430 this.m_world.SendAllSceneObjectsToClient(this.ControllingClient);
431 }
432
433 /// <summary>
434 ///
435 /// </summary>
436 /// <param name="avatarInfo"></param>
437 public void SendAppearanceToOtherAgent(ScenePresence avatarInfo)
438 {
439
440 }
441
442 /// <summary>
443 ///
444 /// </summary>
445 /// <param name="animID"></param>
446 /// <param name="seq"></param>
447 public void SendAnimPack(LLUUID animID, int seq)
448 {
449 this.current_anim = animID;
450 this.anim_seq = seq;
451 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
452 for (int i = 0; i < avatars.Count; i++)
453 {
454 avatars[i].ControllingClient.SendAnimation(animID, seq, this.ControllingClient.AgentId);
455 }
456 }
457
458 /// <summary>
459 ///
460 /// </summary>
461 public void SendAnimPack()
462 {
463 this.SendAnimPack(this.current_anim, this.anim_seq);
464 }
465 #endregion
466
467 #region Border Crossing Methods
468 /// <summary>
469 ///
470 /// </summary>
471 protected void CheckForBorderCrossing()
472 {
473 LLVector3 pos2 = this.Pos;
474 LLVector3 vel = this.Velocity;
475
476 float timeStep = 0.2f;
477 pos2.X = pos2.X + (vel.X * timeStep);
478 pos2.Y = pos2.Y + (vel.Y * timeStep);
479 pos2.Z = pos2.Z + (vel.Z * timeStep);
480
481 if ((pos2.X < 0) || (pos2.X > 256))
482 {
483 this.CrossToNewRegion();
484 }
485
486 if ((pos2.Y < 0) || (pos2.Y > 256))
487 {
488 this.CrossToNewRegion();
489 }
490 }
491
492 /// <summary>
493 ///
494 /// </summary>
495 protected void CrossToNewRegion()
496 {
497 LLVector3 pos = this.Pos;
498 LLVector3 newpos = new LLVector3(pos.X, pos.Y, pos.Z);
499 uint neighbourx = this.m_regionInfo.RegionLocX;
500 uint neighboury = this.m_regionInfo.RegionLocY;
501
502 if (pos.X < 2)
503 {
504 neighbourx -= 1;
505 newpos.X = 254;
506 }
507 if (pos.X > 253)
508 {
509 neighbourx += 1;
510 newpos.X = 1;
511 }
512 if (pos.Y < 2)
513 {
514 neighboury -= 1;
515 newpos.Y = 254;
516 }
517 if (pos.Y > 253)
518 {
519 neighboury += 1;
520 newpos.Y = 1;
521 }
522
523 LLVector3 vel = this.m_velocity;
524 ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * 256), (uint)(neighboury * 256));
525 RegionInfo neighbourRegion = this.m_world.RequestNeighbouringRegionInfo(neighbourHandle);
526 if (neighbourRegion != null)
527 {
528 bool res = this.m_world.InformNeighbourOfCrossing(neighbourHandle, this.ControllingClient.AgentId, newpos);
529 if (res)
530 {
531 this.MakeChildAgent();
532 this.ControllingClient.CrossRegion(neighbourHandle, newpos, vel, neighbourRegion.InternalEndPoint);
533 }
534 }
535 }
536 #endregion
537
538 /// <summary>
539 ///
540 /// </summary>
541 public static void LoadAnims()
542 {
543
544 }
545
546 /// <summary>
547 ///
548 /// </summary>
549 public override void updateMovement()
550 {
551 newForce = false;
552 lock (this.forcesList)
553 {
554 if (this.forcesList.Count > 0)
555 {
556 for (int i = 0; i < this.forcesList.Count; i++)
557 {
558 NewForce force = this.forcesList[i];
559
560 this.updateflag = true;
561 this.Velocity = new LLVector3(force.X, force.Y, force.Z);
562 this.newForce = true;
563 }
564 for (int i = 0; i < this.forcesList.Count; i++)
565 {
566 this.forcesList.RemoveAt(0);
567 }
568 }
569 }
570 }
571
572 public static void LoadTextureFile(string name)
573 {
574 FileInfo fInfo = new FileInfo(name);
575 long numBytes = fInfo.Length;
576 FileStream fStream = new FileStream(name, FileMode.Open, FileAccess.Read);
577 BinaryReader br = new BinaryReader(fStream);
578 byte[] data1 = br.ReadBytes((int)numBytes);
579 br.Close();
580 fStream.Close();
581 DefaultTexture = data1;
582 }
583
584 public class NewForce
585 {
586 public float X;
587 public float Y;
588 public float Z;
589
590 public NewForce()
591 {
592
593 }
594 }
595 }
596
597}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/CSharpEngine/CSharpScriptEngine.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/CSharpEngine/CSharpScriptEngine.cs
new file mode 100644
index 0000000..9cb881a
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/CSharpEngine/CSharpScriptEngine.cs
@@ -0,0 +1,102 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.CodeDom.Compiler;
30using System.Collections.Generic;
31using Microsoft.CSharp;
32using OpenSim.Framework.Console;
33
34namespace OpenSim.Region.Environment.Scripting
35{
36 public class CSharpScriptEngine : IScriptCompiler
37 {
38 public string FileExt()
39 {
40 return ".cs";
41 }
42
43 private Dictionary<string,IScript> LoadDotNetScript(CodeDomProvider compiler, string filename)
44 {
45 CompilerParameters compilerParams = new CompilerParameters();
46 CompilerResults compilerResults;
47 compilerParams.GenerateExecutable = false;
48 compilerParams.GenerateInMemory = true;
49 compilerParams.IncludeDebugInformation = false;
50 compilerParams.ReferencedAssemblies.Add("OpenSim.Region.dll");
51 compilerParams.ReferencedAssemblies.Add("OpenSim.Region.Enviroment.dll");
52 compilerParams.ReferencedAssemblies.Add("OpenSim.Framework.dll");
53 compilerParams.ReferencedAssemblies.Add("libsecondlife.dll");
54 compilerParams.ReferencedAssemblies.Add("System.dll");
55
56 compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename);
57
58 if (compilerResults.Errors.Count > 0)
59 {
60 MainLog.Instance.Error("Compile errors");
61 foreach (CompilerError error in compilerResults.Errors)
62 {
63 MainLog.Instance.Error(error.Line.ToString() + ": " + error.ErrorText.ToString());
64 }
65 }
66 else
67 {
68 Dictionary<string,IScript> scripts = new Dictionary<string,IScript>();
69
70 foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes())
71 {
72 Type testInterface = pluginType.GetInterface("IScript", true);
73
74 if (testInterface != null)
75 {
76 IScript script = (IScript)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString());
77
78 string scriptName = "C#/" + script.getName();
79 Console.WriteLine("Script: " + scriptName + " loaded.");
80
81 if (!scripts.ContainsKey(scriptName))
82 {
83 scripts.Add(scriptName, script);
84 }
85 else
86 {
87 scripts[scriptName] = script;
88 }
89 }
90 }
91 return scripts;
92 }
93 return null;
94 }
95
96 public Dictionary<string,IScript> compile(string filename)
97 {
98 CSharpCodeProvider csharpProvider = new CSharpCodeProvider();
99 return LoadDotNetScript(csharpProvider, filename);
100 }
101 }
102}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JScriptEngine/JScriptEngine.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JScriptEngine/JScriptEngine.cs
new file mode 100644
index 0000000..be1fe56
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JScriptEngine/JScriptEngine.cs
@@ -0,0 +1,102 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.CodeDom.Compiler;
30using System.Collections.Generic;
31using Microsoft.JScript;
32using OpenSim.Framework.Console;
33
34namespace OpenSim.Region.Environment.Scripting
35{
36 public class JScriptEngine : IScriptCompiler
37 {
38 public string FileExt()
39 {
40 return ".js";
41 }
42
43 private Dictionary<string, IScript> LoadDotNetScript(CodeDomProvider compiler, string filename)
44 {
45 CompilerParameters compilerParams = new CompilerParameters();
46 CompilerResults compilerResults;
47 compilerParams.GenerateExecutable = false;
48 compilerParams.GenerateInMemory = true;
49 compilerParams.IncludeDebugInformation = false;
50 compilerParams.ReferencedAssemblies.Add("OpenSim.Region.dll");
51 compilerParams.ReferencedAssemblies.Add("OpenSim.Region.Enviroment.dll");
52 compilerParams.ReferencedAssemblies.Add("OpenSim.Framework.dll");
53 compilerParams.ReferencedAssemblies.Add("libsecondlife.dll");
54 compilerParams.ReferencedAssemblies.Add("System.dll");
55
56 compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename);
57
58 if (compilerResults.Errors.Count > 0)
59 {
60 MainLog.Instance.Error("Compile errors");
61 foreach (CompilerError error in compilerResults.Errors)
62 {
63 MainLog.Instance.Error(error.Line.ToString() + ": " + error.ErrorText.ToString());
64 }
65 }
66 else
67 {
68 Dictionary<string, IScript> scripts = new Dictionary<string, IScript>();
69
70 foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes())
71 {
72 Type testInterface = pluginType.GetInterface("IScript", true);
73
74 if (testInterface != null)
75 {
76 IScript script = (IScript)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString());
77
78 string scriptName = "JS.NET/" + script.getName();
79 Console.WriteLine("Script: " + scriptName + " loaded.");
80
81 if (!scripts.ContainsKey(scriptName))
82 {
83 scripts.Add(scriptName, script);
84 }
85 else
86 {
87 scripts[scriptName] = script;
88 }
89 }
90 }
91 return scripts;
92 }
93 return null;
94 }
95
96 public Dictionary<string, IScript> compile(string filename)
97 {
98 JScriptCodeProvider jscriptProvider = new JScriptCodeProvider();
99 return LoadDotNetScript(jscriptProvider, filename);
100 }
101 }
102}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassInstance.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassInstance.cs
new file mode 100644
index 0000000..1d93197
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassInstance.cs
@@ -0,0 +1,45 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using OpenSim.Scripting.EmbeddedJVM.Types;
32
33namespace OpenSim.Scripting.EmbeddedJVM
34{
35 public class ClassInstance : Object
36 {
37 public int size;
38 public Dictionary<string, BaseType> Fields = new Dictionary<string, BaseType>();
39
40 public ClassInstance()
41 {
42
43 }
44 }
45}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassRecord.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassRecord.cs
new file mode 100644
index 0000000..f4ab1a2
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/ClassRecord.cs
@@ -0,0 +1,503 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.IO;
30using System.Collections.Generic;
31using System.Text;
32using OpenSim.Scripting.EmbeddedJVM.Types;
33
34namespace OpenSim.Scripting.EmbeddedJVM
35{
36 public class ClassRecord
37 {
38 private ushort _majorVersion;
39 private ushort _minorVersion;
40 private ushort _constantPoolCount;
41 private ushort _accessFlags;
42 private ushort _thisClass;
43 private ushort _supperClass;
44 private ushort _interfaceCount;
45 private ushort _fieldCount;
46 private ushort _methodCount;
47 //private ushort _attributeCount;
48 //private string _name;
49 public Dictionary<string, BaseType> StaticFields = new Dictionary<string, BaseType>();
50 public PoolClass mClass;
51
52 public List<PoolItem> _constantsPool = new List<PoolItem>();
53 private List<MethodInfo> _methodsList = new List<MethodInfo>();
54 private List<FieldInfo> _fieldList = new List<FieldInfo>();
55
56 public ClassRecord()
57 {
58
59 }
60
61 public ClassInstance CreateNewInstance()
62 {
63 return new ClassInstance();
64 }
65
66 public void LoadClassFromFile(string fileName)
67 {
68 Console.WriteLine("loading script " + fileName);
69 FileStream fs = File.OpenRead(fileName);
70 this.LoadClassFromBytes(ReadFully(fs));
71 fs.Close();
72 }
73
74 public void LoadClassFromBytes(byte[] data)
75 {
76 int i = 0;
77 i += 4;
78 _minorVersion = (ushort)((data[i++] << 8) + data[i++] );
79 _majorVersion = (ushort)((data[i++] << 8) + data[i++] );
80 _constantPoolCount = (ushort)((data[i++] << 8) + data[i++] );
81 // Console.WriteLine("there should be " + _constantPoolCount + " items in the pool");
82 for (int count = 0; count < _constantPoolCount -1 ; count++)
83 {
84 //read in the constant pool
85 byte pooltype = data[i++];
86 //Console.WriteLine("#" +count +": new constant type = " +pooltype);
87 //Console.WriteLine("start position is: " + i);
88 switch (pooltype)
89 {
90 case 1: //Utf8
91 ushort uLength = (ushort)((data[i++] << 8) + data[i++] );
92
93 // Console.WriteLine("new utf8 type, length is " + uLength);
94 PoolUtf8 utf8 = new PoolUtf8();
95 utf8.readValue(data, ref i, uLength);
96 this._constantsPool.Add(utf8);
97 break;
98 case 3: //Int
99 break;
100 case 7: //Class
101 PoolClass pClass = new PoolClass(this);
102 pClass.readValue(data, ref i);
103 this._constantsPool.Add(pClass);
104 break;
105 case 10: //Method
106 PoolMethodRef pMeth = new PoolMethodRef(this);
107 pMeth.readValue(data, ref i);
108 this._constantsPool.Add(pMeth);
109 break;
110 case 12: //NamedType
111 PoolNamedType pNamed = new PoolNamedType(this);
112 pNamed.readValue(data, ref i);
113 this._constantsPool.Add(pNamed);
114 break;
115 }
116 }
117
118 _accessFlags = (ushort)((data[i++] << 8) + data[i++] );
119 _thisClass = (ushort)((data[i++] << 8) + data[i++] );
120 _supperClass = (ushort)((data[i++] << 8) + data[i++] );
121
122 if (this._constantsPool[this._thisClass - 1] is PoolClass)
123 {
124 this.mClass = ((PoolClass)this._constantsPool[this._thisClass - 1]);
125 }
126
127 _interfaceCount = (ushort)((data[i++] << 8) + data[i++]);
128 //should now read in the info for each interface
129 _fieldCount = (ushort)((data[i++] << 8) + data[i++]);
130 //should now read in the info for each field
131 _methodCount = (ushort)((data[i++] << 8) + data[i++]);
132 for (int count = 0; count < _methodCount; count++)
133 {
134 MethodInfo methInf = new MethodInfo(this);
135 methInf.ReadData(data, ref i);
136 this._methodsList.Add(methInf);
137 }
138 }
139
140 public void AddMethodsToMemory(MethodMemory memory)
141 {
142 for (int count = 0; count < _methodCount; count++)
143 {
144 this._methodsList[count].AddMethodCode(memory);
145 }
146 }
147
148 public bool StartMethod(Thread thread, string methodName)
149 {
150 for (int count = 0; count < _methodCount; count++)
151 {
152 if (this._constantsPool[this._methodsList[count].NameIndex-1] is PoolUtf8)
153 {
154 if (((PoolUtf8)this._constantsPool[this._methodsList[count].NameIndex-1]).Value == methodName)
155 {
156 //Console.WriteLine("found method: " + ((PoolUtf8)this._constantsPool[this._methodsList[count].NameIndex - 1]).Value);
157 thread.SetPC(this._methodsList[count].CodePointer);
158 return true;
159 }
160 }
161 }
162 return false;
163 }
164
165 public void PrintToConsole()
166 {
167 Console.WriteLine("Class File:");
168 Console.WriteLine("Major version: " + _majorVersion);
169 Console.WriteLine("Minor version: " + _minorVersion);
170 Console.WriteLine("Pool size: " + _constantPoolCount);
171
172 for (int i = 0; i < _constantsPool.Count; i++)
173 {
174 this._constantsPool[i].Print();
175 }
176
177 Console.WriteLine("Access flags: " + _accessFlags);
178 Console.WriteLine("This class: " + _thisClass );
179 Console.WriteLine("Super class: " + _supperClass);
180
181 for (int count = 0; count < _methodCount; count++)
182 {
183 Console.WriteLine();
184 this._methodsList[count].Print();
185 }
186
187 Console.WriteLine("class name is " + this.mClass.Name.Value);
188 }
189
190 public static byte[] ReadFully(Stream stream)
191 {
192 byte[] buffer = new byte[1024];
193 using (MemoryStream ms = new MemoryStream())
194 {
195 while (true)
196 {
197 int read = stream.Read(buffer, 0, buffer.Length);
198 if (read <= 0)
199 return ms.ToArray();
200 ms.Write(buffer, 0, read);
201 }
202 }
203 }
204
205 #region nested classes
206 public class PoolItem
207 {
208 public virtual void Print()
209 {
210
211 }
212 }
213
214 public class PoolUtf8 : PoolItem
215 {
216 public string Value = "";
217
218 public void readValue(byte[] data,ref int pointer , int length)
219 {
220 for (int i = 0; i < length; i++)
221 {
222 int a =(int) data[pointer++];
223 if ((a & 0x80) == 0)
224 {
225 Value = Value + (char)a;
226 }
227 else if ((a & 0x20) == 0)
228 {
229 int b = (int) data[pointer++];
230 Value = Value + (char)(((a & 0x1f) << 6) + (b & 0x3f));
231 }
232 else
233 {
234 int b = (int)data[pointer++];
235 int c = (int)data[pointer++];
236 Value = Value + (char)(((a & 0xf) << 12) + ((b & 0x3f) << 6) + (c & 0x3f));
237 }
238 }
239 }
240
241 public override void Print()
242 {
243 Console.WriteLine("Utf8 type: " + Value);
244 }
245 }
246
247 private class PoolInt : PoolItem
248 {
249
250 }
251
252 public class PoolClass : PoolItem
253 {
254 //public string name = "";
255 public ushort namePointer = 0;
256 private ClassRecord parent;
257 public PoolUtf8 Name;
258
259 public PoolClass(ClassRecord paren)
260 {
261 parent = paren;
262 }
263
264 public void readValue(byte[] data, ref int pointer)
265 {
266 namePointer = (ushort)((data[pointer++] << 8) + data[pointer++] );
267 }
268
269 public override void Print()
270 {
271 this.Name = ((PoolUtf8)this.parent._constantsPool[namePointer - 1]);
272 Console.Write("Class type: " + namePointer);
273 Console.WriteLine(" // " + ((PoolUtf8)this.parent._constantsPool[namePointer - 1]).Value);
274
275 }
276 }
277
278 public class PoolMethodRef : PoolItem
279 {
280 public ushort classPointer = 0;
281 public ushort nameTypePointer = 0;
282 public PoolNamedType mNameType;
283 public PoolClass mClass;
284 private ClassRecord parent;
285
286 public PoolMethodRef(ClassRecord paren)
287 {
288 parent = paren;
289 }
290
291 public void readValue(byte[] data, ref int pointer)
292 {
293 classPointer = (ushort)((data[pointer++] << 8) + data[pointer++]);
294 nameTypePointer = (ushort)((data[pointer++] << 8) + data[pointer++]);
295 }
296
297 public override void Print()
298 {
299 this.mNameType = ((PoolNamedType)this.parent._constantsPool[nameTypePointer - 1]);
300 this.mClass = ((PoolClass)this.parent._constantsPool[classPointer - 1]);
301 Console.WriteLine("MethodRef type: " + classPointer + " , " + nameTypePointer);
302 }
303 }
304
305 public class PoolNamedType : PoolItem
306 {
307 public ushort namePointer = 0;
308 public ushort typePointer = 0;
309 private ClassRecord parent;
310 public PoolUtf8 Name;
311 public PoolUtf8 Type;
312
313 public PoolNamedType(ClassRecord paren)
314 {
315 parent = paren;
316 }
317
318 public void readValue(byte[] data, ref int pointer)
319 {
320 namePointer = (ushort)((data[pointer++] << 8) + data[pointer++] );
321 typePointer = (ushort)((data[pointer++] << 8) + data[pointer++] );
322 }
323
324 public override void Print()
325 {
326 Name = ((PoolUtf8)this.parent._constantsPool[namePointer-1]);
327 Type = ((PoolUtf8)this.parent._constantsPool[typePointer-1]);
328 Console.Write("Named type: " + namePointer + " , " + typePointer );
329 Console.WriteLine(" // "+ ((PoolUtf8)this.parent._constantsPool[namePointer-1]).Value);
330 }
331 }
332
333 //***********************
334 public class MethodInfo
335 {
336 public ushort AccessFlags = 0;
337 public ushort NameIndex = 0;
338 public string Name = "";
339 public ushort DescriptorIndex = 0;
340 public ushort AttributeCount = 0;
341 public List<MethodAttribute> Attributes = new List<MethodAttribute>();
342 private ClassRecord parent;
343 public int CodePointer = 0;
344
345 public MethodInfo(ClassRecord paren)
346 {
347 parent = paren;
348 }
349
350 public void AddMethodCode(MethodMemory memory)
351 {
352 Array.Copy(this.Attributes[0].Code, 0, memory.MethodBuffer, memory.NextMethodPC, this.Attributes[0].Code.Length);
353 memory.Methodcount++;
354 this.CodePointer = memory.NextMethodPC;
355 memory.NextMethodPC += this.Attributes[0].Code.Length;
356 }
357
358 public void ReadData(byte[] data, ref int pointer)
359 {
360 AccessFlags = (ushort)((data[pointer++] << 8) + data[pointer++]);
361 NameIndex = (ushort)((data[pointer++] << 8) + data[pointer++]);
362 DescriptorIndex = (ushort)((data[pointer++] << 8) + data[pointer++]);
363 AttributeCount = (ushort)((data[pointer++] << 8) + data[pointer++]);
364 for(int i =0; i< AttributeCount; i++)
365 {
366 MethodAttribute attri = new MethodAttribute(this.parent);
367 attri.ReadData(data, ref pointer);
368 this.Attributes.Add(attri);
369 }
370 }
371
372 public void Print()
373 {
374 Console.WriteLine("Method Info Struct: ");
375 Console.WriteLine("AccessFlags: " + AccessFlags);
376 Console.WriteLine("NameIndex: " + NameIndex +" // "+ ((PoolUtf8)this.parent._constantsPool[NameIndex-1]).Value);
377 Console.WriteLine("DescriptorIndex: " + DescriptorIndex + " // "+ ((PoolUtf8)this.parent._constantsPool[DescriptorIndex-1]).Value);
378 Console.WriteLine("Attribute Count:" + AttributeCount);
379 for (int i = 0; i < AttributeCount; i++)
380 {
381 this.Attributes[i].Print();
382 }
383 }
384
385 public class MethodAttribute
386 {
387 public ushort NameIndex = 0;
388 public string Name = "";
389 public Int32 Length = 0;
390 //for now only support code attribute
391 public ushort MaxStack = 0;
392 public ushort MaxLocals = 0;
393 public Int32 CodeLength = 0;
394 public byte[] Code;
395 public ushort ExceptionTableLength = 0;
396 public ushort SubAttributeCount = 0;
397 public List<SubAttribute> SubAttributes = new List<SubAttribute>();
398 private ClassRecord parent;
399
400 public MethodAttribute(ClassRecord paren)
401 {
402 parent = paren;
403 }
404
405 public void ReadData(byte[] data, ref int pointer)
406 {
407 NameIndex = (ushort)((data[pointer++] << 8) + data[pointer++]);
408 Length = (Int32)((data[pointer++] << 24) + (data[pointer++] << 16) + (data[pointer++] << 8) + data[pointer++]);
409 MaxStack = (ushort)((data[pointer++] << 8) + data[pointer++]);
410 MaxLocals = (ushort)((data[pointer++] << 8) + data[pointer++]);
411 CodeLength = (Int32)((data[pointer++] << 24) + (data[pointer++] << 16) + (data[pointer++] << 8) + data[pointer++]);
412 Code = new byte[CodeLength];
413 for (int i = 0; i < CodeLength; i++)
414 {
415 Code[i] = data[pointer++];
416 }
417 ExceptionTableLength = (ushort)((data[pointer++] << 8) + data[pointer++]);
418 SubAttributeCount = (ushort)((data[pointer++] << 8) + data[pointer++]);
419 for (int i = 0; i < SubAttributeCount; i++)
420 {
421 SubAttribute subAttri = new SubAttribute(this.parent);
422 subAttri.ReadData(data, ref pointer);
423 this.SubAttributes.Add(subAttri);
424 }
425 }
426
427 public void Print()
428 {
429 Console.WriteLine("Method Attribute: ");
430 Console.WriteLine("Name Index: " + NameIndex + " // "+ ((PoolUtf8)this.parent._constantsPool[NameIndex-1]).Value);
431 Console.WriteLine("Length: " + Length);
432 Console.WriteLine("MaxStack: " + MaxStack);
433 Console.WriteLine("MaxLocals: " + MaxLocals);
434 Console.WriteLine("CodeLength: " + CodeLength);
435 for (int i = 0; i < Code.Length; i++)
436 {
437 Console.WriteLine("OpCode #" + i + " is: " + Code[i]);
438 }
439 Console.WriteLine("SubAttributes: " + SubAttributeCount);
440 for (int i = 0; i < SubAttributeCount; i++)
441 {
442 this.SubAttributes[i].Print();
443 }
444 }
445
446 public class SubAttribute
447 {
448 public ushort NameIndex = 0;
449 public string Name = "";
450 public Int32 Length = 0;
451 public byte[] Data;
452 private ClassRecord parent;
453
454 public SubAttribute(ClassRecord paren)
455 {
456 parent = paren;
457 }
458
459 public void ReadData(byte[] data, ref int pointer)
460 {
461 NameIndex = (ushort)((data[pointer++] << 8) + data[pointer++]);
462 Length = (Int32)((data[pointer++] << 24) + (data[pointer++] << 16) + (data[pointer++] << 8) + data[pointer++]);
463 Data = new byte[Length];
464 for (int i = 0; i < Length; i++)
465 {
466 Data[i] = data[pointer++];
467 }
468 }
469
470 public void Print()
471 {
472 Console.WriteLine("SubAttribute: NameIndex: " + NameIndex + " // " + ((PoolUtf8)this.parent._constantsPool[NameIndex - 1]).Value);
473 }
474
475 }
476 }
477
478 }
479 private class InterfaceInfo
480 {
481 public void ReadData(byte[] data, ref int i)
482 {
483
484 }
485 }
486 private class FieldInfo
487 {
488 public void ReadData(byte[] data, ref int i)
489 {
490
491 }
492 }
493 private class AttributeInfo
494 {
495 public void ReadData(byte[] data, ref int i)
496 {
497
498 }
499 }
500 #endregion
501
502 }
503}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Heap.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Heap.cs
new file mode 100644
index 0000000..f213c36
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Heap.cs
@@ -0,0 +1,43 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31
32namespace OpenSim.Scripting.EmbeddedJVM
33{
34 public class Heap
35 {
36 public List<ClassInstance> ClassObjects = new List<ClassInstance>();
37
38 public Heap()
39 {
40
41 }
42 }
43}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.cs
new file mode 100644
index 0000000..c5995b2
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.cs
@@ -0,0 +1,135 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using OpenSim.Scripting.EmbeddedJVM.Types;
32using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
33
34namespace OpenSim.Scripting.EmbeddedJVM
35{
36 partial class Thread
37 {
38 private partial class Interpreter
39 {
40 private Thread _mThread;
41
42 public Interpreter(Thread parentThread)
43 {
44 _mThread = parentThread;
45 }
46
47 public bool Excute()
48 {
49 bool run = true;
50 byte currentOpCode = GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC++];
51 // Console.WriteLine("opCode is: " + currentOpCode);
52 bool handled = false;
53
54 handled = this.IsLogicOpCode(currentOpCode);
55 if (!handled)
56 {
57 handled = this.IsMethodOpCode(currentOpCode);
58 }
59 if (!handled)
60 {
61 if (currentOpCode == 172)
62 {
63 if (this._mThread.stack.StackFrames.Count > 1)
64 {
65 Console.WriteLine("returning int from function");
66 int retPC1 = this._mThread.currentFrame.ReturnPC;
67 BaseType bas1 = this._mThread.currentFrame.OpStack.Pop();
68 this._mThread.stack.StackFrames.Pop();
69 this._mThread.currentFrame = this._mThread.stack.StackFrames.Peek();
70 this._mThread.PC = retPC1;
71 if (bas1 is Int)
72 {
73 this._mThread.currentFrame.OpStack.Push((Int)bas1);
74 }
75 }
76 else
77 {
78 // Console.WriteLine("No parent function so ending program");
79 this._mThread.stack.StackFrames.Pop();
80 run = false;
81 }
82 handled = true;
83 }
84 if (currentOpCode == 174)
85 {
86 if (this._mThread.stack.StackFrames.Count > 1)
87 {
88 Console.WriteLine("returning float from function");
89 int retPC1 = this._mThread.currentFrame.ReturnPC;
90 BaseType bas1 = this._mThread.currentFrame.OpStack.Pop();
91 this._mThread.stack.StackFrames.Pop();
92 this._mThread.currentFrame = this._mThread.stack.StackFrames.Peek();
93 this._mThread.PC = retPC1;
94 if (bas1 is Float)
95 {
96 this._mThread.currentFrame.OpStack.Push((Float)bas1);
97 }
98 }
99 else
100 {
101 // Console.WriteLine("No parent function so ending program");
102 this._mThread.stack.StackFrames.Pop();
103 run = false;
104 }
105 handled = true;
106 }
107 if (currentOpCode == 177)
108 {
109 if (this._mThread.stack.StackFrames.Count > 1)
110 {
111 Console.WriteLine("returning from function");
112 int retPC = this._mThread.currentFrame.ReturnPC;
113 this._mThread.stack.StackFrames.Pop();
114 this._mThread.currentFrame = this._mThread.stack.StackFrames.Peek();
115 this._mThread.PC = retPC;
116 }
117 else
118 {
119 // Console.WriteLine("No parent function so ending program");
120 this._mThread.stack.StackFrames.Pop();
121 run = false;
122 }
123 handled = true;
124 }
125 }
126 if (!handled)
127 {
128 Console.WriteLine("opcode " + currentOpCode + " not been handled ");
129 }
130 return run;
131
132 }
133 }
134 }
135}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs
new file mode 100644
index 0000000..2a11afd
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs
@@ -0,0 +1,427 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using OpenSim.Scripting.EmbeddedJVM.Types;
32using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
33
34namespace OpenSim.Scripting.EmbeddedJVM
35{
36 partial class Thread
37 {
38 private partial class Interpreter
39 {
40 private bool IsLogicOpCode(byte opcode)
41 {
42 bool result = false;
43 switch (opcode)
44 {
45 case 2:
46 Int m_int= new Int();
47 m_int.mValue = -1;
48 this._mThread.currentFrame.OpStack.Push(m_int);
49 result = true;
50 break;
51 case 3:
52 m_int= new Int();
53 m_int.mValue = 0;
54 this._mThread.currentFrame.OpStack.Push(m_int);
55 result = true;
56 break;
57 case 4:
58 m_int = new Int();
59 m_int.mValue = 1;
60 this._mThread.currentFrame.OpStack.Push(m_int);
61 result = true;
62 break;
63 case 5:
64 m_int = new Int();
65 m_int.mValue = 2;
66 this._mThread.currentFrame.OpStack.Push(m_int);
67 result = true;
68 break;
69 case 6:
70 m_int = new Int();
71 m_int.mValue = 3;
72 this._mThread.currentFrame.OpStack.Push(m_int);
73 break;
74 case 7:
75 m_int = new Int();
76 m_int.mValue = 4;
77 this._mThread.currentFrame.OpStack.Push(m_int);
78 result = true;
79 break;
80 case 8:
81 m_int = new Int();
82 m_int.mValue = 5;
83 this._mThread.currentFrame.OpStack.Push(m_int);
84 result = true;
85 break;
86 case 11:
87 Float m_float = new Float();
88 m_float.mValue = 0.0f;
89 this._mThread.currentFrame.OpStack.Push(m_float);
90 result = true;
91 break;
92 case 12:
93 m_float = new Float();
94 m_float.mValue = 1.0f;
95 this._mThread.currentFrame.OpStack.Push(m_float);
96 result = true;
97 break;
98 case 13:
99 m_float = new Float();
100 m_float.mValue = 2.0f;
101 this._mThread.currentFrame.OpStack.Push(m_float);
102 result = true;
103 break;
104 case 16:
105 int pushvalue = (int)GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC];
106 Int pushInt = new Int();
107 pushInt.mValue = pushvalue;
108 this._mThread.currentFrame.OpStack.Push(pushInt);
109 this._mThread.PC++;
110 result = true;
111 break;
112 case 17:
113 short pushvalue2 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
114 Int pushInt2 = new Int();
115 pushInt2.mValue = pushvalue2;
116 this._mThread.currentFrame.OpStack.Push(pushInt2);
117 this._mThread.PC += 2;
118 result = true;
119 break;
120 case 23:
121 short findex1 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]));
122 Float fload = new Float();
123 if (this._mThread.currentFrame.LocalVariables[findex1] != null)
124 {
125 if (this._mThread.currentFrame.LocalVariables[findex1] is Float)
126 {
127 fload.mValue = ((Float)this._mThread.currentFrame.LocalVariables[findex1]).mValue;
128 this._mThread.currentFrame.OpStack.Push(fload);
129 }
130 }
131 this._mThread.PC++;
132 result = true;
133 break;
134 case 26:
135 if (this._mThread.currentFrame.LocalVariables[0] != null)
136 {
137 if (this._mThread.currentFrame.LocalVariables[0] is Int)
138 {
139 Int newInt = new Int();
140 newInt.mValue = ((Int)this._mThread.currentFrame.LocalVariables[0]).mValue;
141 this._mThread.currentFrame.OpStack.Push(newInt);
142 }
143 }
144 result = true;
145 break;
146 case 27:
147 if (this._mThread.currentFrame.LocalVariables[1] != null)
148 {
149 if (this._mThread.currentFrame.LocalVariables[1] is Int)
150 {
151 Int newInt = new Int();
152 newInt.mValue = ((Int)this._mThread.currentFrame.LocalVariables[1]).mValue;
153 this._mThread.currentFrame.OpStack.Push(newInt);
154 }
155 }
156 result = true;
157 break;
158 case 34:
159 if (this._mThread.currentFrame.LocalVariables[0] != null)
160 {
161 if (this._mThread.currentFrame.LocalVariables[0] is Float)
162 {
163 Float newfloat = new Float();
164 newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[0]).mValue;
165 this._mThread.currentFrame.OpStack.Push(newfloat);
166 }
167 }
168 result = true;
169 break;
170 case 35:
171 if (this._mThread.currentFrame.LocalVariables[1] != null)
172 {
173 if (this._mThread.currentFrame.LocalVariables[1] is Float)
174 {
175 Float newfloat = new Float();
176 newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[1]).mValue;
177 this._mThread.currentFrame.OpStack.Push(newfloat);
178 }
179 }
180 result = true;
181 break;
182 case 36:
183 if (this._mThread.currentFrame.LocalVariables[2] != null)
184 {
185 if (this._mThread.currentFrame.LocalVariables[2] is Float)
186 {
187 Float newfloat = new Float();
188 newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[2]).mValue;
189 this._mThread.currentFrame.OpStack.Push(newfloat);
190 }
191 }
192 result = true;
193 break;
194 case 37:
195 if (this._mThread.currentFrame.LocalVariables[3] != null)
196 {
197 if (this._mThread.currentFrame.LocalVariables[3] is Float)
198 {
199 Float newfloat = new Float();
200 newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[3]).mValue;
201 this._mThread.currentFrame.OpStack.Push(newfloat);
202 }
203 }
204 result = true;
205 break;
206 case 56:
207 short findex = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] ));
208 BaseType fstor = this._mThread.currentFrame.OpStack.Pop();
209 if (fstor is Float)
210 {
211 this._mThread.currentFrame.LocalVariables[findex] = (Float)fstor;
212 }
213 this._mThread.PC++;
214 result = true;
215 break;
216 case 59:
217 BaseType baset = this._mThread.currentFrame.OpStack.Pop();
218 if (baset is Int)
219 {
220 this._mThread.currentFrame.LocalVariables[0] = (Int)baset;
221 }
222 result = true;
223 break;
224 case 60:
225 baset = this._mThread.currentFrame.OpStack.Pop();
226 if (baset is Int)
227 {
228 this._mThread.currentFrame.LocalVariables[1] = (Int)baset;
229 }
230 result = true;
231 break;
232 case 67:
233 baset = this._mThread.currentFrame.OpStack.Pop();
234 if (baset is Float)
235 {
236 this._mThread.currentFrame.LocalVariables[0] = (Float)baset;
237 }
238 result = true;
239 break;
240 case 68:
241 baset = this._mThread.currentFrame.OpStack.Pop();
242 if (baset is Float)
243 {
244 this._mThread.currentFrame.LocalVariables[1] = (Float)baset;
245 }
246 result = true;
247 break;
248 case 69:
249 baset = this._mThread.currentFrame.OpStack.Pop();
250 if (baset is Float)
251 {
252 this._mThread.currentFrame.LocalVariables[2] = (Float)baset;
253 }
254 result = true;
255 break;
256 case 70:
257 baset = this._mThread.currentFrame.OpStack.Pop();
258 if (baset is Float)
259 {
260 this._mThread.currentFrame.LocalVariables[3] = (Float)baset;
261 }
262 result = true;
263 break;
264 case 87:
265 this._mThread.currentFrame.OpStack.Pop();
266 result = true;
267 break;
268 case 98:
269 BaseType bf2 = this._mThread.currentFrame.OpStack.Pop();
270 BaseType bf1 = this._mThread.currentFrame.OpStack.Pop();
271 if (bf1 is Float && bf2 is Float)
272 {
273 Float nflt = new Float();
274 nflt.mValue = ((Float)bf1).mValue + ((Float)bf2).mValue;
275 this._mThread.currentFrame.OpStack.Push(nflt);
276 }
277 result = true;
278 break;
279 case 102:
280 BaseType bsf2 = this._mThread.currentFrame.OpStack.Pop();
281 BaseType bsf1 = this._mThread.currentFrame.OpStack.Pop();
282 if (bsf1 is Float && bsf2 is Float)
283 {
284 Float resf = new Float();
285 resf.mValue = ((Float)bsf1).mValue - ((Float)bsf2).mValue;
286 this._mThread.currentFrame.OpStack.Push(resf);
287 }
288 result = true;
289 break;
290 case 104: //check the order of the two values off the stack is correct
291 BaseType bs2 = this._mThread.currentFrame.OpStack.Pop();
292 BaseType bs1 = this._mThread.currentFrame.OpStack.Pop();
293 if (bs1 is Int && bs2 is Int)
294 {
295 Int nInt = new Int();
296 nInt.mValue = ((Int)bs1).mValue * ((Int)bs2).mValue;
297 this._mThread.currentFrame.OpStack.Push(nInt);
298 }
299 result = true;
300 break;
301 case 132:
302 if (this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]] != null)
303 {
304 if (this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]] is Int)
305 {
306 ((Int)this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]]).mValue += (sbyte) GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1];
307 }
308 }
309 this._mThread.PC += 2;
310 result = true;
311 break;
312 case 139:
313 BaseType conv1 = this._mThread.currentFrame.OpStack.Pop();
314 if (conv1 is Float)
315 {
316 Int newconv = new Int();
317 newconv.mValue = (int)((Float)conv1).mValue;
318 this._mThread.currentFrame.OpStack.Push(newconv);
319 }
320 result = true;
321 break;
322 case 149:
323 BaseType flcom2 = this._mThread.currentFrame.OpStack.Pop();
324 BaseType flcom1 = this._mThread.currentFrame.OpStack.Pop();
325 if (flcom1 is Float && flcom2 is Float)
326 {
327 Int compres = new Int();
328 if (((Float)flcom1).mValue < ((Float)flcom2).mValue)
329 {
330 compres.mValue = -1;
331 }
332 else if (((Float)flcom1).mValue > ((Float)flcom2).mValue)
333 {
334 compres.mValue = 1;
335 }
336 else
337 {
338 compres.mValue = 0;
339 }
340 this._mThread.currentFrame.OpStack.Push(compres);
341 }
342 result = true;
343 break;
344 case 158:
345 short compareoffset1 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
346 BaseType comp1 = this._mThread.currentFrame.OpStack.Pop();
347 if (comp1 is Int)
348 {
349 if (((Int)comp1).mValue <= 0)
350 {
351 this._mThread.PC += -1 + compareoffset1;
352 }
353 else
354 {
355 this._mThread.PC += 2;
356 }
357 }
358 else
359 {
360 this._mThread.PC += 2;
361 }
362 result = true;
363 break;
364 case 162:
365 short compareoffset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
366 BaseType bc2 = this._mThread.currentFrame.OpStack.Pop();
367 BaseType bc1 = this._mThread.currentFrame.OpStack.Pop();
368 if (bc1 is Int && bc2 is Int)
369 {
370 //Console.WriteLine("comparing " + ((Int)bc1).mValue + " and " + ((Int)bc2).mValue);
371 if (((Int)bc1).mValue >= ((Int)bc2).mValue)
372 {
373 // Console.WriteLine("branch compare true , offset is " +compareoffset);
374 // Console.WriteLine("current PC is " + this._mThread.PC);
375 this._mThread.PC += -1 + compareoffset;
376 //Console.WriteLine("new PC is " + this._mThread.PC);
377 }
378 else
379 {
380 //Console.WriteLine("branch compare false");
381 this._mThread.PC += 2;
382 }
383 }
384 else
385 {
386 this._mThread.PC += 2;
387 }
388 result = true;
389 break;
390 case 164:
391 short compareloffset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
392 BaseType bcl2 = this._mThread.currentFrame.OpStack.Pop();
393 BaseType bcl1 = this._mThread.currentFrame.OpStack.Pop();
394 if (bcl1 is Int && bcl2 is Int)
395 {
396 //Console.WriteLine("comparing " + ((Int)bcl1).mValue + " and " + ((Int)bcl2).mValue);
397 if (((Int)bcl1).mValue <= ((Int)bcl2).mValue)
398 {
399 // Console.WriteLine("branch compare true , offset is " + compareloffset);
400 // Console.WriteLine("current PC is " + this._mThread.PC);
401 this._mThread.PC += -1 + compareloffset;
402 // Console.WriteLine("new PC is " + this._mThread.PC);
403 }
404 else
405 {
406 //Console.WriteLine("branch compare false");
407 this._mThread.PC += 2;
408 }
409 }
410 else
411 {
412 this._mThread.PC += 2;
413 }
414 result = true;
415 break;
416 case 167:
417 short offset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC+1]);
418 this._mThread.PC += -1 + offset;
419 result = true;
420 break;
421 }
422
423 return result;
424 }
425 }
426 }
427}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs
new file mode 100644
index 0000000..4d60559
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs
@@ -0,0 +1,96 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using OpenSim.Scripting.EmbeddedJVM.Types;
32using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
33using OpenSim.Framework.Interfaces;
34using OpenSim.Framework;
35using OpenSim.Framework.Types;
36
37namespace OpenSim.Scripting.EmbeddedJVM
38{
39 partial class Thread
40 {
41 private partial class Interpreter
42 {
43 private bool IsMethodOpCode(byte opcode)
44 {
45 bool result = false;
46 switch (opcode)
47 {
48 case 184:
49 short refIndex = (short) ((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC+1]);
50 if (this._mThread.currentClass._constantsPool[refIndex - 1] is ClassRecord.PoolMethodRef)
51 {
52 string typ = ((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Type.Value;
53 string typeparam = "";
54 string typereturn = "";
55 int firstbrak = 0;
56 int secondbrak = 0;
57 firstbrak = typ.LastIndexOf('(');
58 secondbrak = typ.LastIndexOf(')');
59 typeparam = typ.Substring(firstbrak + 1, secondbrak - firstbrak - 1);
60 typereturn = typ.Substring(secondbrak + 1, typ.Length - secondbrak - 1);
61 if (((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mClass.Name.Value == this._mThread.currentClass.mClass.Name.Value)
62 {
63 //calling a method in this class
64 if (typeparam.Length == 0)
65 {
66 this._mThread.JumpToStaticVoidMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, (this._mThread.PC + 2));
67 }
68 else
69 {
70 this._mThread.JumpToStaticParamMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, typeparam, (this._mThread.PC + 2));
71 }
72 }
73 else
74 {
75 //calling a method of a different class
76
77 // OpenSimAPI Class
78 if (((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mClass.Name.Value == "OpenSimAPI")
79 {
80 this._mThread.scriptInfo.api.CallMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, null);
81 }
82 }
83 }
84 else
85 {
86 this._mThread.PC += 2;
87 }
88 result = true;
89 break;
90 }
91
92 return result;
93 }
94 }
95 }
96}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs
new file mode 100644
index 0000000..cbedb71
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs
@@ -0,0 +1,40 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31
32namespace OpenSim.Scripting.EmbeddedJVM
33{
34 partial class Thread
35 {
36 private partial class Interpreter
37 {
38 }
39 }
40}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/JavaEngine.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/JavaEngine.cs
new file mode 100644
index 0000000..1773156
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/JavaEngine.cs
@@ -0,0 +1,29 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5using OpenSim.Region.Environment.Scripting;
6using OpenSim.Scripting.EmbeddedJVM;
7
8namespace OpenSim.Region.Environment.Scripting
9{
10 public class JavaEngine : IScriptCompiler
11 {
12 public string FileExt()
13 {
14 return ".java";
15 }
16
17 public Dictionary<string, IScript> compile(string filename)
18 {
19 JVMScript script = new JVMScript();
20 Dictionary<string, IScript> returns = new Dictionary<string, IScript>();
21
22 script.LoadScript(filename);
23
24 returns.Add(filename, script);
25
26 return returns;
27 }
28 }
29}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MainMemory.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MainMemory.cs
new file mode 100644
index 0000000..97d9fb6
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MainMemory.cs
@@ -0,0 +1,45 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31
32namespace OpenSim.Scripting.EmbeddedJVM
33{
34 public class MainMemory
35 {
36 public Heap HeapArea;
37 public MethodMemory MethodArea;
38
39 public MainMemory()
40 {
41 MethodArea = new MethodMemory();
42 HeapArea = new Heap();
43 }
44 }
45}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MethodMemory.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MethodMemory.cs
new file mode 100644
index 0000000..7e938b4
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/MethodMemory.cs
@@ -0,0 +1,46 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31
32namespace OpenSim.Scripting.EmbeddedJVM
33{
34 public class MethodMemory
35 {
36 public byte[] MethodBuffer;
37 public List<ClassRecord> Classes = new List<ClassRecord>();
38 public int NextMethodPC = 0;
39 public int Methodcount = 0;
40
41 public MethodMemory()
42 {
43 MethodBuffer = new byte[20000];
44 }
45 }
46}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Object.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Object.cs
new file mode 100644
index 0000000..2c3bedd
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Object.cs
@@ -0,0 +1,37 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31
32namespace OpenSim.Scripting.EmbeddedJVM
33{
34 public class Object
35 {
36 }
37}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/OpenSimJVM.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/OpenSimJVM.cs
new file mode 100644
index 0000000..3e083cc
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/OpenSimJVM.cs
@@ -0,0 +1,171 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using System.IO;
32using System.Threading;
33using OpenSim.Framework;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Utilities;
36using OpenSim.Region.Environment.Scripting;
37using OpenSim.Region.Environment.Scenes;
38
39namespace OpenSim.Scripting.EmbeddedJVM
40{
41 public class JVMScript : IScript
42 {
43 private List<Thread> _threads = new List<Thread>();
44 private BlockingQueue<CompileInfo> CompileScripts = new BlockingQueue<CompileInfo>();
45 private MainMemory _mainMemory;
46 private System.Threading.Thread compileThread;
47
48 ScriptInfo scriptInfo;
49
50 public void Initialise(ScriptInfo info)
51 {
52 scriptInfo = info;
53
54 _mainMemory = new MainMemory();
55 Thread.GlobalMemory = this._mainMemory;
56 Thread.World = info.world;
57 CompileScript();
58
59 scriptInfo.events.OnFrame += new EventManager.OnFrameDelegate(events_OnFrame);
60 scriptInfo.events.OnNewPresence += new EventManager.OnNewPresenceDelegate(events_OnNewPresence);
61 }
62
63 void events_OnNewPresence(ScenePresence presence)
64 {
65 for (int i = 0; i < this._threads.Count; i++)
66 {
67 if (!this._threads[i].running)
68 {
69 this._threads[i].StartMethod("OnNewPresence");
70 bool run = true;
71 while (run)
72 {
73 run = this._threads[i].Excute();
74 }
75 }
76 }
77 }
78
79 void events_OnFrame()
80 {
81 for (int i = 0; i < this._threads.Count; i++)
82 {
83 if (!this._threads[i].running)
84 {
85 this._threads[i].StartMethod("OnFrame");
86 bool run = true;
87 while (run)
88 {
89 run = this._threads[i].Excute();
90 }
91 }
92 }
93 }
94
95 public string getName()
96 {
97 return "JVM Scripting Engine";
98 }
99
100 public void LoadScript(string script)
101 {
102 Console.WriteLine("OpenSimJVM - loading new script: " + script);
103 CompileInfo comp = new CompileInfo();
104 comp.script = script;
105 comp.scriptName = script;
106 this.CompileScripts.Enqueue(comp);
107 }
108
109 public void CompileScript()
110 {
111 CompileInfo comp = this.CompileScripts.Dequeue();
112 string script = comp.script;
113 string scriptName = comp.scriptName;
114 try
115 {
116 //need to compile the script into a java class file
117
118 //first save it to a java source file
119 TextWriter tw = new StreamWriter(scriptName + ".java");
120 tw.WriteLine(script);
121 tw.Close();
122
123 //now compile
124 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("javac.exe", "*.java");
125 // psi.RedirectStandardOutput = true;
126 psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
127 psi.UseShellExecute = false;
128
129 System.Diagnostics.Process javacomp;
130 javacomp = System.Diagnostics.Process.Start(psi);
131 javacomp.WaitForExit();
132
133
134 //now load in class file
135 ClassRecord class1 = new ClassRecord();
136 class1.LoadClassFromFile(scriptName + ".class");
137 class1.PrintToConsole();
138 //Console.WriteLine();
139 this._mainMemory.MethodArea.Classes.Add(class1);
140 class1.AddMethodsToMemory(this._mainMemory.MethodArea);
141
142 Thread newThread = new Thread();
143 this._threads.Add(newThread);
144 newThread.currentClass = class1;
145 newThread.scriptInfo = scriptInfo;
146
147 //now delete the created files
148 System.IO.File.Delete(scriptName + ".java");
149 System.IO.File.Delete(scriptName + ".class");
150 //this.OnFrame();
151 }
152 catch (Exception e)
153 {
154 Console.WriteLine("exception");
155 Console.WriteLine(e.StackTrace);
156 Console.WriteLine(e.Message);
157 }
158 }
159
160 private class CompileInfo
161 {
162 public string script;
163 public string scriptName;
164
165 public CompileInfo()
166 {
167
168 }
169 }
170 }
171}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Stack.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Stack.cs
new file mode 100644
index 0000000..69a274c
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Stack.cs
@@ -0,0 +1,42 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31
32namespace OpenSim.Scripting.EmbeddedJVM
33{
34 public class Stack
35 {
36 public Stack<StackFrame> StackFrames = new Stack<StackFrame>();
37
38 public Stack()
39 {
40 }
41 }
42}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/StackFrame.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/StackFrame.cs
new file mode 100644
index 0000000..3a2b58a
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/StackFrame.cs
@@ -0,0 +1,49 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using OpenSim.Scripting.EmbeddedJVM.Types;
32
33namespace OpenSim.Scripting.EmbeddedJVM
34{
35 public class StackFrame
36 {
37 public BaseType[] LocalVariables;
38 public Stack<BaseType> OpStack = new Stack<BaseType>();
39
40 public int ReturnPC = 0;
41 public ClassRecord CallingClass = null;
42
43 public StackFrame()
44 {
45 LocalVariables = new BaseType[20];
46 }
47
48 }
49}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Thread.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Thread.cs
new file mode 100644
index 0000000..3993436
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Thread.cs
@@ -0,0 +1,119 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Text;
31using OpenSim.Scripting.EmbeddedJVM.Types;
32using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
33using OpenSim.Framework;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Region.Environment.Scenes;
36using OpenSim.Region.Environment.Scripting;
37
38namespace OpenSim.Scripting.EmbeddedJVM
39{
40 public partial class Thread
41 {
42 // Is this smart?
43 public static MainMemory GlobalMemory;
44 public static Scene World;
45 private int PC = 0;
46 private Stack stack;
47 private Interpreter mInterpreter;
48 public ClassRecord currentClass;
49 public ClassInstance currentInstance;
50 private StackFrame currentFrame;
51 public int excutionCounter = 0;
52 public bool running = false;
53
54 public ScriptInfo scriptInfo;
55
56 public Thread()
57 {
58 this.mInterpreter = new Interpreter(this);
59 this.stack = new Stack();
60 }
61
62 public void SetPC(int methodpointer)
63 {
64 //Console.WriteLine("Thread PC has been set to " + methodpointer);
65 PC = methodpointer;
66 }
67
68 public void StartMethod(ClassRecord rec, string methName)
69 {
70 currentFrame = new StackFrame();
71 this.stack.StackFrames.Push(currentFrame);
72 this.currentClass = rec;
73 currentClass.StartMethod(this, methName);
74 }
75
76 public void StartMethod( string methName)
77 {
78 currentFrame = new StackFrame();
79 this.stack.StackFrames.Push(currentFrame);
80 currentClass.StartMethod(this, methName);
81 }
82
83 public void JumpToStaticVoidMethod(string methName, int returnPC)
84 {
85 currentFrame = new StackFrame();
86 currentFrame.ReturnPC = returnPC;
87 this.stack.StackFrames.Push(currentFrame);
88 currentClass.StartMethod(this, methName);
89 }
90
91 public void JumpToStaticParamMethod(string methName, string param, int returnPC)
92 {
93 if (param == "I")
94 {
95 BaseType bs1 = currentFrame.OpStack.Pop();
96 currentFrame = new StackFrame();
97 currentFrame.ReturnPC = returnPC;
98 this.stack.StackFrames.Push(currentFrame);
99 currentFrame.LocalVariables[0] = ((Int)bs1);
100 currentClass.StartMethod(this, methName);
101 }
102 if (param == "F")
103 {
104
105 }
106 }
107
108 public void JumpToClassStaticVoidMethod(string className, string methName, int returnPC)
109 {
110
111 }
112
113 public bool Excute()
114 {
115 excutionCounter++;
116 return this.mInterpreter.Excute();
117 }
118 }
119}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ArrayReference.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ArrayReference.cs
new file mode 100644
index 0000000..2854eab
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ArrayReference.cs
@@ -0,0 +1,10 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Scripting.EmbeddedJVM.Types
6{
7 public class ArrayReference :BaseType
8 {
9 }
10}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/BaseType.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/BaseType.cs
new file mode 100644
index 0000000..270aa7b
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/BaseType.cs
@@ -0,0 +1,10 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Scripting.EmbeddedJVM.Types
6{
7 public class BaseType : Object
8 {
9 }
10}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ObjectReference.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ObjectReference.cs
new file mode 100644
index 0000000..da28eaa
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/ObjectReference.cs
@@ -0,0 +1,16 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Scripting.EmbeddedJVM.Types
6{
7 public class ObjectReference : BaseType
8 {
9 public ushort Reference;
10
11 public ObjectReference()
12 {
13
14 }
15 }
16}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Byte.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Byte.cs
new file mode 100644
index 0000000..1a3ecff
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Byte.cs
@@ -0,0 +1,10 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes
6{
7 public class Byte : BaseType
8 {
9 }
10}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Char.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Char.cs
new file mode 100644
index 0000000..19002d4
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Char.cs
@@ -0,0 +1,10 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes
6{
7 public class Char : BaseType
8 {
9 }
10}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Float.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Float.cs
new file mode 100644
index 0000000..91f1679
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Float.cs
@@ -0,0 +1,16 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes
6{
7 public class Float : BaseType
8 {
9 public float mValue = 0;
10
11 public Float()
12 {
13
14 }
15 }
16}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Int.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Int.cs
new file mode 100644
index 0000000..4ecd325
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Types/PrimitiveTypes/Int.cs
@@ -0,0 +1,16 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes
6{
7 public class Int : BaseType
8 {
9 public int mValue = 0;
10
11 public Int()
12 {
13
14 }
15 }
16}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Script.cs b/OpenSim/Region/Environment/Scenes/scripting/Script.cs
new file mode 100644
index 0000000..139bdf1
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Script.cs
@@ -0,0 +1,64 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 OpenSim.Region.Environment.Scenes;
29
30namespace OpenSim.Region.Environment.Scripting
31{
32 public interface IScript
33 {
34 void Initialise(ScriptInfo scriptInfo);
35 string getName();
36 }
37
38 public class TestScript : IScript
39 {
40 ScriptInfo script;
41
42 public string getName()
43 {
44 return "TestScript 0.1";
45 }
46
47 public void Initialise(ScriptInfo scriptInfo)
48 {
49 script = scriptInfo;
50 script.events.OnFrame += new EventManager.OnFrameDelegate(events_OnFrame);
51 script.events.OnNewPresence += new EventManager.OnNewPresenceDelegate(events_OnNewPresence);
52 }
53
54 void events_OnNewPresence(ScenePresence presence)
55 {
56 script.logger.Verbose("Hello " + presence.firstname.ToString() + "!");
57 }
58
59 void events_OnFrame()
60 {
61 //script.logger.Verbose("Hello World!");
62 }
63 }
64}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/ScriptAPI.cs b/OpenSim/Region/Environment/Scenes/scripting/ScriptAPI.cs
new file mode 100644
index 0000000..fd601cb
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/ScriptAPI.cs
@@ -0,0 +1,25 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5using OpenSim.Region.Environment.Scenes;
6
7namespace OpenSim.Region.Environment.Scripting
8{
9 // This class is to be used for engines which may not be able to access the Scene directly.
10 // Scene access is preffered, but obviously not possible on some non-.NET languages.
11 public class ScriptAPI
12 {
13 Scene scene;
14
15 public ScriptAPI(Scene world)
16 {
17 scene = world;
18 }
19
20 public Object CallMethod(String method, Object[] args)
21 {
22 return null;
23 }
24 }
25}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/ScriptInfo.cs b/OpenSim/Region/Environment/Scenes/scripting/ScriptInfo.cs
new file mode 100644
index 0000000..ed6f033
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/ScriptInfo.cs
@@ -0,0 +1,58 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 OpenSim.Framework.Console;
29using OpenSim.Region.Environment.Scenes;
30
31namespace OpenSim.Region.Environment.Scripting
32{
33 /// <summary>
34 /// Class which provides access to the world
35 /// </summary>
36 public class ScriptInfo
37 {
38 // Reference to world.eventsManager provided for convenience
39 public EventManager events;
40
41 // The main world
42 public Scene world;
43
44 // The console
45 public LogBase logger;
46
47 // API Access
48 public ScriptAPI api;
49
50 public ScriptInfo(Scene scene)
51 {
52 world = scene;
53 events = world.eventManager;
54 logger = MainLog.Instance;
55 api = new ScriptAPI(scene);
56 }
57 }
58}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/ScriptManager.cs b/OpenSim/Region/Environment/Scenes/scripting/ScriptManager.cs
new file mode 100644
index 0000000..153f4d7
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/ScriptManager.cs
@@ -0,0 +1,99 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using OpenSim.Framework.Console;
30using OpenSim.Region.Environment.Scenes;
31
32namespace OpenSim.Region.Environment.Scripting
33{
34 public class ScriptManager
35 {
36 List<IScript> scripts = new List<IScript>();
37 Scene scene;
38 Dictionary<string, IScriptCompiler> compilers = new Dictionary<string, IScriptCompiler>();
39
40 private void LoadFromCompiler(Dictionary<string, IScript> compiledscripts)
41 {
42 foreach (KeyValuePair<string, IScript> script in compiledscripts)
43 {
44 ScriptInfo scriptInfo = new ScriptInfo(scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script.
45 MainLog.Instance.Verbose("Loading " + script.Key);
46 script.Value.Initialise(scriptInfo);
47 scripts.Add(script.Value);
48 }
49 MainLog.Instance.Verbose("Finished loading " + compiledscripts.Count.ToString() + " script(s)");
50 }
51
52 public ScriptManager(Scene world)
53 {
54 scene = world;
55
56 // Default Engines
57 CSharpScriptEngine csharpCompiler = new CSharpScriptEngine();
58 compilers.Add(csharpCompiler.FileExt(),csharpCompiler);
59
60 JScriptEngine jscriptCompiler = new JScriptEngine();
61 compilers.Add(jscriptCompiler.FileExt(), jscriptCompiler);
62
63 JavaEngine javaCompiler = new JavaEngine();
64 compilers.Add(javaCompiler.FileExt(), javaCompiler);
65 }
66
67 public void Compile(string filename)
68 {
69 foreach (KeyValuePair<string, IScriptCompiler> compiler in compilers)
70 {
71 if (filename.EndsWith(compiler.Key))
72 {
73 LoadFromCompiler(compiler.Value.compile(filename));
74 break;
75 }
76 }
77 }
78
79 public void RunScriptCmd(string[] args)
80 {
81 switch (args[0])
82 {
83 case "load":
84 Compile(args[1]);
85 break;
86
87 default:
88 MainLog.Instance.Error("Unknown script command");
89 break;
90 }
91 }
92 }
93
94 interface IScriptCompiler
95 {
96 Dictionary<string,IScript> compile(string filename);
97 string FileExt();
98 }
99}
diff --git a/OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs b/OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs
new file mode 100644
index 0000000..d0ef2af
--- /dev/null
+++ b/OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs
@@ -0,0 +1,10 @@
1using System.Collections;
2using System.Text;
3using libsecondlife;
4using OpenSim.Region.Capabilities;
5using System.IO;
6
7namespace OpenSim.Framework.Servers
8{
9
10}
diff --git a/OpenSim/Region/Examples/SimpleApp/MyWorld.cs b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs
new file mode 100644
index 0000000..3c69420
--- /dev/null
+++ b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs
@@ -0,0 +1,93 @@
1using System.Collections.Generic;
2using libsecondlife;
3using OpenSim.Framework;
4using OpenSim.Framework.Communications;
5using OpenSim.Framework.Interfaces;
6using OpenSim.Framework.Servers;
7using OpenSim.Framework.Types;
8using OpenSim.Region.Caches;
9using OpenSim.Region.Environment.Scenes;
10using Avatar=OpenSim.Region.Environment.Scenes.ScenePresence;
11
12namespace SimpleApp
13{
14 public class MyWorld : Scene
15 {
16 private List<ScenePresence> m_avatars;
17
18 public MyWorld(ClientManager clientManager, RegionInfo regionInfo, AuthenticateSessionsBase authen, CommunicationsManager commsMan, AssetCache assetCach, BaseHttpServer httpServer)
19 : base(clientManager, regionInfo, authen, commsMan, assetCach, httpServer)
20 {
21 m_avatars = new List<Avatar>();
22 }
23
24 public override void SendLayerData(IClientAPI remoteClient)
25 {
26 float[] map = new float[65536];
27
28 for (int i = 0; i < 65536; i++)
29 {
30 int x = i % 256;
31 int y = i / 256;
32
33 map[i] = (float)(x + y / 2);
34 }
35
36 remoteClient.SendLayerData(map);
37 }
38
39 #region IWorld Members
40
41 override public void AddNewClient(IClientAPI client, bool child)
42
43 {
44 LLVector3 pos = new LLVector3(128, 128, 128);
45
46 client.OnRegionHandShakeReply += SendLayerData;
47 client.OnChatFromViewer +=
48 delegate(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
49 {
50 // Echo it (so you know what you typed)
51 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
52 client.SendChatMessage("Ready.", 1, pos, "System", LLUUID.Zero );
53 };
54
55 client.OnRequestWearables += SendWearables;
56 client.OnAddPrim += AddNewPrim;
57 client.OnUpdatePrimGroupPosition += this.UpdatePrimPosition;
58 client.OnRequestMapBlocks += this.RequestMapBlocks;
59 client.OnTeleportLocationRequest += this.RequestTeleportLocation;
60 client.OnGrapUpdate += this.MoveObject;
61 client.OnNameFromUUIDRequest += this.commsManager.HandleUUIDNameRequest;
62
63 client.OnCompleteMovementToRegion += delegate()
64 {
65 client.MoveAgentIntoRegion(m_regInfo, pos, LLVector3.Zero );
66 };
67
68 client.OnCompleteMovementToRegion += delegate()
69 {
70 client.SendAvatarData(m_regInfo.RegionHandle, client.FirstName,
71 client.LastName, client.AgentId, 0,
72 pos, null);
73
74 client.SendChatMessage("Welcome to My World.", 1, pos, "System", LLUUID.Zero );
75
76
77
78 };
79
80 client.SendRegionHandshake(m_regInfo);
81
82 CreateAndAddScenePresence(client);
83
84 }
85
86 private void SendWearables( IClientAPI client )
87 {
88 client.SendWearables( AvatarWearable.DefaultWearables );
89 }
90
91 #endregion
92 }
93}
diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs
new file mode 100644
index 0000000..87e877c
--- /dev/null
+++ b/OpenSim/Region/Examples/SimpleApp/Program.cs
@@ -0,0 +1,130 @@
1using System;
2using System.Net;
3using libsecondlife;
4using OpenSim.Assets;
5using OpenSim.Framework;
6using OpenSim.Framework.Console;
7using OpenSim.Framework.Interfaces;
8using OpenSim.Framework.Servers;
9using OpenSim.Framework.Types;
10using OpenSim.Physics.Manager;
11using OpenSim.Region.Caches;
12using OpenSim.Region.Capabilities;
13using OpenSim.Region.ClientStack;
14using OpenSim.Region.Communications.Local;
15using OpenSim.Region.GridInterfaces.Local;
16
17namespace SimpleApp
18{
19 class Program : IAssetReceiver, conscmd_callback
20 {
21 private LogBase m_log;
22 AuthenticateSessionsBase m_circuitManager;
23 uint m_localId;
24
25 private void Run()
26 {
27 m_log = new LogBase(null, "SimpleApp", this, false);
28 MainLog.Instance = m_log;
29
30 // CheckSumServer checksumServer = new CheckSumServer(12036);
31 // checksumServer.ServerListener();
32
33 IPEndPoint internalEndPoint = new IPEndPoint( IPAddress.Parse( "127.0.0.1" ), 9000 );
34
35 m_circuitManager = new AuthenticateSessionsBase();
36
37 InventoryCache inventoryCache = new InventoryCache();
38
39 LocalAssetServer assetServer = new LocalAssetServer();
40 assetServer.SetServerInfo("http://127.0.0.1:8003/", "");
41 assetServer.SetReceiver(this);
42
43 AssetCache assetCache = new AssetCache(assetServer);
44
45 UDPServer udpServer = new UDPServer( internalEndPoint.Port, assetCache, inventoryCache, m_log, m_circuitManager );
46 PacketServer packetServer = new PacketServer(udpServer);
47 udpServer.ServerListener();
48
49 ClientView.TerrainManager = new TerrainManager(new SecondLife());
50 BaseHttpServer httpServer = new BaseHttpServer(internalEndPoint.Port);
51
52 NetworkServersInfo serverInfo = new NetworkServersInfo();
53 CommunicationsLocal communicationsManager = new CommunicationsLocal(serverInfo, httpServer);
54
55 RegionInfo regionInfo = new RegionInfo( 1000, 1000, internalEndPoint, "127.0.0.1" );
56
57 MyWorld world = new MyWorld(packetServer.ClientManager, regionInfo, m_circuitManager, communicationsManager, assetCache, httpServer);
58 world.PhysScene = PhysicsScene.Null;
59 udpServer.LocalWorld = world;
60
61 httpServer.AddXmlRPCHandler("login_to_simulator", communicationsManager.UserServices.XmlRpcLoginMethod );
62
63 httpServer.Start();
64
65 m_log.WriteLine( LogPriority.NORMAL, "Press enter to quit.");
66 m_log.ReadLine();
67
68 PrimData primData = new PrimData();
69 primData.Scale = new LLVector3(1, 1, 1);
70
71 m_localId = world.AddNewPrim( LLUUID.Zero, primData, LLVector3.Zero, new LLQuaternion(0, 0, 0, 0), LLUUID.Zero, 0);
72
73 }
74
75 private bool AddNewSessionHandler(ulong regionHandle, Login loginData)
76 {
77 m_log.WriteLine(LogPriority.NORMAL, "Region [{0}] recieved Login from [{1}] [{2}]", regionHandle, loginData.First, loginData.Last);
78
79 AgentCircuitData agent = new AgentCircuitData();
80 agent.AgentID = loginData.Agent;
81 agent.firstname = loginData.First;
82 agent.lastname = loginData.Last;
83 agent.SessionID = loginData.Session;
84 agent.SecureSessionID = loginData.SecureSession;
85 agent.circuitcode = loginData.CircuitCode;
86 agent.BaseFolder = loginData.BaseFolder;
87 agent.InventoryFolder = loginData.InventoryFolder;
88 agent.startpos = new LLVector3(128, 128, 70);
89
90 m_circuitManager.AddNewCircuit(agent.circuitcode, agent);
91
92 return true;
93 }
94
95 #region IAssetReceiver Members
96
97 public void AssetReceived( AssetBase asset, bool IsTexture)
98 {
99 throw new Exception("The method or operation is not implemented.");
100 }
101
102 public void AssetNotFound( AssetBase asset)
103 {
104 throw new Exception("The method or operation is not implemented.");
105 }
106
107 #endregion
108
109 #region conscmd_callback Members
110
111 public void RunCmd(string cmd, string[] cmdparams)
112 {
113 throw new Exception("The method or operation is not implemented.");
114 }
115
116 public void Show(string ShowWhat)
117 {
118 throw new Exception("The method or operation is not implemented.");
119 }
120
121 #endregion
122
123 static void Main(string[] args)
124 {
125 Program app = new Program();
126
127 app.Run();
128 }
129 }
130}
diff --git a/OpenSim/Region/Examples/SimpleApp/Properties/AssemblyInfo.cs b/OpenSim/Region/Examples/SimpleApp/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..3b0de8a
--- /dev/null
+++ b/OpenSim/Region/Examples/SimpleApp/Properties/AssemblyInfo.cs
@@ -0,0 +1,31 @@
1using System.Reflection;
2using System.Runtime.InteropServices;
3// General Information about an assembly is controlled through the following
4// set of attributes. Change these attribute values to modify the information
5// associated with an assembly.
6[assembly: AssemblyTitle("SimpleApp")]
7[assembly: AssemblyDescription("")]
8[assembly: AssemblyConfiguration("")]
9[assembly: AssemblyCompany("Playahead AB")]
10[assembly: AssemblyProduct("SimpleApp")]
11[assembly: AssemblyCopyright("Copyright © Playahead AB 2007")]
12[assembly: AssemblyTrademark("")]
13[assembly: AssemblyCulture("")]
14
15// Setting ComVisible to false makes the types in this assembly not visible
16// to COM components. If you need to access a type in this assembly from
17// COM, set the ComVisible attribute to true on that type.
18[assembly: ComVisible(false)]
19
20// The following GUID is for the ID of the typelib if this project is exposed to COM
21[assembly: Guid("a5cfa45f-5acf-4b2e-9c50-1dd1fd7608ee")]
22
23// Version information for an assembly consists of the following four values:
24//
25// Major Version
26// Minor Version
27// Build Number
28// Revision
29//
30[assembly: AssemblyVersion("1.0.0.0")]
31[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Region/GridInterfaces/Local/AssemblyInfo.cs b/OpenSim/Region/GridInterfaces/Local/AssemblyInfo.cs
new file mode 100644
index 0000000..b5fc1ef
--- /dev/null
+++ b/OpenSim/Region/GridInterfaces/Local/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("LocalGridServers")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("LocalGridServers")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs b/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs
new file mode 100644
index 0000000..54d43a1
--- /dev/null
+++ b/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs
@@ -0,0 +1,311 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.IO;
30using System.Threading;
31using Db4objects.Db4o;
32using Db4objects.Db4o.Query;
33using libsecondlife;
34using OpenSim.Framework.Console;
35using OpenSim.Framework.Interfaces;
36using OpenSim.Framework.Types;
37using OpenSim.Framework.Utilities;
38
39namespace OpenSim.Region.GridInterfaces.Local
40{
41 public class LocalAssetPlugin : IAssetPlugin
42 {
43 public LocalAssetPlugin()
44 {
45
46 }
47
48 public IAssetServer GetAssetServer()
49 {
50 return (new LocalAssetServer());
51 }
52 }
53
54 public class LocalAssetServer : IAssetServer
55 {
56 private IAssetReceiver _receiver;
57 private BlockingQueue<ARequest> _assetRequests;
58 private IObjectContainer db;
59 private Thread _localAssetServerThread;
60
61 public LocalAssetServer()
62 {
63 bool yapfile;
64 this._assetRequests = new BlockingQueue<ARequest>();
65 yapfile = File.Exists("assets.yap");
66
67 MainLog.Instance.Verbose( "Local Asset Server class created");
68 try
69 {
70 db = Db4oFactory.OpenFile("assets.yap");
71 MainLog.Instance.Verbose( "Db4 Asset database creation");
72 }
73 catch (Exception e)
74 {
75 db.Close();
76 MainLog.Instance.WriteLine(LogPriority.MEDIUM, "Db4 Asset server :Constructor - Exception occured");
77 MainLog.Instance.Warn(e.ToString());
78 }
79 if (!yapfile)
80 {
81 this.SetUpAssetDatabase();
82 }
83 this._localAssetServerThread = new Thread(new ThreadStart(RunRequests));
84 this._localAssetServerThread.IsBackground = true;
85 this._localAssetServerThread.Start();
86
87 }
88
89 public void SetReceiver(IAssetReceiver receiver)
90 {
91 this._receiver = receiver;
92 }
93
94 public void RequestAsset(LLUUID assetID, bool isTexture)
95 {
96 ARequest req = new ARequest();
97 req.AssetID = assetID;
98 req.IsTexture = isTexture;
99 this._assetRequests.Enqueue(req);
100 }
101
102 public void UpdateAsset(AssetBase asset)
103 {
104
105 }
106
107 public void UploadNewAsset(AssetBase asset)
108 {
109 AssetStorage store = new AssetStorage();
110 store.Data = asset.Data;
111 store.Name = asset.Name;
112 store.UUID = asset.FullID;
113 db.Set(store);
114 db.Commit();
115 }
116
117 public void SetServerInfo(string ServerUrl, string ServerKey)
118 {
119
120 }
121 public void Close()
122 {
123 if (db != null)
124 {
125 MainLog.Instance.Verbose( "Closing local asset server database");
126 db.Close();
127 }
128 }
129
130 private void RunRequests()
131 {
132 while (true)
133 {
134 byte[] idata = null;
135 bool found = false;
136 AssetStorage foundAsset = null;
137 ARequest req = this._assetRequests.Dequeue();
138 IObjectSet result = db.Query(new AssetUUIDQuery(req.AssetID));
139 if (result.Count > 0)
140 {
141 foundAsset = (AssetStorage)result.Next();
142 found = true;
143 }
144
145 AssetBase asset = new AssetBase();
146 if (found)
147 {
148 asset.FullID = foundAsset.UUID;
149 asset.Type = foundAsset.Type;
150 asset.InvType = foundAsset.Type;
151 asset.Name = foundAsset.Name;
152 idata = foundAsset.Data;
153 }
154 else
155 {
156 asset.FullID = LLUUID.Zero;
157 }
158 asset.Data = idata;
159 _receiver.AssetReceived(asset, req.IsTexture);
160 }
161
162 }
163
164 private void SetUpAssetDatabase()
165 {
166 try
167 {
168
169 MainLog.Instance.Verbose( "Setting up asset database");
170
171 AssetBase Image = new AssetBase();
172 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000001");
173 Image.Name = "Bricks";
174 this.LoadAsset(Image, true, "bricks.jp2");
175 AssetStorage store = new AssetStorage();
176 store.Data = Image.Data;
177 store.Name = Image.Name;
178 store.UUID = Image.FullID;
179 db.Set(store);
180 db.Commit();
181
182 Image = new AssetBase();
183 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000002");
184 Image.Name = "Plywood";
185 this.LoadAsset(Image, true, "plywood.jp2");
186 store = new AssetStorage();
187 store.Data = Image.Data;
188 store.Name = Image.Name;
189 store.UUID = Image.FullID;
190 db.Set(store);
191 db.Commit();
192
193 Image = new AssetBase();
194 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000003");
195 Image.Name = "Rocks";
196 this.LoadAsset(Image, true, "rocks.jp2");
197 store = new AssetStorage();
198 store.Data = Image.Data;
199 store.Name = Image.Name;
200 store.UUID = Image.FullID;
201 db.Set(store);
202 db.Commit();
203
204 Image = new AssetBase();
205 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000004");
206 Image.Name = "Granite";
207 this.LoadAsset(Image, true, "granite.jp2");
208 store = new AssetStorage();
209 store.Data = Image.Data;
210 store.Name = Image.Name;
211 store.UUID = Image.FullID;
212 db.Set(store);
213 db.Commit();
214
215 Image = new AssetBase();
216 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000005");
217 Image.Name = "Hardwood";
218 this.LoadAsset(Image, true, "hardwood.jp2");
219 store = new AssetStorage();
220 store.Data = Image.Data;
221 store.Name = Image.Name;
222 store.UUID = Image.FullID;
223 db.Set(store);
224 db.Commit();
225
226 Image = new AssetBase();
227 Image.FullID = new LLUUID("00000000-0000-0000-5005-000000000005");
228 Image.Name = "Prim Base Texture";
229 this.LoadAsset(Image, true, "plywood.jp2");
230 store = new AssetStorage();
231 store.Data = Image.Data;
232 store.Name = Image.Name;
233 store.UUID = Image.FullID;
234 db.Set(store);
235 db.Commit();
236
237 Image = new AssetBase();
238 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000006");
239 Image.Name = "Map Base Texture";
240 this.LoadAsset(Image, true, "map_base.jp2");
241 store = new AssetStorage();
242 store.Data = Image.Data;
243 store.Name = Image.Name;
244 store.UUID = Image.FullID;
245 db.Set(store);
246 db.Commit();
247
248 Image = new AssetBase();
249 Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000007");
250 Image.Name = "Map Texture";
251 this.LoadAsset(Image, true, "map1.jp2");
252 store = new AssetStorage();
253 store.Data = Image.Data;
254 store.Name = Image.Name;
255 store.UUID = Image.FullID;
256 db.Set(store);
257 db.Commit();
258
259 Image = new AssetBase();
260 Image.FullID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
261 Image.Name = "Shape";
262 this.LoadAsset(Image, false, "base_shape.dat");
263 store = new AssetStorage();
264 store.Data = Image.Data;
265 store.Name = Image.Name;
266 store.UUID = Image.FullID;
267 db.Set(store);
268 db.Commit();
269 }
270 catch (Exception e)
271 {
272 Console.WriteLine("exception loading default assets into database");
273 Console.WriteLine(e.Message);
274 }
275
276 }
277
278 private void LoadAsset(AssetBase info, bool image, string filename)
279 {
280 //should request Asset from storage manager
281 //but for now read from file
282
283 string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder;
284 string fileName = Path.Combine(dataPath, filename);
285 FileInfo fInfo = new FileInfo(fileName);
286 long numBytes = fInfo.Length;
287 FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
288 byte[] idata = new byte[numBytes];
289 BinaryReader br = new BinaryReader(fStream);
290 idata = br.ReadBytes((int)numBytes);
291 br.Close();
292 fStream.Close();
293 info.Data = idata;
294 //info.loaded=true;
295 }
296 }
297 public class AssetUUIDQuery : Predicate
298 {
299 private LLUUID _findID;
300
301 public AssetUUIDQuery(LLUUID find)
302 {
303 _findID = find;
304 }
305 public bool Match(AssetStorage asset)
306 {
307 return (asset.UUID == _findID);
308 }
309 }
310
311}
diff --git a/OpenSim/Region/GridInterfaces/Remote/AssemblyInfo.cs b/OpenSim/Region/GridInterfaces/Remote/AssemblyInfo.cs
new file mode 100644
index 0000000..1e15c5e
--- /dev/null
+++ b/OpenSim/Region/GridInterfaces/Remote/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("RemoteGridServers")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("RemoteGridServers")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/GridInterfaces/Remote/RemoteAssetServer.cs b/OpenSim/Region/GridInterfaces/Remote/RemoteAssetServer.cs
new file mode 100644
index 0000000..8643736
--- /dev/null
+++ b/OpenSim/Region/GridInterfaces/Remote/RemoteAssetServer.cs
@@ -0,0 +1,133 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.IO;
29using System.Net;
30using System.Text;
31using System.Threading;
32using libsecondlife;
33using OpenSim.Framework.Console;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Types;
36using OpenSim.Framework.Utilities;
37
38namespace OpenSim.Region.GridInterfaces.Remote
39{
40 public class RemoteAssetServer : IAssetServer
41 {
42 private IAssetReceiver _receiver;
43 private BlockingQueue<ARequest> _assetRequests;
44 private Thread _remoteAssetServerThread;
45 private string AssetServerUrl;
46 private string AssetSendKey;
47
48 public RemoteAssetServer()
49 {
50 this._assetRequests = new BlockingQueue<ARequest>();
51 this._remoteAssetServerThread = new Thread(new ThreadStart(RunRequests));
52 this._remoteAssetServerThread.IsBackground = true;
53 this._remoteAssetServerThread.Start();
54 MainLog.Instance.Verbose("Remote Asset Server class created");
55 }
56
57 public void SetReceiver(IAssetReceiver receiver)
58 {
59 this._receiver = receiver;
60 }
61
62 public void RequestAsset(LLUUID assetID, bool isTexture)
63 {
64 ARequest req = new ARequest();
65 req.AssetID = assetID;
66 req.IsTexture = isTexture;
67 this._assetRequests.Enqueue(req);
68 }
69
70 public void UpdateAsset(AssetBase asset)
71 {
72
73 }
74
75 public void UploadNewAsset(AssetBase asset)
76 {
77 Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
78 string ret = Windows1252Encoding.GetString(asset.Data);
79 byte[] buffer = Windows1252Encoding.GetBytes(ret);
80 WebClient client = new WebClient();
81 client.UploadData(this.AssetServerUrl + "assets/" + asset.FullID, buffer);
82
83 }
84
85 public void SetServerInfo(string ServerUrl, string ServerKey)
86 {
87 this.AssetServerUrl = ServerUrl;
88 this.AssetSendKey = ServerKey;
89 }
90
91 private void RunRequests()
92 {
93 while (true)
94 {
95 //we need to add support for the asset server not knowing about a requested asset
96 // 404... THE MAGIC FILE NOT FOUND ERROR, very useful for telling you things such as a file (or asset ;) ) not being found!!!!!!!!!!! it's 2:22AM
97 ARequest req = this._assetRequests.Dequeue();
98 LLUUID assetID = req.AssetID;
99 // OpenSim.Framework.Console.MainLog.Instance.Verbose(" RemoteAssetServer- Got a AssetServer request, processing it - " + this.AssetServerUrl + "assets/" + assetID);
100 WebRequest AssetLoad = WebRequest.Create(this.AssetServerUrl + "assets/" + assetID);
101 WebResponse AssetResponse = AssetLoad.GetResponse();
102 byte[] idata = new byte[(int)AssetResponse.ContentLength];
103 BinaryReader br = new BinaryReader(AssetResponse.GetResponseStream());
104 idata = br.ReadBytes((int)AssetResponse.ContentLength);
105 br.Close();
106
107 AssetBase asset = new AssetBase();
108 asset.FullID = assetID;
109 asset.Data = idata;
110 _receiver.AssetReceived(asset, req.IsTexture);
111 }
112 }
113
114 public void Close()
115 {
116
117 }
118 }
119
120 public class RemoteAssetPlugin : IAssetPlugin
121 {
122 public RemoteAssetPlugin()
123 {
124
125 }
126
127 public IAssetServer GetAssetServer()
128 {
129 return (new RemoteAssetServer());
130 }
131 }
132
133}
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/AssemblyInfo.cs
new file mode 100644
index 0000000..ce567a9
--- /dev/null
+++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("PhysXplugin")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("PhysXplugin")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
new file mode 100644
index 0000000..f133045
--- /dev/null
+++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
@@ -0,0 +1,301 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Collections.Generic;
29using Axiom.Math;
30using OpenSim.Physics.Manager;
31
32namespace OpenSim.Region.Physics.BasicPhysicsPlugin
33{
34 /// <summary>
35 /// Will be the PhysX plugin but for now will be a very basic physics engine
36 /// </summary>
37 public class BasicPhysicsPlugin : IPhysicsPlugin
38 {
39 private BasicScene _mScene;
40
41 public BasicPhysicsPlugin()
42 {
43
44 }
45
46 public bool Init()
47 {
48 return true;
49 }
50
51 public PhysicsScene GetScene()
52 {
53 return new BasicScene();
54 }
55
56 public string GetName()
57 {
58 return("basicphysics");
59 }
60
61 public void Dispose()
62 {
63
64 }
65 }
66
67 public class BasicScene :PhysicsScene
68 {
69 private List<BasicActor> _actors = new List<BasicActor>();
70 private float[] _heightMap;
71
72 public BasicScene()
73 {
74
75 }
76
77 public override PhysicsActor AddAvatar(PhysicsVector position)
78 {
79 BasicActor act = new BasicActor();
80 act.Position = position;
81 _actors.Add(act);
82 return act;
83 }
84
85 public override void RemoveAvatar(PhysicsActor actor)
86 {
87 BasicActor act = (BasicActor)actor;
88 if(_actors.Contains(act))
89 {
90 _actors.Remove(act);
91 }
92
93 }
94
95 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
96 {
97 return null;
98 }
99
100 public override void Simulate(float timeStep)
101 {
102 foreach (BasicActor actor in _actors)
103 {
104 if ((actor.Position.Y > 0 && actor.Position.Y < 256) && (actor.Position.X > 0 && actor.Position.X < 256))
105 {
106 float height = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X] + 1.2f;
107 actor.Position.X = actor.Position.X + (actor.Velocity.X * timeStep);
108 actor.Position.Y = actor.Position.Y + (actor.Velocity.Y * timeStep);
109 if (actor.Flying)
110 {
111 if (actor.Position.Z + (actor.Velocity.Z * timeStep) <
112 _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X] + 2)
113 {
114 actor.Position.Z = height;
115 actor.Velocity.Z = 0;
116 }
117 else
118 {
119 actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep);
120 }
121 }
122 else
123 {
124 actor.Position.Z = height;
125 actor.Velocity.Z = 0;
126 }
127 }
128 else
129 {
130 if (actor.Position.Y < 0)
131 {
132 actor.Position.Y = 0;
133 }
134 else if (actor.Position.Y > 256)
135 {
136 actor.Position.Y = 256;
137 }
138
139 if (actor.Position.X < 0)
140 {
141 actor.Position.X = 0;
142 }
143 if (actor.Position.X > 256)
144 {
145 actor.Position.X = 256;
146 }
147 }
148 //}
149
150
151
152 // This code needs sorting out - border crossings etc
153/* if(actor.Position.X<0)
154 {
155 ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z));
156 actor.Position.X = 0;
157 actor.Velocity.X = 0;
158 }
159 if(actor.Position.Y < 0)
160 {
161 ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z));
162 actor.Position.Y = 0;
163 actor.Velocity.Y = 0;
164 }
165 if(actor.Position.X > 255)
166 {
167 ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z));
168 actor.Position.X = 255;
169 actor.Velocity.X = 0;
170 }
171 if(actor.Position.Y > 255)
172 {
173 ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z));
174 actor.Position.Y = 255;
175 actor.Velocity.X = 0;
176 }*/
177 }
178 }
179
180 public override void GetResults()
181 {
182
183 }
184
185 public override bool IsThreaded
186 {
187 get
188 {
189 return(false); // for now we won't be multithreaded
190 }
191 }
192
193 public override void SetTerrain(float[] heightMap)
194 {
195 this._heightMap = heightMap;
196 }
197
198 public override void DeleteTerrain()
199 {
200
201 }
202 }
203
204 public class BasicActor : PhysicsActor
205 {
206 private PhysicsVector _position;
207 private PhysicsVector _velocity;
208 private PhysicsVector _acceleration;
209 private bool flying;
210 public BasicActor()
211 {
212 _velocity = new PhysicsVector();
213 _position = new PhysicsVector();
214 _acceleration = new PhysicsVector();
215 }
216
217 public override bool Flying
218 {
219 get
220 {
221 return flying;
222 }
223 set
224 {
225 flying= value;
226 }
227 }
228
229 public override PhysicsVector Position
230 {
231 get
232 {
233 return _position;
234 }
235 set
236 {
237 _position = value;
238 }
239 }
240
241 public override PhysicsVector Velocity
242 {
243 get
244 {
245 return _velocity;
246 }
247 set
248 {
249 _velocity = value;
250 }
251 }
252
253 public override Quaternion Orientation
254 {
255 get
256 {
257 return Quaternion.Identity;
258 }
259 set
260 {
261
262 }
263 }
264
265 public override PhysicsVector Acceleration
266 {
267 get
268 {
269 return _acceleration;
270 }
271
272 }
273
274 public override bool Kinematic
275 {
276 get
277 {
278 return true;
279 }
280 set
281 {
282
283 }
284 }
285 public void SetAcceleration (PhysicsVector accel)
286 {
287 this._acceleration = accel;
288 }
289
290 public override void AddForce(PhysicsVector force)
291 {
292
293 }
294
295 public override void SetMomentum(PhysicsVector momentum)
296 {
297
298 }
299 }
300
301}
diff --git a/OpenSim/Region/Physics/Manager/AssemblyInfo.cs b/OpenSim/Region/Physics/Manager/AssemblyInfo.cs
new file mode 100644
index 0000000..9415db9
--- /dev/null
+++ b/OpenSim/Region/Physics/Manager/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("PhysicsManager")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("PhysicsManager")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
new file mode 100644
index 0000000..da3b560
--- /dev/null
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -0,0 +1,167 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Axiom.Math;
29
30namespace OpenSim.Physics.Manager
31{
32 public delegate void PositionUpdate(PhysicsVector position);
33 public delegate void VelocityUpdate(PhysicsVector velocity);
34 public delegate void OrientationUpdate(Quaternion orientation);
35
36 public abstract class PhysicsActor
37 {
38 public event PositionUpdate OnPositionUpdate;
39 public event VelocityUpdate OnVelocityUpdate;
40 public event OrientationUpdate OnOrientationUpdate;
41
42 public static PhysicsActor Null
43 {
44 get
45 {
46 return new NullPhysicsActor();
47 }
48 }
49
50 public abstract PhysicsVector Position
51 {
52 get;
53 set;
54 }
55
56 public abstract PhysicsVector Velocity
57 {
58 get;
59 set;
60 }
61
62 public abstract PhysicsVector Acceleration
63 {
64 get;
65 }
66
67 public abstract Quaternion Orientation
68 {
69 get;
70 set;
71 }
72
73 public abstract bool Flying
74 {
75 get;
76 set;
77 }
78
79 public abstract bool Kinematic
80 {
81 get;
82 set;
83 }
84
85 public abstract void AddForce(PhysicsVector force);
86
87 public abstract void SetMomentum(PhysicsVector momentum);
88 }
89
90 public class NullPhysicsActor : PhysicsActor
91 {
92 public override PhysicsVector Position
93 {
94 get
95 {
96 return PhysicsVector.Zero;
97 }
98 set
99 {
100 return;
101 }
102 }
103
104 public override PhysicsVector Velocity
105 {
106 get
107 {
108 return PhysicsVector.Zero;
109 }
110 set
111 {
112 return;
113 }
114 }
115
116 public override Quaternion Orientation
117 {
118 get
119 {
120 return Quaternion.Identity;
121 }
122 set
123 {
124
125 }
126 }
127
128 public override PhysicsVector Acceleration
129 {
130 get { return PhysicsVector.Zero; }
131 }
132
133 public override bool Flying
134 {
135 get
136 {
137 return false;
138 }
139 set
140 {
141 return;
142 }
143 }
144
145 public override bool Kinematic
146 {
147 get
148 {
149 return true;
150 }
151 set
152 {
153 return;
154 }
155 }
156
157 public override void AddForce(PhysicsVector force)
158 {
159 return;
160 }
161
162 public override void SetMomentum(PhysicsVector momentum)
163 {
164 return;
165 }
166 }
167}
diff --git a/OpenSim/Region/Physics/Manager/PhysicsManager.cs b/OpenSim/Region/Physics/Manager/PhysicsManager.cs
new file mode 100644
index 0000000..265bce6
--- /dev/null
+++ b/OpenSim/Region/Physics/Manager/PhysicsManager.cs
@@ -0,0 +1,115 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
32using OpenSim.Framework.Console;
33
34namespace OpenSim.Physics.Manager
35{
36 /// <summary>
37 /// Description of MyClass.
38 /// </summary>
39 public class PhysicsManager
40 {
41 private Dictionary<string, IPhysicsPlugin> _plugins=new Dictionary<string, IPhysicsPlugin>();
42
43 public PhysicsManager()
44 {
45
46 }
47
48 public PhysicsScene GetPhysicsScene(string engineName)
49 {
50 if (String.IsNullOrEmpty(engineName))
51 {
52 return PhysicsScene.Null;
53 }
54
55 if(_plugins.ContainsKey(engineName))
56 {
57 MainLog.Instance.WriteLine(LogPriority.LOW,"creating "+engineName);
58 return _plugins[engineName].GetScene();
59 }
60 else
61 {
62 MainLog.Instance.WriteLine(LogPriority.MEDIUM,"couldn't find physicsEngine: {0}",engineName);
63 throw new ArgumentException(String.Format("couldn't find physicsEngine: {0}",engineName));
64 }
65 }
66
67 public void LoadPlugins()
68 {
69 string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory ,"Physics");
70 string[] pluginFiles = Directory.GetFiles(path, "*.dll");
71
72
73 for(int i= 0; i<pluginFiles.Length; i++)
74 {
75 this.AddPlugin(pluginFiles[i]);
76 }
77 }
78
79 private void AddPlugin(string FileName)
80 {
81 Assembly pluginAssembly = Assembly.LoadFrom(FileName);
82
83 foreach (Type pluginType in pluginAssembly.GetTypes())
84 {
85 if (pluginType.IsPublic)
86 {
87 if (!pluginType.IsAbstract)
88 {
89 Type typeInterface = pluginType.GetInterface("IPhysicsPlugin", true);
90
91 if (typeInterface != null)
92 {
93 IPhysicsPlugin plug = (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
94 plug.Init();
95 this._plugins.Add(plug.GetName(),plug);
96
97 }
98
99 typeInterface = null;
100 }
101 }
102 }
103
104 pluginAssembly = null;
105 }
106 }
107
108 public interface IPhysicsPlugin
109 {
110 bool Init();
111 PhysicsScene GetScene();
112 string GetName();
113 void Dispose();
114 }
115}
diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs
new file mode 100644
index 0000000..d44da00
--- /dev/null
+++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs
@@ -0,0 +1,110 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 OpenSim.Framework.Console;
29
30namespace OpenSim.Physics.Manager
31{
32 public abstract class PhysicsScene
33 {
34 public static PhysicsScene Null
35 {
36 get
37 {
38 return new NullPhysicsScene();
39 }
40 }
41
42 public abstract PhysicsActor AddAvatar(PhysicsVector position);
43
44 public abstract void RemoveAvatar(PhysicsActor actor);
45
46 public abstract PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size);
47
48 public abstract void Simulate(float timeStep);
49
50 public abstract void GetResults();
51
52 public abstract void SetTerrain(float[] heightMap);
53
54 public abstract void DeleteTerrain();
55
56 public abstract bool IsThreaded
57 {
58 get;
59 }
60
61 private class NullPhysicsScene : PhysicsScene
62 {
63 private static int m_workIndicator;
64
65 public override PhysicsActor AddAvatar(PhysicsVector position)
66 {
67 MainLog.Instance.Verbose("NullPhysicsScene : AddAvatar({0})", position);
68 return PhysicsActor.Null;
69 }
70
71 public override void RemoveAvatar(PhysicsActor actor)
72 {
73
74 }
75
76 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
77 {
78 MainLog.Instance.Verbose("NullPhysicsScene : AddPrim({0},{1})", position, size);
79 return PhysicsActor.Null;
80 }
81
82 public override void Simulate(float timeStep)
83 {
84 m_workIndicator = (m_workIndicator + 1) % 10;
85
86 //OpenSim.Framework.Console.MainLog.Instance.SetStatus(m_workIndicator.ToString());
87 }
88
89 public override void GetResults()
90 {
91 MainLog.Instance.Verbose("NullPhysicsScene : GetResults()");
92 }
93
94 public override void SetTerrain(float[] heightMap)
95 {
96 MainLog.Instance.Verbose("NullPhysicsScene : SetTerrain({0} items)", heightMap.Length);
97 }
98
99 public override void DeleteTerrain()
100 {
101
102 }
103
104 public override bool IsThreaded
105 {
106 get { return false; }
107 }
108 }
109 }
110}
diff --git a/OpenSim/Region/Physics/Manager/PhysicsVector.cs b/OpenSim/Region/Physics/Manager/PhysicsVector.cs
new file mode 100644
index 0000000..e75f29b
--- /dev/null
+++ b/OpenSim/Region/Physics/Manager/PhysicsVector.cs
@@ -0,0 +1,55 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Physics.Manager
29{
30 public class PhysicsVector
31 {
32 public float X;
33 public float Y;
34 public float Z;
35
36 public PhysicsVector()
37 {
38
39 }
40
41 public PhysicsVector(float x, float y, float z)
42 {
43 X = x;
44 Y = y;
45 Z = z;
46 }
47
48 public static readonly PhysicsVector Zero = new PhysicsVector(0f, 0f, 0f);
49
50 public override string ToString()
51 {
52 return "<" + this.X + "," + this.Y + "," + this.Z + ">";
53 }
54 }
55}
diff --git a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
new file mode 100644
index 0000000..ee10430
--- /dev/null
+++ b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("RealPhysXplugin")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("RealPhysXplugin")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
new file mode 100644
index 0000000..2780188
--- /dev/null
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -0,0 +1,457 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Axiom.Math;
31using Ode.NET;
32using OpenSim.Physics.Manager;
33
34namespace OpenSim.Region.Physics.OdePlugin
35{
36 /// <summary>
37 /// ODE plugin
38 /// </summary>
39 public class OdePlugin : IPhysicsPlugin
40 {
41 private OdeScene _mScene;
42
43 public OdePlugin()
44 {
45
46 }
47
48 public bool Init()
49 {
50 return true;
51 }
52
53 public PhysicsScene GetScene()
54 {
55 if (_mScene == null)
56 {
57 _mScene = new OdeScene();
58 }
59 return (_mScene);
60 }
61
62 public string GetName()
63 {
64 return ("OpenDynamicsEngine");
65 }
66
67 public void Dispose()
68 {
69
70 }
71 }
72
73 public class OdeScene : PhysicsScene
74 {
75 static public IntPtr world;
76 static public IntPtr space;
77 static private IntPtr contactgroup;
78 static private IntPtr LandGeom;
79 //static private IntPtr Land;
80 private double[] _heightmap;
81 static private d.NearCallback nearCallback = near;
82 private List<OdeCharacter> _characters = new List<OdeCharacter>();
83 private static d.ContactGeom[] contacts = new d.ContactGeom[30];
84 private static d.Contact contact;
85
86 public OdeScene()
87 {
88 contact.surface.mode = d.ContactFlags.Bounce | d.ContactFlags.SoftCFM;
89 contact.surface.mu = d.Infinity;
90 contact.surface.mu2 = 0.0f;
91 contact.surface.bounce = 0.1f;
92 contact.surface.bounce_vel = 0.1f;
93 contact.surface.soft_cfm = 0.01f;
94
95 world = d.WorldCreate();
96 space = d.HashSpaceCreate(IntPtr.Zero);
97 contactgroup = d.JointGroupCreate(0);
98 d.WorldSetGravity(world, 0.0f, 0.0f, -0.5f);
99 //d.WorldSetCFM(world, 1e-5f);
100 d.WorldSetAutoDisableFlag(world, false);
101 d.WorldSetContactSurfaceLayer(world, 0.001f);
102 // d.CreatePlane(space, 0, 0, 1, 0);
103 this._heightmap = new double[65536];
104 }
105
106 // This function blatantly ripped off from BoxStack.cs
107 static private void near(IntPtr space, IntPtr g1, IntPtr g2)
108 {
109 IntPtr b1 = d.GeomGetBody(g1);
110 IntPtr b2 = d.GeomGetBody(g2);
111 if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact))
112 return;
113
114 int count = d.Collide(g1, g2, 500, contacts, d.ContactGeom.SizeOf);
115 for (int i = 0; i < count; ++i)
116 {
117 contact.geom = contacts[i];
118 IntPtr joint = d.JointCreateContact(world, contactgroup, ref contact);
119 d.JointAttach(joint, b1, b2);
120 }
121
122 }
123
124 public override PhysicsActor AddAvatar(PhysicsVector position)
125 {
126 PhysicsVector pos = new PhysicsVector();
127 pos.X = position.X;
128 pos.Y = position.Y;
129 pos.Z = position.Z + 20;
130 OdeCharacter newAv = new OdeCharacter(this, pos);
131 this._characters.Add(newAv);
132 return newAv;
133 }
134
135 public override void RemoveAvatar(PhysicsActor actor)
136 {
137
138 }
139
140 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
141 {
142 PhysicsVector pos = new PhysicsVector();
143 pos.X = position.X;
144 pos.Y = position.Y;
145 pos.Z = position.Z;
146 PhysicsVector siz = new PhysicsVector();
147 siz.X = size.X;
148 siz.Y = size.Y;
149 siz.Z = size.Z;
150 return new OdePrim();
151 }
152
153 public override void Simulate(float timeStep)
154 {
155 foreach (OdeCharacter actor in _characters)
156 {
157 actor.Move(timeStep * 5f);
158 }
159 d.SpaceCollide(space, IntPtr.Zero, nearCallback);
160 d.WorldQuickStep(world, timeStep * 5f);
161 d.JointGroupEmpty(contactgroup);
162 foreach (OdeCharacter actor in _characters)
163 {
164 actor.UpdatePosition();
165 }
166
167 }
168
169 public override void GetResults()
170 {
171
172 }
173
174 public override bool IsThreaded
175 {
176 get
177 {
178 return (false); // for now we won't be multithreaded
179 }
180 }
181
182 public override void SetTerrain(float[] heightMap)
183 {
184 for (int i = 0; i < 65536; i++)
185 {
186 // this._heightmap[i] = (double)heightMap[i];
187 // dbm (danx0r) -- heightmap x,y must be swapped for Ode (should fix ODE, but for now...)
188 int x = i & 0xff;
189 int y = i >> 8;
190 this._heightmap[i] = (double)heightMap[x * 256 + y];
191 }
192 IntPtr HeightmapData = d.GeomHeightfieldDataCreate();
193 d.GeomHeightfieldDataBuildDouble(HeightmapData, _heightmap, 0, 256, 256, 256, 256, 1.0f, 0.0f, 2.0f, 0);
194 d.GeomHeightfieldDataSetBounds(HeightmapData, 256, 256);
195 LandGeom = d.CreateHeightfield(space, HeightmapData, 1);
196 d.Matrix3 R = new d.Matrix3();
197
198 Quaternion q1 =Quaternion.FromAngleAxis(1.5707f, new Vector3(1,0,0));
199 Quaternion q2 =Quaternion.FromAngleAxis(1.5707f, new Vector3(0,1,0));
200 //Axiom.Math.Quaternion q3 = Axiom.Math.Quaternion.FromAngleAxis(3.14f, new Axiom.Math.Vector3(0, 0, 1));
201
202 q1 = q1 * q2;
203 //q1 = q1 * q3;
204 Vector3 v3 = new Vector3();
205 float angle = 0;
206 q1.ToAngleAxis(ref angle, ref v3);
207
208 d.RFromAxisAndAngle(out R, v3.x, v3.y, v3.z, angle);
209 d.GeomSetRotation(LandGeom, ref R);
210 d.GeomSetPosition(LandGeom, 128, 128, 0);
211 }
212
213 public override void DeleteTerrain()
214 {
215
216 }
217 }
218
219 public class OdeCharacter : PhysicsActor
220 {
221 private PhysicsVector _position;
222 private PhysicsVector _velocity;
223 private PhysicsVector _acceleration;
224 private bool flying;
225 //private float gravityAccel;
226 private IntPtr BoundingCapsule;
227 IntPtr capsule_geom;
228 d.Mass capsule_mass;
229
230 public OdeCharacter(OdeScene parent_scene, PhysicsVector pos)
231 {
232 _velocity = new PhysicsVector();
233 _position = pos;
234 _acceleration = new PhysicsVector();
235 d.MassSetCapsule(out capsule_mass, 5.0f, 3, 0.5f, 2f);
236 capsule_geom = d.CreateCapsule(OdeScene.space, 0.5f, 2f);
237 this.BoundingCapsule = d.BodyCreate(OdeScene.world);
238 d.BodySetMass(BoundingCapsule, ref capsule_mass);
239 d.BodySetPosition(BoundingCapsule, pos.X, pos.Y, pos.Z);
240 d.GeomSetBody(capsule_geom, BoundingCapsule);
241 }
242
243 public override bool Flying
244 {
245 get
246 {
247 return flying;
248 }
249 set
250 {
251 flying = value;
252 }
253 }
254
255 public override PhysicsVector Position
256 {
257 get
258 {
259 return _position;
260 }
261 set
262 {
263 _position = value;
264 }
265 }
266
267 public override PhysicsVector Velocity
268 {
269 get
270 {
271 return _velocity;
272 }
273 set
274 {
275 _velocity = value;
276 }
277 }
278
279 public override bool Kinematic
280 {
281 get
282 {
283 return false;
284 }
285 set
286 {
287
288 }
289 }
290
291 public override Quaternion Orientation
292 {
293 get
294 {
295 return Quaternion.Identity;
296 }
297 set
298 {
299
300 }
301 }
302
303 public override PhysicsVector Acceleration
304 {
305 get
306 {
307 return _acceleration;
308 }
309
310 }
311 public void SetAcceleration(PhysicsVector accel)
312 {
313 this._acceleration = accel;
314 }
315
316 public override void AddForce(PhysicsVector force)
317 {
318
319 }
320
321 public override void SetMomentum(PhysicsVector momentum)
322 {
323
324 }
325
326 public void Move(float timeStep)
327 {
328 PhysicsVector vec = new PhysicsVector();
329 vec.X = this._velocity.X * timeStep;
330 vec.Y = this._velocity.Y * timeStep;
331 if (flying)
332 {
333 vec.Z = (this._velocity.Z + 0.5f) * timeStep;
334 }
335 d.BodySetLinearVel(this.BoundingCapsule, vec.X, vec.Y, vec.Z);
336 }
337
338 public void UpdatePosition()
339 {
340 d.Vector3 vec = d.BodyGetPosition(BoundingCapsule);
341 this._position.X = vec.X;
342 this._position.Y = vec.Y;
343 this._position.Z = vec.Z+1.0f;
344 }
345 }
346
347 public class OdePrim : PhysicsActor
348 {
349 private PhysicsVector _position;
350 private PhysicsVector _velocity;
351 private PhysicsVector _acceleration;
352
353 public OdePrim()
354 {
355 _velocity = new PhysicsVector();
356 _position = new PhysicsVector();
357 _acceleration = new PhysicsVector();
358 }
359 public override bool Flying
360 {
361 get
362 {
363 return false; //no flying prims for you
364 }
365 set
366 {
367
368 }
369 }
370 public override PhysicsVector Position
371 {
372 get
373 {
374 PhysicsVector pos = new PhysicsVector();
375 // PhysicsVector vec = this._prim.Position;
376 //pos.X = vec.X;
377 //pos.Y = vec.Y;
378 //pos.Z = vec.Z;
379 return pos;
380
381 }
382 set
383 {
384 /*PhysicsVector vec = value;
385 PhysicsVector pos = new PhysicsVector();
386 pos.X = vec.X;
387 pos.Y = vec.Y;
388 pos.Z = vec.Z;
389 this._prim.Position = pos;*/
390 }
391 }
392
393 public override PhysicsVector Velocity
394 {
395 get
396 {
397 return _velocity;
398 }
399 set
400 {
401 _velocity = value;
402 }
403 }
404
405 public override bool Kinematic
406 {
407 get
408 {
409 return false;
410 //return this._prim.Kinematic;
411 }
412 set
413 {
414 //this._prim.Kinematic = value;
415 }
416 }
417
418 public override Quaternion Orientation
419 {
420 get
421 {
422 Quaternion res = new Quaternion();
423 return res;
424 }
425 set
426 {
427
428 }
429 }
430
431 public override PhysicsVector Acceleration
432 {
433 get
434 {
435 return _acceleration;
436 }
437
438 }
439 public void SetAcceleration(PhysicsVector accel)
440 {
441 this._acceleration = accel;
442 }
443
444 public override void AddForce(PhysicsVector force)
445 {
446
447 }
448
449 public override void SetMomentum(PhysicsVector momentum)
450 {
451
452 }
453
454
455 }
456
457}
diff --git a/OpenSim/Region/Physics/PhysXPlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/PhysXPlugin/AssemblyInfo.cs
new file mode 100644
index 0000000..ee10430
--- /dev/null
+++ b/OpenSim/Region/Physics/PhysXPlugin/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("RealPhysXplugin")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("RealPhysXplugin")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
new file mode 100644
index 0000000..4c82549
--- /dev/null
+++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
@@ -0,0 +1,425 @@
1/*/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Physics.Manager;
31using PhysXWrapper;
32using Quaternion=Axiom.Math.Quaternion;
33
34namespace OpenSim.Region.Physics.PhysXPlugin
35{
36 /// <summary>
37 /// Will be the PhysX plugin but for now will be a very basic physics engine
38 /// </summary>
39 public class PhysXPlugin : IPhysicsPlugin
40 {
41 private PhysXScene _mScene;
42
43 public PhysXPlugin()
44 {
45
46 }
47
48 public bool Init()
49 {
50 return true;
51 }
52
53 public PhysicsScene GetScene()
54 {
55 if(_mScene == null)
56 {
57 _mScene = new PhysXScene();
58 }
59 return(_mScene);
60 }
61
62 public string GetName()
63 {
64 return("RealPhysX");
65 }
66
67 public void Dispose()
68 {
69
70 }
71 }
72
73 public class PhysXScene :PhysicsScene
74 {
75 private List<PhysXCharacter> _characters = new List<PhysXCharacter>();
76 private List<PhysXPrim> _prims = new List<PhysXPrim>();
77 private float[] _heightMap = null;
78 private NxPhysicsSDK mySdk;
79 private NxScene scene;
80
81 public PhysXScene()
82 {
83 mySdk = NxPhysicsSDK.CreateSDK();
84 Console.WriteLine("Sdk created - now creating scene");
85 scene = mySdk.CreateScene();
86
87 }
88
89 public override PhysicsActor AddAvatar(PhysicsVector position)
90 {
91 Vec3 pos = new Vec3();
92 pos.X = position.X;
93 pos.Y = position.Y;
94 pos.Z = position.Z;
95 PhysXCharacter act = new PhysXCharacter( scene.AddCharacter(pos));
96 act.Position = position;
97 _characters.Add(act);
98 return act;
99 }
100
101 public override void RemoveAvatar(PhysicsActor actor)
102 {
103
104 }
105
106 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
107 {
108 Vec3 pos = new Vec3();
109 pos.X = position.X;
110 pos.Y = position.Y;
111 pos.Z = position.Z;
112 Vec3 siz = new Vec3();
113 siz.X = size.X;
114 siz.Y = size.Y;
115 siz.Z = size.Z;
116 PhysXPrim act = new PhysXPrim( scene.AddNewBox(pos, siz));
117 _prims.Add(act);
118 return act;
119 }
120 public override void Simulate(float timeStep)
121 {
122 try
123 {
124 foreach (PhysXCharacter actor in _characters)
125 {
126 actor.Move(timeStep);
127 }
128 scene.Simulate(timeStep);
129 scene.FetchResults();
130 scene.UpdateControllers();
131
132 foreach (PhysXCharacter actor in _characters)
133 {
134 actor.UpdatePosition();
135 }
136 }
137 catch (Exception e)
138 {
139 Console.WriteLine(e.Message);
140 }
141
142 }
143
144 public override void GetResults()
145 {
146
147 }
148
149 public override bool IsThreaded
150 {
151 get
152 {
153 return(false); // for now we won't be multithreaded
154 }
155 }
156
157 public override void SetTerrain(float[] heightMap)
158 {
159 if (this._heightMap != null)
160 {
161 Console.WriteLine("PhysX - deleting old terrain");
162 this.scene.DeleteTerrain();
163 }
164 this._heightMap = heightMap;
165 this.scene.AddTerrain(heightMap);
166 }
167
168 public override void DeleteTerrain()
169 {
170 this.scene.DeleteTerrain();
171 }
172 }
173
174 public class PhysXCharacter : PhysicsActor
175 {
176 private PhysicsVector _position;
177 private PhysicsVector _velocity;
178 private PhysicsVector _acceleration;
179 private NxCharacter _character;
180 private bool flying;
181 private float gravityAccel;
182
183 public PhysXCharacter(NxCharacter character)
184 {
185 _velocity = new PhysicsVector();
186 _position = new PhysicsVector();
187 _acceleration = new PhysicsVector();
188 _character = character;
189 }
190
191 public override bool Flying
192 {
193 get
194 {
195 return flying;
196 }
197 set
198 {
199 flying = value;
200 }
201 }
202
203 public override PhysicsVector Position
204 {
205 get
206 {
207 return _position;
208 }
209 set
210 {
211 _position = value;
212 Vec3 ps = new Vec3();
213 ps.X = value.X;
214 ps.Y = value.Y;
215 ps.Z = value.Z;
216 this._character.Position = ps;
217 }
218 }
219
220 public override PhysicsVector Velocity
221 {
222 get
223 {
224 return _velocity;
225 }
226 set
227 {
228 _velocity = value;
229 }
230 }
231
232 public override bool Kinematic
233 {
234 get
235 {
236 return false;
237 }
238 set
239 {
240
241 }
242 }
243
244 public override Quaternion Orientation
245 {
246 get
247 {
248 return Quaternion.Identity;
249 }
250 set
251 {
252
253 }
254 }
255
256 public override PhysicsVector Acceleration
257 {
258 get
259 {
260 return _acceleration;
261 }
262
263 }
264 public void SetAcceleration (PhysicsVector accel)
265 {
266 this._acceleration = accel;
267 }
268
269 public override void AddForce(PhysicsVector force)
270 {
271
272 }
273
274 public override void SetMomentum(PhysicsVector momentum)
275 {
276
277 }
278
279 public void Move(float timeStep)
280 {
281 Vec3 vec = new Vec3();
282 vec.X = this._velocity.X * timeStep;
283 vec.Y = this._velocity.Y * timeStep;
284 if(flying)
285 {
286 vec.Z = ( this._velocity.Z) * timeStep;
287 }
288 else
289 {
290 gravityAccel+= -9.8f;
291 vec.Z = (gravityAccel + this._velocity.Z) * timeStep;
292 }
293 int res = this._character.Move(vec);
294 if(res == 1)
295 {
296 gravityAccel = 0;
297 }
298 }
299
300 public void UpdatePosition()
301 {
302 Vec3 vec = this._character.Position;
303 this._position.X = vec.X;
304 this._position.Y = vec.Y;
305 this._position.Z = vec.Z;
306 }
307 }
308
309 public class PhysXPrim : PhysicsActor
310 {
311 private PhysicsVector _position;
312 private PhysicsVector _velocity;
313 private PhysicsVector _acceleration;
314 private NxActor _prim;
315
316 public PhysXPrim(NxActor prim)
317 {
318 _velocity = new PhysicsVector();
319 _position = new PhysicsVector();
320 _acceleration = new PhysicsVector();
321 _prim = prim;
322 }
323 public override bool Flying
324 {
325 get
326 {
327 return false; //no flying prims for you
328 }
329 set
330 {
331
332 }
333 }
334 public override PhysicsVector Position
335 {
336 get
337 {
338 PhysicsVector pos = new PhysicsVector();
339 Vec3 vec = this._prim.Position;
340 pos.X = vec.X;
341 pos.Y = vec.Y;
342 pos.Z = vec.Z;
343 return pos;
344
345 }
346 set
347 {
348 PhysicsVector vec = value;
349 Vec3 pos = new Vec3();
350 pos.X = vec.X;
351 pos.Y = vec.Y;
352 pos.Z = vec.Z;
353 this._prim.Position = pos;
354 }
355 }
356
357 public override PhysicsVector Velocity
358 {
359 get
360 {
361 return _velocity;
362 }
363 set
364 {
365 _velocity = value;
366 }
367 }
368
369 public override bool Kinematic
370 {
371 get
372 {
373 return this._prim.Kinematic;
374 }
375 set
376 {
377 this._prim.Kinematic = value;
378 }
379 }
380
381 public override Quaternion Orientation
382 {
383 get
384 {
385 Quaternion res = new Quaternion();
386 PhysXWrapper.Quaternion quat = this._prim.GetOrientation();
387 res.w = quat.W;
388 res.x = quat.X;
389 res.y = quat.Y;
390 res.z = quat.Z;
391 return res;
392 }
393 set
394 {
395
396 }
397 }
398
399 public override PhysicsVector Acceleration
400 {
401 get
402 {
403 return _acceleration;
404 }
405
406 }
407 public void SetAcceleration (PhysicsVector accel)
408 {
409 this._acceleration = accel;
410 }
411
412 public override void AddForce(PhysicsVector force)
413 {
414
415 }
416
417 public override void SetMomentum(PhysicsVector momentum)
418 {
419
420 }
421
422
423 }
424
425}
diff --git a/OpenSim/Region/Scripting/Properties/AssemblyInfo.cs b/OpenSim/Region/Scripting/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f5da4c0
--- /dev/null
+++ b/OpenSim/Region/Scripting/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
1using System.Reflection;
2using System.Runtime.CompilerServices;
3using System.Runtime.InteropServices;
4
5// General Information about an assembly is controlled through the following
6// set of attributes. Change these attribute values to modify the information
7// associated with an assembly.
8[assembly: AssemblyTitle("OpenSim.Scripting")]
9[assembly: AssemblyDescription("")]
10[assembly: AssemblyConfiguration("")]
11[assembly: AssemblyCompany("")]
12[assembly: AssemblyProduct("OpenSim.Scripting")]
13[assembly: AssemblyCopyright("Copyright © 2007")]
14[assembly: AssemblyTrademark("")]
15[assembly: AssemblyCulture("")]
16
17// Setting ComVisible to false makes the types in this assembly not visible
18// to COM components. If you need to access a type in this assembly from
19// COM, set the ComVisible attribute to true on that type.
20[assembly: ComVisible(false)]
21
22// The following GUID is for the ID of the typelib if this project is exposed to COM
23[assembly: Guid("61eae1ad-82aa-4c77-8bc5-b5a8c9522b18")]
24
25// Version information for an assembly consists of the following four values:
26//
27// Major Version
28// Minor Version
29// Build Number
30// Revision
31//
32// You can specify all the values or you can default the Revision and Build Numbers
33// by using the '*' as shown below:
34[assembly: AssemblyVersion("1.0.0.0")]
35[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Region/Scripting/Script.cs b/OpenSim/Region/Scripting/Script.cs
new file mode 100644
index 0000000..0f4af00
--- /dev/null
+++ b/OpenSim/Region/Scripting/Script.cs
@@ -0,0 +1,32 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5using OpenSim.Framework.Console;
6using OpenSim.Framework;
7using OpenSim.Region;
8using OpenSim.Region.Scenes;
9
10namespace OpenSim.Scripting
11{
12 public interface IScript
13 {
14 void Initialise(ScriptInfo scriptInfo);
15 }
16
17 public class TestScript : IScript
18 {
19 ScriptInfo script;
20
21 public void Initialise(ScriptInfo scriptInfo)
22 {
23 script = scriptInfo;
24 script.events.OnFrame += new OpenSim.Region.Scenes.EventManager.OnFrameDelegate(events_OnFrame);
25 }
26
27 void events_OnFrame()
28 {
29 script.logger.Verbose("Hello World!");
30 }
31 }
32}
diff --git a/OpenSim/Region/Scripting/ScriptAccess.cs b/OpenSim/Region/Scripting/ScriptAccess.cs
new file mode 100644
index 0000000..a9fede5
--- /dev/null
+++ b/OpenSim/Region/Scripting/ScriptAccess.cs
@@ -0,0 +1,31 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5using OpenSim.Region.Scenes;
6using OpenSim.Framework.Console;
7
8namespace OpenSim.Scripting
9{
10 /// <summary>
11 /// Class which provides access to the world
12 /// </summary>
13 public class ScriptInfo
14 {
15 // Reference to world.eventsManager provided for convenience
16 public EventManager events;
17
18 // The main world
19 public Scene world;
20
21 // The console
22 public LogBase logger;
23
24 public ScriptInfo(Scene scene)
25 {
26 world = scene;
27 events = world.eventManager;
28 logger = OpenSim.Framework.Console.MainLog.Instance;
29 }
30 }
31}
diff --git a/OpenSim/Region/Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs
new file mode 100644
index 0000000..39ba6e4
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs
@@ -0,0 +1,112 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29// BDB Support
30// Apparently broken on Mono
31
32using BerkeleyDb;
33using libsecondlife;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Types;
36
37namespace OpenSim.Region.Storage.LocalStorageBDB
38{
39 public class BDBLocalStorage : ILocalStorage
40 {
41 const string simDbName = "localsim.db";
42
43 DbHash sim;
44 Db DB;
45 //BEFormatter formatter;
46
47 public BDBLocalStorage()
48 {
49 DB = new Db(DbCreateFlags.None);
50 sim = (DbHash)DB.Open(null, simDbName, null, DbType.Hash, Db.OpenFlags.Create, 0);
51 //vendorDb = (DbBTree)db.Open(null, VendorDbName, null, DbType.BTree, Db.OpenFlags.Create, 0);
52 }
53
54 public void Initialise(string file)
55 {
56 // Blank
57 }
58
59 public void StorePrim(PrimData prim)
60 {
61 DbEntry key = new DbEntry();
62 DbEntry data = new DbEntry();
63 lock (sim)
64 {
65 sim.PutUnique(null, ref key, ref data, DbFile.WriteFlags.AutoCommit);
66 }
67 }
68 public void RemovePrim(LLUUID primID)
69 {
70
71 }
72 public void LoadPrimitives(ILocalStorageReceiver receiver)
73 {
74
75 }
76 public float[] LoadWorld()
77 {
78 return new float[65536];
79 }
80 public void SaveMap(float[] heightmap)
81 {
82
83 }
84
85 public void SaveParcels(ParcelData[] parcel_data)
86 {
87 }
88
89 public void SaveParcel(ParcelData parcel)
90 {
91 }
92
93 public void RemoveParcel(ParcelData parcel)
94 {
95 }
96
97 public void RemoveAllParcels()
98 {
99 }
100
101 public void LoadParcels(ILocalStorageParcelReceiver recv)
102 {
103 recv.NoParcelDataFromStorage();
104 }
105
106 public void ShutDown()
107 {
108 sim.GetDb().Close();
109 DB.Close();
110 }
111 }
112} \ No newline at end of file
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/AssemblyInfo.cs b/OpenSim/Region/Storage/LocalStorageDb4o/AssemblyInfo.cs
new file mode 100644
index 0000000..4463ac9
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageDb4o/AssemblyInfo.cs
@@ -0,0 +1,56 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following
31// attributes.
32//
33// change them to the information which is associated with the assembly
34// you compile.
35
36[assembly: AssemblyTitle("Db4LocalStorage")]
37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("Db4LocalStorage")]
41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")]
44
45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)]
48
49// The assembly version has following format :
50//
51// Major.Minor.Build.Revision
52//
53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default):
55
56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs b/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs
new file mode 100644
index 0000000..8214bc8
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs
@@ -0,0 +1,267 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Db4objects.Db4o;
30using libsecondlife;
31using OpenSim.Framework.Console;
32using OpenSim.Framework.Interfaces;
33using OpenSim.Framework.Types;
34
35namespace OpenSim.Region.Storage.LocalStorageDb4o
36{
37 /// <summary>
38 ///
39 /// </summary>
40 public class Db4LocalStorage : ILocalStorage
41 {
42 private IObjectContainer db;
43 private string datastore;
44
45 public Db4LocalStorage()
46 {
47
48 }
49
50 public void Initialise(string dfile)
51 {
52 MainLog.Instance.Warn("Db4LocalStorage Opening " + dfile);
53 datastore = dfile;
54 try
55 {
56 db = Db4oFactory.OpenFile(datastore);
57 MainLog.Instance.Verbose("Db4LocalStorage creation");
58 }
59 catch (Exception e)
60 {
61 db.Close();
62 MainLog.Instance.Warn("Db4LocalStorage :Constructor - Exception occured");
63 MainLog.Instance.Warn(e.ToString());
64 }
65 }
66
67 public void StorePrim(PrimData prim)
68 {
69 IObjectSet result = db.Query(new UUIDPrimQuery(prim.FullID));
70 if (result.Count > 0)
71 {
72 //prim already in storage
73 //so update it
74 PrimData found = (PrimData)result.Next();
75 found.PathBegin = prim.PathBegin;
76 found.PathCurve = prim.PathCurve;
77 found.PathEnd = prim.PathEnd;
78 found.PathRadiusOffset = prim.PathRadiusOffset;
79 found.PathRevolutions = prim.PathRevolutions;
80 found.PathScaleX = prim.PathScaleX;
81 found.PathScaleY = prim.PathScaleY;
82 found.PathShearX = prim.PathShearX;
83 found.PathShearY = prim.PathShearY;
84 found.PathSkew = prim.PathSkew;
85 found.PathTaperX = prim.PathTaperX;
86 found.PathTaperY = prim.PathTaperY;
87 found.PathTwist = prim.PathTwist;
88 found.PathTwistBegin = prim.PathTwistBegin;
89 found.PCode = prim.PCode;
90 found.ProfileBegin = prim.ProfileBegin;
91 found.ProfileCurve = prim.ProfileCurve;
92 found.ProfileEnd = prim.ProfileEnd;
93 found.ProfileHollow = prim.ProfileHollow;
94 found.Position = prim.Position;
95 found.Rotation = prim.Rotation;
96 found.TextureEntry = prim.TextureEntry;
97 db.Set(found);
98 db.Commit();
99 }
100 else
101 {
102 //not in storage
103 db.Set(prim);
104 db.Commit();
105 }
106 }
107
108 public void RemovePrim(LLUUID primID)
109 {
110 IObjectSet result = db.Query(new UUIDPrimQuery(primID));
111 if (result.Count > 0)
112 {
113 PrimData found = (PrimData)result.Next();
114 db.Delete(found);
115 }
116 }
117
118
119 public void LoadPrimitives(ILocalStorageReceiver receiver)
120 {
121 IObjectSet result = db.Get(typeof(PrimData));
122 MainLog.Instance.Verbose("Db4LocalStorage.cs: LoadPrimitives() - number of prims in storages is " + result.Count);
123 foreach (PrimData prim in result)
124 {
125 receiver.PrimFromStorage(prim);
126 }
127 }
128
129 public float[] LoadWorld()
130 {
131 MainLog.Instance.Verbose("LoadWorld() - Loading world....");
132 float[] heightmap = null;
133 MainLog.Instance.Verbose("LoadWorld() - Looking for a heightmap in local DB");
134 IObjectSet world_result = db.Get(typeof(MapStorage));
135 if (world_result.Count > 0)
136 {
137 MainLog.Instance.Verbose("LoadWorld() - Found a heightmap in local database, loading");
138 MapStorage map = (MapStorage)world_result.Next();
139 //blank.LandMap = map.Map;
140 heightmap = map.Map;
141 }
142 return heightmap;
143 }
144
145 public void SaveMap(float[] heightmap)
146 {
147 IObjectSet world_result = db.Get(typeof(MapStorage));
148 if (world_result.Count > 0)
149 {
150 MainLog.Instance.Verbose("SaveWorld() - updating saved copy of heightmap in local database");
151 MapStorage map = (MapStorage)world_result.Next();
152 db.Delete(map);
153 }
154 MapStorage map1 = new MapStorage();
155 map1.Map = heightmap; //OpenSim_Main.local_world.LandMap;
156 db.Set(map1);
157 db.Commit();
158 }
159
160 public void SaveParcel(ParcelData parcel)
161 {
162 IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID));
163 if (result.Count > 0)
164 {
165 //Old Parcel
166 ParcelData updateParcel = (ParcelData)result.Next();
167 updateParcel.AABBMax = parcel.AABBMax;
168 updateParcel.AABBMin = parcel.AABBMin;
169 updateParcel.area = parcel.area;
170 updateParcel.auctionID = parcel.auctionID;
171 updateParcel.authBuyerID = parcel.authBuyerID;
172 updateParcel.category = parcel.category;
173 updateParcel.claimDate = parcel.claimDate;
174 updateParcel.claimPrice = parcel.claimPrice;
175 updateParcel.groupID = parcel.groupID;
176 updateParcel.groupPrims = parcel.groupPrims;
177 updateParcel.isGroupOwned = parcel.isGroupOwned;
178 updateParcel.landingType = parcel.landingType;
179 updateParcel.mediaAutoScale = parcel.mediaAutoScale;
180 updateParcel.mediaID = parcel.mediaID;
181 updateParcel.mediaURL = parcel.mediaURL;
182 updateParcel.musicURL = parcel.musicURL;
183 updateParcel.localID = parcel.localID;
184 updateParcel.ownerID = parcel.ownerID;
185 updateParcel.passHours = parcel.passHours;
186 updateParcel.passPrice = parcel.passPrice;
187 updateParcel.parcelBitmapByteArray = (byte[])parcel.parcelBitmapByteArray.Clone();
188 updateParcel.parcelDesc = parcel.parcelDesc;
189 updateParcel.parcelFlags = parcel.parcelFlags;
190 updateParcel.parcelName = parcel.parcelName;
191 updateParcel.parcelStatus = parcel.parcelStatus;
192 updateParcel.salePrice = parcel.salePrice;
193 updateParcel.snapshotID = parcel.snapshotID;
194 updateParcel.userLocation = parcel.userLocation;
195 updateParcel.userLookAt = parcel.userLookAt;
196
197 db.Set(updateParcel);
198 }
199 else
200 {
201 db.Set(parcel);
202 }
203 db.Commit();
204 }
205
206 public void SaveParcels(ParcelData[] parcel_data)
207 {
208 MainLog.Instance.Notice("Parcel Backup: Saving Parcels...");
209 int i;
210 for (i = 0; i < parcel_data.GetLength(0); i++)
211 {
212
213 SaveParcel(parcel_data[i]);
214
215 }
216 MainLog.Instance.Notice("Parcel Backup: Parcel Save Complete");
217 }
218
219 public void RemoveParcel(ParcelData parcel)
220 {
221 IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID));
222 if (result.Count > 0)
223 {
224 db.Delete(result[0]);
225 }
226 db.Commit();
227 }
228 public void RemoveAllParcels()
229 {
230 MainLog.Instance.Notice("Parcel Backup: Removing all parcels...");
231 IObjectSet result = db.Get(typeof(ParcelData));
232 if (result.Count > 0)
233 {
234 foreach (ParcelData parcelData in result)
235 {
236 RemoveParcel(parcelData);
237 }
238 }
239 }
240
241 public void LoadParcels(ILocalStorageParcelReceiver recv)
242 {
243 MainLog.Instance.Notice("Parcel Backup: Loading Parcels...");
244 IObjectSet result = db.Get(typeof(ParcelData));
245 if (result.Count > 0)
246 {
247 MainLog.Instance.Notice("Parcel Backup: Parcels exist in database.");
248 foreach (ParcelData parcelData in result)
249 {
250
251 recv.ParcelFromStorage(parcelData);
252 }
253 }
254 else
255 {
256 MainLog.Instance.Notice("Parcel Backup: No parcels exist. Creating basic parcel.");
257 recv.NoParcelDataFromStorage();
258 }
259 MainLog.Instance.Notice("Parcel Backup: Parcels Restored");
260 }
261 public void ShutDown()
262 {
263 db.Commit();
264 db.Close();
265 }
266 }
267} \ No newline at end of file
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/MapStorage.cs b/OpenSim/Region/Storage/LocalStorageDb4o/MapStorage.cs
new file mode 100644
index 0000000..ec82d02
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageDb4o/MapStorage.cs
@@ -0,0 +1,39 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28namespace OpenSim.Region.Storage.LocalStorageDb4o
29{
30 public class MapStorage
31 {
32 public float[] Map;
33
34 public MapStorage()
35 {
36
37 }
38 }
39} \ No newline at end of file
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/UUIDParcelQuery.cs b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDParcelQuery.cs
new file mode 100644
index 0000000..6e6768c
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDParcelQuery.cs
@@ -0,0 +1,47 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Db4objects.Db4o.Query;
29using libsecondlife;
30using OpenSim.Framework.Types;
31
32namespace OpenSim.Region.Storage.LocalStorageDb4o
33{
34 public class UUIDParcelQuery : Predicate
35 {
36 private LLUUID globalIDSearch;
37
38 public UUIDParcelQuery(LLUUID find)
39 {
40 globalIDSearch = find;
41 }
42 public bool Match(ParcelData parcel)
43 {
44 return (parcel.globalID == globalIDSearch);
45 }
46 }
47}
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/UUIDPrimQuery.cs b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDPrimQuery.cs
new file mode 100644
index 0000000..eb309cb
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDPrimQuery.cs
@@ -0,0 +1,47 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 Db4objects.Db4o.Query;
29using libsecondlife;
30using OpenSim.Framework.Types;
31
32namespace OpenSim.Region.Storage.LocalStorageDb4o
33{
34 public class UUIDPrimQuery : Predicate
35 {
36 private LLUUID _findID;
37
38 public UUIDPrimQuery(LLUUID find)
39 {
40 _findID = find;
41 }
42 public bool Match(PrimData prim)
43 {
44 return (prim.FullID == _findID);
45 }
46 }
47}
diff --git a/OpenSim/Region/Storage/LocalStorageSQLite/Properties/AssemblyInfo.cs b/OpenSim/Region/Storage/LocalStorageSQLite/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ea9cda8
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageSQLite/Properties/AssemblyInfo.cs
@@ -0,0 +1,60 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// General Information about an assembly is controlled through the following
31// set of attributes. Change these attribute values to modify the information
32// associated with an assembly.
33[assembly: AssemblyTitle("OpenSim.Region.Storage.LocalStorageSQLite")]
34[assembly: AssemblyDescription("")]
35[assembly: AssemblyConfiguration("")]
36[assembly: AssemblyCompany("")]
37[assembly: AssemblyProduct("OpenSim.Region.Storage.LocalStorageSQLite")]
38[assembly: AssemblyCopyright("Copyright © 2007")]
39[assembly: AssemblyTrademark("")]
40[assembly: AssemblyCulture("")]
41
42// Setting ComVisible to false makes the types in this assembly not visible
43// to COM components. If you need to access a type in this assembly from
44// COM, set the ComVisible attribute to true on that type.
45[assembly: ComVisible(false)]
46
47// The following GUID is for the ID of the typelib if this project is exposed to COM
48[assembly: Guid("ecd6e0c1-7909-413e-9e3f-659678ac3bc3")]
49
50// Version information for an assembly consists of the following four values:
51//
52// Major Version
53// Minor Version
54// Build Number
55// Revision
56//
57// You can specify all the values or you can default the Revision and Build Numbers
58// by using the '*' as shown below:
59[assembly: AssemblyVersion("1.0.0.*")]
60[assembly: AssemblyFileVersion("1.0.0.*")]
diff --git a/OpenSim/Region/Storage/LocalStorageSQLite/SQLiteLocalStorage.cs b/OpenSim/Region/Storage/LocalStorageSQLite/SQLiteLocalStorage.cs
new file mode 100644
index 0000000..9900a98
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageSQLite/SQLiteLocalStorage.cs
@@ -0,0 +1,198 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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*/
28
29// SQLite Support
30// A bad idea, but the IRC people told me to!
31
32using System;
33using System.Data;
34using System.Data.SQLite;
35using libsecondlife;
36using OpenSim.Framework.Console;
37using OpenSim.Framework.Interfaces;
38using OpenSim.Framework.Types;
39
40namespace OpenSim.Region.Storage.LocalStorageSQLite
41{
42 public class SQLiteLocalStorage : ILocalStorage
43 {
44 IDbConnection db;
45
46 public SQLiteLocalStorage()
47 {
48 try
49 {
50 string connectionstring = "URI=file:localsim.sdb";
51 db = (IDbConnection)new SQLiteConnection(connectionstring);
52 db.Open();
53 }
54 catch (Exception e)
55 {
56 db.Close();
57 MainLog.Instance.Warn("SQLiteLocalStorage :Constructor - Exception occured");
58 MainLog.Instance.Warn(e.ToString());
59 }
60 }
61
62 public void Initialise(string file)
63 {
64 // Blank
65 }
66
67 public void StorePrim(PrimData prim)
68 {
69 IDbCommand cmd = db.CreateCommand();
70
71 //SECURITY WARNING:
72 // These parameters wont produce SQL injections since they are all integer based, however.
73 // if inserting strings such as name or description, you will need to use appropriate
74 // measures to prevent SQL injection (although the value of SQL injection in this is limited).
75
76 string sql = "REPLACE INTO prim (OwnerID,PCode,PathBegin,PathEnd,PathScaleX,PathScaleY,PathShearX,PathShearY,PathSkew,ProfileBegin,ProfileEnd,Scale,PathCurve,ProfileCurve,ParentID,ProfileHollow,PathRadiusOffset,PathRevolutions,PathTaperX,PathTaperY,PathTwist,PathTwistBegin,Texture,CreationDate,OwnerMask,NextOwnerMask,GroupMask,EveryoneMask,BaseMask,Position,Rotation,LocalID,FullID) ";
77 sql += "VALUES (";
78 sql += "\"" + prim.OwnerID.ToStringHyphenated() + "\","; // KILL ME NOW!
79 sql += "\"" + prim.PCode.ToString() + "\",";
80 sql += "\"" + prim.PathBegin.ToString() + "\",";
81 sql += "\"" + prim.PathEnd.ToString() + "\",";
82 sql += "\"" + prim.PathScaleX.ToString() + "\",";
83 sql += "\"" + prim.PathScaleY.ToString() + "\",";
84 sql += "\"" + prim.PathShearX.ToString() + "\",";
85 sql += "\"" + prim.PathShearY.ToString() + "\",";
86 sql += "\"" + prim.PathSkew.ToString() + "\",";
87 sql += "\"" + prim.ProfileBegin.ToString() + "\",";
88 sql += "\"" + prim.ProfileEnd.ToString() + "\",";
89 sql += "\"" + prim.Scale.ToString() + "\",";
90 sql += "\"" + prim.PathCurve.ToString() + "\",";
91 sql += "\"" + prim.ProfileCurve.ToString() + "\",";
92 sql += "\"" + prim.ParentID.ToString() + "\",";
93 sql += "\"" + prim.ProfileHollow.ToString() + "\",";
94 sql += "\"" + prim.PathRadiusOffset.ToString() + "\",";
95 sql += "\"" + prim.PathRevolutions.ToString() + "\",";
96 sql += "\"" + prim.PathTaperX.ToString() + "\",";
97 sql += "\"" + prim.PathTaperY.ToString() + "\",";
98 sql += "\"" + prim.PathTwist.ToString() + "\",";
99 sql += "\"" + prim.PathTwistBegin.ToString() + "\",";
100 sql += "\"" + prim.TextureEntry.ToString() + "\",";
101 sql += "\"" + prim.CreationDate.ToString() + "\",";
102 sql += "\"" + prim.OwnerMask.ToString() + "\",";
103 sql += "\"" + prim.NextOwnerMask.ToString() + "\",";
104 sql += "\"" + prim.GroupMask.ToString() + "\",";
105 sql += "\"" + prim.EveryoneMask.ToString() + "\",";
106 sql += "\"" + prim.BaseMask.ToString() + "\",";
107 sql += "\"" + prim.Position.ToString() + "\",";
108 sql += "\"" + prim.Rotation.ToString() + "\",";
109 sql += "\"" + prim.LocalID.ToString() + "\",";
110 sql += "\"" + prim.FullID.ToString() + "\")";
111
112 cmd.CommandText = sql;
113
114 try
115 {
116 cmd.ExecuteNonQuery();
117 }
118 catch (Exception e)
119 {
120 MainLog.Instance.Warn("SQLiteLocalStorage :StorePrim - Exception occured");
121 MainLog.Instance.Warn(e.ToString());
122 }
123
124 cmd.Dispose();
125 cmd = null;
126 }
127
128 public void RemovePrim(LLUUID primID)
129 {
130 IDbCommand cmd = db.CreateCommand();
131
132 //SECURITY WARNING:
133 // These parameters wont produce SQL injections since they are all integer based, however.
134 // if inserting strings such as name or description, you will need to use appropriate
135 // measures to prevent SQL injection (although the value of SQL injection in this is limited).
136
137 string sql = "DELETE FROM prim WHERE FullID = \"" + primID.ToStringHyphenated() + "\"";
138
139 cmd.CommandText = sql;
140
141 try
142 {
143 cmd.ExecuteNonQuery();
144 }
145 catch (Exception e)
146 {
147 MainLog.Instance.Warn("SQLiteLocalStorage :RemovePrim - Exception occured");
148 MainLog.Instance.Warn(e.ToString());
149 }
150
151 cmd.Dispose();
152 cmd = null;
153 }
154
155 public void LoadPrimitives(ILocalStorageReceiver receiver)
156 {
157
158 }
159
160 public float[] LoadWorld()
161 {
162 return new float[65536];
163 }
164
165 public void SaveMap(float[] heightmap)
166 {
167
168 }
169
170 public void SaveParcels(ParcelData[] parcel_manager)
171 {
172
173 }
174
175 public void SaveParcel(ParcelData parcel)
176 {
177 }
178
179 public void RemoveParcel(ParcelData parcel)
180 {
181 }
182
183 public void RemoveAllParcels()
184 {
185 }
186
187 public void LoadParcels(ILocalStorageParcelReceiver recv)
188 {
189 recv.NoParcelDataFromStorage();
190 }
191
192 public void ShutDown()
193 {
194 db.Close();
195 db = null;
196 }
197 }
198} \ No newline at end of file
diff --git a/OpenSim/Region/Terrain.BasicTerrain/Properties/AssemblyInfo.cs b/OpenSim/Region/Terrain.BasicTerrain/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9c721d1
--- /dev/null
+++ b/OpenSim/Region/Terrain.BasicTerrain/Properties/AssemblyInfo.cs
@@ -0,0 +1,60 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Reflection;
29using System.Runtime.InteropServices;
30// General Information about an assembly is controlled through the following
31// set of attributes. Change these attribute values to modify the information
32// associated with an assembly.
33[assembly: AssemblyTitle("OpenSim.Region.Terrain.BasicTerrain")]
34[assembly: AssemblyDescription("")]
35[assembly: AssemblyConfiguration("")]
36[assembly: AssemblyCompany("")]
37[assembly: AssemblyProduct("OpenSim.Region.Terrain.BasicTerrain")]
38[assembly: AssemblyCopyright("Copyright © 2007")]
39[assembly: AssemblyTrademark("")]
40[assembly: AssemblyCulture("")]
41
42// Setting ComVisible to false makes the types in this assembly not visible
43// to COM components. If you need to access a type in this assembly from
44// COM, set the ComVisible attribute to true on that type.
45[assembly: ComVisible(false)]
46
47// The following GUID is for the ID of the typelib if this project is exposed to COM
48[assembly: Guid("3263f5b5-0a41-4ed5-91a2-9baaaeecc849")]
49
50// Version information for an assembly consists of the following four values:
51//
52// Major Version
53// Minor Version
54// Build Number
55// Revision
56//
57// You can specify all the values or you can default the Revision and Build Numbers
58// by using the '*' as shown below:
59[assembly: AssemblyVersion("1.0.0.0")]
60[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs
new file mode 100644
index 0000000..6c9ec26
--- /dev/null
+++ b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs
@@ -0,0 +1,928 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.Drawing;
31using System.Drawing.Imaging;
32using System.IO;
33using libTerrain;
34using OpenJPEGNet;
35
36namespace OpenSim.Region.Terrain
37{
38 public class TerrainCommand
39 {
40 public virtual bool run(string[] cmdargs, ref string output)
41 {
42 return false;
43 }
44
45 public string args;
46 public string help;
47 }
48
49 public class TerrainEngine
50 {
51 /// <summary>
52 /// Plugin library for scripts
53 /// </summary>
54 public FilterHost customFilters = new FilterHost();
55
56 /// <summary>
57 /// A [normally] 256x256 heightmap
58 /// </summary>
59 public Channel heightmap;
60
61 /// <summary>
62 /// A copy of heightmap at the last save point (for reverting)
63 /// </summary>
64 public Channel revertmap;
65
66 /// <summary>
67 /// Water heightmap (needs clientside mods to work)
68 /// </summary>
69 public Channel watermap;
70
71 /// <summary>
72 /// Whether or not the terrain has been modified since it was last saved and sent to the Physics engine.
73 /// Counts the number of modifications since the last save. (0 = Untainted)
74 /// </summary>
75 public int tainted;
76
77 int w, h;
78
79 /// <summary>
80 /// Generate a new TerrainEngine instance and creates a new heightmap
81 /// </summary>
82 public TerrainEngine()
83 {
84 w = 256;
85 h = 256;
86 heightmap = new Channel(w, h);
87
88 tainted++;
89 }
90
91 /// <summary>
92 /// Converts the heightmap to a 65536 value 1D floating point array
93 /// </summary>
94 /// <returns>A float[65536] array containing the heightmap</returns>
95 public float[] getHeights1D()
96 {
97 float[] heights = new float[w * h];
98 int i;
99
100 for (i = 0; i < w * h; i++)
101 {
102 heights[i] = (float)heightmap.map[i / w, i % w];
103 }
104
105 return heights;
106 }
107
108 /// <summary>
109 /// Converts the heightmap to a 256x256 value 2D floating point array.
110 /// </summary>
111 /// <returns>An array of 256,256 values containing the heightmap</returns>
112 public float[,] getHeights2D()
113 {
114 float[,] heights = new float[w, h];
115 int x, y;
116 for (x = 0; x < w; x++)
117 {
118 for (y = 0; y < h; y++)
119 {
120 heights[x, y] = (float)heightmap.map[x, y];
121 }
122 }
123 return heights;
124 }
125
126 /// <summary>
127 /// Imports a 1D floating point array into the 2D heightmap array
128 /// </summary>
129 /// <param name="heights">The array to import (must have 65536 members)</param>
130 public void setHeights1D(float[] heights)
131 {
132 int i;
133 for (i = 0; i < w * h; i++)
134 {
135 heightmap.map[i / w, i % w] = heights[i];
136 }
137
138 tainted++;
139 }
140
141 /// <summary>
142 /// Loads a 2D array of values into the heightmap
143 /// </summary>
144 /// <param name="heights">An array of 256,256 float values</param>
145 public void setHeights2D(float[,] heights)
146 {
147 int x, y;
148 for (x = 0; x < w; x++)
149 {
150 for (y = 0; y < h; y++)
151 {
152 heightmap.set(x, y, (double)heights[x, y]);
153 }
154 }
155 tainted++;
156 }
157
158 /// <summary>
159 /// Swaps the two heightmap buffers (the 'revert map' and the heightmap)
160 /// </summary>
161 public void swapRevertMaps()
162 {
163 Channel backup = heightmap.copy();
164 heightmap = revertmap;
165 revertmap = backup;
166 }
167
168 /// <summary>
169 /// Saves the current heightmap into the revertmap
170 /// </summary>
171 public void saveRevertMap()
172 {
173 revertmap = heightmap.copy();
174 }
175
176 /// <summary>
177 /// Processes a terrain-specific command
178 /// </summary>
179 /// <param name="args">Commandline arguments (space seperated)</param>
180 /// <param name="resultText">Reference that returns error or help text if returning false</param>
181 /// <returns>If the operation was successful (if not, the error is placed into resultText)</returns>
182 public bool RunTerrainCmd(string[] args, ref string resultText, string simName)
183 {
184 string command = args[0];
185
186 try
187 {
188
189 switch (command)
190 {
191 case "help":
192 resultText += "terrain regenerate - rebuilds the sims terrain using a default algorithm\n";
193 resultText += "terrain voronoi <points> <blocksize> - generates a worley fractal with X points per block";
194 resultText += "terrain seed <seed> - sets the random seed value to <seed>\n";
195 resultText += "terrain load <type> <filename> - loads a terrain from disk, type can be 'F32', 'F64', 'RAW' or 'IMG'\n";
196 resultText += "terrain save <type> <filename> - saves a terrain to disk, type can be 'F32', 'F64', 'PNG', 'RAW' or 'HIRAW'\n";
197 resultText += "terrain save grdmap <filename> <gradient map> - creates a PNG snapshot of the region using a named gradient map\n";
198 resultText += "terrain rescale <min> <max> - rescales a terrain to be between <min> and <max> meters high\n";
199 resultText += "terrain erode aerobic <windspeed> <pickupmin> <dropmin> <carry> <rounds> <lowest>\n";
200 resultText += "terrain erode thermal <talus> <rounds> <carry>\n";
201 resultText += "terrain multiply <val> - multiplies a terrain by <val>\n";
202 resultText += "terrain revert - reverts the terrain to the stored original\n";
203 resultText += "terrain bake - saves the current terrain into the revert map\n";
204 resultText += "terrain csfilter <filename.cs> - loads a new filter from the specified .cs file\n";
205 resultText += "terrain jsfilter <filename.js> - loads a new filter from the specified .js file\n";
206 foreach (KeyValuePair<string, ITerrainFilter> filter in customFilters.filters)
207 {
208 resultText += filter.Value.Help();
209 }
210
211 return false;
212
213 case "revert":
214 swapRevertMaps();
215 saveRevertMap();
216 break;
217
218 case "bake":
219 saveRevertMap();
220 break;
221
222 case "seed":
223 setSeed(Convert.ToInt32(args[1]));
224 break;
225
226 case "erode":
227 return consoleErosion(args, ref resultText);
228
229 case "voronoi":
230 double[] c = new double[2];
231 c[0] = -1;
232 c[1] = 1;
233 heightmap.voronoiDiagram(Convert.ToInt32(args[1]), Convert.ToInt32(args[2]), c);
234 break;
235
236 case "hills":
237 return consoleHills(args, ref resultText);
238
239 case "regenerate":
240 hills();
241 break;
242
243 case "rescale":
244 setRange(Convert.ToSingle(args[1]), Convert.ToSingle(args[2]));
245 break;
246
247 case "multiply":
248 heightmap *= Convert.ToDouble(args[1]);
249 break;
250
251 case "load":
252 args[2].Replace("%name%", simName);
253 switch (args[1].ToLower())
254 {
255 case "f32":
256 loadFromFileF32(args[2]);
257 break;
258
259 case "f64":
260 loadFromFileF64(args[2]);
261 break;
262
263 case "raw":
264 loadFromFileSLRAW(args[2]);
265 break;
266
267 case "img":
268 heightmap.loadImage(args[2]);
269 return false;
270
271 default:
272 resultText = "Unknown image or data format";
273 return false;
274 }
275 break;
276
277 case "save":
278 args[2].Replace("%name%", simName);
279 switch (args[1].ToLower())
280 {
281 case "f32":
282 writeToFileF32(args[2]);
283 break;
284
285 case "f64":
286 writeToFileF64(args[2]);
287 break;
288
289 case "grdmap":
290 exportImage(args[2], args[3]);
291 break;
292
293 case "png":
294 heightmap.saveImage(args[2]);
295 break;
296
297 case "raw":
298 writeToFileRAW(args[2]);
299 break;
300
301 case "hiraw":
302 writeToFileHiRAW(args[2]);
303 break;
304
305 default:
306 resultText = "Unknown image or data format";
307 return false;
308 }
309 break;
310
311 case "csfilter":
312 customFilters.LoadFilterCSharp(args[1]);
313 break;
314 case "jsfilter":
315 customFilters.LoadFilterJScript(args[1]);
316 break;
317
318 default:
319 // Run any custom registered filters
320 if (customFilters.filters.ContainsKey(command))
321 {
322 customFilters.filters[command].Filter(heightmap, args);
323 break;
324 }
325 else
326 {
327 resultText = "Unknown terrain command";
328 return false;
329 }
330 }
331 return true;
332 }
333 catch (Exception e)
334 {
335 resultText = "Error running terrain command: " + e.ToString();
336 return false;
337 }
338 }
339
340 private bool consoleErosion(string[] args, ref string resultText)
341 {
342 switch (args[1].ToLower())
343 {
344 case "aerobic":
345 // WindSpeed, PickupMinimum,DropMinimum,Carry,Rounds,Lowest
346 heightmap.AerobicErosion(Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToInt32(args[6]), Convert.ToBoolean(args[7]));
347 break;
348 case "thermal":
349 heightmap.thermalWeathering(Convert.ToDouble(args[2]), Convert.ToInt32(args[3]), Convert.ToDouble(args[4]));
350 break;
351 default:
352 resultText = "Unknown erosion type";
353 return false;
354 }
355 return true;
356 }
357
358 private bool consoleHills(string[] args, ref string resultText)
359 {
360 int count;
361 double sizeMin;
362 double sizeRange;
363 bool island;
364 bool additive;
365 bool noisy;
366
367 if (args.GetLength(0) > 2)
368 {
369 count = Convert.ToInt32(args[2]);
370 sizeMin = Convert.ToDouble(args[3]);
371 sizeRange = Convert.ToDouble(args[4]);
372 island = Convert.ToBoolean(args[5]);
373 additive = Convert.ToBoolean(args[6]);
374 noisy = Convert.ToBoolean(args[7]);
375 }
376 else
377 {
378 count = 200;
379 sizeMin = 20;
380 sizeRange = 40;
381 island = true;
382 additive = true;
383 noisy = false;
384 }
385
386 switch (args[1].ToLower())
387 {
388 case "blocks":
389 heightmap.hillsBlocks(count, sizeMin, sizeRange, island, additive, noisy);
390 break;
391 case "cones":
392 heightmap.hillsCones(count, sizeMin, sizeRange, island, additive, noisy);
393 break;
394 case "spheres":
395 heightmap.hillsSpheres(count, sizeMin, sizeRange, island, additive, noisy);
396 break;
397 case "squared":
398 heightmap.hillsSquared(count, sizeMin, sizeRange, island, additive, noisy);
399 break;
400 default:
401 resultText = "Unknown hills type";
402 return false;
403 }
404 return true;
405 }
406
407 /// <summary>
408 /// Renormalises the array between min and max
409 /// </summary>
410 /// <param name="min">Minimum value of the new array</param>
411 /// <param name="max">Maximum value of the new array</param>
412 public void setRange(float min, float max)
413 {
414 heightmap.normalise((double)min, (double)max);
415 tainted++;
416 }
417
418 /// <summary>
419 /// Loads a file consisting of 256x256 doubles and imports it as an array into the map.
420 /// </summary>
421 /// <remarks>TODO: Move this to libTerrain itself</remarks>
422 /// <param name="filename">The filename of the double array to import</param>
423 public void loadFromFileF64(string filename)
424 {
425 FileInfo file = new FileInfo(filename);
426 FileStream s = file.Open(FileMode.Open, FileAccess.Read);
427 BinaryReader bs = new BinaryReader(s);
428 int x, y;
429 for (x = 0; x < w; x++)
430 {
431 for (y = 0; y < h; y++)
432 {
433 heightmap.map[x, y] = bs.ReadDouble();
434 }
435 }
436
437 bs.Close();
438 s.Close();
439
440 tainted++;
441 }
442
443 /// <summary>
444 /// Loads a file consisting of 256x256 floats and imports it as an array into the map.
445 /// </summary>
446 /// <remarks>TODO: Move this to libTerrain itself</remarks>
447 /// <param name="filename">The filename of the float array to import</param>
448 public void loadFromFileF32(string filename)
449 {
450 FileInfo file = new FileInfo(filename);
451 FileStream s = file.Open(FileMode.Open, FileAccess.Read);
452 BinaryReader bs = new BinaryReader(s);
453 int x, y;
454 for (x = 0; x < w; x++)
455 {
456 for (y = 0; y < h; y++)
457 {
458 heightmap.map[x, y] = (double)bs.ReadSingle();
459 }
460 }
461
462 bs.Close();
463 s.Close();
464
465 tainted++;
466 }
467
468 /// <summary>
469 /// Loads a file formatted in the SL .RAW Format used on the main grid
470 /// </summary>
471 /// <remarks>This file format stinks and is best avoided.</remarks>
472 /// <param name="filename">A path to the .RAW format</param>
473 public void loadFromFileSLRAW(string filename)
474 {
475 FileInfo file = new FileInfo(filename);
476 FileStream s = file.Open(FileMode.Open, FileAccess.Read);
477 BinaryReader bs = new BinaryReader(s);
478 int x, y;
479 for (x = 0; x < w; x++)
480 {
481 for (y = 0; y < h; y++)
482 {
483 heightmap.map[x, y] = (double)bs.ReadByte() * ((double)bs.ReadByte() / 127.0);
484 bs.ReadBytes(11); // Advance the stream to next bytes.
485 }
486 }
487
488 bs.Close();
489 s.Close();
490
491 tainted++;
492 }
493
494 /// <summary>
495 /// Writes the current terrain heightmap to disk, in the format of a 65536 entry double[] array.
496 /// </summary>
497 /// <param name="filename">The desired output filename</param>
498 public void writeToFileF64(string filename)
499 {
500 FileInfo file = new FileInfo(filename);
501 FileStream s = file.Open(FileMode.CreateNew, FileAccess.Write);
502 BinaryWriter bs = new BinaryWriter(s);
503
504 int x, y;
505 for (x = 0; x < w; x++)
506 {
507 for (y = 0; y < h; y++)
508 {
509 bs.Write(heightmap.get(x, y));
510 }
511 }
512
513 bs.Close();
514 s.Close();
515 }
516
517 /// <summary>
518 /// Writes the current terrain heightmap to disk, in the format of a 65536 entry float[] array
519 /// </summary>
520 /// <param name="filename">The desired output filename</param>
521 public void writeToFileF32(string filename)
522 {
523 FileInfo file = new FileInfo(filename);
524 FileStream s = file.Open(FileMode.CreateNew, FileAccess.Write);
525 BinaryWriter bs = new BinaryWriter(s);
526
527 int x, y;
528 for (x = 0; x < w; x++)
529 {
530 for (y = 0; y < h; y++)
531 {
532 bs.Write((float)heightmap.get(x, y));
533 }
534 }
535
536 bs.Close();
537 s.Close();
538 }
539
540 /// <summary>
541 /// A very fast LL-RAW file output mechanism - lower precision mechanism but wont take 5 minutes to run either.
542 /// (is also editable in an image application)
543 /// </summary>
544 /// <param name="filename">Filename to write to</param>
545 public void writeToFileRAW(string filename)
546 {
547 FileInfo file = new FileInfo(filename);
548 FileStream s = file.Open(FileMode.CreateNew, FileAccess.Write);
549 BinaryWriter bs = new BinaryWriter(s);
550
551 int x, y;
552
553 // Used for the 'green' channel.
554 byte avgMultiplier = (byte)heightmap.avg();
555 byte backupMultiplier = (byte)revertmap.avg();
556
557 // Limit the multiplier so it can represent points >64m.
558 if (avgMultiplier > 196)
559 avgMultiplier = 196;
560 if(backupMultiplier > 196)
561 backupMultiplier = 196;
562 // Make sure it's at least one to prevent a div by zero
563 if (avgMultiplier < 1)
564 avgMultiplier = 1;
565 if(backupMultiplier < 1)
566 backupMultiplier = 1;
567
568 for (x = 0; x < w; x++)
569 {
570 for (y = 0; y < h; y++)
571 {
572 byte red = (byte)(heightmap.get(x, y) / ((double)avgMultiplier / 128.0));
573 byte green = avgMultiplier;
574 byte blue = (byte)watermap.get(x, y);
575 byte alpha1 = 0; // Land Parcels
576 byte alpha2 = 0; // For Sale Land
577 byte alpha3 = 0; // Public Edit Object
578 byte alpha4 = 0; // Public Edit Land
579 byte alpha5 = 255; // Safe Land
580 byte alpha6 = 255; // Flying Allowed
581 byte alpha7 = 255; // Create Landmark
582 byte alpha8 = 255; // Outside Scripts
583 byte alpha9 = (byte)(revertmap.get(x, y) / ((double)backupMultiplier / 128.0));
584 byte alpha10 = backupMultiplier;
585
586 bs.Write(red);
587 bs.Write(green);
588 bs.Write(blue);
589 bs.Write(alpha1);
590 bs.Write(alpha2);
591 bs.Write(alpha3);
592 bs.Write(alpha4);
593 bs.Write(alpha5);
594 bs.Write(alpha6);
595 bs.Write(alpha7);
596 bs.Write(alpha8);
597 bs.Write(alpha9);
598 bs.Write(alpha10);
599 }
600 }
601 bs.Close();
602 s.Close();
603 }
604
605 /// <summary>
606 /// Outputs to a LL compatible RAW in the most efficient manner possible
607 /// </summary>
608 /// <remarks>Does not calculate the revert map</remarks>
609 /// <param name="filename">The filename to output to</param>
610 public void writeToFileHiRAW(string filename)
611 {
612 FileInfo file = new FileInfo(filename);
613 FileStream s = file.Open(FileMode.CreateNew, FileAccess.Write);
614 BinaryWriter bs = new BinaryWriter(s);
615
616 // Generate a smegging big lookup table to speed the operation up (it needs it)
617 double[] lookupTable = new double[65536];
618 int i, j, x, y;
619 for (i = 0; i < 256; i++)
620 {
621 for (j = 0; j < 256; j++)
622 {
623 lookupTable[i + (j * 256)] = ((double)i * ((double)j / 127.0));
624 }
625 }
626
627 // Output the calculated raw
628 for (x = 0; x < w; x++)
629 {
630 for (y = 0; y < h; y++)
631 {
632 double t = heightmap.get(x, y);
633 double min = double.MaxValue;
634 int index = 0;
635
636 for (i = 0; i < 65536; i++)
637 {
638 if (Math.Abs(t - lookupTable[i]) < min)
639 {
640 min = Math.Abs(t - lookupTable[i]);
641 index = i;
642 }
643 }
644
645 byte red = (byte)(index & 0xFF);
646 byte green = (byte)((index >> 8) & 0xFF);
647 byte blue = (byte)watermap.get(x, y);
648 byte alpha1 = 0; // Land Parcels
649 byte alpha2 = 0; // For Sale Land
650 byte alpha3 = 0; // Public Edit Object
651 byte alpha4 = 0; // Public Edit Land
652 byte alpha5 = 255; // Safe Land
653 byte alpha6 = 255; // Flying Allowed
654 byte alpha7 = 255; // Create Landmark
655 byte alpha8 = 255; // Outside Scripts
656 byte alpha9 = red;
657 byte alpha10 = green;
658
659 bs.Write(red);
660 bs.Write(green);
661 bs.Write(blue);
662 bs.Write(alpha1);
663 bs.Write(alpha2);
664 bs.Write(alpha3);
665 bs.Write(alpha4);
666 bs.Write(alpha5);
667 bs.Write(alpha6);
668 bs.Write(alpha7);
669 bs.Write(alpha8);
670 bs.Write(alpha9);
671 bs.Write(alpha10);
672 }
673 }
674
675 bs.Close();
676 s.Close();
677 }
678
679 /// <summary>
680 /// Sets the random seed to be used by procedural functions which involve random numbers.
681 /// </summary>
682 /// <param name="val">The desired seed</param>
683 public void setSeed(int val)
684 {
685 heightmap.seed = val;
686 }
687
688 /// <summary>
689 /// Raises land in a sphere around the specified coordinates
690 /// </summary>
691 /// <param name="rx">Center of the sphere on the X axis</param>
692 /// <param name="ry">Center of the sphere on the Y axis</param>
693 /// <param name="size">The radius of the sphere</param>
694 /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param>
695 public void raise(double rx, double ry, double size, double amount)
696 {
697 lock (heightmap)
698 {
699 heightmap.raise(rx, ry, size, amount);
700 }
701
702 tainted++;
703 }
704
705 /// <summary>
706 /// Lowers the land in a sphere around the specified coordinates
707 /// </summary>
708 /// <param name="rx">The center of the sphere at the X axis</param>
709 /// <param name="ry">The center of the sphere at the Y axis</param>
710 /// <param name="size">The radius of the sphere in meters</param>
711 /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param>
712 public void lower(double rx, double ry, double size, double amount)
713 {
714 lock (heightmap)
715 {
716 heightmap.lower(rx, ry, size, amount);
717 }
718
719 tainted++;
720 }
721
722 /// <summary>
723 /// Flattens the land under the brush of specified coordinates (spherical mask)
724 /// </summary>
725 /// <param name="rx">Center of sphere</param>
726 /// <param name="ry">Center of sphere</param>
727 /// <param name="size">Radius of the sphere</param>
728 /// <param name="amount">Thickness of the mask (0..2 recommended)</param>
729 public void flatten(double rx, double ry, double size, double amount)
730 {
731 lock (heightmap)
732 {
733 heightmap.flatten(rx, ry, size, amount);
734 }
735
736 tainted++;
737 }
738
739 /// <summary>
740 /// Creates noise within the specified bounds
741 /// </summary>
742 /// <param name="rx">Center of the bounding sphere</param>
743 /// <param name="ry">Center of the bounding sphere</param>
744 /// <param name="size">The radius of the sphere</param>
745 /// <param name="amount">Strength of the mask (0..2) recommended</param>
746 public void noise(double rx, double ry, double size, double amount)
747 {
748 lock (heightmap)
749 {
750 Channel smoothed = new Channel();
751 smoothed.noise();
752
753 Channel mask = new Channel();
754 mask.raise(rx, ry, size, amount);
755
756 heightmap.blend(smoothed, mask);
757 }
758
759 tainted++;
760 }
761
762 /// <summary>
763 /// Reverts land within the specified bounds
764 /// </summary>
765 /// <param name="rx">Center of the bounding sphere</param>
766 /// <param name="ry">Center of the bounding sphere</param>
767 /// <param name="size">The radius of the sphere</param>
768 /// <param name="amount">Strength of the mask (0..2) recommended</param>
769 public void revert(double rx, double ry, double size, double amount)
770 {
771 lock (heightmap)
772 {
773 Channel mask = new Channel();
774 mask.raise(rx, ry, size, amount);
775
776 heightmap.blend(revertmap, mask);
777 }
778
779 tainted++;
780 }
781
782 /// <summary>
783 /// Smooths land under the brush of specified coordinates (spherical mask)
784 /// </summary>
785 /// <param name="rx">Center of the sphere</param>
786 /// <param name="ry">Center of the sphere</param>
787 /// <param name="size">Radius of the sphere</param>
788 /// <param name="amount">Thickness of the mask (0..2 recommended)</param>
789 public void smooth(double rx, double ry, double size, double amount)
790 {
791 lock (heightmap)
792 {
793 Channel smoothed = heightmap.copy();
794 smoothed.smooth(amount);
795
796 Channel mask = new Channel();
797 mask.raise(rx,ry,size,amount);
798
799 heightmap.blend(smoothed, mask);
800 }
801
802 tainted++;
803 }
804
805 /// <summary>
806 /// Generates a simple set of hills in the shape of an island
807 /// </summary>
808 public void hills()
809 {
810 lock (heightmap)
811 {
812 heightmap.hillsSpheres(200, 20, 40, true, true, false);
813 heightmap.normalise();
814 heightmap *= 60.0; // Raise to 60m
815 }
816
817 tainted++;
818 }
819
820 /// <summary>
821 /// Wrapper to heightmap.get()
822 /// </summary>
823 /// <param name="x">X coord</param>
824 /// <param name="y">Y coord</param>
825 /// <returns>Height at specified coordinates</returns>
826 public double get(int x, int y)
827 {
828 return heightmap.get(x, y);
829 }
830
831 /// <summary>
832 /// Multiplies the heightfield by val
833 /// </summary>
834 /// <param name="meep">The heightfield</param>
835 /// <param name="val">The multiplier</param>
836 /// <returns></returns>
837 public static TerrainEngine operator *(TerrainEngine meep, Double val)
838 {
839 meep.heightmap *= val;
840 meep.tainted++;
841 return meep;
842 }
843
844 /// <summary>
845 /// Exports the current heightmap to a PNG file
846 /// </summary>
847 /// <param name="filename">The destination filename for the image</param>
848 /// <param name="gradientmap">A 1x*height* image which contains the colour gradient to export with. Must be at least 1x2 pixels, 1x256 or more is ideal.</param>
849 public void exportImage(string filename, string gradientmap)
850 {
851 try
852 {
853 Bitmap gradientmapLd = new Bitmap(gradientmap);
854
855 int pallete = gradientmapLd.Height;
856
857 Bitmap bmp = new Bitmap(heightmap.w, heightmap.h);
858 Color[] colours = new Color[pallete];
859
860 for (int i = 0; i < pallete; i++)
861 {
862 colours[i] = gradientmapLd.GetPixel(0, i);
863 }
864
865 Channel copy = heightmap.copy();
866 for (int x = 0; x < copy.w; x++)
867 {
868 for (int y = 0; y < copy.h; y++)
869 {
870 // 512 is the largest possible height before colours clamp
871 int colorindex = (int)(Math.Max(Math.Min(1.0, copy.get(x, y) / 512.0), 0.0) * pallete);
872 bmp.SetPixel(x, y, colours[colorindex]);
873 }
874 }
875
876 bmp.Save(filename, ImageFormat.Png);
877 }
878 catch (Exception e)
879 {
880 Console.WriteLine("Failed generating terrain map: " + e.ToString());
881 }
882 }
883
884 /// <summary>
885 /// Exports the current heightmap in Jpeg2000 format to a byte[]
886 /// </summary>
887 /// <param name="gradientmap">A 1x*height* image which contains the colour gradient to export with. Must be at least 1x2 pixels, 1x256 or more is ideal.</param>
888 public byte[] exportJpegImage(string gradientmap)
889 {
890 byte[] imageData = null;
891 try
892 {
893 Bitmap gradientmapLd = new Bitmap(gradientmap);
894
895 int pallete = gradientmapLd.Height;
896
897 Bitmap bmp = new Bitmap(heightmap.w, heightmap.h);
898 Color[] colours = new Color[pallete];
899
900 for (int i = 0; i < pallete; i++)
901 {
902 colours[i] = gradientmapLd.GetPixel(0, i);
903 }
904
905 Channel copy = heightmap.copy();
906 for (int x = 0; x < copy.w; x++)
907 {
908 for (int y = 0; y < copy.h; y++)
909 {
910 // 512 is the largest possible height before colours clamp
911 int colorindex = (int)(Math.Max(Math.Min(1.0, copy.get(copy.h - y, x) / 512.0), 0.0) * pallete);
912 bmp.SetPixel(x, y, colours[colorindex]);
913 }
914 }
915
916 //bmp.Save(filename, System.Drawing.Imaging.ImageFormat.Png);
917 imageData = OpenJPEG.EncodeFromImage(bmp, "map");
918
919 }
920 catch (Exception e)
921 {
922 Console.WriteLine("Failed generating terrain map: " + e.ToString());
923 }
924
925 return imageData;
926 }
927 }
928} \ No newline at end of file
diff --git a/OpenSim/Region/Terrain.BasicTerrain/TerrainFilter.cs b/OpenSim/Region/Terrain.BasicTerrain/TerrainFilter.cs
new file mode 100644
index 0000000..a38be07
--- /dev/null
+++ b/OpenSim/Region/Terrain.BasicTerrain/TerrainFilter.cs
@@ -0,0 +1,126 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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.CodeDom.Compiler;
30using System.Collections.Generic;
31using libTerrain;
32using Microsoft.CSharp;
33using Microsoft.JScript;
34
35namespace OpenSim.Region.Terrain
36{
37 public interface ITerrainFilter
38 {
39 void Filter(Channel heightmap, string[] args);
40 string Register();
41 string Help();
42 }
43
44 public class TestFilter : ITerrainFilter
45 {
46 public void Filter(Channel heightmap, string[] args)
47 {
48 Console.WriteLine("Hello world");
49 }
50
51 public string Register()
52 {
53 return "demofilter";
54 }
55
56 public string Help()
57 {
58 return "demofilter - Does nothing";
59 }
60 }
61
62 public class FilterHost
63 {
64 public Dictionary<string, ITerrainFilter> filters = new Dictionary<string, ITerrainFilter>();
65
66 private void LoadFilter(CodeDomProvider compiler, string filename)
67 {
68 CompilerParameters compilerParams = new CompilerParameters();
69 CompilerResults compilerResults;
70 compilerParams.GenerateExecutable = false;
71 compilerParams.GenerateInMemory = true;
72 compilerParams.IncludeDebugInformation = false;
73 compilerParams.ReferencedAssemblies.Add("libTerrain-BSD.dll");
74 compilerParams.ReferencedAssemblies.Add("OpenSim.Terrain.BasicTerrain.dll");
75 compilerParams.ReferencedAssemblies.Add("System.dll");
76
77 compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename);
78
79 if (compilerResults.Errors.Count > 0)
80 {
81 Console.WriteLine("Compile errors:");
82 foreach (CompilerError error in compilerResults.Errors)
83 {
84 Console.WriteLine(error.Line.ToString() + ": " + error.ErrorText.ToString());
85 }
86 }
87 else
88 {
89 foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes())
90 {
91 Type testInterface = pluginType.GetInterface("ITerrainFilter",true);
92
93 if (testInterface != null)
94 {
95 ITerrainFilter filter = (ITerrainFilter)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString());
96
97 string filterName = filter.Register();
98 Console.WriteLine("Plugin: " + filterName + " loaded.");
99
100 if (!filters.ContainsKey(filterName))
101 {
102 filters.Add(filterName, filter);
103 }
104 else
105 {
106 filters[filterName] = filter;
107 }
108 }
109 }
110 }
111
112 }
113
114 public void LoadFilterCSharp(string filename)
115 {
116 CSharpCodeProvider compiler = new CSharpCodeProvider();
117 LoadFilter(compiler, filename);
118 }
119
120 public void LoadFilterJScript(string filename)
121 {
122 JScriptCodeProvider compiler = new JScriptCodeProvider();
123 LoadFilter(compiler, filename);
124 }
125 }
126}
diff --git a/Prebuild/README b/Prebuild/README
new file mode 100644
index 0000000..eca6be1
--- /dev/null
+++ b/Prebuild/README
@@ -0,0 +1,230 @@
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 project and make files or you can execute the included batch (*.bat) and Unix Shell script (*.sh) files.
9The Prebuild file
10
11_________________________________________________________________________________
12The currently supported developement tools and their associated batch and shell script files.
13
14Visual Studio .NET 2005 (VS2005.bat)
15Visual Studio .NET 2003 (VS2003.bat)
16Visual Studio .NET 2002 (VS2002.bat)
17SharpDevelop (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
18SharpDevelop2 (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
19MonoDevelop (MonoDevelop.sh) - http://www.monodevelop.com/
20NAnt (nant.sh and nant.bat) - http://nant.sourceforge.net/
21Autotools (autotools.bat and autotools.sh) http://www.gnu.org. Only partial support
22
23Notes:
24A Unix Shell script is provided for MonoDevelop, as this is more appropriate than a windows batch file.
25Visual Studio .NET 2005 and the Visual Express IDE's can import solutions from older versions of Visual Studio .NET.
26Makefiles are not currently supported.
27
28_________________________________________________________________________________
29Command Line Syntax:
30
31Example:
32>Prebuild /target vs2003
33
34This will generate the project files for Visual Studio.NET 2003 and place the redirect the log to a file named PrebuildLog.txt in the parent directory
35
36
37The syntax structure is as below, where commandParameter is optional depending on the command and you can provide several option-value pairs.
38Note: The '>' signified the command line, do not actually enter this manually
39
40>Prebuild /<option> <commandParameter>
41
42>Prebuild /target vs2003 /pause
43
44>Prebuild /target vs2003 /log ../Log.txt /pause /ppo /file ProjectConfig.xml
45
46>Prebuild /target sharpdev /log
47
48>Prebuild /removedir obj|bin
49
50>Prebuild /target vs2003 /allowedgroups Group1|Group2
51
52>Prebuild /clean
53
54>Prebuild /clean /yes
55
56>Prebuild /clean vs2003
57
58_________________________________________________________________________________
59Command Line Options:
60
61/usage - Shows the help information on how to use Prebuild and what the different options are and what they do
62
63/clean - The project files generated for the target type specified as a parameter for this option will be deleted. If no value is specified or if 'all' is specified, then project files for all the target types will be deleted.
64
65/target - Specified the name of the development tool for which project or make files will be generated. Possible parameter values include: vs2003, vs2002, sharpdev
66
67/file - Specifies the name of the XML which defines what files are to be referenced by the generated project files as well as configures the options for them. If not specified, prebuild.xml will be used as the default.
68
69/log - Specified the log file that should be written to for build errors. If this option is not specified, no log file is generated, but if just no value is specified, then the defaul filename will be used for the log (Prebuild.log).
70
71/ppo - Preprocesses the xml file to test for syntax errors or problems but doesn't generate the files
72
73/pause - Shows the console until you press a key so that you can view the messages written while performing the specified actions.
74This allows you to check if an errors occurred and - if so - what it was.
75
76/showtargets - Shows a list of all the targets that can be specified as values for the /clean and /target commands.
77
78/allowedgroups - This is 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
79
80/removedir - This is followed by a pipe-delimited list of directory names that will be deleted while recursivly searching the directory of the prebuild application and its child directories (eg. use obj|bin to delete all output and temporary directories before file releases)
81
82/yes - Answer yes to any warnings (e.g. when cleaning all projects).
83
84_________________________________________________________________________________
85Example Batch Files and Shell Scripts
86
87NOTE: Common batch and shell script files are included with Prebuild source and file releases.
88______________________________
89MonoDevelop
90
91#!/bin/sh
92# Generates a combine (.cmbx) and a set of project files (.prjx)
93# for MonoDevelop, a Mono port of SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx)
94./Prebuild /target sharpdev /pause
95
96______________________________
97Visual Studio .NET 2003
98
99@rem Generates a solution (.sln) and a set of project files (.csproj)
100@rem for Microsoft Visual Studio .NET 2002
101Prebuild /target vs2003 /pause
102
103Notes:
104Text after lines that start with @rem are comments and are not evaluated
105You can also place pause on the last line instead of specifing the /pause command.
106
107________________________________________________________________________________
108Example XML Configuration File
109
110Note:
111XML Comments (<!-- Comment -->) are used to markup the prebuild.xml file with notes
112The below file may be out-of-date, however the RealmForge Prebuild file serves as an up-to-date and extensive example.
113It can be viewed using Tigris.org's WebSVN (http://realmforge.tigris.org/source/browse/realmforge/trunk/src/prebuild.xml) by just clicking on the "view file" link for the latest revision.
114
115_________________________________
116
117<?xml version="1.0" encoding="utf-8"?>
118 <!--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. -->
119<Prebuild version="1.6" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
120 <Solution name="RealmForge"> <!--The title and file name for the solution, combine, workspace, or project group (depending on what development tool you are using)-->
121 <!--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.-->
122 <Configuration name="Debug">
123 <Options>
124 <!-- 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 -->
125 <?if OS = "Win32" ?>
126 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
127 <?else ?>
128 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
129 <?endif ?>
130 <OptimizeCode>false</OptimizeCode>
131 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
132 <AllowUnsafe>false</AllowUnsafe>
133 <WarningLevel>4</WarningLevel>
134 <!-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).-->
135
136 <WarningsAsErrors>false</WarningsAsErrors>
137 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
138 <!-- 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)-->
139
140 <OutputPath>..\bin</OutputPath>
141 <DebugInformation>true</DebugInformation>
142 <RegisterComInterop>false</RegisterComInterop>
143 <IncrementalBuild>true</IncrementalBuild>
144 <BaseAddress>285212672</BaseAddress>
145 <FileAlignment>4096</FileAlignment>
146 <NoStdLib>false</NoStdLib>
147 <XmlDocFile>Docs.xml</XmlDocFile>
148 </Options>
149 </Configuration>
150 <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 -->
151 <Options>
152 <CompilerDefines>TRACE</CompilerDefines>
153 <OptimizeCode>true</OptimizeCode>
154 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
155 <AllowUnsafe>false</AllowUnsafe>
156 <WarningLevel>4</WarningLevel>
157 <WarningsAsErrors>false</WarningsAsErrors>
158 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
159 <OutputPath>..\bin</OutputPath>
160 <DebugInformation>false</DebugInformation>
161 <RegisterComInterop>false</RegisterComInterop>
162 <IncrementalBuild>true</IncrementalBuild>
163 <BaseAddress>285212672</BaseAddress>
164 <FileAlignment>4096</FileAlignment>
165 <NoStdLib>false</NoStdLib>
166 <GenerateXmlDocFile>true</GenerateXmlDocFile>
167 <XmlDocFile>Docs.xml</XmlDocFile>
168 </Options>
169 </Configuration>
170
171 <!-- One of the projects that is included in the Solution -->
172 <Project name="RealmForge.Utility" Language="VisualBasic" path="Utility" type="Library" assemblyName="RealmForge.Utility" rootNamespace="RealmForge">
173 <Configuration name="Debug">
174 <Options>
175 <OutputPath>..\bin\lib\Utility</OutputPath>
176 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
177 </Options>
178 </Configuration>
179 <Configuration name="Release">
180 <Options>
181 <OutputPath>..\bin\lib\Utility</OutputPath>
182 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
183 </Options>
184 </Configuration>
185 <ReferencePath>../bin</ReferencePath>
186 <Reference name="System"/>
187 <Reference name="System.Data"/>
188 <Reference name="System.Drawing"/>
189 <Reference name="System.Xml"/>
190 <Reference name="System.Runtime.Serialization.Formatters.Soap"/>
191 <Reference name="ICSharpCode.SharpZipLib"/>
192 <Files>
193 <Match path="." pattern="*.vb" recurse="true"/>
194 </Files>
195 </Project>
196
197 <!-- Another projects that is included in the Solution -->
198 <Project name="DemoGame" Language="C#" path="DemoGame" type="WinExe" icon="..\bin\RealmForge.ico" assemblyName="DemoGame" rootNamespace="RealmForge">
199 <!-- 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 -->
200 <!--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-->
201
202 <Configuration name="Debug">
203 <Options>
204 <OutputPath>..\bin</OutputPath>
205 <XmlDocFile>DemoGame.xml</XmlDocFile>
206 </Options>
207 </Configuration>
208 <Configuration name="Release">
209 <Options>
210 <OutputPath>..\bin</OutputPath>
211 <XmlDocFile>DemoGame.xml</XmlDocFile>
212 </Options>
213 </Configuration>
214 <ReferencePath>../bin</ReferencePath>
215 <Reference name="System"/> <!-- Assemblies that are located in the GAC (installed, global) can be referenced-->
216 <Reference name="ode"/> <!-- Assemblies that are located in the output directory to which the file is built can be referenced -->
217 <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-->
218 <Files>
219 <Match path="." pattern="*.cs" recurse="true"/>
220 <Match path="." pattern="*.bmp" recurse="true" buildAction="EmbeddedResource"/>
221 <Match path="." pattern="[^a]*\.(png|jpg)" useRegex="true" buildAction="EmbeddedResource"/>
222
223 <!-- 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.-->
224 <!--EmbeddedResource, Content, and Compile are valid buildAction's-->
225 </Files>
226 </Project>
227
228 </Solution>
229</Prebuild>
230
diff --git a/Prebuild/TODO b/Prebuild/TODO
new file mode 100644
index 0000000..d01780a
--- /dev/null
+++ b/Prebuild/TODO
@@ -0,0 +1,21 @@
1* monodev target should be able to detect whether the project is 1.x
2 or 2.x runtime
3
4* make an autotools install target for .exe files
5
6* Fix the autotools target so that
7
8if(numProjects == 1){
9 for($projectDir){
10 generate_a_project_configure_dot_ac()
11 }
12}else{
13 generate_a_solution_configure_dot_ac()
14
15 foreach($project in $projectsList){
16 mkdir $project/
17 cd $project/
18 generate_a_project_configure_dot_ac
19 }
20}
21
diff --git a/Prebuild/doc/prebuild-example1.xml b/Prebuild/doc/prebuild-example1.xml
new file mode 100644
index 0000000..ea6f455
--- /dev/null
+++ b/Prebuild/doc/prebuild-example1.xml
@@ -0,0 +1,300 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Prebuild version="1.6" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
3 <Solution name="RealmForge">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>TRACE;DEBUG</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
9 <AllowUnsafe>false</AllowUnsafe>
10 <WarningLevel>4</WarningLevel>
11 <WarningsAsErrors>false</WarningsAsErrors>
12 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
13 <OutputPath>..\bin</OutputPath>
14 <DebugInformation>true</DebugInformation>
15 <RegisterComInterop>false</RegisterComInterop>
16 <IncrementalBuild>true</IncrementalBuild>
17 <BaseAddress>285212672</BaseAddress>
18 <FileAlignment>4096</FileAlignment>
19 <NoStdLib>false</NoStdLib>
20 <XmlDocFile>Docs.xml</XmlDocFile>
21 </Options>
22 </Configuration>
23 <Configuration name="Release">
24 <Options>
25 <CompilerDefines>TRACE</CompilerDefines>
26 <OptimizeCode>true</OptimizeCode>
27 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
28 <AllowUnsafe>false</AllowUnsafe>
29 <WarningLevel>4</WarningLevel>
30 <WarningsAsErrors>false</WarningsAsErrors>
31 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
32 <OutputPath>..\bin</OutputPath>
33 <DebugInformation>false</DebugInformation>
34 <RegisterComInterop>false</RegisterComInterop>
35 <IncrementalBuild>true</IncrementalBuild>
36 <BaseAddress>285212672</BaseAddress>
37 <FileAlignment>4096</FileAlignment>
38 <NoStdLib>false</NoStdLib>
39 <XmlDocFile>Docs.xml</XmlDocFile>
40 </Options>
41 </Configuration>
42
43 <Project name="RealmForge.Utility" path="Utility" type="Library" assemblyName="RealmForge.Utility" rootNamespace="RealmForge">
44 <Configuration name="Debug">
45 <Options>
46 <OutputPath>..\bin\lib\Utility</OutputPath>
47 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
48 </Options>
49 </Configuration>
50 <Configuration name="Release">
51 <Options>
52 <OutputPath>..\bin\lib\Utility</OutputPath>
53 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
54 </Options>
55 </Configuration>
56 <ReferencePath>../bin</ReferencePath>
57 <Reference name="System"/>
58 <Reference name="System.Data"/>
59 <Reference name="System.Drawing"/>
60 <Reference name="System.Xml"/>
61 <Reference name="System.Runtime.Serialization.Formatters.Soap"/>
62 <Reference name="ICSharpCode.SharpZipLib"/>
63 <Files>
64 <Match pattern="*.cs" recurse="true"/>
65 </Files>
66 </Project>
67
68 <Project name="RealmForge.Framework" path="Framework" type="Library" assemblyName="RealmForge.Framework" rootNamespace="RealmForge">
69 <Configuration name="Debug">
70 <Options>
71 <OutputPath>..\bin\lib\Framework</OutputPath>
72 <XmlDocFile>RealmForge.Framework.xml</XmlDocFile>
73 </Options>
74 </Configuration>
75 <Configuration name="Release">
76 <Options>
77 <OutputPath>..\bin\lib\Framework</OutputPath>
78 <XmlDocFile>RealmForge.Framework.xml</XmlDocFile>
79 </Options>
80 </Configuration>
81 <ReferencePath>../bin</ReferencePath>
82 <Reference name="System"/>
83 <Reference name="System.Data"/>
84 <Reference name="System.Xml"/>
85 <Reference name="System.Windows.Forms"/>
86 <Reference name="System.Drawing"/>
87 <Reference name="Axiom.MathLib"/>
88 <Reference name="RealmForge.Utility"/>
89 <Reference name="Tao.OpenAl"/>
90 <Reference name="ICSharpCode.SharpZipLib"/>
91 <Reference name="csogg"/>
92 <Reference name="csvorbis"/>
93 <Files>
94 <Match pattern="*.cs" recurse="true"/>
95 <Match pattern="*.txt" recurse="true"/>
96 </Files>
97 </Project>
98
99 <Project name="RealmForge.Genres" path="Genres" type="Library" assemblyName="RealmForge.Genres" rootNamespace="RealmForge">
100 <Configuration name="Debug">
101 <Options>
102 <OutputPath>..\bin\lib\Genres</OutputPath>
103 <XmlDocFile>RealmForge.Genres.xml</XmlDocFile>
104 </Options>
105 </Configuration>
106 <Configuration name="Release">
107 <Options>
108 <OutputPath>..\bin\lib\Genres</OutputPath>
109 <XmlDocFile>RealmForge.Genres.xml</XmlDocFile>
110 </Options>
111 </Configuration>
112 <ReferencePath>../bin</ReferencePath>
113 <Reference name="System"/>
114 <Reference name="System.Data"/>
115 <Reference name="System.Xml"/>
116 <Reference name="System.Windows.Forms"/>
117 <Reference name="System.Drawing"/>
118 <Reference name="Axiom.MathLib"/>
119 <Reference name="RealmForge.Utility"/>
120 <Reference name="RealmForge.Framework"/>
121 <Files>
122 <Match pattern="*.cs" recurse="true"/>
123 </Files>
124 </Project>
125
126 <Project name="RealmForge.UI.Forms" path="Forms" type="Library" assemblyName="RealmForge.UI.Forms" rootNamespace="RealmForge">
127 <Configuration name="Debug">
128 <Options>
129 <OutputPath>..\bin\lib\Forms</OutputPath>
130 <XmlDocFile>RealmForge.UI.Forms.xml</XmlDocFile>
131 <AllowUnsafe>true</AllowUnsafe>
132 </Options>
133 </Configuration>
134 <Configuration name="Release">
135 <Options>
136 <OutputPath>..\bin\lib\Forms</OutputPath>
137 <XmlDocFile>RealmForge.UI.Forms.xml</XmlDocFile>
138 <AllowUnsafe>true</AllowUnsafe>
139 </Options>
140 </Configuration>
141 <ReferencePath>../bin</ReferencePath>
142 <Reference name="System"/>
143 <Reference name="System.Drawing"/>
144 <Reference name="System.Data"/>
145 <Reference name="System.Design"/>
146 <Reference name="System.Windows.Forms"/>
147 <Reference name="System.Xml"/>
148 <Reference name="Axiom.MathLib"/>
149 <Reference name="wx.NET"/>
150 <Reference name="RealmForge.Framework"/>
151 <Reference name="RealmForge.Utility"/>
152 <Files>
153 <File buildAction="EmbeddedResource">IDE\Resources\ImagesCaptionIDE.bmp</File>
154 <File buildAction="EmbeddedResource">IDE\Resources\ImagesCaptionPlain.bmp</File>
155 <File buildAction="EmbeddedResource">IDE\Resources\ImagesMenuControl.bmp</File>
156 <File buildAction="EmbeddedResource">IDE\Resources\ImagesPopupMenu.bmp</File>
157 <File buildAction="EmbeddedResource">IDE\Resources\ImagesTabbedGroups.bmp</File>
158 <File buildAction="EmbeddedResource">IDE\Resources\ImagesTabControl.bmp</File>
159 <File buildAction="EmbeddedResource">IDE\Resources\LibraryIcon.ico</File>
160 <File buildAction="EmbeddedResource">IDE\Resources\TabbedInvalid.cur</File>
161 <File buildAction="EmbeddedResource">IDE\Resources\TabbedValid.cur</File>
162 <File buildAction="EmbeddedResource">IDE\Resources\WizardPicture.bmp</File>
163 <File buildAction="EmbeddedResource">Controls\Trees\tv_minus.bmp</File>
164 <File buildAction="EmbeddedResource">Controls\Trees\tv_plus.bmp</File>
165 <File buildAction="EmbeddedResource">Controls\Trees\treeview.bmp</File>
166 <File buildAction="EmbeddedResource">Controls\Trees\listview.bmp</File>
167 <File buildAction="EmbeddedResource">IDE\Menus\MenuControl.bmp</File>
168 <File buildAction="EmbeddedResource">IDE\Controls\InertButton.bmp</File>
169 <File buildAction="EmbeddedResource">IDE\Controls\TabbedGroups.bmp</File>
170 <File buildAction="EmbeddedResource">IDE\Controls\TabCOntrol.bmp</File>
171 <File buildAction="EmbeddedResource">IDE\Controls\WizardControl.bmp</File>
172 <File buildAction="EmbeddedResource">Forms\IDETest.resx</File>
173 <File buildAction="EmbeddedResource">Forms\IDEWindow.resx</File>
174 <File buildAction="EmbeddedResource">Forms\Launcher.resx</File>
175 <File buildAction="EmbeddedResource">Forms\MainRenderFrame.resx</File>
176 <Match pattern="*.cs" recurse="true"/>
177 </Files>
178 </Project>
179
180 <Project name="RealmForge.RAGE" path="RAGE" type="Library" assemblyName="RealmForge.RAGE" rootNamespace="RealmForge">
181 <Configuration name="Debug">
182 <Options>
183 <OutputPath>..\bin\lib\RAGE</OutputPath>
184 <XmlDocFile>RealmForge.RAGE.xml</XmlDocFile>
185 </Options>
186 </Configuration>
187 <Configuration name="Release">
188 <Options>
189 <OutputPath>..\bin\lib\RAGE</OutputPath>
190 <XmlDocFile>RealmForge.RAGE.xml</XmlDocFile>
191 </Options>
192 </Configuration>
193 <ReferencePath>../bin</ReferencePath>
194 <ReferencePath>../bin</ReferencePath>
195 <Reference name="System"/>
196 <Reference name="System.XML"/>
197 <Reference name="System.Windows.Forms"/>
198 <Reference name="System.Drawing"/>
199 <Reference name="Axiom.Plugins.CgProgramManager"/>
200 <Reference name="Axiom.Engine"/>
201 <Reference name="Axiom.MathLib"/>
202 <Reference name="Axiom.Plugins.ParticleFX"/>
203 <Reference name="Axiom.Platforms.Win32"/>
204 <Reference name="Axiom.RenderSystems.DirectX9"/>
205 <Reference localCopy="false" name="Axiom.RenderSystems.OpenGL"/>
206 <Reference name="Axiom.SceneManagers.Octree"/>
207 <Reference name="ICSharpCode.SharpZipLib"/>
208 <Reference name="System.Data"/>
209 <Reference name="RealmForge.Framework"/>
210 <Reference name="RealmForge.Utility"/>
211 <Reference name="ode"/>
212 <Files>
213 <Match pattern="*.cs" recurse="true"/>
214 </Files>
215 </Project>
216
217
218 <Project name="RealmForge.ScriptLibrary" path="ScriptLibrary" type="Library" assemblyName="RealmForge.ScriptLibrary" rootNamespace="RSL">
219 <Configuration name="Debug">
220 <Options>
221 <OutputPath>..\bin\ScriptLibrary</OutputPath>
222 <XmlDocFile>RealmForge.ScriptLibrary.xml</XmlDocFile>
223 </Options>
224 </Configuration>
225 <Configuration name="Release">
226 <Options>
227 <OutputPath>..\bin\ScriptLibrary</OutputPath>
228 <XmlDocFile>RealmForge.ScriptLibrary.xml</XmlDocFile>
229 </Options>
230 </Configuration>
231 <ReferencePath>../bin</ReferencePath>
232 <Reference name="System"/>
233 <Reference name="System.XML"/>
234 <Reference name="System.Windows.Forms"/>
235 <Reference name="System.Drawing"/>
236 <Reference name="Axiom.MathLib"/>
237 <Reference name="wx.NET"/>
238 <Reference name="RealmForge.UI.Forms"/>
239 <Reference name="RealmForge.RAGE"/>
240 <Reference name="RealmForge.Framework"/>
241 <Reference name="RealmForge.Utility"/>
242 <Files>
243 <Match pattern="*.cs" recurse="true"/>
244 </Files>
245 </Project>
246
247
248 <Project name="Updater" path="Updater" type="WinExe" icon="..\bin\Updater.ico" assemblyName="Updater" rootNamespace="RealmForge">
249 <Configuration name="Debug">
250 <Options>
251 <OutputPath>..\bin\lib\Updater</OutputPath>
252 <XmlDocFile>Updater.xml</XmlDocFile>
253 </Options>
254 </Configuration>
255 <Configuration name="Release">
256 <Options>
257 <OutputPath>..\bin\lib\Updater</OutputPath>
258 <XmlDocFile>Updater.xml</XmlDocFile>
259 </Options>
260 </Configuration>
261 <ReferencePath>../bin</ReferencePath>
262 <Reference name="System"/>
263 <Reference name="RealmForge.UI.Forms"/>
264 <Reference name="RealmForge.Framework"/>
265 <Reference name="RealmForge.Utility"/>
266 <Files>
267 <Match pattern="*.cs" recurse="true"/>
268 </Files>
269 </Project>
270
271
272 <Project name="DemoGame" path="DemoGame" type="WinExe" icon="..\bin\RealmForge.ico" assemblyName="DemoGame" rootNamespace="RealmForge">
273 <Configuration name="Debug">
274 <Options>
275 <OutputPath>..\bin</OutputPath>
276 <XmlDocFile>DemoGame.xml</XmlDocFile>
277 </Options>
278 </Configuration>
279 <Configuration name="Release">
280 <Options>
281 <OutputPath>..\bin</OutputPath>
282 <XmlDocFile>DemoGame.xml</XmlDocFile>
283 </Options>
284 </Configuration>
285 <ReferencePath>../bin</ReferencePath>
286 <Reference name="System"/>
287 <Reference name="RealmForge.UI.Forms"/>
288 <Reference name="RealmForge.ScriptLibrary"/>
289 <Reference name="RealmForge.RAGE"/>
290 <Reference name="RealmForge.Framework"/>
291 <Reference name="RealmForge.Utility"/>
292 <Files>
293 <Match pattern="*.cs" recurse="true"/>
294 </Files>
295 </Project>
296
297 </Solution>
298</Prebuild>
299
300
diff --git a/Prebuild/doc/prebuild-example2.xml b/Prebuild/doc/prebuild-example2.xml
new file mode 100644
index 0000000..02276f6
--- /dev/null
+++ b/Prebuild/doc/prebuild-example2.xml
@@ -0,0 +1,72 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
3 <Solution name="Prebuild">
4 <Configuration name="Debug">
5 <Options>
6 <?if OS = "Win32" ?>
7 <CompilerDefines>DEBUG;TRACE;WIN32;NET</CompilerDefines>
8 <?else ?>
9 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
10 <?endif ?>
11 <OptimizeCode>false</OptimizeCode>
12 <OutputPath>bin\Debug</OutputPath>
13 <DebugInformation>true</DebugInformation>
14 <SuppressWarnings>1595</SuppressWarnings>
15 </Options>
16 </Configuration>
17 <Configuration name="Release">
18 <Options>
19 <?if OS = "Win32" ?>
20 <CompilerDefines>TRACE;WIN32;NET</CompilerDefines>
21 <?else ?>
22 <CompilerDefines>TRACE;POSIX</CompilerDefines>
23 <?endif ?>
24 <OutputPath>bin\Release</OutputPath>
25 <OptimizeCode>true</OptimizeCode>
26 <DebugInformation>false</DebugInformation>
27 <SuppressWarnings>1595</SuppressWarnings>
28 </Options>
29 </Configuration>
30 <Files>
31 <File>prebuild.xml</File>
32 <Match path="doc" pattern="*.txt"/>
33 </Files>
34 <Project name="Prebuild" path="src" language="C#" assemblyName="Prebuild" icon="App.ico" type="Exe" rootNamespace="Prebuild" startupObject="Prebuild.Prebuild">
35 <Configuration name="Debug">
36 <Options>
37 <?if OS = "Win32" ?>
38 <CompilerDefines>DEBUG;TRACE;WIN32;NET</CompilerDefines>
39 <?else ?>
40 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
41 <?endif ?>
42 <OptimizeCode>false</OptimizeCode>
43 <OutputPath>bin\Debug</OutputPath>
44 <DebugInformation>true</DebugInformation>
45 <XmlDocFile>Prebuild.xml</XmlDocFile>
46 <SuppressWarnings>1595</SuppressWarnings>
47 </Options>
48 </Configuration>
49 <Configuration name="Release">
50 <Options>
51 <?if OS = "Win32" ?>
52 <CompilerDefines>TRACE;WIN32;NET</CompilerDefines>
53 <?else ?>
54 <CompilerDefines>TRACE;POSIX</CompilerDefines>
55 <?endif ?>
56 <OutputPath>bin\Release</OutputPath>
57 <OptimizeCode>true</OptimizeCode>
58 <DebugInformation>false</DebugInformation>
59 <XmlDocFile>Prebuild.xml</XmlDocFile>
60 <SuppressWarnings>1595</SuppressWarnings>
61 </Options>
62 </Configuration>
63 <Reference name="System.Xml" />
64 <Reference name="System" />
65 <Files>
66 <Match pattern="App.ico" buildAction="EmbeddedResource"/>
67 <Match path="data" pattern="prebuild-1.6.xsd" buildAction="EmbeddedResource"/>
68 <Match pattern="*.cs" recurse="true"/>
69 </Files>
70 </Project>
71 </Solution>
72</Prebuild>
diff --git a/Prebuild/doc/prebuild-example3.xml b/Prebuild/doc/prebuild-example3.xml
new file mode 100644
index 0000000..1ba38f7
--- /dev/null
+++ b/Prebuild/doc/prebuild-example3.xml
@@ -0,0 +1,113 @@
1<?xml version="1.0" encoding="utf-8"?>
2 <!--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.6 schema, you can find the XSD schema file at the url specified in the xmlns attribute. -->
3 <Prebuild version="1.6" xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
4 <Solution name="RealmForge"> <!--The title and file name for the solution, combine, workspace, or project group (depending on what development tool you are using)-->
5 <!--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.-->
6 <Configuration name="Debug">
7 <Options>
8 <!-- 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 -->
9 <?if OS = "Win32" ?>
10 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
11 <?else ?>
12 <CompilerDefines>DEBUG;TRACE;POSIX</CompilerDefines>
13 <?endif ?>
14 <OptimizeCode>false</OptimizeCode>
15 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
16 <AllowUnsafe>false</AllowUnsafe>
17 <WarningLevel>4</WarningLevel>
18 <!--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).-->
19
20 <WarningsAsErrors>false</WarningsAsErrors>
21 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
22 <!-- 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)-->
23
24 <OutputPath>..\bin</OutputPath>
25 <DebugInformation>true</DebugInformation>
26 <RegisterComInterop>false</RegisterComInterop>
27 <IncrementalBuild>true</IncrementalBuild>
28 <BaseAddress>285212672</BaseAddress>
29 <FileAlignment>4096</FileAlignment>
30 <NoStdLib>false</NoStdLib>
31 <XmlDocFile>Docs.xml</XmlDocFile>
32 </Options>
33 </Configuration>
34 <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 -->
35 <Options>
36 <CompilerDefines>TRACE</CompilerDefines>
37 <OptimizeCode>true</OptimizeCode>
38 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
39 <AllowUnsafe>false</AllowUnsafe>
40 <WarningLevel>4</WarningLevel>
41 <WarningsAsErrors>false</WarningsAsErrors>
42 <SuppressWarnings>1591;219;1573;1572;168</SuppressWarnings>
43 <OutputPath>..\bin</OutputPath>
44 <DebugInformation>false</DebugInformation>
45 <RegisterComInterop>false</RegisterComInterop>
46 <IncrementalBuild>true</IncrementalBuild>
47 <BaseAddress>285212672</BaseAddress>
48 <FileAlignment>4096</FileAlignment>
49 <NoStdLib>false</NoStdLib>
50 <XmlDocFile>Docs.xml</XmlDocFile>
51 </Options>
52 </Configuration>
53
54 <!-- One of the projects that is included in the Solution -->
55 <Project name="RealmForge.Utility" path="Utility" type="Library" assemblyName="RealmForge.Utility" rootNamespace="RealmForge">
56 <Configuration name="Debug">
57 <Options>
58 <OutputPath>..\bin\lib\Utility</OutputPath>
59 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
60 </Options>
61 </Configuration>
62 <Configuration name="Release">
63 <Options>
64 <OutputPath>..\bin\lib\Utility</OutputPath>
65 <XmlDocFile>RealmForge.Utility.xml</XmlDocFile>
66 </Options>
67 </Configuration>
68 <ReferencePath>../bin</ReferencePath>
69 <Reference name="System"/>
70 <Reference name="System.Data"/>
71 <Reference name="System.Drawing"/>
72 <Reference name="System.Xml"/>
73 <Reference name="System.Runtime.Serialization.Formatters.Soap"/>
74 <Reference name="ICSharpCode.SharpZipLib"/>
75 <Files>
76 <Match pattern="*.cs" recurse="true"/>
77 </Files>
78 </Project>
79
80 <!-- Another projects that is included in the Solution -->
81 <Project name="DemoGame" path="DemoGame" type="WinExe" icon="..\bin\RealmForge.ico" assemblyName="DemoGame" rootNamespace="RealmForge">
82 <!-- 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 -->
83 <!--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-->
84
85 <Configuration name="Debug">
86 <Options>
87 <OutputPath>..\bin</OutputPath>
88 <XmlDocFile>DemoGame.xml</XmlDocFile>
89 </Options>
90 </Configuration>
91 <Configuration name="Release">
92 <Options>
93 <OutputPath>..\bin</OutputPath>
94 <XmlDocFile>DemoGame.xml</XmlDocFile>
95 </Options>
96 </Configuration>
97 <ReferencePath>../bin</ReferencePath>
98 <Reference name="System"/> <!-- Assemblies that are located in the GAC (installed, global) can be referenced-->
99 <Reference name="ode"/> <!-- Assemblies that are located in the output directory to which the file is built can be referenced -->
100 <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-->
101 <Files>
102 <!-- path defaults to . or the directory that prebuild.exe resides in -->
103 <Match path="." pattern="*.cs" recurse="true"/>
104 <Match pattern="*.bmp" recurse="true" buildAction="EmbeddedResource"/>
105 <Match pattern="[^a]*\.(png|jpg)" useRegex="true" buildAction="EmbeddedResource"/>
106
107 <!-- 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.-->
108 <!--EmbeddedResource, Content, and Compile are valid buildAction's-->
109 </Files>
110 </Project>
111
112 </Solution>
113</Prebuild>
diff --git a/Prebuild/doc/prebuild-example4.xml b/Prebuild/doc/prebuild-example4.xml
new file mode 100644
index 0000000..c6c223f
--- /dev/null
+++ b/Prebuild/doc/prebuild-example4.xml
@@ -0,0 +1,715 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd" version="1.6">
3 <Solution name="SdlDotNet">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <AllowUnsafe>false</AllowUnsafe>
9 <OutputPath>bin\Debug</OutputPath>
10 <DebugInformation>true</DebugInformation>
11 <WarningLevel>4</WarningLevel>
12 <SuppressWarnings>1595</SuppressWarnings>
13 </Options>
14 </Configuration>
15 <Configuration name="Release">
16 <Options>
17 <CompilerDefines>TRACE</CompilerDefines>
18 <OptimizeCode>true</OptimizeCode>
19 <AllowUnsafe>false</AllowUnsafe>
20 <OutputPath>bin\Release</OutputPath>
21 <DebugInformation>false</DebugInformation>
22 <WarningLevel>1</WarningLevel>
23 <SuppressWarnings>1595</SuppressWarnings>
24 </Options>
25 </Configuration>
26 <Files>
27 <File buildAction="Content">SdlDotNet.build</File>
28 <File buildAction="Content">prebuild.xml</File>
29 </Files>
30 <Project name="SdlDotNet" path="src" language="C#" type="Library" assemblyName="SdlDotNet" rootNamespace="SdlDotNet">
31 <Configuration name="Debug">
32 <Options>
33 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
34 <OptimizeCode>false</OptimizeCode>
35 <AllowUnsafe>false</AllowUnsafe>
36 <OutputPath>bin\Debug</OutputPath>
37 <DebugInformation>true</DebugInformation>
38 <XmlDocFile>SdlDotNet.xml</XmlDocFile>
39 <WarningLevel>4</WarningLevel>
40 <SuppressWarnings>1595</SuppressWarnings>
41 </Options>
42 </Configuration>
43 <Configuration name="Release">
44 <Options>
45 <CompilerDefines>TRACE</CompilerDefines>
46 <OptimizeCode>true</OptimizeCode>
47 <AllowUnsafe>false</AllowUnsafe>
48 <OutputPath>bin\Release</OutputPath>
49 <XmlDocFile>SdlDotNet.xml</XmlDocFile>
50 <DebugInformation>false</DebugInformation>
51 <WarningLevel>1</WarningLevel>
52 <SuppressWarnings>1595</SuppressWarnings>
53 </Options>
54 </Configuration>
55 <Reference name="System" />
56 <Reference name="System.Windows.Forms" />
57 <Reference name="System.Drawing" />
58 <Reference name="Tao.Sdl" localCopy="true" path="..\\lib"/>
59 <Files>
60 <Match path="." pattern="SurfaceControl.cs" subType="Component" recurse="true"/>
61 <Match path="." pattern="*.bmp" buildAction="EmbeddedResource" recurse="true"/>
62 <Match path="." pattern="*.cs" recurse="true">
63 <Exclude name="SurfaceControl.cs"/>
64 </Match>
65 </Files>
66 </Project>
67 <Project name="Rectangles" path="examples\\Rectangles" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.Rectangles.Rectangles" assemblyName="Rectangles" rootNamespace="SdlDotNet.Examples.Rectangles" icon="App.ico">
68 <Configuration name="Debug">
69 <Options>
70 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
71 <OptimizeCode>false</OptimizeCode>
72 <AllowUnsafe>false</AllowUnsafe>
73 <OutputPath>bin\Debug</OutputPath>
74 <DebugInformation>true</DebugInformation>
75 <XmlDocFile>Rectangles.xml</XmlDocFile>
76 <WarningLevel>4</WarningLevel>
77 <SuppressWarnings>1595</SuppressWarnings>
78 </Options>
79 </Configuration>
80 <Configuration name="Release">
81 <Options>
82 <CompilerDefines>TRACE</CompilerDefines>
83 <OptimizeCode>true</OptimizeCode>
84 <AllowUnsafe>false</AllowUnsafe>
85 <OutputPath>bin\Release</OutputPath>
86 <DebugInformation>false</DebugInformation>
87 <XmlDocFile>Rectangles.xml</XmlDocFile>
88 <WarningLevel>1</WarningLevel>
89 <SuppressWarnings>1595</SuppressWarnings>
90 </Options>
91 </Configuration>
92 <Reference name="System" />
93 <Reference name="System.Drawing" />
94 <Reference name="SdlDotNet" localCopy="true"/>
95 <Files>
96 <File buildAction="EmbeddedResource">App.ico</File>
97 <Match path="." pattern="*.cs" recurse="true"/>
98 </Files>
99 </Project>
100 <Project name="Gears" path="examples\\Gears" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.Gears.Gears" assemblyName="Gears" rootNamespace="SdlDotNet.Examples.Gears" icon="App.ico">
101 <Configuration name="Debug">
102 <Options>
103 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
104 <OptimizeCode>false</OptimizeCode>
105 <AllowUnsafe>false</AllowUnsafe>
106 <OutputPath>bin\Debug</OutputPath>
107 <DebugInformation>true</DebugInformation>
108 <XmlDocFile>Gears.xml</XmlDocFile>
109 <WarningLevel>4</WarningLevel>
110 <SuppressWarnings>1595</SuppressWarnings>
111 </Options>
112 </Configuration>
113 <Configuration name="Release">
114 <Options>
115 <CompilerDefines>TRACE</CompilerDefines>
116 <OptimizeCode>true</OptimizeCode>
117 <AllowUnsafe>false</AllowUnsafe>
118 <OutputPath>bin\Release</OutputPath>
119 <DebugInformation>false</DebugInformation>
120 <XmlDocFile>Gears.xml</XmlDocFile>
121 <WarningLevel>1</WarningLevel>
122 <SuppressWarnings>1595</SuppressWarnings>
123 </Options>
124 </Configuration>
125 <Reference name="System" />
126 <Reference name="System.Drawing" />
127 <Reference name="SdlDotNet" localCopy="true"/>
128 <Reference name="Tao.OpenGl" localCopy="true" path="..\\..\\lib"/>
129 <Files>
130 <File buildAction="EmbeddedResource">App.ico</File>
131 <Match path="." pattern="*.cs" recurse="true"/>
132 </Files>
133 </Project>
134 <Project name="CDPlayer" path="examples\\CDPlayer" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.CDPlayer.CDPlayer" assemblyName="CDPlayer" rootNamespace="SdlDotNet.Examples.CDPlayer" icon="App.ico">
135 <Configuration name="Debug">
136 <Options>
137 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
138 <OptimizeCode>false</OptimizeCode>
139 <AllowUnsafe>false</AllowUnsafe>
140 <OutputPath>bin\Debug</OutputPath>
141 <DebugInformation>true</DebugInformation>
142 <XmlDocFile>CDPlayer.xml</XmlDocFile>
143 <WarningLevel>4</WarningLevel>
144 <SuppressWarnings>1595</SuppressWarnings>
145 </Options>
146 </Configuration>
147 <Configuration name="Release">
148 <Options>
149 <CompilerDefines>TRACE</CompilerDefines>
150 <OptimizeCode>true</OptimizeCode>
151 <AllowUnsafe>false</AllowUnsafe>
152 <OutputPath>bin\Release</OutputPath>
153 <DebugInformation>false</DebugInformation>
154 <XmlDocFile>CDPlayer.xml</XmlDocFile>
155 <WarningLevel>1</WarningLevel>
156 <SuppressWarnings>1595</SuppressWarnings>
157 </Options>
158 </Configuration>
159 <Reference name="System" />
160 <Reference name="System.Drawing" />
161 <Reference name="System.Windows.Forms" />
162 <Reference name="SdlDotNet" localCopy="true"/>
163 <Files>
164 <File buildAction="EmbeddedResource">App.ico</File>
165 <File subType="Form">CDPlayer.cs</File>
166 <Match path="." pattern="*.cs" recurse="true">
167 <Exclude name="CDPlayer.cs"/>
168 </Match>
169 </Files>
170 </Project>
171 <Project name="MoviePlayer" path="examples\\MoviePlayer" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.MoviePlayer.MoviePlayer" assemblyName="MoviePlayer" rootNamespace="SdlDotNet.Examples.MoviePlayer" icon="App.ico">
172 <Configuration name="Debug">
173 <Options>
174 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
175 <OptimizeCode>false</OptimizeCode>
176 <AllowUnsafe>false</AllowUnsafe>
177 <OutputPath>bin\Debug</OutputPath>
178 <DebugInformation>true</DebugInformation>
179 <XmlDocFile>MoviePlayer.xml</XmlDocFile>
180 <WarningLevel>4</WarningLevel>
181 <SuppressWarnings>1595</SuppressWarnings>
182 </Options>
183 </Configuration>
184 <Configuration name="Release">
185 <Options>
186 <CompilerDefines>TRACE</CompilerDefines>
187 <OptimizeCode>true</OptimizeCode>
188 <AllowUnsafe>false</AllowUnsafe>
189 <OutputPath>bin\Release</OutputPath>
190 <DebugInformation>false</DebugInformation>
191 <XmlDocFile>MoviePlayer.xml</XmlDocFile>
192 <WarningLevel>1</WarningLevel>
193 <SuppressWarnings>1595</SuppressWarnings>
194 </Options>
195 </Configuration>
196 <Reference name="System" />
197 <Reference name="System.Drawing" />
198 <Reference name="SdlDotNet" localCopy="true"/>
199 <Files>
200 <File buildAction="EmbeddedResource">App.ico</File>
201 <Match path="." pattern="*.cs" recurse="true"/>
202 </Files>
203 </Project>
204 <Project name="SimpleGame" path="examples\\SimpleGame" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.SimpleGame.GameMain" assemblyName="SimpleGame" rootNamespace="SdlDotNet.Examples.SimpleGame" icon="App.ico">
205 <Configuration name="Debug">
206 <Options>
207 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
208 <OptimizeCode>false</OptimizeCode>
209 <AllowUnsafe>false</AllowUnsafe>
210 <OutputPath>bin\Debug</OutputPath>
211 <DebugInformation>true</DebugInformation>
212 <XmlDocFile>SimpleGame.xml</XmlDocFile>
213 <WarningLevel>4</WarningLevel>
214 <SuppressWarnings>1595</SuppressWarnings>
215 </Options>
216 </Configuration>
217 <Configuration name="Release">
218 <Options>
219 <CompilerDefines>TRACE</CompilerDefines>
220 <OptimizeCode>true</OptimizeCode>
221 <AllowUnsafe>false</AllowUnsafe>
222 <OutputPath>bin\Release</OutputPath>
223 <DebugInformation>false</DebugInformation>
224 <XmlDocFile>SimpleGame.xml</XmlDocFile>
225 <WarningLevel>1</WarningLevel>
226 <SuppressWarnings>1595</SuppressWarnings>
227 </Options>
228 </Configuration>
229 <Reference name="System" />
230 <Reference name="System.Drawing" />
231 <Reference name="SdlDotNet" localCopy="true"/>
232 <Files>
233 <File buildAction="EmbeddedResource">App.ico</File>
234 <Match path="." pattern="*.cs" recurse="true"/>
235 </Files>
236 </Project>
237 <Project name="BombRun" path="examples\\BombRun" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.BombRun.BombRun" assemblyName="BombRun" rootNamespace="SdlDotNet.Examples.BombRun" icon="App.ico">
238 <Configuration name="Debug">
239 <Options>
240 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
241 <OptimizeCode>false</OptimizeCode>
242 <AllowUnsafe>false</AllowUnsafe>
243 <OutputPath>bin\Debug</OutputPath>
244 <DebugInformation>true</DebugInformation>
245 <XmlDocFile>BombRun.xml</XmlDocFile>
246 <WarningLevel>4</WarningLevel>
247 <SuppressWarnings>1595</SuppressWarnings>
248 </Options>
249 </Configuration>
250 <Configuration name="Release">
251 <Options>
252 <CompilerDefines>TRACE</CompilerDefines>
253 <OptimizeCode>true</OptimizeCode>
254 <AllowUnsafe>false</AllowUnsafe>
255 <OutputPath>bin\Release</OutputPath>
256 <DebugInformation>false</DebugInformation>
257 <XmlDocFile>BombRun.xml</XmlDocFile>
258 <WarningLevel>1</WarningLevel>
259 <SuppressWarnings>1595</SuppressWarnings>
260 </Options>
261 </Configuration>
262 <Reference name="System" />
263 <Reference name="System.Drawing" />
264 <Reference name="SdlDotNet" localCopy="true"/>
265 <Files>
266 <File buildAction="EmbeddedResource">App.ico</File>
267 <Match path="." pattern="*.cs" recurse="true"/>
268 </Files>
269 </Project>
270 <Project name="SnowDemo" path="examples\\SnowDemo" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.SnowDemo.SnowDemo" assemblyName="SnowDemo" rootNamespace="SdlDotNet.Examples.SnowDemo" icon="App.ico">
271 <Configuration name="Debug">
272 <Options>
273 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
274 <OptimizeCode>false</OptimizeCode>
275 <AllowUnsafe>false</AllowUnsafe>
276 <OutputPath>bin\Debug</OutputPath>
277 <DebugInformation>true</DebugInformation>
278 <XmlDocFile>SnowDemo.xml</XmlDocFile>
279 <WarningLevel>4</WarningLevel>
280 <SuppressWarnings>1595</SuppressWarnings>
281 </Options>
282 </Configuration>
283 <Configuration name="Release">
284 <Options>
285 <CompilerDefines>TRACE</CompilerDefines>
286 <OptimizeCode>true</OptimizeCode>
287 <AllowUnsafe>false</AllowUnsafe>
288 <OutputPath>bin\Release</OutputPath>
289 <DebugInformation>false</DebugInformation>
290 <XmlDocFile>SnowDemo.xml</XmlDocFile>
291 <WarningLevel>1</WarningLevel>
292 <SuppressWarnings>1595</SuppressWarnings>
293 </Options>
294 </Configuration>
295 <Reference name="System" />
296 <Reference name="System.Drawing" />
297 <Reference name="SdlDotNet" localCopy="true"/>
298 <Files>
299 <File buildAction="EmbeddedResource">App.ico</File>
300 <Match path="." pattern="*.cs" recurse="true"/>
301 </Files>
302 </Project>
303 <Project name="BounceSprites" path="examples\\BounceSprites" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.BounceSprites.BounceSprites" assemblyName="BounceSprites" rootNamespace="SdlDotNet.Examples.BounceSprites" icon="App.ico">
304 <Configuration name="Debug">
305 <Options>
306 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
307 <OptimizeCode>false</OptimizeCode>
308 <AllowUnsafe>false</AllowUnsafe>
309 <OutputPath>bin\Debug</OutputPath>
310 <DebugInformation>true</DebugInformation>
311 <XmlDocFile>BounceSprites.xml</XmlDocFile>
312 <WarningLevel>4</WarningLevel>
313 <SuppressWarnings>1595</SuppressWarnings>
314 </Options>
315 </Configuration>
316 <Configuration name="Release">
317 <Options>
318 <CompilerDefines>TRACE</CompilerDefines>
319 <OptimizeCode>true</OptimizeCode>
320 <AllowUnsafe>false</AllowUnsafe>
321 <OutputPath>bin\Release</OutputPath>
322 <DebugInformation>false</DebugInformation>
323 <XmlDocFile>BounceSprites.xml</XmlDocFile>
324 <WarningLevel>1</WarningLevel>
325 <SuppressWarnings>1595</SuppressWarnings>
326 </Options>
327 </Configuration>
328 <Reference name="System" />
329 <Reference name="System.Drawing" />
330 <Reference name="SdlDotNet" localCopy="true"/>
331 <Files>
332 <File buildAction="EmbeddedResource">App.ico</File>
333 <Match path="." pattern="*.cs" recurse="true"/>
334 </Files>
335 </Project>
336 <Project name="Triad" path="examples\\Triad" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.Triad.MainObject" assemblyName="Triad" rootNamespace="SdlDotNet.Examples.Triad" icon="App.ico">
337 <Configuration name="Debug">
338 <Options>
339 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
340 <OptimizeCode>false</OptimizeCode>
341 <AllowUnsafe>false</AllowUnsafe>
342 <OutputPath>bin\Debug</OutputPath>
343 <DebugInformation>true</DebugInformation>
344 <XmlDocFile>Triad.xml</XmlDocFile>
345 <WarningLevel>4</WarningLevel>
346 <SuppressWarnings>1595</SuppressWarnings>
347 </Options>
348 </Configuration>
349 <Configuration name="Release">
350 <Options>
351 <CompilerDefines>TRACE</CompilerDefines>
352 <OptimizeCode>true</OptimizeCode>
353 <AllowUnsafe>false</AllowUnsafe>
354 <OutputPath>bin\Release</OutputPath>
355 <DebugInformation>false</DebugInformation>
356 <XmlDocFile>Triad.xml</XmlDocFile>
357 <WarningLevel>1</WarningLevel>
358 <SuppressWarnings>1595</SuppressWarnings>
359 </Options>
360 </Configuration>
361 <Reference name="System" />
362 <Reference name="System.Drawing" />
363 <Reference name="SdlDotNet" localCopy="true"/>
364 <Reference name="nunit.framework" localCopy="true" path="..\\..\\lib"/>
365 <Files>
366 <File buildAction="EmbeddedResource">App.ico</File>
367 <Match path="." pattern="*.cs" recurse="true"/>
368 </Files>
369 </Project>
370 <Project name="GuiExample" path="examples\\GuiExample" language="C#" type="Library" assemblyName="GuiExample" rootNamespace="SdlDotNet.Examples.GuiExample">
371 <Configuration name="Debug">
372 <Options>
373 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
374 <OptimizeCode>false</OptimizeCode>
375 <AllowUnsafe>false</AllowUnsafe>
376 <OutputPath>bin\Debug</OutputPath>
377 <DebugInformation>true</DebugInformation>
378 <XmlDocFile>GuiExample.xml</XmlDocFile>
379 <WarningLevel>4</WarningLevel>
380 <SuppressWarnings>1595</SuppressWarnings>
381 </Options>
382 </Configuration>
383 <Configuration name="Release">
384 <Options>
385 <CompilerDefines>TRACE</CompilerDefines>
386 <OptimizeCode>true</OptimizeCode>
387 <AllowUnsafe>false</AllowUnsafe>
388 <OutputPath>bin\Release</OutputPath>
389 <DebugInformation>false</DebugInformation>
390 <XmlDocFile>GuiExample.xml</XmlDocFile>
391 <WarningLevel>1</WarningLevel>
392 <SuppressWarnings>1595</SuppressWarnings>
393 </Options>
394 </Configuration>
395 <Reference name="System" />
396 <Reference name="System.Drawing" />
397 <Reference name="SdlDotNet" localCopy="true"/>
398 <Files>
399 <Match path="." pattern="*.cs" recurse="true"/>
400 </Files>
401 </Project>
402 <Project name="SpriteGuiDemos" path="examples\\SpriteGuiDemos" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.SpriteGuiDemos.SdlDemo" assemblyName="SpriteGuiDemo" rootNamespace="SdlDotNet.Examples.SpriteGuiDemos" icon="App.ico">
403 <Configuration name="Debug">
404 <Options>
405 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
406 <OptimizeCode>false</OptimizeCode>
407 <AllowUnsafe>false</AllowUnsafe>
408 <OutputPath>bin\Debug</OutputPath>
409 <DebugInformation>true</DebugInformation>
410 <XmlDocFile>SpriteGuiDemos.xml</XmlDocFile>
411 <WarningLevel>4</WarningLevel>
412 <SuppressWarnings>1595</SuppressWarnings>
413 </Options>
414 </Configuration>
415 <Configuration name="Release">
416 <Options>
417 <CompilerDefines>TRACE</CompilerDefines>
418 <OptimizeCode>true</OptimizeCode>
419 <AllowUnsafe>false</AllowUnsafe>
420 <OutputPath>bin\Release</OutputPath>
421 <DebugInformation>false</DebugInformation>
422 <XmlDocFile>SpriteGuiDemos.xml</XmlDocFile>
423 <WarningLevel>1</WarningLevel>
424 <SuppressWarnings>1595</SuppressWarnings>
425 </Options>
426 </Configuration>
427 <Reference name="System" />
428 <Reference name="System.Drawing" />
429 <Reference name="SdlDotNet" localCopy="true"/>
430 <Reference name="GuiExample" localCopy="true"/>
431 <Files>
432 <File buildAction="EmbeddedResource">App.ico</File>
433 <Match path="." pattern="*.cs" recurse="true"/>
434 </Files>
435 </Project>
436 <Project name="Tests" path="tests" language="C#" type="Library" assemblyName="SdlDotNet.Tests" rootNamespace="SdlDotNet.Tests">
437 <Configuration name="Debug">
438 <Options>
439 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
440 <OptimizeCode>false</OptimizeCode>
441 <AllowUnsafe>false</AllowUnsafe>
442 <OutputPath>bin\Debug</OutputPath>
443 <DebugInformation>true</DebugInformation>
444 <XmlDocFile>SdlDotNet.Tests.xml</XmlDocFile>
445 <WarningLevel>4</WarningLevel>
446 <SuppressWarnings>1595</SuppressWarnings>
447 </Options>
448 </Configuration>
449 <Configuration name="Release">
450 <Options>
451 <CompilerDefines>TRACE</CompilerDefines>
452 <OptimizeCode>true</OptimizeCode>
453 <AllowUnsafe>false</AllowUnsafe>
454 <OutputPath>bin\Release</OutputPath>
455 <DebugInformation>false</DebugInformation>
456 <XmlDocFile>SdlDotNet.Tests.xml</XmlDocFile>
457 <WarningLevel>1</WarningLevel>
458 <SuppressWarnings>1595</SuppressWarnings>
459 </Options>
460 </Configuration>
461 <Reference name="System" />
462 <Reference name="System.Drawing" />
463 <Reference name="SdlDotNet" localCopy="true"/>
464 <Reference name="Tao.Sdl" localCopy="true" path="..\\lib"/>
465 <Reference name="GuiExample" localCopy="true"/>
466 <Reference name="nunit.framework" localCopy="true" path="..\\lib"/>
467 <Files>
468 <Match path="." pattern="*.cs" recurse="true"/>
469 </Files>
470 </Project>
471 <Project name="AudioExample" path="examples\\AudioExample" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.AudioExample.AudioExample" assemblyName="AudioExample" rootNamespace="SdlDotNet.Examples.AudioExample" icon="App.ico">
472 <Configuration name="Debug">
473 <Options>
474 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
475 <OptimizeCode>false</OptimizeCode>
476 <AllowUnsafe>false</AllowUnsafe>
477 <OutputPath>bin\Debug</OutputPath>
478 <DebugInformation>true</DebugInformation>
479 <XmlDocFile>AudioExample.xml</XmlDocFile>
480 <WarningLevel>4</WarningLevel>
481 <SuppressWarnings>1595</SuppressWarnings>
482 </Options>
483 </Configuration>
484 <Configuration name="Release">
485 <Options>
486 <CompilerDefines>TRACE</CompilerDefines>
487 <OptimizeCode>true</OptimizeCode>
488 <AllowUnsafe>false</AllowUnsafe>
489 <OutputPath>bin\Release</OutputPath>
490 <DebugInformation>false</DebugInformation>
491 <XmlDocFile>AudioExample.xml</XmlDocFile>
492 <WarningLevel>1</WarningLevel>
493 <SuppressWarnings>1595</SuppressWarnings>
494 </Options>
495 </Configuration>
496 <Reference name="System" />
497 <Reference name="System.Drawing" />
498 <Reference name="SdlDotNet" localCopy="true"/>
499 <Files>
500 <File buildAction="EmbeddedResource">App.ico</File>
501 <Match path="." pattern="*.cs" recurse="true"/>
502 </Files>
503 </Project>
504 <Project name="SdlDotNet.Particles" path="extras\\Particles" language="C#" type="Library" assemblyName="SdlDotNet.Particles" rootNamespace="SdlDotNet.Particles">
505 <Configuration name="Debug">
506 <Options>
507 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
508 <OptimizeCode>false</OptimizeCode>
509 <AllowUnsafe>false</AllowUnsafe>
510 <OutputPath>bin\Debug</OutputPath>
511 <DebugInformation>true</DebugInformation>
512 <XmlDocFile>SdlDotNet.Particles.xml</XmlDocFile>
513 <WarningLevel>4</WarningLevel>
514 <SuppressWarnings>1595</SuppressWarnings>
515 </Options>
516 </Configuration>
517 <Configuration name="Release">
518 <Options>
519 <CompilerDefines>TRACE</CompilerDefines>
520 <OptimizeCode>true</OptimizeCode>
521 <AllowUnsafe>false</AllowUnsafe>
522 <OutputPath>bin\Release</OutputPath>
523 <DebugInformation>false</DebugInformation>
524 <XmlDocFile>SdlDotNet.Particles.xml</XmlDocFile>
525 <WarningLevel>1</WarningLevel>
526 <SuppressWarnings>1595</SuppressWarnings>
527 </Options>
528 </Configuration>
529 <Reference name="System" />
530 <Reference name="System.Drawing" />
531 <Reference name="SdlDotNet" localCopy="true"/>
532 <Files>
533 <Match path="." pattern="*.cs" recurse="true"/>
534 </Files>
535 </Project>
536 <Project name="ParticlesExample" path="examples\\ParticlesExample" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.ParticlesExample.ParticlesExample" assemblyName="ParticlesExample" rootNamespace="SdlDotNet.Examples.ParticlesExample" icon="App.ico">
537 <Configuration name="Debug">
538 <Options>
539 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
540 <OptimizeCode>false</OptimizeCode>
541 <AllowUnsafe>false</AllowUnsafe>
542 <OutputPath>bin\Debug</OutputPath>
543 <DebugInformation>true</DebugInformation>
544 <XmlDocFile>ParticlesExample.xml</XmlDocFile>
545 <WarningLevel>4</WarningLevel>
546 <SuppressWarnings>1595</SuppressWarnings>
547 </Options>
548 </Configuration>
549 <Configuration name="Release">
550 <Options>
551 <CompilerDefines>TRACE</CompilerDefines>
552 <OptimizeCode>true</OptimizeCode>
553 <AllowUnsafe>false</AllowUnsafe>
554 <OutputPath>bin\Release</OutputPath>
555 <DebugInformation>false</DebugInformation>
556 <XmlDocFile>ParticlesExample.xml</XmlDocFile>
557 <WarningLevel>1</WarningLevel>
558 <SuppressWarnings>1595</SuppressWarnings>
559 </Options>
560 </Configuration>
561 <Reference name="System" />
562 <Reference name="System.Drawing" />
563 <Reference name="SdlDotNet" localCopy="true"/>
564 <Reference name="SdlDotNet.Particles" localCopy="true"/>
565 <Files>
566 <File buildAction="EmbeddedResource">App.ico</File>
567 <Match path="." pattern="*.cs" recurse="true"/>
568 </Files>
569 </Project>
570 <!--<Project name="SdlDotNet.Gui" path="extras\\Gui" language="C#" type="Library" assemblyName="SdlDotNet.Gui" rootNamespace="SdlDotNet.Gui">
571 <Configuration name="Debug">
572 <Options>
573 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
574 <OptimizeCode>false</OptimizeCode>
575 <AllowUnsafe>false</AllowUnsafe>
576 <OutputPath>bin\Debug</OutputPath>
577 <DebugInformation>true</DebugInformation>
578 <XmlDocFile>SdlDotNet.Gui.xml</XmlDocFile>
579 <WarningLevel>4</WarningLevel>
580 </Options>
581 </Configuration>
582 <Configuration name="Release">
583 <Options>
584 <CompilerDefines>TRACE</CompilerDefines>
585 <OptimizeCode>true</OptimizeCode>
586 <AllowUnsafe>false</AllowUnsafe>
587 <OutputPath>bin\Release</OutputPath>
588 <DebugInformation>false</DebugInformation>
589 <XmlDocFile>SdlDotNet.Gui.xml</XmlDocFile>
590 <WarningLevel>1</WarningLevel>
591 </Options>
592 </Configuration>
593 <Reference name="System" />
594 <Reference name="System.Drawing" />
595 <Reference name="SdlDotNet" localCopy="true"/>
596 <Files>
597 <Match path="." pattern="*.cs" recurse="true"/>
598 </Files>
599 </Project>-->
600 <Project name="NeHe" path="examples\\NeHe" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.NeHe.NeHe" assemblyName="NeHe" rootNamespace="SdlDotNet.Examples.NeHe" icon="App.ico">
601 <Configuration name="Debug">
602 <Options>
603 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
604 <OptimizeCode>false</OptimizeCode>
605 <AllowUnsafe>false</AllowUnsafe>
606 <OutputPath>bin\Debug</OutputPath>
607 <DebugInformation>true</DebugInformation>
608 <XmlDocFile>NeHe.xml</XmlDocFile>
609 <WarningLevel>4</WarningLevel>
610 <SuppressWarnings>1595</SuppressWarnings>
611 </Options>
612 </Configuration>
613 <Configuration name="Release">
614 <Options>
615 <CompilerDefines>TRACE</CompilerDefines>
616 <OptimizeCode>true</OptimizeCode>
617 <AllowUnsafe>false</AllowUnsafe>
618 <OutputPath>bin\Release</OutputPath>
619 <DebugInformation>false</DebugInformation>
620 <XmlDocFile>NeHe.xml</XmlDocFile>
621 <WarningLevel>1</WarningLevel>
622 <SuppressWarnings>1595</SuppressWarnings>
623 </Options>
624 </Configuration>
625 <Reference name="System" />
626 <Reference name="System.Drawing" />
627 <Reference name="System.Windows.Forms" />
628 <Reference name="SdlDotNet" localCopy="true"/>
629 <Reference name="Tao.OpenGl" localCopy="true" path="..\\..\\lib"/>
630 <Reference name="Tao.OpenGl.Glu" localCopy="true" path="..\\..\\lib"/>
631 <Reference name="Tao.Platform.Windows" localCopy="true" path="..\\..\\lib"/>
632 <Files>
633 <File buildAction="EmbeddedResource">App.ico</File>
634 <File subType="Form">NeHe.cs</File>
635 <Match path="." pattern="*.cs" recurse="true">
636 <Exclude name="NeHe.cs"/>
637 </Match>
638 </Files>
639 </Project>
640 <Project name="RedBook" path="examples\\RedBook" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.RedBook.RedBook" assemblyName="RedBook" rootNamespace="SdlDotNet.Examples.RedBook" icon="App.ico">
641 <Configuration name="Debug">
642 <Options>
643 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
644 <OptimizeCode>false</OptimizeCode>
645 <AllowUnsafe>false</AllowUnsafe>
646 <OutputPath>bin\Debug</OutputPath>
647 <DebugInformation>true</DebugInformation>
648 <XmlDocFile>RedBook.xml</XmlDocFile>
649 <WarningLevel>4</WarningLevel>
650 <SuppressWarnings>1595</SuppressWarnings>
651 </Options>
652 </Configuration>
653 <Configuration name="Release">
654 <Options>
655 <CompilerDefines>TRACE</CompilerDefines>
656 <OptimizeCode>true</OptimizeCode>
657 <AllowUnsafe>false</AllowUnsafe>
658 <OutputPath>bin\Release</OutputPath>
659 <DebugInformation>false</DebugInformation>
660 <XmlDocFile>RedBook.xml</XmlDocFile>
661 <WarningLevel>1</WarningLevel>
662 <SuppressWarnings>1595</SuppressWarnings>
663 </Options>
664 </Configuration>
665 <Reference name="System" />
666 <Reference name="System.Drawing" />
667 <Reference name="System.Windows.Forms" />
668 <Reference name="SdlDotNet" localCopy="true"/>
669 <Reference name="Tao.OpenGl" localCopy="true" path="..\\..\\lib"/>
670 <Reference name="Tao.OpenGl.Glu" localCopy="true" path="..\\..\\lib"/>
671 <Reference name="Tao.FreeGlut" localCopy="true" path="..\\..\\lib"/>
672 <Files>
673 <File buildAction="EmbeddedResource">App.ico</File>
674 <File subType="Form">RedBook.cs</File>
675 <Match path="." pattern="*.cs" recurse="true">
676 <Exclude name="RedBook.cs" />
677 </Match>
678 </Files>
679 </Project>
680 <Project name="PhysFsTest" path="examples\\PhysFsTest" language="C#" type="WinExe" startupObject="SdlDotNet.Examples.PhysFsTest.PhysFsTest" assemblyName="PhysFsTest" rootNamespace="SdlDotNet.Examples.PhysFsTest" icon="App.ico">
681 <Configuration name="Debug">
682 <Options>
683 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
684 <OptimizeCode>false</OptimizeCode>
685 <AllowUnsafe>false</AllowUnsafe>
686 <OutputPath>bin\Debug</OutputPath>
687 <DebugInformation>true</DebugInformation>
688 <XmlDocFile>PhysFsTest.xml</XmlDocFile>
689 <WarningLevel>4</WarningLevel>
690 <SuppressWarnings>1595</SuppressWarnings>
691 </Options>
692 </Configuration>
693 <Configuration name="Release">
694 <Options>
695 <CompilerDefines>TRACE</CompilerDefines>
696 <OptimizeCode>true</OptimizeCode>
697 <AllowUnsafe>false</AllowUnsafe>
698 <OutputPath>bin\Release</OutputPath>
699 <DebugInformation>false</DebugInformation>
700 <XmlDocFile>PhysFsTest.xml</XmlDocFile>
701 <WarningLevel>1</WarningLevel>
702 <SuppressWarnings>1595</SuppressWarnings>
703 </Options>
704 </Configuration>
705 <Reference name="System" />
706 <Reference name="System.Drawing" />
707 <Reference name="SdlDotNet" localCopy="true"/>
708 <Reference name="Tao.PhysFs" localCopy="true" path="..\\..\\lib"/>
709 <Files>
710 <File buildAction="EmbeddedResource">App.ico</File>
711 <Match path="." pattern="*.cs" recurse="true"/>
712 </Files>
713 </Project>
714 </Solution>
715</Prebuild>
diff --git a/Prebuild/doc/prebuild-example5.xml b/Prebuild/doc/prebuild-example5.xml
new file mode 100644
index 0000000..5221547
--- /dev/null
+++ b/Prebuild/doc/prebuild-example5.xml
@@ -0,0 +1,187 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd" version="1.6">
3 <Solution name="Tao.Sdl">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <AllowUnsafe>true</AllowUnsafe>
9 <OutputPath>bin\Debug</OutputPath>
10 <XmlDocFile>Tao.Sdl.xml</XmlDocFile>
11 <DebugInformation>true</DebugInformation>
12 </Options>
13 </Configuration>
14 <Configuration name="Release">
15 <Options>
16 <CompilerDefines>TRACE;WIN32</CompilerDefines>
17 <OptimizeCode>true</OptimizeCode>
18 <AllowUnsafe>true</AllowUnsafe>
19 <OutputPath>bin\Release</OutputPath>
20 <XmlDocFile>Tao.Sdl.xml</XmlDocFile>
21 <DebugInformation>false</DebugInformation>
22 </Options>
23 </Configuration>
24 <Files>
25 <File>Tao.Sdl.License.txt</File>
26 <File>Tao.Sdl.Readme.txt</File>
27 <File>Tao.Sdl.snk</File>
28 <File>Tao.Sdl.dll.config</File>
29 </Files>
30 <Project name="Tao.Sdl" path="." language="C#" type="Library">
31 <Reference name="System" />
32 <Files>
33 <File>AssemblyInfo.cs</File>
34 <File>Sdl.cs</File>
35 <File>SdlImage.cs</File>
36 <File>SdlMixer.cs</File>
37 <File>SdlTtf.cs</File>
38 <File>SdlNet.cs</File>
39 <File>SdlGfx.cs</File>
40 <File>Smpeg.cs</File>
41 <File>DelegateCallingConventionCdeclAttribute.cs</File>
42 </Files>
43 </Project>
44 <Project name="Tao.Sdl.Tests" path="..\\..\\tests\\Sdl\\" language="C#" type="Library">
45 <Configuration name="Debug">
46 <Options>
47 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
48 <OptimizeCode>false</OptimizeCode>
49 <AllowUnsafe>false</AllowUnsafe>
50 <OutputPath>bin\Debug</OutputPath>
51 <XmlDocFile>Tao.Sdl.Tests.xml</XmlDocFile>
52 <DebugInformation>true</DebugInformation>
53 </Options>
54 </Configuration>
55 <Configuration name="Release">
56 <Options>
57 <CompilerDefines>TRACE;WIN32</CompilerDefines>
58 <OptimizeCode>true</OptimizeCode>
59 <AllowUnsafe>false</AllowUnsafe>
60 <OutputPath>bin\Release</OutputPath>
61 <XmlDocFile>Tao.Sdl.Tests.xml</XmlDocFile>
62 <DebugInformation>false</DebugInformation>
63 </Options>
64 </Configuration>
65 <Reference name="System" />
66 <Reference name="nunit.framework.dll"/>
67 <Reference name="Tao.Sdl" />
68 <Files>
69 <File>AssemblyInfo.cs</File>
70 <File>SdlTest.cs</File>
71 <File>SdlTestVideo.cs</File>
72 <File>SdlTestImage.cs</File>
73 <File>SdlTestTtf.cs</File>
74 <File>SdlTestMixer.cs</File>
75 <File>SdlTestGfx.cs</File>
76 <File>SmpegTest.cs</File>
77 </Files>
78 </Project>
79 <Project name="SdlExamples.Rectangles" path="..\\..\\examples\\SdlExamples\\Rectangles" language="C#" type="WinExe" startupObject="SdlExamples.Rectangles">
80 <Configuration name="Debug">
81 <Options>
82 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
83 <OptimizeCode>false</OptimizeCode>
84 <AllowUnsafe>false</AllowUnsafe>
85 <OutputPath>bin\Debug</OutputPath>
86 <DebugInformation>true</DebugInformation>
87 </Options>
88 </Configuration>
89 <Configuration name="Release">
90 <Options>
91 <CompilerDefines>TRACE;WIN32</CompilerDefines>
92 <OptimizeCode>true</OptimizeCode>
93 <AllowUnsafe>false</AllowUnsafe>
94 <OutputPath>bin\Release</OutputPath>
95 <DebugInformation>false</DebugInformation>
96 </Options>
97 </Configuration>
98 <Reference name="System" />
99 <Reference name="Tao.Sdl" />
100 <Files>
101 <File>AssemblyInfo.cs</File>
102 <File>Rectangles.cs</File>
103 </Files>
104 </Project>
105 <Project name="SdlExamples.SmpegPlayer" path="..\\..\\examples\\SdlExamples\\SmpegPlayer" language="C#" type="WinExe" startupObject="SdlExamples.SmpegPlayer">
106 <Configuration name="Debug">
107 <Options>
108 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
109 <OptimizeCode>false</OptimizeCode>
110 <AllowUnsafe>false</AllowUnsafe>
111 <OutputPath>bin\Debug</OutputPath>
112 <DebugInformation>true</DebugInformation>
113 </Options>
114 </Configuration>
115 <Configuration name="Release">
116 <Options>
117 <CompilerDefines>TRACE;WIN32</CompilerDefines>
118 <OptimizeCode>true</OptimizeCode>
119 <AllowUnsafe>false</AllowUnsafe>
120 <OutputPath>bin\Release</OutputPath>
121 <DebugInformation>false</DebugInformation>
122 </Options>
123 </Configuration>
124 <Reference name="System" />
125 <Reference name="Tao.Sdl" />
126 <Files>
127 <File>AssemblyInfo.cs</File>
128 <File>SmpegPlayer.cs</File>
129 </Files>
130 </Project>
131 <Project name="SdlExamples.GfxPrimitives" path="..\\..\\examples\\SdlExamples\\GfxPrimitives" language="C#" type="WinExe" startupObject="SdlExamples.GfxPrimitives">
132 <Configuration name="Debug">
133 <Options>
134 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
135 <OptimizeCode>false</OptimizeCode>
136 <AllowUnsafe>false</AllowUnsafe>
137 <OutputPath>bin\Debug</OutputPath>
138 <DebugInformation>true</DebugInformation>
139 </Options>
140 </Configuration>
141 <Configuration name="Release">
142 <Options>
143 <CompilerDefines>TRACE;WIN32</CompilerDefines>
144 <OptimizeCode>true</OptimizeCode>
145 <AllowUnsafe>false</AllowUnsafe>
146 <OutputPath>bin\Release</OutputPath>
147 <DebugInformation>false</DebugInformation>
148 </Options>
149 </Configuration>
150 <Reference name="System" />
151 <Reference name="Tao.Sdl" />
152 <Files>
153 <File>AssemblyInfo.cs</File>
154 <File>GfxPrimitives.cs</File>
155 </Files>
156 </Project>
157 <Project name="Tao.PostProcess" path="..\\Tao.PostProcess\\" language="C#" type="Exe">
158 <Configuration name="Debug">
159 <Options>
160 <CompilerDefines>DEBUG;TRACE;WIN32</CompilerDefines>
161 <OptimizeCode>false</OptimizeCode>
162 <AllowUnsafe>false</AllowUnsafe>
163 <OutputPath>bin\Debug</OutputPath>
164 <DebugInformation>true</DebugInformation>
165 </Options>
166 </Configuration>
167 <Configuration name="Release">
168 <Options>
169 <CompilerDefines>TRACE;WIN32</CompilerDefines>
170 <OptimizeCode>true</OptimizeCode>
171 <AllowUnsafe>false</AllowUnsafe>
172 <OutputPath>bin\Release</OutputPath>
173 <DebugInformation>false</DebugInformation>
174 </Options>
175 </Configuration>
176 <Reference name="System" />
177 <Files>
178 <File>AssemblyInfo.cs</File>
179 <File>AppMain.cs</File>
180 <File>BuildProcessor.cs</File>
181 <File>Options.cs</File>
182 <File>ReleaseBuildProcessor.cs</File>
183 <File>UsageHelp.cs</File>
184 </Files>
185 </Project>
186 </Solution>
187</Prebuild>
diff --git a/Prebuild/prebuild b/Prebuild/prebuild
new file mode 100644
index 0000000..0dc648d
--- /dev/null
+++ b/Prebuild/prebuild
@@ -0,0 +1,2 @@
1#!/bin/sh
2exec mono [PREFIX]/prebuild.exe "$@"
diff --git a/Prebuild/scripts/Clean.bat b/Prebuild/scripts/Clean.bat
new file mode 100644
index 0000000..39fa685
--- /dev/null
+++ b/Prebuild/scripts/Clean.bat
@@ -0,0 +1,2 @@
1cd ..
2Prebuild.exe /clean /yes /removedir obj /file prebuild.xml /build NET_2_0 /pause
diff --git a/Prebuild/scripts/Help.bat b/Prebuild/scripts/Help.bat
new file mode 100644
index 0000000..a7d3db4
--- /dev/null
+++ b/Prebuild/scripts/Help.bat
@@ -0,0 +1,2 @@
1cd ..
2Prebuild.exe /usage /pause \ No newline at end of file
diff --git a/Prebuild/scripts/MonoDevelop.sh b/Prebuild/scripts/MonoDevelop.sh
new file mode 100644
index 0000000..dae3cf4
--- /dev/null
+++ b/Prebuild/scripts/MonoDevelop.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2prebuild /target monodev /file ../prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/Prebuild.nsi b/Prebuild/scripts/Prebuild.nsi
new file mode 100644
index 0000000..0c6e2bc
--- /dev/null
+++ b/Prebuild/scripts/Prebuild.nsi
@@ -0,0 +1,231 @@
1!verbose 3
2
3!define PRODUCT_NAME "Prebuild"
4!define PRODUCT_VERSION "1.3.1"
5!define PRODUCT_PUBLISHER "Prebuild"
6!define PRODUCT_PACKAGE "prebuild"
7!define PRODUCT_WEB_SITE "http://dnpb.sourceforge.net"
8!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Prebuild"
9!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Prebuild"
10!define PRODUCT_UNINST_ROOT_KEY "HKLM"
11!define PRODUCT_PATH ".."
12
13;!define MUI_WELCOMEFINISHPAGE_BITMAP "PrebuildLogo.bmp"
14;!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
15;!define MUI_UNWELCOMEFINISHPAGE_BITMAP "PrebuildLogo.bmp"
16;!define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
17
18BrandingText "© 2003-2006 David Hudson, http://dnpb.sourceforge.net/"
19SetCompressor lzma
20CRCCheck on
21
22; File Association defines
23;!include "fileassoc.nsh"
24
25; MUI 1.67 compatible ------
26!include "MUI.nsh"
27
28; MUI Settings
29!define MUI_ABORTWARNING
30!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
31!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
32
33;--------------------------------
34;Variables
35
36;--------------------------------
37;Installer Pages
38
39; Welcome page
40!insertmacro MUI_PAGE_WELCOME
41; License page
42!insertmacro MUI_PAGE_LICENSE "..\doc\license.txt"
43; Directory page
44!insertmacro MUI_PAGE_DIRECTORY
45
46; Instfiles page
47!insertmacro MUI_PAGE_INSTFILES
48
49; Finish page
50!insertmacro MUI_PAGE_FINISH
51
52;------------------------------------
53; Uninstaller pages
54!insertmacro MUI_UNPAGE_CONFIRM
55!insertmacro MUI_UNPAGE_INSTFILES
56!insertmacro MUI_UNPAGE_FINISH
57;------------------------------------
58
59; Language files
60!insertmacro MUI_LANGUAGE "English"
61
62; Reserve files
63!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
64
65; MUI end ------
66
67Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
68OutFile "..\${PRODUCT_PACKAGE}-${PRODUCT_VERSION}-setup.exe"
69InstallDir "$PROGRAMFILES\Prebuild"
70InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
71ShowInstDetails show
72ShowUnInstDetails show
73
74; .NET Framework check
75; http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dnnetdep/html/redistdeploy1_1.asp
76; Section "Detecting that the .NET Framework 1.1 is installed"
77Function .onInit
78 ReadRegDWORD $R0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" Install
79 StrCmp $R0 "" 0 CheckPreviousVersion
80 MessageBox MB_OK "Microsoft .NET Framework 1.1 was not found on this system.$\r$\n$\r$\nUnable to continue this installation."
81 Abort
82
83 CheckPreviousVersion:
84 ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName"
85 StrCmp $R0 "" CheckOSVersion 0
86 MessageBox MB_OK "An old version of Prebuild is installed on this computer, please uninstall first.$\r$\n$\r$\nUnable to continue this installation."
87 Abort
88
89 CheckOSVersion:
90 Call IsSupportedWindowsVersion
91 Pop $R0
92 StrCmp $R0 "False" NoAbort 0
93 MessageBox MB_OK "The operating system you are using is not supported by Prebuild (95/98/ME/NT3.x/NT4.x)."
94 Abort
95
96 NoAbort:
97FunctionEnd
98
99Section "Source" SecSource
100 SetOverwrite ifnewer
101 SetOutPath "$INSTDIR\src"
102 File /r /x *.swp /x .svn /x *.xml /x *.csproj /x *.user /x *.build /x *.prjx /x *.mdp /x bin /x obj /x *.nsi ${PRODUCT_PATH}\src\*.*
103
104 ;Store installation folder
105 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
106
107SectionEnd
108
109Section "Runtime" SecRuntime
110 SetOverwrite ifnewer
111 SetOutPath "$INSTDIR"
112 File /r /x *.swp /x .svn /x *.nsi /x src /x *.sln /x *.cmbx /x *.mds ${PRODUCT_PATH}\Prebuild.exe ${PRODUCT_PATH}\prebuild.xml
113
114 ;Store installation folder
115 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
116
117SectionEnd
118
119Section "Documentation" SecDocs
120 SetOverwrite ifnewer
121 SetOutPath "$INSTDIR\doc"
122 File /r /x *.swp /x .svn /x *.exe ${PRODUCT_PATH}\doc\*.*
123
124 ;Store installation folder
125 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
126SectionEnd
127
128Section "Scripts" SecScripts
129 SetOverwrite ifnewer
130 SetOutPath "$INSTDIR\scripts"
131 File /r /x *.swp /x .svn /x *.nsi /x *.exe ${PRODUCT_PATH}\scripts\*.*
132
133 ;Store installation folder
134 WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR
135SectionEnd
136
137;Language strings
138
139Section -AdditionalIcons
140 WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
141SectionEnd
142
143Section -Post
144 WriteUninstaller "$INSTDIR\uninst.exe"
145 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
146 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
147 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
148 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
149 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
150SectionEnd
151
152Section Uninstall
153
154 DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
155 DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
156 RMDir /r "$INSTDIR"
157
158SectionEnd
159
160; GetWindowsVersion, taken from NSIS help, modified for our purposes
161Function IsSupportedWindowsVersion
162
163 Push $R0
164 Push $R1
165
166 ReadRegStr $R0 HKLM \
167 "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
168
169 IfErrors 0 lbl_winnt
170
171 ; we are not NT
172 ReadRegStr $R0 HKLM \
173 "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
174
175 StrCpy $R1 $R0 1
176 StrCmp $R1 '4' 0 lbl_error
177
178 StrCpy $R1 $R0 3
179
180 StrCmp $R1 '4.0' lbl_win32_95
181 StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
182
183 lbl_win32_95:
184 StrCpy $R0 'False'
185 Goto lbl_done
186
187 lbl_win32_98:
188 StrCpy $R0 'False'
189 Goto lbl_done
190
191 lbl_win32_ME:
192 StrCpy $R0 'False'
193 Goto lbl_done
194
195 lbl_winnt:
196
197 StrCpy $R1 $R0 1
198
199 StrCmp $R1 '3' lbl_winnt_x
200 StrCmp $R1 '4' lbl_winnt_x
201
202 StrCpy $R1 $R0 3
203
204 StrCmp $R1 '5.0' lbl_winnt_2000
205 StrCmp $R1 '5.1' lbl_winnt_XP
206 StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
207
208 lbl_winnt_x:
209 StrCpy $R0 'False'
210 Goto lbl_done
211
212 lbl_winnt_2000:
213 Strcpy $R0 'True'
214 Goto lbl_done
215
216 lbl_winnt_XP:
217 Strcpy $R0 'True'
218 Goto lbl_done
219
220 lbl_winnt_2003:
221 Strcpy $R0 'True'
222 Goto lbl_done
223
224 lbl_error:
225 Strcpy $R0 'False'
226 lbl_done:
227
228 Pop $R1
229 Exch $R0
230
231FunctionEnd
diff --git a/Prebuild/scripts/SharpDevelop.bat b/Prebuild/scripts/SharpDevelop.bat
new file mode 100644
index 0000000..483d9c9
--- /dev/null
+++ b/Prebuild/scripts/SharpDevelop.bat
@@ -0,0 +1,4 @@
1@rem Generates a combine (.cmbx) and a set of project files (.prjx)
2@rem for SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx)
3cd ..
4Prebuild.exe /target sharpdev /file prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/SharpDevelop2.bat b/Prebuild/scripts/SharpDevelop2.bat
new file mode 100644
index 0000000..4ca0272
--- /dev/null
+++ b/Prebuild/scripts/SharpDevelop2.bat
@@ -0,0 +1,4 @@
1@rem Generates a combine (.cmbx) and a set of project files (.prjx)
2@rem for SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx)
3cd ..
4Prebuild.exe /target sharpdev2 /file prebuild.xml /pause
diff --git a/Prebuild/scripts/VS2002.bat b/Prebuild/scripts/VS2002.bat
new file mode 100644
index 0000000..a11740e
--- /dev/null
+++ b/Prebuild/scripts/VS2002.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj)
2@rem for Microsoft Visual Studio .NET 2002
3cd ..
4Prebuild.exe /target vs2002 /file prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/VS2003.bat b/Prebuild/scripts/VS2003.bat
new file mode 100644
index 0000000..1be57f8
--- /dev/null
+++ b/Prebuild/scripts/VS2003.bat
@@ -0,0 +1,4 @@
1@rem Generates a solution (.sln) and a set of project files (.csproj)
2@rem for Microsoft Visual Studio .NET 2002
3cd ..
4Prebuild.exe /target vs2003 /file prebuild.xml /build NET_1_1 /pause
diff --git a/Prebuild/scripts/VS2005.bat b/Prebuild/scripts/VS2005.bat
new file mode 100644
index 0000000..86ad3fc
--- /dev/null
+++ b/Prebuild/scripts/VS2005.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 2005
3cd ..
4Prebuild.exe /target vs2005 /file prebuild.xml /build NET_2_0 /pause
diff --git a/Prebuild/scripts/autotools.bat b/Prebuild/scripts/autotools.bat
new file mode 100644
index 0000000..1fd3469
--- /dev/null
+++ b/Prebuild/scripts/autotools.bat
@@ -0,0 +1,4 @@
1@rem Generates Makefiles
2@rem for autotools
3cd ..
4Prebuild.exe /target autotools /file prebuild.xml /pause
diff --git a/Prebuild/scripts/autotools.sh b/Prebuild/scripts/autotools.sh
new file mode 100644
index 0000000..18cd46f
--- /dev/null
+++ b/Prebuild/scripts/autotools.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2prebuild /target autotools /file ../prebuild.xml /build NET_2_0 /pause
diff --git a/Prebuild/scripts/nant.bat b/Prebuild/scripts/nant.bat
new file mode 100644
index 0000000..2a6ae60
--- /dev/null
+++ b/Prebuild/scripts/nant.bat
@@ -0,0 +1,4 @@
1@rem Generates a .build files
2@rem for NAnt
3cd ..
4Prebuild.exe /target nant /file prebuild.xml /pause
diff --git a/Prebuild/scripts/nant.sh b/Prebuild/scripts/nant.sh
new file mode 100644
index 0000000..54a8254
--- /dev/null
+++ b/Prebuild/scripts/nant.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2prebuild /target nant /file ../prebuild.xml /pause
diff --git a/Prebuild/src/App.ico b/Prebuild/src/App.ico
new file mode 100644
index 0000000..ac4ea6f
--- /dev/null
+++ b/Prebuild/src/App.ico
Binary files differ
diff --git a/Prebuild/src/Core/Attributes/DataNodeAttribute.cs b/Prebuild/src/Core/Attributes/DataNodeAttribute.cs
new file mode 100644
index 0000000..dbdaf0b
--- /dev/null
+++ b/Prebuild/src/Core/Attributes/DataNodeAttribute.cs
@@ -0,0 +1,81 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Collections.Specialized;
37
38namespace Prebuild.Core.Attributes
39{
40 /// <summary>
41 ///
42 /// </summary>
43 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
44 public sealed class DataNodeAttribute : Attribute
45 {
46 #region Fields
47
48 private string m_Name = "unknown";
49
50 #endregion
51
52 #region Constructors
53
54 /// <summary>
55 /// Initializes a new instance of the <see cref="DataNodeAttribute"/> class.
56 /// </summary>
57 /// <param name="name">The name.</param>
58 public DataNodeAttribute(string name)
59 {
60 m_Name = name;
61 }
62
63 #endregion
64
65 #region Properties
66
67 /// <summary>
68 /// Gets the name.
69 /// </summary>
70 /// <value>The name.</value>
71 public string Name
72 {
73 get
74 {
75 return m_Name;
76 }
77 }
78
79 #endregion
80 }
81}
diff --git a/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs b/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs
new file mode 100644
index 0000000..edda56d
--- /dev/null
+++ b/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs
@@ -0,0 +1,80 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36
37namespace Prebuild.Core.Attributes
38{
39 /// <summary>
40 ///
41 /// </summary>
42 [AttributeUsage(AttributeTargets.Field)]
43 public sealed class OptionNodeAttribute : Attribute
44 {
45 #region Fields
46
47 private string m_NodeName;
48
49 #endregion
50
51 #region Constructors
52
53 /// <summary>
54 /// Initializes a new instance of the <see cref="OptionNodeAttribute"/> class.
55 /// </summary>
56 /// <param name="nodeName">Name of the node.</param>
57 public OptionNodeAttribute(string nodeName)
58 {
59 m_NodeName = nodeName;
60 }
61
62 #endregion
63
64 #region Properties
65
66 /// <summary>
67 /// Gets the name of the node.
68 /// </summary>
69 /// <value>The name of the node.</value>
70 public string NodeName
71 {
72 get
73 {
74 return m_NodeName;
75 }
76 }
77
78 #endregion
79 }
80}
diff --git a/Prebuild/src/Core/Attributes/TargetAttribute.cs b/Prebuild/src/Core/Attributes/TargetAttribute.cs
new file mode 100644
index 0000000..985f180
--- /dev/null
+++ b/Prebuild/src/Core/Attributes/TargetAttribute.cs
@@ -0,0 +1,80 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36
37namespace Prebuild.Core.Attributes
38{
39 /// <summary>
40 ///
41 /// </summary>
42 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
43 public sealed class TargetAttribute : Attribute
44 {
45 #region Fields
46
47 private string m_Name;
48
49 #endregion
50
51 #region Constructors
52
53 /// <summary>
54 /// Initializes a new instance of the <see cref="TargetAttribute"/> class.
55 /// </summary>
56 /// <param name="name">The name.</param>
57 public TargetAttribute(string name)
58 {
59 m_Name = name;
60 }
61
62 #endregion
63
64 #region Properties
65
66 /// <summary>
67 /// Gets the name.
68 /// </summary>
69 /// <value>The name.</value>
70 public string Name
71 {
72 get
73 {
74 return m_Name;
75 }
76 }
77
78 #endregion
79 }
80}
diff --git a/Prebuild/src/Core/FatalException.cs b/Prebuild/src/Core/FatalException.cs
new file mode 100644
index 0000000..92aad3d
--- /dev/null
+++ b/Prebuild/src/Core/FatalException.cs
@@ -0,0 +1,94 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Runtime.Serialization;
37
38namespace Prebuild.Core
39{
40 /// <summary>
41 ///
42 /// </summary>
43 [Serializable()]
44 public class FatalException : Exception
45 {
46 #region Constructors
47
48
49 /// <summary>
50 /// Initializes a new instance of the <see cref="FatalException"/> class.
51 /// </summary>
52 public FatalException()
53 {
54 }
55
56 /// <summary>
57 /// Initializes a new instance of the <see cref="FatalException"/> class.
58 /// </summary>
59 /// <param name="format">The format.</param>
60 /// <param name="args">The args.</param>
61 public FatalException(string format, params object[] args)
62 : base(String.Format(format, args))
63 {
64 }
65
66 /// <summary>
67 /// Exception with specified string
68 /// </summary>
69 /// <param name="message">Exception message</param>
70 public FatalException(string message): base(message)
71 {
72 }
73
74 /// <summary>
75 ///
76 /// </summary>
77 /// <param name="message"></param>
78 /// <param name="exception"></param>
79 public FatalException(string message, Exception exception) : base(message, exception)
80 {
81 }
82
83 /// <summary>
84 ///
85 /// </summary>
86 /// <param name="info"></param>
87 /// <param name="context"></param>
88 protected FatalException(SerializationInfo info, StreamingContext context) : base( info, context )
89 {
90 }
91
92 #endregion
93 }
94}
diff --git a/Prebuild/src/Core/Interfaces/IDataNode.cs b/Prebuild/src/Core/Interfaces/IDataNode.cs
new file mode 100644
index 0000000..0bad97c
--- /dev/null
+++ b/Prebuild/src/Core/Interfaces/IDataNode.cs
@@ -0,0 +1,56 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Xml;
37
38namespace Prebuild.Core.Interfaces
39{
40 /// <summary>
41 ///
42 /// </summary>
43 public interface IDataNode
44 {
45 /// <summary>
46 /// Gets or sets the parent.
47 /// </summary>
48 /// <value>The parent.</value>
49 IDataNode Parent { get; set; }
50 /// <summary>
51 /// Parses the specified node.
52 /// </summary>
53 /// <param name="node">The node.</param>
54 void Parse(XmlNode node);
55 }
56}
diff --git a/Prebuild/src/Core/Interfaces/ITarget.cs b/Prebuild/src/Core/Interfaces/ITarget.cs
new file mode 100644
index 0000000..dac6cd6
--- /dev/null
+++ b/Prebuild/src/Core/Interfaces/ITarget.cs
@@ -0,0 +1,60 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36
37namespace Prebuild.Core.Interfaces
38{
39 /// <summary>
40 ///
41 /// </summary>
42 public interface ITarget
43 {
44 /// <summary>
45 /// Writes the specified kern.
46 /// </summary>
47 /// <param name="kern">The kern.</param>
48 void Write(Kernel kern);
49 /// <summary>
50 /// Cleans the specified kern.
51 /// </summary>
52 /// <param name="kern">The kern.</param>
53 void Clean(Kernel kern);
54 /// <summary>
55 /// Gets the name.
56 /// </summary>
57 /// <value>The name.</value>
58 string Name { get; }
59 }
60} \ No newline at end of file
diff --git a/Prebuild/src/Core/Kernel.cs b/Prebuild/src/Core/Kernel.cs
new file mode 100644
index 0000000..3117e7c
--- /dev/null
+++ b/Prebuild/src/Core/Kernel.cs
@@ -0,0 +1,758 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: robloach $
30 * $Date: 2006-09-26 00:30:53 +0200 (ti, 26 sep 2006) $
31 * $Revision: 165 $
32 */
33#endregion
34
35using System;
36using System.Diagnostics;
37using System.Collections;
38using System.Collections.Specialized;
39using System.IO;
40using System.Reflection;
41using System.Xml;
42using System.Xml.Schema;
43using System.Text;
44
45using Prebuild.Core.Attributes;
46using Prebuild.Core.Interfaces;
47using Prebuild.Core.Nodes;
48using Prebuild.Core.Parse;
49using Prebuild.Core.Utilities;
50
51namespace Prebuild.Core
52{
53 /// <summary>
54 ///
55 /// </summary>
56 public class Kernel : IDisposable
57 {
58 #region Inner Classes
59
60 private struct NodeEntry
61 {
62 public Type Type;
63 public DataNodeAttribute Attribute;
64 }
65
66 #endregion
67
68 #region Fields
69
70 private static Kernel m_Instance = new Kernel();
71
72 /// <summary>
73 /// This must match the version of the schema that is embeeded
74 /// </summary>
75 private static string m_SchemaVersion = "1.7";
76 private static string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd";
77 private static string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema;
78 bool disposed;
79 private Version m_Version;
80 private string m_Revision = "";
81 private CommandLineCollection m_CommandLine;
82 private Log m_Log;
83 private CurrentDirectory m_CurrentWorkingDirectory;
84 private XmlSchemaCollection m_Schemas;
85
86 private Hashtable m_Targets;
87 private Hashtable m_Nodes;
88
89 ArrayList m_Solutions;
90 string m_Target;
91 string m_Clean;
92 string[] m_RemoveDirectories;
93 string m_CurrentFile;
94 bool m_PauseAfterFinish;
95 string[] m_ProjectGroups;
96 StringCollection m_Refs;
97
98
99 #endregion
100
101 #region Constructors
102
103 private Kernel()
104 {
105 }
106
107 #endregion
108
109 #region Properties
110
111 /// <summary>
112 /// Gets a value indicating whether [pause after finish].
113 /// </summary>
114 /// <value><c>true</c> if [pause after finish]; otherwise, <c>false</c>.</value>
115 public bool PauseAfterFinish
116 {
117 get
118 {
119 return m_PauseAfterFinish;
120 }
121 }
122
123 /// <summary>
124 /// Gets the instance.
125 /// </summary>
126 /// <value>The instance.</value>
127 public static Kernel Instance
128 {
129 get
130 {
131 return m_Instance;
132 }
133 }
134
135 /// <summary>
136 /// Gets the version.
137 /// </summary>
138 /// <value>The version.</value>
139 public string Version
140 {
141 get
142 {
143 return String.Format("{0}.{1}.{2}{3}", m_Version.Major, m_Version.Minor, m_Version.Build, m_Revision);
144 }
145 }
146
147 /// <summary>
148 /// Gets the command line.
149 /// </summary>
150 /// <value>The command line.</value>
151 public CommandLineCollection CommandLine
152 {
153 get
154 {
155 return m_CommandLine;
156 }
157 }
158
159 /// <summary>
160 /// Gets the targets.
161 /// </summary>
162 /// <value>The targets.</value>
163 public Hashtable Targets
164 {
165 get
166 {
167 return m_Targets;
168 }
169 }
170
171 /// <summary>
172 /// Gets the log.
173 /// </summary>
174 /// <value>The log.</value>
175 public Log Log
176 {
177 get
178 {
179 return m_Log;
180 }
181 }
182
183 /// <summary>
184 /// Gets the current working directory.
185 /// </summary>
186 /// <value>The current working directory.</value>
187 public CurrentDirectory CurrentWorkingDirectory
188 {
189 get
190 {
191 return m_CurrentWorkingDirectory;
192 }
193 }
194
195 /// <summary>
196 /// Gets the solutions.
197 /// </summary>
198 /// <value>The solutions.</value>
199 public ArrayList Solutions
200 {
201 get
202 {
203 return m_Solutions;
204 }
205 }
206
207 #endregion
208
209 #region Private Methods
210
211 private void RemoveDirectories(string rootDir, string[] dirNames)
212 {
213 foreach(string dir in Directory.GetDirectories(rootDir))
214 {
215 string simpleName = Path.GetFileName(dir);
216
217 if(Array.IndexOf(dirNames, simpleName) != -1)
218 {
219 //delete if the name matches one of the directory names to delete
220 string fullDirPath = Path.GetFullPath(dir);
221 Directory.Delete(fullDirPath,true);
222 }
223 else//not a match, so check children
224 {
225 RemoveDirectories(dir,dirNames);
226 //recurse, checking children for them
227 }
228 }
229 }
230
231// private void RemoveDirectoryMatches(string rootDir, string dirPattern)
232// {
233// foreach(string dir in Directory.GetDirectories(rootDir))
234// {
235// foreach(string match in Directory.GetDirectories(dir))
236// {//delete all child directories that match
237// Directory.Delete(Path.GetFullPath(match),true);
238// }
239// //recure through the rest checking for nested matches to delete
240// RemoveDirectoryMatches(dir,dirPattern);
241// }
242// }
243
244 private void LoadSchema()
245 {
246 Assembly assembly = this.GetType().Assembly;
247 Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema);
248 if(stream == null)
249 {
250 //try without the default namespace prepending to it in case was compiled with SharpDevelop or MonoDevelop instead of Visual Studio .NET
251 stream = assembly.GetManifestResourceStream(m_Schema);
252 if(stream == null)
253 {
254 throw new System.Reflection.TargetException(string.Format("Could not find the scheme embedded resource file '{0}'.", m_Schema));
255 }
256 }
257 XmlReader schema = new XmlTextReader(stream);
258
259 m_Schemas = new XmlSchemaCollection();
260 m_Schemas.Add(m_SchemaURI, schema);
261 }
262
263 private void CacheVersion()
264 {
265 m_Version = Assembly.GetEntryAssembly().GetName().Version;
266 }
267
268 private void CacheTargets(Assembly assm)
269 {
270 foreach(Type t in assm.GetTypes())
271 {
272 TargetAttribute ta = (TargetAttribute)Helper.CheckType(t, typeof(TargetAttribute), typeof(ITarget));
273 if(ta == null)
274 {
275 continue;
276 }
277
278 ITarget target = (ITarget)assm.CreateInstance(t.FullName);
279 if(target == null)
280 {
281 throw new MissingMethodException("Could not create ITarget instance");
282 }
283
284 m_Targets[ta.Name] = target;
285 }
286 }
287
288 private void CacheNodeTypes(Assembly assm)
289 {
290 foreach(Type t in assm.GetTypes())
291 {
292 DataNodeAttribute dna = (DataNodeAttribute)Helper.CheckType(t, typeof(DataNodeAttribute), typeof(IDataNode));
293 if(dna == null)
294 {
295 continue;
296 }
297
298 NodeEntry ne = new NodeEntry();
299 ne.Type = t;
300 ne.Attribute = dna;
301 m_Nodes[dna.Name] = ne;
302 }
303 }
304
305 private void LogBanner()
306 {
307 m_Log.Write("Prebuild v" + this.Version);
308 m_Log.Write("Copyright (c) Matthew Holmes, Dan Moorehead and David Hudson");
309 m_Log.Write("See 'prebuild /usage' for help");
310 m_Log.Write();
311 }
312
313 private void ProcessFile(string file)
314 {
315 m_CurrentWorkingDirectory.Push();
316
317 string path = file;
318 try
319 {
320 try
321 {
322 path = Helper.ResolvePath(path);
323 }
324 catch(ArgumentException)
325 {
326 m_Log.Write("Could not open Prebuild file: " + path);
327 m_CurrentWorkingDirectory.Pop();
328 return;
329 }
330
331 m_CurrentFile = path;
332 Helper.SetCurrentDir(Path.GetDirectoryName(path));
333
334
335 XmlTextReader reader = new XmlTextReader(path);
336
337 Core.Parse.Preprocessor pre = new Core.Parse.Preprocessor();
338
339 //register command line arguments as XML variables
340 IDictionaryEnumerator dict = m_CommandLine.GetEnumerator();
341 while (dict.MoveNext())
342 {
343 string name = dict.Key.ToString().Trim();
344 if (name.Length > 0)
345 pre.RegisterVariable(name, dict.Value.ToString());
346 }
347
348 string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML
349
350
351 XmlDocument doc = new XmlDocument();
352 try
353 {
354 XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml)));
355
356 //validate while reading from string into XmlDocument DOM structure in memory
357 foreach(XmlSchema schema in m_Schemas)
358 {
359 validator.Schemas.Add(schema);
360 }
361 doc.Load(validator);
362 }
363 catch(XmlException e)
364 {
365 throw new XmlException(e.ToString());
366 }
367
368 //is there a purpose to writing it? An syntax/schema problem would have been found during pre.Process() and reported with details
369 if(m_CommandLine.WasPassed("ppo"))
370 {
371 string ppoFile = m_CommandLine["ppo"];
372 if(ppoFile == null || ppoFile.Trim().Length < 1)
373 {
374 ppoFile = "preprocessed.xml";
375 }
376
377 StreamWriter writer = null;
378 try
379 {
380 writer = new StreamWriter(ppoFile);
381 writer.Write(xml);
382 }
383 catch(IOException ex)
384 {
385 Console.WriteLine("Could not write PPO file '{0}': {1}", ppoFile, ex.Message);
386 }
387 finally
388 {
389 if(writer != null)
390 {
391 writer.Close();
392 }
393 }
394 return;
395 }
396 //start reading the xml config file
397 XmlElement rootNode = doc.DocumentElement;
398 //string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0");
399 Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false);
400
401 foreach(XmlNode node in rootNode.ChildNodes)//solutions or if pre-proc instructions
402 {
403 IDataNode dataNode = ParseNode(node, null);
404 if(dataNode is ProcessNode)
405 {
406 ProcessNode proc = (ProcessNode)dataNode;
407 if(proc.IsValid)
408 {
409 ProcessFile(proc.Path);
410 }
411 }
412 else if(dataNode is SolutionNode)
413 {
414 m_Solutions.Add(dataNode);
415 }
416 }
417 }
418 catch(XmlSchemaException xse)
419 {
420 m_Log.Write("XML validation error at line {0} in {1}:\n\n{2}",
421 xse.LineNumber, path, xse.Message);
422 }
423 finally
424 {
425 m_CurrentWorkingDirectory.Pop();
426 }
427 }
428
429 #endregion
430
431 #region Public Methods
432
433 /// <summary>
434 /// Allows the project.
435 /// </summary>
436 /// <param name="projectGroupsFlags">The project groups flags.</param>
437 /// <returns></returns>
438 public bool AllowProject(string projectGroupsFlags)
439 {
440 if(m_ProjectGroups != null && m_ProjectGroups.Length > 0)
441 {
442 if(projectGroupsFlags != null && projectGroupsFlags.Length == 0)
443 {
444 foreach(string group in projectGroupsFlags.Split('|'))
445 {
446 if(Array.IndexOf(m_ProjectGroups, group) != -1) //if included in the filter list
447 {
448 return true;
449 }
450 }
451 }
452 return false;//not included in the list or no groups specified for the project
453 }
454 return true;//no filter specified in the command line args
455 }
456
457 /// <summary>
458 /// Gets the type of the node.
459 /// </summary>
460 /// <param name="node">The node.</param>
461 /// <returns></returns>
462 public Type GetNodeType(XmlNode node)
463 {
464 if( node == null )
465 {
466 throw new ArgumentNullException("node");
467 }
468 if(!m_Nodes.ContainsKey(node.Name))
469 {
470 return null;
471 }
472
473 NodeEntry ne = (NodeEntry)m_Nodes[node.Name];
474 return ne.Type;
475 }
476
477 /// <summary>
478 ///
479 /// </summary>
480 /// <param name="node"></param>
481 /// <param name="parent"></param>
482 /// <returns></returns>
483 public IDataNode ParseNode(XmlNode node, IDataNode parent)
484 {
485 return ParseNode(node, parent, null);
486 }
487
488 //Create an instance of the data node type that is mapped to the name of the xml DOM node
489 /// <summary>
490 /// Parses the node.
491 /// </summary>
492 /// <param name="node">The node.</param>
493 /// <param name="parent">The parent.</param>
494 /// <param name="preNode">The pre node.</param>
495 /// <returns></returns>
496 public IDataNode ParseNode(XmlNode node, IDataNode parent, IDataNode preNode)
497 {
498 IDataNode dataNode = null;
499
500 try
501 {
502 if( node == null )
503 {
504 throw new ArgumentNullException("node");
505 }
506 if(preNode == null)
507 {
508 if(!m_Nodes.ContainsKey(node.Name))
509 {
510 //throw new XmlException("Unknown XML node: " + node.Name);
511 return null;
512 }
513
514 NodeEntry ne = (NodeEntry)m_Nodes[node.Name];
515 Type type = ne.Type;
516 //DataNodeAttribute dna = ne.Attribute;
517
518 dataNode = (IDataNode)type.Assembly.CreateInstance(type.FullName);
519 if(dataNode == null)
520 {
521 throw new System.Reflection.TargetException("Could not create new parser instance: " + type.FullName);
522 }
523 }
524 else
525 dataNode = preNode;
526
527 dataNode.Parent = parent;
528 dataNode.Parse(node);
529 }
530 catch(WarningException wex)
531 {
532 m_Log.Write(LogType.Warning, wex.Message);
533 return null;
534 }
535 catch(FatalException fex)
536 {
537 m_Log.WriteException(LogType.Error, fex);
538 throw;
539 }
540 catch(Exception ex)
541 {
542 m_Log.WriteException(LogType.Error, ex);
543 throw;
544 }
545
546 return dataNode;
547 }
548
549 /// <summary>
550 /// Initializes the specified target.
551 /// </summary>
552 /// <param name="target">The target.</param>
553 /// <param name="args">The args.</param>
554 public void Initialize(LogTargets target, string[] args)
555 {
556 m_Targets = new Hashtable();
557 CacheTargets(this.GetType().Assembly);
558 m_Nodes = new Hashtable();
559 CacheNodeTypes(this.GetType().Assembly);
560 CacheVersion();
561
562 m_CommandLine = new CommandLineCollection(args);
563
564 string logFile = null;
565 if(m_CommandLine.WasPassed("log"))
566 {
567 logFile = m_CommandLine["log"];
568
569 if(logFile != null && logFile.Length == 0)
570 {
571 logFile = "Prebuild.log";
572 }
573 }
574 else
575 {
576 target = target & ~LogTargets.File; //dont output to a file
577 }
578
579 m_Log = new Log(target, logFile);
580 LogBanner();
581
582 m_CurrentWorkingDirectory = new CurrentDirectory();
583
584 m_Target = m_CommandLine["target"];
585 m_Clean = m_CommandLine["clean"];
586 string removeDirs = m_CommandLine["removedir"];
587 if(removeDirs != null && removeDirs.Length == 0)
588 {
589 m_RemoveDirectories = removeDirs.Split('|');
590 }
591
592 string flags = m_CommandLine["allowedgroups"];//allows filtering by specifying a pipe-delimited list of groups to include
593 if(flags != null && flags.Length == 0)
594 {
595 m_ProjectGroups = flags.Split('|');
596 }
597 m_PauseAfterFinish = m_CommandLine.WasPassed("pause");
598
599 LoadSchema();
600
601 m_Solutions = new ArrayList();
602 m_Refs = new StringCollection();
603 }
604
605 /// <summary>
606 /// Processes this instance.
607 /// </summary>
608 public void Process()
609 {
610 bool perfomedOtherTask = false;
611 if(m_RemoveDirectories != null && m_RemoveDirectories.Length > 0)
612 {
613 try
614 {
615 RemoveDirectories(".",m_RemoveDirectories);
616 }
617 catch(IOException e)
618 {
619 m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
620 m_Log.WriteException(LogType.Error,e);
621 }
622 catch(UnauthorizedAccessException e)
623 {
624 m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
625 m_Log.WriteException(LogType.Error,e);
626 }
627 perfomedOtherTask = true;
628 }
629
630 if(m_Target != null && m_Clean != null)
631 {
632 m_Log.Write(LogType.Error, "The options /target and /clean cannot be passed together");
633 return;
634 }
635 else if(m_Target == null && m_Clean == null)
636 {
637 if(perfomedOtherTask) //finished
638 {
639 return;
640 }
641 m_Log.Write(LogType.Error, "Must pass either /target or /clean to process a Prebuild file");
642 return;
643 }
644
645 string file = "./prebuild.xml";
646 if(m_CommandLine.WasPassed("file"))
647 {
648 file = m_CommandLine["file"];
649 }
650
651 ProcessFile(file);
652
653 string target = (m_Target != null ? m_Target.ToLower() : m_Clean.ToLower());
654 bool clean = (m_Target == null);
655 if(clean && target != null && target.Length == 0)
656 {
657 target = "all";
658 }
659 if(clean && target == "all")//default to all if no target was specified for clean
660 {
661 //check if they passed yes
662 if (!m_CommandLine.WasPassed("yes"))
663 {
664 Console.WriteLine("WARNING: This operation will clean ALL project files for all targets, are you sure? (y/n):");
665 string ret = Console.ReadLine();
666 if(ret == null)
667 {
668 return;
669 }
670 ret = ret.Trim().ToLower();
671 if((ret.ToLower() != "y" && ret.ToLower() != "yes"))
672 {
673 return;
674 }
675 }
676 //clean all targets (just cleaning vs2002 target didn't clean nant)
677 foreach(ITarget targ in m_Targets.Values)
678 {
679 targ.Clean(this);
680 }
681 }
682 else
683 {
684 ITarget targ = (ITarget)m_Targets[target];
685
686 if(clean)
687 {
688 targ.Clean(this);
689 }
690 else
691 {
692 targ.Write(this);
693 }
694 }
695
696 m_Log.Flush();
697 }
698
699 #endregion
700
701 #region IDisposable Members
702
703 /// <summary>
704 ///
705 /// </summary>
706 public void Dispose()
707 {
708 Dispose(true);
709 GC.SuppressFinalize(this);
710 }
711
712 /// <summary>
713 /// Dispose objects
714 /// </summary>
715 /// <param name="disposing">
716 /// If true, it will dispose close the handle
717 /// </param>
718 /// <remarks>
719 /// Will dispose managed and unmanaged resources.
720 /// </remarks>
721 protected virtual void Dispose(bool disposing)
722 {
723 if (!this.disposed)
724 {
725 if (disposing)
726 {
727 if (this.m_Log != null)
728 {
729 this.m_Log.Close();
730 this.m_Log = null;
731 }
732 }
733 }
734 this.disposed = true;
735 }
736
737 /// <summary>
738 ///
739 /// </summary>
740 ~Kernel()
741 {
742 this.Dispose(false);
743 }
744
745 /// <summary>
746 /// Closes and destroys this object
747 /// </summary>
748 /// <remarks>
749 /// Same as Dispose(true)
750 /// </remarks>
751 public void Close()
752 {
753 Dispose();
754 }
755
756 #endregion
757 }
758} \ No newline at end of file
diff --git a/Prebuild/src/Core/Nodes/ConfigurationNode.cs b/Prebuild/src/Core/Nodes/ConfigurationNode.cs
new file mode 100644
index 0000000..390794f
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ConfigurationNode.cs
@@ -0,0 +1,187 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Xml;
37
38using Prebuild.Core.Attributes;
39using Prebuild.Core.Interfaces;
40using Prebuild.Core.Utilities;
41
42namespace Prebuild.Core.Nodes
43{
44 /// <summary>
45 ///
46 /// </summary>
47 [DataNode("Configuration")]
48 public class ConfigurationNode : DataNode, ICloneable, IComparable
49 {
50 #region Fields
51
52 private string m_Name = "unknown";
53 private OptionsNode m_Options;
54
55 #endregion
56
57 #region Constructors
58
59 /// <summary>
60 /// Initializes a new instance of the <see cref="ConfigurationNode"/> class.
61 /// </summary>
62 public ConfigurationNode()
63 {
64 m_Options = new OptionsNode();
65 }
66
67 #endregion
68
69 #region Properties
70
71 /// <summary>
72 /// Gets or sets the parent.
73 /// </summary>
74 /// <value>The parent.</value>
75 public override IDataNode Parent
76 {
77 get
78 {
79 return base.Parent;
80 }
81 set
82 {
83 base.Parent = value;
84 if(base.Parent is SolutionNode)
85 {
86 SolutionNode node = (SolutionNode)base.Parent;
87 if(node != null && node.Options != null)
88 {
89 node.Options.CopyTo(m_Options);
90 }
91 }
92 }
93 }
94
95 /// <summary>
96 /// Gets the name.
97 /// </summary>
98 /// <value>The name.</value>
99 public string Name
100 {
101 get
102 {
103 return m_Name;
104 }
105 }
106
107 /// <summary>
108 /// Gets or sets the options.
109 /// </summary>
110 /// <value>The options.</value>
111 public OptionsNode Options
112 {
113 get
114 {
115 return m_Options;
116 }
117 set
118 {
119 m_Options = value;
120 }
121 }
122
123 #endregion
124
125 #region Public Methods
126
127 /// <summary>
128 /// Parses the specified node.
129 /// </summary>
130 /// <param name="node">The node.</param>
131 public override void Parse(XmlNode node)
132 {
133 m_Name = Helper.AttributeValue(node, "name", m_Name);
134 if( node == null )
135 {
136 throw new ArgumentNullException("node");
137 }
138 foreach(XmlNode child in node.ChildNodes)
139 {
140 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
141 if(dataNode is OptionsNode)
142 {
143 ((OptionsNode)dataNode).CopyTo(m_Options);
144 }
145 }
146 }
147
148 /// <summary>
149 /// Copies to.
150 /// </summary>
151 /// <param name="conf">The conf.</param>
152 public void CopyTo(ConfigurationNode conf)
153 {
154 m_Options.CopyTo(conf.m_Options);
155 }
156
157 #endregion
158
159 #region ICloneable Members
160
161 /// <summary>
162 /// Creates a new object that is a copy of the current instance.
163 /// </summary>
164 /// <returns>
165 /// A new object that is a copy of this instance.
166 /// </returns>
167 public object Clone()
168 {
169 ConfigurationNode ret = new ConfigurationNode();
170 ret.m_Name = m_Name;
171 m_Options.CopyTo(ret.m_Options);
172 return ret;
173 }
174
175 #endregion
176
177 #region IComparable Members
178
179 public int CompareTo(object obj)
180 {
181 ConfigurationNode that = (ConfigurationNode) obj;
182 return this.m_Name.CompareTo(that.m_Name);
183 }
184
185 #endregion
186 }
187}
diff --git a/Prebuild/src/Core/Nodes/DataNode.cs b/Prebuild/src/Core/Nodes/DataNode.cs
new file mode 100644
index 0000000..ef5f7ee
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/DataNode.cs
@@ -0,0 +1,82 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Xml;
37
38using Prebuild.Core.Attributes;
39using Prebuild.Core.Interfaces;
40
41namespace Prebuild.Core.Nodes
42{
43 /// <summary>
44 ///
45 /// </summary>
46 public class DataNode : IDataNode
47 {
48 #region Fields
49
50 private IDataNode parent;
51
52 #endregion
53
54 #region IDataNode Members
55
56 /// <summary>
57 /// Gets or sets the parent.
58 /// </summary>
59 /// <value>The parent.</value>
60 public virtual IDataNode Parent
61 {
62 get
63 {
64 return parent;
65 }
66 set
67 {
68 parent = value;
69 }
70 }
71
72 /// <summary>
73 /// Parses the specified node.
74 /// </summary>
75 /// <param name="node">The node.</param>
76 public virtual void Parse(XmlNode node)
77 {
78 }
79
80 #endregion
81 }
82}
diff --git a/Prebuild/src/Core/Nodes/ExcludeNode.cs b/Prebuild/src/Core/Nodes/ExcludeNode.cs
new file mode 100644
index 0000000..bfcebca
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ExcludeNode.cs
@@ -0,0 +1,85 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-31 16:35:39 +0100 (ti, 31 jan 2006) $
31 * $Revision: 74 $
32 */
33#endregion
34
35using System;
36using System.Xml;
37
38using Prebuild.Core.Attributes;
39using Prebuild.Core.Interfaces;
40using Prebuild.Core.Utilities;
41
42namespace Prebuild.Core.Nodes
43{
44 /// <summary>
45 ///
46 /// </summary>
47 [DataNode("Exclude")]
48 public class ExcludeNode : DataNode
49 {
50 #region Fields
51
52 private string m_Name = "unknown";
53
54 #endregion
55
56 #region Properties
57
58 /// <summary>
59 /// Gets the name.
60 /// </summary>
61 /// <value>The name.</value>
62 public string Name
63 {
64 get
65 {
66 return m_Name;
67 }
68 }
69
70 #endregion
71
72 #region Public Methods
73
74 /// <summary>
75 /// Parses the specified node.
76 /// </summary>
77 /// <param name="node">The node.</param>
78 public override void Parse(XmlNode node)
79 {
80 m_Name = Helper.AttributeValue(node, "name", m_Name);
81 }
82
83 #endregion
84 }
85}
diff --git a/Prebuild/src/Core/Nodes/FileNode.cs b/Prebuild/src/Core/Nodes/FileNode.cs
new file mode 100644
index 0000000..de3b69e
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/FileNode.cs
@@ -0,0 +1,238 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2007-01-08 17:55:40 +0100 (må, 08 jan 2007) $
31 * $Revision: 197 $
32 */
33#endregion
34
35using System;
36using System.IO;
37using System.Xml;
38
39using Prebuild.Core.Attributes;
40using Prebuild.Core.Interfaces;
41using Prebuild.Core.Utilities;
42
43namespace Prebuild.Core.Nodes
44{
45 /// <summary>
46 ///
47 /// </summary>
48 public enum BuildAction
49 {
50 /// <summary>
51 ///
52 /// </summary>
53 None,
54 /// <summary>
55 ///
56 /// </summary>
57 Compile,
58 /// <summary>
59 ///
60 /// </summary>
61 Content,
62 /// <summary>
63 ///
64 /// </summary>
65 EmbeddedResource
66 }
67
68 /// <summary>
69 ///
70 /// </summary>
71 public enum SubType
72 {
73 /// <summary>
74 ///
75 /// </summary>
76 Code,
77 /// <summary>
78 ///
79 /// </summary>
80 Component,
81 /// <summary>
82 ///
83 /// </summary>
84 Designer,
85 /// <summary>
86 ///
87 /// </summary>
88 Form,
89 /// <summary>
90 ///
91 /// </summary>
92 Settings,
93 /// <summary>
94 ///
95 /// </summary>
96 UserControl
97 }
98
99 public enum CopyToOutput
100 {
101 Never,
102 Always,
103 PreserveNewest
104 }
105
106 /// <summary>
107 ///
108 /// </summary>
109 [DataNode("File")]
110 public class FileNode : DataNode
111 {
112 #region Fields
113
114 private string m_Path;
115 private string m_ResourceName = "";
116 private BuildAction m_BuildAction = BuildAction.Compile;
117 private bool m_Valid;
118 private SubType m_SubType = SubType.Code;
119 private CopyToOutput m_CopyToOutput = CopyToOutput.Never;
120 private bool m_Link = false;
121
122
123 #endregion
124
125 #region Properties
126
127 /// <summary>
128 ///
129 /// </summary>
130 public string Path
131 {
132 get
133 {
134 return m_Path;
135 }
136 }
137
138 /// <summary>
139 ///
140 /// </summary>
141 public string ResourceName
142 {
143 get
144 {
145 return m_ResourceName;
146 }
147 }
148
149 /// <summary>
150 ///
151 /// </summary>
152 public BuildAction BuildAction
153 {
154 get
155 {
156 return m_BuildAction;
157 }
158 }
159
160 public CopyToOutput CopyToOutput
161 {
162 get
163 {
164 return this.m_CopyToOutput;
165 }
166 }
167
168 public bool IsLink
169 {
170 get
171 {
172 return this.m_Link;
173 }
174 }
175
176 /// <summary>
177 ///
178 /// </summary>
179 public SubType SubType
180 {
181 get
182 {
183 return m_SubType;
184 }
185 }
186
187 /// <summary>
188 ///
189 /// </summary>
190 public bool IsValid
191 {
192 get
193 {
194 return m_Valid;
195 }
196 }
197
198 #endregion
199
200 #region Public Methods
201
202 /// <summary>
203 ///
204 /// </summary>
205 /// <param name="node"></param>
206 public override void Parse(XmlNode node)
207 {
208 m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction),
209 Helper.AttributeValue(node, "buildAction", m_BuildAction.ToString()));
210 m_SubType = (SubType)Enum.Parse(typeof(SubType),
211 Helper.AttributeValue(node, "subType", m_SubType.ToString()));
212 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString());
213 this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
214 this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString()));
215
216 if( node == null )
217 {
218 throw new ArgumentNullException("node");
219 }
220
221 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
222 if(m_Path == null)
223 {
224 m_Path = "";
225 }
226
227 m_Path = m_Path.Trim();
228 m_Valid = true;
229 if(!File.Exists(m_Path))
230 {
231 m_Valid = false;
232 Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path);
233 }
234 }
235
236 #endregion
237 }
238}
diff --git a/Prebuild/src/Core/Nodes/FilesNode.cs b/Prebuild/src/Core/Nodes/FilesNode.cs
new file mode 100644
index 0000000..d31307b
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/FilesNode.cs
@@ -0,0 +1,223 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $
31 * $Revision: 164 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.Xml;
39
40using Prebuild.Core.Attributes;
41using Prebuild.Core.Interfaces;
42
43namespace Prebuild.Core.Nodes
44{
45 /// <summary>
46 ///
47 /// </summary>
48 [DataNode("Files")]
49 public class FilesNode : DataNode
50 {
51 #region Fields
52
53 private StringCollection m_Files;
54 private Hashtable m_BuildActions;
55 private Hashtable m_SubTypes;
56 private Hashtable m_ResourceNames;
57 private Hashtable m_CopyToOutputs;
58 private Hashtable m_Links;
59
60
61 #endregion
62
63 #region Constructors
64
65 /// <summary>
66 ///
67 /// </summary>
68 public FilesNode()
69 {
70 m_Files = new StringCollection();
71 m_BuildActions = new Hashtable();
72 m_SubTypes = new Hashtable();
73 m_ResourceNames = new Hashtable();
74 m_CopyToOutputs = new Hashtable();
75 m_Links = new Hashtable();
76 }
77
78 #endregion
79
80 #region Properties
81
82 /// <summary>
83 ///
84 /// </summary>
85 public int Count
86 {
87 get
88 {
89 return m_Files.Count;
90 }
91 }
92
93 #endregion
94
95 #region Public Methods
96
97 /// <summary>
98 ///
99 /// </summary>
100 /// <param name="file"></param>
101 /// <returns></returns>
102 public BuildAction GetBuildAction(string file)
103 {
104 if(!m_BuildActions.ContainsKey(file))
105 {
106 return BuildAction.Compile;
107 }
108
109 return (BuildAction)m_BuildActions[file];
110 }
111
112 public CopyToOutput GetCopyToOutput(string file)
113 {
114 if (!this.m_CopyToOutputs.ContainsKey(file))
115 {
116 return CopyToOutput.Never;
117 }
118 return (CopyToOutput) this.m_CopyToOutputs[file];
119 }
120
121 public bool GetIsLink(string file)
122 {
123 if (!this.m_Links.ContainsKey(file))
124 {
125 return false;
126 }
127 return (bool) this.m_Links[file];
128 }
129
130 /// <summary>
131 ///
132 /// </summary>
133 /// <param name="file"></param>
134 /// <returns></returns>
135 public SubType GetSubType(string file)
136 {
137 if(!m_SubTypes.ContainsKey(file))
138 {
139 return SubType.Code;
140 }
141
142 return (SubType)m_SubTypes[file];
143 }
144
145 /// <summary>
146 ///
147 /// </summary>
148 /// <param name="file"></param>
149 /// <returns></returns>
150 public string GetResourceName(string file)
151 {
152 if(!m_ResourceNames.ContainsKey(file))
153 {
154 return "";
155 }
156
157 return (string)m_ResourceNames[file];
158 }
159
160 /// <summary>
161 ///
162 /// </summary>
163 /// <param name="node"></param>
164 public override void Parse(XmlNode node)
165 {
166 if( node == null )
167 {
168 throw new ArgumentNullException("node");
169 }
170 foreach(XmlNode child in node.ChildNodes)
171 {
172 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
173 if(dataNode is FileNode)
174 {
175 FileNode fileNode = (FileNode)dataNode;
176 if(fileNode.IsValid)
177 {
178 if (!m_Files.Contains(fileNode.Path))
179 {
180 m_Files.Add(fileNode.Path);
181 m_BuildActions[fileNode.Path] = fileNode.BuildAction;
182 m_SubTypes[fileNode.Path] = fileNode.SubType;
183 m_ResourceNames[fileNode.Path] = fileNode.ResourceName;
184 this.m_Links[fileNode.Path] = fileNode.IsLink;
185 this.m_CopyToOutputs[fileNode.Path] = fileNode.CopyToOutput;
186
187 }
188 }
189 }
190 else if(dataNode is MatchNode)
191 {
192 foreach(string file in ((MatchNode)dataNode).Files)
193 {
194 if (!m_Files.Contains(file))
195 {
196 m_Files.Add(file);
197 m_BuildActions[file] = ((MatchNode)dataNode).BuildAction;
198 m_SubTypes[file] = ((MatchNode)dataNode).SubType;
199 m_ResourceNames[file] = ((MatchNode)dataNode).ResourceName;
200 this.m_Links[file] = ((MatchNode) dataNode).IsLink;
201 this.m_CopyToOutputs[file] = ((MatchNode) dataNode).CopyToOutput;
202
203 }
204 }
205 }
206 }
207 }
208
209 // TODO: Check in to why StringCollection's enumerator doesn't implement
210 // IEnumerator?
211 /// <summary>
212 ///
213 /// </summary>
214 /// <returns></returns>
215 public StringEnumerator GetEnumerator()
216 {
217 return m_Files.GetEnumerator();
218 }
219
220 #endregion
221
222 }
223}
diff --git a/Prebuild/src/Core/Nodes/MatchNode.cs b/Prebuild/src/Core/Nodes/MatchNode.cs
new file mode 100644
index 0000000..e0d2fa8
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/MatchNode.cs
@@ -0,0 +1,299 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $
31 * $Revision: 164 $
32 */
33#endregion
34
35using System;
36using System.Collections.Specialized;
37using System.IO;
38using System.Text.RegularExpressions;
39using System.Xml;
40
41using Prebuild.Core.Attributes;
42using Prebuild.Core.Interfaces;
43using Prebuild.Core.Utilities;
44
45namespace Prebuild.Core.Nodes
46{
47 /// <summary>
48 ///
49 /// </summary>
50 [DataNode("Match")]
51 public class MatchNode : DataNode
52 {
53 #region Fields
54
55 private StringCollection m_Files;
56 private Regex m_Regex;
57 private BuildAction m_BuildAction = BuildAction.Compile;
58 private SubType m_SubType = SubType.Code;
59 string m_ResourceName = "";
60 private CopyToOutput m_CopyToOutput;
61 private bool m_Link;
62
63
64 #endregion
65
66 #region Constructors
67
68 /// <summary>
69 ///
70 /// </summary>
71 public MatchNode()
72 {
73 m_Files = new StringCollection();
74 }
75
76 #endregion
77
78 #region Properties
79
80 /// <summary>
81 ///
82 /// </summary>
83 public StringCollection Files
84 {
85 get
86 {
87 return m_Files;
88 }
89 }
90
91 /// <summary>
92 ///
93 /// </summary>
94 public BuildAction BuildAction
95 {
96 get
97 {
98 return m_BuildAction;
99 }
100 }
101
102 /// <summary>
103 ///
104 /// </summary>
105 public SubType SubType
106 {
107 get
108 {
109 return m_SubType;
110 }
111 }
112
113 public CopyToOutput CopyToOutput
114 {
115 get
116 {
117 return this.m_CopyToOutput;
118 }
119 }
120
121 public bool IsLink
122 {
123 get
124 {
125 return this.m_Link;
126 }
127 }
128
129 /// <summary>
130 ///
131 /// </summary>
132 public string ResourceName
133 {
134 get
135 {
136 return m_ResourceName;
137 }
138 }
139
140
141 #endregion
142
143 #region Private Methods
144
145 /// <summary>
146 /// Recurses the directories.
147 /// </summary>
148 /// <param name="path">The path.</param>
149 /// <param name="pattern">The pattern.</param>
150 /// <param name="recurse">if set to <c>true</c> [recurse].</param>
151 /// <param name="useRegex">if set to <c>true</c> [use regex].</param>
152 private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex)
153 {
154 try
155 {
156 string[] files;
157
158 if(!useRegex)
159 {
160 files = Directory.GetFiles(path, pattern);
161 if(files != null)
162 {
163 string fileTemp;
164 foreach (string file in files)
165 {
166 if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\")
167 {
168 fileTemp = file.Substring(2);
169 }
170 else
171 {
172 fileTemp = file;
173 }
174
175 m_Files.Add(fileTemp);
176 }
177 }
178 else
179 {
180 return;
181 }
182 }
183 else
184 {
185 Match match;
186 files = Directory.GetFiles(path);
187 foreach(string file in files)
188 {
189 match = m_Regex.Match(file);
190 if(match.Success)
191 {
192 m_Files.Add(file);
193 }
194 }
195 }
196
197 if(recurse)
198 {
199 string[] dirs = Directory.GetDirectories(path);
200 if(dirs != null && dirs.Length > 0)
201 {
202 foreach(string str in dirs)
203 {
204 RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex);
205 }
206 }
207 }
208 }
209 catch(DirectoryNotFoundException)
210 {
211 return;
212 }
213 catch(ArgumentException)
214 {
215 return;
216 }
217 }
218
219 #endregion
220
221 #region Public Methods
222
223 /// <summary>
224 ///
225 /// </summary>
226 /// <param name="node"></param>
227 public override void Parse(XmlNode node)
228 {
229 if( node == null )
230 {
231 throw new ArgumentNullException("node");
232 }
233 string path = Helper.AttributeValue(node, "path", ".");
234 string pattern = Helper.AttributeValue(node, "pattern", "*");
235 bool recurse = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "recurse", "false"));
236 bool useRegex = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "useRegex", "false"));
237 m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction),
238 Helper.AttributeValue(node, "buildAction", m_BuildAction.ToString()));
239 m_SubType = (SubType)Enum.Parse(typeof(SubType),
240 Helper.AttributeValue(node, "subType", m_SubType.ToString()));
241 m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString());
242 this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString()));
243 this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
244
245
246 if(path != null && path.Length == 0)
247 {
248 path = ".";//use current directory
249 }
250 //throw new WarningException("Match must have a 'path' attribute");
251
252 if(pattern == null)
253 {
254 throw new WarningException("Match must have a 'pattern' attribute");
255 }
256
257 path = Helper.NormalizePath(path);
258 if(!Directory.Exists(path))
259 {
260 throw new WarningException("Match path does not exist: {0}", path);
261 }
262
263 try
264 {
265 if(useRegex)
266 {
267 m_Regex = new Regex(pattern);
268 }
269 }
270 catch(ArgumentException ex)
271 {
272 throw new WarningException("Could not compile regex pattern: {0}", ex.Message);
273 }
274
275 RecurseDirectories(path, pattern, recurse, useRegex);
276
277 foreach(XmlNode child in node.ChildNodes)
278 {
279 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
280 if(dataNode is ExcludeNode)
281 {
282 ExcludeNode excludeNode = (ExcludeNode)dataNode;
283 if (m_Files.Contains(Helper.NormalizePath(excludeNode.Name)))
284 {
285 m_Files.Remove(Helper.NormalizePath(excludeNode.Name));
286 }
287 }
288 }
289
290 if(m_Files.Count < 1)
291 {
292 throw new WarningException("Match returned no files: {0}{1}", Helper.EndPath(path), pattern);
293 }
294 m_Regex = null;
295 }
296
297 #endregion
298 }
299}
diff --git a/Prebuild/src/Core/Nodes/OptionsNode.cs b/Prebuild/src/Core/Nodes/OptionsNode.cs
new file mode 100644
index 0000000..b5a2f60
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/OptionsNode.cs
@@ -0,0 +1,655 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2007-01-08 17:55:40 +0100 (må, 08 jan 2007) $
31 * $Revision: 197 $
32 */
33#endregion
34
35
36
37using System;
38using System.Collections;
39using System.Collections.Specialized;
40using System.Reflection;
41using System.Xml;
42
43using Prebuild.Core.Attributes;
44using Prebuild.Core.Interfaces;
45using Prebuild.Core.Utilities;
46
47namespace Prebuild.Core.Nodes
48{
49 /// <summary>
50 ///
51 /// </summary>
52 [DataNode("Options")]
53 public class OptionsNode : DataNode
54 {
55 #region Fields
56
57 private static Hashtable m_OptionFields;
58
59 [OptionNode("CompilerDefines")]
60 private string m_CompilerDefines = "";
61
62 /// <summary>
63 ///
64 /// </summary>
65 public string CompilerDefines
66 {
67 get
68 {
69 return m_CompilerDefines;
70 }
71 set
72 {
73 m_CompilerDefines = value;
74 }
75 }
76
77 [OptionNode("OptimizeCode")]
78 private bool m_OptimizeCode;
79
80 /// <summary>
81 ///
82 /// </summary>
83 public bool OptimizeCode
84 {
85 get
86 {
87 return m_OptimizeCode;
88 }
89 set
90 {
91 m_OptimizeCode = value;
92 }
93 }
94
95 [OptionNode("CheckUnderflowOverflow")]
96 private bool m_CheckUnderflowOverflow;
97
98 /// <summary>
99 ///
100 /// </summary>
101 public bool CheckUnderflowOverflow
102 {
103 get
104 {
105 return m_CheckUnderflowOverflow;
106 }
107 set
108 {
109 m_CheckUnderflowOverflow = value;
110 }
111 }
112
113 [OptionNode("AllowUnsafe")]
114 private bool m_AllowUnsafe;
115
116 /// <summary>
117 ///
118 /// </summary>
119 public bool AllowUnsafe
120 {
121 get
122 {
123 return m_AllowUnsafe;
124 }
125 set
126 {
127 m_AllowUnsafe = value;
128 }
129 }
130
131 [OptionNode("PreBuildEvent")]
132 private string m_PreBuildEvent;
133
134 /// <summary>
135 ///
136 /// </summary>
137 public string PreBuildEvent
138 {
139 get
140 {
141 return m_PreBuildEvent;
142 }
143 set
144 {
145 m_PreBuildEvent = value;
146 }
147 }
148
149 [OptionNode("PostBuildEvent")]
150 private string m_PostBuildEvent;
151
152 /// <summary>
153 ///
154 /// </summary>
155 public string PostBuildEvent
156 {
157 get
158 {
159 return m_PostBuildEvent;
160 }
161 set
162 {
163 m_PostBuildEvent = value;
164 }
165 }
166
167 [OptionNode("PreBuildEventArgs")]
168 private string m_PreBuildEventArgs;
169
170 /// <summary>
171 ///
172 /// </summary>
173 public string PreBuildEventArgs
174 {
175 get
176 {
177 return m_PreBuildEventArgs;
178 }
179 set
180 {
181 m_PreBuildEventArgs = value;
182 }
183 }
184
185 [OptionNode("PostBuildEventArgs")]
186 private string m_PostBuildEventArgs;
187
188 /// <summary>
189 ///
190 /// </summary>
191 public string PostBuildEventArgs
192 {
193 get
194 {
195 return m_PostBuildEventArgs;
196 }
197 set
198 {
199 m_PostBuildEventArgs = value;
200 }
201 }
202
203 [OptionNode("RunPostBuildEvent")]
204 private string m_RunPostBuildEvent;
205
206 /// <summary>
207 ///
208 /// </summary>
209 public string RunPostBuildEvent
210 {
211 get
212 {
213 return m_RunPostBuildEvent;
214 }
215 set
216 {
217 m_RunPostBuildEvent = value;
218 }
219 }
220
221 [OptionNode("RunScript")]
222 private string m_RunScript;
223
224 /// <summary>
225 ///
226 /// </summary>
227 public string RunScript
228 {
229 get
230 {
231 return m_RunScript;
232 }
233 set
234 {
235 m_RunScript = value;
236 }
237 }
238
239 [OptionNode("WarningLevel")]
240 private int m_WarningLevel = 4;
241
242 /// <summary>
243 ///
244 /// </summary>
245 public int WarningLevel
246 {
247 get
248 {
249 return m_WarningLevel;
250 }
251 set
252 {
253 m_WarningLevel = value;
254 }
255 }
256
257 [OptionNode("WarningsAsErrors")]
258 private bool m_WarningsAsErrors;
259
260 /// <summary>
261 ///
262 /// </summary>
263 public bool WarningsAsErrors
264 {
265 get
266 {
267 return m_WarningsAsErrors;
268 }
269 set
270 {
271 m_WarningsAsErrors = value;
272 }
273 }
274
275 [OptionNode("SuppressWarnings")]
276 private string m_SuppressWarnings = "";
277
278 /// <summary>
279 ///
280 /// </summary>
281 public string SuppressWarnings
282 {
283 get
284 {
285 return m_SuppressWarnings;
286 }
287 set
288 {
289 m_SuppressWarnings = value;
290 }
291 }
292
293 [OptionNode("OutputPath")]
294 private string m_OutputPath = "bin/";
295
296 /// <summary>
297 ///
298 /// </summary>
299 public string OutputPath
300 {
301 get
302 {
303 return m_OutputPath;
304 }
305 set
306 {
307 m_OutputPath = value;
308 }
309 }
310
311 [OptionNode("GenerateDocumentation")]
312 private bool m_GenerateDocumentation;
313
314 /// <summary>
315 ///
316 /// </summary>
317 public bool GenerateDocumentation
318 {
319 get
320 {
321 return m_GenerateDocumentation;
322 }
323 set
324 {
325 m_GenerateDocumentation = value;
326 }
327 }
328
329 [OptionNode("GenerateXmlDocFile")]
330 private bool m_GenerateXmlDocFile;
331
332 /// <summary>
333 ///
334 /// </summary>
335 public bool GenerateXmlDocFile
336 {
337 get
338 {
339 return m_GenerateXmlDocFile;
340 }
341 set
342 {
343 m_GenerateXmlDocFile = value;
344 }
345 }
346
347 [OptionNode("XmlDocFile")]
348 private string m_XmlDocFile = "";
349
350 /// <summary>
351 ///
352 /// </summary>
353 public string XmlDocFile
354 {
355 get
356 {
357 return m_XmlDocFile;
358 }
359 set
360 {
361 m_XmlDocFile = value;
362 }
363 }
364
365 [OptionNode("KeyFile")]
366 private string m_KeyFile = "";
367
368 /// <summary>
369 ///
370 /// </summary>
371 public string KeyFile
372 {
373 get
374 {
375 return m_KeyFile;
376 }
377 set
378 {
379 m_KeyFile = value;
380 }
381 }
382
383 [OptionNode("DebugInformation")]
384 private bool m_DebugInformation;
385
386 /// <summary>
387 ///
388 /// </summary>
389 public bool DebugInformation
390 {
391 get
392 {
393 return m_DebugInformation;
394 }
395 set
396 {
397 m_DebugInformation = value;
398 }
399 }
400
401 [OptionNode("RegisterComInterop")]
402 private bool m_RegisterComInterop;
403
404 /// <summary>
405 ///
406 /// </summary>
407 public bool RegisterComInterop
408 {
409 get
410 {
411 return m_RegisterComInterop;
412 }
413 set
414 {
415 m_RegisterComInterop = value;
416 }
417 }
418
419 [OptionNode("RemoveIntegerChecks")]
420 private bool m_RemoveIntegerChecks;
421
422 /// <summary>
423 ///
424 /// </summary>
425 public bool RemoveIntegerChecks
426 {
427 get
428 {
429 return m_RemoveIntegerChecks;
430 }
431 set
432 {
433 m_RemoveIntegerChecks = value;
434 }
435 }
436
437 [OptionNode("IncrementalBuild")]
438 private bool m_IncrementalBuild;
439
440 /// <summary>
441 ///
442 /// </summary>
443 public bool IncrementalBuild
444 {
445 get
446 {
447 return m_IncrementalBuild;
448 }
449 set
450 {
451 m_IncrementalBuild = value;
452 }
453 }
454
455 [OptionNode("BaseAddress")]
456 private string m_BaseAddress = "285212672";
457
458 /// <summary>
459 ///
460 /// </summary>
461 public string BaseAddress
462 {
463 get
464 {
465 return m_BaseAddress;
466 }
467 set
468 {
469 m_BaseAddress = value;
470 }
471 }
472
473 [OptionNode("FileAlignment")]
474 private int m_FileAlignment = 4096;
475
476 /// <summary>
477 ///
478 /// </summary>
479 public int FileAlignment
480 {
481 get
482 {
483 return m_FileAlignment;
484 }
485 set
486 {
487 m_FileAlignment = value;
488 }
489 }
490
491 [OptionNode("NoStdLib")]
492 private bool m_NoStdLib;
493
494 /// <summary>
495 ///
496 /// </summary>
497 public bool NoStdLib
498 {
499 get
500 {
501 return m_NoStdLib;
502 }
503 set
504 {
505 m_NoStdLib = value;
506 }
507 }
508
509 private StringCollection m_FieldsDefined;
510
511 #endregion
512
513 #region Constructors
514
515 /// <summary>
516 /// Initializes the <see cref="OptionsNode"/> class.
517 /// </summary>
518 static OptionsNode()
519 {
520 Type t = typeof(OptionsNode);
521
522 m_OptionFields = new Hashtable();
523 foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
524 {
525 object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false);
526 if(attrs == null || attrs.Length < 1)
527 {
528 continue;
529 }
530
531 OptionNodeAttribute ona = (OptionNodeAttribute)attrs[0];
532 m_OptionFields[ona.NodeName] = f;
533 }
534 }
535
536 /// <summary>
537 /// Initializes a new instance of the <see cref="OptionsNode"/> class.
538 /// </summary>
539 public OptionsNode()
540 {
541 m_FieldsDefined = new StringCollection();
542 }
543
544 #endregion
545
546 #region Properties
547
548 /// <summary>
549 /// Gets the <see cref="Object"/> at the specified index.
550 /// </summary>
551 /// <value></value>
552 public object this[string index]
553 {
554 get
555 {
556 if(!m_OptionFields.ContainsKey(index))
557 {
558 return null;
559 }
560
561 FieldInfo f = (FieldInfo)m_OptionFields[index];
562 return f.GetValue(this);
563 }
564 }
565
566 /// <summary>
567 /// Gets the <see cref="Object"/> at the specified index.
568 /// </summary>
569 /// <value></value>
570 public object this[string index, object defaultValue]
571 {
572 get
573 {
574 object valueObject = this[index];
575 if(valueObject != null && valueObject is string && ((string)valueObject).Length == 0)
576 {
577 return defaultValue;
578 }
579 return valueObject;
580 }
581 }
582
583
584 #endregion
585
586 #region Private Methods
587
588 private void FlagDefined(string name)
589 {
590 if(!m_FieldsDefined.Contains(name))
591 {
592 m_FieldsDefined.Add(name);
593 }
594 }
595
596 private void SetOption(string nodeName, string val)
597 {
598 lock(m_OptionFields)
599 {
600 if(!m_OptionFields.ContainsKey(nodeName))
601 {
602 return;
603 }
604
605 FieldInfo f = (FieldInfo)m_OptionFields[nodeName];
606 f.SetValue(this, Helper.TranslateValue(f.FieldType, val));
607 FlagDefined(f.Name);
608 }
609 }
610
611 #endregion
612
613 #region Public Methods
614
615 /// <summary>
616 /// Parses the specified node.
617 /// </summary>
618 /// <param name="node">The node.</param>
619 public override void Parse(XmlNode node)
620 {
621 if( node == null )
622 {
623 throw new ArgumentNullException("node");
624 }
625
626 foreach(XmlNode child in node.ChildNodes)
627 {
628 SetOption(child.Name, Helper.InterpolateForEnvironmentVariables(child.InnerText));
629 }
630 }
631
632 /// <summary>
633 /// Copies to.
634 /// </summary>
635 /// <param name="opt">The opt.</param>
636 public void CopyTo(OptionsNode opt)
637 {
638 if(opt == null)
639 {
640 return;
641 }
642
643 foreach(FieldInfo f in m_OptionFields.Values)
644 {
645 if(m_FieldsDefined.Contains(f.Name))
646 {
647 f.SetValue(opt, f.GetValue(this));
648 opt.m_FieldsDefined.Add(f.Name);
649 }
650 }
651 }
652
653 #endregion
654 }
655}
diff --git a/Prebuild/src/Core/Nodes/ProcessNode.cs b/Prebuild/src/Core/Nodes/ProcessNode.cs
new file mode 100644
index 0000000..f546a4b
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ProcessNode.cs
@@ -0,0 +1,119 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.Xml;
39
40using Prebuild.Core.Attributes;
41using Prebuild.Core.Interfaces;
42using Prebuild.Core.Utilities;
43
44namespace Prebuild.Core.Nodes
45{
46 /// <summary>
47 ///
48 /// </summary>
49 [DataNode("Process")]
50 public class ProcessNode : DataNode
51 {
52 #region Fields
53
54 private string m_Path;
55 private bool m_IsValid = true;
56
57 #endregion
58
59 #region Properties
60
61 /// <summary>
62 /// Gets the path.
63 /// </summary>
64 /// <value>The path.</value>
65 public string Path
66 {
67 get
68 {
69 return m_Path;
70 }
71 }
72
73 /// <summary>
74 /// Gets a value indicating whether this instance is valid.
75 /// </summary>
76 /// <value><c>true</c> if this instance is valid; otherwise, <c>false</c>.</value>
77 public bool IsValid
78 {
79 get
80 {
81 return m_IsValid;
82 }
83 }
84
85 #endregion
86
87 #region Public Methods
88
89 /// <summary>
90 /// Parses the specified node.
91 /// </summary>
92 /// <param name="node">The node.</param>
93 public override void Parse(XmlNode node)
94 {
95 if( node == null )
96 {
97 throw new ArgumentNullException("node");
98 }
99
100 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
101 if(m_Path == null)
102 {
103 m_Path = "";
104 }
105
106 try
107 {
108 m_Path = Helper.ResolvePath(m_Path);
109 }
110 catch(ArgumentException)
111 {
112 Kernel.Instance.Log.Write(LogType.Warning, "Could not find prebuild file for processing: {0}", m_Path);
113 m_IsValid = false;
114 }
115 }
116
117 #endregion
118 }
119}
diff --git a/Prebuild/src/Core/Nodes/ProjectNode.cs b/Prebuild/src/Core/Nodes/ProjectNode.cs
new file mode 100644
index 0000000..c56dacc
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ProjectNode.cs
@@ -0,0 +1,510 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-11-11 05:43:20 +0100 (lö, 11 nov 2006) $
31 * $Revision: 192 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.IO;
38using System.Xml;
39
40using Prebuild.Core.Attributes;
41using Prebuild.Core.Interfaces;
42using Prebuild.Core.Utilities;
43
44namespace Prebuild.Core.Nodes
45{
46 /// <summary>
47 ///
48 /// </summary>
49 public enum ProjectType
50 {
51 /// <summary>
52 ///
53 /// </summary>
54 Exe,
55 /// <summary>
56 ///
57 /// </summary>
58 WinExe,
59 /// <summary>
60 ///
61 /// </summary>
62 Library
63 }
64
65 /// <summary>
66 ///
67 /// </summary>
68 public enum ClrRuntime
69 {
70 /// <summary>
71 ///
72 /// </summary>
73 Microsoft,
74 /// <summary>
75 ///
76 /// </summary>
77 Mono
78 }
79
80 /// <summary>
81 ///
82 /// </summary>
83 [DataNode("Project")]
84 public class ProjectNode : DataNode, IComparable
85 {
86 #region Fields
87
88 private string m_Name = "unknown";
89 private string m_Path = "";
90 private string m_FullPath = "";
91 private string m_AssemblyName;
92 private string m_AppIcon = "";
93 private string m_DesignerFolder = "";
94 private string m_Language = "C#";
95 private ProjectType m_Type = ProjectType.Exe;
96 private ClrRuntime m_Runtime = ClrRuntime.Microsoft;
97 private string m_StartupObject = "";
98 private string m_RootNamespace;
99 private string m_FilterGroups = "";
100 private Guid m_Guid;
101
102 private Hashtable m_Configurations;
103 private ArrayList m_ReferencePaths;
104 private ArrayList m_References;
105 private FilesNode m_Files;
106
107 #endregion
108
109 #region Constructors
110
111 /// <summary>
112 /// Initializes a new instance of the <see cref="ProjectNode"/> class.
113 /// </summary>
114 public ProjectNode()
115 {
116 m_Configurations = new Hashtable();
117 m_ReferencePaths = new ArrayList();
118 m_References = new ArrayList();
119 }
120
121 #endregion
122
123 #region Properties
124
125 /// <summary>
126 /// Gets the name.
127 /// </summary>
128 /// <value>The name.</value>
129 public string Name
130 {
131 get
132 {
133 return m_Name;
134 }
135 }
136
137 /// <summary>
138 /// Gets the path.
139 /// </summary>
140 /// <value>The path.</value>
141 public string Path
142 {
143 get
144 {
145 return m_Path;
146 }
147 }
148
149 /// <summary>
150 /// Gets the filter groups.
151 /// </summary>
152 /// <value>The filter groups.</value>
153 public string FilterGroups
154 {
155 get
156 {
157 return m_FilterGroups;
158 }
159 }
160
161 /// <summary>
162 /// Gets the full path.
163 /// </summary>
164 /// <value>The full path.</value>
165 public string FullPath
166 {
167 get
168 {
169 return m_FullPath;
170 }
171 }
172
173 /// <summary>
174 /// Gets the name of the assembly.
175 /// </summary>
176 /// <value>The name of the assembly.</value>
177 public string AssemblyName
178 {
179 get
180 {
181 return m_AssemblyName;
182 }
183 }
184
185 /// <summary>
186 /// Gets the app icon.
187 /// </summary>
188 /// <value>The app icon.</value>
189 public string AppIcon
190 {
191 get
192 {
193 return m_AppIcon;
194 }
195 }
196
197 /// <summary>
198 ///
199 /// </summary>
200 public string DesignerFolder
201 {
202 get
203 {
204 return m_DesignerFolder;
205 }
206 }
207
208 /// <summary>
209 /// Gets the language.
210 /// </summary>
211 /// <value>The language.</value>
212 public string Language
213 {
214 get
215 {
216 return m_Language;
217 }
218 }
219
220 /// <summary>
221 /// Gets the type.
222 /// </summary>
223 /// <value>The type.</value>
224 public ProjectType Type
225 {
226 get
227 {
228 return m_Type;
229 }
230 }
231
232 /// <summary>
233 /// Gets the runtime.
234 /// </summary>
235 /// <value>The runtime.</value>
236 public ClrRuntime Runtime
237 {
238 get
239 {
240 return m_Runtime;
241 }
242 }
243
244 private bool m_GenerateAssemblyInfoFile = false;
245
246 /// <summary>
247 ///
248 /// </summary>
249 public bool GenerateAssemblyInfoFile
250 {
251 get
252 {
253 return m_GenerateAssemblyInfoFile;
254 }
255 set
256 {
257 m_GenerateAssemblyInfoFile = value;
258 }
259 }
260
261 /// <summary>
262 /// Gets the startup object.
263 /// </summary>
264 /// <value>The startup object.</value>
265 public string StartupObject
266 {
267 get
268 {
269 return m_StartupObject;
270 }
271 }
272
273 /// <summary>
274 /// Gets the root namespace.
275 /// </summary>
276 /// <value>The root namespace.</value>
277 public string RootNamespace
278 {
279 get
280 {
281 return m_RootNamespace;
282 }
283 }
284
285 /// <summary>
286 /// Gets the configurations.
287 /// </summary>
288 /// <value>The configurations.</value>
289 public ICollection Configurations
290 {
291 get
292 {
293 ArrayList tmp = new ArrayList( ConfigurationsTable.Values);
294 tmp.Sort();
295 return tmp;
296 }
297 }
298
299 /// <summary>
300 /// Gets the configurations table.
301 /// </summary>
302 /// <value>The configurations table.</value>
303 public Hashtable ConfigurationsTable
304 {
305 get
306 {
307 return m_Configurations;
308 }
309 }
310
311 /// <summary>
312 /// Gets the reference paths.
313 /// </summary>
314 /// <value>The reference paths.</value>
315 public ArrayList ReferencePaths
316 {
317 get
318 {
319 ArrayList tmp = new ArrayList(m_ReferencePaths);
320 tmp.Sort();
321 return tmp;
322 }
323 }
324
325 /// <summary>
326 /// Gets the references.
327 /// </summary>
328 /// <value>The references.</value>
329 public ArrayList References
330 {
331 get
332 {
333 ArrayList tmp = new ArrayList(m_References);
334 tmp.Sort();
335 return tmp;
336 }
337 }
338
339 /// <summary>
340 /// Gets the files.
341 /// </summary>
342 /// <value>The files.</value>
343 public FilesNode Files
344 {
345 get
346 {
347 return m_Files;
348 }
349 }
350
351 /// <summary>
352 /// Gets or sets the parent.
353 /// </summary>
354 /// <value>The parent.</value>
355 public override IDataNode Parent
356 {
357 get
358 {
359 return base.Parent;
360 }
361 set
362 {
363 base.Parent = value;
364 if(base.Parent is SolutionNode && m_Configurations.Count < 1)
365 {
366 SolutionNode parent = (SolutionNode)base.Parent;
367 foreach(ConfigurationNode conf in parent.Configurations)
368 {
369 m_Configurations[conf.Name] = conf.Clone();
370 }
371 }
372 }
373 }
374
375 /// <summary>
376 /// Gets the GUID.
377 /// </summary>
378 /// <value>The GUID.</value>
379 public Guid Guid
380 {
381 get
382 {
383 return m_Guid;
384 }
385 }
386
387 #endregion
388
389 #region Private Methods
390
391 private void HandleConfiguration(ConfigurationNode conf)
392 {
393 if(String.Compare(conf.Name, "all", true) == 0) //apply changes to all, this may not always be applied first,
394 //so it *may* override changes to the same properties for configurations defines at the project level
395 {
396 foreach(ConfigurationNode confNode in this.m_Configurations.Values)
397 {
398 conf.CopyTo(confNode);//update the config templates defines at the project level with the overrides
399 }
400 }
401 if(m_Configurations.ContainsKey(conf.Name))
402 {
403 ConfigurationNode parentConf = (ConfigurationNode)m_Configurations[conf.Name];
404 conf.CopyTo(parentConf);//update the config templates defines at the project level with the overrides
405 }
406 else
407 {
408 m_Configurations[conf.Name] = conf;
409 }
410 }
411
412 #endregion
413
414 #region Public Methods
415
416 /// <summary>
417 /// Parses the specified node.
418 /// </summary>
419 /// <param name="node">The node.</param>
420 public override void Parse(XmlNode node)
421 {
422 m_Name = Helper.AttributeValue(node, "name", m_Name);
423 m_Path = Helper.AttributeValue(node, "path", m_Path);
424 m_FilterGroups = Helper.AttributeValue(node, "filterGroups", m_FilterGroups);
425 m_AppIcon = Helper.AttributeValue(node, "icon", m_AppIcon);
426 m_DesignerFolder = Helper.AttributeValue(node, "designerFolder", m_DesignerFolder);
427 m_AssemblyName = Helper.AttributeValue(node, "assemblyName", m_AssemblyName);
428 m_Language = Helper.AttributeValue(node, "language", m_Language);
429 m_Type = (ProjectType)Helper.EnumAttributeValue(node, "type", typeof(ProjectType), m_Type);
430 m_Runtime = (ClrRuntime)Helper.EnumAttributeValue(node, "runtime", typeof(ClrRuntime), m_Runtime);
431 m_StartupObject = Helper.AttributeValue(node, "startupObject", m_StartupObject);
432 m_RootNamespace = Helper.AttributeValue(node, "rootNamespace", m_RootNamespace);
433
434 int hash = m_Name.GetHashCode();
435
436 m_Guid = new Guid( hash, 0, 0, 0, 0, 0, 0,0,0,0,0 );
437
438 m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false);
439
440 if(m_AssemblyName == null || m_AssemblyName.Length < 1)
441 {
442 m_AssemblyName = m_Name;
443 }
444
445 if(m_RootNamespace == null || m_RootNamespace.Length < 1)
446 {
447 m_RootNamespace = m_Name;
448 }
449
450 m_FullPath = m_Path;
451 try
452 {
453 m_FullPath = Helper.ResolvePath(m_FullPath);
454 }
455 catch
456 {
457 throw new WarningException("Could not resolve Solution path: {0}", m_Path);
458 }
459
460 Kernel.Instance.CurrentWorkingDirectory.Push();
461 try
462 {
463 Helper.SetCurrentDir(m_FullPath);
464
465 if( node == null )
466 {
467 throw new ArgumentNullException("node");
468 }
469
470 foreach(XmlNode child in node.ChildNodes)
471 {
472 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
473 if(dataNode is ConfigurationNode)
474 {
475 HandleConfiguration((ConfigurationNode)dataNode);
476 }
477 else if(dataNode is ReferencePathNode)
478 {
479 m_ReferencePaths.Add(dataNode);
480 }
481 else if(dataNode is ReferenceNode)
482 {
483 m_References.Add(dataNode);
484 }
485 else if(dataNode is FilesNode)
486 {
487 m_Files = (FilesNode)dataNode;
488 }
489 }
490 }
491 finally
492 {
493 Kernel.Instance.CurrentWorkingDirectory.Pop();
494 }
495 }
496
497
498 #endregion
499
500 #region IComparable Members
501
502 public int CompareTo(object obj)
503 {
504 ProjectNode that = (ProjectNode)obj;
505 return this.m_Name.CompareTo(that.m_Name);
506 }
507
508 #endregion
509 }
510}
diff --git a/Prebuild/src/Core/Nodes/ReferenceNode.cs b/Prebuild/src/Core/Nodes/ReferenceNode.cs
new file mode 100644
index 0000000..a2880c0
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ReferenceNode.cs
@@ -0,0 +1,153 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-07-25 18:56:49 +0200 (ti, 25 jul 2006) $
31 * $Revision: 132 $
32 */
33#endregion
34
35using System;
36using System.Xml;
37
38using Prebuild.Core.Attributes;
39using Prebuild.Core.Interfaces;
40using Prebuild.Core.Utilities;
41
42namespace Prebuild.Core.Nodes
43{
44 /// <summary>
45 ///
46 /// </summary>
47 [DataNode("Reference")]
48 public class ReferenceNode : DataNode, IComparable
49 {
50 #region Fields
51
52 private string m_Name = "unknown";
53 private string m_Path;
54 private string m_LocalCopy;
55 private string m_Version;
56
57 #endregion
58
59 #region Properties
60
61 /// <summary>
62 /// Gets the name.
63 /// </summary>
64 /// <value>The name.</value>
65 public string Name
66 {
67 get
68 {
69 return m_Name;
70 }
71 }
72
73 /// <summary>
74 /// Gets the path.
75 /// </summary>
76 /// <value>The path.</value>
77 public string Path
78 {
79 get
80 {
81 return m_Path;
82 }
83 }
84
85 /// <summary>
86 /// Gets a value indicating whether [local copy specified].
87 /// </summary>
88 /// <value><c>true</c> if [local copy specified]; otherwise, <c>false</c>.</value>
89 public bool LocalCopySpecified
90 {
91 get
92 {
93 return ( m_LocalCopy != null && m_LocalCopy.Length == 0);
94 }
95 }
96
97 /// <summary>
98 /// Gets a value indicating whether [local copy].
99 /// </summary>
100 /// <value><c>true</c> if [local copy]; otherwise, <c>false</c>.</value>
101 public bool LocalCopy
102 {
103 get
104 {
105 if( m_LocalCopy == null)
106 {
107 return false;
108 }
109 return bool.Parse(m_LocalCopy);
110 }
111 }
112
113 /// <summary>
114 /// Gets the version.
115 /// </summary>
116 /// <value>The version.</value>
117 public string Version
118 {
119 get
120 {
121 return m_Version;
122 }
123 }
124
125 #endregion
126
127 #region Public Methods
128
129 /// <summary>
130 /// Parses the specified node.
131 /// </summary>
132 /// <param name="node">The node.</param>
133 public override void Parse(XmlNode node)
134 {
135 m_Name = Helper.AttributeValue(node, "name", m_Name);
136 m_Path = Helper.AttributeValue(node, "path", m_Path);
137 m_LocalCopy = Helper.AttributeValue(node, "localCopy", m_LocalCopy);
138 m_Version = Helper.AttributeValue(node, "version", m_Version);
139 }
140
141 #endregion
142
143 #region IComparable Members
144
145 public int CompareTo(object obj)
146 {
147 ReferenceNode that = (ReferenceNode)obj;
148 return this.m_Name.CompareTo(that.m_Name);
149 }
150
151 #endregion
152 }
153}
diff --git a/Prebuild/src/Core/Nodes/ReferencePathNode.cs b/Prebuild/src/Core/Nodes/ReferencePathNode.cs
new file mode 100644
index 0000000..0563c1b
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/ReferencePathNode.cs
@@ -0,0 +1,108 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.Xml;
39
40using Prebuild.Core.Attributes;
41using Prebuild.Core.Interfaces;
42using Prebuild.Core.Utilities;
43
44namespace Prebuild.Core.Nodes
45{
46 /// <summary>
47 ///
48 /// </summary>
49 [DataNode("ReferencePath")]
50 public class ReferencePathNode : DataNode, IComparable
51 {
52 #region Fields
53
54 private string m_Path;
55
56 #endregion
57
58 #region Properties
59
60 /// <summary>
61 /// Gets the path.
62 /// </summary>
63 /// <value>The path.</value>
64 public string Path
65 {
66 get
67 {
68 return m_Path;
69 }
70 }
71
72 #endregion
73
74 #region Public Methods
75
76 /// <summary>
77 /// Parses the specified node.
78 /// </summary>
79 /// <param name="node">The node.</param>
80 public override void Parse(XmlNode node)
81 {
82 if( node == null )
83 {
84 throw new ArgumentNullException("node");
85 }
86
87 m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
88 if(m_Path == null)
89 {
90 m_Path = "";
91 }
92
93 m_Path = m_Path.Trim();
94 }
95
96 #endregion
97
98 #region IComparable Members
99
100 public int CompareTo(object obj)
101 {
102 ReferencePathNode that = (ReferencePathNode)obj;
103 return this.m_Path.CompareTo(that.m_Path);
104 }
105
106 #endregion
107 }
108}
diff --git a/Prebuild/src/Core/Nodes/SolutionNode.cs b/Prebuild/src/Core/Nodes/SolutionNode.cs
new file mode 100644
index 0000000..c777fa4
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/SolutionNode.cs
@@ -0,0 +1,288 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-02-28 17:15:42 +0100 (ti, 28 feb 2006) $
31 * $Revision: 92 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Diagnostics;
38using System.IO;
39using System.Xml;
40
41using Prebuild.Core.Attributes;
42using Prebuild.Core.Interfaces;
43using Prebuild.Core.Utilities;
44
45namespace Prebuild.Core.Nodes
46{
47 /// <summary>
48 ///
49 /// </summary>
50 [DataNode("Solution")]
51 public class SolutionNode : DataNode
52 {
53 #region Fields
54
55 private string m_Name = "unknown";
56 private string m_Path = "";
57 private string m_FullPath = "";
58 private string m_ActiveConfig = "Debug";
59
60 private OptionsNode m_Options;
61 private FilesNode m_Files;
62 private Hashtable m_Configurations;
63 private Hashtable m_Projects;
64 private ArrayList m_ProjectsOrder;
65
66 #endregion
67
68 #region Constructors
69
70 /// <summary>
71 /// Initializes a new instance of the <see cref="SolutionNode"/> class.
72 /// </summary>
73 public SolutionNode()
74 {
75 m_Configurations = new Hashtable();
76 m_Projects = new Hashtable();
77 m_ProjectsOrder = new ArrayList();
78 }
79
80 #endregion
81
82 #region Properties
83
84 /// <summary>
85 /// Gets or sets the active config.
86 /// </summary>
87 /// <value>The active config.</value>
88 public string ActiveConfig
89 {
90 get
91 {
92 return m_ActiveConfig;
93 }
94 set
95 {
96 m_ActiveConfig = value;
97 }
98 }
99
100 /// <summary>
101 /// Gets the name.
102 /// </summary>
103 /// <value>The name.</value>
104 public string Name
105 {
106 get
107 {
108 return m_Name;
109 }
110 }
111
112 /// <summary>
113 /// Gets the path.
114 /// </summary>
115 /// <value>The path.</value>
116 public string Path
117 {
118 get
119 {
120 return m_Path;
121 }
122 }
123
124 /// <summary>
125 /// Gets the full path.
126 /// </summary>
127 /// <value>The full path.</value>
128 public string FullPath
129 {
130 get
131 {
132 return m_FullPath;
133 }
134 }
135
136 /// <summary>
137 /// Gets the options.
138 /// </summary>
139 /// <value>The options.</value>
140 public OptionsNode Options
141 {
142 get
143 {
144 return m_Options;
145 }
146 }
147
148 /// <summary>
149 /// Gets the files.
150 /// </summary>
151 /// <value>The files.</value>
152 public FilesNode Files
153 {
154 get
155 {
156 return m_Files;
157 }
158 }
159
160 /// <summary>
161 /// Gets the configurations.
162 /// </summary>
163 /// <value>The configurations.</value>
164 public ICollection Configurations
165 {
166 get
167 {
168 ArrayList tmp = new ArrayList(ConfigurationsTable.Values);
169 tmp.Sort();
170 return tmp;
171 }
172 }
173
174 /// <summary>
175 /// Gets the configurations table.
176 /// </summary>
177 /// <value>The configurations table.</value>
178 public Hashtable ConfigurationsTable
179 {
180 get
181 {
182 return m_Configurations;
183 }
184 }
185
186 /// <summary>
187 /// Gets the projects.
188 /// </summary>
189 /// <value>The projects.</value>
190 public ICollection Projects
191 {
192 get
193 {
194 ArrayList tmp = new ArrayList(m_Projects.Values);
195 tmp.Sort();
196 return tmp;
197 }
198 }
199
200 /// <summary>
201 /// Gets the projects table.
202 /// </summary>
203 /// <value>The projects table.</value>
204 public Hashtable ProjectsTable
205 {
206 get
207 {
208 return m_Projects;
209 }
210 }
211
212 /// <summary>
213 /// Gets the projects table.
214 /// </summary>
215 /// <value>The projects table.</value>
216 public ArrayList ProjectsTableOrder
217 {
218 get
219 {
220 return m_ProjectsOrder;
221 }
222 }
223
224 #endregion
225
226 #region Public Methods
227
228 /// <summary>
229 /// Parses the specified node.
230 /// </summary>
231 /// <param name="node">The node.</param>
232 public override void Parse(XmlNode node)
233 {
234 m_Name = Helper.AttributeValue(node, "name", m_Name);
235 m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig);
236 m_Path = Helper.AttributeValue(node, "path", m_Path);
237
238 m_FullPath = m_Path;
239 try
240 {
241 m_FullPath = Helper.ResolvePath(m_FullPath);
242 }
243 catch
244 {
245 throw new WarningException("Could not resolve solution path: {0}", m_Path);
246 }
247
248 Kernel.Instance.CurrentWorkingDirectory.Push();
249 try
250 {
251 Helper.SetCurrentDir(m_FullPath);
252
253 if( node == null )
254 {
255 throw new ArgumentNullException("node");
256 }
257
258 foreach(XmlNode child in node.ChildNodes)
259 {
260 IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
261 if(dataNode is OptionsNode)
262 {
263 m_Options = (OptionsNode)dataNode;
264 }
265 else if(dataNode is FilesNode)
266 {
267 m_Files = (FilesNode)dataNode;
268 }
269 else if(dataNode is ConfigurationNode)
270 {
271 m_Configurations[((ConfigurationNode)dataNode).Name] = dataNode;
272 }
273 else if(dataNode is ProjectNode)
274 {
275 m_Projects[((ProjectNode)dataNode).Name] = dataNode;
276 m_ProjectsOrder.Add(dataNode);
277 }
278 }
279 }
280 finally
281 {
282 Kernel.Instance.CurrentWorkingDirectory.Pop();
283 }
284 }
285
286 #endregion
287 }
288}
diff --git a/Prebuild/src/Core/Parse/IfContext.cs b/Prebuild/src/Core/Parse/IfContext.cs
new file mode 100644
index 0000000..383049d
--- /dev/null
+++ b/Prebuild/src/Core/Parse/IfContext.cs
@@ -0,0 +1,163 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36
37namespace Prebuild.Core.Parse
38{
39 /// <summary>
40 ///
41 /// </summary>
42 public enum IfState
43 {
44 /// <summary>
45 ///
46 /// </summary>
47 None,
48 /// <summary>
49 ///
50 /// </summary>
51 If,
52 /// <summary>
53 ///
54 /// </summary>
55 ElseIf,
56 /// <summary>
57 ///
58 /// </summary>
59 Else
60 }
61
62 /// <summary>
63 /// Summary description for IfContext.
64 /// </summary>
65 // Inspired by the equivalent WiX class (see www.sourceforge.net/projects/wix/)
66 public class IfContext
67 {
68 #region Properties
69
70 bool m_Active;
71 bool m_Keep;
72 bool m_EverKept;
73 IfState m_State = IfState.None;
74
75 #endregion
76
77 #region Constructors
78
79 /// <summary>
80 /// Initializes a new instance of the <see cref="IfContext"/> class.
81 /// </summary>
82 /// <param name="active">if set to <c>true</c> [active].</param>
83 /// <param name="keep">if set to <c>true</c> [keep].</param>
84 /// <param name="state">The state.</param>
85 public IfContext(bool active, bool keep, IfState state)
86 {
87 m_Active = active;
88 m_Keep = keep;
89 m_EverKept = keep;
90 m_State = state;
91 }
92
93 #endregion
94
95 #region Properties
96
97 /// <summary>
98 /// Gets or sets a value indicating whether this <see cref="IfContext"/> is active.
99 /// </summary>
100 /// <value><c>true</c> if active; otherwise, <c>false</c>.</value>
101 public bool Active
102 {
103 get
104 {
105 return m_Active;
106 }
107 set
108 {
109 m_Active = value;
110 }
111 }
112
113 /// <summary>
114 /// Gets or sets a value indicating whether this <see cref="IfContext"/> is keep.
115 /// </summary>
116 /// <value><c>true</c> if keep; otherwise, <c>false</c>.</value>
117 public bool Keep
118 {
119 get
120 {
121 return m_Keep;
122 }
123 set
124 {
125 m_Keep = value;
126 if(m_Keep)
127 {
128 m_EverKept = true;
129 }
130 }
131 }
132
133 /// <summary>
134 /// Gets a value indicating whether [ever kept].
135 /// </summary>
136 /// <value><c>true</c> if [ever kept]; otherwise, <c>false</c>.</value>
137 public bool EverKept
138 {
139 get
140 {
141 return m_EverKept;
142 }
143 }
144
145 /// <summary>
146 /// Gets or sets the state.
147 /// </summary>
148 /// <value>The state.</value>
149 public IfState State
150 {
151 get
152 {
153 return m_State;
154 }
155 set
156 {
157 m_State = value;
158 }
159 }
160
161 #endregion
162 }
163}
diff --git a/Prebuild/src/Core/Parse/Preprocessor.cs b/Prebuild/src/Core/Parse/Preprocessor.cs
new file mode 100644
index 0000000..85e92c3
--- /dev/null
+++ b/Prebuild/src/Core/Parse/Preprocessor.cs
@@ -0,0 +1,519 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-09-01 19:55:06 +0200 (fr, 01 sep 2006) $
31 * $Revision: 147 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.IO;
38using System.Xml;
39
40namespace Prebuild.Core.Parse
41{
42 /// <summary>
43 ///
44 /// </summary>
45 public enum OperatorSymbol
46 {
47 /// <summary>
48 ///
49 /// </summary>
50 None,
51 /// <summary>
52 ///
53 /// </summary>
54 Equal,
55 /// <summary>
56 ///
57 /// </summary>
58 NotEqual,
59 /// <summary>
60 ///
61 /// </summary>
62 LessThan,
63 /// <summary>
64 ///
65 /// </summary>
66 GreaterThan,
67 /// <summary>
68 ///
69 /// </summary>
70 LessThanEqual,
71 /// <summary>
72 ///
73 /// </summary>
74 GreaterThanEqual
75 }
76
77 /// <summary>
78 ///
79 /// </summary>
80 public class Preprocessor
81 {
82 #region Fields
83
84 XmlDocument m_OutDoc;
85 Stack m_IfStack;
86 Hashtable m_Variables;
87
88 #endregion
89
90 #region Constructors
91
92 /// <summary>
93 /// Initializes a new instance of the <see cref="Preprocessor"/> class.
94 /// </summary>
95 public Preprocessor()
96 {
97 m_OutDoc = new XmlDocument();
98 m_IfStack = new Stack();
99 m_Variables = new Hashtable();
100
101 RegisterVariable("OS", GetOS());
102 RegisterVariable("RuntimeVersion", Environment.Version.Major);
103 RegisterVariable("RuntimeMajor", Environment.Version.Major);
104 RegisterVariable("RuntimeMinor", Environment.Version.Minor);
105 RegisterVariable("RuntimeRevision", Environment.Version.Revision);
106 }
107
108 #endregion
109
110 #region Properties
111
112 /// <summary>
113 /// Gets the processed doc.
114 /// </summary>
115 /// <value>The processed doc.</value>
116 public XmlDocument ProcessedDoc
117 {
118 get
119 {
120 return m_OutDoc;
121 }
122 }
123
124 #endregion
125
126 #region Private Methods
127
128 /// <summary>
129 /// Parts of this code were taken from NAnt and is subject to the GPL
130 /// as per NAnt's license. Thanks to the NAnt guys for this little gem.
131 /// </summary>
132 /// <returns></returns>
133 public static string GetOS()
134 {
135 PlatformID platId = Environment.OSVersion.Platform;
136 if(platId == PlatformID.Win32NT || platId == PlatformID.Win32Windows)
137 {
138 return "Win32";
139 }
140
141 /*
142 * .NET 1.x, under Mono, the UNIX code is 128. Under
143 * .NET 2.x, Mono or MS, the UNIX code is 4
144 */
145 if(Environment.Version.Major == 1)
146 {
147 if((int)platId == 128)
148 {
149 return "UNIX";
150 }
151 }
152 else if((int)platId == 4)
153 {
154 return "UNIX";
155 }
156
157 return "Unknown";
158 }
159
160 private static bool CompareNum(OperatorSymbol oper, int val1, int val2)
161 {
162 switch(oper)
163 {
164 case OperatorSymbol.Equal:
165 return (val1 == val2);
166 case OperatorSymbol.NotEqual:
167 return (val1 != val2);
168 case OperatorSymbol.LessThan:
169 return (val1 < val2);
170 case OperatorSymbol.LessThanEqual:
171 return (val1 <= val2);
172 case OperatorSymbol.GreaterThan:
173 return (val1 > val2);
174 case OperatorSymbol.GreaterThanEqual:
175 return (val1 >= val2);
176 }
177
178 throw new WarningException("Unknown operator type");
179 }
180
181 private static bool CompareStr(OperatorSymbol oper, string val1, string val2)
182 {
183 switch(oper)
184 {
185 case OperatorSymbol.Equal:
186 return (val1 == val2);
187 case OperatorSymbol.NotEqual:
188 return (val1 != val2);
189 case OperatorSymbol.LessThan:
190 return (val1.CompareTo(val2) < 0);
191 case OperatorSymbol.LessThanEqual:
192 return (val1.CompareTo(val2) <= 0);
193 case OperatorSymbol.GreaterThan:
194 return (val1.CompareTo(val2) > 0);
195 case OperatorSymbol.GreaterThanEqual:
196 return (val1.CompareTo(val2) >= 0);
197 }
198
199 throw new WarningException("Unknown operator type");
200 }
201
202 private static char NextChar(int idx, string str)
203 {
204 if((idx + 1) >= str.Length)
205 {
206 return Char.MaxValue;
207 }
208
209 return str[idx + 1];
210 }
211 // Very very simple expression parser. Can only match expressions of the form
212 // <var> <op> <value>:
213 // OS = Windows
214 // OS != Linux
215 // RuntimeMinor > 0
216 private bool ParseExpression(string exp)
217 {
218 if(exp == null)
219 {
220 throw new ArgumentException("Invalid expression, cannot be null");
221 }
222
223 exp = exp.Trim();
224 if(exp.Length < 1)
225 {
226 throw new ArgumentException("Invalid expression, cannot be 0 length");
227 }
228
229 string id = "";
230 string str = "";
231 OperatorSymbol oper = OperatorSymbol.None;
232 bool inStr = false;
233 char c;
234
235 for(int i = 0; i < exp.Length; i++)
236 {
237 c = exp[i];
238 if(Char.IsWhiteSpace(c))
239 {
240 continue;
241 }
242
243 if(Char.IsLetterOrDigit(c) || c == '_')
244 {
245 if(inStr)
246 {
247 str += c;
248 }
249 else
250 {
251 id += c;
252 }
253 }
254 else if(c == '\"')
255 {
256 inStr = !inStr;
257 if(inStr)
258 {
259 str = "";
260 }
261 }
262 else
263 {
264 if(inStr)
265 {
266 str += c;
267 }
268 else
269 {
270 switch(c)
271 {
272 case '=':
273 oper = OperatorSymbol.Equal;
274 break;
275
276 case '!':
277 if(NextChar(i, exp) == '=')
278 {
279 oper = OperatorSymbol.NotEqual;
280 }
281
282 break;
283
284 case '<':
285 if(NextChar(i, exp) == '=')
286 {
287 oper = OperatorSymbol.LessThanEqual;
288 }
289 else
290 {
291 oper = OperatorSymbol.LessThan;
292 }
293
294 break;
295
296 case '>':
297 if(NextChar(i, exp) == '=')
298 {
299 oper = OperatorSymbol.GreaterThanEqual;
300 }
301 else
302 {
303 oper = OperatorSymbol.GreaterThan;
304 }
305
306 break;
307 }
308 }
309 }
310 }
311
312
313 if(inStr)
314 {
315 throw new WarningException("Expected end of string in expression");
316 }
317
318 if(oper == OperatorSymbol.None)
319 {
320 throw new WarningException("Expected operator in expression");
321 }
322 else if(id.Length < 1)
323 {
324 throw new WarningException("Expected identifier in expression");
325 }
326 else if(str.Length < 1)
327 {
328 throw new WarningException("Expected value in expression");
329 }
330
331 bool ret = false;
332 try
333 {
334 object val = m_Variables[id.ToLower()];
335 if(val == null)
336 {
337 throw new WarningException("Unknown identifier '{0}'", id);
338 }
339
340 int numVal, numVal2;
341 string strVal, strVal2;
342 Type t = val.GetType();
343 if(t.IsAssignableFrom(typeof(int)))
344 {
345 numVal = (int)val;
346 numVal2 = Int32.Parse(str);
347 ret = CompareNum(oper, numVal, numVal2);
348 }
349 else
350 {
351 strVal = val.ToString();
352 strVal2 = str;
353 ret = CompareStr(oper, strVal, strVal2);
354 }
355 }
356 catch(ArgumentException ex)
357 {
358 ex.ToString();
359 throw new WarningException("Invalid value type for system variable '{0}', expected int", id);
360 }
361
362 return ret;
363 }
364
365 #endregion
366
367 #region Public Methods
368
369 /// <summary>
370 ///
371 /// </summary>
372 /// <param name="name"></param>
373 /// <param name="variableValue"></param>
374 public void RegisterVariable(string name, object variableValue)
375 {
376 if(name == null || variableValue == null)
377 {
378 return;
379 }
380
381 m_Variables[name.ToLower()] = variableValue;
382 }
383
384 /// <summary>
385 /// Performs validation on the xml source as well as evaluates conditional and flow expresions
386 /// </summary>
387 /// <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>
388 /// <param name="reader"></param>
389 /// <returns>the output xml </returns>
390 public string Process(XmlReader reader)
391 {
392 if(reader == null)
393 {
394 throw new ArgumentException("Invalid XML reader to pre-process");
395 }
396
397 IfContext context = new IfContext(true, true, IfState.None);
398 StringWriter xmlText = new StringWriter();
399 XmlTextWriter writer = new XmlTextWriter(xmlText);
400 writer.Formatting = Formatting.Indented;
401 while(reader.Read())
402 {
403 if(reader.NodeType == XmlNodeType.ProcessingInstruction)
404 {
405 bool ignore = false;
406 switch(reader.LocalName)
407 {
408 case "if":
409 m_IfStack.Push(context);
410 context = new IfContext(context.Keep & context.Active, ParseExpression(reader.Value), IfState.If);
411 ignore = true;
412 break;
413
414 case "elseif":
415 if(m_IfStack.Count == 0)
416 {
417 throw new WarningException("Unexpected 'elseif' outside of 'if'");
418 }
419 else if(context.State != IfState.If && context.State != IfState.ElseIf)
420 {
421 throw new WarningException("Unexpected 'elseif' outside of 'if'");
422 }
423
424 context.State = IfState.ElseIf;
425 if(!context.EverKept)
426 {
427 context.Keep = ParseExpression(reader.Value);
428 }
429 else
430 {
431 context.Keep = false;
432 }
433
434 ignore = true;
435 break;
436
437 case "else":
438 if(m_IfStack.Count == 0)
439 {
440 throw new WarningException("Unexpected 'else' outside of 'if'");
441 }
442 else if(context.State != IfState.If && context.State != IfState.ElseIf)
443 {
444 throw new WarningException("Unexpected 'else' outside of 'if'");
445 }
446
447 context.State = IfState.Else;
448 context.Keep = !context.EverKept;
449 ignore = true;
450 break;
451
452 case "endif":
453 if(m_IfStack.Count == 0)
454 {
455 throw new WarningException("Unexpected 'endif' outside of 'if'");
456 }
457
458 context = (IfContext)m_IfStack.Pop();
459 ignore = true;
460 break;
461 }
462
463 if(ignore)
464 {
465 continue;
466 }
467 }//end pre-proc instruction
468
469 if(!context.Active || !context.Keep)
470 {
471 continue;
472 }
473
474 switch(reader.NodeType)
475 {
476 case XmlNodeType.Element:
477 bool empty = reader.IsEmptyElement;
478 writer.WriteStartElement(reader.Name);
479
480 while (reader.MoveToNextAttribute())
481 {
482 writer.WriteAttributeString(reader.Name, reader.Value);
483 }
484
485 if(empty)
486 {
487 writer.WriteEndElement();
488 }
489
490 break;
491
492 case XmlNodeType.EndElement:
493 writer.WriteEndElement();
494 break;
495
496 case XmlNodeType.Text:
497 writer.WriteString(reader.Value);
498 break;
499
500 case XmlNodeType.CDATA:
501 writer.WriteCData(reader.Value);
502 break;
503
504 default:
505 break;
506 }
507 }
508
509 if(m_IfStack.Count != 0)
510 {
511 throw new WarningException("Mismatched 'if', 'endif' pair");
512 }
513
514 return xmlText.ToString();
515 }
516
517 #endregion
518 }
519}
diff --git a/Prebuild/src/Core/Targets/AutotoolsTarget.cs b/Prebuild/src/Core/Targets/AutotoolsTarget.cs
new file mode 100644
index 0000000..2b4a678
--- /dev/null
+++ b/Prebuild/src/Core/Targets/AutotoolsTarget.cs
@@ -0,0 +1,926 @@
1#region BSD License
2/*
3
4Copyright (c) 2004 - 2006
5Matthew Holmes (matthew@wildfiregames.com),
6Dan Moorehead (dan05a@gmail.com),
7Dave Hudson (jendave@yahoo.com),
8C.J. Adams-Collier (cjcollier@colliertech.org),
9
10Redistribution and use in source and binary forms, with or without
11modification, are permitted provided that the following conditions are
12met:
13
14* Redistributions of source code must retain the above copyright
15notice, this list of conditions and the following disclaimer.
16
17* Redistributions in binary form must reproduce the above copyright
18notice, this list of conditions and the following disclaimer in the
19documentation and/or other materials provided with the distribution.
20
21* The name of the author may not be used to endorse or promote
22products derived from this software without specific prior written
23permission.
24
25THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
26IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
29INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
34IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35POSSIBILITY OF SUCH DAMAGE.
36
37*/
38#endregion
39
40#region CVS Information
41/*
42 * $Source$
43 * $Author: jendave $
44 * $Date: 2006-07-28 22:43:24 -0700 (Fri, 28 Jul 2006) $
45 * $Revision: 136 $
46 */
47#endregion
48
49using System;
50using System.Collections;
51using System.Collections.Specialized;
52using System.IO;
53using System.Reflection;
54using System.Text;
55using System.Text.RegularExpressions;
56
57using Prebuild.Core.Attributes;
58using Prebuild.Core.Interfaces;
59using Prebuild.Core.Nodes;
60using Prebuild.Core.Parse;
61using Prebuild.Core.Utilities;
62
63namespace Prebuild.Core.Targets
64{
65 /// <summary>
66 ///
67 /// </summary>
68 [Target("autotools")]
69 public class AutotoolsTarget : ITarget
70 {
71 #region Fields
72
73 private Kernel m_Kernel;
74
75 #endregion
76
77 #region Private Methods
78
79 private static string PrependPath(string path)
80 {
81 string tmpPath = Helper.NormalizePath(path, '/');
82 Regex regex = new Regex(@"(\w):/(\w+)");
83 Match match = regex.Match(tmpPath);
84 if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
85 {
86 tmpPath = Helper.NormalizePath(tmpPath);
87 }
88 else
89 {
90 tmpPath = Helper.NormalizePath("./" + tmpPath);
91 }
92
93 return tmpPath;
94 }
95
96 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
97 {
98 string ret = "";
99 if(solution.ProjectsTable.ContainsKey(refr.Name))
100 {
101 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
102 string fileRef = FindFileReference(refr.Name, project);
103 string finalPath = Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + "/$(BUILD_DIR)/$(CONFIG)/", refr.Name, "dll"), '/');
104 ret += finalPath;
105 return ret;
106 }
107 else
108 {
109 ProjectNode project = (ProjectNode)refr.Parent;
110 string fileRef = FindFileReference(refr.Name, project);
111
112 if(refr.Path != null || fileRef != null)
113 {
114 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path + "/" + refr.Name + ".dll", '/') : fileRef;
115 ret += Path.Combine(project.Path, finalPath);
116 return ret;
117 }
118
119 try
120 {
121 //Assembly assem = Assembly.Load(refr.Name);
122 //if (assem != null)
123 //{
124 // int index = refr.Name.IndexOf(",");
125 // if ( index > 0)
126 // {
127 // ret += assem.Location;
128 // //Console.WriteLine("Location1: " + assem.Location);
129 // }
130 // else
131 // {
132 // ret += (refr.Name + ".dll");
133 // //Console.WriteLine("Location2: " + assem.Location);
134 // }
135 //}
136 //else
137 //{
138 int index = refr.Name.IndexOf(",");
139 if ( index > 0)
140 {
141 ret += refr.Name.Substring(0, index) + ".dll";
142 //Console.WriteLine("Location3: " + assem.Location);
143 }
144 else
145 {
146 ret += (refr.Name + ".dll");
147 //Console.WriteLine("Location4: " + assem.Location);
148 }
149 //}
150 }
151 catch (System.NullReferenceException e)
152 {
153 e.ToString();
154 int index = refr.Name.IndexOf(",");
155 if ( index > 0)
156 {
157 ret += refr.Name.Substring(0, index) + ".dll";
158 //Console.WriteLine("Location5: " + assem.Location);
159 }
160 else
161 {
162 ret += (refr.Name + ".dll");
163 //Console.WriteLine("Location6: " + assem.Location);
164 }
165 }
166 }
167 return ret;
168 }
169
170 private static string BuildReferencePath(SolutionNode solution, ReferenceNode refr)
171 {
172 string ret = "";
173 if(solution.ProjectsTable.ContainsKey(refr.Name))
174 {
175 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
176 string finalPath = Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + "/${build.dir}/"), '/');
177 ret += finalPath;
178 return ret;
179 }
180 else
181 {
182 ProjectNode project = (ProjectNode)refr.Parent;
183 string fileRef = FindFileReference(refr.Name, project);
184
185
186 if(refr.Path != null || fileRef != null)
187 {
188 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path, '/') : fileRef;
189 ret += finalPath;
190 return ret;
191 }
192
193 try
194 {
195 Assembly assem = Assembly.Load(refr.Name);
196 if (assem != null)
197 {
198 ret += "";
199 }
200 else
201 {
202 ret += "";
203 }
204 }
205 catch (System.NullReferenceException e)
206 {
207 e.ToString();
208 ret += "";
209 }
210 }
211 return ret;
212 }
213
214 private static string FindFileReference(string refName, ProjectNode project)
215 {
216 foreach(ReferencePathNode refPath in project.ReferencePaths)
217 {
218 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
219
220 if(File.Exists(fullPath))
221 {
222 return fullPath;
223 }
224 }
225
226 return null;
227 }
228
229 /// <summary>
230 /// Gets the XML doc file.
231 /// </summary>
232 /// <param name="project">The project.</param>
233 /// <param name="conf">The conf.</param>
234 /// <returns></returns>
235 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
236 {
237 if( conf == null )
238 {
239 throw new ArgumentNullException("conf");
240 }
241 if( project == null )
242 {
243 throw new ArgumentNullException("project");
244 }
245 string docFile = (string)conf.Options["XmlDocFile"];
246 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
247 // {
248 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
249 // }
250 return docFile;
251 }
252
253 /// <summary>
254 /// Normalizes the path.
255 /// </summary>
256 /// <param name="path">The path.</param>
257 /// <returns></returns>
258 public static string NormalizePath(string path)
259 {
260 if(path == null)
261 {
262 return "";
263 }
264
265 StringBuilder tmpPath;
266
267 if (Core.Parse.Preprocessor.GetOS() == "Win32")
268 {
269 tmpPath = new StringBuilder(path.Replace('\\', '/'));
270 tmpPath.Replace("/", @"\\");
271 }
272 else
273 {
274 tmpPath = new StringBuilder(path.Replace('\\', '/'));
275 tmpPath = tmpPath.Replace('/', Path.DirectorySeparatorChar);
276 }
277 return tmpPath.ToString();
278 }
279
280 private void WriteProject(SolutionNode solution, ProjectNode project)
281 {
282 string projFile = Helper.MakeFilePath(project.FullPath, "Include", "am");
283 StreamWriter ss = new StreamWriter(projFile);
284 ss.NewLine = "\n";
285
286 m_Kernel.CurrentWorkingDirectory.Push();
287 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
288
289 using(ss)
290 {
291 ss.WriteLine(Helper.AssemblyFullName(project.AssemblyName, project.Type) + ":");
292 ss.WriteLine("\tmkdir -p " + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/");
293 foreach(string file in project.Files)
294 {
295 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
296 {
297 ss.Write("\tresgen ");
298 ss.Write(Helper.NormalizePath(Path.Combine(project.Path, file.Substring(0, file.LastIndexOf('.')) + ".resx "), '/'));
299 if (project.Files.GetResourceName(file) != "")
300 {
301 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/'));
302 }
303 else
304 {
305 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/'));
306 }
307 }
308 }
309 ss.WriteLine("\t$(CSC)\t/out:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " \\");
310 ss.WriteLine("\t\t/target:" + project.Type.ToString().ToLower() + " \\");
311 if (project.References.Count > 0)
312 {
313 ss.Write("\t\t/reference:");
314 bool firstref = true;
315 foreach(ReferenceNode refr in project.References)
316 {
317 if (firstref)
318 {
319 firstref = false;
320 }
321 else
322 {
323 ss.Write(",");
324 }
325 ss.Write("{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(solution.FullPath, BuildReference(solution, refr)), '/'));
326 }
327 ss.WriteLine(" \\");
328 }
329 //ss.WriteLine("\t\tProperties/AssemblyInfo.cs \\");
330
331 foreach(string file in project.Files)
332 {
333 switch(project.Files.GetBuildAction(file))
334 {
335 case BuildAction.EmbeddedResource:
336 ss.Write("\t\t/resource:");
337 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, file), '/') + " \\");
338 break;
339 default:
340 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
341 {
342 ss.Write("\t\t/resource:");
343 if (project.Files.GetResourceName(file) != "")
344 {
345 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/') + "," + project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources" + " \\");
346 }
347 else
348 {
349 ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/') + "," + project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources" + " \\");
350 }
351 }
352 break;
353 }
354 }
355
356 foreach(ConfigurationNode conf in project.Configurations)
357 {
358 if (conf.Options.KeyFile !="")
359 {
360 ss.WriteLine("\t\t/keyfile:" + Helper.NormalizePath(Path.Combine(project.Path, conf.Options.KeyFile), '/') + " \\");
361 break;
362 }
363 }
364 foreach(ConfigurationNode conf in project.Configurations)
365 {
366 if (conf.Options.AllowUnsafe)
367 {
368 ss.WriteLine("\t\t/unsafe \\");
369 break;
370 }
371 }
372 if (project.AppIcon != "")
373 {
374 ss.WriteLine("\t\t/win32icon:" + Helper.NormalizePath(Path.Combine(project.Path, project.AppIcon), '/') + " \\");
375 }
376
377 foreach(ConfigurationNode conf in project.Configurations)
378 {
379 ss.WriteLine("\t\t/define:{0}", conf.Options.CompilerDefines.Replace(';', ',') + " \\");
380 break;
381 }
382
383 foreach(ConfigurationNode conf in project.Configurations)
384 {
385 if (GetXmlDocFile(project, conf) !="")
386 {
387 ss.WriteLine("\t\t/doc:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + project.Name + ".xml \\");
388 break;
389 }
390 }
391 foreach(string file in project.Files)
392 {
393 switch(project.Files.GetBuildAction(file))
394 {
395 case BuildAction.Compile:
396 ss.WriteLine("\t\t\\");
397 ss.Write("\t\t" + NormalizePath(Path.Combine(Helper.MakePathRelativeTo(solution.FullPath, project.Path), file)));
398 break;
399 default:
400 break;
401 }
402 }
403 ss.WriteLine();
404 ss.WriteLine();
405
406 if (project.Type == ProjectType.Library)
407 {
408 ss.WriteLine("install-data-local:");
409 ss.WriteLine(" echo \"$(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS)\"; \\");
410 ss.WriteLine(" $(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS) || exit 1;");
411 ss.WriteLine();
412 ss.WriteLine("uninstall-local:");
413 ss.WriteLine(" echo \"$(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS)\"; \\");
414 ss.WriteLine(" $(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS) || exit 1;");
415 ss.WriteLine();
416 }
417 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");
418 ss.WriteLine("EXTRA_DIST = \\");
419 ss.Write(" $(FILES)");
420 foreach(ConfigurationNode conf in project.Configurations)
421 {
422 if (conf.Options.KeyFile != "")
423 {
424 ss.Write(" \\");
425 ss.WriteLine("\t" + conf.Options.KeyFile);
426 }
427 break;
428 }
429 }
430 m_Kernel.CurrentWorkingDirectory.Pop();
431 }
432 bool hasLibrary = false;
433
434 private void WriteCombine(SolutionNode solution)
435 {
436
437 /* TODO: These vars should be pulled from the prebuild.xml file */
438 string releaseVersion = "2.0.0";
439 string assemblyVersion = "2.1.0.0";
440 string description =
441 "Tao Framework " + solution.Name + " Binding For .NET";
442
443 hasLibrary = false;
444 m_Kernel.Log.Write("Creating Autotools make files");
445 foreach(ProjectNode project in solution.Projects)
446 {
447 if(m_Kernel.AllowProject(project.FilterGroups))
448 {
449 m_Kernel.Log.Write("...Creating makefile: {0}", project.Name);
450 WriteProject(solution, project);
451 }
452 }
453
454 m_Kernel.Log.Write("");
455 string combFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am");
456 StreamWriter ss = new StreamWriter(combFile);
457 ss.NewLine = "\n";
458
459 m_Kernel.CurrentWorkingDirectory.Push();
460 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
461
462 using(ss)
463 {
464 foreach(ProjectNode project in solution.ProjectsTableOrder)
465 {
466 if (project.Type == ProjectType.Library)
467 {
468 hasLibrary = true;
469 break;
470 }
471 }
472
473 if (hasLibrary)
474 {
475 ss.Write("pkgconfig_in_files = ");
476 foreach(ProjectNode project in solution.ProjectsTableOrder)
477 {
478 if (project.Type == ProjectType.Library)
479 {
480 string combFilepc = Helper.MakeFilePath(solution.FullPath, project.Name, "pc.in");
481 ss.Write(" " + project.Name + ".pc.in ");
482 StreamWriter sspc = new StreamWriter(combFilepc);
483 sspc.NewLine = "\n";
484 using(sspc)
485 {
486 sspc.WriteLine("prefix=@prefix@");
487 sspc.WriteLine("exec_prefix=${prefix}");
488 sspc.WriteLine("libdir=${exec_prefix}/lib");
489 sspc.WriteLine();
490 sspc.WriteLine("Name: @PACKAGE_NAME@");
491 sspc.WriteLine("Description: @DESCRIPTION@");
492 sspc.WriteLine("Version: @ASSEMBLY_VERSION@");
493 sspc.WriteLine("Libs: -r:${libdir}/mono/gac/@PACKAGE_NAME@/@ASSEMBLY_VERSION@__@PUBKEY@/@PACKAGE_NAME@.dll");
494 }
495 }
496 }
497
498 ss.WriteLine();
499 ss.WriteLine("pkgconfigdir=$(prefix)/lib/pkgconfig");
500 ss.WriteLine("pkgconfig_DATA=$(pkgconfig_in_files:.pc.in=.pc)");
501 }
502 ss.WriteLine();
503 foreach(ProjectNode project in solution.ProjectsTableOrder)
504 {
505 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
506 ss.WriteLine("-include x {0}",
507 Helper.NormalizePath(Helper.MakeFilePath(path, "Include", "am"),'/'));
508 }
509 ss.WriteLine();
510 ss.WriteLine("all: \\");
511 ss.Write("\t");
512 foreach(ProjectNode project in solution.ProjectsTableOrder)
513 {
514 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
515 ss.Write(Helper.AssemblyFullName(project.AssemblyName, project.Type) + " ");
516
517 }
518 ss.WriteLine();
519 if (hasLibrary)
520 {
521 ss.WriteLine("EXTRA_DIST = \\");
522 ss.WriteLine("\t$(pkgconfig_in_files)");
523 }
524 else
525 {
526 ss.WriteLine("EXTRA_DIST = ");
527 }
528 ss.WriteLine();
529 ss.WriteLine("DISTCLEANFILES = \\");
530 ss.WriteLine("\tconfigure \\");
531 ss.WriteLine("\tMakefile.in \\");
532 ss.WriteLine("\taclocal.m4");
533 }
534 combFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac");
535 StreamWriter ts = new StreamWriter(combFile);
536 ts.NewLine = "\n";
537 using(ts)
538 {
539 if (this.hasLibrary)
540 {
541 foreach(ProjectNode project in solution.ProjectsTableOrder)
542 {
543 if (project.Type == ProjectType.Library)
544 {
545 ts.WriteLine("AC_INIT(" + project.Name + ".pc.in)");
546 break;
547 }
548 }
549 }
550 else
551 {
552 ts.WriteLine("AC_INIT(Makefile.am)");
553 }
554 ts.WriteLine("AC_PREREQ(2.53)");
555 ts.WriteLine("AC_CANONICAL_SYSTEM");
556
557 ts.WriteLine("PACKAGE_NAME={0}", solution.Name);
558 ts.WriteLine("PACKAGE_VERSION={0}", releaseVersion);
559 ts.WriteLine("DESCRIPTION=\"{0}\"", description);
560 ts.WriteLine("AC_SUBST(DESCRIPTION)");
561 ts.WriteLine("AM_INIT_AUTOMAKE([$PACKAGE_NAME],[$PACKAGE_VERSION],[$DESCRIPTION])");
562
563 ts.WriteLine("ASSEMBLY_VERSION={0}", assemblyVersion);
564 ts.WriteLine("AC_SUBST(ASSEMBLY_VERSION)");
565
566 ts.WriteLine("PUBKEY=`sn -t $PACKAGE_NAME.snk | grep 'Public Key Token' | awk -F: '{print $2}' | sed -e 's/^ //'`");
567 ts.WriteLine("AC_SUBST(PUBKEY)");
568
569 ts.WriteLine();
570 ts.WriteLine("AM_MAINTAINER_MODE");
571 ts.WriteLine();
572 ts.WriteLine("dnl AC_PROG_INTLTOOL([0.25])");
573 ts.WriteLine();
574 ts.WriteLine("AC_PROG_INSTALL");
575 ts.WriteLine();
576 ts.WriteLine("MONO_REQUIRED_VERSION=1.1");
577 ts.WriteLine();
578 ts.WriteLine("AC_MSG_CHECKING([whether we're compiling from CVS])");
579 ts.WriteLine("if test -f \"$srcdir/.cvs_version\" ; then");
580 ts.WriteLine(" from_cvs=yes");
581 ts.WriteLine("else");
582 ts.WriteLine(" if test -f \"$srcdir/.svn\" ; then");
583 ts.WriteLine(" from_cvs=yes");
584 ts.WriteLine(" else");
585 ts.WriteLine(" from_cvs=no");
586 ts.WriteLine(" fi");
587 ts.WriteLine("fi");
588 ts.WriteLine();
589 ts.WriteLine("AC_MSG_RESULT($from_cvs)");
590 ts.WriteLine();
591 ts.WriteLine("AC_PATH_PROG(MONO, mono)");
592 ts.WriteLine("AC_PATH_PROG(GMCS, gmcs)");
593 ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil)");
594 ts.WriteLine();
595 ts.WriteLine("AC_MSG_CHECKING([for mono])");
596 ts.WriteLine("dnl if test \"x$MONO\" = \"x\" ; then");
597 ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"mono\" in your PATH])");
598 ts.WriteLine("dnl else");
599 ts.WriteLine(" AC_MSG_RESULT([found])");
600 ts.WriteLine("dnl fi");
601 ts.WriteLine();
602 ts.WriteLine("AC_MSG_CHECKING([for gmcs])");
603 ts.WriteLine("dnl if test \"x$GMCS\" = \"x\" ; then");
604 ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"gmcs\" in your PATH])");
605 ts.WriteLine("dnl else");
606 ts.WriteLine(" AC_MSG_RESULT([found])");
607 ts.WriteLine("dnl fi");
608 ts.WriteLine();
609 //ts.WriteLine("AC_MSG_CHECKING([for gacutil])");
610 //ts.WriteLine("if test \"x$GACUTIL\" = \"x\" ; then");
611 //ts.WriteLine(" AC_MSG_ERROR([Can't find \"gacutil\" in your PATH])");
612 //ts.WriteLine("else");
613 //ts.WriteLine(" AC_MSG_RESULT([found])");
614 //ts.WriteLine("fi");
615 ts.WriteLine();
616 ts.WriteLine("AC_SUBST(PATH)");
617 ts.WriteLine("AC_SUBST(LD_LIBRARY_PATH)");
618 ts.WriteLine();
619 ts.WriteLine("dnl CSFLAGS=\"-debug -nowarn:1574\"");
620 ts.WriteLine("CSFLAGS=\"\"");
621 ts.WriteLine("AC_SUBST(CSFLAGS)");
622 ts.WriteLine();
623 // ts.WriteLine("AC_MSG_CHECKING(--disable-sdl argument)");
624 // ts.WriteLine("AC_ARG_ENABLE(sdl,");
625 // ts.WriteLine(" [ --disable-sdl Disable Sdl interface.],");
626 // ts.WriteLine(" [disable_sdl=$disableval],");
627 // ts.WriteLine(" [disable_sdl=\"no\"])");
628 // ts.WriteLine("AC_MSG_RESULT($disable_sdl)");
629 // ts.WriteLine("if test \"$disable_sdl\" = \"yes\"; then");
630 // ts.WriteLine(" AC_DEFINE(FEAT_SDL)");
631 // ts.WriteLine("fi");
632 ts.WriteLine();
633 ts.WriteLine("dnl Find pkg-config");
634 ts.WriteLine("AC_PATH_PROG(PKGCONFIG, pkg-config, no)");
635 ts.WriteLine("if test \"x$PKG_CONFIG\" = \"xno\"; then");
636 ts.WriteLine(" AC_MSG_ERROR([You need to install pkg-config])");
637 ts.WriteLine("fi");
638 ts.WriteLine();
639 ts.WriteLine("PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)");
640 ts.WriteLine("BUILD_DIR=\"bin\"");
641 ts.WriteLine("AC_SUBST(BUILD_DIR)");
642 ts.WriteLine("CONFIG=\"Release\"");
643 ts.WriteLine("AC_SUBST(CONFIG)");
644 ts.WriteLine();
645 ts.WriteLine("if test \"x$has_mono\" = \"xtrue\"; then");
646 ts.WriteLine(" AC_PATH_PROG(RUNTIME, mono, no)");
647 ts.WriteLine(" AC_PATH_PROG(CSC, gmcs, no)");
648 ts.WriteLine(" if test `uname -s` = \"Darwin\"; then");
649 ts.WriteLine(" LIB_PREFIX=");
650 ts.WriteLine(" LIB_SUFFIX=.dylib");
651 ts.WriteLine(" else");
652 ts.WriteLine(" LIB_PREFIX=.so");
653 ts.WriteLine(" LIB_SUFFIX=");
654 ts.WriteLine(" fi");
655 ts.WriteLine("else");
656 ts.WriteLine(" AC_PATH_PROG(CSC, csc.exe, no)");
657 ts.WriteLine(" if test x$CSC = \"xno\"; then");
658 ts.WriteLine(" AC_MSG_ERROR([You need to install either mono or .Net])");
659 ts.WriteLine(" else");
660 ts.WriteLine(" RUNTIME=");
661 ts.WriteLine(" LIB_PREFIX=");
662 ts.WriteLine(" LIB_SUFFIX=.dylib");
663 ts.WriteLine(" fi");
664 ts.WriteLine("fi");
665 ts.WriteLine();
666 ts.WriteLine("AC_SUBST(LIB_PREFIX)");
667 ts.WriteLine("AC_SUBST(LIB_SUFFIX)");
668 ts.WriteLine();
669 ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_CFLAGS)");
670 ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_LIBS)");
671 ts.WriteLine();
672 ts.WriteLine("dnl Find monodoc");
673 ts.WriteLine("MONODOC_REQUIRED_VERSION=1.0");
674 ts.WriteLine("AC_SUBST(MONODOC_REQUIRED_VERSION)");
675 ts.WriteLine("PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no)");
676 ts.WriteLine();
677 ts.WriteLine("if test \"x$enable_monodoc\" = \"xyes\"; then");
678 ts.WriteLine(" AC_PATH_PROG(MONODOC, monodoc, no)");
679 ts.WriteLine(" if test x$MONODOC = xno; then");
680 ts.WriteLine(" enable_monodoc=no");
681 ts.WriteLine(" fi");
682 ts.WriteLine("else");
683 ts.WriteLine(" MONODOC=");
684 ts.WriteLine("fi");
685 ts.WriteLine();
686 ts.WriteLine("AC_SUBST(MONODOC)");
687 ts.WriteLine("AM_CONDITIONAL(ENABLE_MONODOC, test \"x$enable_monodoc\" = \"xyes\")");
688 ts.WriteLine();
689 ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil, no)");
690 ts.WriteLine("if test \"x$GACUTIL\" = \"xno\" ; then");
691 ts.WriteLine(" AC_MSG_ERROR([No gacutil tool found])");
692 ts.WriteLine("fi");
693 ts.WriteLine();
694 // foreach(ProjectNode project in solution.ProjectsTableOrder)
695 // {
696 // if (project.Type == ProjectType.Library)
697 // {
698 // }
699 // }
700 ts.WriteLine("GACUTIL_FLAGS='/package $(PACKAGE_NAME) /gacdir $(DESTDIR)$(prefix)'");
701 ts.WriteLine("AC_SUBST(GACUTIL_FLAGS)");
702 ts.WriteLine();
703 ts.WriteLine("winbuild=no");
704 ts.WriteLine("case \"$host\" in");
705 ts.WriteLine(" *-*-mingw*|*-*-cygwin*)");
706 ts.WriteLine(" winbuild=yes");
707 ts.WriteLine(" ;;");
708 ts.WriteLine("esac");
709 ts.WriteLine("AM_CONDITIONAL(WINBUILD, test x$winbuild = xyes)");
710 ts.WriteLine();
711 // ts.WriteLine("dnl Check for SDL");
712 // ts.WriteLine();
713 // ts.WriteLine("AC_PATH_PROG([SDL_CONFIG], [sdl-config])");
714 // ts.WriteLine("have_sdl=no");
715 // ts.WriteLine("if test -n \"${SDL_CONFIG}\"; then");
716 // ts.WriteLine(" have_sdl=yes");
717 // ts.WriteLine(" SDL_CFLAGS=`$SDL_CONFIG --cflags`");
718 // ts.WriteLine(" SDL_LIBS=`$SDL_CONFIG --libs`");
719 // ts.WriteLine(" #");
720 // ts.WriteLine(" # sdl-config sometimes emits an rpath flag pointing at its library");
721 // ts.WriteLine(" # installation directory. We don't want this, as it prevents users from");
722 // ts.WriteLine(" # linking sdl-viewer against, for example, a locally compiled libGL when a");
723 // ts.WriteLine(" # version of the library also exists in SDL's library installation");
724 // ts.WriteLine(" # directory, typically /usr/lib.");
725 // ts.WriteLine(" #");
726 // ts.WriteLine(" SDL_LIBS=`echo $SDL_LIBS | sed 's/-Wl,-rpath,[[^ ]]* //'`");
727 // ts.WriteLine("fi");
728 // ts.WriteLine("AC_SUBST([SDL_CFLAGS])");
729 // ts.WriteLine("AC_SUBST([SDL_LIBS])");
730 ts.WriteLine();
731 ts.WriteLine("AC_OUTPUT([");
732 ts.WriteLine("Makefile");
733 // TODO: this does not work quite right.
734 //ts.WriteLine("Properties/AssemblyInfo.cs");
735 foreach(ProjectNode project in solution.ProjectsTableOrder)
736 {
737 if (project.Type == ProjectType.Library)
738 {
739 ts.WriteLine(project.Name + ".pc");
740 }
741 // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
742 // ts.WriteLine(Helper.NormalizePath(Helper.MakeFilePath(path, "Include"),'/'));
743 }
744 ts.WriteLine("])");
745 ts.WriteLine();
746 ts.WriteLine("#po/Makefile.in");
747 ts.WriteLine();
748 ts.WriteLine("echo \"---\"");
749 ts.WriteLine("echo \"Configuration summary\"");
750 ts.WriteLine("echo \"\"");
751 ts.WriteLine("echo \" * Installation prefix: $prefix\"");
752 ts.WriteLine("echo \" * compiler: $CSC\"");
753 ts.WriteLine("echo \" * Documentation: $enable_monodoc ($MONODOC)\"");
754 ts.WriteLine("echo \" * Package Name: $PACKAGE_NAME\"");
755 ts.WriteLine("echo \" * Version: $PACKAGE_VERSION\"");
756 ts.WriteLine("echo \" * Public Key: $PUBKEY\"");
757 ts.WriteLine("echo \"\"");
758 ts.WriteLine("echo \"---\"");
759 ts.WriteLine();
760 }
761
762 ts.NewLine = "\n";
763 foreach (ProjectNode project in solution.ProjectsTableOrder)
764 {
765 if (project.GenerateAssemblyInfoFile)
766 {
767 GenerateAssemblyInfoFile(solution, combFile);
768 }
769 }
770 }
771
772 private static void GenerateAssemblyInfoFile(SolutionNode solution, string combFile)
773 {
774 System.IO.Directory.CreateDirectory(Helper.MakePathRelativeTo(solution.FullPath, "Properties"));
775 combFile = Helper.MakeFilePath(solution.FullPath + "/Properties/", "AssemblyInfo.cs", "in");
776 StreamWriter ai = new StreamWriter(combFile);
777
778 using (ai)
779 {
780 ai.WriteLine("#region License");
781 ai.WriteLine("/*");
782 ai.WriteLine("MIT License");
783 ai.WriteLine("Copyright (c)2003-2006 Tao Framework Team");
784 ai.WriteLine("http://www.taoframework.com");
785 ai.WriteLine("All rights reserved.");
786 ai.WriteLine("");
787 ai.WriteLine("Permission is hereby granted, free of charge, to any person obtaining a copy");
788 ai.WriteLine("of this software and associated documentation files (the \"Software\"), to deal");
789 ai.WriteLine("in the Software without restriction, including without limitation the rights");
790 ai.WriteLine("to use, copy, modify, merge, publish, distribute, sublicense, and/or sell");
791 ai.WriteLine("copies of the Software, and to permit persons to whom the Software is");
792 ai.WriteLine("furnished to do so, subject to the following conditions:");
793 ai.WriteLine("");
794 ai.WriteLine("The above copyright notice and this permission notice shall be included in all");
795 ai.WriteLine("copies or substantial portions of the Software.");
796 ai.WriteLine("");
797 ai.WriteLine("THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR");
798 ai.WriteLine("IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,");
799 ai.WriteLine("FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE");
800 ai.WriteLine("AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER");
801 ai.WriteLine("LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,");
802 ai.WriteLine("OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE");
803 ai.WriteLine("SOFTWARE.");
804 ai.WriteLine("*/");
805 ai.WriteLine("#endregion License");
806 ai.WriteLine("");
807 ai.WriteLine("using System;");
808 ai.WriteLine("using System.Reflection;");
809 ai.WriteLine("using System.Runtime.InteropServices;");
810 ai.WriteLine("using System.Security;");
811 ai.WriteLine("using System.Security.Permissions;");
812 ai.WriteLine("");
813 ai.WriteLine("[assembly: AllowPartiallyTrustedCallers]");
814 ai.WriteLine("[assembly: AssemblyCompany(\"Tao Framework -- http://www.taoframework.com\")]");
815 ai.WriteLine("[assembly: AssemblyConfiguration(\"Retail\")]");
816 ai.WriteLine("[assembly: AssemblyCopyright(\"Copyright (c)2003-2006 Tao Framework Team. All rights reserved.\")]");
817 ai.WriteLine("[assembly: AssemblyCulture(\"\")]");
818 ai.WriteLine("[assembly: AssemblyDefaultAlias(\"@PACKAGE_NAME@\")]");
819 ai.WriteLine("[assembly: AssemblyDelaySign(false)]");
820 ai.WriteLine("[assembly: AssemblyDescription(\"@DESCRIPTION@\")]");
821 ai.WriteLine("[assembly: AssemblyFileVersion(\"@ASSEMBLY_VERSION@\")]");
822 ai.WriteLine("[assembly: AssemblyInformationalVersion(\"@ASSEMBLY_VERSION@\")]");
823 ai.WriteLine("[assembly: AssemblyKeyName(\"\")]");
824 ai.WriteLine("[assembly: AssemblyProduct(\"@PACKAGE_NAME@.dll\")]");
825 ai.WriteLine("[assembly: AssemblyTitle(\"@DESCRIPTION@\")]");
826 ai.WriteLine("[assembly: AssemblyTrademark(\"Tao Framework -- http://www.taoframework.com\")]");
827 ai.WriteLine("[assembly: AssemblyVersion(\"@ASSEMBLY_VERSION@\")]");
828 ai.WriteLine("[assembly: CLSCompliant(true)]");
829 ai.WriteLine("[assembly: ComVisible(false)]");
830 ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.Execution)]");
831 ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.SkipVerification)]");
832 ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.UnmanagedCode)]");
833
834 }
835 //return combFile;
836 }
837
838 private void CleanProject(ProjectNode project)
839 {
840 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
841 string projectFile = Helper.MakeFilePath(project.FullPath, "Include", "am");
842 Helper.DeleteIfExists(projectFile);
843 }
844
845 private void CleanSolution(SolutionNode solution)
846 {
847 m_Kernel.Log.Write("Cleaning Autotools make files for", solution.Name);
848
849 string slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am");
850 Helper.DeleteIfExists(slnFile);
851
852 slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "in");
853 Helper.DeleteIfExists(slnFile);
854
855 slnFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac");
856 Helper.DeleteIfExists(slnFile);
857
858 slnFile = Helper.MakeFilePath(solution.FullPath, "configure");
859 Helper.DeleteIfExists(slnFile);
860
861 slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile");
862 Helper.DeleteIfExists(slnFile);
863
864 foreach(ProjectNode project in solution.Projects)
865 {
866 CleanProject(project);
867 }
868
869 m_Kernel.Log.Write("");
870 }
871
872 #endregion
873
874 #region ITarget Members
875
876 /// <summary>
877 /// Writes the specified kern.
878 /// </summary>
879 /// <param name="kern">The kern.</param>
880 public void Write(Kernel kern)
881 {
882 if( kern == null )
883 {
884 throw new ArgumentNullException("kern");
885 }
886 m_Kernel = kern;
887 foreach(SolutionNode solution in kern.Solutions)
888 {
889 WriteCombine(solution);
890 }
891 m_Kernel = null;
892 }
893
894 /// <summary>
895 /// Cleans the specified kern.
896 /// </summary>
897 /// <param name="kern">The kern.</param>
898 public virtual void Clean(Kernel kern)
899 {
900 if( kern == null )
901 {
902 throw new ArgumentNullException("kern");
903 }
904 m_Kernel = kern;
905 foreach(SolutionNode sol in kern.Solutions)
906 {
907 CleanSolution(sol);
908 }
909 m_Kernel = null;
910 }
911
912 /// <summary>
913 /// Gets the name.
914 /// </summary>
915 /// <value>The name.</value>
916 public string Name
917 {
918 get
919 {
920 return "autotools";
921 }
922 }
923
924 #endregion
925 }
926}
diff --git a/Prebuild/src/Core/Targets/DebugTarget.cs b/Prebuild/src/Core/Targets/DebugTarget.cs
new file mode 100644
index 0000000..6baa623
--- /dev/null
+++ b/Prebuild/src/Core/Targets/DebugTarget.cs
@@ -0,0 +1,102 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $
31 * $Revision: 164 $
32 */
33#endregion
34
35using System;
36
37using Prebuild.Core.Attributes;
38using Prebuild.Core.Interfaces;
39using Prebuild.Core.Nodes;
40
41#if (DEBUG && _DEBUG_TARGET)
42namespace Prebuild.Core.Targets
43{
44 [Target("debug")]
45 public class DebugTarget : ITarget
46 {
47#region Fields
48
49 private Kernel m_Kernel = null;
50
51#endregion
52
53#region ITarget Members
54
55 public void Write()
56 {
57 foreach(SolutionNode s in m_Kernel.Solutions)
58 {
59 Console.WriteLine("Solution [ {0}, {1} ]", s.Name, s.Path);
60 foreach(string file in s.Files)
61{
62 Console.WriteLine("\tFile [ {0} ]", file);
63}
64
65 foreach(ProjectNode proj in s.Projects)
66 {
67 Console.WriteLine("\tProject [ {0}, {1}. {2} ]", proj.Name, proj.Path, proj.Language);
68 foreach(string file in proj.Files)
69 Console.WriteLine("\t\tFile [ {0} ]", file);
70 }
71 }
72 }
73
74 public void Clean()
75 {
76 Console.WriteLine("Not implemented");
77 }
78
79 public string Name
80 {
81 get
82 {
83 return "debug";
84 }
85 }
86
87 public Kernel Kernel
88 {
89 get
90 {
91 return m_Kernel;
92 }
93 set
94 {
95 m_Kernel = value;
96 }
97 }
98
99#endregion
100 }
101}
102#endif
diff --git a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
new file mode 100644
index 0000000..8620e4b
--- /dev/null
+++ b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs
@@ -0,0 +1,458 @@
1#region BSD License
2/*
3Copyright (c) 2004 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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2007-02-13 22:07:07 +0100 (ti, 13 feb 2007) $
31 * $Revision: 206 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.IO;
39using System.Reflection;
40using System.Text.RegularExpressions;
41
42using Prebuild.Core.Attributes;
43using Prebuild.Core.Interfaces;
44using Prebuild.Core.Nodes;
45using Prebuild.Core.Utilities;
46
47namespace Prebuild.Core.Targets
48{
49 /// <summary>
50 ///
51 /// </summary>
52 [Target("monodev")]
53 public class MonoDevelopTarget : ITarget
54 {
55 #region Fields
56
57 private Kernel m_Kernel;
58
59 #endregion
60
61 #region Private Methods
62
63 private static string PrependPath(string path)
64 {
65 string tmpPath = Helper.NormalizePath(path, '/');
66 Regex regex = new Regex(@"(\w):/(\w+)");
67 Match match = regex.Match(tmpPath);
68 if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
69 {
70 tmpPath = Helper.NormalizePath(tmpPath);
71 }
72 else
73 {
74 tmpPath = Helper.NormalizePath("./" + tmpPath);
75 }
76
77 return tmpPath;
78 }
79
80 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
81 {
82 string ret = "<ProjectReference type=\"";
83 if(solution.ProjectsTable.ContainsKey(refr.Name))
84 {
85 ret += "Project\"";
86 ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\" refto=\"" + refr.Name + "\" />";
87 }
88 else
89 {
90 ProjectNode project = (ProjectNode)refr.Parent;
91 string fileRef = FindFileReference(refr.Name, project);
92
93 if(refr.Path != null || fileRef != null)
94 {
95 ret += "Assembly\" refto=\"";
96
97 string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
98
99 ret += finalPath;
100 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
101 return ret;
102 }
103
104 ret += "Gac\"";
105 ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\"";
106 ret += " refto=\"";
107 try
108 {
109 //Assembly assem = Assembly.Load(refr.Name);
110 //ret += assem.FullName;
111 ret += refr.Name;
112 }
113 catch (System.NullReferenceException e)
114 {
115 e.ToString();
116 ret += refr.Name;
117 }
118 ret += "\" />";
119 }
120
121 return ret;
122 }
123
124 private static string FindFileReference(string refName, ProjectNode project)
125 {
126 foreach(ReferencePathNode refPath in project.ReferencePaths)
127 {
128 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
129
130 if(File.Exists(fullPath))
131 {
132 return fullPath;
133 }
134 }
135
136 return null;
137 }
138
139 /// <summary>
140 /// Gets the XML doc file.
141 /// </summary>
142 /// <param name="project">The project.</param>
143 /// <param name="conf">The conf.</param>
144 /// <returns></returns>
145 public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
146 {
147 if( conf == null )
148 {
149 throw new ArgumentNullException("conf");
150 }
151 if( project == null )
152 {
153 throw new ArgumentNullException("project");
154 }
155 string docFile = (string)conf.Options["XmlDocFile"];
156 if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
157 {
158 return "False";
159 }
160 return "True";
161 }
162
163 private void WriteProject(SolutionNode solution, ProjectNode project)
164 {
165 string csComp = "Mcs";
166 string netRuntime = "Mono";
167 if(project.Runtime == ClrRuntime.Microsoft)
168 {
169 csComp = "Csc";
170 netRuntime = "MsNet";
171 }
172
173 string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
174 StreamWriter ss = new StreamWriter(projFile);
175
176 m_Kernel.CurrentWorkingDirectory.Push();
177 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
178
179 using(ss)
180 {
181 ss.WriteLine(
182 "<Project name=\"{0}\" description=\"\" standardNamespace=\"{1}\" newfilesearch=\"None\" enableviewstate=\"True\" fileversion=\"2.0\" language=\"C#\" clr-version=\"Net_2_0\" ctype=\"DotNetProject\">",
183 project.Name,
184 project.RootNamespace
185 );
186
187 int count = 0;
188
189 ss.WriteLine(" <Configurations active=\"{0}\">", solution.ActiveConfig);
190
191 foreach(ConfigurationNode conf in project.Configurations)
192 {
193 ss.WriteLine(" <Configuration name=\"{0}\" ctype=\"DotNetProjectConfiguration\">", conf.Name);
194 ss.Write(" <Output");
195 ss.Write(" directory=\"{0}\"", Helper.EndPath(Helper.NormalizePath(".\\" + conf.Options["OutputPath"].ToString())));
196 ss.Write(" assembly=\"{0}\"", project.AssemblyName);
197 ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
198 //ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
199 //ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
200 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
201 {
202 ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
203 }
204 else
205 {
206 ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
207 }
208 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
209 {
210 ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
211 }
212 else
213 {
214 ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
215 }
216 ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
217 ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
218 ss.WriteLine(" />");
219
220 ss.Write(" <Build");
221 ss.Write(" debugmode=\"True\"");
222 if (project.Type == ProjectType.WinExe)
223 {
224 ss.Write(" target=\"{0}\"", ProjectType.Exe.ToString());
225 }
226 else
227 {
228 ss.Write(" target=\"{0}\"", project.Type);
229 }
230 ss.WriteLine(" />");
231
232 ss.Write(" <Execution");
233 ss.Write(" runwithwarnings=\"True\"");
234 ss.Write(" consolepause=\"True\"");
235 ss.Write(" runtime=\"{0}\"", netRuntime);
236 ss.Write(" clr-version=\"Net_2_0\"");
237 ss.WriteLine(" />");
238
239 ss.Write(" <CodeGeneration");
240 ss.Write(" compiler=\"{0}\"", csComp);
241 ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
242 ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
243 ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
244 ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
245 ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
246 ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
247 ss.Write(" mainclass=\"{0}\"", project.StartupObject);
248 ss.Write(" target=\"{0}\"", project.Type);
249 ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
250 ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
251 ss.Write(" win32Icon=\"{0}\"", project.AppIcon);
252 ss.Write(" ctype=\"CSharpCompilerParameters\"");
253 ss.WriteLine(" />");
254 ss.WriteLine(" </Configuration>");
255
256 count++;
257 }
258 ss.WriteLine(" </Configurations>");
259
260 ss.Write(" <DeploymentInformation");
261 ss.Write(" target=\"\"");
262 ss.Write(" script=\"\"");
263 ss.Write(" strategy=\"File\"");
264 ss.WriteLine(">");
265 ss.WriteLine(" <excludeFiles />");
266 ss.WriteLine(" </DeploymentInformation>");
267
268 ss.WriteLine(" <Contents>");
269 foreach(string file in project.Files)
270 {
271 string buildAction = "Compile";
272 switch(project.Files.GetBuildAction(file))
273 {
274 case BuildAction.None:
275 buildAction = "Nothing";
276 break;
277
278 case BuildAction.Content:
279 buildAction = "Exclude";
280 break;
281
282 case BuildAction.EmbeddedResource:
283 buildAction = "EmbedAsResource";
284 break;
285
286 default:
287 buildAction = "Compile";
288 break;
289 }
290
291 // Sort of a hack, we try and resolve the path and make it relative, if we can.
292 string filePath = PrependPath(file);
293 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\" dependson=\"\" data=\"\" />", filePath, buildAction);
294 }
295 ss.WriteLine(" </Contents>");
296
297 ss.WriteLine(" <References>");
298 foreach(ReferenceNode refr in project.References)
299 {
300 ss.WriteLine(" {0}", BuildReference(solution, refr));
301 }
302 ss.WriteLine(" </References>");
303
304
305 ss.WriteLine("</Project>");
306 }
307
308 m_Kernel.CurrentWorkingDirectory.Pop();
309 }
310
311 private void WriteCombine(SolutionNode solution)
312 {
313 m_Kernel.Log.Write("Creating MonoDevelop combine and project files");
314 foreach(ProjectNode project in solution.Projects)
315 {
316 if(m_Kernel.AllowProject(project.FilterGroups))
317 {
318 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
319 WriteProject(solution, project);
320 }
321 }
322
323 m_Kernel.Log.Write("");
324 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
325 StreamWriter ss = new StreamWriter(combFile);
326
327 m_Kernel.CurrentWorkingDirectory.Push();
328 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
329
330 int count = 0;
331
332 using(ss)
333 {
334 ss.WriteLine("<Combine name=\"{0}\" fileversion=\"2.0\" description=\"\">", solution.Name);
335
336 count = 0;
337 foreach(ConfigurationNode conf in solution.Configurations)
338 {
339 if(count == 0)
340 {
341 ss.WriteLine(" <Configurations active=\"{0}\">", conf.Name);
342 }
343
344 ss.WriteLine(" <Configuration name=\"{0}\" ctype=\"CombineConfiguration\">", conf.Name);
345 foreach(ProjectNode project in solution.Projects)
346 {
347 ss.WriteLine(" <Entry configuration=\"{1}\" build=\"True\" name=\"{0}\" />", project.Name, conf.Name);
348 }
349 ss.WriteLine(" </Configuration>");
350
351 count++;
352 }
353 ss.WriteLine(" </Configurations>");
354
355 count = 0;
356
357 foreach(ProjectNode project in solution.Projects)
358 {
359 if(count == 0)
360 ss.WriteLine(" <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
361
362 ss.WriteLine(" <Execute type=\"None\" entry=\"{0}\" />", project.Name);
363 count++;
364 }
365 ss.WriteLine(" </StartMode>");
366
367 ss.WriteLine(" <Entries>");
368 foreach(ProjectNode project in solution.Projects)
369 {
370 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
371 ss.WriteLine(" <Entry filename=\"{0}\" />",
372 Helper.MakeFilePath(path, project.Name, "mdp"));
373 }
374 ss.WriteLine(" </Entries>");
375
376 ss.WriteLine("</Combine>");
377 }
378
379 m_Kernel.CurrentWorkingDirectory.Pop();
380 }
381
382 private void CleanProject(ProjectNode project)
383 {
384 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
385 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
386 Helper.DeleteIfExists(projectFile);
387 }
388
389 private void CleanSolution(SolutionNode solution)
390 {
391 m_Kernel.Log.Write("Cleaning MonoDevelop combine and project files for", solution.Name);
392
393 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
394 Helper.DeleteIfExists(slnFile);
395
396 foreach(ProjectNode project in solution.Projects)
397 {
398 CleanProject(project);
399 }
400
401 m_Kernel.Log.Write("");
402 }
403
404 #endregion
405
406 #region ITarget Members
407
408 /// <summary>
409 /// Writes the specified kern.
410 /// </summary>
411 /// <param name="kern">The kern.</param>
412 public void Write(Kernel kern)
413 {
414 if( kern == null )
415 {
416 throw new ArgumentNullException("kern");
417 }
418 m_Kernel = kern;
419 foreach(SolutionNode solution in kern.Solutions)
420 {
421 WriteCombine(solution);
422 }
423 m_Kernel = null;
424 }
425
426 /// <summary>
427 /// Cleans the specified kern.
428 /// </summary>
429 /// <param name="kern">The kern.</param>
430 public virtual void Clean(Kernel kern)
431 {
432 if( kern == null )
433 {
434 throw new ArgumentNullException("kern");
435 }
436 m_Kernel = kern;
437 foreach(SolutionNode sol in kern.Solutions)
438 {
439 CleanSolution(sol);
440 }
441 m_Kernel = null;
442 }
443
444 /// <summary>
445 /// Gets the name.
446 /// </summary>
447 /// <value>The name.</value>
448 public string Name
449 {
450 get
451 {
452 return "sharpdev";
453 }
454 }
455
456 #endregion
457 }
458}
diff --git a/Prebuild/src/Core/Targets/NAntTarget.cs b/Prebuild/src/Core/Targets/NAntTarget.cs
new file mode 100644
index 0000000..0f0deb2
--- /dev/null
+++ b/Prebuild/src/Core/Targets/NAntTarget.cs
@@ -0,0 +1,621 @@
1#region BSD License
2/*
3Copyright (c) 2004 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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2007-02-13 21:58:03 +0100 (ti, 13 feb 2007) $
31 * $Revision: 205 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.IO;
39using System.Reflection;
40using System.Text.RegularExpressions;
41
42using Prebuild.Core.Attributes;
43using Prebuild.Core.Interfaces;
44using Prebuild.Core.Nodes;
45using Prebuild.Core.Utilities;
46
47namespace Prebuild.Core.Targets
48{
49 /// <summary>
50 ///
51 /// </summary>
52 [Target("nant")]
53 public class NAntTarget : ITarget
54 {
55 #region Fields
56
57 private Kernel m_Kernel;
58
59 #endregion
60
61 #region Private Methods
62
63 private static string PrependPath(string path)
64 {
65 string tmpPath = Helper.NormalizePath(path, '/');
66 Regex regex = new Regex(@"(\w):/(\w+)");
67 Match match = regex.Match(tmpPath);
68 //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
69 //{
70 tmpPath = Helper.NormalizePath(tmpPath);
71 //}
72// else
73// {
74// tmpPath = Helper.NormalizePath("./" + tmpPath);
75// }
76
77 return tmpPath;
78 }
79
80 private static string BuildReference(SolutionNode solution, ProjectNode currentProject, ReferenceNode refr)
81 {
82 string ret = "";
83 if(solution.ProjectsTable.ContainsKey(refr.Name))
84 {
85 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
86
87 string finalPath = Helper.NormalizePath(((ReferencePathNode)currentProject.ReferencePaths[0]).Path + refr.Name + ".dll", '/');
88
89 return finalPath;
90 }
91 else
92 {
93 ProjectNode project = (ProjectNode)refr.Parent;
94 string fileRef = FindFileReference(refr.Name, project);
95
96 if(refr.Path != null || fileRef != null)
97 {
98 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path + "/" + refr.Name + ".dll", '/') : fileRef;
99 ret += finalPath;
100 return ret;
101 }
102
103 try
104 {
105 //Assembly assem = Assembly.Load(refr.Name);
106 //if (assem != null)
107 //{
108 //ret += (refr.Name + ".dll");
109 //}
110 //else
111 //{
112 ret += (refr.Name + ".dll");
113 //}
114 }
115 catch (System.NullReferenceException e)
116 {
117 e.ToString();
118 ret += refr.Name + ".dll";
119 }
120 }
121 return ret;
122 }
123
124 private static string BuildReferencePath(SolutionNode solution, ReferenceNode refr)
125 {
126 string ret = "";
127 if(solution.ProjectsTable.ContainsKey(refr.Name))
128 {
129 ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name];
130 string finalPath = Helper.NormalizePath(((ReferencePathNode)project.ReferencePaths[0]).Path, '/');
131
132 return finalPath;
133 }
134 else
135 {
136 ProjectNode project = (ProjectNode)refr.Parent;
137 string fileRef = FindFileReference(refr.Name, project);
138
139 if(refr.Path != null || fileRef != null)
140 {
141 string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path, '/') : fileRef;
142 ret += finalPath;
143 return ret;
144 }
145
146 try
147 {
148 Assembly assem = Assembly.Load(refr.Name);
149 if (assem != null)
150 {
151 ret += "";
152 }
153 else
154 {
155 ret += "";
156 }
157 }
158 catch (System.NullReferenceException e)
159 {
160 e.ToString();
161 ret += "";
162 }
163 }
164 return ret;
165 }
166
167 private static string FindFileReference(string refName, ProjectNode project)
168 {
169 foreach(ReferencePathNode refPath in project.ReferencePaths)
170 {
171 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
172
173 if(File.Exists(fullPath))
174 {
175 return fullPath;
176 }
177 }
178
179 return null;
180 }
181
182 /// <summary>
183 /// Gets the XML doc file.
184 /// </summary>
185 /// <param name="project">The project.</param>
186 /// <param name="conf">The conf.</param>
187 /// <returns></returns>
188 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
189 {
190 if( conf == null )
191 {
192 throw new ArgumentNullException("conf");
193 }
194 if( project == null )
195 {
196 throw new ArgumentNullException("project");
197 }
198 string docFile = (string)conf.Options["XmlDocFile"];
199 // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
200 // {
201 // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
202 // }
203 return docFile;
204 }
205
206 private void WriteProject(SolutionNode solution, ProjectNode project)
207 {
208 string projFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build");
209 StreamWriter ss = new StreamWriter(projFile);
210
211 m_Kernel.CurrentWorkingDirectory.Push();
212 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
213 bool hasDoc = false;
214
215 using(ss)
216 {
217 ss.WriteLine("<?xml version=\"1.0\" ?>");
218 ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name);
219 ss.WriteLine(" <target name=\"{0}\">", "build");
220 ss.WriteLine(" <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />");
221 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />");
222 ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/${build.dir}\">");
223 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}\">");
224 foreach(ReferenceNode refr in project.References)
225 {
226 if (refr.LocalCopy)
227 {
228 ss.WriteLine(" <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr))+"\" />", '/'));
229 }
230 }
231 ss.WriteLine(" </fileset>");
232 ss.WriteLine(" </copy>");
233 ss.Write(" <csc");
234 ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
235 ss.Write(" debug=\"{0}\"", "${build.debug}");
236 foreach(ConfigurationNode conf in project.Configurations)
237 {
238 if (conf.Options.KeyFile !="")
239 {
240 ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile);
241 break;
242 }
243 }
244 foreach(ConfigurationNode conf in project.Configurations)
245 {
246 ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe);
247 break;
248 }
249 foreach(ConfigurationNode conf in project.Configurations)
250 {
251 ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines);
252 break;
253 }
254 foreach(ConfigurationNode conf in project.Configurations)
255 {
256 if (GetXmlDocFile(project, conf) !="")
257 {
258 ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf));
259 hasDoc = true;
260 }
261 break;
262 }
263 ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}");
264 if (project.Type == ProjectType.Library)
265 {
266 ss.Write(".dll\"");
267 }
268 else
269 {
270 ss.Write(".exe\"");
271 }
272 if(project.AppIcon != null && project.AppIcon.Length != 0)
273 {
274 ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon,'/'));
275 }
276 ss.WriteLine(">");
277 ss.WriteLine(" <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
278 foreach (string file in project.Files)
279 {
280 switch (project.Files.GetBuildAction(file))
281 {
282 case BuildAction.EmbeddedResource:
283 ss.WriteLine(" {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
284 break;
285 default:
286 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
287 {
288 ss.WriteLine(" <include name=\"{0}\" />", file.Substring(0, file.LastIndexOf('.')) + ".resx");
289 }
290 break;
291 }
292 }
293 //if (project.Files.GetSubType(file).ToString() != "Code")
294 //{
295 // ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
296
297 ss.WriteLine(" </resources>");
298 ss.WriteLine(" <sources failonempty=\"true\">");
299 foreach(string file in project.Files)
300 {
301 switch(project.Files.GetBuildAction(file))
302 {
303 case BuildAction.Compile:
304 ss.WriteLine(" <include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
305 break;
306 default:
307 break;
308 }
309 }
310 ss.WriteLine(" </sources>");
311 ss.WriteLine(" <references basedir=\"${project::get-base-directory()}\">");
312 ss.WriteLine(" <lib>");
313 ss.WriteLine(" <include name=\"${project::get-base-directory()}\" />");
314 ss.WriteLine(" <include name=\"${project::get-base-directory()}/${build.dir}\" />");
315 ss.WriteLine(" </lib>");
316 foreach(ReferenceNode refr in project.References)
317 {
318 string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/');
319 ss.WriteLine(" <include name=\""+ path + "\" />" );
320 }
321 ss.WriteLine(" </references>");
322
323 ss.WriteLine(" </csc>");
324
325 foreach (ConfigurationNode conf in project.Configurations)
326 {
327 if (!String.IsNullOrEmpty(conf.Options.OutputPath))
328 {
329 string targetDir = Helper.NormalizePath(conf.Options.OutputPath, '/');
330
331 ss.WriteLine(" <echo message=\"Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/" + targetDir + "\" />");
332
333 ss.WriteLine(" <mkdir dir=\"${project::get-base-directory()}/" + targetDir + "\"/>");
334
335 ss.WriteLine(" <copy todir=\"${project::get-base-directory()}/" + targetDir + "\">");
336 ss.WriteLine(" <fileset basedir=\"${project::get-base-directory()}/${build.dir}/\" >");
337 ss.WriteLine(" <include name=\"*.dll\"/>");
338 ss.WriteLine(" <include name=\"*.exe\"/>");
339 ss.WriteLine(" </fileset>");
340 ss.WriteLine(" </copy>");
341 break;
342 }
343 }
344
345 ss.WriteLine(" </target>");
346
347 ss.WriteLine(" <target name=\"clean\">");
348 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
349 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
350 ss.WriteLine(" </target>");
351
352 ss.WriteLine(" <target name=\"doc\" description=\"Creates documentation.\">");
353 if (hasDoc)
354 {
355 ss.WriteLine(" <property name=\"doc.target\" value=\"\" />");
356 ss.WriteLine(" <if test=\"${platform::is-unix()}\">");
357 ss.WriteLine(" <property name=\"doc.target\" value=\"Web\" />");
358 ss.WriteLine(" </if>");
359 ss.WriteLine(" <ndoc failonerror=\"false\" verbose=\"true\">");
360 ss.WriteLine(" <assemblies basedir=\"${project::get-base-directory()}\">");
361 ss.Write(" <include name=\"${build.dir}/${project::get-name()}");
362 if (project.Type == ProjectType.Library)
363 {
364 ss.WriteLine(".dll\" />");
365 }
366 else
367 {
368 ss.WriteLine(".exe\" />");
369 }
370
371 ss.WriteLine(" </assemblies>");
372 ss.WriteLine(" <summaries basedir=\"${project::get-base-directory()}\">");
373 ss.WriteLine(" <include name=\"${build.dir}/${project::get-name()}.xml\"/>");
374 ss.WriteLine(" </summaries>");
375 ss.WriteLine(" <referencepaths basedir=\"${project::get-base-directory()}\">");
376 ss.WriteLine(" <include name=\"${build.dir}\" />");
377 // foreach(ReferenceNode refr in project.References)
378 // {
379 // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/');
380 // if (path != "")
381 // {
382 // ss.WriteLine(" <include name=\"{0}\" />", path);
383 // }
384 // }
385 ss.WriteLine(" </referencepaths>");
386 ss.WriteLine(" <documenters>");
387 ss.WriteLine(" <documenter name=\"MSDN\">");
388 ss.WriteLine(" <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />");
389 ss.WriteLine(" <property name=\"OutputTarget\" value=\"${doc.target}\" />");
390 ss.WriteLine(" <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />");
391 ss.WriteLine(" <property name=\"IncludeFavorites\" value=\"False\" />");
392 ss.WriteLine(" <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />");
393 ss.WriteLine(" <property name=\"SplitTOCs\" value=\"False\" />");
394 ss.WriteLine(" <property name=\"DefaulTOC\" value=\"\" />");
395 ss.WriteLine(" <property name=\"ShowVisualBasic\" value=\"True\" />");
396 ss.WriteLine(" <property name=\"AutoDocumentConstructors\" value=\"True\" />");
397 ss.WriteLine(" <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />");
398 ss.WriteLine(" <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />");
399 ss.WriteLine(" <property name=\"ShowMissingParams\" value=\"${build.debug}\" />");
400 ss.WriteLine(" <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />");
401 ss.WriteLine(" <property name=\"ShowMissingValues\" value=\"${build.debug}\" />");
402 ss.WriteLine(" <property name=\"DocumentInternals\" value=\"False\" />");
403 ss.WriteLine(" <property name=\"DocumentPrivates\" value=\"False\" />");
404 ss.WriteLine(" <property name=\"DocumentProtected\" value=\"True\" />");
405 ss.WriteLine(" <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />");
406 ss.WriteLine(" <property name=\"IncludeAssemblyVersion\" value=\"True\" />");
407 ss.WriteLine(" </documenter>");
408 ss.WriteLine(" </documenters>");
409 ss.WriteLine(" </ndoc>");
410 }
411 ss.WriteLine(" </target>");
412 ss.WriteLine("</project>");
413 }
414 m_Kernel.CurrentWorkingDirectory.Pop();
415 }
416
417 private void WriteCombine(SolutionNode solution)
418 {
419 m_Kernel.Log.Write("Creating NAnt build files");
420 foreach(ProjectNode project in solution.Projects)
421 {
422 if(m_Kernel.AllowProject(project.FilterGroups))
423 {
424 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
425 WriteProject(solution, project);
426 }
427 }
428
429 m_Kernel.Log.Write("");
430 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
431 StreamWriter ss = new StreamWriter(combFile);
432
433 m_Kernel.CurrentWorkingDirectory.Push();
434 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
435
436 using(ss)
437 {
438 ss.WriteLine("<?xml version=\"1.0\" ?>");
439 ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name);
440 ss.WriteLine(" <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>");
441 ss.WriteLine();
442
443 //ss.WriteLine(" <property name=\"dist.dir\" value=\"dist\" />");
444 //ss.WriteLine(" <property name=\"source.dir\" value=\"source\" />");
445 ss.WriteLine(" <property name=\"bin.dir\" value=\"bin\" />");
446 ss.WriteLine(" <property name=\"obj.dir\" value=\"obj\" />");
447 ss.WriteLine(" <property name=\"doc.dir\" value=\"doc\" />");
448 ss.WriteLine(" <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
449
450 foreach(ConfigurationNode conf in solution.Configurations)
451 {
452 // Set the project.config to a non-debug configuration
453 if( conf.Options["DebugInformation"].ToString().ToLower() != "true" )
454 {
455 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
456 }
457 ss.WriteLine();
458 ss.WriteLine(" <target name=\"{0}\" description=\"\">", conf.Name);
459 ss.WriteLine(" <property name=\"project.config\" value=\"{0}\" />", conf.Name);
460 ss.WriteLine(" <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
461 ss.WriteLine(" </target>");
462 ss.WriteLine();
463 }
464
465 ss.WriteLine(" <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">");
466 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />");
467 ss.WriteLine(" </target>");
468 ss.WriteLine();
469
470 ss.WriteLine(" <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">");
471 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />");
472 ss.WriteLine(" </target>");
473 ss.WriteLine();
474
475 ss.WriteLine(" <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">");
476 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />");
477 ss.WriteLine(" </target>");
478 ss.WriteLine();
479
480 ss.WriteLine(" <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">");
481 ss.WriteLine(" <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />");
482 ss.WriteLine(" </target>");
483 ss.WriteLine();
484
485 ss.WriteLine(" <target name=\"init\" description=\"\">");
486 ss.WriteLine(" <call target=\"${project.config}\" />");
487 ss.WriteLine(" <sysinfo />");
488 ss.WriteLine(" <echo message=\"Platform ${sys.os.platform}\" />");
489 ss.WriteLine(" <property name=\"build.dir\" value=\"${bin.dir}/${project.config}\" />");
490 ss.WriteLine(" </target>");
491 ss.WriteLine();
492
493 ss.WriteLine(" <target name=\"clean\" description=\"\">");
494 ss.WriteLine(" <echo message=\"Deleting all builds from all configurations\" />");
495 //ss.WriteLine(" <delete dir=\"${dist.dir}\" failonerror=\"false\" />");
496 ss.WriteLine(" <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
497 ss.WriteLine(" <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
498 foreach(ProjectNode project in solution.Projects)
499 {
500 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
501 ss.Write(" <nant buildfile=\"{0}\"",
502 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"),'/'));
503 ss.WriteLine(" target=\"clean\" />");
504 }
505 ss.WriteLine(" </target>");
506 ss.WriteLine();
507
508 ss.WriteLine(" <target name=\"build\" depends=\"init\" description=\"\">");
509
510 foreach(ProjectNode project in solution.ProjectsTableOrder)
511 {
512 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
513 ss.Write(" <nant buildfile=\"{0}\"",
514 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"),'/'));
515 ss.WriteLine(" target=\"build\" />");
516 }
517 ss.WriteLine(" </target>");
518 ss.WriteLine();
519
520 ss.WriteLine(" <target name=\"build-release\" depends=\"Release, init, build\" description=\"Builds in Release mode\" />");
521 ss.WriteLine();
522 ss.WriteLine(" <target name=\"build-debug\" depends=\"Debug, init, build\" description=\"Builds in Debug mode\" />");
523 ss.WriteLine();
524 //ss.WriteLine(" <target name=\"package\" depends=\"clean, doc, copyfiles, zip\" description=\"Builds in Release mode\" />");
525 ss.WriteLine(" <target name=\"package\" depends=\"clean, doc\" description=\"Builds all\" />");
526 ss.WriteLine();
527
528 ss.WriteLine(" <target name=\"doc\" depends=\"build-release\">");
529 ss.WriteLine(" <echo message=\"Generating all documentation from all builds\" />");
530 foreach (ProjectNode project in solution.Projects)
531 {
532 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
533 ss.Write(" <nant buildfile=\"{0}\"",
534 Helper.NormalizePath(Helper.MakeFilePath(path, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"), '/'));
535 ss.WriteLine(" target=\"doc\" />");
536 }
537 ss.WriteLine(" </target>");
538 ss.WriteLine();
539 ss.WriteLine("</project>");
540 }
541
542 m_Kernel.CurrentWorkingDirectory.Pop();
543 }
544
545 private void CleanProject(ProjectNode project)
546 {
547 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
548 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build");
549 Helper.DeleteIfExists(projectFile);
550 }
551
552 private void CleanSolution(SolutionNode solution)
553 {
554 m_Kernel.Log.Write("Cleaning NAnt build files for", solution.Name);
555
556 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
557 Helper.DeleteIfExists(slnFile);
558
559 foreach(ProjectNode project in solution.Projects)
560 {
561 CleanProject(project);
562 }
563
564 m_Kernel.Log.Write("");
565 }
566
567 #endregion
568
569 #region ITarget Members
570
571 /// <summary>
572 /// Writes the specified kern.
573 /// </summary>
574 /// <param name="kern">The kern.</param>
575 public void Write(Kernel kern)
576 {
577 if( kern == null )
578 {
579 throw new ArgumentNullException("kern");
580 }
581 m_Kernel = kern;
582 foreach(SolutionNode solution in kern.Solutions)
583 {
584 WriteCombine(solution);
585 }
586 m_Kernel = null;
587 }
588
589 /// <summary>
590 /// Cleans the specified kern.
591 /// </summary>
592 /// <param name="kern">The kern.</param>
593 public virtual void Clean(Kernel kern)
594 {
595 if( kern == null )
596 {
597 throw new ArgumentNullException("kern");
598 }
599 m_Kernel = kern;
600 foreach(SolutionNode sol in kern.Solutions)
601 {
602 CleanSolution(sol);
603 }
604 m_Kernel = null;
605 }
606
607 /// <summary>
608 /// Gets the name.
609 /// </summary>
610 /// <value>The name.</value>
611 public string Name
612 {
613 get
614 {
615 return "nant";
616 }
617 }
618
619 #endregion
620 }
621}
diff --git a/Prebuild/src/Core/Targets/SharpDevelop2Target.cs b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs
new file mode 100644
index 0000000..bc84b96
--- /dev/null
+++ b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs
@@ -0,0 +1,90 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-27 16:49:58 -0800 (Fri, 27 Jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36
37using Prebuild.Core.Attributes;
38
39namespace Prebuild.Core.Targets
40{
41 /// <summary>
42 ///
43 /// </summary>
44 [Target("sharpdev2")]
45 public class SharpDevelop2Target : VS2005Target
46 {
47 #region Private Methods
48 private void SetSharpDevelop2()
49 {
50 this.VersionName = "SharpDevelop2";
51 }
52 #endregion
53
54 #region Public Methods
55
56 /// <summary>
57 /// Writes the specified kern.
58 /// </summary>
59 /// <param name="kern">The kern.</param>
60 public override void Write(Kernel kern)
61 {
62 SetSharpDevelop2();
63 base.Write(kern);
64 }
65
66 /// <summary>
67 /// Cleans the specified kern.
68 /// </summary>
69 /// <param name="kern">The kern.</param>
70 public override void Clean(Kernel kern)
71 {
72 SetSharpDevelop2();
73 base.Clean(kern);
74 }
75
76 /// <summary>
77 /// Gets the name.
78 /// </summary>
79 /// <value>The name.</value>
80 public override string Name
81 {
82 get
83 {
84 return "sharpdev2";
85 }
86 }
87
88 #endregion
89 }
90}
diff --git a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
new file mode 100644
index 0000000..c725730
--- /dev/null
+++ b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs
@@ -0,0 +1,437 @@
1#region BSD License
2/*
3Copyright (c) 2004 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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2007-02-13 21:58:03 +0100 (ti, 13 feb 2007) $
31 * $Revision: 205 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.IO;
39using System.Text.RegularExpressions;
40using System.Reflection;
41
42using Prebuild.Core.Attributes;
43using Prebuild.Core.Interfaces;
44using Prebuild.Core.Nodes;
45using Prebuild.Core.Utilities;
46
47namespace Prebuild.Core.Targets
48{
49 /// <summary>
50 ///
51 /// </summary>
52 [Target("sharpdev")]
53 public class SharpDevelopTarget : ITarget
54 {
55 #region Fields
56
57 private Kernel m_Kernel;
58
59 #endregion
60
61 #region Private Methods
62
63 private static string PrependPath(string path)
64 {
65 string tmpPath = Helper.NormalizePath(path, '/');
66 Regex regex = new Regex(@"(\w):/(\w+)");
67 Match match = regex.Match(tmpPath);
68 if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
69 {
70 tmpPath = Helper.NormalizePath(tmpPath);
71 }
72 else
73 {
74 tmpPath = Helper.NormalizePath("./" + tmpPath);
75 }
76
77 return tmpPath;
78 }
79
80 private static string BuildReference(SolutionNode solution, ReferenceNode refr)
81 {
82 string ret = "<Reference type=\"";
83 if(solution.ProjectsTable.ContainsKey(refr.Name))
84 {
85 ret += "Project\" refto=\"" + refr.Name;
86 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
87 }
88 else
89 {
90 ProjectNode project = (ProjectNode)refr.Parent;
91 string fileRef = FindFileReference(refr.Name, project);
92
93 if(refr.Path != null || fileRef != null)
94 {
95 ret += "Assembly\" refto=\"";
96
97 string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
98
99 ret += finalPath;
100 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
101 return ret;
102 }
103
104 ret += "Gac\" refto=\"";
105 try
106 {
107 //Assembly assem = Assembly.Load(refr.Name);
108 ret += refr.Name;// assem.FullName;
109 }
110 catch (System.NullReferenceException e)
111 {
112 e.ToString();
113 ret += refr.Name;
114 }
115 ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
116 }
117
118 return ret;
119 }
120
121 private static string FindFileReference(string refName, ProjectNode project)
122 {
123 foreach(ReferencePathNode refPath in project.ReferencePaths)
124 {
125 string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
126
127 if(File.Exists(fullPath))
128 {
129 return fullPath;
130 }
131 }
132
133 return null;
134 }
135
136 /// <summary>
137 /// Gets the XML doc file.
138 /// </summary>
139 /// <param name="project">The project.</param>
140 /// <param name="conf">The conf.</param>
141 /// <returns></returns>
142 public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
143 {
144 if( conf == null )
145 {
146 throw new ArgumentNullException("conf");
147 }
148 if( project == null )
149 {
150 throw new ArgumentNullException("project");
151 }
152 string docFile = (string)conf.Options["XmlDocFile"];
153 if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
154 {
155 return "False";
156 }
157 return "True";
158 }
159
160 private void WriteProject(SolutionNode solution, ProjectNode project)
161 {
162 string csComp = "Csc";
163 string netRuntime = "MsNet";
164 if(project.Runtime == ClrRuntime.Mono)
165 {
166 csComp = "Mcs";
167 netRuntime = "Mono";
168 }
169
170 string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
171 StreamWriter ss = new StreamWriter(projFile);
172
173 m_Kernel.CurrentWorkingDirectory.Push();
174 Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
175
176 using(ss)
177 {
178 ss.WriteLine(
179 "<Project name=\"{0}\" standardNamespace=\"{1}\" description=\"\" newfilesearch=\"None\" enableviewstate=\"True\" version=\"1.1\" projecttype=\"C#\">",
180 project.Name,
181 project.RootNamespace
182 );
183
184 ss.WriteLine(" <Contents>");
185 foreach(string file in project.Files)
186 {
187 string buildAction = "Compile";
188 switch(project.Files.GetBuildAction(file))
189 {
190 case BuildAction.None:
191 buildAction = "Nothing";
192 break;
193
194 case BuildAction.Content:
195 buildAction = "Exclude";
196 break;
197
198 case BuildAction.EmbeddedResource:
199 buildAction = "EmbedAsResource";
200 break;
201
202 default:
203 buildAction = "Compile";
204 break;
205 }
206
207 // Sort of a hack, we try and resolve the path and make it relative, if we can.
208 string filePath = PrependPath(file);
209 ss.WriteLine(" <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\" dependson=\"\" data=\"\" />", filePath, buildAction);
210 }
211 ss.WriteLine(" </Contents>");
212
213 ss.WriteLine(" <References>");
214 foreach(ReferenceNode refr in project.References)
215 {
216 ss.WriteLine(" {0}", BuildReference(solution, refr));
217 }
218 ss.WriteLine(" </References>");
219
220 ss.Write(" <DeploymentInformation");
221 ss.Write(" target=\"\"");
222 ss.Write(" script=\"\"");
223 ss.Write(" strategy=\"File\"");
224 ss.WriteLine(" />");
225
226 int count = 0;
227
228 ss.WriteLine(" <Configurations active=\"{0}\">", solution.ActiveConfig);
229
230 foreach(ConfigurationNode conf in project.Configurations)
231 {
232 ss.Write(" <Configuration");
233 ss.Write(" runwithwarnings=\"True\"");
234 ss.Write(" name=\"{0}\"", conf.Name);
235 ss.WriteLine(">");
236 ss.Write(" <CodeGeneration");
237 ss.Write(" runtime=\"{0}\"", netRuntime);
238 ss.Write(" compiler=\"{0}\"", csComp);
239 ss.Write(" compilerversion=\"\"");
240 ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
241 ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
242 ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
243 ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
244 ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
245 ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
246 ss.Write(" mainclass=\"{0}\"", project.StartupObject);
247 ss.Write(" target=\"{0}\"", project.Type);
248 ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
249 ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
250 ss.Write(" win32Icon=\"{0}\"", Helper.NormalizePath(".\\" + project.AppIcon));
251 ss.Write(" noconfig=\"{0}\"", "False");
252 ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
253 ss.WriteLine(" />");
254
255 ss.Write(" <Execution");
256 ss.Write(" commandlineparameters=\"\"");
257 ss.Write(" consolepause=\"True\"");
258 ss.WriteLine(" />");
259
260 ss.Write(" <Output");
261 ss.Write(" directory=\".\\{0}\"", Helper.NormalizePath(conf.Options["OutputPath"].ToString()));
262 ss.Write(" assembly=\"{0}\"", project.AssemblyName);
263 ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
264 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
265 {
266 ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
267 }
268 else
269 {
270 ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
271 }
272 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
273 {
274 ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
275 }
276 else
277 {
278 ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
279 }
280 ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
281 ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
282 ss.WriteLine(" />");
283 ss.WriteLine(" </Configuration>");
284
285 count++;
286 }
287 ss.WriteLine(" </Configurations>");
288 ss.WriteLine("</Project>");
289 }
290
291 m_Kernel.CurrentWorkingDirectory.Pop();
292 }
293
294 private void WriteCombine(SolutionNode solution)
295 {
296 m_Kernel.Log.Write("Creating SharpDevelop combine and project files");
297 foreach(ProjectNode project in solution.Projects)
298 {
299 if(m_Kernel.AllowProject(project.FilterGroups))
300 {
301 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
302 WriteProject(solution, project);
303 }
304 }
305
306 m_Kernel.Log.Write("");
307 string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
308 StreamWriter ss = new StreamWriter(combFile);
309
310 m_Kernel.CurrentWorkingDirectory.Push();
311 Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
312
313 using(ss)
314 {
315 ss.WriteLine("<Combine fileversion=\"1.0\" name=\"{0}\" description=\"\">", solution.Name);
316
317 int count = 0;
318 foreach(ProjectNode project in solution.Projects)
319 {
320 if(count == 0)
321 ss.WriteLine(" <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
322
323 ss.WriteLine(" <Execute entry=\"{0}\" type=\"None\" />", project.Name);
324 count++;
325 }
326 ss.WriteLine(" </StartMode>");
327
328 ss.WriteLine(" <Entries>");
329 foreach(ProjectNode project in solution.Projects)
330 {
331 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
332 ss.WriteLine(" <Entry filename=\"{0}\" />",
333 Helper.MakeFilePath(path, project.Name, "prjx"));
334 }
335 ss.WriteLine(" </Entries>");
336
337 count = 0;
338 foreach(ConfigurationNode conf in solution.Configurations)
339 {
340 if(count == 0)
341 {
342 ss.WriteLine(" <Configurations active=\"{0}\">", conf.Name);
343 }
344
345 ss.WriteLine(" <Configuration name=\"{0}\">", conf.Name);
346 foreach(ProjectNode project in solution.Projects)
347 {
348 ss.WriteLine(" <Entry name=\"{0}\" configurationname=\"{1}\" build=\"True\" />", project.Name, conf.Name);
349 }
350 ss.WriteLine(" </Configuration>");
351
352 count++;
353 }
354 ss.WriteLine(" </Configurations>");
355 ss.WriteLine("</Combine>");
356 }
357
358 m_Kernel.CurrentWorkingDirectory.Pop();
359 }
360
361 private void CleanProject(ProjectNode project)
362 {
363 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
364 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
365 Helper.DeleteIfExists(projectFile);
366 }
367
368 private void CleanSolution(SolutionNode solution)
369 {
370 m_Kernel.Log.Write("Cleaning SharpDevelop combine and project files for", solution.Name);
371
372 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
373 Helper.DeleteIfExists(slnFile);
374
375 foreach(ProjectNode project in solution.Projects)
376 {
377 CleanProject(project);
378 }
379
380 m_Kernel.Log.Write("");
381 }
382
383 #endregion
384
385 #region ITarget Members
386
387 /// <summary>
388 /// Writes the specified kern.
389 /// </summary>
390 /// <param name="kern">The kern.</param>
391 public void Write(Kernel kern)
392 {
393 if( kern == null )
394 {
395 throw new ArgumentNullException("kern");
396 }
397 m_Kernel = kern;
398 foreach(SolutionNode solution in kern.Solutions)
399 {
400 WriteCombine(solution);
401 }
402 m_Kernel = null;
403 }
404
405 /// <summary>
406 /// Cleans the specified kern.
407 /// </summary>
408 /// <param name="kern">The kern.</param>
409 public virtual void Clean(Kernel kern)
410 {
411 if( kern == null )
412 {
413 throw new ArgumentNullException("kern");
414 }
415 m_Kernel = kern;
416 foreach(SolutionNode sol in kern.Solutions)
417 {
418 CleanSolution(sol);
419 }
420 m_Kernel = null;
421 }
422
423 /// <summary>
424 /// Gets the name.
425 /// </summary>
426 /// <value>The name.</value>
427 public string Name
428 {
429 get
430 {
431 return "sharpdev";
432 }
433 }
434
435 #endregion
436 }
437}
diff --git a/Prebuild/src/Core/Targets/VS2002Target.cs b/Prebuild/src/Core/Targets/VS2002Target.cs
new file mode 100644
index 0000000..66216dc
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2002Target.cs
@@ -0,0 +1,96 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36
37using Prebuild.Core.Attributes;
38
39namespace Prebuild.Core.Targets
40{
41 /// <summary>
42 ///
43 /// </summary>
44 [Target("vs2002")]
45 public class VS2002Target : VS2003Target
46 {
47 #region Private Methods
48
49 private void SetVS2002()
50 {
51 this.SolutionVersion = "7.00";
52 this.ProductVersion = "7.0.9254";
53 this.SchemaVersion = "1.0";
54 this.VersionName = "2002";
55 this.Version = VSVersion.VS70;
56 }
57
58 #endregion
59
60 #region Public Methods
61
62 /// <summary>
63 /// Writes the specified kern.
64 /// </summary>
65 /// <param name="kern">The kern.</param>
66 public override void Write(Kernel kern)
67 {
68 SetVS2002();
69 base.Write(kern);
70 }
71
72 /// <summary>
73 /// Cleans the specified kern.
74 /// </summary>
75 /// <param name="kern">The kern.</param>
76 public override void Clean(Kernel kern)
77 {
78 SetVS2002();
79 base.Clean(kern);
80 }
81
82 /// <summary>
83 /// Gets the name.
84 /// </summary>
85 /// <value>The name.</value>
86 public override string Name
87 {
88 get
89 {
90 return "vs2002";
91 }
92 }
93
94 #endregion
95 }
96}
diff --git a/Prebuild/src/Core/Targets/VS2003Target.cs b/Prebuild/src/Core/Targets/VS2003Target.cs
new file mode 100644
index 0000000..b3236a8
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2003Target.cs
@@ -0,0 +1,633 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-09-29 21:11:40 +0200 (fr, 29 sep 2006) $
31 * $Revision: 177 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.IO;
39
40using Prebuild.Core.Attributes;
41using Prebuild.Core.Interfaces;
42using Prebuild.Core.Nodes;
43using Prebuild.Core.Utilities;
44
45namespace Prebuild.Core.Targets
46{
47 /// <summary>
48 ///
49 /// </summary>
50 public enum VSVersion
51 {
52 /// <summary>
53 ///
54 /// </summary>
55 VS70,
56 /// <summary>
57 ///
58 /// </summary>
59 VS71,
60 /// <summary>
61 ///
62 /// </summary>
63 VS80
64 }
65
66 /// <summary>
67 ///
68 /// </summary>
69 [Target("vs2003")]
70 public class VS2003Target : ITarget
71 {
72
73 #region Fields
74
75 string solutionVersion = "8.00";
76 string productVersion = "7.10.3077";
77 string schemaVersion = "2.0";
78 string versionName = "2003";
79 VSVersion version = VSVersion.VS71;
80
81 Hashtable m_Tools;
82 Kernel m_Kernel;
83
84 /// <summary>
85 /// Gets or sets the solution version.
86 /// </summary>
87 /// <value>The solution version.</value>
88 protected string SolutionVersion
89 {
90 get
91 {
92 return this.solutionVersion;
93 }
94 set
95 {
96 this.solutionVersion = value;
97 }
98 }
99 /// <summary>
100 /// Gets or sets the product version.
101 /// </summary>
102 /// <value>The product version.</value>
103 protected string ProductVersion
104 {
105 get
106 {
107 return this.productVersion;
108 }
109 set
110 {
111 this.productVersion = value;
112 }
113 }
114 /// <summary>
115 /// Gets or sets the schema version.
116 /// </summary>
117 /// <value>The schema version.</value>
118 protected string SchemaVersion
119 {
120 get
121 {
122 return this.schemaVersion;
123 }
124 set
125 {
126 this.schemaVersion = value;
127 }
128 }
129 /// <summary>
130 /// Gets or sets the name of the version.
131 /// </summary>
132 /// <value>The name of the version.</value>
133 protected string VersionName
134 {
135 get
136 {
137 return this.versionName;
138 }
139 set
140 {
141 this.versionName = value;
142 }
143 }
144 /// <summary>
145 /// Gets or sets the version.
146 /// </summary>
147 /// <value>The version.</value>
148 protected VSVersion Version
149 {
150 get
151 {
152 return this.version;
153 }
154 set
155 {
156 this.version = value;
157 }
158 }
159
160 #endregion
161
162 #region Constructors
163
164 /// <summary>
165 /// Initializes a new instance of the <see cref="VS2003Target"/> class.
166 /// </summary>
167 public VS2003Target()
168 {
169 m_Tools = new Hashtable();
170
171 m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP");
172 m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic");
173 }
174
175 #endregion
176
177 #region Private Methods
178
179 private string MakeRefPath(ProjectNode project)
180 {
181 string ret = "";
182 foreach(ReferencePathNode node in project.ReferencePaths)
183 {
184 try
185 {
186 string fullPath = Helper.ResolvePath(node.Path);
187 if(ret.Length < 1)
188 {
189 ret = fullPath;
190 }
191 else
192 {
193 ret += ";" + fullPath;
194 }
195 }
196 catch(ArgumentException)
197 {
198 m_Kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
199 }
200 }
201
202 return ret;
203 }
204
205 private void WriteProject(SolutionNode solution, ProjectNode project)
206 {
207 if(!m_Tools.ContainsKey(project.Language))
208 {
209 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
210 }
211
212 ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language];
213 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
214 StreamWriter ps = new StreamWriter(projectFile);
215
216 m_Kernel.CurrentWorkingDirectory.Push();
217 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
218
219 IEnumerator enumerator;
220 //ConfigurationNode scripts;
221
222 using(ps)
223 {
224 ps.WriteLine("<VisualStudioProject>");
225 ps.WriteLine(" <{0}", toolInfo.XmlTag);
226 ps.WriteLine("\t\t\t\tProjectType = \"Local\"");
227 ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", this.ProductVersion);
228 ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", this.SchemaVersion);
229 ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper());
230 ps.WriteLine("\t\t>");
231
232 ps.WriteLine("\t\t\t\t<Build>");
233 ps.WriteLine(" <Settings");
234 ps.WriteLine("\t\t\t\t ApplicationIcon = \"{0}\"",project.AppIcon);
235 ps.WriteLine("\t\t\t\t AssemblyKeyContainerName = \"\"");
236 ps.WriteLine("\t\t\t\t AssemblyName = \"{0}\"", project.AssemblyName);
237 ps.WriteLine("\t\t\t\t AssemblyOriginatorKeyFile = \"\"");
238 ps.WriteLine("\t\t\t\t DefaultClientScript = \"JScript\"");
239 ps.WriteLine("\t\t\t\t DefaultHTMLPageLayout = \"Grid\"");
240 ps.WriteLine("\t\t\t\t DefaultTargetSchema = \"IE50\"");
241 ps.WriteLine("\t\t\t\t DelaySign = \"false\"");
242
243 if(this.Version == VSVersion.VS70)
244 {
245 ps.WriteLine("\t\t\t\t NoStandardLibraries = \"false\"");
246 }
247
248 ps.WriteLine("\t\t\t\t OutputType = \"{0}\"", project.Type.ToString());
249
250 enumerator = project.Configurations.GetEnumerator();
251 enumerator.Reset();
252 enumerator.MoveNext();
253 foreach(ConfigurationNode conf in project.Configurations)
254 {
255 if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
256 {
257 ps.WriteLine("\t\t\t\t PreBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
258 }
259 else
260 {
261 ps.WriteLine("\t\t\t\t PreBuildEvent = \"{0}\"", conf.Options["PreBuildEvent"]);
262 }
263 if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
264 {
265 ps.WriteLine("\t\t\t\t PostBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
266 }
267 else
268 {
269 ps.WriteLine("\t\t\t\t PostBuildEvent = \"{0}\"", conf.Options["PostBuildEvent"]);
270 }
271 if (conf.Options["RunPostBuildEvent"] == null)
272 {
273 ps.WriteLine("\t\t\t\t RunPostBuildEvent = \"{0}\"", "OnBuildSuccess");
274 }
275 else
276 {
277 ps.WriteLine("\t\t\t\t RunPostBuildEvent = \"{0}\"", conf.Options["RunPostBuildEvent"]);
278 }
279 break;
280 }
281
282 ps.WriteLine("\t\t\t\t RootNamespace = \"{0}\"", project.RootNamespace);
283 ps.WriteLine("\t\t\t\t StartupObject = \"{0}\"", project.StartupObject);
284 ps.WriteLine("\t\t >");
285
286 foreach(ConfigurationNode conf in project.Configurations)
287 {
288 ps.WriteLine("\t\t\t\t <Config");
289 ps.WriteLine("\t\t\t\t Name = \"{0}\"", conf.Name);
290 ps.WriteLine("\t\t\t\t AllowUnsafeBlocks = \"{0}\"", conf.Options["AllowUnsafe"].ToString().ToLower());
291 ps.WriteLine("\t\t\t\t BaseAddress = \"{0}\"", conf.Options["BaseAddress"]);
292 ps.WriteLine("\t\t\t\t CheckForOverflowUnderflow = \"{0}\"", conf.Options["CheckUnderflowOverflow"].ToString().ToLower());
293 ps.WriteLine("\t\t\t\t ConfigurationOverrideFile = \"\"");
294 ps.WriteLine("\t\t\t\t DefineConstants = \"{0}\"", conf.Options["CompilerDefines"]);
295 ps.WriteLine("\t\t\t\t DocumentationFile = \"{0}\"", GetXmlDocFile(project, conf));//default to the assembly name
296 ps.WriteLine("\t\t\t\t DebugSymbols = \"{0}\"", conf.Options["DebugInformation"].ToString().ToLower());
297 ps.WriteLine("\t\t\t\t FileAlignment = \"{0}\"", conf.Options["FileAlignment"]);
298 ps.WriteLine("\t\t\t\t IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"].ToString().ToLower());
299
300 if(this.Version == VSVersion.VS71)
301 {
302 ps.WriteLine("\t\t\t\t NoStdLib = \"{0}\"", conf.Options["NoStdLib"].ToString().ToLower());
303 ps.WriteLine("\t\t\t\t NoWarn = \"{0}\"", conf.Options["SuppressWarnings"].ToString().ToLower());
304 }
305
306 ps.WriteLine("\t\t\t\t Optimize = \"{0}\"", conf.Options["OptimizeCode"].ToString().ToLower());
307 ps.WriteLine(" OutputPath = \"{0}\"",
308 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
309 ps.WriteLine(" RegisterForComInterop = \"{0}\"", conf.Options["RegisterComInterop"].ToString().ToLower());
310 ps.WriteLine(" RemoveIntegerChecks = \"{0}\"", conf.Options["RemoveIntegerChecks"].ToString().ToLower());
311 ps.WriteLine(" TreatWarningsAsErrors = \"{0}\"", conf.Options["WarningsAsErrors"].ToString().ToLower());
312 ps.WriteLine(" WarningLevel = \"{0}\"", conf.Options["WarningLevel"]);
313 ps.WriteLine(" />");
314 }
315
316 ps.WriteLine(" </Settings>");
317
318 ps.WriteLine(" <References>");
319 foreach(ReferenceNode refr in project.References)
320 {
321 ps.WriteLine(" <Reference");
322 ps.WriteLine(" Name = \"{0}\"", refr.Name);
323 ps.WriteLine(" AssemblyName = \"{0}\"", refr.Name);
324
325 if(solution.ProjectsTable.ContainsKey(refr.Name))
326 {
327 ProjectNode refProject = (ProjectNode)solution.ProjectsTable[refr.Name];
328 ps.WriteLine(" Project = \"{{{0}}}\"", refProject.Guid.ToString().ToUpper());
329 ps.WriteLine(" Package = \"{0}\"", toolInfo.Guid.ToString().ToUpper());
330 }
331 else
332 {
333 if(refr.Path != null)
334 {
335 ps.WriteLine(" HintPath = \"{0}\"", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
336 }
337
338 }
339
340 if(refr.LocalCopySpecified)
341 {
342 ps.WriteLine(" Private = \"{0}\"",refr.LocalCopy);
343 }
344
345 ps.WriteLine(" />");
346 }
347 ps.WriteLine(" </References>");
348
349 ps.WriteLine(" </Build>");
350 ps.WriteLine(" <Files>");
351
352 ps.WriteLine(" <Include>");
353
354 foreach(string file in project.Files)
355 {
356 string fileName = file.Replace(".\\", "");
357 ps.WriteLine(" <File");
358 ps.WriteLine(" RelPath = \"{0}\"", fileName);
359 ps.WriteLine(" SubType = \"{0}\"", project.Files.GetSubType(file));
360 ps.WriteLine(" BuildAction = \"{0}\"", project.Files.GetBuildAction(file));
361 ps.WriteLine(" />");
362
363 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
364 {
365 ps.WriteLine(" <File");
366 ps.WriteLine(" RelPath = \"{0}\"", fileName.Substring(0, fileName.LastIndexOf('.')) + ".resx");
367 int slash = fileName.LastIndexOf('\\');
368 if (slash == -1)
369 {
370 ps.WriteLine(" DependentUpon = \"{0}\"", fileName);
371 }
372 else
373 {
374 ps.WriteLine(" DependentUpon = \"{0}\"", fileName.Substring(slash + 1, fileName.Length - slash - 1));
375 }
376 ps.WriteLine(" BuildAction = \"{0}\"", "EmbeddedResource");
377 ps.WriteLine(" />");
378
379 }
380 }
381 ps.WriteLine(" </Include>");
382
383 ps.WriteLine(" </Files>");
384 ps.WriteLine(" </{0}>", toolInfo.XmlTag);
385 ps.WriteLine("</VisualStudioProject>");
386 }
387
388 ps = new StreamWriter(projectFile + ".user");
389 using(ps)
390 {
391 ps.WriteLine("<VisualStudioProject>");
392 ps.WriteLine(" <{0}>", toolInfo.XmlTag);
393 ps.WriteLine(" <Build>");
394
395 ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
396 foreach(ConfigurationNode conf in project.Configurations)
397 {
398 ps.WriteLine(" <Config");
399 ps.WriteLine(" Name = \"{0}\"", conf.Name);
400 ps.WriteLine(" />");
401 }
402 ps.WriteLine(" </Settings>");
403
404 ps.WriteLine(" </Build>");
405 ps.WriteLine(" </{0}>", toolInfo.XmlTag);
406 ps.WriteLine("</VisualStudioProject>");
407 }
408
409 m_Kernel.CurrentWorkingDirectory.Pop();
410 }
411
412 /// <summary>
413 /// Gets the XML doc file.
414 /// </summary>
415 /// <param name="project">The project.</param>
416 /// <param name="conf">The conf.</param>
417 /// <returns></returns>
418 public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
419 {
420 if( conf == null )
421 {
422 throw new ArgumentNullException("conf");
423 }
424 if( project == null )
425 {
426 throw new ArgumentNullException("project");
427 }
428 // if(!(bool)conf.Options["GenerateXmlDocFile"]) //default to none, if the generate option is false
429 // {
430 // return string.Empty;
431 // }
432
433 //default to "AssemblyName.xml"
434 //string defaultValue = Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
435 //return (string)conf.Options["XmlDocFile", defaultValue];
436
437 //default to no XmlDocFile file
438 return (string)conf.Options["XmlDocFile", ""];
439 }
440
441 private void WriteSolution(SolutionNode solution)
442 {
443 m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", this.VersionName);
444
445 foreach(ProjectNode project in solution.Projects)
446 {
447 if(m_Kernel.AllowProject(project.FilterGroups))
448 {
449 m_Kernel.Log.Write("...Creating project: {0}", project.Name);
450 WriteProject(solution, project);
451 }
452 }
453
454 m_Kernel.Log.Write("");
455 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
456 StreamWriter ss = new StreamWriter(solutionFile);
457
458 m_Kernel.CurrentWorkingDirectory.Push();
459 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
460
461 using(ss)
462 {
463 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", this.SolutionVersion);
464 foreach(ProjectNode project in solution.Projects)
465 {
466 if(!m_Tools.ContainsKey(project.Language))
467 {
468 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
469 }
470
471 ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language];
472
473 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
474 ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"",
475 toolInfo.Guid, project.Name, Helper.MakeFilePath(path, project.Name,
476 toolInfo.FileExtension), project.Guid.ToString().ToUpper());
477
478 ss.WriteLine("\tProjectSection(ProjectDependencies) = postProject");
479 ss.WriteLine("\tEndProjectSection");
480
481 ss.WriteLine("EndProject");
482 }
483
484 ss.WriteLine("Global");
485
486 ss.WriteLine("\tGlobalSection(SolutionConfiguration) = preSolution");
487 foreach(ConfigurationNode conf in solution.Configurations)
488 {
489 ss.WriteLine("\t\t{0} = {0}", conf.Name);
490 }
491 ss.WriteLine("\tEndGlobalSection");
492
493 ss.WriteLine("\tGlobalSection(ProjectDependencies) = postSolution");
494 foreach(ProjectNode project in solution.Projects)
495 {
496 for(int i = 0; i < project.References.Count; i++)
497 {
498 ReferenceNode refr = (ReferenceNode)project.References[i];
499 if(solution.ProjectsTable.ContainsKey(refr.Name))
500 {
501 ProjectNode refProject = (ProjectNode)solution.ProjectsTable[refr.Name];
502 ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})",
503 project.Guid.ToString().ToUpper()
504 , i,
505 refProject.Guid.ToString().ToUpper()
506 );
507 }
508 }
509 }
510 ss.WriteLine("\tEndGlobalSection");
511
512 ss.WriteLine("\tGlobalSection(ProjectConfiguration) = postSolution");
513 foreach(ProjectNode project in solution.Projects)
514 {
515 foreach(ConfigurationNode conf in solution.Configurations)
516 {
517 ss.WriteLine("\t\t{{{0}}}.{1}.ActiveCfg = {1}|.NET",
518 project.Guid.ToString().ToUpper(),
519 conf.Name);
520
521 ss.WriteLine("\t\t{{{0}}}.{1}.Build.0 = {1}|.NET",
522 project.Guid.ToString().ToUpper(),
523 conf.Name);
524 }
525 }
526 ss.WriteLine("\tEndGlobalSection");
527
528 if(solution.Files != null)
529 {
530 ss.WriteLine("\tGlobalSection(SolutionItems) = postSolution");
531 foreach(string file in solution.Files)
532 {
533 ss.WriteLine("\t\t{0} = {0}", file);
534 }
535 ss.WriteLine("\tEndGlobalSection");
536 }
537
538 ss.WriteLine("\tGlobalSection(ExtensibilityGlobals) = postSolution");
539 ss.WriteLine("\tEndGlobalSection");
540 ss.WriteLine("\tGlobalSection(ExtensibilityAddIns) = postSolution");
541 ss.WriteLine("\tEndGlobalSection");
542
543 ss.WriteLine("EndGlobal");
544 }
545
546 m_Kernel.CurrentWorkingDirectory.Pop();
547 }
548
549 private void CleanProject(ProjectNode project)
550 {
551 m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
552
553 ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language];
554 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
555 string userFile = projectFile + ".user";
556
557 Helper.DeleteIfExists(projectFile);
558 Helper.DeleteIfExists(userFile);
559 }
560
561 private void CleanSolution(SolutionNode solution)
562 {
563 m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", this.VersionName, solution.Name);
564
565 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
566 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
567
568 Helper.DeleteIfExists(slnFile);
569 Helper.DeleteIfExists(suoFile);
570
571 foreach(ProjectNode project in solution.Projects)
572 {
573 CleanProject(project);
574 }
575
576 m_Kernel.Log.Write("");
577 }
578
579 #endregion
580
581 #region ITarget Members
582
583 /// <summary>
584 /// Writes the specified kern.
585 /// </summary>
586 /// <param name="kern">The kern.</param>
587 public virtual void Write(Kernel kern)
588 {
589 if( kern == null )
590 {
591 throw new ArgumentNullException("kern");
592 }
593 m_Kernel = kern;
594 foreach(SolutionNode sol in m_Kernel.Solutions)
595 {
596 WriteSolution(sol);
597 }
598 m_Kernel = null;
599 }
600
601 /// <summary>
602 /// Cleans the specified kern.
603 /// </summary>
604 /// <param name="kern">The kern.</param>
605 public virtual void Clean(Kernel kern)
606 {
607 if( kern == null )
608 {
609 throw new ArgumentNullException("kern");
610 }
611 m_Kernel = kern;
612 foreach(SolutionNode sol in m_Kernel.Solutions)
613 {
614 CleanSolution(sol);
615 }
616 m_Kernel = null;
617 }
618
619 /// <summary>
620 /// Gets the name.
621 /// </summary>
622 /// <value>The name.</value>
623 public virtual string Name
624 {
625 get
626 {
627 return "vs2003";
628 }
629 }
630
631 #endregion
632 }
633}
diff --git a/Prebuild/src/Core/Targets/VS2005Target.cs b/Prebuild/src/Core/Targets/VS2005Target.cs
new file mode 100644
index 0000000..23b6116
--- /dev/null
+++ b/Prebuild/src/Core/Targets/VS2005Target.cs
@@ -0,0 +1,883 @@
1#region BSD License
2/*
3Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: robloach $
30 * $Date: 2007-02-27 19:52:34 +0100 (ti, 27 feb 2007) $
31 * $Revision: 207 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.IO;
39
40using Prebuild.Core.Attributes;
41using Prebuild.Core.Interfaces;
42using Prebuild.Core.Nodes;
43using Prebuild.Core.Utilities;
44
45namespace Prebuild.Core.Targets
46{
47 /// <summary>
48 ///
49 /// </summary>
50 public struct ToolInfo
51 {
52 string name;
53 string guid;
54 string fileExtension;
55 string xmlTag;
56 string importProject;
57
58 /// <summary>
59 /// Gets or sets the name.
60 /// </summary>
61 /// <value>The name.</value>
62 public string Name
63 {
64 get
65 {
66 return name;
67 }
68 set
69 {
70 name = value;
71 }
72 }
73
74 /// <summary>
75 /// Gets or sets the GUID.
76 /// </summary>
77 /// <value>The GUID.</value>
78 public string Guid
79 {
80 get
81 {
82 return guid;
83 }
84 set
85 {
86 guid = value;
87 }
88 }
89
90 /// <summary>
91 /// Gets or sets the file extension.
92 /// </summary>
93 /// <value>The file extension.</value>
94 public string FileExtension
95 {
96 get
97 {
98 return fileExtension;
99 }
100 set
101 {
102 fileExtension = value;
103 }
104 }
105 /// <summary>
106 /// Gets or sets the XML tag.
107 /// </summary>
108 /// <value>The XML tag.</value>
109 public string XmlTag
110 {
111 get
112 {
113 return xmlTag;
114 }
115 set
116 {
117 xmlTag = value;
118 }
119 }
120
121 /// <summary>
122 /// Gets or sets the import project property.
123 /// </summary>
124 /// <value>The ImportProject tag.</value>
125 public string ImportProject
126 {
127 get
128 {
129 return importProject;
130 }
131 set
132 {
133 importProject = value;
134 }
135 }
136
137 /// <summary>
138 /// Initializes a new instance of the <see cref="ToolInfo"/> class.
139 /// </summary>
140 /// <param name="name">The name.</param>
141 /// <param name="guid">The GUID.</param>
142 /// <param name="fileExtension">The file extension.</param>
143 /// <param name="xml">The XML.</param>
144 /// <param name="importProject">The import project.</param>
145 public ToolInfo(string name, string guid, string fileExtension, string xml, string importProject)
146 {
147 this.name = name;
148 this.guid = guid;
149 this.fileExtension = fileExtension;
150 this.xmlTag = xml;
151 this.importProject = importProject;
152 }
153
154 /// <summary>
155 /// Initializes a new instance of the <see cref="ToolInfo"/> class.
156 /// </summary>
157 /// <param name="name">The name.</param>
158 /// <param name="guid">The GUID.</param>
159 /// <param name="fileExtension">The file extension.</param>
160 /// <param name="xml">The XML.</param>
161 public ToolInfo(string name, string guid, string fileExtension, string xml)
162 {
163 this.name = name;
164 this.guid = guid;
165 this.fileExtension = fileExtension;
166 this.xmlTag = xml;
167 this.importProject = "$(MSBuildBinPath)\\Microsoft." + xml + ".Targets";
168 }
169
170 /// <summary>
171 /// Equals operator
172 /// </summary>
173 /// <param name="obj">ToolInfo to compare</param>
174 /// <returns>true if toolInfos are equal</returns>
175 public override bool Equals(object obj)
176 {
177 if (obj == null)
178 {
179 throw new ArgumentNullException("obj");
180 }
181 if (obj.GetType() != typeof(ToolInfo))
182 return false;
183
184 ToolInfo c = (ToolInfo)obj;
185 return ((this.name == c.name) && (this.guid == c.guid) && (this.fileExtension == c.fileExtension) && (this.importProject == c.importProject));
186 }
187
188 /// <summary>
189 /// Equals operator
190 /// </summary>
191 /// <param name="c1">ToolInfo to compare</param>
192 /// <param name="c2">ToolInfo to compare</param>
193 /// <returns>True if toolInfos are equal</returns>
194 public static bool operator ==(ToolInfo c1, ToolInfo c2)
195 {
196 return ((c1.name == c2.name) && (c1.guid == c2.guid) && (c1.fileExtension == c2.fileExtension) && (c1.importProject == c2.importProject) && (c1.xmlTag == c2.xmlTag));
197 }
198
199 /// <summary>
200 /// Not equals operator
201 /// </summary>
202 /// <param name="c1">ToolInfo to compare</param>
203 /// <param name="c2">ToolInfo to compare</param>
204 /// <returns>True if toolInfos are not equal</returns>
205 public static bool operator !=(ToolInfo c1, ToolInfo c2)
206 {
207 return !(c1 == c2);
208 }
209
210 /// <summary>
211 /// Hash Code
212 /// </summary>
213 /// <returns>Hash code</returns>
214 public override int GetHashCode()
215 {
216 return name.GetHashCode() ^ guid.GetHashCode() ^ this.fileExtension.GetHashCode() ^ this.importProject.GetHashCode() ^ this.xmlTag.GetHashCode();
217
218 }
219 }
220
221 /// <summary>
222 ///
223 /// </summary>
224 [Target("vs2005")]
225 public class VS2005Target : ITarget
226 {
227 #region Inner Classes
228
229 #endregion
230
231 #region Fields
232
233 string solutionVersion = "9.00";
234 string productVersion = "8.0.50727";
235 string schemaVersion = "2.0";
236 string versionName = "Visual C# 2005";
237 VSVersion version = VSVersion.VS80;
238
239 Hashtable tools;
240 Kernel kernel;
241
242 /// <summary>
243 /// Gets or sets the solution version.
244 /// </summary>
245 /// <value>The solution version.</value>
246 protected string SolutionVersion
247 {
248 get
249 {
250 return this.solutionVersion;
251 }
252 set
253 {
254 this.solutionVersion = value;
255 }
256 }
257 /// <summary>
258 /// Gets or sets the product version.
259 /// </summary>
260 /// <value>The product version.</value>
261 protected string ProductVersion
262 {
263 get
264 {
265 return this.productVersion;
266 }
267 set
268 {
269 this.productVersion = value;
270 }
271 }
272 /// <summary>
273 /// Gets or sets the schema version.
274 /// </summary>
275 /// <value>The schema version.</value>
276 protected string SchemaVersion
277 {
278 get
279 {
280 return this.schemaVersion;
281 }
282 set
283 {
284 this.schemaVersion = value;
285 }
286 }
287 /// <summary>
288 /// Gets or sets the name of the version.
289 /// </summary>
290 /// <value>The name of the version.</value>
291 protected string VersionName
292 {
293 get
294 {
295 return this.versionName;
296 }
297 set
298 {
299 this.versionName = value;
300 }
301 }
302 /// <summary>
303 /// Gets or sets the version.
304 /// </summary>
305 /// <value>The version.</value>
306 protected VSVersion Version
307 {
308 get
309 {
310 return this.version;
311 }
312 set
313 {
314 this.version = value;
315 }
316 }
317
318 #endregion
319
320 #region Constructors
321
322 /// <summary>
323 /// Initializes a new instance of the <see cref="VS2005Target"/> class.
324 /// </summary>
325 public VS2005Target()
326 {
327 this.tools = new Hashtable();
328
329 this.tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets");
330 this.tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets");
331 this.tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets");
332 }
333
334 #endregion
335
336 #region Private Methods
337
338 private string MakeRefPath(ProjectNode project)
339 {
340 string ret = "";
341 foreach (ReferencePathNode node in project.ReferencePaths)
342 {
343 try
344 {
345 string fullPath = Helper.ResolvePath(node.Path);
346 if (ret.Length < 1)
347 {
348 ret = fullPath;
349 }
350 else
351 {
352 ret += ";" + fullPath;
353 }
354 }
355 catch (ArgumentException)
356 {
357 this.kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
358 }
359 }
360
361 return ret;
362 }
363
364 private void WriteProject(SolutionNode solution, ProjectNode project)
365 {
366 if (!tools.ContainsKey(project.Language))
367 {
368 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
369 }
370
371 ToolInfo toolInfo = (ToolInfo)tools[project.Language];
372 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
373 StreamWriter ps = new StreamWriter(projectFile);
374
375 kernel.CurrentWorkingDirectory.Push();
376 Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
377
378 #region Project File
379 using (ps)
380 {
381 ps.WriteLine("<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
382 //ps.WriteLine(" <{0}", toolInfo.XMLTag);
383 ps.WriteLine(" <PropertyGroup>");
384 ps.WriteLine(" <ProjectType>Local</ProjectType>");
385 ps.WriteLine(" <ProductVersion>{0}</ProductVersion>", this.ProductVersion);
386 ps.WriteLine(" <SchemaVersion>{0}</SchemaVersion>", this.SchemaVersion);
387 ps.WriteLine(" <ProjectGuid>{{{0}}}</ProjectGuid>", project.Guid.ToString().ToUpper());
388
389 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
390 ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>");
391 //ps.WriteLine(" <Build>");
392
393 //ps.WriteLine(" <Settings");
394 ps.WriteLine(" <ApplicationIcon>{0}</ApplicationIcon>", project.AppIcon);
395 ps.WriteLine(" <AssemblyKeyContainerName>");
396 ps.WriteLine(" </AssemblyKeyContainerName>");
397 ps.WriteLine(" <AssemblyName>{0}</AssemblyName>", project.AssemblyName);
398 foreach (ConfigurationNode conf in project.Configurations)
399 {
400 if (conf.Options.KeyFile != "")
401 {
402 ps.WriteLine(" <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>", conf.Options.KeyFile);
403 ps.WriteLine(" <SignAssembly>true</SignAssembly>");
404 break;
405 }
406 }
407 ps.WriteLine(" <DefaultClientScript>JScript</DefaultClientScript>");
408 ps.WriteLine(" <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>");
409 ps.WriteLine(" <DefaultTargetSchema>IE50</DefaultTargetSchema>");
410 ps.WriteLine(" <DelaySign>false</DelaySign>");
411
412 //if(m_Version == VSVersion.VS70)
413 // ps.WriteLine(" NoStandardLibraries = \"false\"");
414
415 ps.WriteLine(" <OutputType>{0}</OutputType>", project.Type.ToString());
416 ps.WriteLine(" <AppDesignerFolder>{0}</AppDesignerFolder>", project.DesignerFolder);
417 ps.WriteLine(" <RootNamespace>{0}</RootNamespace>", project.RootNamespace);
418 ps.WriteLine(" <StartupObject>{0}</StartupObject>", project.StartupObject);
419 //ps.WriteLine(" >");
420 ps.WriteLine(" <FileUpgradeFlags>");
421 ps.WriteLine(" </FileUpgradeFlags>");
422
423 ps.WriteLine(" </PropertyGroup>");
424
425 foreach (ConfigurationNode conf in project.Configurations)
426 {
427 ps.Write(" <PropertyGroup ");
428 ps.WriteLine("Condition=\" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' \">", conf.Name);
429 ps.WriteLine(" <AllowUnsafeBlocks>{0}</AllowUnsafeBlocks>", conf.Options["AllowUnsafe"]);
430 ps.WriteLine(" <BaseAddress>{0}</BaseAddress>", conf.Options["BaseAddress"]);
431 ps.WriteLine(" <CheckForOverflowUnderflow>{0}</CheckForOverflowUnderflow>", conf.Options["CheckUnderflowOverflow"]);
432 ps.WriteLine(" <ConfigurationOverrideFile>");
433 ps.WriteLine(" </ConfigurationOverrideFile>");
434 ps.WriteLine(" <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]);
435 ps.WriteLine(" <DocumentationFile>{0}</DocumentationFile>", conf.Options["XmlDocFile"]);
436 ps.WriteLine(" <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]);
437 ps.WriteLine(" <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]);
438 // ps.WriteLine(" <IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"]);
439
440 // if(m_Version == VSVersion.VS71)
441 // {
442 // ps.WriteLine(" NoStdLib = \"{0}\"", conf.Options["NoStdLib"]);
443 // ps.WriteLine(" NoWarn = \"{0}\"", conf.Options["SuppressWarnings"]);
444 // }
445
446 ps.WriteLine(" <Optimize>{0}</Optimize>", conf.Options["OptimizeCode"]);
447 ps.WriteLine(" <OutputPath>{0}</OutputPath>",
448 Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
449 ps.WriteLine(" <RegisterForComInterop>{0}</RegisterForComInterop>", conf.Options["RegisterComInterop"]);
450 ps.WriteLine(" <RemoveIntegerChecks>{0}</RemoveIntegerChecks>", conf.Options["RemoveIntegerChecks"]);
451 ps.WriteLine(" <TreatWarningsAsErrors>{0}</TreatWarningsAsErrors>", conf.Options["WarningsAsErrors"]);
452 ps.WriteLine(" <WarningLevel>{0}</WarningLevel>", conf.Options["WarningLevel"]);
453 ps.WriteLine(" <NoWarn>{0}</NoWarn>", conf.Options["SuppressWarnings"]);
454 ps.WriteLine(" </PropertyGroup>");
455 }
456
457 //ps.WriteLine(" </Settings>");
458
459 // Assembly References
460 ps.WriteLine(" <ItemGroup>");
461 string refPath = ((ReferencePathNode) project.ReferencePaths[0]).Path;
462
463 foreach (ReferenceNode refr in project.References)
464 {
465 if (!solution.ProjectsTable.ContainsKey(refr.Name))
466 {
467 ps.Write(" <Reference");
468 ps.Write(" Include=\"");
469 ps.Write(refr.Name);
470
471 ps.WriteLine("\" >");
472
473 string path;
474
475 if( refr.Name.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase ))
476 {
477 path = Helper.NormalizePath(Path.Combine( refPath, refr.Name), '\\');
478 }
479 else
480 {
481 path = refr.Name + ".dll";
482 }
483
484 // TODO: Allow reference to *.exe files
485 ps.WriteLine(" <HintPath>{0}</HintPath>", path );
486 ps.WriteLine(" <Private>{0}</Private>", refr.LocalCopy);
487 ps.WriteLine(" </Reference>");
488 }
489 }
490 ps.WriteLine(" </ItemGroup>");
491
492 //Project References
493 ps.WriteLine(" <ItemGroup>");
494 foreach (ReferenceNode refr in project.References)
495 {
496 if (solution.ProjectsTable.ContainsKey(refr.Name))
497 {
498 ProjectNode refProject = (ProjectNode)solution.ProjectsTable[refr.Name];
499 // TODO: Allow reference to visual basic projects
500 string path =
501 Helper.MakePathRelativeTo(project.FullPath,
502 Helper.MakeFilePath(refProject.FullPath, refProject.Name, "csproj"));
503 ps.WriteLine(" <ProjectReference Include=\"{0}\">", path );
504 //<ProjectReference Include="..\..\RealmForge\Utility\RealmForge.Utility.csproj">
505 ps.WriteLine(" <Name>{0}</Name>", refProject.Name);
506 // <Name>RealmForge.Utility</Name>
507 ps.WriteLine(" <Project>{{{0}}}</Project>", refProject.Guid.ToString().ToUpper());
508 // <Project>{6880D1D3-69EE-461B-B841-5319845B20D3}</Project>
509 ps.WriteLine(" <Package>{0}</Package>", toolInfo.Guid.ToString().ToUpper());
510 // <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
511 ps.WriteLine("\t\t\t<Private>{0}</Private>", refr.LocalCopy);
512 ps.WriteLine(" </ProjectReference>");
513 //</ProjectReference>
514 }
515 else
516 {
517 }
518 }
519 ps.WriteLine(" </ItemGroup>");
520
521 // ps.WriteLine(" </Build>");
522 ps.WriteLine(" <ItemGroup>");
523
524 // ps.WriteLine(" <Include>");
525 ArrayList list = new ArrayList();
526 foreach (string file in project.Files)
527 {
528 // if (file == "Properties\\Bind.Designer.cs")
529 // {
530 // Console.WriteLine("Wait a minute!");
531 // Console.WriteLine(project.Files.GetSubType(file).ToString());
532 // }
533
534 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings && project.Files.GetSubType(file) != SubType.Designer)
535 {
536 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
537
538 int slash = file.LastIndexOf('\\');
539 if (slash == -1)
540 {
541 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", file);
542 }
543 else
544 {
545 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", file.Substring(slash + 1, file.Length - slash - 1));
546 }
547 ps.WriteLine(" <SubType>Designer</SubType>");
548 ps.WriteLine(" </EmbeddedResource>");
549 //
550 }
551
552 if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) == SubType.Designer)
553 {
554 ps.WriteLine(" <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
555 ps.WriteLine(" <SubType>" + project.Files.GetSubType(file) + "</SubType>");
556 ps.WriteLine(" <Generator>ResXFileCodeGenerator</Generator>");
557 ps.WriteLine(" <LastGenOutput>Resources.Designer.cs</LastGenOutput>");
558 ps.WriteLine(" </EmbeddedResource>");
559 ps.WriteLine(" <Compile Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs");
560 ps.WriteLine(" <AutoGen>True</AutoGen>");
561 ps.WriteLine(" <DesignTime>True</DesignTime>");
562 ps.WriteLine(" <DependentUpon>Resources.resx</DependentUpon>");
563 ps.WriteLine(" </Compile>");
564 list.Add(file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs");
565 }
566 if (project.Files.GetSubType(file).ToString() == "Settings")
567 {
568 //Console.WriteLine("File: " + file);
569 //Console.WriteLine("Last index: " + file.LastIndexOf('.'));
570 //Console.WriteLine("Length: " + file.Length);
571 ps.Write(" <{0} ", project.Files.GetBuildAction(file));
572 ps.WriteLine("Include=\"{0}\">", file);
573 int slash = file.LastIndexOf('\\');
574 string fileName = file.Substring(slash + 1, file.Length - slash - 1);
575 if (project.Files.GetBuildAction(file) == BuildAction.None)
576 {
577 ps.WriteLine(" <Generator>SettingsSingleFileGenerator</Generator>");
578
579 //Console.WriteLine("FileName: " + fileName);
580 //Console.WriteLine("FileNameMain: " + fileName.Substring(0, fileName.LastIndexOf('.')));
581 //Console.WriteLine("FileNameExt: " + fileName.Substring(fileName.LastIndexOf('.'), fileName.Length - fileName.LastIndexOf('.')));
582 if (slash == -1)
583 {
584 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
585 }
586 else
587 {
588 ps.WriteLine(" <LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
589 }
590 }
591 else
592 {
593 ps.WriteLine(" <SubType>Code</SubType>");
594 ps.WriteLine(" <AutoGen>True</AutoGen>");
595 ps.WriteLine(" <DesignTimeSharedInput>True</DesignTimeSharedInput>");
596 string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.'));
597 string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.'));
598 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", fileNameShorter + ".settings");
599 }
600 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(file));
601 }
602 else if (project.Files.GetSubType(file) != SubType.Designer)
603 {
604 if (!list.Contains(file))
605 {
606 ps.Write(" <{0} ", project.Files.GetBuildAction(file));
607 ps.WriteLine("Include=\"{0}\">", file);
608
609
610 if (file.Contains("Designer.cs"))
611 {
612 ps.WriteLine(" <DependentUpon>{0}</DependentUpon>", file.Substring(0, file.IndexOf(".Designer.cs")) + ".cs");
613 }
614
615 if (project.Files.GetIsLink(file))
616 {
617 ps.WriteLine(" <Link>{0}</Link>", Path.GetFileName(file));
618 }
619 else if (project.Files.GetBuildAction(file) != BuildAction.None)
620 {
621 if (project.Files.GetBuildAction(file) != BuildAction.EmbeddedResource)
622 {
623 ps.WriteLine(" <SubType>{0}</SubType>", project.Files.GetSubType(file));
624 }
625 }
626 if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never)
627 {
628 ps.WriteLine(" <CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(file));
629 }
630
631 ps.WriteLine(" </{0}>", project.Files.GetBuildAction(file));
632 }
633 }
634 }
635 // ps.WriteLine(" </Include>");
636
637 ps.WriteLine(" </ItemGroup>");
638 ps.WriteLine(" <Import Project=\"" + toolInfo.ImportProject + "\" />");
639 ps.WriteLine(" <PropertyGroup>");
640 ps.WriteLine(" <PreBuildEvent>");
641 ps.WriteLine(" </PreBuildEvent>");
642 ps.WriteLine(" <PostBuildEvent>");
643 ps.WriteLine(" </PostBuildEvent>");
644 ps.WriteLine(" </PropertyGroup>");
645 // ps.WriteLine(" </{0}>", toolInfo.XMLTag);
646 ps.WriteLine("</Project>");
647 }
648 #endregion
649
650 #region User File
651
652 ps = new StreamWriter(projectFile + ".user");
653 using (ps)
654 {
655 ps.WriteLine("<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
656 //ps.WriteLine( "<VisualStudioProject>" );
657 //ps.WriteLine(" <{0}>", toolInfo.XMLTag);
658 //ps.WriteLine(" <Build>");
659 ps.WriteLine(" <PropertyGroup>");
660 //ps.WriteLine(" <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
661
662
663 ps.WriteLine(" <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
664 ps.WriteLine(" <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>");
665
666 if (projectFile.Contains( "OpenSim.csproj" ))
667 {
668 ps.WriteLine(" <StartArguments>-loginserver -sandbox -accounts</StartArguments>");
669 }
670
671 ps.WriteLine(" <ReferencePath>{0}</ReferencePath>", MakeRefPath(project));
672 ps.WriteLine(" <LastOpenVersion>{0}</LastOpenVersion>", this.ProductVersion);
673 ps.WriteLine(" <ProjectView>ProjectFiles</ProjectView>");
674 ps.WriteLine(" <ProjectTrust>0</ProjectTrust>");
675 ps.WriteLine(" </PropertyGroup>");
676 foreach (ConfigurationNode conf in project.Configurations)
677 {
678 ps.Write(" <PropertyGroup");
679 ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|AnyCPU' \"", conf.Name);
680 ps.WriteLine(" />");
681 }
682
683 ps.WriteLine("</Project>");
684 }
685 #endregion
686
687 kernel.CurrentWorkingDirectory.Pop();
688 }
689
690 private void WriteSolution(SolutionNode solution)
691 {
692 kernel.Log.Write("Creating {0} solution and project files", this.VersionName);
693
694 foreach (ProjectNode project in solution.Projects)
695 {
696 kernel.Log.Write("...Creating project: {0}", project.Name);
697 WriteProject(solution, project);
698 }
699
700 kernel.Log.Write("");
701 string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
702 StreamWriter ss = new StreamWriter(solutionFile);
703
704 kernel.CurrentWorkingDirectory.Push();
705 Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
706
707 using (ss)
708 {
709 ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", this.SolutionVersion);
710 ss.WriteLine("# Visual Studio 2005");
711 foreach (ProjectNode project in solution.Projects)
712 {
713 if (!tools.ContainsKey(project.Language))
714 {
715 throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
716 }
717
718 ToolInfo toolInfo = (ToolInfo)tools[project.Language];
719
720 string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
721 ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"",
722 toolInfo.Guid, project.Name, Helper.MakeFilePath(path, project.Name,
723 toolInfo.FileExtension), project.Guid.ToString().ToUpper());
724
725 //ss.WriteLine(" ProjectSection(ProjectDependencies) = postProject");
726 //ss.WriteLine(" EndProjectSection");
727
728 ss.WriteLine("EndProject");
729 }
730
731 if (solution.Files != null)
732 {
733 ss.WriteLine("Project(\"{0}\") = \"Solution Items\", \"Solution Items\", \"{1}\"", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", "{468F1D07-AD17-4CC3-ABD0-2CA268E4E1A6}");
734 ss.WriteLine("\tProjectSection(SolutionItems) = preProject");
735 foreach (string file in solution.Files)
736 ss.WriteLine("\t\t{0} = {0}", file);
737 ss.WriteLine("\tEndProjectSection");
738 ss.WriteLine("EndProject");
739 }
740
741 ss.WriteLine("Global");
742
743 ss.WriteLine(" GlobalSection(SolutionConfigurationPlatforms) = preSolution");
744 foreach (ConfigurationNode conf in solution.Configurations)
745 {
746 ss.WriteLine(" {0}|Any CPU = {0}|Any CPU", conf.Name);
747 }
748 ss.WriteLine(" EndGlobalSection");
749
750 if (solution.Projects.Count > 1)
751 {
752 ss.WriteLine(" GlobalSection(ProjectDependencies) = postSolution");
753 }
754 foreach (ProjectNode project in solution.Projects)
755 {
756 for (int i = 0; i < project.References.Count; i++)
757 {
758 ReferenceNode refr = (ReferenceNode)project.References[i];
759 if (solution.ProjectsTable.ContainsKey(refr.Name))
760 {
761 ProjectNode refProject = (ProjectNode)solution.ProjectsTable[refr.Name];
762 ss.WriteLine(" ({{{0}}}).{1} = ({{{2}}})",
763 project.Guid.ToString().ToUpper()
764 , i,
765 refProject.Guid.ToString().ToUpper()
766 );
767 }
768 }
769 }
770 if (solution.Projects.Count > 1)
771 {
772 ss.WriteLine(" EndGlobalSection");
773 }
774 ss.WriteLine(" GlobalSection(ProjectConfigurationPlatforms) = postSolution");
775 foreach (ProjectNode project in solution.Projects)
776 {
777 foreach (ConfigurationNode conf in solution.Configurations)
778 {
779 ss.WriteLine(" {{{0}}}.{1}|Any CPU.ActiveCfg = {1}|Any CPU",
780 project.Guid.ToString().ToUpper(),
781 conf.Name);
782
783 ss.WriteLine(" {{{0}}}.{1}|Any CPU.Build.0 = {1}|Any CPU",
784 project.Guid.ToString().ToUpper(),
785 conf.Name);
786 }
787 }
788 ss.WriteLine(" EndGlobalSection");
789 ss.WriteLine(" GlobalSection(SolutionProperties) = preSolution");
790 ss.WriteLine(" HideSolutionNode = FALSE");
791 ss.WriteLine(" EndGlobalSection");
792
793 ss.WriteLine("EndGlobal");
794 }
795
796 kernel.CurrentWorkingDirectory.Pop();
797 }
798
799 private void CleanProject(ProjectNode project)
800 {
801 kernel.Log.Write("...Cleaning project: {0}", project.Name);
802
803 ToolInfo toolInfo = (ToolInfo)tools[project.Language];
804 string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
805 string userFile = projectFile + ".user";
806
807 Helper.DeleteIfExists(projectFile);
808 Helper.DeleteIfExists(userFile);
809 }
810
811 private void CleanSolution(SolutionNode solution)
812 {
813 kernel.Log.Write("Cleaning {0} solution and project files", this.VersionName, solution.Name);
814
815 string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
816 string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
817
818 Helper.DeleteIfExists(slnFile);
819 Helper.DeleteIfExists(suoFile);
820
821 foreach (ProjectNode project in solution.Projects)
822 {
823 CleanProject(project);
824 }
825
826 kernel.Log.Write("");
827 }
828
829 #endregion
830
831 #region ITarget Members
832
833 /// <summary>
834 /// Writes the specified kern.
835 /// </summary>
836 /// <param name="kern">The kern.</param>
837 public virtual void Write(Kernel kern)
838 {
839 if (kern == null)
840 {
841 throw new ArgumentNullException("kern");
842 }
843 kernel = kern;
844 foreach (SolutionNode sol in kernel.Solutions)
845 {
846 WriteSolution(sol);
847 }
848 kernel = null;
849 }
850
851 /// <summary>
852 /// Cleans the specified kern.
853 /// </summary>
854 /// <param name="kern">The kern.</param>
855 public virtual void Clean(Kernel kern)
856 {
857 if (kern == null)
858 {
859 throw new ArgumentNullException("kern");
860 }
861 kernel = kern;
862 foreach (SolutionNode sol in kernel.Solutions)
863 {
864 CleanSolution(sol);
865 }
866 kernel = null;
867 }
868
869 /// <summary>
870 /// Gets the name.
871 /// </summary>
872 /// <value>The name.</value>
873 public virtual string Name
874 {
875 get
876 {
877 return "vs2005";
878 }
879 }
880
881 #endregion
882 }
883}
diff --git a/Prebuild/src/Core/UnknownLanguageException.cs b/Prebuild/src/Core/UnknownLanguageException.cs
new file mode 100644
index 0000000..cbd1dc1
--- /dev/null
+++ b/Prebuild/src/Core/UnknownLanguageException.cs
@@ -0,0 +1,63 @@
1/*
2 * $RCSfile$
3 * Copyright (C) 2004, 2005 David Hudson (jendave@yahoo.com)
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20using System;
21using System.Runtime.Serialization;
22
23namespace Prebuild.Core
24{
25 /// <summary>
26 /// </summary>
27 [Serializable()]
28 public class UnknownLanguageException : Exception
29 {
30 /// <summary>
31 /// Basic exception.
32 /// </summary>
33 public UnknownLanguageException()
34 {
35 }
36
37 /// <summary>
38 /// Exception with specified string
39 /// </summary>
40 /// <param name="message">Exception message</param>
41 public UnknownLanguageException(string message): base(message)
42 {
43 }
44
45 /// <summary>
46 ///
47 /// </summary>
48 /// <param name="message"></param>
49 /// <param name="exception"></param>
50 public UnknownLanguageException(string message, Exception exception) : base(message, exception)
51 {
52 }
53
54 /// <summary>
55 ///
56 /// </summary>
57 /// <param name="info"></param>
58 /// <param name="context"></param>
59 protected UnknownLanguageException(SerializationInfo info, StreamingContext context) : base( info, context )
60 {
61 }
62 }
63}
diff --git a/Prebuild/src/Core/Utilities/CommandLineCollection.cs b/Prebuild/src/Core/Utilities/CommandLineCollection.cs
new file mode 100644
index 0000000..496731f
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/CommandLineCollection.cs
@@ -0,0 +1,162 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: robloach $
30 * $Date: 2006-09-26 00:30:53 +0200 (ti, 26 sep 2006) $
31 * $Revision: 165 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Collections.Specialized;
38using System.Diagnostics;
39
40namespace Prebuild.Core.Utilities
41{
42 /// <summary>
43 /// The CommandLine class parses and interprets the command-line arguments passed to
44 /// prebuild.
45 /// </summary>
46 public class CommandLineCollection
47 {
48 #region Fields
49
50 // The raw OS arguments
51 private string[] m_RawArgs;
52
53 // Command-line argument storage
54 private Hashtable m_Arguments;
55
56 #endregion
57
58 #region Constructors
59
60 /// <summary>
61 /// Create a new CommandLine instance and set some internal variables.
62 /// </summary>
63 public CommandLineCollection(string[] args)
64 {
65 m_RawArgs = args;
66 m_Arguments = new Hashtable();
67
68 Parse();
69 }
70
71 #endregion
72
73 #region Private Methods
74
75 private void Parse()
76 {
77 if(m_RawArgs.Length < 1)
78 return;
79
80 int idx = 0;
81 string arg = null, lastArg = null;
82
83 while(idx <m_RawArgs.Length)
84 {
85 arg = m_RawArgs[idx];
86
87 if(arg.Length > 2 && arg[0] == '/')
88 {
89 arg = arg.Substring(1);
90 lastArg = arg;
91 m_Arguments[arg] = "";
92 }
93 else
94 {
95 if(lastArg != null)
96 {
97 m_Arguments[lastArg] = arg;
98 lastArg = null;
99 }
100 }
101
102 idx++;
103 }
104 }
105
106 #endregion
107
108 #region Public Methods
109
110 /// <summary>
111 /// Wases the passed.
112 /// </summary>
113 /// <param name="arg">The arg.</param>
114 /// <returns></returns>
115 public bool WasPassed(string arg)
116 {
117 return (m_Arguments.ContainsKey(arg));
118 }
119
120 #endregion
121
122 #region Properties
123
124 /// <summary>
125 /// Gets the parameter associated with the command line option
126 /// </summary>
127 /// <remarks>Returns null if option was not specified,
128 /// null string if no parameter was specified, and the value if a parameter was specified</remarks>
129 public string this[string index]
130 {
131 get
132 {
133 if(m_Arguments.ContainsKey(index))
134 {
135 return (string)(m_Arguments[index]);
136 }
137 else
138 {
139 return null;
140 }
141 }
142 }
143
144 #endregion
145
146 #region IEnumerable Members
147
148 /// <summary>
149 /// Returns an enumerator that can iterate through a collection.
150 /// </summary>
151 /// <returns>
152 /// An <see cref="T:System.Collections.IDictionaryEnumerator"/>
153 /// that can be used to iterate through the collection.
154 /// </returns>
155 public IDictionaryEnumerator GetEnumerator()
156 {
157 return m_Arguments.GetEnumerator();
158 }
159
160 #endregion
161 }
162}
diff --git a/Prebuild/src/Core/Utilities/CurrentDirectory.cs b/Prebuild/src/Core/Utilities/CurrentDirectory.cs
new file mode 100644
index 0000000..a76d844
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/CurrentDirectory.cs
@@ -0,0 +1,89 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37
38namespace Prebuild.Core.Utilities
39{
40 /// <summary>
41 ///
42 /// </summary>
43 public class CurrentDirectory
44 {
45 #region Fields
46
47 private Stack m_Stack;
48
49 #endregion
50
51 #region Constructors
52
53 /// <summary>
54 /// Initializes a new instance of the <see cref="CurrentDirectory"/> class.
55 /// </summary>
56 public CurrentDirectory()
57 {
58 m_Stack = new Stack();
59 }
60
61 #endregion
62
63 #region Public Methods
64
65 /// <summary>
66 /// Pushes this instance.
67 /// </summary>
68 public void Push()
69 {
70 m_Stack.Push(Environment.CurrentDirectory);
71 }
72
73 /// <summary>
74 /// Pops this instance.
75 /// </summary>
76 public void Pop()
77 {
78 if(m_Stack.Count < 1)
79 {
80 return;
81 }
82
83 string cwd = (string)m_Stack.Pop();
84 Helper.SetCurrentDir(cwd);
85 }
86
87 #endregion
88 }
89}
diff --git a/Prebuild/src/Core/Utilities/Helper.cs b/Prebuild/src/Core/Utilities/Helper.cs
new file mode 100644
index 0000000..33c9618
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/Helper.cs
@@ -0,0 +1,661 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2007-02-13 21:58:03 +0100 (ti, 13 feb 2007) $
31 * $Revision: 205 $
32 */
33#endregion
34
35using System;
36using System.Collections;
37using System.Diagnostics;
38using System.IO;
39using System.Runtime.InteropServices;
40using System.Text.RegularExpressions;
41using System.Collections.Specialized;
42using System.Xml;
43using Prebuild.Core.Nodes;
44
45namespace Prebuild.Core.Utilities
46{
47 /// <summary>
48 ///
49 /// </summary>
50 public class Helper
51 {
52 #region Fields
53
54 private static Stack dirStack;
55 private static Regex varRegex;
56 static bool checkForOSVariables;
57
58 /// <summary>
59 ///
60 /// </summary>
61 public static bool CheckForOSVariables
62 {
63 get
64 {
65 return checkForOSVariables;
66 }
67 set
68 {
69 checkForOSVariables = value;
70 }
71 }
72
73 #endregion
74
75 #region Constructors
76
77 /// <summary>
78 /// Initializes the <see cref="Helper"/> class.
79 /// </summary>
80 static Helper()
81 {
82 dirStack = new Stack();
83 //m_VarRegex = new Regex(@"\${(?<var>[\w|_]+)}");
84 }
85
86 #endregion
87
88 #region Properties
89
90 /// <summary>
91 ///
92 /// </summary>
93 public static Stack DirStack
94 {
95 get
96 {
97 return dirStack;
98 }
99 }
100
101 /// <summary>
102 ///
103 /// </summary>
104 public static Regex VarRegex
105 {
106 get
107 {
108 return varRegex;
109 }
110 set
111 {
112 varRegex = value;
113 }
114 }
115
116 #endregion
117
118 #region Public Methods
119
120 #region String Parsing
121 #region Inner Classes and Delegates
122 /// <summary>
123 ///
124 /// </summary>
125 public delegate string StringLookup(string key);
126
127 #endregion
128
129 /// <summary>
130 /// Gets a collection of StringLocationPair objects that represent the matches
131 /// </summary>
132 /// <param name="target">The target.</param>
133 /// <param name="beforeGroup">The before group.</param>
134 /// <param name="afterGroup">The after group.</param>
135 /// <param name="includeDelimitersInSubstrings">if set to <c>true</c> [include delimiters in substrings].</param>
136 /// <returns></returns>
137 public static StringCollection FindGroups(string target, string beforeGroup, string afterGroup, bool includeDelimitersInSubstrings)
138 {
139 if( beforeGroup == null )
140 {
141 throw new ArgumentNullException("beforeGroup");
142 }
143 if( afterGroup == null )
144 {
145 throw new ArgumentNullException("afterGroup");
146 }
147 StringCollection results = new StringCollection();
148 if(target == null || target.Length == 0)
149 {
150 return results;
151 }
152
153 int beforeMod = 0;
154 int afterMod = 0;
155 if(includeDelimitersInSubstrings)
156 {
157 //be sure to not exlude the delims
158 beforeMod = beforeGroup.Length;
159 afterMod = afterGroup.Length;
160 }
161 int startIndex = 0;
162 while((startIndex = target.IndexOf(beforeGroup,startIndex)) != -1) {
163 int endIndex = target.IndexOf(afterGroup,startIndex);//the index of the char after it
164 if(endIndex == -1)
165 {
166 break;
167 }
168 int length = endIndex - startIndex - beforeGroup.Length;//move to the first char in the string
169 string substring = substring = target.Substring(startIndex + beforeGroup.Length - beforeMod,
170 length - afterMod);
171
172 results.Add(substring);
173 //results.Add(new StringLocationPair(substring,startIndex));
174 startIndex = endIndex + 1;
175 //the Interpolate*() methods will not work if expressions are expandded inside expression due to an optimization
176 //so start after endIndex
177
178 }
179 return results;
180 }
181
182 /// <summary>
183 /// Replaces the groups.
184 /// </summary>
185 /// <param name="target">The target.</param>
186 /// <param name="beforeGroup">The before group.</param>
187 /// <param name="afterGroup">The after group.</param>
188 /// <param name="lookup">The lookup.</param>
189 /// <returns></returns>
190 public static string ReplaceGroups(string target, string beforeGroup, string afterGroup, StringLookup lookup) {
191 if( target == null )
192 {
193 throw new ArgumentNullException("target");
194 }
195 //int targetLength = target.Length;
196 StringCollection strings = FindGroups(target,beforeGroup,afterGroup,false);
197 if( lookup == null )
198 {
199 throw new ArgumentNullException("lookup");
200 }
201 foreach(string substring in strings)
202 {
203 target = target.Replace(beforeGroup + substring + afterGroup, lookup(substring) );
204 }
205 return target;
206 }
207
208 /// <summary>
209 /// Replaces ${var} statements in a string with the corresonding values as detirmined by the lookup delegate
210 /// </summary>
211 /// <param name="target">The target.</param>
212 /// <param name="lookup">The lookup.</param>
213 /// <returns></returns>
214 public static string InterpolateForVariables(string target, StringLookup lookup)
215 {
216 return ReplaceGroups(target, "${" , "}" , lookup);
217 }
218
219 /// <summary>
220 /// Replaces ${var} statements in a string with the corresonding environment variable with name var
221 /// </summary>
222 /// <param name="target"></param>
223 /// <returns></returns>
224 public static string InterpolateForEnvironmentVariables(string target)
225 {
226 return InterpolateForVariables(target, new StringLookup(Environment.GetEnvironmentVariable));
227 }
228
229 #endregion
230
231 /// <summary>
232 /// Translates the value.
233 /// </summary>
234 /// <param name="translateType">Type of the translate.</param>
235 /// <param name="translationItem">The translation item.</param>
236 /// <returns></returns>
237 public static object TranslateValue(Type translateType, string translationItem)
238 {
239 if(translationItem == null)
240 {
241 return null;
242 }
243
244 try
245 {
246 string lowerVal = translationItem.ToLower();
247 if(translateType == typeof(bool))
248 {
249 return (lowerVal == "true" || lowerVal == "1" || lowerVal == "y" || lowerVal == "yes" || lowerVal == "on");
250 }
251 else if(translateType == typeof(int))
252 {
253 return (Int32.Parse(translationItem));
254 }
255 else
256 {
257 return translationItem;
258 }
259 }
260 catch(FormatException)
261 {
262 return null;
263 }
264 }
265
266 /// <summary>
267 /// Deletes if exists.
268 /// </summary>
269 /// <param name="file">The file.</param>
270 /// <returns></returns>
271 public static bool DeleteIfExists(string file)
272 {
273 string resFile = null;
274 try
275 {
276 resFile = ResolvePath(file);
277 }
278 catch(ArgumentException)
279 {
280 return false;
281 }
282
283 if(!File.Exists(resFile))
284 {
285 return false;
286 }
287
288 File.Delete(resFile);
289 return true;
290 }
291
292 // This little gem was taken from the NeL source, thanks guys!
293 /// <summary>
294 /// Makes a relative path
295 /// </summary>
296 /// <param name="startPath">Path to start from</param>
297 /// <param name="endPath">Path to end at</param>
298 /// <returns>Path that will get from startPath to endPath</returns>
299 public static string MakePathRelativeTo(string startPath, string endPath)
300 {
301 string tmp = NormalizePath(startPath, '/');
302 string src = NormalizePath(endPath, '/');
303 string prefix = "";
304
305 while(true)
306 {
307 if((String.Compare(tmp, 0, src, 0, tmp.Length) == 0))
308 {
309 string ret;
310 int size = tmp.Length;
311 if(size == src.Length)
312 {
313 return "./";
314 }
315 if ((src.Length > tmp.Length) && src[tmp.Length-1] != '/' && src[tmp.Length-1] != '\\')
316 {
317 }
318 else
319 {
320 ret = prefix + endPath.Substring(size, endPath.Length - size);
321 ret = ret.Trim();
322 if(ret[0] == '/' || ret[0] == '\\')
323 {
324 ret = "." + ret;
325 }
326
327 return NormalizePath(ret);
328 }
329
330 }
331
332 if(tmp.Length < 2)
333 {
334 break;
335 }
336
337 int lastPos = tmp.LastIndexOf('/', tmp.Length - 2);
338 int prevPos = tmp.IndexOf('/');
339
340 if((lastPos == prevPos) || (lastPos == -1))
341 {
342 break;
343 }
344
345 tmp = tmp.Substring(0, lastPos + 1);
346 prefix += "../";
347 }
348
349 return endPath;
350 }
351
352 /// <summary>
353 /// Resolves the path.
354 /// </summary>
355 /// <param name="path">The path.</param>
356 /// <returns></returns>
357 public static string ResolvePath(string path)
358 {
359 string tmpPath = NormalizePath(path);
360 if(tmpPath.Length < 1)
361 {
362 tmpPath = ".";
363 }
364
365 tmpPath = Path.GetFullPath(tmpPath);
366 if(!File.Exists(tmpPath) && !Directory.Exists(tmpPath))
367 {
368 throw new ArgumentException("Path could not be resolved: " + tmpPath);
369 }
370
371 return tmpPath;
372 }
373
374 /// <summary>
375 /// Normalizes the path.
376 /// </summary>
377 /// <param name="path">The path.</param>
378 /// <param name="separatorCharacter">The separator character.</param>
379 /// <returns></returns>
380 public static string NormalizePath(string path, char separatorCharacter)
381 {
382 if(path == null || path == "" || path.Length < 1)
383 {
384 return "";
385 }
386
387 string tmpPath = path.Replace('\\', '/');
388 tmpPath = tmpPath.Replace('/', separatorCharacter);
389 return tmpPath;
390 }
391
392 /// <summary>
393 /// Normalizes the path.
394 /// </summary>
395 /// <param name="path">The path.</param>
396 /// <returns></returns>
397 public static string NormalizePath(string path)
398 {
399 return NormalizePath(path, Path.DirectorySeparatorChar);
400 }
401
402 /// <summary>
403 /// Ends the path.
404 /// </summary>
405 /// <param name="path">The path.</param>
406 /// <param name="separatorCharacter">The separator character.</param>
407 /// <returns></returns>
408 public static string EndPath(string path, char separatorCharacter)
409 {
410 if(path == null || path == "" || path.Length < 1)
411 {
412 return "";
413 }
414
415 if(!path.EndsWith(separatorCharacter.ToString()))
416 {
417 return (path + separatorCharacter);
418 }
419
420 return path;
421 }
422
423 /// <summary>
424 /// Ends the path.
425 /// </summary>
426 /// <param name="path">The path.</param>
427 /// <returns></returns>
428 public static string EndPath(string path)
429 {
430 return EndPath(path, Path.DirectorySeparatorChar);
431 }
432
433 /// <summary>
434 /// Makes the file path.
435 /// </summary>
436 /// <param name="path">The path.</param>
437 /// <param name="name">The name.</param>
438 /// <param name="ext">The ext.</param>
439 /// <returns></returns>
440 public static string MakeFilePath(string path, string name, string ext)
441 {
442 string ret = EndPath(NormalizePath(path));
443
444 if( name == null )
445 {
446 throw new ArgumentNullException("name");
447 }
448
449 ret += name;
450 if(!name.EndsWith("." + ext))
451 {
452 ret += "." + ext;
453 }
454
455 //foreach(char c in Path.GetInvalidPathChars())
456 //{
457 // ret = ret.Replace(c, '_');
458 //}
459
460 return ret;
461 }
462
463 /// <summary>
464 /// Makes the file path.
465 /// </summary>
466 /// <param name="path">The path.</param>
467 /// <param name="name">The name.</param>
468 /// <returns></returns>
469 public static string MakeFilePath(string path, string name)
470 {
471 string ret = EndPath(NormalizePath(path));
472
473 if( name == null )
474 {
475 throw new ArgumentNullException("name");
476 }
477
478 ret += name;
479
480 //foreach (char c in Path.GetInvalidPathChars())
481 //{
482 // ret = ret.Replace(c, '_');
483 //}
484
485 return ret;
486 }
487
488 /// <summary>
489 ///
490 /// </summary>
491 /// <param name="path"></param>
492 /// <returns></returns>
493 public static string MakeReferencePath(string path)
494 {
495 string ret = EndPath(NormalizePath(path));
496
497 //foreach (char c in Path.GetInvalidPathChars())
498 //{
499 // ret = ret.Replace(c, '_');
500 //}
501
502 return ret;
503 }
504
505 /// <summary>
506 /// Sets the current dir.
507 /// </summary>
508 /// <param name="path">The path.</param>
509 public static void SetCurrentDir(string path)
510 {
511 if( path == null )
512 {
513 throw new ArgumentNullException("path");
514 }
515 if(path.Length < 1)
516 {
517 return;
518 }
519
520 Environment.CurrentDirectory = path;
521 }
522
523 /// <summary>
524 /// Checks the type.
525 /// </summary>
526 /// <param name="typeToCheck">The type to check.</param>
527 /// <param name="attr">The attr.</param>
528 /// <param name="inter">The inter.</param>
529 /// <returns></returns>
530 public static object CheckType(Type typeToCheck, Type attr, Type inter)
531 {
532 if(typeToCheck == null || attr == null)
533 {
534 return null;
535 }
536
537 object[] attrs = typeToCheck.GetCustomAttributes(attr, false);
538 if(attrs == null || attrs.Length < 1)
539 {
540 return null;
541 }
542 if( inter == null )
543 {
544 throw new ArgumentNullException("inter");
545 }
546
547 if(typeToCheck.GetInterface(inter.FullName) == null)
548 {
549 return null;
550 }
551
552 return attrs[0];
553 }
554
555 /* A bit of overhead for simple group parsing, there are problems with Regex in Mono
556 public static string ParseValue(string val)
557 {
558 if(val == null || val.Length < 1 || !CheckForOSVariables)
559 return val;
560
561 string tmp = val;
562 Match m = m_VarRegex.Match(val);
563 while(m.Success)
564 {
565 if(m.Groups["var"] == null)
566 continue;
567
568 Capture c = m.Groups["var"].Captures[0];
569 if(c == null)
570 continue;
571
572 string var = c.Value;
573 string envVal = Environment.GetEnvironmentVariable(var);
574 if(envVal == null)
575 envVal = "";
576
577 tmp = tmp.Replace("${" + var + "}", envVal);
578 m = m.NextMatch();
579 }
580
581 return tmp;
582 }*/
583
584 /// <summary>
585 /// Attributes the value.
586 /// </summary>
587 /// <param name="node">The node.</param>
588 /// <param name="attr">The attr.</param>
589 /// <param name="def">The def.</param>
590 /// <returns></returns>
591 public static string AttributeValue(XmlNode node, string attr, string def)
592 {
593 if( node == null )
594 {
595 throw new ArgumentNullException("node");
596 }
597 if(node.Attributes[attr] == null)
598 {
599 return def;
600 }
601 string val = node.Attributes[attr].Value;
602 if(!CheckForOSVariables)
603 {
604 return val;
605 }
606
607 return InterpolateForEnvironmentVariables(val);
608 }
609
610 /// <summary>
611 /// Parses the boolean.
612 /// </summary>
613 /// <param name="node">The node.</param>
614 /// <param name="attr">The attr.</param>
615 /// <param name="defaultValue">if set to <c>true</c> [default value].</param>
616 /// <returns></returns>
617 public static bool ParseBoolean(XmlNode node, string attr, bool defaultValue)
618 {
619 if( node == null )
620 {
621 throw new ArgumentNullException("node");
622 }
623 if(node.Attributes[attr] == null)
624 {
625 return defaultValue;
626 }
627 return bool.Parse(node.Attributes[attr].Value);
628 }
629
630 /// <summary>
631 /// Enums the attribute value.
632 /// </summary>
633 /// <param name="node">The node.</param>
634 /// <param name="attr">The attr.</param>
635 /// <param name="enumType">Type of the enum.</param>
636 /// <param name="def">The def.</param>
637 /// <returns></returns>
638 public static object EnumAttributeValue(XmlNode node, string attr, Type enumType, object def)
639 {
640 if( def == null )
641 {
642 throw new ArgumentNullException("def");
643 }
644 string val = AttributeValue(node, attr, def.ToString());
645 return Enum.Parse(enumType, val, true);
646 }
647
648 /// <summary>
649 ///
650 /// </summary>
651 /// <param name="assemblyName"></param>
652 /// <param name="projectType"></param>
653 /// <returns></returns>
654 public static string AssemblyFullName(string assemblyName, ProjectType projectType)
655 {
656 return assemblyName + (projectType == ProjectType.Library ? ".dll" : ".exe");
657 }
658
659 #endregion
660 }
661}
diff --git a/Prebuild/src/Core/Utilities/Log.cs b/Prebuild/src/Core/Utilities/Log.cs
new file mode 100644
index 0000000..da2cc96
--- /dev/null
+++ b/Prebuild/src/Core/Utilities/Log.cs
@@ -0,0 +1,279 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.IO;
37
38namespace Prebuild.Core.Utilities
39{
40 /// <summary>
41 ///
42 /// </summary>
43 public enum LogType
44 {
45 /// <summary>
46 ///
47 /// </summary>
48 None,
49 /// <summary>
50 ///
51 /// </summary>
52 Info,
53 /// <summary>
54 ///
55 /// </summary>
56 Warning,
57 /// <summary>
58 ///
59 /// </summary>
60 Error
61 }
62
63 /// <summary>
64 ///
65 /// </summary>
66 [Flags]
67 public enum LogTargets
68 {
69 /// <summary>
70 ///
71 /// </summary>
72 None = 0,
73 /// <summary>
74 ///
75 /// </summary>
76 Null = 1,
77 /// <summary>
78 ///
79 /// </summary>
80 File = 2,
81 /// <summary>
82 ///
83 /// </summary>
84 Console = 4
85 }
86
87 /// <summary>
88 /// Summary description for Log.
89 /// </summary>
90 public class Log : IDisposable
91 {
92 #region Fields
93
94 private StreamWriter m_Writer;
95 private LogTargets m_Target = LogTargets.Null;
96 bool disposed;
97
98 #endregion
99
100 #region Constructors
101
102 /// <summary>
103 /// Initializes a new instance of the <see cref="Log"/> class.
104 /// </summary>
105 /// <param name="target">The target.</param>
106 /// <param name="fileName">Name of the file.</param>
107 public Log(LogTargets target, string fileName)
108 {
109 m_Target = target;
110
111 if((m_Target & LogTargets.File) != 0)
112 {
113 m_Writer = new StreamWriter(fileName, false);
114 }
115 }
116
117 #endregion
118
119 #region Public Methods
120
121 /// <summary>
122 /// Writes this instance.
123 /// </summary>
124 public void Write()
125 {
126 Write(string.Empty);
127 }
128
129 /// <summary>
130 /// Writes the specified MSG.
131 /// </summary>
132 /// <param name="msg">The MSG.</param>
133 public void Write(string msg)
134 {
135 if((m_Target & LogTargets.Null) != 0)
136 {
137 return;
138 }
139
140 if((m_Target & LogTargets.Console) != 0)
141 {
142 Console.WriteLine(msg);
143 }
144 if((m_Target & LogTargets.File) != 0 && m_Writer != null)
145 {
146 m_Writer.WriteLine(msg);
147 }
148 }
149
150 /// <summary>
151 /// Writes the specified format.
152 /// </summary>
153 /// <param name="format">The format.</param>
154 /// <param name="args">The args.</param>
155 public void Write(string format, params object[] args)
156 {
157 Write(string.Format(format,args));
158 }
159
160 /// <summary>
161 /// Writes the specified type.
162 /// </summary>
163 /// <param name="type">The type.</param>
164 /// <param name="format">The format.</param>
165 /// <param name="args">The args.</param>
166 public void Write(LogType type, string format, params object[] args)
167 {
168 if((m_Target & LogTargets.Null) != 0)
169 {
170 return;
171 }
172
173 string str = "";
174 switch(type)
175 {
176 case LogType.Info:
177 str = "[I] ";
178 break;
179 case LogType.Warning:
180 str = "[!] ";
181 break;
182 case LogType.Error:
183 str = "[X] ";
184 break;
185 }
186
187 Write(str + format,args);
188 }
189
190 /// <summary>
191 /// Writes the exception.
192 /// </summary>
193 /// <param name="type">The type.</param>
194 /// <param name="ex">The ex.</param>
195 public void WriteException(LogType type, Exception ex)
196 {
197 if(ex != null)
198 {
199 Write(type, ex.Message);
200 //#if DEBUG
201 m_Writer.WriteLine("Exception @{0} stack trace [[", ex.TargetSite.Name);
202 m_Writer.WriteLine(ex.StackTrace);
203 m_Writer.WriteLine("]]");
204 //#endif
205 }
206 }
207
208 /// <summary>
209 /// Flushes this instance.
210 /// </summary>
211 public void Flush()
212 {
213 if(m_Writer != null)
214 {
215 m_Writer.Flush();
216 }
217 }
218
219 #endregion
220
221 #region IDisposable Members
222
223 /// <summary>
224 /// Performs application-defined tasks associated with freeing, releasing, or
225 /// resetting unmanaged resources.
226 /// </summary>
227 public void Dispose()
228 {
229 Dispose(true);
230 GC.SuppressFinalize(this);
231 }
232
233 /// <summary>
234 /// Dispose objects
235 /// </summary>
236 /// <param name="disposing">
237 /// If true, it will dispose close the handle
238 /// </param>
239 /// <remarks>
240 /// Will dispose managed and unmanaged resources.
241 /// </remarks>
242 protected virtual void Dispose(bool disposing)
243 {
244 if (!this.disposed)
245 {
246 if (disposing)
247 {
248 if (m_Writer != null)
249 {
250 m_Writer.Close();
251 m_Writer = null;
252 }
253 }
254 }
255 this.disposed = true;
256 }
257
258 /// <summary>
259 ///
260 /// </summary>
261 ~Log()
262 {
263 this.Dispose(false);
264 }
265
266 /// <summary>
267 /// Closes and destroys this object
268 /// </summary>
269 /// <remarks>
270 /// Same as Dispose(true)
271 /// </remarks>
272 public void Close()
273 {
274 Dispose();
275 }
276
277 #endregion
278 }
279}
diff --git a/Prebuild/src/Core/WarningException.cs b/Prebuild/src/Core/WarningException.cs
new file mode 100644
index 0000000..a200bdc
--- /dev/null
+++ b/Prebuild/src/Core/WarningException.cs
@@ -0,0 +1,93 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-01-28 01:49:58 +0100 (lö, 28 jan 2006) $
31 * $Revision: 71 $
32 */
33#endregion
34
35using System;
36using System.Runtime.Serialization;
37
38namespace Prebuild.Core
39{
40 /// <summary>
41 ///
42 /// </summary>
43 [Serializable()]
44 public class WarningException : Exception
45 {
46 #region Constructors
47
48 /// <summary>
49 ///
50 /// </summary>
51 public WarningException()
52 {
53 }
54
55 /// <summary>
56 ///
57 /// </summary>
58 /// <param name="format"></param>
59 /// <param name="args"></param>
60 public WarningException(string format, params object[] args)
61 : base(String.Format(format, args))
62 {
63 }
64
65 /// <summary>
66 /// Exception with specified string
67 /// </summary>
68 /// <param name="message">Exception message</param>
69 public WarningException(string message): base(message)
70 {
71 }
72
73 /// <summary>
74 ///
75 /// </summary>
76 /// <param name="message"></param>
77 /// <param name="exception"></param>
78 public WarningException(string message, Exception exception) : base(message, exception)
79 {
80 }
81
82 /// <summary>
83 ///
84 /// </summary>
85 /// <param name="info"></param>
86 /// <param name="context"></param>
87 protected WarningException(SerializationInfo info, StreamingContext context) : base( info, context )
88 {
89 }
90
91 #endregion
92 }
93}
diff --git a/Prebuild/src/Prebuild.cs b/Prebuild/src/Prebuild.cs
new file mode 100644
index 0000000..597db68
--- /dev/null
+++ b/Prebuild/src/Prebuild.cs
@@ -0,0 +1,165 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2006-09-26 23:43:35 +0200 (ti, 26 sep 2006) $
31 * $Revision: 168 $
32 */
33#endregion
34
35using System;
36using System.Collections.Specialized;
37using System.IO;
38using System.Reflection;
39using System.Runtime.InteropServices;
40using System.EnterpriseServices.Internal;
41
42using Prebuild.Core;
43using Prebuild.Core.Utilities;
44
45namespace Prebuild
46{
47 /// <summary>
48 ///
49 /// </summary>
50 class Prebuild
51 {
52 #region Main
53
54 [STAThread]
55 static void Main(string[] args)
56 {
57 Kernel kernel = null;
58 try
59 {
60 kernel = Kernel.Instance;
61 kernel.Initialize(LogTargets.File | LogTargets.Console, args);
62 bool exit = false;
63
64 if(kernel.CommandLine.WasPassed("usage"))
65 {
66 exit = true;
67 OutputUsage();
68 }
69 if(kernel.CommandLine.WasPassed("showtargets"))
70 {
71 exit = true;
72 OutputTargets(kernel);
73 }
74 if(kernel.CommandLine.WasPassed("install"))
75 {
76 exit = true;
77 InstallAssembly(kernel);
78 }
79 if(kernel.CommandLine.WasPassed("remove"))
80 {
81 exit = true;
82 RemoveAssembly(kernel);
83 }
84
85 if(!exit)
86 {
87 kernel.Process();
88 }
89 }
90 catch(Exception ex)
91 {
92 Console.WriteLine("Unhandled error: {0}", ex.Message);
93 //#if DEBUG
94 Console.WriteLine("{0}", ex.StackTrace);
95 //#endif
96 }
97 finally
98 {
99 if(kernel.PauseAfterFinish)
100 {
101 Console.WriteLine("\nPress enter to continue...");
102 Console.ReadLine();
103 }
104 }
105 }
106
107 #endregion
108
109 #region Private Methods
110
111 private static void InstallAssembly(Kernel kernel)
112 {
113 Publish publish = new Publish();
114 string file = kernel.CommandLine["install"];
115 //Console.WriteLine(".."+file+"..");
116 publish.GacInstall(file);
117 }
118
119 private static void RemoveAssembly(Kernel kernel)
120 {
121 Publish publish = new Publish();
122 string file = kernel.CommandLine["remove"];
123 publish.GacRemove(file);
124 }
125
126 private static void OutputUsage()
127 {
128 Console.WriteLine("Usage: prebuild /target <target> [options]");
129 Console.WriteLine("Available command-line switches:");
130 Console.WriteLine();
131 Console.WriteLine("/target Target for Prebuild");
132 Console.WriteLine("/clean Clean the build files for the given target");
133 Console.WriteLine("/file XML file to process");
134 Console.WriteLine("/log Log file to write to");
135 Console.WriteLine("/ppo Pre-process the file, but perform no other processing");
136 Console.WriteLine("/pause Pauses the application after execution to view the output");
137 Console.WriteLine("/yes Default to yes to any questions asked");
138 Console.WriteLine("/install Install assembly into the GAC");
139 Console.WriteLine("/remove Remove assembly from the GAC");
140 Console.WriteLine();
141 Console.WriteLine("See 'prebuild /showtargets for a list of available targets");
142 Console.WriteLine("See readme.txt or check out http://dnpb.sourceforge.net for more information");
143 Console.WriteLine();
144 }
145
146 private static void OutputTargets(Kernel kern)
147 {
148 Console.WriteLine("Targets available in Prebuild:");
149 Console.WriteLine("");
150 if(kern.Targets.Keys.Count > 0)
151 {
152 string[] targs = new string[kern.Targets.Keys.Count];
153 kern.Targets.Keys.CopyTo(targs, 0);
154 Array.Sort(targs);
155 foreach(string target in targs)
156 {
157 Console.WriteLine(target);
158 }
159 }
160 Console.WriteLine("");
161 }
162
163 #endregion
164 }
165}
diff --git a/Prebuild/src/Prebuild.snk b/Prebuild/src/Prebuild.snk
new file mode 100644
index 0000000..f9dce05
--- /dev/null
+++ b/Prebuild/src/Prebuild.snk
Binary files differ
diff --git a/Prebuild/src/Properties/AssemblyInfo.cs b/Prebuild/src/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..bfa9829
--- /dev/null
+++ b/Prebuild/src/Properties/AssemblyInfo.cs
@@ -0,0 +1,101 @@
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
26#region CVS Information
27/*
28 * $Source$
29 * $Author: jendave $
30 * $Date: 2007-01-26 19:31:34 +0100 (fr, 26 jan 2007) $
31 * $Revision: 203 $
32 */
33#endregion
34
35using System;
36using System.Reflection;
37using System.Runtime.CompilerServices;
38using System.Runtime.InteropServices;
39using System.Security.Permissions;
40using System.Resources;
41
42
43// FxCop recommended attributes
44[assembly: ComVisible(false)]
45[assembly: FileIOPermission(SecurityAction.RequestMinimum, Unrestricted=true)]
46[assembly: CLSCompliant(true)]
47
48//
49// General Information about an assembly is controlled through the following
50// set of attributes. Change these attribute values to modify the information
51// associated with an assembly.
52//
53[assembly: AssemblyTitle(".NET Prebuild")]
54[assembly: AssemblyDescription("A .NET project file build tool")]
55[assembly: AssemblyConfiguration(".NET CLR")]
56[assembly: AssemblyCompany("The Prebuild Project")]
57[assembly: AssemblyProduct("")]
58[assembly: AssemblyCopyright("Copyright 2004-2006 Matthew Holmes, Dan Moorehead and David Hudson")]
59[assembly: AssemblyTrademark("")]
60[assembly: AssemblyCulture("")]
61[assembly: NeutralResourcesLanguageAttribute("en-US")]
62[assembly: AssemblyVersion("2.0.0.*")]
63
64//
65// Version information for an assembly consists of the following four values:
66//
67// Major Version
68// Minor Version
69// Build Number
70// Revision
71//
72// You can specify all the values or you can default the Revision and Build Numbers
73// by using the '*' as shown below:
74
75//
76// In order to sign your assembly you must specify a key to use. Refer to the
77// Microsoft .NET Framework documentation for more information on assembly signing.
78//
79// Use the attributes below to control which key is used for signing.
80//
81// Notes:
82// (*) If no key is specified, the assembly is not signed.
83// (*) KeyName refers to a key that has been installed in the Crypto Service
84// Provider (CSP) on your machine. KeyFile refers to a file which contains
85// a key.
86// (*) If the KeyFile and the KeyName values are both specified, the
87// following processing occurs:
88// (1) If the KeyName can be found in the CSP, that key is used.
89// (2) If the KeyName does not exist and the KeyFile does exist, the key
90// in the KeyFile is installed into the CSP and used.
91// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
92// When specifying the KeyFile, the location of the KeyFile should be
93// relative to the project output directory which is
94// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
95// located in the project directory, you would specify the AssemblyKeyFile
96// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
97// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
98// documentation for more information on this.
99//
100[assembly: AssemblyDelaySign(false)]
101[assembly: AssemblyKeyName("")]
diff --git a/Prebuild/src/data/dnpb-1.0.xsd b/Prebuild/src/data/dnpb-1.0.xsd
new file mode 100644
index 0000000..45cab86
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.0.xsd
@@ -0,0 +1,183 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.0.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.0.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004 Matthew Holmes (kerion@houston.rr.com)
10
11 Redistribution and use in source and binary forms, with or without modification, are permitted
12 provided that the following conditions are met:
13
14 * Redistributions of source code must retain the above copyright notice, this list of conditions
15 and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
17 and the following disclaimer in the documentation and/or other materials provided with the
18 distribution.
19 * The name of the author may not be used to endorse or promote products derived from this software
20 without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
23 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 </xs:documentation>
30 </xs:annotation>
31
32 <xs:element name="DNPreBuild">
33 <xs:complexType>
34 <xs:sequence>
35 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
36 <xs:element ref="Solution" minOccurs="1" maxOccurs="unbounded" />
37 </xs:sequence>
38
39 <xs:attribute name="version" use="required" />
40 </xs:complexType>
41 </xs:element>
42
43 <xs:element name="Process" type="xs:string" />
44
45 <xs:element name="Solution">
46 <xs:complexType>
47 <xs:sequence>
48 <xs:element ref="Options" minOccurs="0" />
49 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
50 <xs:element ref="Files" minOccurs="0" />
51 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
52 </xs:sequence>
53
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="path" type="xs:string" default="" />
56 </xs:complexType>
57 </xs:element>
58
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element name="Reference" maxOccurs="unbounded">
63 <xs:complexType>
64 <xs:attribute name="name" type="xs:string" use="required" />
65 <xs:attribute name="path" type="xs:string" />
66 <xs:attribute name="localCopy" type="xs:boolean" />
67 <xs:attribute name="version" type="xs:string" />
68 </xs:complexType>
69 </xs:element>
70
71 <xs:element ref="Files" />
72 </xs:sequence>
73
74 <xs:attribute name="name" type="xs:string" use="required" />
75 <xs:attribute name="path" type="xs:string" default="" />
76
77 <xs:attribute name="language" default="C#">
78 <xs:simpleType>
79 <xs:restriction base="xs:string">
80 <xs:enumeration value="C#" />
81 <xs:enumeration value="VB.NET" />
82 </xs:restriction>
83 </xs:simpleType>
84 </xs:attribute>
85
86 <xs:attribute name="type" default="Exe">
87 <xs:simpleType>
88 <xs:restriction base="xs:string">
89 <xs:enumeration value="Exe" />
90 <xs:enumeration value="WinExe" />
91 <xs:enumeration value="Library" />
92 </xs:restriction>
93 </xs:simpleType>
94 </xs:attribute>
95
96 <xs:attribute name="runtime" default="Microsoft">
97 <xs:simpleType>
98 <xs:restriction base="xs:string">
99 <xs:enumeration value="Microsoft" />
100 <xs:enumeration value="Mono" />
101 </xs:restriction>
102 </xs:simpleType>
103 </xs:attribute>
104
105 <xs:attribute name="startupObject" type="xs:string" default="" />
106 </xs:complexType>
107 </xs:element>
108
109 <xs:element name="Configuration">
110 <xs:complexType>
111 <xs:all>
112 <xs:element ref="Options" minOccurs="0" />
113 </xs:all>
114
115 <xs:attribute name="name" type="xs:string" use="required" />
116 </xs:complexType>
117 </xs:element>
118
119 <xs:element name="Options">
120 <xs:complexType>
121 <xs:sequence>
122 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
123 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
124 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
125 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
126 <xs:element name="WarningLevel" minOccurs="0">
127 <xs:simpleType>
128 <xs:restriction base="xs:integer">
129 <xs:minInclusive value="0" />
130 <xs:maxInclusive value="4"/>
131 </xs:restriction>
132 </xs:simpleType>
133 </xs:element>
134 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
135 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
136 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
137 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
138 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
139 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
140 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
141 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
142 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
143 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
144 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
145 </xs:sequence>
146 </xs:complexType>
147 </xs:element>
148
149 <xs:element name="Files">
150 <xs:complexType>
151 <xs:sequence>
152 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
153 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
154 </xs:sequence>
155 </xs:complexType>
156 </xs:element>
157
158 <xs:element name="File">
159 <xs:complexType>
160 <xs:simpleContent>
161 <xs:extension base="xs:string">
162 <xs:attribute name="buildAction" default="Compile">
163 <xs:simpleType>
164 <xs:restriction base="xs:string">
165 <xs:enumeration value="Compile" />
166 <xs:enumeration value="Content" />
167 <xs:enumeration value="EmbeddedResource" />
168 </xs:restriction>
169 </xs:simpleType>
170 </xs:attribute>
171 </xs:extension>
172 </xs:simpleContent>
173 </xs:complexType>
174 </xs:element>
175
176 <xs:element name="Match">
177 <xs:complexType>
178 <xs:attribute name="path" type="xs:string" use="required" />
179 <xs:attribute name="pattern" type="xs:string" use="required" />
180 <xs:attribute name="recurse" type="xs:boolean" default="false" />
181 </xs:complexType>
182 </xs:element>
183</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.1.xsd b/Prebuild/src/data/dnpb-1.1.xsd
new file mode 100644
index 0000000..c402ceb
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.1.xsd
@@ -0,0 +1,184 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.1.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.1.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004 Matthew Holmes (kerion@houston.rr.com)
10
11 Redistribution and use in source and binary forms, with or without modification, are permitted
12 provided that the following conditions are met:
13
14 * Redistributions of source code must retain the above copyright notice, this list of conditions
15 and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
17 and the following disclaimer in the documentation and/or other materials provided with the
18 distribution.
19 * The name of the author may not be used to endorse or promote products derived from this software
20 without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
23 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 </xs:documentation>
30 </xs:annotation>
31
32 <xs:element name="DNPreBuild">
33 <xs:complexType>
34 <xs:sequence>
35 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
36 <xs:element ref="Solution" minOccurs="1" maxOccurs="unbounded" />
37 </xs:sequence>
38
39 <xs:attribute name="version" use="required" />
40 </xs:complexType>
41 </xs:element>
42
43 <xs:element name="Process" type="xs:string" />
44
45 <xs:element name="Solution">
46 <xs:complexType>
47 <xs:sequence>
48 <xs:element ref="Options" minOccurs="0" />
49 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
50 <xs:element ref="Files" minOccurs="0" />
51 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
52 </xs:sequence>
53
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="path" type="xs:string" default="" />
56 </xs:complexType>
57 </xs:element>
58
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
63
64 <xs:element name="Reference" maxOccurs="unbounded">
65 <xs:complexType>
66 <xs:attribute name="name" type="xs:string" use="required" />
67 <xs:attribute name="path" type="xs:string" />
68 <xs:attribute name="localCopy" type="xs:boolean" />
69 <xs:attribute name="version" type="xs:string" />
70 </xs:complexType>
71 </xs:element>
72
73 <xs:element ref="Files" />
74 </xs:sequence>
75
76 <xs:attribute name="name" type="xs:string" use="required" />
77 <xs:attribute name="path" type="xs:string" default="" />
78
79 <xs:attribute name="language" default="C#">
80 <xs:simpleType>
81 <xs:restriction base="xs:string">
82 <xs:enumeration value="C#" />
83 <xs:enumeration value="VB.NET" />
84 </xs:restriction>
85 </xs:simpleType>
86 </xs:attribute>
87
88 <xs:attribute name="type" default="Exe">
89 <xs:simpleType>
90 <xs:restriction base="xs:string">
91 <xs:enumeration value="Exe" />
92 <xs:enumeration value="WinExe" />
93 <xs:enumeration value="Library" />
94 </xs:restriction>
95 </xs:simpleType>
96 </xs:attribute>
97
98 <xs:attribute name="runtime" default="Microsoft">
99 <xs:simpleType>
100 <xs:restriction base="xs:string">
101 <xs:enumeration value="Microsoft" />
102 <xs:enumeration value="Mono" />
103 </xs:restriction>
104 </xs:simpleType>
105 </xs:attribute>
106
107 <xs:attribute name="startupObject" type="xs:string" default="" />
108 </xs:complexType>
109 </xs:element>
110
111 <xs:element name="Configuration">
112 <xs:complexType>
113 <xs:all>
114 <xs:element ref="Options" minOccurs="0" />
115 </xs:all>
116
117 <xs:attribute name="name" type="xs:string" use="required" />
118 </xs:complexType>
119 </xs:element>
120
121 <xs:element name="Options">
122 <xs:complexType>
123 <xs:sequence>
124 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
125 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
126 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
127 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
128 <xs:element name="WarningLevel" minOccurs="0">
129 <xs:simpleType>
130 <xs:restriction base="xs:integer">
131 <xs:minInclusive value="0" />
132 <xs:maxInclusive value="4"/>
133 </xs:restriction>
134 </xs:simpleType>
135 </xs:element>
136 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
137 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
138 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
139 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
140 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
141 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
142 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
143 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
144 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
145 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
146 </xs:sequence>
147 </xs:complexType>
148 </xs:element>
149
150 <xs:element name="Files">
151 <xs:complexType>
152 <xs:sequence>
153 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
154 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
155 </xs:sequence>
156 </xs:complexType>
157 </xs:element>
158
159 <xs:element name="File">
160 <xs:complexType>
161 <xs:simpleContent>
162 <xs:extension base="xs:string">
163 <xs:attribute name="buildAction" default="Compile">
164 <xs:simpleType>
165 <xs:restriction base="xs:string">
166 <xs:enumeration value="Compile" />
167 <xs:enumeration value="Content" />
168 <xs:enumeration value="EmbeddedResource" />
169 </xs:restriction>
170 </xs:simpleType>
171 </xs:attribute>
172 </xs:extension>
173 </xs:simpleContent>
174 </xs:complexType>
175 </xs:element>
176
177 <xs:element name="Match">
178 <xs:complexType>
179 <xs:attribute name="path" type="xs:string" use="required" />
180 <xs:attribute name="pattern" type="xs:string" use="required" />
181 <xs:attribute name="recurse" type="xs:boolean" default="false" />
182 </xs:complexType>
183 </xs:element>
184</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.2.xsd b/Prebuild/src/data/dnpb-1.2.xsd
new file mode 100644
index 0000000..8004af7
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.2.xsd
@@ -0,0 +1,198 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.2.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.2.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004 Matthew Holmes (calefaction _at_ houston _._ rr _._ com)
10
11 Redistribution and use in source and binary forms, with or without modification, are permitted
12 provided that the following conditions are met:
13
14 * Redistributions of source code must retain the above copyright notice, this list of conditions
15 and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
17 and the following disclaimer in the documentation and/or other materials provided with the
18 distribution.
19 * The name of the author may not be used to endorse or promote products derived from this software
20 without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
23 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 </xs:documentation>
30 </xs:annotation>
31
32 <xs:element name="DNPreBuild">
33 <xs:complexType>
34 <xs:sequence>
35 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
36 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
37 </xs:sequence>
38
39 <xs:attribute name="version" use="required" />
40 </xs:complexType>
41 </xs:element>
42
43 <xs:element name="Process" type="xs:string" />
44
45 <xs:element name="Solution">
46 <xs:complexType>
47 <xs:sequence>
48 <xs:element ref="Options" minOccurs="0" />
49 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
50 <xs:element ref="Files" minOccurs="0" />
51 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
52 </xs:sequence>
53
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="path" type="xs:string" default="" />
56 </xs:complexType>
57 </xs:element>
58
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
63
64 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
65
66 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
67 <xs:complexType>
68 <xs:attribute name="name" type="xs:string" use="required" />
69 <xs:attribute name="path" type="xs:string" />
70 <xs:attribute name="localCopy" type="xs:boolean" />
71 <xs:attribute name="version" type="xs:string" />
72 </xs:complexType>
73 </xs:element>
74
75 <xs:element ref="Files" />
76 </xs:sequence>
77
78 <xs:attribute name="name" type="xs:string" use="required" />
79 <xs:attribute name="path" type="xs:string" default="" />
80
81 <xs:attribute name="language" default="C#">
82 <xs:simpleType>
83 <xs:restriction base="xs:string">
84 <xs:enumeration value="C#" />
85 <xs:enumeration value="VB.NET" />
86 </xs:restriction>
87 </xs:simpleType>
88 </xs:attribute>
89
90 <xs:attribute name="type" default="Exe">
91 <xs:simpleType>
92 <xs:restriction base="xs:string">
93 <xs:enumeration value="Exe" />
94 <xs:enumeration value="WinExe" />
95 <xs:enumeration value="Library" />
96 </xs:restriction>
97 </xs:simpleType>
98 </xs:attribute>
99
100 <xs:attribute name="runtime" default="Microsoft">
101 <xs:simpleType>
102 <xs:restriction base="xs:string">
103 <xs:enumeration value="Microsoft" />
104 <xs:enumeration value="Mono" />
105 </xs:restriction>
106 </xs:simpleType>
107 </xs:attribute>
108
109 <xs:attribute name="startupObject" type="xs:string" default="" />
110 <xs:attribute name="rootNamespace" type="xs:string" />
111 <xs:attribute name="assemblyName" type="xs:string" />
112 </xs:complexType>
113 </xs:element>
114
115 <xs:element name="Configuration">
116 <xs:complexType>
117 <xs:all>
118 <xs:element ref="Options" minOccurs="0" />
119 </xs:all>
120
121 <xs:attribute name="name" type="xs:string" use="required" />
122 </xs:complexType>
123 </xs:element>
124
125 <xs:element name="Options">
126 <xs:complexType>
127 <xs:all>
128 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
129 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
130 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
131 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
132 <xs:element name="WarningLevel" minOccurs="0">
133 <xs:simpleType>
134 <xs:restriction base="xs:integer">
135 <xs:minInclusive value="0" />
136 <xs:maxInclusive value="4"/>
137 </xs:restriction>
138 </xs:simpleType>
139 </xs:element>
140 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
141 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
142 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
143 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
144 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
145 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
146 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
147 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
148 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
149 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
150 </xs:all>
151 </xs:complexType>
152 </xs:element>
153
154 <xs:element name="Files">
155 <xs:complexType>
156 <xs:sequence>
157 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
158 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
159 </xs:sequence>
160 </xs:complexType>
161 </xs:element>
162
163 <xs:element name="File">
164 <xs:complexType>
165 <xs:simpleContent>
166 <xs:extension base="xs:string">
167 <xs:attribute name="buildAction" default="Compile">
168 <xs:simpleType>
169 <xs:restriction base="xs:string">
170 <xs:enumeration value="Compile" />
171 <xs:enumeration value="Content" />
172 <xs:enumeration value="EmbeddedResource" />
173 </xs:restriction>
174 </xs:simpleType>
175 </xs:attribute>
176 </xs:extension>
177 </xs:simpleContent>
178 </xs:complexType>
179 </xs:element>
180
181 <xs:element name="Match">
182 <xs:complexType>
183 <xs:attribute name="path" type="xs:string" use="required" />
184 <xs:attribute name="pattern" type="xs:string" use="required" />
185 <xs:attribute name="recurse" type="xs:boolean" default="false" />
186 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
187 <xs:attribute name="buildAction" default="Compile">
188 <xs:simpleType>
189 <xs:restriction base="xs:string">
190 <xs:enumeration value="Compile" />
191 <xs:enumeration value="Content" />
192 <xs:enumeration value="EmbeddedResource" />
193 </xs:restriction>
194 </xs:simpleType>
195 </xs:attribute>
196 </xs:complexType>
197 </xs:element>
198</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.3.xsd b/Prebuild/src/data/dnpb-1.3.xsd
new file mode 100644
index 0000000..5f8ada1
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.3.xsd
@@ -0,0 +1,206 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.3.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.3.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com)
10
11 .NET Pre-Build is an XML-driven pre-build tool allowing developers to
12 easily generate project or make files for major IDE's and .NET
13 development tools including: Visual Studio 2003, Visual Studio 2002,
14 SharpDevelop, MonoDevelop, and NAnt.
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="DNPreBuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
44 </xs:sequence>
45
46 <xs:attribute name="version" use="required" />
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="Options" minOccurs="0" />
56 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
57 <xs:element ref="Files" minOccurs="0" />
58 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
59 </xs:sequence>
60
61 <xs:attribute name="name" type="xs:string" use="required" />
62 <xs:attribute name="path" type="xs:string" default="" />
63 </xs:complexType>
64 </xs:element>
65
66 <xs:element name="Project">
67 <xs:complexType>
68 <xs:sequence>
69 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
70
71 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
72
73 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
74 <xs:complexType>
75 <xs:attribute name="name" type="xs:string" use="required" />
76 <xs:attribute name="path" type="xs:string" />
77 <xs:attribute name="localCopy" type="xs:boolean" />
78 <xs:attribute name="version" type="xs:string" />
79 </xs:complexType>
80 </xs:element>
81
82 <xs:element ref="Files" />
83 </xs:sequence>
84
85 <xs:attribute name="name" type="xs:string" use="required" />
86 <xs:attribute name="path" type="xs:string" default="" />
87 <xs:attribute name="icon" type="xs:string" default="" />
88
89 <xs:attribute name="language" default="C#">
90 <xs:simpleType>
91 <xs:restriction base="xs:string">
92 <xs:enumeration value="C#" />
93 <xs:enumeration value="VB.NET" />
94 </xs:restriction>
95 </xs:simpleType>
96 </xs:attribute>
97
98 <xs:attribute name="type" default="Exe">
99 <xs:simpleType>
100 <xs:restriction base="xs:string">
101 <xs:enumeration value="Exe" />
102 <xs:enumeration value="WinExe" />
103 <xs:enumeration value="Library" />
104 </xs:restriction>
105 </xs:simpleType>
106 </xs:attribute>
107
108 <xs:attribute name="runtime" default="Microsoft">
109 <xs:simpleType>
110 <xs:restriction base="xs:string">
111 <xs:enumeration value="Microsoft" />
112 <xs:enumeration value="Mono" />
113 </xs:restriction>
114 </xs:simpleType>
115 </xs:attribute>
116
117 <xs:attribute name="startupObject" type="xs:string" default="" />
118 <xs:attribute name="rootNamespace" type="xs:string" />
119 <xs:attribute name="assemblyName" type="xs:string" />
120 </xs:complexType>
121 </xs:element>
122
123 <xs:element name="Configuration">
124 <xs:complexType>
125 <xs:all>
126 <xs:element ref="Options" minOccurs="0" />
127 </xs:all>
128
129 <xs:attribute name="name" type="xs:string" use="required" />
130 </xs:complexType>
131 </xs:element>
132
133 <xs:element name="Options">
134 <xs:complexType>
135 <xs:all>
136 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
137 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
138 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
139 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
140 <xs:element name="WarningLevel" minOccurs="0">
141 <xs:simpleType>
142 <xs:restriction base="xs:integer">
143 <xs:minInclusive value="0" />
144 <xs:maxInclusive value="4"/>
145 </xs:restriction>
146 </xs:simpleType>
147 </xs:element>
148 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
149 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
150 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
151 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
152 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
153 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
154 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
155 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
156 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
157 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
158 </xs:all>
159 </xs:complexType>
160 </xs:element>
161
162 <xs:element name="Files">
163 <xs:complexType>
164 <xs:sequence>
165 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
166 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
167 </xs:sequence>
168 </xs:complexType>
169 </xs:element>
170
171 <xs:element name="File">
172 <xs:complexType>
173 <xs:simpleContent>
174 <xs:extension base="xs:string">
175 <xs:attribute name="buildAction" default="Compile">
176 <xs:simpleType>
177 <xs:restriction base="xs:string">
178 <xs:enumeration value="Compile" />
179 <xs:enumeration value="Content" />
180 <xs:enumeration value="EmbeddedResource" />
181 </xs:restriction>
182 </xs:simpleType>
183 </xs:attribute>
184 </xs:extension>
185 </xs:simpleContent>
186 </xs:complexType>
187 </xs:element>
188
189 <xs:element name="Match">
190 <xs:complexType>
191 <xs:attribute name="path" type="xs:string" />
192 <xs:attribute name="pattern" type="xs:string" use="required" />
193 <xs:attribute name="recurse" type="xs:boolean" default="false" />
194 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
195 <xs:attribute name="buildAction" default="Compile">
196 <xs:simpleType>
197 <xs:restriction base="xs:string">
198 <xs:enumeration value="Compile" />
199 <xs:enumeration value="Content" />
200 <xs:enumeration value="EmbeddedResource" />
201 </xs:restriction>
202 </xs:simpleType>
203 </xs:attribute>
204 </xs:complexType>
205 </xs:element>
206</xs:schema> \ No newline at end of file
diff --git a/Prebuild/src/data/dnpb-1.4.xsd b/Prebuild/src/data/dnpb-1.4.xsd
new file mode 100644
index 0000000..54f9ac0
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.4.xsd
@@ -0,0 +1,212 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.4.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.4.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . 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 and
14 2003, SharpDevelop, MonoDevelop, and NAnt.
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="DNPreBuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
44 </xs:sequence>
45
46 <xs:attribute name="version" />
47 <xs:attribute name="checkOsVars" />
48 </xs:complexType>
49 </xs:element>
50
51 <xs:element name="Process" type="xs:string" />
52
53 <xs:element name="Solution">
54 <xs:complexType>
55 <xs:sequence>
56 <xs:element ref="Options" minOccurs="0" />
57 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
60 </xs:sequence>
61
62 <xs:attribute name="name" type="xs:string" use="required" />
63 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
64 <xs:attribute name="path" type="xs:string" default="" />
65 </xs:complexType>
66 </xs:element>
67
68 <xs:element name="Project">
69 <xs:complexType>
70 <xs:sequence>
71 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
72
73 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
74
75 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
76 <xs:complexType>
77 <xs:attribute name="name" type="xs:string" use="required" />
78 <xs:attribute name="path" type="xs:string" />
79 <xs:attribute name="localCopy" type="xs:boolean" />
80 <xs:attribute name="version" type="xs:string" />
81 </xs:complexType>
82 </xs:element>
83
84 <xs:element ref="Files" />
85 </xs:sequence>
86
87 <xs:attribute name="name" type="xs:string" use="required" />
88 <xs:attribute name="path" type="xs:string" default="" />
89 <xs:attribute name="icon" type="xs:string" default="" />
90
91 <xs:attribute name="language" default="C#">
92 <xs:simpleType>
93 <xs:restriction base="xs:string">
94 <xs:enumeration value="C#" />
95 <xs:enumeration value="VB.NET" />
96 </xs:restriction>
97 </xs:simpleType>
98 </xs:attribute>
99
100 <xs:attribute name="type" default="Exe">
101 <xs:simpleType>
102 <xs:restriction base="xs:string">
103 <xs:enumeration value="Exe" />
104 <xs:enumeration value="WinExe" />
105 <xs:enumeration value="Library" />
106 </xs:restriction>
107 </xs:simpleType>
108 </xs:attribute>
109
110 <xs:attribute name="runtime" default="Microsoft">
111 <xs:simpleType>
112 <xs:restriction base="xs:string">
113 <xs:enumeration value="Microsoft" />
114 <xs:enumeration value="Mono" />
115 </xs:restriction>
116 </xs:simpleType>
117 </xs:attribute>
118
119 <xs:attribute name="startupObject" type="xs:string" default="" />
120 <xs:attribute name="rootNamespace" type="xs:string" />
121 <xs:attribute name="assemblyName" type="xs:string" />
122 </xs:complexType>
123 </xs:element>
124
125 <xs:element name="Configuration">
126 <xs:complexType>
127 <xs:sequence>
128 <xs:element ref="Options" minOccurs="0" />
129 </xs:sequence>
130
131 <xs:attribute name="name" type="xs:string" use="required" />
132 </xs:complexType>
133 </xs:element>
134
135 <xs:element name="Options">
136 <xs:complexType>
137 <xs:all>
138 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
139 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
140 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
141 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
142 <xs:element name="WarningLevel" minOccurs="0">
143 <xs:simpleType>
144 <xs:restriction base="xs:integer">
145 <xs:minInclusive value="0" />
146 <xs:maxInclusive value="4"/>
147 </xs:restriction>
148 </xs:simpleType>
149 </xs:element>
150 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
151 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
152 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
153 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
154 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
155 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
156 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
157 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
158 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
159 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
160 </xs:all>
161 </xs:complexType>
162 </xs:element>
163
164 <xs:element name="Files">
165 <xs:complexType>
166 <xs:sequence>
167 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
168 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
169 </xs:sequence>
170 </xs:complexType>
171 </xs:element>
172
173 <xs:element name="File">
174 <xs:complexType>
175 <xs:simpleContent>
176 <xs:extension base="xs:string">
177 <xs:attribute name="buildAction" default="Compile">
178 <xs:simpleType>
179 <xs:restriction base="xs:string">
180 <xs:enumeration value="None" />
181 <xs:enumeration value="Compile" />
182 <xs:enumeration value="Content" />
183 <xs:enumeration value="EmbeddedResource" />
184 </xs:restriction>
185 </xs:simpleType>
186 </xs:attribute>
187 </xs:extension>
188 </xs:simpleContent>
189 </xs:complexType>
190 </xs:element>
191
192 <xs:element name="Match">
193 <xs:complexType>
194 <xs:attribute name="path" type="xs:string" />
195 <xs:attribute name="pattern" type="xs:string" use="required" />
196 <xs:attribute name="recurse" type="xs:boolean" default="false" />
197 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
198 <xs:attribute name="buildAction" default="Compile">
199 <xs:simpleType>
200 <xs:restriction base="xs:string">
201 <xs:enumeration value="None" />
202 <xs:enumeration value="Compile" />
203 <xs:enumeration value="Content" />
204 <xs:enumeration value="EmbeddedResource" />
205 </xs:restriction>
206 </xs:simpleType>
207 </xs:attribute>
208 </xs:complexType>
209 </xs:element>
210</xs:schema>
211
212
diff --git a/Prebuild/src/data/dnpb-1.5.xsd b/Prebuild/src/data/dnpb-1.5.xsd
new file mode 100644
index 0000000..2270e83
--- /dev/null
+++ b/Prebuild/src/data/dnpb-1.5.xsd
@@ -0,0 +1,215 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<xs:schema elementFormDefault="qualified"
3 xmlns:xs="http://www.w3.org/2001/XMLSchema"
4 targetNamespace="http://dnpb.sourceforge.net/schemas/dnpb-1.5.xsd"
5 xmlns="http://dnpb.sourceforge.net/schemas/dnpb-1.5.xsd"
6>
7 <xs:annotation>
8 <xs:documentation>
9 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . 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 and
14 2003, SharpDevelop, MonoDevelop, and NAnt.
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="DNPreBuild">
40 <xs:complexType>
41 <xs:sequence>
42 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
43 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
44 </xs:sequence>
45
46 <xs:attribute name="version" />
47 <xs:attribute name="checkOsVars" />
48 </xs:complexType>
49 </xs:element>
50
51 <xs:element name="Process" type="xs:string" />
52
53 <xs:element name="Solution">
54 <xs:complexType>
55 <xs:sequence>
56 <xs:element ref="Options" minOccurs="0" />
57 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
58 <xs:element ref="Files" minOccurs="0" />
59 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
60 </xs:sequence>
61
62 <xs:attribute name="name" type="xs:string" use="required" />
63 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
64 <xs:attribute name="path" type="xs:string" default="" />
65 </xs:complexType>
66 </xs:element>
67
68 <xs:element name="Project">
69 <xs:complexType>
70 <xs:sequence>
71 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
72
73 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
74
75 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
76 <xs:complexType>
77 <xs:attribute name="name" type="xs:string" use="required" />
78 <xs:attribute name="path" type="xs:string" />
79 <xs:attribute name="localCopy" type="xs:boolean" />
80 <xs:attribute name="version" type="xs:string" />
81 </xs:complexType>
82 </xs:element>
83
84 <xs:element ref="Files" />
85 </xs:sequence>
86
87 <xs:attribute name="name" type="xs:string" use="required" />
88 <xs:attribute name="filterGroups" type="xs:string" default="" />
89 <xs:attribute name="path" type="xs:string" default="" />
90 <xs:attribute name="icon" type="xs:string" default="" />
91
92 <xs:attribute name="language" default="C#">
93 <xs:simpleType>
94 <xs:restriction base="xs:string">
95 <xs:enumeration value="C#" />
96 <xs:enumeration value="VB.NET" />
97 </xs:restriction>
98 </xs:simpleType>
99 </xs:attribute>
100
101 <xs:attribute name="type" default="Exe">
102 <xs:simpleType>
103 <xs:restriction base="xs:string">
104 <xs:enumeration value="Exe" />
105 <xs:enumeration value="WinExe" />
106 <xs:enumeration value="Library" />
107 </xs:restriction>
108 </xs:simpleType>
109 </xs:attribute>
110
111 <xs:attribute name="runtime" default="Microsoft">
112 <xs:simpleType>
113 <xs:restriction base="xs:string">
114 <xs:enumeration value="Microsoft" />
115 <xs:enumeration value="Mono" />
116 </xs:restriction>
117 </xs:simpleType>
118 </xs:attribute>
119
120 <xs:attribute name="startupObject" type="xs:string" default="" />
121 <xs:attribute name="rootNamespace" type="xs:string" />
122 <xs:attribute name="assemblyName" type="xs:string" />
123 </xs:complexType>
124 </xs:element>
125
126 <xs:element name="Configuration">
127 <xs:complexType>
128 <xs:sequence>
129 <xs:element ref="Options" minOccurs="0" />
130 </xs:sequence>
131
132 <xs:attribute name="name" type="xs:string" use="required" />
133 </xs:complexType>
134 </xs:element>
135
136 <xs:element name="Options">
137 <xs:complexType>
138 <xs:all>
139 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
140 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
141 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
142 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
143 <xs:element name="WarningLevel" minOccurs="0">
144 <xs:simpleType>
145 <xs:restriction base="xs:integer">
146 <xs:minInclusive value="0" />
147 <xs:maxInclusive value="4"/>
148 </xs:restriction>
149 </xs:simpleType>
150 </xs:element>
151 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
152 <xs:element name="SupressWarnings" type="xs:string" minOccurs="0" />
153 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
154 <xs:element name="GenerateXmlDocFile" type="xs:boolean" minOccurs="0" />
155 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
156 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
157 <xs:element name="RegisterCOMInterop" type="xs:boolean" minOccurs="0" />
158 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
159 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
160 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
161 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
162 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
163 </xs:all>
164 </xs:complexType>
165 </xs:element>
166
167 <xs:element name="Files">
168 <xs:complexType>
169 <xs:sequence>
170 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
171 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
172 </xs:sequence>
173 </xs:complexType>
174 </xs:element>
175
176 <xs:element name="File">
177 <xs:complexType>
178 <xs:simpleContent>
179 <xs:extension base="xs:string">
180 <xs:attribute name="buildAction" default="Compile">
181 <xs:simpleType>
182 <xs:restriction base="xs:string">
183 <xs:enumeration value="None" />
184 <xs:enumeration value="Compile" />
185 <xs:enumeration value="Content" />
186 <xs:enumeration value="EmbeddedResource" />
187 </xs:restriction>
188 </xs:simpleType>
189 </xs:attribute>
190 </xs:extension>
191 </xs:simpleContent>
192 </xs:complexType>
193 </xs:element>
194
195 <xs:element name="Match">
196 <xs:complexType>
197 <xs:attribute name="path" type="xs:string" />
198 <xs:attribute name="pattern" type="xs:string" use="required" />
199 <xs:attribute name="recurse" type="xs:boolean" default="false" />
200 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
201 <xs:attribute name="buildAction" default="Compile">
202 <xs:simpleType>
203 <xs:restriction base="xs:string">
204 <xs:enumeration value="None" />
205 <xs:enumeration value="Compile" />
206 <xs:enumeration value="Content" />
207 <xs:enumeration value="EmbeddedResource" />
208 </xs:restriction>
209 </xs:simpleType>
210 </xs:attribute>
211 </xs:complexType>
212 </xs:element>
213</xs:schema>
214
215
diff --git a/Prebuild/src/data/prebuild-1.6.xsd b/Prebuild/src/data/prebuild-1.6.xsd
new file mode 100644
index 0000000..f944faf
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.6.xsd
@@ -0,0 +1,231 @@
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.6.xsd"
3 xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.6.xsd">
4 <xs:annotation>
5 <xs:documentation>
6 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com)
7
8 .NET Prebuild is a cross-platform XML-driven pre-build tool which
9 allows developers to easily generate project or make files for major
10 IDE's and .NET development tools including: Visual Studio .NET 2002 and
11 2003, SharpDevelop, MonoDevelop, and NAnt.
12
13 BSD License:
14
15 Redistribution and use in source and binary forms, with or without modification, are permitted
16 provided that the following conditions are met:
17
18 * Redistributions of source code must retain the above copyright notice, this list of conditions
19 and the following disclaimer.
20 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
21 and the following disclaimer in the documentation and/or other materials provided with the
22 distribution.
23 * The name of the author may not be used to endorse or promote products derived from this software
24 without specific prior written permission.
25
26 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
27 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
31 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 </xs:documentation>
34 </xs:annotation>
35 <xs:element name="Prebuild">
36 <xs:complexType>
37 <xs:sequence>
38 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
39 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
40 </xs:sequence>
41 <xs:attribute name="version" />
42 <xs:attribute name="checkOsVars" />
43 </xs:complexType>
44 </xs:element>
45 <xs:element name="Process" type="xs:string" />
46 <xs:element name="Solution">
47 <xs:complexType>
48 <xs:sequence>
49 <xs:element ref="Options" minOccurs="0" />
50 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
51 <xs:element ref="Files" minOccurs="0" />
52 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
53 </xs:sequence>
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
56 <xs:attribute name="path" type="xs:string" default="" />
57 </xs:complexType>
58 </xs:element>
59 <xs:element name="Project">
60 <xs:complexType>
61 <xs:sequence>
62 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
63 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
64 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
65 <xs:complexType>
66 <xs:attribute name="name" type="xs:string" use="required" />
67 <xs:attribute name="path" type="xs:string" />
68 <xs:attribute name="localCopy" type="xs:boolean" />
69 <xs:attribute name="version" type="xs:string" />
70 </xs:complexType>
71 </xs:element>
72 <xs:element ref="Files" />
73 </xs:sequence>
74 <xs:attribute name="name" type="xs:string" use="required" />
75 <xs:attribute name="filterGroups" type="xs:string" default="" />
76 <xs:attribute name="path" type="xs:string" default="" />
77 <xs:attribute name="icon" type="xs:string" default="" />
78 <xs:attribute name="language" default="C#">
79 <xs:simpleType>
80 <xs:restriction base="xs:string">
81 <xs:enumeration value="C#" />
82 <xs:enumeration value="VB.NET" />
83 </xs:restriction>
84 </xs:simpleType>
85 </xs:attribute>
86 <xs:attribute name="type" default="Exe">
87 <xs:simpleType>
88 <xs:restriction base="xs:string">
89 <xs:enumeration value="Exe" />
90 <xs:enumeration value="WinExe" />
91 <xs:enumeration value="Library" />
92 </xs:restriction>
93 </xs:simpleType>
94 </xs:attribute>
95 <xs:attribute name="runtime" default="Microsoft">
96 <xs:simpleType>
97 <xs:restriction base="xs:string">
98 <xs:enumeration value="Microsoft" />
99 <xs:enumeration value="Mono" />
100 </xs:restriction>
101 </xs:simpleType>
102 </xs:attribute>
103 <xs:attribute name="startupObject" type="xs:string" default="" />
104 <xs:attribute name="rootNamespace" type="xs:string" />
105 <xs:attribute name="assemblyName" type="xs:string" />
106 </xs:complexType>
107 </xs:element>
108 <xs:element name="Configuration">
109 <xs:complexType>
110 <xs:sequence>
111 <xs:element ref="Options" minOccurs="0" />
112 </xs:sequence>
113 <xs:attribute name="name" type="xs:string" use="required" />
114 </xs:complexType>
115 </xs:element>
116 <xs:element name="Options">
117 <xs:complexType>
118 <xs:all>
119 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
120 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
121 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
122 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
123 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
124 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
125 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
126 <xs:simpleType>
127 <xs:restriction base="xs:string">
128 <xs:enumeration value="OnBuildSuccess" />
129 <xs:enumeration value="Always" />
130 <xs:enumeration value="OnOutputUpdated" />
131 </xs:restriction>
132 </xs:simpleType>
133 </xs:element>
134 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
135 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
136 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
137 <xs:element name="WarningLevel" minOccurs="0">
138 <xs:simpleType>
139 <xs:restriction base="xs:integer">
140 <xs:minInclusive value="0" />
141 <xs:maxInclusive value="4" />
142 </xs:restriction>
143 </xs:simpleType>
144 </xs:element>
145 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
146 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
147 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
148 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
149 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
150 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
151 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
152 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
153 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
154 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
155 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
156 </xs:all>
157 </xs:complexType>
158 </xs:element>
159 <xs:element name="Files">
160 <xs:complexType>
161 <xs:sequence>
162 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
163 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
164 </xs:sequence>
165 </xs:complexType>
166 </xs:element>
167 <xs:element name="File">
168 <xs:complexType>
169 <xs:simpleContent>
170 <xs:extension base="xs:string">
171 <xs:attribute name="buildAction" default="Compile">
172 <xs:simpleType>
173 <xs:restriction base="xs:string">
174 <xs:enumeration value="None" />
175 <xs:enumeration value="Compile" />
176 <xs:enumeration value="Content" />
177 <xs:enumeration value="EmbeddedResource" />
178 </xs:restriction>
179 </xs:simpleType>
180 </xs:attribute>
181 <xs:attribute name="subType" default="Code">
182 <xs:simpleType>
183 <xs:restriction base="xs:string">
184 <xs:enumeration value="Code" />
185 <xs:enumeration value="Component" />
186 <xs:enumeration value="Form" />
187 <xs:enumeration value="UserControl" />
188 </xs:restriction>
189 </xs:simpleType>
190 </xs:attribute>
191 </xs:extension>
192 </xs:simpleContent>
193 </xs:complexType>
194 </xs:element>
195 <xs:element name="Match">
196 <xs:complexType>
197 <xs:sequence>
198 <xs:element ref="Exclude" minOccurs="0" />
199 </xs:sequence>
200 <xs:attribute name="path" type="xs:string" />
201 <xs:attribute name="pattern" type="xs:string" use="required" />
202 <xs:attribute name="recurse" type="xs:boolean" default="false" />
203 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
204 <xs:attribute name="buildAction" default="Compile">
205 <xs:simpleType>
206 <xs:restriction base="xs:string">
207 <xs:enumeration value="None" />
208 <xs:enumeration value="Compile" />
209 <xs:enumeration value="Content" />
210 <xs:enumeration value="EmbeddedResource" />
211 </xs:restriction>
212 </xs:simpleType>
213 </xs:attribute>
214 <xs:attribute name="subType" default="Code">
215 <xs:simpleType>
216 <xs:restriction base="xs:string">
217 <xs:enumeration value="Code" />
218 <xs:enumeration value="Component" />
219 <xs:enumeration value="Form" />
220 <xs:enumeration value="UserControl" />
221 </xs:restriction>
222 </xs:simpleType>
223 </xs:attribute>
224 </xs:complexType>
225 </xs:element>
226 <xs:element name="Exclude">
227 <xs:complexType>
228 <xs:attribute name="name" type="xs:string" use="required" />
229 </xs:complexType>
230 </xs:element>
231</xs:schema>
diff --git a/Prebuild/src/data/prebuild-1.7.xsd b/Prebuild/src/data/prebuild-1.7.xsd
new file mode 100644
index 0000000..9d63ce6
--- /dev/null
+++ b/Prebuild/src/data/prebuild-1.7.xsd
@@ -0,0 +1,261 @@
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.7.xsd"
3 xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd">
4 <xs:annotation>
5 <xs:documentation>
6 Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com), David Hudson (jendave at yahoo dot com)
7
8 .NET Prebuild is a cross-platform XML-driven pre-build tool which
9 allows developers to easily generate project or make files for major
10 IDE's and .NET development tools including: Visual Studio .NET 2002 and
11 2003, SharpDevelop, MonoDevelop, and NAnt.
12
13 BSD License:
14
15 Redistribution and use in source and binary forms, with or without modification, are permitted
16 provided that the following conditions are met:
17
18 * Redistributions of source code must retain the above copyright notice, this list of conditions
19 and the following disclaimer.
20 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
21 and the following disclaimer in the documentation and/or other materials provided with the
22 distribution.
23 * The name of the author may not be used to endorse or promote products derived from this software
24 without specific prior written permission.
25
26 THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
27 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
31 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 </xs:documentation>
34 </xs:annotation>
35 <xs:element name="Prebuild">
36 <xs:complexType>
37 <xs:sequence>
38 <xs:element ref="Process" minOccurs="0" maxOccurs="unbounded" />
39 <xs:element ref="Solution" minOccurs="0" maxOccurs="unbounded" />
40 </xs:sequence>
41 <xs:attribute name="version" />
42 <xs:attribute name="checkOsVars" />
43 </xs:complexType>
44 </xs:element>
45 <xs:element name="Process" type="xs:string" />
46 <xs:element name="Solution">
47 <xs:complexType>
48 <xs:sequence>
49 <xs:element ref="Options" minOccurs="0" />
50 <xs:element ref="Configuration" minOccurs="1" maxOccurs="unbounded" />
51 <xs:element ref="Files" minOccurs="0" />
52 <xs:element ref="Project" minOccurs="1" maxOccurs="unbounded" />
53 </xs:sequence>
54 <xs:attribute name="name" type="xs:string" use="required" />
55 <xs:attribute name="activeConfig" type="xs:string" default="Debug" />
56 <xs:attribute name="path" type="xs:string" default="" />
57 <xs:attribute name="version" type="xs:string" default="1.0.0" />
58 </xs:complexType>
59 </xs:element>
60 <xs:element name="Project">
61 <xs:complexType>
62 <xs:sequence>
63 <xs:element ref="Configuration" minOccurs="0" maxOccurs="unbounded" />
64 <xs:element name="ReferencePath" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
65 <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
66 <xs:complexType>
67 <xs:attribute name="name" type="xs:string" use="required" />
68 <xs:attribute name="path" type="xs:string" />
69 <xs:attribute name="localCopy" type="xs:boolean" />
70 <xs:attribute name="version" type="xs:string" default="1.0.0"/>
71 </xs:complexType>
72 </xs:element>
73 <xs:element ref="Files" />
74 </xs:sequence>
75 <xs:attribute name="name" type="xs:string" use="required" />
76 <xs:attribute name="designerFolder" type="xs:string" default="" />
77 <xs:attribute name="filterGroups" type="xs:string" default="" />
78 <xs:attribute name="path" type="xs:string" default="" />
79 <xs:attribute name="icon" type="xs:string" default="" />
80 <xs:attribute name="language" default="C#">
81 <xs:simpleType>
82 <xs:restriction base="xs:string">
83 <xs:enumeration value="C#" />
84 <xs:enumeration value="VB.NET" />
85 </xs:restriction>
86 </xs:simpleType>
87 </xs:attribute>
88 <xs:attribute name="type" default="Exe">
89 <xs:simpleType>
90 <xs:restriction base="xs:string">
91 <xs:enumeration value="Exe" />
92 <xs:enumeration value="WinExe" />
93 <xs:enumeration value="Library" />
94 </xs:restriction>
95 </xs:simpleType>
96 </xs:attribute>
97 <xs:attribute name="runtime" default="Microsoft">
98 <xs:simpleType>
99 <xs:restriction base="xs:string">
100 <xs:enumeration value="Microsoft" />
101 <xs:enumeration value="Mono" />
102 </xs:restriction>
103 </xs:simpleType>
104 </xs:attribute>
105 <xs:attribute name="startupObject" type="xs:string" default="" />
106 <xs:attribute name="rootNamespace" type="xs:string" />
107 <xs:attribute name="assemblyName" type="xs:string" />
108 <xs:attribute name="generateAssemblyInfoFile" type="xs:boolean" default="false"/>
109 </xs:complexType>
110 </xs:element>
111 <xs:element name="Configuration">
112 <xs:complexType>
113 <xs:sequence>
114 <xs:element ref="Options" minOccurs="0" />
115 </xs:sequence>
116 <xs:attribute name="name" type="xs:string" use="required" />
117 </xs:complexType>
118 </xs:element>
119 <xs:element name="Options">
120 <xs:complexType>
121 <xs:all>
122 <xs:element name="CompilerDefines" type="xs:string" minOccurs="0" />
123 <xs:element name="OptimizeCode" type="xs:boolean" minOccurs="0" />
124 <xs:element name="CheckUnderflowOverflow" type="xs:boolean" minOccurs="0" />
125 <xs:element name="AllowUnsafe" type="xs:boolean" minOccurs="0" />
126 <xs:element name="PreBuildEvent" type="xs:string" minOccurs="0" />
127 <xs:element name="PostBuildEvent" type="xs:string" minOccurs="0" />
128 <xs:element name="RunPostBuildEvent" minOccurs="0" default="OnBuildSuccess">
129 <xs:simpleType>
130 <xs:restriction base="xs:string">
131 <xs:enumeration value="OnBuildSuccess" />
132 <xs:enumeration value="Always" />
133 <xs:enumeration value="OnOutputUpdated" />
134 </xs:restriction>
135 </xs:simpleType>
136 </xs:element>
137 <xs:element name="RunScript" type="xs:string" minOccurs="0" />
138 <xs:element name="PreBuildEventArgs" type="xs:string" minOccurs="0" />
139 <xs:element name="PostBuildEventArgs" type="xs:string" minOccurs="0" />
140 <xs:element name="WarningLevel" minOccurs="0">
141 <xs:simpleType>
142 <xs:restriction base="xs:integer">
143 <xs:minInclusive value="0" />
144 <xs:maxInclusive value="4" />
145 </xs:restriction>
146 </xs:simpleType>
147 </xs:element>
148 <xs:element name="WarningsAsErrors" type="xs:boolean" minOccurs="0" />
149 <xs:element name="SuppressWarnings" type="xs:string" minOccurs="0" />
150 <xs:element name="OutputPath" type="xs:string" minOccurs="0" />
151 <xs:element name="GenerateDocumentation" type="xs:boolean" minOccurs="0" />
152 <xs:element name="XmlDocFile" type="xs:string" minOccurs="0" />
153 <xs:element name="DebugInformation" type="xs:boolean" minOccurs="0" />
154 <xs:element name="RegisterComInterop" type="xs:boolean" minOccurs="0" />
155 <xs:element name="RemoveIntegerChecks" type="xs:boolean" minOccurs="0" />
156 <xs:element name="IncrementalBuild" type="xs:boolean" minOccurs="0" />
157 <xs:element name="BaseAddress" type="xs:string" minOccurs="0" />
158 <xs:element name="FileAlignment" type="xs:integer" minOccurs="0" />
159 <xs:element name="NoStdLib" type="xs:boolean" minOccurs="0" />
160 <xs:element name="KeyFile" type="xs:string" minOccurs="0" />
161 </xs:all>
162 </xs:complexType>
163 </xs:element>
164 <xs:element name="Files">
165 <xs:complexType>
166 <xs:sequence>
167 <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" />
168 <xs:element ref="Match" minOccurs="0" maxOccurs="unbounded" />
169 </xs:sequence>
170 </xs:complexType>
171 </xs:element>
172 <xs:element name="File">
173 <xs:complexType>
174 <xs:simpleContent>
175 <xs:extension base="xs:string">
176 <xs:attribute name="resourceName" type="xs:string" default="" />
177 <xs:attribute name="buildAction" default="Compile">
178 <xs:simpleType>
179 <xs:restriction base="xs:string">
180 <xs:enumeration value="None" />
181 <xs:enumeration value="Compile" />
182 <xs:enumeration value="Content" />
183 <xs:enumeration value="EmbeddedResource" />
184 </xs:restriction>
185 </xs:simpleType>
186 </xs:attribute>
187 <xs:attribute name="subType" default="Code">
188 <xs:simpleType>
189 <xs:restriction base="xs:string">
190 <xs:enumeration value="Code" />
191 <xs:enumeration value="Component" />
192 <xs:enumeration value="Form" />
193 <xs:enumeration value="Settings" />
194 <xs:enumeration value="UserControl" />
195 </xs:restriction>
196 </xs:simpleType>
197 </xs:attribute>
198 <xs:attribute name="link" type="xs:boolean" />
199 <xs:attribute name="copyToOutput" default="Never">
200 <xs:simpleType>
201 <xs:restriction base="xs:string">
202 <xs:enumeration value="Never" />
203 <xs:enumeration value="Always" />
204 <xs:enumeration value="PreserveNewest" />
205 </xs:restriction>
206 </xs:simpleType>
207 </xs:attribute>
208 </xs:extension>
209 </xs:simpleContent>
210 </xs:complexType>
211 </xs:element>
212 <xs:element name="Match">
213 <xs:complexType>
214 <xs:sequence>
215 <xs:element ref="Exclude" minOccurs="0" maxOccurs="unbounded" />
216 </xs:sequence>
217 <xs:attribute name="path" type="xs:string" />
218 <xs:attribute name="pattern" type="xs:string" use="required" />
219 <xs:attribute name="recurse" type="xs:boolean" default="false" />
220 <xs:attribute name="useRegex" type="xs:boolean" default="false" />
221 <xs:attribute name="buildAction" default="Compile">
222 <xs:simpleType>
223 <xs:restriction base="xs:string">
224 <xs:enumeration value="None" />
225 <xs:enumeration value="Compile" />
226 <xs:enumeration value="Content" />
227 <xs:enumeration value="EmbeddedResource" />
228 </xs:restriction>
229 </xs:simpleType>
230 </xs:attribute>
231 <xs:attribute name="resourceName" type="xs:string" default="" />
232 <xs:attribute name="subType" default="Code">
233 <xs:simpleType>
234 <xs:restriction base="xs:string">
235 <xs:enumeration value="Code" />
236 <xs:enumeration value="Component" />
237 <xs:enumeration value="Designer" />
238 <xs:enumeration value="Form" />
239 <xs:enumeration value="Settings" />
240 <xs:enumeration value="UserControl" />
241 </xs:restriction>
242 </xs:simpleType>
243 </xs:attribute>
244 <xs:attribute name="link" type="xs:boolean" />
245 <xs:attribute name="copyToOutput" default="Never">
246 <xs:simpleType>
247 <xs:restriction base="xs:string">
248 <xs:enumeration value="Never" />
249 <xs:enumeration value="Always" />
250 <xs:enumeration value="PreserveNewest" />
251 </xs:restriction>
252 </xs:simpleType>
253 </xs:attribute>
254 </xs:complexType>
255 </xs:element>
256 <xs:element name="Exclude">
257 <xs:complexType>
258 <xs:attribute name="name" type="xs:string" use="required" />
259 </xs:complexType>
260 </xs:element>
261</xs:schema>
diff --git a/ThirdPartyLicenses/Axiom.txt b/ThirdPartyLicenses/Axiom.txt
new file mode 100644
index 0000000..af4e9cd
--- /dev/null
+++ b/ThirdPartyLicenses/Axiom.txt
@@ -0,0 +1,141 @@
1GNU LESSER GENERAL PUBLIC LICENSE
2Version 2.1, February 1999
3
4
5Copyright (C) 1991, 1999 Free Software Foundation, Inc.
659 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7Everyone is permitted to copy and distribute verbatim copies
8of this license document, but changing it is not allowed.
9
10[This is the first released version of the Lesser GPL. It also counts
11 as the successor of the GNU Library Public License, version 2, hence
12 the version number 2.1.]
13
14Preamble
15The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
16
17This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.
18
19When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.
20
21To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.
22
23For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
24
25We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.
26
27To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.
28
29Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.
30
31Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.
32
33When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.
34
35We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.
36
37For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.
38
39In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.
40
41Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.
42
43The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.
44
45
46TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
470. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".
48
49A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
50
51The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
52
53"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
54
55Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
56
571. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
58
59You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
60
612. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
62
63
64a) The modified work must itself be a software library.
65b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
66c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
67d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
68(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
69
70These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
71
72Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
73
74In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
75
763. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
77
78Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
79
80This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
81
824. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
83
84If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
85
865. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
87
88However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
89
90When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
91
92If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
93
94Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
95
966. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
97
98You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
99
100
101a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
102b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
103c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
104d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
105e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
106For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
107
108It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
109
1107. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
111
112
113a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
114b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
1158. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
116
1179. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
118
11910. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.
120
12111. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
122
123If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
124
125It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
126
127This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
128
12912. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
130
13113. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
132
133Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
134
13514. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
136
137NO WARRANTY
138
13915. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
140
14116. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file
diff --git a/ThirdPartyLicenses/MySQL.txt b/ThirdPartyLicenses/MySQL.txt
new file mode 100644
index 0000000..6dfe347
--- /dev/null
+++ b/ThirdPartyLicenses/MySQL.txt
@@ -0,0 +1,78 @@
1Covered under the MySQL FLOSS Exemption ( http://www.mysql.com/company/legal/licensing/foss-exception.html )
2
3--------------------------------------------------------------------
4Legal Terms and Conditions
5
6As a special exception to the terms and conditions of version 2.0 of the GPL:
7
8You are free to distribute a Derivative Work that is formed entirely from the Program and one or more works (each, a "FLOSS Work") licensed under one or more of the licenses listed below in section 1, as long as:
9
10 1. You obey the GPL in all respects for the Program and the Derivative Work, except for identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves,
11 2. all identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves,
12 1. are distributed subject to one of the FLOSS licenses listed below, and
13 2. the object code or executable form of those sections are accompanied by the complete corresponding machine-readable source code for those sections on the same medium and under the same FLOSS license as the corresponding object code or executable forms of those sections, and
14 3. any works which are aggregated with the Program or with a Derivative Work on a volume of a storage or distribution medium in accordance with the GPL, can reasonably be considered independent and separate works in themselves which are not derivatives of either the Program, a Derivative Work or a FLOSS Work.
15
16If the above conditions are not met, then the Program may only be copied, modified, distributed or used under the terms and conditions of the GPL or another valid licensing option from MySQL AB.
17
18--------------------------------------------------------------------
19
20TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
21
220. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
23
24Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
25
261. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
27
28You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
29
302. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
31
32 a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
33 b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
34 c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
35
36These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
37
38Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
39
40In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
41
423. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
43
44 a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
45 b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
46 c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
47
48The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
49
50If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
51
524. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
53
545. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
55
566. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
57
587. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
59
60If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
61
62It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
63
64This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
65
668. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
67
689. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
69
70Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
71
7210. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
73
74NO WARRANTY
75
7611. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
77
7812. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file
diff --git a/ThirdPartyLicenses/ODE.txt b/ThirdPartyLicenses/ODE.txt
new file mode 100644
index 0000000..312976f
--- /dev/null
+++ b/ThirdPartyLicenses/ODE.txt
@@ -0,0 +1,13 @@
1Open Dynamics Engine
2Copyright (c) 2001-2004, Russell L. Smith.
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6
7Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8
9Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
10
11Neither the names of ODE's copyright owner nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
12
13THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/ThirdPartyLicenses/OpenJpeg.txt b/ThirdPartyLicenses/OpenJpeg.txt
new file mode 100644
index 0000000..0ad4488
--- /dev/null
+++ b/ThirdPartyLicenses/OpenJpeg.txt
@@ -0,0 +1,30 @@
1/*
2 * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
3 * Copyright (c) 2002-2007, Professor Benoit Macq
4 * Copyright (c) 2001-2003, David Janssens
5 * Copyright (c) 2002-2003, Yannick Verschueren
6 * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
7 * Copyright (c) 2005, Herve Drolon, FreeImage Team
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */ \ No newline at end of file
diff --git a/ThirdPartyLicenses/libsl.txt b/ThirdPartyLicenses/libsl.txt
new file mode 100644
index 0000000..9555905
--- /dev/null
+++ b/ThirdPartyLicenses/libsl.txt
@@ -0,0 +1,23 @@
1Copyright (c) 2006, Second Life Reverse Engineering Team
2All rights reserved.
3
4- Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7- Redistributions of source code must retain the above copyright notice, this
8 list of conditions and the following disclaimer.
9- Neither the name of the Second Life Reverse Engineering Team nor the names
10 of its contributors may be used to endorse or promote products derived from
11 this software without specific prior written permission.
12
13THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
17LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/bin/Axiom.MathLib.dll b/bin/Axiom.MathLib.dll
new file mode 100644
index 0000000..b00cf1d
--- /dev/null
+++ b/bin/Axiom.MathLib.dll
Binary files differ
diff --git a/bin/Db4objects.Db4o.dll b/bin/Db4objects.Db4o.dll
new file mode 100644
index 0000000..be976a1
--- /dev/null
+++ b/bin/Db4objects.Db4o.dll
Binary files differ
diff --git a/bin/DotSets.dll b/bin/DotSets.dll
new file mode 100644
index 0000000..5225651
--- /dev/null
+++ b/bin/DotSets.dll
Binary files differ
diff --git a/bin/Kds.Serialization.dll b/bin/Kds.Serialization.dll
new file mode 100644
index 0000000..7f03277
--- /dev/null
+++ b/bin/Kds.Serialization.dll
Binary files differ
diff --git a/bin/Mono.PEToolkit.dll b/bin/Mono.PEToolkit.dll
new file mode 100644
index 0000000..b4c3e70
--- /dev/null
+++ b/bin/Mono.PEToolkit.dll
Binary files differ
diff --git a/bin/MySql.Data.dll b/bin/MySql.Data.dll
new file mode 100644
index 0000000..0467dd6
--- /dev/null
+++ b/bin/MySql.Data.dll
Binary files differ
diff --git a/bin/Ode.NET.dll b/bin/Ode.NET.dll
new file mode 100644
index 0000000..40f15a5
--- /dev/null
+++ b/bin/Ode.NET.dll
Binary files differ
diff --git a/bin/OpenJPEG.dll b/bin/OpenJPEG.dll
new file mode 100644
index 0000000..c9a7500
--- /dev/null
+++ b/bin/OpenJPEG.dll
Binary files differ
diff --git a/bin/PhysX-wrapper.dll b/bin/PhysX-wrapper.dll
new file mode 100644
index 0000000..5259ffc
--- /dev/null
+++ b/bin/PhysX-wrapper.dll
Binary files differ
diff --git a/bin/PhysX_Wrapper_Dotnet.dll b/bin/PhysX_Wrapper_Dotnet.dll
new file mode 100644
index 0000000..c66bf3a
--- /dev/null
+++ b/bin/PhysX_Wrapper_Dotnet.dll
Binary files differ
diff --git a/bin/Prebuild.exe b/bin/Prebuild.exe
new file mode 100644
index 0000000..1aab4a2
--- /dev/null
+++ b/bin/Prebuild.exe
Binary files differ
diff --git a/bin/System.Data.SQLite.dll b/bin/System.Data.SQLite.dll
new file mode 100644
index 0000000..70d84e7
--- /dev/null
+++ b/bin/System.Data.SQLite.dll
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/HOWTO.txt b/bin/TerrainDatafiles/Alien/HOWTO.txt
new file mode 100644
index 0000000..00a65d7
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/HOWTO.txt
@@ -0,0 +1,19 @@
1Use the "terrain load" command to import these datafiles.
2They are stored as Float-32 arrays, use the F32 import type.
3
4These files are formatted on a scale of 0 to 1, they are designed for a range of 0..58.81
5use the 'multiply' command to multiply them by 58.81 to achieve correct height values.
6
7Example ------------------
8Region# : terrain load f32 c:\opensim\datafiles\output_x0_y0.r32
9Region# : terrain multiply 58.81
10
11
12
13 <AdamZaius> 0,0 - 1,0 - 2,0
14 <AdamZaius> 0,1 - 1,1 - 2,1
15 <AdamZaius> 0,2 - 1,2, 2,2
16
17
18for a 3x3 area on the grid
19
diff --git a/bin/TerrainDatafiles/Alien/alienworld.bmp b/bin/TerrainDatafiles/Alien/alienworld.bmp
new file mode 100644
index 0000000..0e2405e
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_0_0.bmp b/bin/TerrainDatafiles/Alien/alienworld_0_0.bmp
new file mode 100644
index 0000000..0a3afc0
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_0_0.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_0_0.r32 b/bin/TerrainDatafiles/Alien/alienworld_0_0.r32
new file mode 100644
index 0000000..299dc8c
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_0_0.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_0_1.bmp b/bin/TerrainDatafiles/Alien/alienworld_0_1.bmp
new file mode 100644
index 0000000..ec3b5d2
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_0_1.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_0_1.r32 b/bin/TerrainDatafiles/Alien/alienworld_0_1.r32
new file mode 100644
index 0000000..0dd41fc
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_0_1.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_0_2.bmp b/bin/TerrainDatafiles/Alien/alienworld_0_2.bmp
new file mode 100644
index 0000000..ce341e5
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_0_2.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_0_2.r32 b/bin/TerrainDatafiles/Alien/alienworld_0_2.r32
new file mode 100644
index 0000000..28df00a
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_0_2.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_1_0.bmp b/bin/TerrainDatafiles/Alien/alienworld_1_0.bmp
new file mode 100644
index 0000000..7fb3d96
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_1_0.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_1_0.r32 b/bin/TerrainDatafiles/Alien/alienworld_1_0.r32
new file mode 100644
index 0000000..99d5072
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_1_0.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_1_1.bmp b/bin/TerrainDatafiles/Alien/alienworld_1_1.bmp
new file mode 100644
index 0000000..bd5d31a
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_1_1.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_1_1.r32 b/bin/TerrainDatafiles/Alien/alienworld_1_1.r32
new file mode 100644
index 0000000..fdb3acf
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_1_1.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_1_2.bmp b/bin/TerrainDatafiles/Alien/alienworld_1_2.bmp
new file mode 100644
index 0000000..a5a719d
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_1_2.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_1_2.r32 b/bin/TerrainDatafiles/Alien/alienworld_1_2.r32
new file mode 100644
index 0000000..4e0155b
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_1_2.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_2_0.bmp b/bin/TerrainDatafiles/Alien/alienworld_2_0.bmp
new file mode 100644
index 0000000..a5c6792
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_2_0.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_2_0.r32 b/bin/TerrainDatafiles/Alien/alienworld_2_0.r32
new file mode 100644
index 0000000..0c12470
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_2_0.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_2_1.bmp b/bin/TerrainDatafiles/Alien/alienworld_2_1.bmp
new file mode 100644
index 0000000..e1f6376
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_2_1.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_2_1.r32 b/bin/TerrainDatafiles/Alien/alienworld_2_1.r32
new file mode 100644
index 0000000..96534b8
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_2_1.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_2_2.bmp b/bin/TerrainDatafiles/Alien/alienworld_2_2.bmp
new file mode 100644
index 0000000..eabdd93
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_2_2.bmp
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_2_2.r32 b/bin/TerrainDatafiles/Alien/alienworld_2_2.r32
new file mode 100644
index 0000000..20724c3
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_2_2.r32
Binary files differ
diff --git a/bin/TerrainDatafiles/Alien/alienworld_gray.bmp b/bin/TerrainDatafiles/Alien/alienworld_gray.bmp
new file mode 100644
index 0000000..9cc3699
--- /dev/null
+++ b/bin/TerrainDatafiles/Alien/alienworld_gray.bmp
Binary files differ
diff --git a/bin/TerrainFilters/demofilter.cs b/bin/TerrainFilters/demofilter.cs
new file mode 100644
index 0000000..1fdfc95
--- /dev/null
+++ b/bin/TerrainFilters/demofilter.cs
@@ -0,0 +1,50 @@
1using System;
2using libTerrain;
3using OpenSim.Terrain;
4
5/// <summary>
6/// A Demonstration Filter
7/// </summary>
8public class DemoFilter : ITerrainFilter
9{
10 public void Filter(Channel heightmap, string[] args)
11 {
12 Console.WriteLine("Hello world");
13 }
14
15 public string Register()
16 {
17 return "demofilter";
18 }
19
20 public string Help()
21 {
22 return "demofilter - Does nothing\n";
23 }
24}
25
26public class SineFilter : ITerrainFilter
27{
28 public void Filter(Channel heightmap, string[] args)
29 {
30 double max = heightmap.findMax();
31
32 for (int x = 0; x < heightmap.w; x++)
33 {
34 for (int y = 0; y < heightmap.h; y++)
35 {
36 heightmap.set(x,y,((Math.Sin(heightmap.get(x,y) * Convert.ToDouble(args[1])) + 1) / 2) * max);
37 }
38 }
39 }
40
41 public string Register()
42 {
43 return "sinefilter";
44 }
45
46 public string Help()
47 {
48 return "sinefilter <theta> - Converts the heightmap to the functional output of a sine wave";
49 }
50} \ No newline at end of file
diff --git a/bin/XMLRPC.dll b/bin/XMLRPC.dll
new file mode 100644
index 0000000..1559a73
--- /dev/null
+++ b/bin/XMLRPC.dll
Binary files differ
diff --git a/bin/assets/base_shape.dat b/bin/assets/base_shape.dat
new file mode 100644
index 0000000..920c775
--- /dev/null
+++ b/bin/assets/base_shape.dat
@@ -0,0 +1,105 @@
1LLWearable version 22
2Female Shape and Outfit 3 Shape
3Created by system from avatar's appearance.
4 permissions 0
5 {
6 base_mask 00082000
7 owner_mask 00082000
8 group_mask 00082000
9 everyone_mask 00082000
10 next_owner_mask 00082000
11 creator_id 3d924400-038e-6ad9-920b-cfbb9b40585c
12 owner_id 542ffb8e-8932-49b9-8664-58f53e442797
13 last_owner_id 3d924400-038e-6ad9-920b-cfbb9b40585c
14 group_id 00000000-0000-0000-0000-000000000000
15 }
16 sale_info 0
17 {
18 sale_type not
19 sale_price 0
20 }
21type 0
22parameters 82
231 .21
242 -.5
254 -.11
265 -.1
276 -.3
287 -.4
298 -.5
3010 .7
3111 .34
3212 -.5
3313 0
3414 .04
3515 .58
3617 .56
3718 -.26
3819 -.73
3920 -.34
4021 -.01
4122 1
4223 -.5
4324 -.63
4425 .44
4527 .05
4633 -.24
4734 -.7
4835 -.16
4936 -.2
5037 -.98
5138 -.5
5280 0
53105 .07
54155 -.22
55157 0
56185 -1
57193 .86
58196 -.74
59505 .65
60506 .12
61507 -1.5
62515 0
63517 .16
64518 .8
65629 0
66637 0
67646 .4
68647 1
69649 .36
70650 .85
71652 .49
72653 -1
73656 0
74659 .65
75662 .5
76663 0
77664 0
78665 0
79675 -.15
80676 .26
81678 .28
82682 .27
83683 -.19
84684 -.09
85685 0
86690 .45
87692 .4
88693 -0
89753 -.5
90756 -.08
91758 .24
92759 .6
93760 .11
94764 -.38
95765 -.3
96769 .42
97773 .51
98795 .16
99796 .11
100799 .36
101841 0
102842 -.82
103879 0
104880 0
105textures 0
diff --git a/bin/assets/bricks.jp2 b/bin/assets/bricks.jp2
new file mode 100644
index 0000000..09c65ab
--- /dev/null
+++ b/bin/assets/bricks.jp2
Binary files differ
diff --git a/bin/assets/granite.jp2 b/bin/assets/granite.jp2
new file mode 100644
index 0000000..b842eb8
--- /dev/null
+++ b/bin/assets/granite.jp2
Binary files differ
diff --git a/bin/assets/hardwood.jp2 b/bin/assets/hardwood.jp2
new file mode 100644
index 0000000..8ae695e
--- /dev/null
+++ b/bin/assets/hardwood.jp2
Binary files differ
diff --git a/bin/assets/map1.jp2 b/bin/assets/map1.jp2
new file mode 100644
index 0000000..cd2fd94
--- /dev/null
+++ b/bin/assets/map1.jp2
Binary files differ
diff --git a/bin/assets/map_base.jp2 b/bin/assets/map_base.jp2
new file mode 100644
index 0000000..5ad1fd0
--- /dev/null
+++ b/bin/assets/map_base.jp2
Binary files differ
diff --git a/bin/assets/plywood.jp2 b/bin/assets/plywood.jp2
new file mode 100644
index 0000000..1643ff1
--- /dev/null
+++ b/bin/assets/plywood.jp2
Binary files differ
diff --git a/bin/assets/rocks.jp2 b/bin/assets/rocks.jp2
new file mode 100644
index 0000000..f0bbd89
--- /dev/null
+++ b/bin/assets/rocks.jp2
Binary files differ
diff --git a/bin/assets/testpic2.jp2 b/bin/assets/testpic2.jp2
new file mode 100644
index 0000000..e6840e2
--- /dev/null
+++ b/bin/assets/testpic2.jp2
Binary files differ
diff --git a/bin/avatar-texture.dat b/bin/avatar-texture.dat
new file mode 100644
index 0000000..09765be
--- /dev/null
+++ b/bin/avatar-texture.dat
Binary files differ
diff --git a/bin/data/LICENSE-README-IMPORTANT.txt b/bin/data/LICENSE-README-IMPORTANT.txt
new file mode 100644
index 0000000..3229102
--- /dev/null
+++ b/bin/data/LICENSE-README-IMPORTANT.txt
@@ -0,0 +1,5 @@
1Not all of the files in this directory are licensed under the BSD license. Some of these files come with the Second Life viewer and are considered licensed under a Creative Commons License.
2
3These files are:
4
5- avataranimations.xml (Derivative work of viewerart.ini, Creative Commons Attribution+Share-Alike v2.5 License) \ No newline at end of file
diff --git a/bin/data/avataranimations.xml b/bin/data/avataranimations.xml
new file mode 100644
index 0000000..461613f
--- /dev/null
+++ b/bin/data/avataranimations.xml
@@ -0,0 +1,10 @@
1<?xml version="1.0" encoding="iso-8859-1"?>
2<!-- Copyright(C) 2002-2007 Linden Lab, OpenSim Developers -->
3<!-- Based on viewerart.ini packaged with the viewer. -->
4<!-- This file is a derivative work of the above while it contains default animation UUIDs -->
5<!-- Licensed under a creative commons license (By-SA) http://creativecommons.org/licenses/by-sa/2.5/ -->
6<animations>
7 <animation name="STAND">2408fe9e-df1d-1d7d-f4ff-1384fa7b350f</animation>
8 <animation name="WALK">6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0</animation>
9 <animation name="FLY">aec4610c-757f-bc4e-c092-c6e9caf18daf</animation>
10</animations> \ No newline at end of file
diff --git a/bin/defaultstripe.png b/bin/defaultstripe.png
new file mode 100644
index 0000000..9db19c8
--- /dev/null
+++ b/bin/defaultstripe.png
Binary files differ
diff --git a/bin/libTerrain-BSD.dll b/bin/libTerrain-BSD.dll
new file mode 100644
index 0000000..d9b95fc
--- /dev/null
+++ b/bin/libTerrain-BSD.dll
Binary files differ
diff --git a/bin/libdb_dotNET43.dll b/bin/libdb_dotNET43.dll
new file mode 100644
index 0000000..16a1cfc
--- /dev/null
+++ b/bin/libdb_dotNET43.dll
Binary files differ
diff --git a/bin/libode.a b/bin/libode.a
new file mode 100644
index 0000000..4df0ad1
--- /dev/null
+++ b/bin/libode.a
Binary files differ
diff --git a/bin/libode.so b/bin/libode.so
new file mode 100644
index 0000000..1c8565f
--- /dev/null
+++ b/bin/libode.so
Binary files differ
diff --git a/bin/libopenjpeg-1.0.0-x86_64.so b/bin/libopenjpeg-1.0.0-x86_64.so
new file mode 100644
index 0000000..84bb5c3
--- /dev/null
+++ b/bin/libopenjpeg-1.0.0-x86_64.so
Binary files differ
diff --git a/bin/libopenjpeg-1.0.0.so b/bin/libopenjpeg-1.0.0.so
new file mode 100644
index 0000000..154fbfe
--- /dev/null
+++ b/bin/libopenjpeg-1.0.0.so
Binary files differ
diff --git a/bin/libopenjpeg-1.1.0.dylib b/bin/libopenjpeg-1.1.0.dylib
new file mode 100644
index 0000000..6375632
--- /dev/null
+++ b/bin/libopenjpeg-1.1.0.dylib
Binary files differ
diff --git a/bin/libsecondlife.dll b/bin/libsecondlife.dll
new file mode 100644
index 0000000..1715011
--- /dev/null
+++ b/bin/libsecondlife.dll
Binary files differ
diff --git a/bin/log4net.dll b/bin/log4net.dll
new file mode 100644
index 0000000..ffc57e1
--- /dev/null
+++ b/bin/log4net.dll
Binary files differ
diff --git a/bin/ode.dll b/bin/ode.dll
new file mode 100644
index 0000000..b226096
--- /dev/null
+++ b/bin/ode.dll
Binary files differ
diff --git a/bin/openjpegnet.dll b/bin/openjpegnet.dll
new file mode 100644
index 0000000..1812fa9
--- /dev/null
+++ b/bin/openjpegnet.dll
Binary files differ
diff --git a/prebuild.xml b/prebuild.xml
new file mode 100644
index 0000000..688437a
--- /dev/null
+++ b/prebuild.xml
@@ -0,0 +1,1062 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.7.xsd" version="1.7">
3 <Solution name="OpenSim" activeConfig="Debug" path="./">
4 <Configuration name="Debug">
5 <Options>
6 <CompilerDefines>TRACE;DEBUG</CompilerDefines>
7 <OptimizeCode>false</OptimizeCode>
8 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
9 <AllowUnsafe>false</AllowUnsafe>
10 <WarningLevel>4</WarningLevel>
11 <WarningsAsErrors>false</WarningsAsErrors>
12 <SuppressWarnings></SuppressWarnings>
13 <OutputPath>bin</OutputPath>
14 <DebugInformation>true</DebugInformation>
15 <IncrementalBuild>true</IncrementalBuild>
16 <NoStdLib>false</NoStdLib>
17 </Options>
18 </Configuration>
19 <Configuration name="Release">
20 <Options>
21 <CompilerDefines>TRACE</CompilerDefines>
22 <OptimizeCode>true</OptimizeCode>
23 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
24 <AllowUnsafe>false</AllowUnsafe>
25 <WarningLevel>4</WarningLevel>
26 <WarningsAsErrors>false</WarningsAsErrors>
27 <SuppressWarnings></SuppressWarnings>
28 <OutputPath>bin</OutputPath>
29 <DebugInformation>false</DebugInformation>
30 <IncrementalBuild>true</IncrementalBuild>
31 <NoStdLib>false</NoStdLib>
32 </Options>
33 </Configuration>
34
35
36 <!-- Core OpenSim Projects -->
37
38 <Project name="OpenSim.Framework.Console" path="OpenSim/Framework/Console" type="Library">
39 <Configuration name="Debug">
40 <Options>
41 <OutputPath>../../../bin/</OutputPath>
42 </Options>
43 </Configuration>
44 <Configuration name="Release">
45 <Options>
46 <OutputPath>../../../bin/</OutputPath>
47 </Options>
48 </Configuration>
49
50 <ReferencePath>../../../bin/</ReferencePath>
51 <Reference name="System" localCopy="false"/>
52 <Files>
53 <Match pattern="*.cs" recurse="true"/>
54 </Files>
55 </Project>
56
57 <Project name="OpenSim.Framework" path="OpenSim/Framework/General" type="Library">
58 <Configuration name="Debug">
59 <Options>
60 <OutputPath>../../../bin/</OutputPath>
61 </Options>
62 </Configuration>
63 <Configuration name="Release">
64 <Options>
65 <OutputPath>../../../bin/</OutputPath>
66 </Options>
67 </Configuration>
68
69 <ReferencePath>../../../bin/</ReferencePath>
70 <Reference name="System"/>
71 <Reference name="System.Xml"/>
72 <Reference name="libsecondlife.dll"/>
73 <Reference name="Db4objects.Db4o.dll"/>
74 <Reference name="XMLRPC.dll"/>
75 <Reference name="OpenSim.Framework.Console"/>
76 <Files>
77 <Match pattern="*.cs" recurse="true"/>
78 </Files>
79 </Project>
80
81 <Project name="OpenSim.Framework.Servers" path="OpenSim/Framework/Servers" type="Library">
82 <Configuration name="Debug">
83 <Options>
84 <OutputPath>../../../bin/</OutputPath>
85 </Options>
86 </Configuration>
87 <Configuration name="Release">
88 <Options>
89 <OutputPath>../../../bin/</OutputPath>
90 </Options>
91 </Configuration>
92
93 <ReferencePath>../../../bin/</ReferencePath>
94 <Reference name="System"/>
95 <Reference name="System.Xml"/>
96 <Reference name="OpenSim.Framework"/>
97 <Reference name="OpenSim.Framework.Console"/>
98 <Reference name="libsecondlife.dll"/>
99 <Reference name="XMLRPC.dll"/>
100
101 <Files>
102 <Match pattern="*.cs" recurse="true"/>
103 </Files>
104 </Project>
105
106 <Project name="OpenSim.Region.Caches" path="OpenSim/Region/Caches" type="Library">
107 <Configuration name="Debug">
108 <Options>
109 <OutputPath>../../../bin/</OutputPath>
110 </Options>
111 </Configuration>
112 <Configuration name="Release">
113 <Options>
114 <OutputPath>../../../bin/</OutputPath>
115 </Options>
116 </Configuration>
117
118 <ReferencePath>../../../bin/</ReferencePath>
119 <Reference name="System"/>
120 <Reference name="System.Xml"/>
121 <Reference name="libsecondlife.dll"/>
122 <Reference name="OpenSim.Framework"/>
123 <Files>
124 <Match pattern="*.cs" recurse="true"/>
125 </Files>
126 </Project>
127
128 <Project name="OpenSim.Region.Capabilities" path="OpenSim/Region/Capabilities" type="Library">
129 <Configuration name="Debug">
130 <Options>
131 <OutputPath>../../../bin/</OutputPath>
132 </Options>
133 </Configuration>
134 <Configuration name="Release">
135 <Options>
136 <OutputPath>../../../bin/</OutputPath>
137 </Options>
138 </Configuration>
139
140 <ReferencePath>../../../bin/</ReferencePath>
141 <Reference name="System"/>
142 <Reference name="System.Xml"/>
143 <Reference name="libsecondlife.dll"/>
144 <Reference name="OpenSim.Framework"/>
145 <Reference name="OpenSim.Framework.Servers"/>
146 <Reference name="OpenSim.Region.Caches"/>
147 <Reference name="XMLRPC.dll"/>
148
149 <Files>
150 <Match pattern="*.cs" recurse="true"/>
151 </Files>
152 </Project>
153
154 <!-- Storage Plug-ins -->
155 <Project name="OpenSim.Region.Storage.LocalStorageDb4o" path="OpenSim/Region/Storage/LocalStorageDb4o" type="Library">
156 <Configuration name="Debug">
157 <Options>
158 <OutputPath>../../../../bin/</OutputPath>
159 </Options>
160 </Configuration>
161 <Configuration name="Release">
162 <Options>
163 <OutputPath>../../../../bin/</OutputPath>
164 </Options>
165 </Configuration>
166
167 <ReferencePath>../../../../bin/</ReferencePath>
168 <Reference name="System" localCopy="false"/>
169 <Reference name="System.Xml"/>
170 <Reference name="Db4objects.Db4o.dll"/>
171 <Reference name="libsecondlife.dll"/>
172 <Reference name="OpenSim.Framework"/>
173 <Reference name="OpenSim.Framework.Console"/>
174 <Files>
175 <Match pattern="*.cs" recurse="true"/>
176 </Files>
177 </Project>
178
179 <Project name="OpenSim.Region.Storage.LocalStorageSQLite" path="OpenSim/Region/Storage/LocalStorageSQLite" type="Library">
180 <Configuration name="Debug">
181 <Options>
182 <OutputPath>../../../../bin/</OutputPath>
183 </Options>
184 </Configuration>
185 <Configuration name="Release">
186 <Options>
187 <OutputPath>../../../../bin/</OutputPath>
188 </Options>
189 </Configuration>
190
191 <ReferencePath>../../../../bin/</ReferencePath>
192 <Reference name="System" localCopy="false"/>
193 <Reference name="System.Xml"/>
194 <Reference name="System.Data"/>
195 <Reference name="System.Data.SQLite.dll"/>
196 <Reference name="libsecondlife.dll"/>
197 <Reference name="OpenSim.Framework"/>
198 <Reference name="OpenSim.Framework.Console"/>
199 <Files>
200 <Match pattern="*.cs" recurse="true"/>
201 </Files>
202 </Project>
203
204 <Project name="OpenSim.Region.Storage.LocalStorageBerkeleyDB" path="OpenSim/Region/Storage/LocalStorageBerkeleyDB" type="Library">
205 <Configuration name="Debug">
206 <Options>
207 <OutputPath>../../../../bin/</OutputPath>
208 </Options>
209 </Configuration>
210 <Configuration name="Release">
211 <Options>
212 <OutputPath>../../../../bin/</OutputPath>
213 </Options>
214 </Configuration>
215
216 <ReferencePath>../../../../bin/</ReferencePath>
217 <Reference name="System" localCopy="false"/>
218 <Reference name="System.Xml"/>
219 <Reference name="System.Data"/>
220 <Reference name="Kds.Serialization.dll"/>
221 <Reference name="libdb_dotNET43.dll"/>
222 <Reference name="libsecondlife.dll"/>
223 <Reference name="OpenSim.Framework"/>
224 <Reference name="OpenSim.Framework.Console"/>
225 <Files>
226 <Match pattern="*.cs" recurse="true"/>
227 </Files>
228 </Project>
229
230 <!-- Grid Server Plug-ins -->
231 <Project name="OpenSim.Region.GridInterfaces.Local" path="OpenSim/Region/GridInterfaces/Local" type="Library">
232 <Configuration name="Debug">
233 <Options>
234 <OutputPath>../../../../bin/</OutputPath>
235 </Options>
236 </Configuration>
237 <Configuration name="Release">
238 <Options>
239 <OutputPath>../../../../bin/</OutputPath>
240 </Options>
241 </Configuration>
242
243 <ReferencePath>../../../../bin/</ReferencePath>
244 <Reference name="System" localCopy="false"/>
245 <Reference name="System.Xml"/>
246 <Reference name="Db4objects.Db4o.dll"/>
247 <Reference name="libsecondlife.dll"/>
248 <Reference name="OpenSim.Framework"/>
249 <Reference name="OpenSim.Framework.Console"/>
250 <Files>
251 <Match pattern="*.cs" recurse="true"/>
252 </Files>
253 </Project>
254
255 <Project name="OpenSim.Region.GridInterfaces.Remote" path="OpenSim/Region/GridInterfaces/Remote" type="Library">
256 <Configuration name="Debug">
257 <Options>
258 <OutputPath>../../../../bin/</OutputPath>
259 </Options>
260 </Configuration>
261 <Configuration name="Release">
262 <Options>
263 <OutputPath>../../../../bin/</OutputPath>
264 </Options>
265 </Configuration>
266
267 <ReferencePath>../../../../bin/</ReferencePath>
268 <Reference name="System" localCopy="false"/>
269 <Reference name="System.Xml"/>
270 <Reference name="libsecondlife.dll"/>
271 <Reference name="OpenSim.Framework"/>
272 <Reference name="OpenSim.Framework.Console"/>
273 <Reference name="XMLRPC.dll"/>
274 <Files>
275 <Match pattern="*.cs" recurse="true"/>
276 </Files>
277 </Project>
278
279 <Project name="OpenSim.Region.Physics.Manager" path="OpenSim/Region/Physics/Manager" type="Library">
280 <Configuration name="Debug">
281 <Options>
282 <OutputPath>../../../../bin/</OutputPath>
283 </Options>
284 </Configuration>
285 <Configuration name="Release">
286 <Options>
287 <OutputPath>../../../../bin/</OutputPath>
288 </Options>
289 </Configuration>
290
291 <ReferencePath>../../../../bin/</ReferencePath>
292 <Reference name="System" localCopy="false"/>
293 <Reference name="System.Xml" localCopy="false" />
294 <Reference name="Axiom.MathLib.dll" localCopy="false"/>
295 <Reference name="OpenSim.Framework" localCopy="false"/>
296 <Reference name="OpenSim.Framework.Console" localCopy="false"/>
297 <Files>
298 <Match pattern="*.cs" recurse="false"/>
299 </Files>
300 </Project>
301
302
303 <!-- Physics Plug-ins -->
304 <Project name="OpenSim.Region.Physics.BasicPhysicsPlugin" path="OpenSim/Region/Physics/BasicPhysicsPlugin" type="Library">
305 <Configuration name="Debug">
306 <Options>
307 <OutputPath>../../../../bin/Physics/</OutputPath>
308 </Options>
309 </Configuration>
310 <Configuration name="Release">
311 <Options>
312 <OutputPath>../../../../bin/Physics/</OutputPath>
313 </Options>
314 </Configuration>
315
316 <ReferencePath>../../../../bin/</ReferencePath>
317 <Reference name="System" localCopy="false"/>
318 <Reference name="Axiom.MathLib.dll" localCopy="false"/>
319 <Reference name="OpenSim.Region.Physics.Manager" localCopy="false"/>
320 <Files>
321 <Match pattern="*.cs" recurse="true"/>
322 </Files>
323 </Project>
324
325 <Project name="OpenSim.Region.Physics.PhysXPlugin" path="OpenSim/Region/Physics/PhysXPlugin" type="Library">
326 <Configuration name="Debug">
327 <Options>
328 <OutputPath>../../../../bin/Physics/</OutputPath>
329 </Options>
330 </Configuration>
331 <Configuration name="Release">
332 <Options>
333 <OutputPath>../../../../bin/Physics/</OutputPath>
334 </Options>
335 </Configuration>
336
337 <ReferencePath>../../../../bin/</ReferencePath>
338 <Reference name="System" localCopy="false"/>
339 <Reference name="Axiom.MathLib.dll" localCopy="false"/>
340 <Reference name="PhysX_Wrapper_Dotnet.dll" localCopy="false"/>
341 <Reference name="OpenSim.Region.Physics.Manager" localCopy="false"/>
342 <Files>
343 <Match pattern="*.cs" recurse="true"/>
344 </Files>
345 </Project>
346
347 <Project name="OpenSim.Region.Physics.OdePlugin" path="OpenSim/Region/Physics/OdePlugin" type="Library">
348 <Configuration name="Debug">
349 <Options>
350 <OutputPath>../../../../bin/Physics/</OutputPath>
351 </Options>
352 </Configuration>
353 <Configuration name="Release">
354 <Options>
355 <OutputPath>../../../../bin/Physics/</OutputPath>
356 </Options>
357 </Configuration>
358
359 <ReferencePath>../../../../bin/</ReferencePath>
360 <Reference name="System" localCopy="false"/>
361 <Reference name="Axiom.MathLib.dll" localCopy="false"/>
362 <Reference name="OpenSim.Region.Physics.Manager" localCopy="false"/>
363 <Reference name="Ode.NET.dll" localCopy="false" />
364
365 <Files>
366 <Match pattern="*.cs" recurse="true"/>
367 </Files>
368 </Project>
369
370 <!-- Xml Config Dll -->
371 <Project name="OpenSim.Framework.GenericConfig.Xml" path="OpenSim/Framework/GenericConfig/Xml" type="Library">
372 <Configuration name="Debug">
373 <Options>
374 <OutputPath>../../../../bin/</OutputPath>
375 </Options>
376 </Configuration>
377 <Configuration name="Release">
378 <Options>
379 <OutputPath>../../../../bin/</OutputPath>
380 </Options>
381 </Configuration>
382
383 <ReferencePath>../../../../bin/</ReferencePath>
384 <Reference name="System"/>
385 <Reference name="System.Xml"/>
386 <Reference name="OpenSim.Framework"/>
387
388 <Files>
389 <Match pattern="*.cs" recurse="true"/>
390 </Files>
391 </Project>
392
393 <!-- Terrain engine -->
394 <Project name="OpenSim.Region.Terrain.BasicTerrain" path="OpenSim/Region/Terrain.BasicTerrain" type="Library">
395 <Configuration name="Debug">
396 <Options>
397 <OutputPath>../../../bin/</OutputPath>
398 </Options>
399 </Configuration>
400 <Configuration name="Release">
401 <Options>
402 <OutputPath>../../../bin/</OutputPath>
403 </Options>
404 </Configuration>
405
406 <ReferencePath>../../../bin/</ReferencePath>
407 <Reference name="System"/>
408 <Reference name="System.Drawing"/>
409 <Reference name="System.Data"/>
410 <Reference name="System.Xml"/>
411 <Reference name="Microsoft.JScript"/>
412 <Reference name="libTerrain-BSD.dll"/>
413 <Reference name="openjpegnet.dll" />
414
415 <Files>
416 <Match pattern="*.cs" recurse="true"/>
417 </Files>
418 </Project>
419
420 <Project name="OpenSim.Framework.Data" path="OpenSim/Framework/Data" type="Library">
421 <Configuration name="Debug">
422 <Options>
423 <OutputPath>../../../bin/</OutputPath>
424 </Options>
425 </Configuration>
426 <Configuration name="Release">
427 <Options>
428 <OutputPath>../../../bin/</OutputPath>
429 </Options>
430 </Configuration>
431
432 <ReferencePath>../../../bin/</ReferencePath>
433 <Reference name="System" localCopy="false"/>
434 <Reference name="System.Xml"/>
435 <Reference name="System.Data"/>
436 <Reference name="XMLRPC.dll"/>
437 <Reference name="libsecondlife.dll"/>
438 <Files>
439 <Match pattern="*.cs" recurse="true"/>
440 </Files>
441 </Project>
442
443 <Project name="OpenSim.Framework.Data.DB4o" path="OpenSim/Framework/Data.DB4o" type="Library">
444 <Configuration name="Debug">
445 <Options>
446 <OutputPath>../../../bin/</OutputPath>
447 </Options>
448 </Configuration>
449 <Configuration name="Release">
450 <Options>
451 <OutputPath>../../../bin/</OutputPath>
452 </Options>
453 </Configuration>
454
455 <ReferencePath>../../../bin/</ReferencePath>
456 <Reference name="System" localCopy="false"/>
457 <Reference name="System.Xml"/>
458 <Reference name="System.Data"/>
459 <Reference name="OpenSim.Framework.Data"/>
460 <Reference name="libsecondlife.dll"/>
461 <Reference name="Db4objects.Db4o.dll"/>
462 <Files>
463 <Match pattern="*.cs" recurse="true"/>
464 </Files>
465 </Project>
466
467 <Project name="OpenSim.Framework.UserManagement" path="OpenSim/Framework/UserManager" type="Library">
468 <Configuration name="Debug">
469 <Options>
470 <OutputPath>../../../bin/</OutputPath>
471 </Options>
472 </Configuration>
473 <Configuration name="Release">
474 <Options>
475 <OutputPath>../../../bin/</OutputPath>
476 </Options>
477 </Configuration>
478
479 <ReferencePath>../../../bin/</ReferencePath>
480 <Reference name="System" localCopy="false"/>
481 <Reference name="System.Data" localCopy="false"/>
482 <Reference name="System.Xml" localCopy="false"/>
483 <Reference name="XMLRPC.dll"/>
484 <Reference name="OpenSim.Framework"/>
485 <Reference name="OpenSim.Framework.Console"/>
486 <Reference name="OpenSim.Framework.Data"/>
487 <Reference name="OpenSim.Framework.GenericConfig.Xml"/>
488 <Reference name="OpenSim.Framework.Servers"/>
489 <Reference name="libsecondlife.dll"/>
490 <Reference name="Db4objects.Db4o.dll"/>
491
492 <Files>
493 <Match pattern="*.cs" recurse="true"/>
494 </Files>
495 </Project>
496
497 <!-- OpenSim.Framework.Communications -->
498 <Project name="OpenSim.Framework.Communications" path="OpenSim/Framework/Communications" type="Library">
499 <Configuration name="Debug">
500 <Options>
501 <OutputPath>../../../bin/</OutputPath>
502 </Options>
503 </Configuration>
504 <Configuration name="Release">
505 <Options>
506 <OutputPath>../../../bin/</OutputPath>
507 </Options>
508 </Configuration>
509
510 <ReferencePath>../../../bin/</ReferencePath>
511 <Reference name="System"/>
512 <Reference name="System.Xml"/>
513 <Reference name="OpenSim.Framework"/>
514 <Reference name="OpenSim.Framework.Data" />
515 <Reference name="OpenSim.Framework.Servers"/>
516 <Reference name="libsecondlife.dll"/>
517
518 <Files>
519 <Match pattern="*.cs" recurse="true"/>
520 </Files>
521 </Project>
522
523 <Project name="OpenSim.Region.Communications.OGS1" path="OpenSim/Region/Communications/OGS1" type="Library">
524 <Configuration name="Debug">
525 <Options>
526 <OutputPath>../../../../bin/</OutputPath>
527 </Options>
528 </Configuration>
529 <Configuration name="Release">
530 <Options>
531 <OutputPath>../../../../bin/</OutputPath>
532 </Options>
533 </Configuration>
534
535 <ReferencePath>../../../../bin/</ReferencePath>
536 <Reference name="System"/>
537 <Reference name="System.Xml"/>
538 <Reference name="System.Data"/>
539 <Reference name="System.Runtime.Remoting"/>
540 <Reference name="OpenSim.Framework"/>
541 <Reference name="OpenSim.Framework.Console"/>
542 <Reference name="OpenSim.Framework.Servers"/>
543 <Reference name="OpenSim.Framework.Communications" />
544 <Reference name="OpenSim.Framework.Data" />
545 <Reference name="libsecondlife.dll"/>
546 <Reference name="XMLRPC.dll"/>
547
548 <Files>
549 <Match pattern="*.cs" recurse="true"/>
550 </Files>
551 </Project>
552
553 <Project name="OpenSim.Region.Communications.Local" path="OpenSim/Region/Communications/Local" type="Library">
554 <Configuration name="Debug">
555 <Options>
556 <OutputPath>../../../../bin/</OutputPath>
557 </Options>
558 </Configuration>
559 <Configuration name="Release">
560 <Options>
561 <OutputPath>../../../../bin/</OutputPath>
562 </Options>
563 </Configuration>
564
565 <ReferencePath>../../../../bin/</ReferencePath>
566 <Reference name="System"/>
567 <Reference name="System.Xml"/>
568 <Reference name="OpenSim.Framework.Communications"/>
569 <Reference name="OpenSim.Framework.UserManagement" />
570 <Reference name="OpenSim.Framework.Data" />
571 <Reference name="OpenSim.Framework.Servers"/>
572 <Reference name="libsecondlife.dll"/>
573 <Reference name="OpenSim.Framework"/>
574
575 <Files>
576 <Match pattern="*.cs" recurse="true"/>
577 </Files>
578 </Project>
579
580 <Project name="OpenSim.Region.ClientStack" path="OpenSim/Region/ClientStack" type="Library">
581 <Configuration name="Debug">
582 <Options>
583 <OutputPath>../../../bin/</OutputPath>
584 </Options>
585 </Configuration>
586 <Configuration name="Release">
587 <Options>
588 <OutputPath>../../../bin/</OutputPath>
589 </Options>
590 </Configuration>
591
592 <ReferencePath>../../../bin/</ReferencePath>
593 <Reference name="System" localCopy="false"/>
594 <Reference name="System.Xml"/>
595 <Reference name="libsecondlife.dll"/>
596 <Reference name="Axiom.MathLib.dll"/>
597 <Reference name="Db4objects.Db4o.dll"/>
598 <Reference name="OpenSim.Region.Terrain.BasicTerrain"/>
599 <Reference name="OpenSim.Framework"/>
600 <Reference name="OpenSim.Framework.Console"/>
601 <Reference name="OpenSim.Region.Physics.Manager"/>
602 <Reference name="OpenSim.Framework.Servers"/>
603 <Reference name="OpenSim.Region.Caches"/>
604 <Reference name="XMLRPC.dll"/>
605
606 <Files>
607 <Match pattern="*.cs" recurse="true"/>
608 </Files>
609 </Project>
610
611
612
613 <Project name="OpenSim.Region.Environment" path="OpenSim/Region/Environment" type="Library">
614 <Configuration name="Debug">
615 <Options>
616 <OutputPath>../../../bin/</OutputPath>
617 </Options>
618 </Configuration>
619 <Configuration name="Release">
620 <Options>
621 <OutputPath>../../../bin/</OutputPath>
622 </Options>
623 </Configuration>
624
625 <ReferencePath>../../../bin/</ReferencePath>
626 <Reference name="System" localCopy="false"/>
627 <Reference name="System.Xml"/>
628 <Reference name="libsecondlife.dll"/>
629 <Reference name="Axiom.MathLib.dll"/>
630 <Reference name="Db4objects.Db4o.dll"/>
631 <Reference name="OpenSim.Region.Terrain.BasicTerrain"/>
632 <Reference name="OpenSim.Framework"/>
633 <Reference name="OpenSim.Framework.Console"/>
634 <Reference name="OpenSim.Framework.GenericConfig.Xml"/>
635 <Reference name="OpenSim.Region.Physics.Manager"/>
636 <Reference name="OpenSim.Framework.Servers"/>
637 <Reference name="OpenSim.Region.Caches"/>
638 <Reference name="OpenSim.Region.Capabilities"/>
639 <!-- For scripting in funny languages by default -->
640 <Reference name="Microsoft.JScript"/>
641 <Reference name="XMLRPC.dll"/>
642 <Reference name="OpenSim.Framework.Communications"/>
643
644 <Files>
645 <Match pattern="*.cs" recurse="true"/>
646 </Files>
647 </Project>
648
649 <!-- OpenSim app -->
650 <Project name="OpenSim" path="OpenSim/Region/Application" type="Exe">
651 <Configuration name="Debug">
652 <Options>
653 <OutputPath>../../../bin/</OutputPath>
654 </Options>
655 </Configuration>
656 <Configuration name="Release">
657 <Options>
658 <OutputPath>../../../bin/</OutputPath>
659 </Options>
660 </Configuration>
661
662 <ReferencePath>../../../bin/</ReferencePath>
663 <Reference name="System" localCopy="false"/>
664 <Reference name="System.Xml"/>
665 <Reference name="libsecondlife.dll"/>
666 <Reference name="Axiom.MathLib.dll"/>
667 <Reference name="Db4objects.Db4o.dll"/>
668 <Reference name="OpenSim.Region.Terrain.BasicTerrain"/>
669 <Reference name="OpenSim.Framework"/>
670 <Reference name="OpenSim.Framework.Data"/>
671 <Reference name="OpenSim.Framework.Console"/>
672 <Reference name="OpenSim.Region.Physics.Manager"/>
673 <Reference name="OpenSim.Framework.Servers"/>
674 <Reference name="OpenSim.Region.Environment"/>
675 <Reference name="OpenSim.Region.ClientStack"/>
676 <Reference name="OpenSim.Framework.GenericConfig.Xml"/>
677 <Reference name="OpenSim.Framework.Communications"/>
678 <Reference name="OpenSim.Region.Communications.OGS1"/>
679 <Reference name="OpenSim.Region.Caches"/>
680 <Reference name="XMLRPC.dll"/>
681 <Reference name="OpenSim.Framework.UserManagement" />
682 <Reference name="OpenSim.Region.Communications.Local"/>
683
684 <Files>
685 <Match pattern="*.cs" recurse="true"/>
686 </Files>
687 </Project>
688
689 <!-- Scene Server API Example Apps -->
690
691 <Project name="SimpleApp" path="OpenSim/Region/Examples/SimpleApp" type="Exe">
692 <Configuration name="Debug">
693 <Options>
694 <OutputPath>../../../../bin/</OutputPath>
695 </Options>
696 </Configuration>
697 <Configuration name="Release">
698 <Options>
699 <OutputPath>../../../../bin/</OutputPath>
700 </Options>
701 </Configuration>
702
703 <ReferencePath>../../../../bin/</ReferencePath>
704 <ReferencePath>../../../../bin/Physics/</ReferencePath>
705
706 <Reference name="libsecondlife.dll"/>
707 <Reference name="System" localCopy="false"/>
708 <Reference name="System.Data.dll"/>
709 <Reference name="System.Xml"/>
710
711 <Reference name="OpenSim.Framework.Console"/>
712 <Reference name="OpenSim.Framework"/>
713 <Reference name="OpenSim.Framework.UserManagement"/>
714 <Reference name="OpenSim.Region.Physics.Manager"/>
715 <Reference name="OpenSim.Region.Capabilities"/>
716 <Reference name="XMLRPC.dll"/>
717 <Reference name="OpenSim.Region.GridInterfaces.Local"/>
718 <Reference name="OpenSim.Framework.Servers"/>
719 <Reference name="OpenSim.Framework.Communications"/>
720 <Reference name="OpenSim.Region.Communications.Local"/>
721 <Reference name="OpenSim.Region.Caches"/>
722 <Reference name="OpenSim.Region.ClientStack"/>
723 <Reference name="OpenSim.Region.Environment"/>
724
725
726 <Files>
727 <Match pattern="*.cs" recurse="true"/>
728 </Files>
729 </Project>
730
731 </Solution>
732
733
734 <Solution name="OpenGridServices" activeConfig="Debug" path="./">
735 <Configuration name="Debug">
736 <Options>
737 <CompilerDefines>TRACE;DEBUG</CompilerDefines>
738 <OptimizeCode>false</OptimizeCode>
739 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
740 <AllowUnsafe>false</AllowUnsafe>
741 <WarningLevel>4</WarningLevel>
742 <WarningsAsErrors>false</WarningsAsErrors>
743 <SuppressWarnings></SuppressWarnings>
744 <OutputPath>bin</OutputPath>
745 <DebugInformation>true</DebugInformation>
746 <IncrementalBuild>true</IncrementalBuild>
747 <NoStdLib>false</NoStdLib>
748 </Options>
749 </Configuration>
750 <Configuration name="Release">
751 <Options>
752 <CompilerDefines>TRACE</CompilerDefines>
753 <OptimizeCode>true</OptimizeCode>
754 <CheckUnderflowOverflow>false</CheckUnderflowOverflow>
755 <AllowUnsafe>false</AllowUnsafe>
756 <WarningLevel>4</WarningLevel>
757 <WarningsAsErrors>false</WarningsAsErrors>
758 <SuppressWarnings></SuppressWarnings>
759 <OutputPath>bin</OutputPath>
760 <DebugInformation>false</DebugInformation>
761 <IncrementalBuild>true</IncrementalBuild>
762 <NoStdLib>false</NoStdLib>
763 </Options>
764 </Configuration>
765
766 <Project name="OpenSim.Framework.Data.MySQL" path="OpenSim/Framework/Data.MySQL" type="Library">
767 <Configuration name="Debug">
768 <Options>
769 <OutputPath>../../../bin/</OutputPath>
770 </Options>
771 </Configuration>
772 <Configuration name="Release">
773 <Options>
774 <OutputPath>../../../bin/</OutputPath>
775 </Options>
776 </Configuration>
777
778 <ReferencePath>../../../bin/</ReferencePath>
779 <Reference name="System" localCopy="false"/>
780 <Reference name="System.Xml"/>
781 <Reference name="System.Data"/>
782 <Reference name="OpenSim.Framework.Data"/>
783 <Reference name="libsecondlife.dll"/>
784 <Reference name="MySql.Data.dll"/>
785 <Files>
786 <Match pattern="*.cs" recurse="true"/>
787 </Files>
788 </Project>
789
790 <Project name="OpenSim.Framework.Data.MSSQL" path="OpenSim/Framework/Data.MSSQL" type="Library">
791 <Configuration name="Debug">
792 <Options>
793 <OutputPath>../../../bin/</OutputPath>
794 </Options>
795 </Configuration>
796 <Configuration name="Release">
797 <Options>
798 <OutputPath>../../../bin/</OutputPath>
799 </Options>
800 </Configuration>
801
802 <ReferencePath>../../../bin/</ReferencePath>
803 <Reference name="System" localCopy="false"/>
804 <Reference name="System.Xml"/>
805 <Reference name="System.Data"/>
806 <Reference name="OpenSim.Framework.Data"/>
807 <Reference name="libsecondlife.dll"/>
808 <Files>
809 <Match pattern="*.cs" recurse="true"/>
810 </Files>
811 </Project>
812
813 <Project name="OpenSim.Framework.Data.SQLite" path="OpenSim/Framework/Data.SQLite" type="Library">
814 <Configuration name="Debug">
815 <Options>
816 <OutputPath>../../../bin/</OutputPath>
817 </Options>
818 </Configuration>
819 <Configuration name="Release">
820 <Options>
821 <OutputPath>../../../bin/</OutputPath>
822 </Options>
823 </Configuration>
824
825 <ReferencePath>../../../bin/</ReferencePath>
826 <Reference name="System" localCopy="false"/>
827 <Reference name="System.Xml"/>
828 <Reference name="System.Data"/>
829 <Reference name="System.Data.SQLite.dll"/>
830 <Reference name="OpenSim.Framework.Data"/>
831 <Reference name="libsecondlife.dll"/>
832 <Files>
833 <Match pattern="*.cs" recurse="true"/>
834 </Files>
835 </Project>
836
837 <!-- OGS projects -->
838
839 <Project name="OpenSim.Grid.Framework.Manager" path="OpenSim/Grid/Framework.Manager" type="Library">
840 <Configuration name="Debug">
841 <Options>
842 <OutputPath>../../../bin/</OutputPath>
843 </Options>
844 </Configuration>
845 <Configuration name="Release">
846 <Options>
847 <OutputPath>../../../bin/</OutputPath>
848 </Options>
849 </Configuration>
850
851 <ReferencePath>../../../bin/</ReferencePath>
852 <Reference name="System" localCopy="false"/>
853 <Reference name="OpenSim.Framework"/>
854 <Reference name="OpenSim.Framework.Servers"/>
855 <Reference name="libsecondlife.dll"/>
856 <Reference name="XMLRPC.dll"/>
857
858
859 <Files>
860 <Match pattern="*.cs" recurse="true"/>
861 </Files>
862 </Project>
863
864 <Project name="OpenSim.Grid.GridServer" path="OpenSim/Grid/GridServer" type="Exe">
865 <Configuration name="Debug">
866 <Options>
867 <OutputPath>../../../bin/</OutputPath>
868 </Options>
869 </Configuration>
870 <Configuration name="Release">
871 <Options>
872 <OutputPath>../../../bin/</OutputPath>
873 </Options>
874 </Configuration>
875
876 <ReferencePath>../../../bin/</ReferencePath>
877 <Reference name="System" localCopy="false"/>
878 <Reference name="System.Data" localCopy="false"/>
879 <Reference name="System.Xml" localCopy="false"/>
880 <Reference name="OpenSim.Framework"/>
881 <Reference name="OpenSim.Framework.Console"/>
882 <Reference name="OpenSim.Framework.Servers"/>
883 <Reference name="OpenSim.Framework.Data"/>
884 <Reference name="OpenSim.Grid.Framework.Manager"/>
885 <Reference name="OpenSim.Framework.GenericConfig.Xml"/>
886 <Reference name="libsecondlife.dll"/>
887 <Reference name="Db4objects.Db4o.dll"/>
888 <Reference name="XMLRPC.dll"/>
889
890 <Files>
891 <Match pattern="*.cs" recurse="true"/>
892 </Files>
893 </Project>
894
895 <Project name="OpenSim.Grid.AssetServer" path="OpenSim/Grid/AssetServer" type="Exe">
896 <Configuration name="Debug">
897 <Options>
898 <OutputPath>../../../bin/</OutputPath>
899 </Options>
900 </Configuration>
901 <Configuration name="Release">
902 <Options>
903 <OutputPath>../../../bin/</OutputPath>
904 </Options>
905 </Configuration>
906
907 <ReferencePath>../../../bin/</ReferencePath>
908 <Reference name="System" localCopy="false"/>
909 <Reference name="System.Data" localCopy="false"/>
910 <Reference name="System.Xml" localCopy="false"/>
911 <Reference name="OpenSim.Framework"/>
912 <Reference name="OpenSim.Framework.Console"/>
913 <Reference name="OpenSim.Framework.Servers"/>
914 <Reference name="libsecondlife.dll"/>
915 <Reference name="Db4objects.Db4o.dll"/>
916 <Reference name="XMLRPC.dll"/>
917
918 <Files>
919 <Match pattern="*.cs" recurse="true"/>
920 </Files>
921 </Project>
922
923
924 <Project name="OpenSim.Grid.UserServer" path="OpenSim/Grid/UserServer" type="Exe">
925 <Configuration name="Debug">
926 <Options>
927 <OutputPath>../../../bin/</OutputPath>
928 </Options>
929 </Configuration>
930 <Configuration name="Release">
931 <Options>
932 <OutputPath>../../../bin/</OutputPath>
933 </Options>
934 </Configuration>
935
936 <ReferencePath>../../../bin/</ReferencePath>
937 <Reference name="System" localCopy="false"/>
938 <Reference name="System.Data" localCopy="false"/>
939 <Reference name="System.Xml" localCopy="false"/>
940 <Reference name="OpenSim.Framework"/>
941 <Reference name="OpenSim.Framework.Console"/>
942 <Reference name="OpenSim.Framework.Data"/>
943 <Reference name="OpenSim.Framework.GenericConfig.Xml"/>
944 <Reference name="OpenSim.Framework.Servers"/>
945 <Reference name="OpenSim.Framework.UserManagement" />
946 <Reference name="libsecondlife.dll"/>
947 <Reference name="Db4objects.Db4o.dll"/>
948 <Reference name="XMLRPC.dll"/>
949
950 <Files>
951 <Match pattern="*.cs" recurse="true"/>
952 </Files>
953 </Project>
954
955 <Project name="OpenSim.Grid.GridServer.Config" path="OpenSim/Grid/GridServer.Config" type="Library">
956 <Configuration name="Debug">
957 <Options>
958 <OutputPath>../../../bin/</OutputPath>
959 </Options>
960 </Configuration>
961 <Configuration name="Release">
962 <Options>
963 <OutputPath>../../../bin/</OutputPath>
964 </Options>
965 </Configuration>
966
967 <ReferencePath>../../../bin/</ReferencePath>
968 <Reference name="System" localCopy="false"/>
969 <Reference name="System.Data.dll"/>
970 <Reference name="System.Xml"/>
971 <Reference name="libsecondlife.dll"/>
972 <Reference name="Db4objects.Db4o.dll"/>
973 <Reference name="OpenSim.Framework"/>
974 <Reference name="OpenSim.Framework.Console"/>
975 <Files>
976 <Match pattern="*.cs" recurse="true"/>
977 </Files>
978 </Project>
979
980 <Project name="OpenSim.Grid.UserServer.Config" path="OpenSim/Grid/UserServer.Config" type="Library">
981 <Configuration name="Debug">
982 <Options>
983 <OutputPath>../../../bin/</OutputPath>
984 </Options>
985 </Configuration>
986 <Configuration name="Release">
987 <Options>
988 <OutputPath>../../../bin/</OutputPath>
989 </Options>
990 </Configuration>
991
992 <ReferencePath>../../../bin/</ReferencePath>
993 <Reference name="System" localCopy="false"/>
994 <Reference name="System.Data.dll"/>
995 <Reference name="System.Xml"/>
996 <Reference name="libsecondlife.dll"/>
997 <Reference name="Db4objects.Db4o.dll"/>
998 <Reference name="OpenSim.Framework"/>
999 <Reference name="OpenSim.Framework.Console"/>
1000 <Files>
1001 <Match pattern="*.cs" recurse="true"/>
1002 </Files>
1003 </Project>
1004
1005 </Solution>
1006
1007
1008 <!-- Prebuild tool -->
1009 <Solution name="Prebuild" path="Prebuild/" >
1010 <Configuration name="Debug">
1011 <Options>
1012 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
1013 <OptimizeCode>false</OptimizeCode>
1014 <OutputPath>bin/Debug</OutputPath>
1015 <DebugInformation>true</DebugInformation>
1016 <SuppressWarnings>1595</SuppressWarnings>
1017 </Options>
1018 </Configuration>
1019 <Configuration name="Release">
1020 <Options>
1021 <CompilerDefines>TRACE</CompilerDefines>
1022 <OutputPath>bin/Release</OutputPath>
1023 <OptimizeCode>true</OptimizeCode>
1024 <DebugInformation>false</DebugInformation>
1025 <SuppressWarnings>1595</SuppressWarnings>
1026 </Options>
1027 </Configuration>
1028 <Project name="Prebuild" path="src/" language="C#" assemblyName="Prebuild" icon="App.ico" type="Exe" rootNamespace="Prebuild" startupObject="Prebuild.Prebuild">
1029 <Configuration name="Debug">
1030 <Options>
1031 <CompilerDefines>DEBUG;TRACE</CompilerDefines>
1032 <OptimizeCode>false</OptimizeCode>
1033 <OutputPath>..\..\bin\</OutputPath>
1034 <DebugInformation>true</DebugInformation>
1035 <KeyFile>Prebuild.snk</KeyFile>
1036 <SuppressWarnings>1595</SuppressWarnings>
1037 </Options>
1038 </Configuration>
1039 <Configuration name="Release">
1040 <Options>
1041 <CompilerDefines>TRACE</CompilerDefines>
1042 <OutputPath>..\..\bin\</OutputPath>
1043 <OptimizeCode>true</OptimizeCode>
1044 <DebugInformation>false</DebugInformation>
1045 <KeyFile>Prebuild.snk</KeyFile>
1046 <SuppressWarnings>1595</SuppressWarnings>
1047 </Options>
1048 </Configuration>
1049 <ReferencePath>../../bin/</ReferencePath>
1050 <Reference name="System.EnterpriseServices" />
1051 <Reference name="System.Xml" />
1052 <Reference name="System" />
1053 <Files>
1054 <Match pattern="App.ico" buildAction="EmbeddedResource"/>
1055 <Match path="data" pattern="prebuild-1.7.xsd" buildAction="EmbeddedResource"/>
1056 <Match pattern="*.cs" recurse="true"/>
1057 </Files>
1058 </Project>
1059 </Solution>
1060</Prebuild>
1061
1062
diff --git a/runprebuild.bat b/runprebuild.bat
new file mode 100644
index 0000000..c1e5d0e
--- /dev/null
+++ b/runprebuild.bat
@@ -0,0 +1,2 @@
1bin\Prebuild.exe /target nant
2bin\Prebuild.exe /target vs2005 \ No newline at end of file
diff --git a/share/php/generateUserFunction.php b/share/php/generateUserFunction.php
new file mode 100644
index 0000000..52ebc9f
--- /dev/null
+++ b/share/php/generateUserFunction.php
@@ -0,0 +1,46 @@
1<?php
2 // GenerateUser (v1.0)
3 // Creates a new user account, and returns it into an associative array.
4 // --
5 // $firstname - The users firstname
6 // $lastname - The users lastname
7 // $password - the users password
8 // $home - the regionhandle of the users home location
9 // --
10 function generateUser($firstname,$lastname,$password,$home) {
11 $user = array();
12 $user['UUID'] = sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
13 mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
14 mt_rand( 0, 0x0fff ) | 0x4000,
15 mt_rand( 0, 0x3fff ) | 0x8000,
16 mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) );
17 $user['username'] = $firstname;
18 $user['lastname'] = $lastname;
19
20 $user['passwordSalt'] = md5(microtime() . mt_rand(0,0xffff));
21 $user['passwordHash'] = md5(md5($password) . ":" . $user['passwordSalt']);
22
23 $user['homeRegion'] = $home;
24 $user['homeLocationX'] = 128;
25 $user['homeLocationY'] = 128;
26 $user['homeLocationZ'] = 128;
27 $user['homeLookAtX'] = 15;
28 $user['homeLookAtY'] = 15;
29 $user['homeLookAtZ'] = 15;
30
31 $user['created'] = time();
32 $user['lastLogin'] = 0;
33
34 $user['userInventoryURI'] = "http://inventory.server.tld:8004/";
35 $user['userAssetURI'] = "http://asset.server.tld:8003/";
36
37 $user['profileCanDoMask'] = 0;
38 $user['profileWantDoMask'] = 0;
39 $user['profileAboutText'] = "I am a user.";
40 $user['profileFirstText'] = "Stuff.";
41 $user['profileImage'] = sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', 0, 0, 0, 0, 0, 0, 0, 0 );
42 $user['profileFirstImage'] = sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', 0, 0, 0, 0, 0, 0, 0, 0 );
43
44 return $user;
45 }
46?> \ No newline at end of file
diff --git a/share/regions/config_0.xml b/share/regions/config_0.xml
new file mode 100644
index 0000000..a7a85ad
--- /dev/null
+++ b/share/regions/config_0.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf000" SimName="0" SimLocationX="1000" SimLocationY="1000" Datastore="store_0_x00_y00.yap" SimListenPort="9100" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1.xml b/share/regions/config_1.xml
new file mode 100644
index 0000000..1ff4fd9
--- /dev/null
+++ b/share/regions/config_1.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf001" SimName="1" SimLocationX="1001" SimLocationY="1000" Datastore="store_1_x01_y00.yap" SimListenPort="9101" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_10.xml b/share/regions/config_10.xml
new file mode 100644
index 0000000..1ce503d
--- /dev/null
+++ b/share/regions/config_10.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf00a" SimName="10" SimLocationX="1010" SimLocationY="1000" Datastore="store_10_x10_y00.yap" SimListenPort="9110" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_100.xml b/share/regions/config_100.xml
new file mode 100644
index 0000000..5377794
--- /dev/null
+++ b/share/regions/config_100.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf064" SimName="100" SimLocationX="1004" SimLocationY="1003" Datastore="store_100_x04_y06.yap" SimListenPort="9200" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1000.xml b/share/regions/config_1000.xml
new file mode 100644
index 0000000..12cc889
--- /dev/null
+++ b/share/regions/config_1000.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e8" SimName="1000" SimLocationX="1008" SimLocationY="1031" Datastore="store_1000_x08_y62.yap" SimListenPort="10100" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1001.xml b/share/regions/config_1001.xml
new file mode 100644
index 0000000..e5010b9
--- /dev/null
+++ b/share/regions/config_1001.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e9" SimName="1001" SimLocationX="1009" SimLocationY="1031" Datastore="store_1001_x09_y62.yap" SimListenPort="10101" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1002.xml b/share/regions/config_1002.xml
new file mode 100644
index 0000000..f901d80
--- /dev/null
+++ b/share/regions/config_1002.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ea" SimName="1002" SimLocationX="1010" SimLocationY="1031" Datastore="store_1002_x10_y62.yap" SimListenPort="10102" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1003.xml b/share/regions/config_1003.xml
new file mode 100644
index 0000000..5ff3dce
--- /dev/null
+++ b/share/regions/config_1003.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3eb" SimName="1003" SimLocationX="1011" SimLocationY="1031" Datastore="store_1003_x11_y62.yap" SimListenPort="10103" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1004.xml b/share/regions/config_1004.xml
new file mode 100644
index 0000000..c2b9f1e
--- /dev/null
+++ b/share/regions/config_1004.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ec" SimName="1004" SimLocationX="1012" SimLocationY="1031" Datastore="store_1004_x12_y62.yap" SimListenPort="10104" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1005.xml b/share/regions/config_1005.xml
new file mode 100644
index 0000000..5aa7a3e
--- /dev/null
+++ b/share/regions/config_1005.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ed" SimName="1005" SimLocationX="1013" SimLocationY="1031" Datastore="store_1005_x13_y62.yap" SimListenPort="10105" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1006.xml b/share/regions/config_1006.xml
new file mode 100644
index 0000000..d561403
--- /dev/null
+++ b/share/regions/config_1006.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ee" SimName="1006" SimLocationX="1014" SimLocationY="1031" Datastore="store_1006_x14_y62.yap" SimListenPort="10106" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1007.xml b/share/regions/config_1007.xml
new file mode 100644
index 0000000..afd6c8a
--- /dev/null
+++ b/share/regions/config_1007.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ef" SimName="1007" SimLocationX="1015" SimLocationY="1031" Datastore="store_1007_x15_y62.yap" SimListenPort="10107" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1008.xml b/share/regions/config_1008.xml
new file mode 100644
index 0000000..c69ac88
--- /dev/null
+++ b/share/regions/config_1008.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f0" SimName="1008" SimLocationX="1016" SimLocationY="1031" Datastore="store_1008_x00_y63.yap" SimListenPort="10108" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1009.xml b/share/regions/config_1009.xml
new file mode 100644
index 0000000..77a8cb9
--- /dev/null
+++ b/share/regions/config_1009.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f1" SimName="1009" SimLocationX="1017" SimLocationY="1031" Datastore="store_1009_x01_y63.yap" SimListenPort="10109" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_101.xml b/share/regions/config_101.xml
new file mode 100644
index 0000000..d1510b6
--- /dev/null
+++ b/share/regions/config_101.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf065" SimName="101" SimLocationX="1005" SimLocationY="1003" Datastore="store_101_x05_y06.yap" SimListenPort="9201" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1010.xml b/share/regions/config_1010.xml
new file mode 100644
index 0000000..1f371b9
--- /dev/null
+++ b/share/regions/config_1010.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f2" SimName="1010" SimLocationX="1018" SimLocationY="1031" Datastore="store_1010_x02_y63.yap" SimListenPort="10110" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1011.xml b/share/regions/config_1011.xml
new file mode 100644
index 0000000..1483495
--- /dev/null
+++ b/share/regions/config_1011.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f3" SimName="1011" SimLocationX="1019" SimLocationY="1031" Datastore="store_1011_x03_y63.yap" SimListenPort="10111" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1012.xml b/share/regions/config_1012.xml
new file mode 100644
index 0000000..d076c14
--- /dev/null
+++ b/share/regions/config_1012.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f4" SimName="1012" SimLocationX="1020" SimLocationY="1031" Datastore="store_1012_x04_y63.yap" SimListenPort="10112" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1013.xml b/share/regions/config_1013.xml
new file mode 100644
index 0000000..32d783a
--- /dev/null
+++ b/share/regions/config_1013.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f5" SimName="1013" SimLocationX="1021" SimLocationY="1031" Datastore="store_1013_x05_y63.yap" SimListenPort="10113" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1014.xml b/share/regions/config_1014.xml
new file mode 100644
index 0000000..14df9f4
--- /dev/null
+++ b/share/regions/config_1014.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f6" SimName="1014" SimLocationX="1022" SimLocationY="1031" Datastore="store_1014_x06_y63.yap" SimListenPort="10114" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1015.xml b/share/regions/config_1015.xml
new file mode 100644
index 0000000..20b2317
--- /dev/null
+++ b/share/regions/config_1015.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f7" SimName="1015" SimLocationX="1023" SimLocationY="1031" Datastore="store_1015_x07_y63.yap" SimListenPort="10115" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1016.xml b/share/regions/config_1016.xml
new file mode 100644
index 0000000..5be5dee
--- /dev/null
+++ b/share/regions/config_1016.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f8" SimName="1016" SimLocationX="1024" SimLocationY="1031" Datastore="store_1016_x08_y63.yap" SimListenPort="10116" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1017.xml b/share/regions/config_1017.xml
new file mode 100644
index 0000000..1edbc6a
--- /dev/null
+++ b/share/regions/config_1017.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3f9" SimName="1017" SimLocationX="1025" SimLocationY="1031" Datastore="store_1017_x09_y63.yap" SimListenPort="10117" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1018.xml b/share/regions/config_1018.xml
new file mode 100644
index 0000000..bee2492
--- /dev/null
+++ b/share/regions/config_1018.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3fa" SimName="1018" SimLocationX="1026" SimLocationY="1031" Datastore="store_1018_x10_y63.yap" SimListenPort="10118" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1019.xml b/share/regions/config_1019.xml
new file mode 100644
index 0000000..ae20cce
--- /dev/null
+++ b/share/regions/config_1019.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3fb" SimName="1019" SimLocationX="1027" SimLocationY="1031" Datastore="store_1019_x11_y63.yap" SimListenPort="10119" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_102.xml b/share/regions/config_102.xml
new file mode 100644
index 0000000..b163638
--- /dev/null
+++ b/share/regions/config_102.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf066" SimName="102" SimLocationX="1006" SimLocationY="1003" Datastore="store_102_x06_y06.yap" SimListenPort="9202" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1020.xml b/share/regions/config_1020.xml
new file mode 100644
index 0000000..3acbfe6
--- /dev/null
+++ b/share/regions/config_1020.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3fc" SimName="1020" SimLocationX="1028" SimLocationY="1031" Datastore="store_1020_x12_y63.yap" SimListenPort="10120" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1021.xml b/share/regions/config_1021.xml
new file mode 100644
index 0000000..33a28da
--- /dev/null
+++ b/share/regions/config_1021.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3fd" SimName="1021" SimLocationX="1029" SimLocationY="1031" Datastore="store_1021_x13_y63.yap" SimListenPort="10121" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1022.xml b/share/regions/config_1022.xml
new file mode 100644
index 0000000..bee87ff
--- /dev/null
+++ b/share/regions/config_1022.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3fe" SimName="1022" SimLocationX="1030" SimLocationY="1031" Datastore="store_1022_x14_y63.yap" SimListenPort="10122" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_1023.xml b/share/regions/config_1023.xml
new file mode 100644
index 0000000..ff90f32
--- /dev/null
+++ b/share/regions/config_1023.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ff" SimName="1023" SimLocationX="1031" SimLocationY="1031" Datastore="store_1023_x15_y63.yap" SimListenPort="10123" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-48.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_103.xml b/share/regions/config_103.xml
new file mode 100644
index 0000000..8a1e78e
--- /dev/null
+++ b/share/regions/config_103.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf067" SimName="103" SimLocationX="1007" SimLocationY="1003" Datastore="store_103_x07_y06.yap" SimListenPort="9203" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_104.xml b/share/regions/config_104.xml
new file mode 100644
index 0000000..5875dd9
--- /dev/null
+++ b/share/regions/config_104.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf068" SimName="104" SimLocationX="1008" SimLocationY="1003" Datastore="store_104_x08_y06.yap" SimListenPort="9204" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_105.xml b/share/regions/config_105.xml
new file mode 100644
index 0000000..86f6c5b
--- /dev/null
+++ b/share/regions/config_105.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf069" SimName="105" SimLocationX="1009" SimLocationY="1003" Datastore="store_105_x09_y06.yap" SimListenPort="9205" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_106.xml b/share/regions/config_106.xml
new file mode 100644
index 0000000..768a528
--- /dev/null
+++ b/share/regions/config_106.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf06a" SimName="106" SimLocationX="1010" SimLocationY="1003" Datastore="store_106_x10_y06.yap" SimListenPort="9206" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_107.xml b/share/regions/config_107.xml
new file mode 100644
index 0000000..efa0446
--- /dev/null
+++ b/share/regions/config_107.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf06b" SimName="107" SimLocationX="1011" SimLocationY="1003" Datastore="store_107_x11_y06.yap" SimListenPort="9207" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_108.xml b/share/regions/config_108.xml
new file mode 100644
index 0000000..60f1dcb
--- /dev/null
+++ b/share/regions/config_108.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf06c" SimName="108" SimLocationX="1012" SimLocationY="1003" Datastore="store_108_x12_y06.yap" SimListenPort="9208" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_109.xml b/share/regions/config_109.xml
new file mode 100644
index 0000000..2c44ff9
--- /dev/null
+++ b/share/regions/config_109.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf06d" SimName="109" SimLocationX="1013" SimLocationY="1003" Datastore="store_109_x13_y06.yap" SimListenPort="9209" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_11.xml b/share/regions/config_11.xml
new file mode 100644
index 0000000..63b3489
--- /dev/null
+++ b/share/regions/config_11.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf00b" SimName="11" SimLocationX="1011" SimLocationY="1000" Datastore="store_11_x11_y00.yap" SimListenPort="9111" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_110.xml b/share/regions/config_110.xml
new file mode 100644
index 0000000..02fbc4d
--- /dev/null
+++ b/share/regions/config_110.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf06e" SimName="110" SimLocationX="1014" SimLocationY="1003" Datastore="store_110_x14_y06.yap" SimListenPort="9210" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_111.xml b/share/regions/config_111.xml
new file mode 100644
index 0000000..4752891
--- /dev/null
+++ b/share/regions/config_111.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf06f" SimName="111" SimLocationX="1015" SimLocationY="1003" Datastore="store_111_x15_y06.yap" SimListenPort="9211" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_112.xml b/share/regions/config_112.xml
new file mode 100644
index 0000000..c672402
--- /dev/null
+++ b/share/regions/config_112.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf070" SimName="112" SimLocationX="1016" SimLocationY="1003" Datastore="store_112_x00_y07.yap" SimListenPort="9212" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_113.xml b/share/regions/config_113.xml
new file mode 100644
index 0000000..0ea4391
--- /dev/null
+++ b/share/regions/config_113.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf071" SimName="113" SimLocationX="1017" SimLocationY="1003" Datastore="store_113_x01_y07.yap" SimListenPort="9213" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_114.xml b/share/regions/config_114.xml
new file mode 100644
index 0000000..844653e
--- /dev/null
+++ b/share/regions/config_114.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf072" SimName="114" SimLocationX="1018" SimLocationY="1003" Datastore="store_114_x02_y07.yap" SimListenPort="9214" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_115.xml b/share/regions/config_115.xml
new file mode 100644
index 0000000..1672c5d
--- /dev/null
+++ b/share/regions/config_115.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf073" SimName="115" SimLocationX="1019" SimLocationY="1003" Datastore="store_115_x03_y07.yap" SimListenPort="9215" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_116.xml b/share/regions/config_116.xml
new file mode 100644
index 0000000..abb1e44
--- /dev/null
+++ b/share/regions/config_116.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf074" SimName="116" SimLocationX="1020" SimLocationY="1003" Datastore="store_116_x04_y07.yap" SimListenPort="9216" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_117.xml b/share/regions/config_117.xml
new file mode 100644
index 0000000..4f90aa4
--- /dev/null
+++ b/share/regions/config_117.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf075" SimName="117" SimLocationX="1021" SimLocationY="1003" Datastore="store_117_x05_y07.yap" SimListenPort="9217" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_118.xml b/share/regions/config_118.xml
new file mode 100644
index 0000000..5241fa6
--- /dev/null
+++ b/share/regions/config_118.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf076" SimName="118" SimLocationX="1022" SimLocationY="1003" Datastore="store_118_x06_y07.yap" SimListenPort="9218" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_119.xml b/share/regions/config_119.xml
new file mode 100644
index 0000000..8b8d85d
--- /dev/null
+++ b/share/regions/config_119.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf077" SimName="119" SimLocationX="1023" SimLocationY="1003" Datastore="store_119_x07_y07.yap" SimListenPort="9219" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_12.xml b/share/regions/config_12.xml
new file mode 100644
index 0000000..dbab016
--- /dev/null
+++ b/share/regions/config_12.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf00c" SimName="12" SimLocationX="1012" SimLocationY="1000" Datastore="store_12_x12_y00.yap" SimListenPort="9112" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_120.xml b/share/regions/config_120.xml
new file mode 100644
index 0000000..b3a3ba5
--- /dev/null
+++ b/share/regions/config_120.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf078" SimName="120" SimLocationX="1024" SimLocationY="1003" Datastore="store_120_x08_y07.yap" SimListenPort="9220" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_121.xml b/share/regions/config_121.xml
new file mode 100644
index 0000000..d204659
--- /dev/null
+++ b/share/regions/config_121.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf079" SimName="121" SimLocationX="1025" SimLocationY="1003" Datastore="store_121_x09_y07.yap" SimListenPort="9221" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_122.xml b/share/regions/config_122.xml
new file mode 100644
index 0000000..b13dc6f
--- /dev/null
+++ b/share/regions/config_122.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf07a" SimName="122" SimLocationX="1026" SimLocationY="1003" Datastore="store_122_x10_y07.yap" SimListenPort="9222" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_123.xml b/share/regions/config_123.xml
new file mode 100644
index 0000000..22a81ee
--- /dev/null
+++ b/share/regions/config_123.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf07b" SimName="123" SimLocationX="1027" SimLocationY="1003" Datastore="store_123_x11_y07.yap" SimListenPort="9223" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_124.xml b/share/regions/config_124.xml
new file mode 100644
index 0000000..5b9b153
--- /dev/null
+++ b/share/regions/config_124.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf07c" SimName="124" SimLocationX="1028" SimLocationY="1003" Datastore="store_124_x12_y07.yap" SimListenPort="9224" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_125.xml b/share/regions/config_125.xml
new file mode 100644
index 0000000..deef175
--- /dev/null
+++ b/share/regions/config_125.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf07d" SimName="125" SimLocationX="1029" SimLocationY="1003" Datastore="store_125_x13_y07.yap" SimListenPort="9225" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_126.xml b/share/regions/config_126.xml
new file mode 100644
index 0000000..705978c
--- /dev/null
+++ b/share/regions/config_126.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf07e" SimName="126" SimLocationX="1030" SimLocationY="1003" Datastore="store_126_x14_y07.yap" SimListenPort="9226" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_127.xml b/share/regions/config_127.xml
new file mode 100644
index 0000000..a6ef58c
--- /dev/null
+++ b/share/regions/config_127.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf07f" SimName="127" SimLocationX="1031" SimLocationY="1003" Datastore="store_127_x15_y07.yap" SimListenPort="9227" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y08.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_128.xml b/share/regions/config_128.xml
new file mode 100644
index 0000000..9745ea2
--- /dev/null
+++ b/share/regions/config_128.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf080" SimName="128" SimLocationX="1000" SimLocationY="1004" Datastore="store_128_x00_y08.yap" SimListenPort="9228" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_129.xml b/share/regions/config_129.xml
new file mode 100644
index 0000000..81abdde
--- /dev/null
+++ b/share/regions/config_129.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf081" SimName="129" SimLocationX="1001" SimLocationY="1004" Datastore="store_129_x01_y08.yap" SimListenPort="9229" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_13.xml b/share/regions/config_13.xml
new file mode 100644
index 0000000..879d1cc
--- /dev/null
+++ b/share/regions/config_13.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf00d" SimName="13" SimLocationX="1013" SimLocationY="1000" Datastore="store_13_x13_y00.yap" SimListenPort="9113" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_130.xml b/share/regions/config_130.xml
new file mode 100644
index 0000000..ca8f2fb
--- /dev/null
+++ b/share/regions/config_130.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf082" SimName="130" SimLocationX="1002" SimLocationY="1004" Datastore="store_130_x02_y08.yap" SimListenPort="9230" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_131.xml b/share/regions/config_131.xml
new file mode 100644
index 0000000..ae84c9e
--- /dev/null
+++ b/share/regions/config_131.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf083" SimName="131" SimLocationX="1003" SimLocationY="1004" Datastore="store_131_x03_y08.yap" SimListenPort="9231" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_132.xml b/share/regions/config_132.xml
new file mode 100644
index 0000000..88b0895
--- /dev/null
+++ b/share/regions/config_132.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf084" SimName="132" SimLocationX="1004" SimLocationY="1004" Datastore="store_132_x04_y08.yap" SimListenPort="9232" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_133.xml b/share/regions/config_133.xml
new file mode 100644
index 0000000..f03aff6
--- /dev/null
+++ b/share/regions/config_133.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf085" SimName="133" SimLocationX="1005" SimLocationY="1004" Datastore="store_133_x05_y08.yap" SimListenPort="9233" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_134.xml b/share/regions/config_134.xml
new file mode 100644
index 0000000..1dae046
--- /dev/null
+++ b/share/regions/config_134.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf086" SimName="134" SimLocationX="1006" SimLocationY="1004" Datastore="store_134_x06_y08.yap" SimListenPort="9234" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_135.xml b/share/regions/config_135.xml
new file mode 100644
index 0000000..5643a00
--- /dev/null
+++ b/share/regions/config_135.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf087" SimName="135" SimLocationX="1007" SimLocationY="1004" Datastore="store_135_x07_y08.yap" SimListenPort="9235" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_136.xml b/share/regions/config_136.xml
new file mode 100644
index 0000000..5e85f53
--- /dev/null
+++ b/share/regions/config_136.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf088" SimName="136" SimLocationX="1008" SimLocationY="1004" Datastore="store_136_x08_y08.yap" SimListenPort="9236" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_137.xml b/share/regions/config_137.xml
new file mode 100644
index 0000000..7fedbaa
--- /dev/null
+++ b/share/regions/config_137.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf089" SimName="137" SimLocationX="1009" SimLocationY="1004" Datastore="store_137_x09_y08.yap" SimListenPort="9237" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_138.xml b/share/regions/config_138.xml
new file mode 100644
index 0000000..9610d97
--- /dev/null
+++ b/share/regions/config_138.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf08a" SimName="138" SimLocationX="1010" SimLocationY="1004" Datastore="store_138_x10_y08.yap" SimListenPort="9238" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_139.xml b/share/regions/config_139.xml
new file mode 100644
index 0000000..950a9ae
--- /dev/null
+++ b/share/regions/config_139.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf08b" SimName="139" SimLocationX="1011" SimLocationY="1004" Datastore="store_139_x11_y08.yap" SimListenPort="9239" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_14.xml b/share/regions/config_14.xml
new file mode 100644
index 0000000..d737ebf
--- /dev/null
+++ b/share/regions/config_14.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf00e" SimName="14" SimLocationX="1014" SimLocationY="1000" Datastore="store_14_x14_y00.yap" SimListenPort="9114" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_140.xml b/share/regions/config_140.xml
new file mode 100644
index 0000000..9ba3d2e
--- /dev/null
+++ b/share/regions/config_140.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf08c" SimName="140" SimLocationX="1012" SimLocationY="1004" Datastore="store_140_x12_y08.yap" SimListenPort="9240" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_141.xml b/share/regions/config_141.xml
new file mode 100644
index 0000000..35f63d1
--- /dev/null
+++ b/share/regions/config_141.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf08d" SimName="141" SimLocationX="1013" SimLocationY="1004" Datastore="store_141_x13_y08.yap" SimListenPort="9241" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_142.xml b/share/regions/config_142.xml
new file mode 100644
index 0000000..35511cf
--- /dev/null
+++ b/share/regions/config_142.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf08e" SimName="142" SimLocationX="1014" SimLocationY="1004" Datastore="store_142_x14_y08.yap" SimListenPort="9242" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_143.xml b/share/regions/config_143.xml
new file mode 100644
index 0000000..83fd144
--- /dev/null
+++ b/share/regions/config_143.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf08f" SimName="143" SimLocationX="1015" SimLocationY="1004" Datastore="store_143_x15_y08.yap" SimListenPort="9243" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y07.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_144.xml b/share/regions/config_144.xml
new file mode 100644
index 0000000..559f854
--- /dev/null
+++ b/share/regions/config_144.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf090" SimName="144" SimLocationX="1016" SimLocationY="1004" Datastore="store_144_x00_y09.yap" SimListenPort="9244" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_145.xml b/share/regions/config_145.xml
new file mode 100644
index 0000000..ea2aff7
--- /dev/null
+++ b/share/regions/config_145.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf091" SimName="145" SimLocationX="1017" SimLocationY="1004" Datastore="store_145_x01_y09.yap" SimListenPort="9245" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_146.xml b/share/regions/config_146.xml
new file mode 100644
index 0000000..35308b0
--- /dev/null
+++ b/share/regions/config_146.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf092" SimName="146" SimLocationX="1018" SimLocationY="1004" Datastore="store_146_x02_y09.yap" SimListenPort="9246" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_147.xml b/share/regions/config_147.xml
new file mode 100644
index 0000000..65ffcbc
--- /dev/null
+++ b/share/regions/config_147.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf093" SimName="147" SimLocationX="1019" SimLocationY="1004" Datastore="store_147_x03_y09.yap" SimListenPort="9247" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_148.xml b/share/regions/config_148.xml
new file mode 100644
index 0000000..50e5b70
--- /dev/null
+++ b/share/regions/config_148.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf094" SimName="148" SimLocationX="1020" SimLocationY="1004" Datastore="store_148_x04_y09.yap" SimListenPort="9248" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_149.xml b/share/regions/config_149.xml
new file mode 100644
index 0000000..d75a455
--- /dev/null
+++ b/share/regions/config_149.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf095" SimName="149" SimLocationX="1021" SimLocationY="1004" Datastore="store_149_x05_y09.yap" SimListenPort="9249" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_15.xml b/share/regions/config_15.xml
new file mode 100644
index 0000000..9caeae7
--- /dev/null
+++ b/share/regions/config_15.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf00f" SimName="15" SimLocationX="1015" SimLocationY="1000" Datastore="store_15_x15_y00.yap" SimListenPort="9115" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_150.xml b/share/regions/config_150.xml
new file mode 100644
index 0000000..2ae5b9f
--- /dev/null
+++ b/share/regions/config_150.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf096" SimName="150" SimLocationX="1022" SimLocationY="1004" Datastore="store_150_x06_y09.yap" SimListenPort="9250" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_151.xml b/share/regions/config_151.xml
new file mode 100644
index 0000000..bc2bdcd
--- /dev/null
+++ b/share/regions/config_151.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf097" SimName="151" SimLocationX="1023" SimLocationY="1004" Datastore="store_151_x07_y09.yap" SimListenPort="9251" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_152.xml b/share/regions/config_152.xml
new file mode 100644
index 0000000..b641d91
--- /dev/null
+++ b/share/regions/config_152.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf098" SimName="152" SimLocationX="1024" SimLocationY="1004" Datastore="store_152_x08_y09.yap" SimListenPort="9252" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_153.xml b/share/regions/config_153.xml
new file mode 100644
index 0000000..f308946
--- /dev/null
+++ b/share/regions/config_153.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf099" SimName="153" SimLocationX="1025" SimLocationY="1004" Datastore="store_153_x09_y09.yap" SimListenPort="9253" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_154.xml b/share/regions/config_154.xml
new file mode 100644
index 0000000..16a0185
--- /dev/null
+++ b/share/regions/config_154.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf09a" SimName="154" SimLocationX="1026" SimLocationY="1004" Datastore="store_154_x10_y09.yap" SimListenPort="9254" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_155.xml b/share/regions/config_155.xml
new file mode 100644
index 0000000..d026ca7
--- /dev/null
+++ b/share/regions/config_155.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf09b" SimName="155" SimLocationX="1027" SimLocationY="1004" Datastore="store_155_x11_y09.yap" SimListenPort="9255" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_156.xml b/share/regions/config_156.xml
new file mode 100644
index 0000000..1565d11
--- /dev/null
+++ b/share/regions/config_156.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf09c" SimName="156" SimLocationX="1028" SimLocationY="1004" Datastore="store_156_x12_y09.yap" SimListenPort="9256" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_157.xml b/share/regions/config_157.xml
new file mode 100644
index 0000000..6883214
--- /dev/null
+++ b/share/regions/config_157.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf09d" SimName="157" SimLocationX="1029" SimLocationY="1004" Datastore="store_157_x13_y09.yap" SimListenPort="9257" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_158.xml b/share/regions/config_158.xml
new file mode 100644
index 0000000..f8d2d67
--- /dev/null
+++ b/share/regions/config_158.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf09e" SimName="158" SimLocationX="1030" SimLocationY="1004" Datastore="store_158_x14_y09.yap" SimListenPort="9258" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_159.xml b/share/regions/config_159.xml
new file mode 100644
index 0000000..95147b4
--- /dev/null
+++ b/share/regions/config_159.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf09f" SimName="159" SimLocationX="1031" SimLocationY="1004" Datastore="store_159_x15_y09.yap" SimListenPort="9259" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y06.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_16.xml b/share/regions/config_16.xml
new file mode 100644
index 0000000..92bb4a9
--- /dev/null
+++ b/share/regions/config_16.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf010" SimName="16" SimLocationX="1016" SimLocationY="1000" Datastore="store_16_x00_y01.yap" SimListenPort="9116" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_160.xml b/share/regions/config_160.xml
new file mode 100644
index 0000000..6590dd3
--- /dev/null
+++ b/share/regions/config_160.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a0" SimName="160" SimLocationX="1000" SimLocationY="1005" Datastore="store_160_x00_y10.yap" SimListenPort="9260" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_161.xml b/share/regions/config_161.xml
new file mode 100644
index 0000000..77f9205
--- /dev/null
+++ b/share/regions/config_161.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a1" SimName="161" SimLocationX="1001" SimLocationY="1005" Datastore="store_161_x01_y10.yap" SimListenPort="9261" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_162.xml b/share/regions/config_162.xml
new file mode 100644
index 0000000..0b33247
--- /dev/null
+++ b/share/regions/config_162.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a2" SimName="162" SimLocationX="1002" SimLocationY="1005" Datastore="store_162_x02_y10.yap" SimListenPort="9262" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_163.xml b/share/regions/config_163.xml
new file mode 100644
index 0000000..f6d1d2e
--- /dev/null
+++ b/share/regions/config_163.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a3" SimName="163" SimLocationX="1003" SimLocationY="1005" Datastore="store_163_x03_y10.yap" SimListenPort="9263" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_164.xml b/share/regions/config_164.xml
new file mode 100644
index 0000000..92e4731
--- /dev/null
+++ b/share/regions/config_164.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a4" SimName="164" SimLocationX="1004" SimLocationY="1005" Datastore="store_164_x04_y10.yap" SimListenPort="9264" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_165.xml b/share/regions/config_165.xml
new file mode 100644
index 0000000..d7b8613
--- /dev/null
+++ b/share/regions/config_165.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a5" SimName="165" SimLocationX="1005" SimLocationY="1005" Datastore="store_165_x05_y10.yap" SimListenPort="9265" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_166.xml b/share/regions/config_166.xml
new file mode 100644
index 0000000..61aa9d9
--- /dev/null
+++ b/share/regions/config_166.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a6" SimName="166" SimLocationX="1006" SimLocationY="1005" Datastore="store_166_x06_y10.yap" SimListenPort="9266" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_167.xml b/share/regions/config_167.xml
new file mode 100644
index 0000000..96170d7
--- /dev/null
+++ b/share/regions/config_167.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a7" SimName="167" SimLocationX="1007" SimLocationY="1005" Datastore="store_167_x07_y10.yap" SimListenPort="9267" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_168.xml b/share/regions/config_168.xml
new file mode 100644
index 0000000..b0d3929
--- /dev/null
+++ b/share/regions/config_168.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a8" SimName="168" SimLocationX="1008" SimLocationY="1005" Datastore="store_168_x08_y10.yap" SimListenPort="9268" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_169.xml b/share/regions/config_169.xml
new file mode 100644
index 0000000..aeef543
--- /dev/null
+++ b/share/regions/config_169.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0a9" SimName="169" SimLocationX="1009" SimLocationY="1005" Datastore="store_169_x09_y10.yap" SimListenPort="9269" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_17.xml b/share/regions/config_17.xml
new file mode 100644
index 0000000..5265775
--- /dev/null
+++ b/share/regions/config_17.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf011" SimName="17" SimLocationX="1017" SimLocationY="1000" Datastore="store_17_x01_y01.yap" SimListenPort="9117" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_170.xml b/share/regions/config_170.xml
new file mode 100644
index 0000000..37462f7
--- /dev/null
+++ b/share/regions/config_170.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0aa" SimName="170" SimLocationX="1010" SimLocationY="1005" Datastore="store_170_x10_y10.yap" SimListenPort="9270" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_171.xml b/share/regions/config_171.xml
new file mode 100644
index 0000000..51c5e30
--- /dev/null
+++ b/share/regions/config_171.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ab" SimName="171" SimLocationX="1011" SimLocationY="1005" Datastore="store_171_x11_y10.yap" SimListenPort="9271" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_172.xml b/share/regions/config_172.xml
new file mode 100644
index 0000000..6560be5
--- /dev/null
+++ b/share/regions/config_172.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ac" SimName="172" SimLocationX="1012" SimLocationY="1005" Datastore="store_172_x12_y10.yap" SimListenPort="9272" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_173.xml b/share/regions/config_173.xml
new file mode 100644
index 0000000..12a448d
--- /dev/null
+++ b/share/regions/config_173.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ad" SimName="173" SimLocationX="1013" SimLocationY="1005" Datastore="store_173_x13_y10.yap" SimListenPort="9273" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_174.xml b/share/regions/config_174.xml
new file mode 100644
index 0000000..5897c49
--- /dev/null
+++ b/share/regions/config_174.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ae" SimName="174" SimLocationX="1014" SimLocationY="1005" Datastore="store_174_x14_y10.yap" SimListenPort="9274" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_175.xml b/share/regions/config_175.xml
new file mode 100644
index 0000000..79e0808
--- /dev/null
+++ b/share/regions/config_175.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0af" SimName="175" SimLocationX="1015" SimLocationY="1005" Datastore="store_175_x15_y10.yap" SimListenPort="9275" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y05.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_176.xml b/share/regions/config_176.xml
new file mode 100644
index 0000000..26845f3
--- /dev/null
+++ b/share/regions/config_176.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b0" SimName="176" SimLocationX="1016" SimLocationY="1005" Datastore="store_176_x00_y11.yap" SimListenPort="9276" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_177.xml b/share/regions/config_177.xml
new file mode 100644
index 0000000..e87dc0d
--- /dev/null
+++ b/share/regions/config_177.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b1" SimName="177" SimLocationX="1017" SimLocationY="1005" Datastore="store_177_x01_y11.yap" SimListenPort="9277" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_178.xml b/share/regions/config_178.xml
new file mode 100644
index 0000000..f82a47d
--- /dev/null
+++ b/share/regions/config_178.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b2" SimName="178" SimLocationX="1018" SimLocationY="1005" Datastore="store_178_x02_y11.yap" SimListenPort="9278" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_179.xml b/share/regions/config_179.xml
new file mode 100644
index 0000000..483f97f
--- /dev/null
+++ b/share/regions/config_179.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b3" SimName="179" SimLocationX="1019" SimLocationY="1005" Datastore="store_179_x03_y11.yap" SimListenPort="9279" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_18.xml b/share/regions/config_18.xml
new file mode 100644
index 0000000..ea486a1
--- /dev/null
+++ b/share/regions/config_18.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf012" SimName="18" SimLocationX="1018" SimLocationY="1000" Datastore="store_18_x02_y01.yap" SimListenPort="9118" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_180.xml b/share/regions/config_180.xml
new file mode 100644
index 0000000..21a0ade
--- /dev/null
+++ b/share/regions/config_180.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b4" SimName="180" SimLocationX="1020" SimLocationY="1005" Datastore="store_180_x04_y11.yap" SimListenPort="9280" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_181.xml b/share/regions/config_181.xml
new file mode 100644
index 0000000..c8043c7
--- /dev/null
+++ b/share/regions/config_181.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b5" SimName="181" SimLocationX="1021" SimLocationY="1005" Datastore="store_181_x05_y11.yap" SimListenPort="9281" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_182.xml b/share/regions/config_182.xml
new file mode 100644
index 0000000..b1a35f6
--- /dev/null
+++ b/share/regions/config_182.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b6" SimName="182" SimLocationX="1022" SimLocationY="1005" Datastore="store_182_x06_y11.yap" SimListenPort="9282" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_183.xml b/share/regions/config_183.xml
new file mode 100644
index 0000000..0d4e7dc
--- /dev/null
+++ b/share/regions/config_183.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b7" SimName="183" SimLocationX="1023" SimLocationY="1005" Datastore="store_183_x07_y11.yap" SimListenPort="9283" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_184.xml b/share/regions/config_184.xml
new file mode 100644
index 0000000..475f411
--- /dev/null
+++ b/share/regions/config_184.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b8" SimName="184" SimLocationX="1024" SimLocationY="1005" Datastore="store_184_x08_y11.yap" SimListenPort="9284" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_185.xml b/share/regions/config_185.xml
new file mode 100644
index 0000000..7501e1a
--- /dev/null
+++ b/share/regions/config_185.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0b9" SimName="185" SimLocationX="1025" SimLocationY="1005" Datastore="store_185_x09_y11.yap" SimListenPort="9285" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_186.xml b/share/regions/config_186.xml
new file mode 100644
index 0000000..744e6d1
--- /dev/null
+++ b/share/regions/config_186.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ba" SimName="186" SimLocationX="1026" SimLocationY="1005" Datastore="store_186_x10_y11.yap" SimListenPort="9286" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_187.xml b/share/regions/config_187.xml
new file mode 100644
index 0000000..3e063c9
--- /dev/null
+++ b/share/regions/config_187.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0bb" SimName="187" SimLocationX="1027" SimLocationY="1005" Datastore="store_187_x11_y11.yap" SimListenPort="9287" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_188.xml b/share/regions/config_188.xml
new file mode 100644
index 0000000..89707ab
--- /dev/null
+++ b/share/regions/config_188.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0bc" SimName="188" SimLocationX="1028" SimLocationY="1005" Datastore="store_188_x12_y11.yap" SimListenPort="9288" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_189.xml b/share/regions/config_189.xml
new file mode 100644
index 0000000..6aaa491
--- /dev/null
+++ b/share/regions/config_189.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0bd" SimName="189" SimLocationX="1029" SimLocationY="1005" Datastore="store_189_x13_y11.yap" SimListenPort="9289" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_19.xml b/share/regions/config_19.xml
new file mode 100644
index 0000000..5f5ca6f
--- /dev/null
+++ b/share/regions/config_19.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf013" SimName="19" SimLocationX="1019" SimLocationY="1000" Datastore="store_19_x03_y01.yap" SimListenPort="9119" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_190.xml b/share/regions/config_190.xml
new file mode 100644
index 0000000..b37cce9
--- /dev/null
+++ b/share/regions/config_190.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0be" SimName="190" SimLocationX="1030" SimLocationY="1005" Datastore="store_190_x14_y11.yap" SimListenPort="9290" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_191.xml b/share/regions/config_191.xml
new file mode 100644
index 0000000..774b607
--- /dev/null
+++ b/share/regions/config_191.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0bf" SimName="191" SimLocationX="1031" SimLocationY="1005" Datastore="store_191_x15_y11.yap" SimListenPort="9291" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y04.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_192.xml b/share/regions/config_192.xml
new file mode 100644
index 0000000..8efd00f
--- /dev/null
+++ b/share/regions/config_192.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c0" SimName="192" SimLocationX="1000" SimLocationY="1006" Datastore="store_192_x00_y12.yap" SimListenPort="9292" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_193.xml b/share/regions/config_193.xml
new file mode 100644
index 0000000..a60cf3c
--- /dev/null
+++ b/share/regions/config_193.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c1" SimName="193" SimLocationX="1001" SimLocationY="1006" Datastore="store_193_x01_y12.yap" SimListenPort="9293" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_194.xml b/share/regions/config_194.xml
new file mode 100644
index 0000000..fabecfe
--- /dev/null
+++ b/share/regions/config_194.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c2" SimName="194" SimLocationX="1002" SimLocationY="1006" Datastore="store_194_x02_y12.yap" SimListenPort="9294" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_195.xml b/share/regions/config_195.xml
new file mode 100644
index 0000000..c83ab69
--- /dev/null
+++ b/share/regions/config_195.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c3" SimName="195" SimLocationX="1003" SimLocationY="1006" Datastore="store_195_x03_y12.yap" SimListenPort="9295" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_196.xml b/share/regions/config_196.xml
new file mode 100644
index 0000000..40cd901
--- /dev/null
+++ b/share/regions/config_196.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c4" SimName="196" SimLocationX="1004" SimLocationY="1006" Datastore="store_196_x04_y12.yap" SimListenPort="9296" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_197.xml b/share/regions/config_197.xml
new file mode 100644
index 0000000..d1cd6e9
--- /dev/null
+++ b/share/regions/config_197.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c5" SimName="197" SimLocationX="1005" SimLocationY="1006" Datastore="store_197_x05_y12.yap" SimListenPort="9297" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_198.xml b/share/regions/config_198.xml
new file mode 100644
index 0000000..f66b8c3
--- /dev/null
+++ b/share/regions/config_198.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c6" SimName="198" SimLocationX="1006" SimLocationY="1006" Datastore="store_198_x06_y12.yap" SimListenPort="9298" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_199.xml b/share/regions/config_199.xml
new file mode 100644
index 0000000..e660b53
--- /dev/null
+++ b/share/regions/config_199.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c7" SimName="199" SimLocationX="1007" SimLocationY="1006" Datastore="store_199_x07_y12.yap" SimListenPort="9299" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_2.xml b/share/regions/config_2.xml
new file mode 100644
index 0000000..83cb5aa
--- /dev/null
+++ b/share/regions/config_2.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf002" SimName="2" SimLocationX="1002" SimLocationY="1000" Datastore="store_2_x02_y00.yap" SimListenPort="9102" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_20.xml b/share/regions/config_20.xml
new file mode 100644
index 0000000..adbee55
--- /dev/null
+++ b/share/regions/config_20.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf014" SimName="20" SimLocationX="1020" SimLocationY="1000" Datastore="store_20_x04_y01.yap" SimListenPort="9120" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_200.xml b/share/regions/config_200.xml
new file mode 100644
index 0000000..9911037
--- /dev/null
+++ b/share/regions/config_200.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c8" SimName="200" SimLocationX="1008" SimLocationY="1006" Datastore="store_200_x08_y12.yap" SimListenPort="9300" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_201.xml b/share/regions/config_201.xml
new file mode 100644
index 0000000..3c73666
--- /dev/null
+++ b/share/regions/config_201.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0c9" SimName="201" SimLocationX="1009" SimLocationY="1006" Datastore="store_201_x09_y12.yap" SimListenPort="9301" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_202.xml b/share/regions/config_202.xml
new file mode 100644
index 0000000..baab769
--- /dev/null
+++ b/share/regions/config_202.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ca" SimName="202" SimLocationX="1010" SimLocationY="1006" Datastore="store_202_x10_y12.yap" SimListenPort="9302" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_203.xml b/share/regions/config_203.xml
new file mode 100644
index 0000000..a4aa865
--- /dev/null
+++ b/share/regions/config_203.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0cb" SimName="203" SimLocationX="1011" SimLocationY="1006" Datastore="store_203_x11_y12.yap" SimListenPort="9303" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_204.xml b/share/regions/config_204.xml
new file mode 100644
index 0000000..f5e62b0
--- /dev/null
+++ b/share/regions/config_204.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0cc" SimName="204" SimLocationX="1012" SimLocationY="1006" Datastore="store_204_x12_y12.yap" SimListenPort="9304" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_205.xml b/share/regions/config_205.xml
new file mode 100644
index 0000000..daafd9a
--- /dev/null
+++ b/share/regions/config_205.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0cd" SimName="205" SimLocationX="1013" SimLocationY="1006" Datastore="store_205_x13_y12.yap" SimListenPort="9305" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_206.xml b/share/regions/config_206.xml
new file mode 100644
index 0000000..951303b
--- /dev/null
+++ b/share/regions/config_206.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ce" SimName="206" SimLocationX="1014" SimLocationY="1006" Datastore="store_206_x14_y12.yap" SimListenPort="9306" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_207.xml b/share/regions/config_207.xml
new file mode 100644
index 0000000..6978761
--- /dev/null
+++ b/share/regions/config_207.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0cf" SimName="207" SimLocationX="1015" SimLocationY="1006" Datastore="store_207_x15_y12.yap" SimListenPort="9307" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y03.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_208.xml b/share/regions/config_208.xml
new file mode 100644
index 0000000..beb4192
--- /dev/null
+++ b/share/regions/config_208.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d0" SimName="208" SimLocationX="1016" SimLocationY="1006" Datastore="store_208_x00_y13.yap" SimListenPort="9308" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_209.xml b/share/regions/config_209.xml
new file mode 100644
index 0000000..0d31497
--- /dev/null
+++ b/share/regions/config_209.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d1" SimName="209" SimLocationX="1017" SimLocationY="1006" Datastore="store_209_x01_y13.yap" SimListenPort="9309" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_21.xml b/share/regions/config_21.xml
new file mode 100644
index 0000000..bc6d3c8
--- /dev/null
+++ b/share/regions/config_21.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf015" SimName="21" SimLocationX="1021" SimLocationY="1000" Datastore="store_21_x05_y01.yap" SimListenPort="9121" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_210.xml b/share/regions/config_210.xml
new file mode 100644
index 0000000..fefc765
--- /dev/null
+++ b/share/regions/config_210.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d2" SimName="210" SimLocationX="1018" SimLocationY="1006" Datastore="store_210_x02_y13.yap" SimListenPort="9310" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_211.xml b/share/regions/config_211.xml
new file mode 100644
index 0000000..7988165
--- /dev/null
+++ b/share/regions/config_211.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d3" SimName="211" SimLocationX="1019" SimLocationY="1006" Datastore="store_211_x03_y13.yap" SimListenPort="9311" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_212.xml b/share/regions/config_212.xml
new file mode 100644
index 0000000..85dbe0d
--- /dev/null
+++ b/share/regions/config_212.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d4" SimName="212" SimLocationX="1020" SimLocationY="1006" Datastore="store_212_x04_y13.yap" SimListenPort="9312" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_213.xml b/share/regions/config_213.xml
new file mode 100644
index 0000000..548b527
--- /dev/null
+++ b/share/regions/config_213.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d5" SimName="213" SimLocationX="1021" SimLocationY="1006" Datastore="store_213_x05_y13.yap" SimListenPort="9313" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_214.xml b/share/regions/config_214.xml
new file mode 100644
index 0000000..40d84e4
--- /dev/null
+++ b/share/regions/config_214.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d6" SimName="214" SimLocationX="1022" SimLocationY="1006" Datastore="store_214_x06_y13.yap" SimListenPort="9314" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_215.xml b/share/regions/config_215.xml
new file mode 100644
index 0000000..d412233
--- /dev/null
+++ b/share/regions/config_215.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d7" SimName="215" SimLocationX="1023" SimLocationY="1006" Datastore="store_215_x07_y13.yap" SimListenPort="9315" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_216.xml b/share/regions/config_216.xml
new file mode 100644
index 0000000..f404b28
--- /dev/null
+++ b/share/regions/config_216.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d8" SimName="216" SimLocationX="1024" SimLocationY="1006" Datastore="store_216_x08_y13.yap" SimListenPort="9316" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_217.xml b/share/regions/config_217.xml
new file mode 100644
index 0000000..707bf97
--- /dev/null
+++ b/share/regions/config_217.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0d9" SimName="217" SimLocationX="1025" SimLocationY="1006" Datastore="store_217_x09_y13.yap" SimListenPort="9317" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_218.xml b/share/regions/config_218.xml
new file mode 100644
index 0000000..656c3e0
--- /dev/null
+++ b/share/regions/config_218.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0da" SimName="218" SimLocationX="1026" SimLocationY="1006" Datastore="store_218_x10_y13.yap" SimListenPort="9318" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_219.xml b/share/regions/config_219.xml
new file mode 100644
index 0000000..0dd3407
--- /dev/null
+++ b/share/regions/config_219.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0db" SimName="219" SimLocationX="1027" SimLocationY="1006" Datastore="store_219_x11_y13.yap" SimListenPort="9319" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_22.xml b/share/regions/config_22.xml
new file mode 100644
index 0000000..c474cf8
--- /dev/null
+++ b/share/regions/config_22.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf016" SimName="22" SimLocationX="1022" SimLocationY="1000" Datastore="store_22_x06_y01.yap" SimListenPort="9122" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_220.xml b/share/regions/config_220.xml
new file mode 100644
index 0000000..4518a89
--- /dev/null
+++ b/share/regions/config_220.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0dc" SimName="220" SimLocationX="1028" SimLocationY="1006" Datastore="store_220_x12_y13.yap" SimListenPort="9320" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_221.xml b/share/regions/config_221.xml
new file mode 100644
index 0000000..85c4523
--- /dev/null
+++ b/share/regions/config_221.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0dd" SimName="221" SimLocationX="1029" SimLocationY="1006" Datastore="store_221_x13_y13.yap" SimListenPort="9321" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_222.xml b/share/regions/config_222.xml
new file mode 100644
index 0000000..0985eb7
--- /dev/null
+++ b/share/regions/config_222.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0de" SimName="222" SimLocationX="1030" SimLocationY="1006" Datastore="store_222_x14_y13.yap" SimListenPort="9322" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_223.xml b/share/regions/config_223.xml
new file mode 100644
index 0000000..d0884d1
--- /dev/null
+++ b/share/regions/config_223.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0df" SimName="223" SimLocationX="1031" SimLocationY="1006" Datastore="store_223_x15_y13.yap" SimListenPort="9323" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y02.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_224.xml b/share/regions/config_224.xml
new file mode 100644
index 0000000..9c8f651
--- /dev/null
+++ b/share/regions/config_224.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e0" SimName="224" SimLocationX="1000" SimLocationY="1007" Datastore="store_224_x00_y14.yap" SimListenPort="9324" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_225.xml b/share/regions/config_225.xml
new file mode 100644
index 0000000..c5dbf32
--- /dev/null
+++ b/share/regions/config_225.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e1" SimName="225" SimLocationX="1001" SimLocationY="1007" Datastore="store_225_x01_y14.yap" SimListenPort="9325" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_226.xml b/share/regions/config_226.xml
new file mode 100644
index 0000000..7d831d1
--- /dev/null
+++ b/share/regions/config_226.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e2" SimName="226" SimLocationX="1002" SimLocationY="1007" Datastore="store_226_x02_y14.yap" SimListenPort="9326" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_227.xml b/share/regions/config_227.xml
new file mode 100644
index 0000000..d614e38
--- /dev/null
+++ b/share/regions/config_227.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e3" SimName="227" SimLocationX="1003" SimLocationY="1007" Datastore="store_227_x03_y14.yap" SimListenPort="9327" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_228.xml b/share/regions/config_228.xml
new file mode 100644
index 0000000..8ad7b59
--- /dev/null
+++ b/share/regions/config_228.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e4" SimName="228" SimLocationX="1004" SimLocationY="1007" Datastore="store_228_x04_y14.yap" SimListenPort="9328" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_229.xml b/share/regions/config_229.xml
new file mode 100644
index 0000000..6a56d2a
--- /dev/null
+++ b/share/regions/config_229.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e5" SimName="229" SimLocationX="1005" SimLocationY="1007" Datastore="store_229_x05_y14.yap" SimListenPort="9329" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_23.xml b/share/regions/config_23.xml
new file mode 100644
index 0000000..7d29fec
--- /dev/null
+++ b/share/regions/config_23.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf017" SimName="23" SimLocationX="1023" SimLocationY="1000" Datastore="store_23_x07_y01.yap" SimListenPort="9123" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_230.xml b/share/regions/config_230.xml
new file mode 100644
index 0000000..8fcb606
--- /dev/null
+++ b/share/regions/config_230.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e6" SimName="230" SimLocationX="1006" SimLocationY="1007" Datastore="store_230_x06_y14.yap" SimListenPort="9330" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_231.xml b/share/regions/config_231.xml
new file mode 100644
index 0000000..c024242
--- /dev/null
+++ b/share/regions/config_231.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e7" SimName="231" SimLocationX="1007" SimLocationY="1007" Datastore="store_231_x07_y14.yap" SimListenPort="9331" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_232.xml b/share/regions/config_232.xml
new file mode 100644
index 0000000..f55b7f0
--- /dev/null
+++ b/share/regions/config_232.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e8" SimName="232" SimLocationX="1008" SimLocationY="1007" Datastore="store_232_x08_y14.yap" SimListenPort="9332" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_233.xml b/share/regions/config_233.xml
new file mode 100644
index 0000000..9ba5de1
--- /dev/null
+++ b/share/regions/config_233.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0e9" SimName="233" SimLocationX="1009" SimLocationY="1007" Datastore="store_233_x09_y14.yap" SimListenPort="9333" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_234.xml b/share/regions/config_234.xml
new file mode 100644
index 0000000..7f5164f
--- /dev/null
+++ b/share/regions/config_234.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ea" SimName="234" SimLocationX="1010" SimLocationY="1007" Datastore="store_234_x10_y14.yap" SimListenPort="9334" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_235.xml b/share/regions/config_235.xml
new file mode 100644
index 0000000..6a8292c
--- /dev/null
+++ b/share/regions/config_235.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0eb" SimName="235" SimLocationX="1011" SimLocationY="1007" Datastore="store_235_x11_y14.yap" SimListenPort="9335" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_236.xml b/share/regions/config_236.xml
new file mode 100644
index 0000000..f99af33
--- /dev/null
+++ b/share/regions/config_236.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ec" SimName="236" SimLocationX="1012" SimLocationY="1007" Datastore="store_236_x12_y14.yap" SimListenPort="9336" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_237.xml b/share/regions/config_237.xml
new file mode 100644
index 0000000..3c8199f
--- /dev/null
+++ b/share/regions/config_237.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ed" SimName="237" SimLocationX="1013" SimLocationY="1007" Datastore="store_237_x13_y14.yap" SimListenPort="9337" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_238.xml b/share/regions/config_238.xml
new file mode 100644
index 0000000..0144491
--- /dev/null
+++ b/share/regions/config_238.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ee" SimName="238" SimLocationX="1014" SimLocationY="1007" Datastore="store_238_x14_y14.yap" SimListenPort="9338" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_239.xml b/share/regions/config_239.xml
new file mode 100644
index 0000000..9bf8bf5
--- /dev/null
+++ b/share/regions/config_239.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ef" SimName="239" SimLocationX="1015" SimLocationY="1007" Datastore="store_239_x15_y14.yap" SimListenPort="9339" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y01.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_24.xml b/share/regions/config_24.xml
new file mode 100644
index 0000000..c6f1752
--- /dev/null
+++ b/share/regions/config_24.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf018" SimName="24" SimLocationX="1024" SimLocationY="1000" Datastore="store_24_x08_y01.yap" SimListenPort="9124" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_240.xml b/share/regions/config_240.xml
new file mode 100644
index 0000000..ad7181a
--- /dev/null
+++ b/share/regions/config_240.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f0" SimName="240" SimLocationX="1016" SimLocationY="1007" Datastore="store_240_x00_y15.yap" SimListenPort="9340" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_241.xml b/share/regions/config_241.xml
new file mode 100644
index 0000000..3fd187f
--- /dev/null
+++ b/share/regions/config_241.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f1" SimName="241" SimLocationX="1017" SimLocationY="1007" Datastore="store_241_x01_y15.yap" SimListenPort="9341" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_242.xml b/share/regions/config_242.xml
new file mode 100644
index 0000000..6d265ef
--- /dev/null
+++ b/share/regions/config_242.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f2" SimName="242" SimLocationX="1018" SimLocationY="1007" Datastore="store_242_x02_y15.yap" SimListenPort="9342" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_243.xml b/share/regions/config_243.xml
new file mode 100644
index 0000000..a3c7508
--- /dev/null
+++ b/share/regions/config_243.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f3" SimName="243" SimLocationX="1019" SimLocationY="1007" Datastore="store_243_x03_y15.yap" SimListenPort="9343" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_244.xml b/share/regions/config_244.xml
new file mode 100644
index 0000000..b36846d
--- /dev/null
+++ b/share/regions/config_244.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f4" SimName="244" SimLocationX="1020" SimLocationY="1007" Datastore="store_244_x04_y15.yap" SimListenPort="9344" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_245.xml b/share/regions/config_245.xml
new file mode 100644
index 0000000..22f57a6
--- /dev/null
+++ b/share/regions/config_245.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f5" SimName="245" SimLocationX="1021" SimLocationY="1007" Datastore="store_245_x05_y15.yap" SimListenPort="9345" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_246.xml b/share/regions/config_246.xml
new file mode 100644
index 0000000..9ead36c
--- /dev/null
+++ b/share/regions/config_246.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f6" SimName="246" SimLocationX="1022" SimLocationY="1007" Datastore="store_246_x06_y15.yap" SimListenPort="9346" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_247.xml b/share/regions/config_247.xml
new file mode 100644
index 0000000..7bcb4d4
--- /dev/null
+++ b/share/regions/config_247.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f7" SimName="247" SimLocationX="1023" SimLocationY="1007" Datastore="store_247_x07_y15.yap" SimListenPort="9347" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_248.xml b/share/regions/config_248.xml
new file mode 100644
index 0000000..48232f1
--- /dev/null
+++ b/share/regions/config_248.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f8" SimName="248" SimLocationX="1024" SimLocationY="1007" Datastore="store_248_x08_y15.yap" SimListenPort="9348" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_249.xml b/share/regions/config_249.xml
new file mode 100644
index 0000000..6d62588
--- /dev/null
+++ b/share/regions/config_249.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0f9" SimName="249" SimLocationX="1025" SimLocationY="1007" Datastore="store_249_x09_y15.yap" SimListenPort="9349" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_25.xml b/share/regions/config_25.xml
new file mode 100644
index 0000000..5543521
--- /dev/null
+++ b/share/regions/config_25.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf019" SimName="25" SimLocationX="1025" SimLocationY="1000" Datastore="store_25_x09_y01.yap" SimListenPort="9125" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_250.xml b/share/regions/config_250.xml
new file mode 100644
index 0000000..1b1abaa
--- /dev/null
+++ b/share/regions/config_250.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0fa" SimName="250" SimLocationX="1026" SimLocationY="1007" Datastore="store_250_x10_y15.yap" SimListenPort="9350" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_251.xml b/share/regions/config_251.xml
new file mode 100644
index 0000000..780a6e6
--- /dev/null
+++ b/share/regions/config_251.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0fb" SimName="251" SimLocationX="1027" SimLocationY="1007" Datastore="store_251_x11_y15.yap" SimListenPort="9351" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_252.xml b/share/regions/config_252.xml
new file mode 100644
index 0000000..5adfad5
--- /dev/null
+++ b/share/regions/config_252.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0fc" SimName="252" SimLocationX="1028" SimLocationY="1007" Datastore="store_252_x12_y15.yap" SimListenPort="9352" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_253.xml b/share/regions/config_253.xml
new file mode 100644
index 0000000..d974650
--- /dev/null
+++ b/share/regions/config_253.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0fd" SimName="253" SimLocationX="1029" SimLocationY="1007" Datastore="store_253_x13_y15.yap" SimListenPort="9353" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_254.xml b/share/regions/config_254.xml
new file mode 100644
index 0000000..ccb55f9
--- /dev/null
+++ b/share/regions/config_254.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0fe" SimName="254" SimLocationX="1030" SimLocationY="1007" Datastore="store_254_x14_y15.yap" SimListenPort="9354" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_255.xml b/share/regions/config_255.xml
new file mode 100644
index 0000000..7cec0e9
--- /dev/null
+++ b/share/regions/config_255.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf0ff" SimName="255" SimLocationX="1031" SimLocationY="1007" Datastore="store_255_x15_y15.yap" SimListenPort="9355" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y00.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_256.xml b/share/regions/config_256.xml
new file mode 100644
index 0000000..59a632f
--- /dev/null
+++ b/share/regions/config_256.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf100" SimName="256" SimLocationX="1000" SimLocationY="1008" Datastore="store_256_x00_y16.yap" SimListenPort="9356" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_257.xml b/share/regions/config_257.xml
new file mode 100644
index 0000000..6e0543e
--- /dev/null
+++ b/share/regions/config_257.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf101" SimName="257" SimLocationX="1001" SimLocationY="1008" Datastore="store_257_x01_y16.yap" SimListenPort="9357" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_258.xml b/share/regions/config_258.xml
new file mode 100644
index 0000000..655ace1
--- /dev/null
+++ b/share/regions/config_258.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf102" SimName="258" SimLocationX="1002" SimLocationY="1008" Datastore="store_258_x02_y16.yap" SimListenPort="9358" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_259.xml b/share/regions/config_259.xml
new file mode 100644
index 0000000..78c90d6
--- /dev/null
+++ b/share/regions/config_259.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf103" SimName="259" SimLocationX="1003" SimLocationY="1008" Datastore="store_259_x03_y16.yap" SimListenPort="9359" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_26.xml b/share/regions/config_26.xml
new file mode 100644
index 0000000..763a3b1
--- /dev/null
+++ b/share/regions/config_26.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf01a" SimName="26" SimLocationX="1026" SimLocationY="1000" Datastore="store_26_x10_y01.yap" SimListenPort="9126" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_260.xml b/share/regions/config_260.xml
new file mode 100644
index 0000000..96e20ae
--- /dev/null
+++ b/share/regions/config_260.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf104" SimName="260" SimLocationX="1004" SimLocationY="1008" Datastore="store_260_x04_y16.yap" SimListenPort="9360" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_261.xml b/share/regions/config_261.xml
new file mode 100644
index 0000000..d50760c
--- /dev/null
+++ b/share/regions/config_261.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf105" SimName="261" SimLocationX="1005" SimLocationY="1008" Datastore="store_261_x05_y16.yap" SimListenPort="9361" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_262.xml b/share/regions/config_262.xml
new file mode 100644
index 0000000..96f8101
--- /dev/null
+++ b/share/regions/config_262.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf106" SimName="262" SimLocationX="1006" SimLocationY="1008" Datastore="store_262_x06_y16.yap" SimListenPort="9362" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_263.xml b/share/regions/config_263.xml
new file mode 100644
index 0000000..2ce131b
--- /dev/null
+++ b/share/regions/config_263.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf107" SimName="263" SimLocationX="1007" SimLocationY="1008" Datastore="store_263_x07_y16.yap" SimListenPort="9363" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_264.xml b/share/regions/config_264.xml
new file mode 100644
index 0000000..48e9e5d
--- /dev/null
+++ b/share/regions/config_264.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf108" SimName="264" SimLocationX="1008" SimLocationY="1008" Datastore="store_264_x08_y16.yap" SimListenPort="9364" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_265.xml b/share/regions/config_265.xml
new file mode 100644
index 0000000..45a4702
--- /dev/null
+++ b/share/regions/config_265.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf109" SimName="265" SimLocationX="1009" SimLocationY="1008" Datastore="store_265_x09_y16.yap" SimListenPort="9365" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_266.xml b/share/regions/config_266.xml
new file mode 100644
index 0000000..19b71ef
--- /dev/null
+++ b/share/regions/config_266.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf10a" SimName="266" SimLocationX="1010" SimLocationY="1008" Datastore="store_266_x10_y16.yap" SimListenPort="9366" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_267.xml b/share/regions/config_267.xml
new file mode 100644
index 0000000..66d6461
--- /dev/null
+++ b/share/regions/config_267.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf10b" SimName="267" SimLocationX="1011" SimLocationY="1008" Datastore="store_267_x11_y16.yap" SimListenPort="9367" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_268.xml b/share/regions/config_268.xml
new file mode 100644
index 0000000..4a7d8a5
--- /dev/null
+++ b/share/regions/config_268.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf10c" SimName="268" SimLocationX="1012" SimLocationY="1008" Datastore="store_268_x12_y16.yap" SimListenPort="9368" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_269.xml b/share/regions/config_269.xml
new file mode 100644
index 0000000..3b31628
--- /dev/null
+++ b/share/regions/config_269.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf10d" SimName="269" SimLocationX="1013" SimLocationY="1008" Datastore="store_269_x13_y16.yap" SimListenPort="9369" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_27.xml b/share/regions/config_27.xml
new file mode 100644
index 0000000..8dfbbd3
--- /dev/null
+++ b/share/regions/config_27.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf01b" SimName="27" SimLocationX="1027" SimLocationY="1000" Datastore="store_27_x11_y01.yap" SimListenPort="9127" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_270.xml b/share/regions/config_270.xml
new file mode 100644
index 0000000..9117885
--- /dev/null
+++ b/share/regions/config_270.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf10e" SimName="270" SimLocationX="1014" SimLocationY="1008" Datastore="store_270_x14_y16.yap" SimListenPort="9370" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_271.xml b/share/regions/config_271.xml
new file mode 100644
index 0000000..af8522c
--- /dev/null
+++ b/share/regions/config_271.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf10f" SimName="271" SimLocationX="1015" SimLocationY="1008" Datastore="store_271_x15_y16.yap" SimListenPort="9371" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-1.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_272.xml b/share/regions/config_272.xml
new file mode 100644
index 0000000..0274ef9
--- /dev/null
+++ b/share/regions/config_272.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf110" SimName="272" SimLocationX="1016" SimLocationY="1008" Datastore="store_272_x00_y17.yap" SimListenPort="9372" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_273.xml b/share/regions/config_273.xml
new file mode 100644
index 0000000..0f55269
--- /dev/null
+++ b/share/regions/config_273.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf111" SimName="273" SimLocationX="1017" SimLocationY="1008" Datastore="store_273_x01_y17.yap" SimListenPort="9373" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_274.xml b/share/regions/config_274.xml
new file mode 100644
index 0000000..35f3a9d
--- /dev/null
+++ b/share/regions/config_274.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf112" SimName="274" SimLocationX="1018" SimLocationY="1008" Datastore="store_274_x02_y17.yap" SimListenPort="9374" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_275.xml b/share/regions/config_275.xml
new file mode 100644
index 0000000..fc37b99
--- /dev/null
+++ b/share/regions/config_275.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf113" SimName="275" SimLocationX="1019" SimLocationY="1008" Datastore="store_275_x03_y17.yap" SimListenPort="9375" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_276.xml b/share/regions/config_276.xml
new file mode 100644
index 0000000..2ffa80c
--- /dev/null
+++ b/share/regions/config_276.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf114" SimName="276" SimLocationX="1020" SimLocationY="1008" Datastore="store_276_x04_y17.yap" SimListenPort="9376" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_277.xml b/share/regions/config_277.xml
new file mode 100644
index 0000000..8f4f35c
--- /dev/null
+++ b/share/regions/config_277.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf115" SimName="277" SimLocationX="1021" SimLocationY="1008" Datastore="store_277_x05_y17.yap" SimListenPort="9377" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_278.xml b/share/regions/config_278.xml
new file mode 100644
index 0000000..3363f18
--- /dev/null
+++ b/share/regions/config_278.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf116" SimName="278" SimLocationX="1022" SimLocationY="1008" Datastore="store_278_x06_y17.yap" SimListenPort="9378" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_279.xml b/share/regions/config_279.xml
new file mode 100644
index 0000000..df78f8f
--- /dev/null
+++ b/share/regions/config_279.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf117" SimName="279" SimLocationX="1023" SimLocationY="1008" Datastore="store_279_x07_y17.yap" SimListenPort="9379" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_28.xml b/share/regions/config_28.xml
new file mode 100644
index 0000000..5e6441d
--- /dev/null
+++ b/share/regions/config_28.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf01c" SimName="28" SimLocationX="1028" SimLocationY="1000" Datastore="store_28_x12_y01.yap" SimListenPort="9128" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_280.xml b/share/regions/config_280.xml
new file mode 100644
index 0000000..766ac88
--- /dev/null
+++ b/share/regions/config_280.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf118" SimName="280" SimLocationX="1024" SimLocationY="1008" Datastore="store_280_x08_y17.yap" SimListenPort="9380" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_281.xml b/share/regions/config_281.xml
new file mode 100644
index 0000000..32c6aa7
--- /dev/null
+++ b/share/regions/config_281.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf119" SimName="281" SimLocationX="1025" SimLocationY="1008" Datastore="store_281_x09_y17.yap" SimListenPort="9381" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_282.xml b/share/regions/config_282.xml
new file mode 100644
index 0000000..d53e3d9
--- /dev/null
+++ b/share/regions/config_282.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf11a" SimName="282" SimLocationX="1026" SimLocationY="1008" Datastore="store_282_x10_y17.yap" SimListenPort="9382" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_283.xml b/share/regions/config_283.xml
new file mode 100644
index 0000000..9db3fdf
--- /dev/null
+++ b/share/regions/config_283.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf11b" SimName="283" SimLocationX="1027" SimLocationY="1008" Datastore="store_283_x11_y17.yap" SimListenPort="9383" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_284.xml b/share/regions/config_284.xml
new file mode 100644
index 0000000..905bbb4
--- /dev/null
+++ b/share/regions/config_284.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf11c" SimName="284" SimLocationX="1028" SimLocationY="1008" Datastore="store_284_x12_y17.yap" SimListenPort="9384" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_285.xml b/share/regions/config_285.xml
new file mode 100644
index 0000000..8216e68
--- /dev/null
+++ b/share/regions/config_285.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf11d" SimName="285" SimLocationX="1029" SimLocationY="1008" Datastore="store_285_x13_y17.yap" SimListenPort="9385" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_286.xml b/share/regions/config_286.xml
new file mode 100644
index 0000000..58d10df
--- /dev/null
+++ b/share/regions/config_286.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf11e" SimName="286" SimLocationX="1030" SimLocationY="1008" Datastore="store_286_x14_y17.yap" SimListenPort="9386" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_287.xml b/share/regions/config_287.xml
new file mode 100644
index 0000000..4eee8cd
--- /dev/null
+++ b/share/regions/config_287.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf11f" SimName="287" SimLocationX="1031" SimLocationY="1008" Datastore="store_287_x15_y17.yap" SimListenPort="9387" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-2.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_288.xml b/share/regions/config_288.xml
new file mode 100644
index 0000000..ee82cd2
--- /dev/null
+++ b/share/regions/config_288.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf120" SimName="288" SimLocationX="1000" SimLocationY="1009" Datastore="store_288_x00_y18.yap" SimListenPort="9388" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_289.xml b/share/regions/config_289.xml
new file mode 100644
index 0000000..9601fc7
--- /dev/null
+++ b/share/regions/config_289.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf121" SimName="289" SimLocationX="1001" SimLocationY="1009" Datastore="store_289_x01_y18.yap" SimListenPort="9389" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_29.xml b/share/regions/config_29.xml
new file mode 100644
index 0000000..1881ee9
--- /dev/null
+++ b/share/regions/config_29.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf01d" SimName="29" SimLocationX="1029" SimLocationY="1000" Datastore="store_29_x13_y01.yap" SimListenPort="9129" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_290.xml b/share/regions/config_290.xml
new file mode 100644
index 0000000..22a383a
--- /dev/null
+++ b/share/regions/config_290.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf122" SimName="290" SimLocationX="1002" SimLocationY="1009" Datastore="store_290_x02_y18.yap" SimListenPort="9390" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_291.xml b/share/regions/config_291.xml
new file mode 100644
index 0000000..540d89d
--- /dev/null
+++ b/share/regions/config_291.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf123" SimName="291" SimLocationX="1003" SimLocationY="1009" Datastore="store_291_x03_y18.yap" SimListenPort="9391" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_292.xml b/share/regions/config_292.xml
new file mode 100644
index 0000000..6ce1d47
--- /dev/null
+++ b/share/regions/config_292.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf124" SimName="292" SimLocationX="1004" SimLocationY="1009" Datastore="store_292_x04_y18.yap" SimListenPort="9392" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_293.xml b/share/regions/config_293.xml
new file mode 100644
index 0000000..003d49a
--- /dev/null
+++ b/share/regions/config_293.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf125" SimName="293" SimLocationX="1005" SimLocationY="1009" Datastore="store_293_x05_y18.yap" SimListenPort="9393" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_294.xml b/share/regions/config_294.xml
new file mode 100644
index 0000000..f668758
--- /dev/null
+++ b/share/regions/config_294.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf126" SimName="294" SimLocationX="1006" SimLocationY="1009" Datastore="store_294_x06_y18.yap" SimListenPort="9394" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_295.xml b/share/regions/config_295.xml
new file mode 100644
index 0000000..d102961
--- /dev/null
+++ b/share/regions/config_295.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf127" SimName="295" SimLocationX="1007" SimLocationY="1009" Datastore="store_295_x07_y18.yap" SimListenPort="9395" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_296.xml b/share/regions/config_296.xml
new file mode 100644
index 0000000..5e012e4
--- /dev/null
+++ b/share/regions/config_296.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf128" SimName="296" SimLocationX="1008" SimLocationY="1009" Datastore="store_296_x08_y18.yap" SimListenPort="9396" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_297.xml b/share/regions/config_297.xml
new file mode 100644
index 0000000..a3b8b93
--- /dev/null
+++ b/share/regions/config_297.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf129" SimName="297" SimLocationX="1009" SimLocationY="1009" Datastore="store_297_x09_y18.yap" SimListenPort="9397" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_298.xml b/share/regions/config_298.xml
new file mode 100644
index 0000000..fdff826
--- /dev/null
+++ b/share/regions/config_298.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf12a" SimName="298" SimLocationX="1010" SimLocationY="1009" Datastore="store_298_x10_y18.yap" SimListenPort="9398" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_299.xml b/share/regions/config_299.xml
new file mode 100644
index 0000000..0642bb3
--- /dev/null
+++ b/share/regions/config_299.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf12b" SimName="299" SimLocationX="1011" SimLocationY="1009" Datastore="store_299_x11_y18.yap" SimListenPort="9399" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_3.xml b/share/regions/config_3.xml
new file mode 100644
index 0000000..806c88d
--- /dev/null
+++ b/share/regions/config_3.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf003" SimName="3" SimLocationX="1003" SimLocationY="1000" Datastore="store_3_x03_y00.yap" SimListenPort="9103" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_30.xml b/share/regions/config_30.xml
new file mode 100644
index 0000000..c1c55ec
--- /dev/null
+++ b/share/regions/config_30.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf01e" SimName="30" SimLocationX="1030" SimLocationY="1000" Datastore="store_30_x14_y01.yap" SimListenPort="9130" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_300.xml b/share/regions/config_300.xml
new file mode 100644
index 0000000..5fd299f
--- /dev/null
+++ b/share/regions/config_300.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf12c" SimName="300" SimLocationX="1012" SimLocationY="1009" Datastore="store_300_x12_y18.yap" SimListenPort="9400" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_301.xml b/share/regions/config_301.xml
new file mode 100644
index 0000000..90c08bb
--- /dev/null
+++ b/share/regions/config_301.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf12d" SimName="301" SimLocationX="1013" SimLocationY="1009" Datastore="store_301_x13_y18.yap" SimListenPort="9401" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_302.xml b/share/regions/config_302.xml
new file mode 100644
index 0000000..4d1c646
--- /dev/null
+++ b/share/regions/config_302.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf12e" SimName="302" SimLocationX="1014" SimLocationY="1009" Datastore="store_302_x14_y18.yap" SimListenPort="9402" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_303.xml b/share/regions/config_303.xml
new file mode 100644
index 0000000..931bf65
--- /dev/null
+++ b/share/regions/config_303.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf12f" SimName="303" SimLocationX="1015" SimLocationY="1009" Datastore="store_303_x15_y18.yap" SimListenPort="9403" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-3.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_304.xml b/share/regions/config_304.xml
new file mode 100644
index 0000000..5d6395a
--- /dev/null
+++ b/share/regions/config_304.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf130" SimName="304" SimLocationX="1016" SimLocationY="1009" Datastore="store_304_x00_y19.yap" SimListenPort="9404" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_305.xml b/share/regions/config_305.xml
new file mode 100644
index 0000000..6d95c1d
--- /dev/null
+++ b/share/regions/config_305.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf131" SimName="305" SimLocationX="1017" SimLocationY="1009" Datastore="store_305_x01_y19.yap" SimListenPort="9405" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_306.xml b/share/regions/config_306.xml
new file mode 100644
index 0000000..4beb01c
--- /dev/null
+++ b/share/regions/config_306.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf132" SimName="306" SimLocationX="1018" SimLocationY="1009" Datastore="store_306_x02_y19.yap" SimListenPort="9406" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_307.xml b/share/regions/config_307.xml
new file mode 100644
index 0000000..ac717c0
--- /dev/null
+++ b/share/regions/config_307.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf133" SimName="307" SimLocationX="1019" SimLocationY="1009" Datastore="store_307_x03_y19.yap" SimListenPort="9407" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_308.xml b/share/regions/config_308.xml
new file mode 100644
index 0000000..d84b894
--- /dev/null
+++ b/share/regions/config_308.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf134" SimName="308" SimLocationX="1020" SimLocationY="1009" Datastore="store_308_x04_y19.yap" SimListenPort="9408" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_309.xml b/share/regions/config_309.xml
new file mode 100644
index 0000000..bb6d9cf
--- /dev/null
+++ b/share/regions/config_309.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf135" SimName="309" SimLocationX="1021" SimLocationY="1009" Datastore="store_309_x05_y19.yap" SimListenPort="9409" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_31.xml b/share/regions/config_31.xml
new file mode 100644
index 0000000..a66ed51
--- /dev/null
+++ b/share/regions/config_31.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf01f" SimName="31" SimLocationX="1031" SimLocationY="1000" Datastore="store_31_x15_y01.yap" SimListenPort="9131" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_310.xml b/share/regions/config_310.xml
new file mode 100644
index 0000000..c9d537d
--- /dev/null
+++ b/share/regions/config_310.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf136" SimName="310" SimLocationX="1022" SimLocationY="1009" Datastore="store_310_x06_y19.yap" SimListenPort="9410" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_311.xml b/share/regions/config_311.xml
new file mode 100644
index 0000000..ecdaeb8
--- /dev/null
+++ b/share/regions/config_311.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf137" SimName="311" SimLocationX="1023" SimLocationY="1009" Datastore="store_311_x07_y19.yap" SimListenPort="9411" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_312.xml b/share/regions/config_312.xml
new file mode 100644
index 0000000..dbcb515
--- /dev/null
+++ b/share/regions/config_312.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf138" SimName="312" SimLocationX="1024" SimLocationY="1009" Datastore="store_312_x08_y19.yap" SimListenPort="9412" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_313.xml b/share/regions/config_313.xml
new file mode 100644
index 0000000..7dc6b45
--- /dev/null
+++ b/share/regions/config_313.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf139" SimName="313" SimLocationX="1025" SimLocationY="1009" Datastore="store_313_x09_y19.yap" SimListenPort="9413" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_314.xml b/share/regions/config_314.xml
new file mode 100644
index 0000000..865d865
--- /dev/null
+++ b/share/regions/config_314.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf13a" SimName="314" SimLocationX="1026" SimLocationY="1009" Datastore="store_314_x10_y19.yap" SimListenPort="9414" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_315.xml b/share/regions/config_315.xml
new file mode 100644
index 0000000..073e89a
--- /dev/null
+++ b/share/regions/config_315.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf13b" SimName="315" SimLocationX="1027" SimLocationY="1009" Datastore="store_315_x11_y19.yap" SimListenPort="9415" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_316.xml b/share/regions/config_316.xml
new file mode 100644
index 0000000..4c5d131
--- /dev/null
+++ b/share/regions/config_316.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf13c" SimName="316" SimLocationX="1028" SimLocationY="1009" Datastore="store_316_x12_y19.yap" SimListenPort="9416" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_317.xml b/share/regions/config_317.xml
new file mode 100644
index 0000000..853caf7
--- /dev/null
+++ b/share/regions/config_317.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf13d" SimName="317" SimLocationX="1029" SimLocationY="1009" Datastore="store_317_x13_y19.yap" SimListenPort="9417" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_318.xml b/share/regions/config_318.xml
new file mode 100644
index 0000000..d0eb759
--- /dev/null
+++ b/share/regions/config_318.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf13e" SimName="318" SimLocationX="1030" SimLocationY="1009" Datastore="store_318_x14_y19.yap" SimListenPort="9418" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_319.xml b/share/regions/config_319.xml
new file mode 100644
index 0000000..168875f
--- /dev/null
+++ b/share/regions/config_319.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf13f" SimName="319" SimLocationX="1031" SimLocationY="1009" Datastore="store_319_x15_y19.yap" SimListenPort="9419" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-4.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_32.xml b/share/regions/config_32.xml
new file mode 100644
index 0000000..47c45af
--- /dev/null
+++ b/share/regions/config_32.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf020" SimName="32" SimLocationX="1000" SimLocationY="1001" Datastore="store_32_x00_y02.yap" SimListenPort="9132" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_320.xml b/share/regions/config_320.xml
new file mode 100644
index 0000000..6f7c12e
--- /dev/null
+++ b/share/regions/config_320.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf140" SimName="320" SimLocationX="1000" SimLocationY="1010" Datastore="store_320_x00_y20.yap" SimListenPort="9420" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_321.xml b/share/regions/config_321.xml
new file mode 100644
index 0000000..dd8c9ea
--- /dev/null
+++ b/share/regions/config_321.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf141" SimName="321" SimLocationX="1001" SimLocationY="1010" Datastore="store_321_x01_y20.yap" SimListenPort="9421" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_322.xml b/share/regions/config_322.xml
new file mode 100644
index 0000000..47ec1e8
--- /dev/null
+++ b/share/regions/config_322.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf142" SimName="322" SimLocationX="1002" SimLocationY="1010" Datastore="store_322_x02_y20.yap" SimListenPort="9422" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_323.xml b/share/regions/config_323.xml
new file mode 100644
index 0000000..e6efaf4
--- /dev/null
+++ b/share/regions/config_323.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf143" SimName="323" SimLocationX="1003" SimLocationY="1010" Datastore="store_323_x03_y20.yap" SimListenPort="9423" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_324.xml b/share/regions/config_324.xml
new file mode 100644
index 0000000..24c7a1a
--- /dev/null
+++ b/share/regions/config_324.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf144" SimName="324" SimLocationX="1004" SimLocationY="1010" Datastore="store_324_x04_y20.yap" SimListenPort="9424" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_325.xml b/share/regions/config_325.xml
new file mode 100644
index 0000000..5a9b9e1
--- /dev/null
+++ b/share/regions/config_325.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf145" SimName="325" SimLocationX="1005" SimLocationY="1010" Datastore="store_325_x05_y20.yap" SimListenPort="9425" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_326.xml b/share/regions/config_326.xml
new file mode 100644
index 0000000..1994ff3
--- /dev/null
+++ b/share/regions/config_326.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf146" SimName="326" SimLocationX="1006" SimLocationY="1010" Datastore="store_326_x06_y20.yap" SimListenPort="9426" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_327.xml b/share/regions/config_327.xml
new file mode 100644
index 0000000..75a3cfc
--- /dev/null
+++ b/share/regions/config_327.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf147" SimName="327" SimLocationX="1007" SimLocationY="1010" Datastore="store_327_x07_y20.yap" SimListenPort="9427" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_328.xml b/share/regions/config_328.xml
new file mode 100644
index 0000000..824b2e9
--- /dev/null
+++ b/share/regions/config_328.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf148" SimName="328" SimLocationX="1008" SimLocationY="1010" Datastore="store_328_x08_y20.yap" SimListenPort="9428" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_329.xml b/share/regions/config_329.xml
new file mode 100644
index 0000000..757680f
--- /dev/null
+++ b/share/regions/config_329.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf149" SimName="329" SimLocationX="1009" SimLocationY="1010" Datastore="store_329_x09_y20.yap" SimListenPort="9429" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_33.xml b/share/regions/config_33.xml
new file mode 100644
index 0000000..8c14f7a
--- /dev/null
+++ b/share/regions/config_33.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf021" SimName="33" SimLocationX="1001" SimLocationY="1001" Datastore="store_33_x01_y02.yap" SimListenPort="9133" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_330.xml b/share/regions/config_330.xml
new file mode 100644
index 0000000..0270580
--- /dev/null
+++ b/share/regions/config_330.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf14a" SimName="330" SimLocationX="1010" SimLocationY="1010" Datastore="store_330_x10_y20.yap" SimListenPort="9430" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_331.xml b/share/regions/config_331.xml
new file mode 100644
index 0000000..ad74945
--- /dev/null
+++ b/share/regions/config_331.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf14b" SimName="331" SimLocationX="1011" SimLocationY="1010" Datastore="store_331_x11_y20.yap" SimListenPort="9431" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_332.xml b/share/regions/config_332.xml
new file mode 100644
index 0000000..bf19af1
--- /dev/null
+++ b/share/regions/config_332.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf14c" SimName="332" SimLocationX="1012" SimLocationY="1010" Datastore="store_332_x12_y20.yap" SimListenPort="9432" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_333.xml b/share/regions/config_333.xml
new file mode 100644
index 0000000..3686668
--- /dev/null
+++ b/share/regions/config_333.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf14d" SimName="333" SimLocationX="1013" SimLocationY="1010" Datastore="store_333_x13_y20.yap" SimListenPort="9433" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_334.xml b/share/regions/config_334.xml
new file mode 100644
index 0000000..4b28b3e
--- /dev/null
+++ b/share/regions/config_334.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf14e" SimName="334" SimLocationX="1014" SimLocationY="1010" Datastore="store_334_x14_y20.yap" SimListenPort="9434" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_335.xml b/share/regions/config_335.xml
new file mode 100644
index 0000000..1980da0
--- /dev/null
+++ b/share/regions/config_335.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf14f" SimName="335" SimLocationX="1015" SimLocationY="1010" Datastore="store_335_x15_y20.yap" SimListenPort="9435" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-5.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_336.xml b/share/regions/config_336.xml
new file mode 100644
index 0000000..1e4b2a7
--- /dev/null
+++ b/share/regions/config_336.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf150" SimName="336" SimLocationX="1016" SimLocationY="1010" Datastore="store_336_x00_y21.yap" SimListenPort="9436" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_337.xml b/share/regions/config_337.xml
new file mode 100644
index 0000000..3e7e3ce
--- /dev/null
+++ b/share/regions/config_337.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf151" SimName="337" SimLocationX="1017" SimLocationY="1010" Datastore="store_337_x01_y21.yap" SimListenPort="9437" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_338.xml b/share/regions/config_338.xml
new file mode 100644
index 0000000..71c88de
--- /dev/null
+++ b/share/regions/config_338.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf152" SimName="338" SimLocationX="1018" SimLocationY="1010" Datastore="store_338_x02_y21.yap" SimListenPort="9438" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_339.xml b/share/regions/config_339.xml
new file mode 100644
index 0000000..d22de66
--- /dev/null
+++ b/share/regions/config_339.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf153" SimName="339" SimLocationX="1019" SimLocationY="1010" Datastore="store_339_x03_y21.yap" SimListenPort="9439" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_34.xml b/share/regions/config_34.xml
new file mode 100644
index 0000000..08132d0
--- /dev/null
+++ b/share/regions/config_34.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf022" SimName="34" SimLocationX="1002" SimLocationY="1001" Datastore="store_34_x02_y02.yap" SimListenPort="9134" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_340.xml b/share/regions/config_340.xml
new file mode 100644
index 0000000..c05d9e3
--- /dev/null
+++ b/share/regions/config_340.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf154" SimName="340" SimLocationX="1020" SimLocationY="1010" Datastore="store_340_x04_y21.yap" SimListenPort="9440" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_341.xml b/share/regions/config_341.xml
new file mode 100644
index 0000000..a8e8581
--- /dev/null
+++ b/share/regions/config_341.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf155" SimName="341" SimLocationX="1021" SimLocationY="1010" Datastore="store_341_x05_y21.yap" SimListenPort="9441" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_342.xml b/share/regions/config_342.xml
new file mode 100644
index 0000000..cb28842
--- /dev/null
+++ b/share/regions/config_342.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf156" SimName="342" SimLocationX="1022" SimLocationY="1010" Datastore="store_342_x06_y21.yap" SimListenPort="9442" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_343.xml b/share/regions/config_343.xml
new file mode 100644
index 0000000..2a9678f
--- /dev/null
+++ b/share/regions/config_343.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf157" SimName="343" SimLocationX="1023" SimLocationY="1010" Datastore="store_343_x07_y21.yap" SimListenPort="9443" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_344.xml b/share/regions/config_344.xml
new file mode 100644
index 0000000..8e9771a
--- /dev/null
+++ b/share/regions/config_344.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf158" SimName="344" SimLocationX="1024" SimLocationY="1010" Datastore="store_344_x08_y21.yap" SimListenPort="9444" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_345.xml b/share/regions/config_345.xml
new file mode 100644
index 0000000..4d64467
--- /dev/null
+++ b/share/regions/config_345.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf159" SimName="345" SimLocationX="1025" SimLocationY="1010" Datastore="store_345_x09_y21.yap" SimListenPort="9445" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_346.xml b/share/regions/config_346.xml
new file mode 100644
index 0000000..36b2516
--- /dev/null
+++ b/share/regions/config_346.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf15a" SimName="346" SimLocationX="1026" SimLocationY="1010" Datastore="store_346_x10_y21.yap" SimListenPort="9446" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_347.xml b/share/regions/config_347.xml
new file mode 100644
index 0000000..10344f4
--- /dev/null
+++ b/share/regions/config_347.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf15b" SimName="347" SimLocationX="1027" SimLocationY="1010" Datastore="store_347_x11_y21.yap" SimListenPort="9447" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_348.xml b/share/regions/config_348.xml
new file mode 100644
index 0000000..102b9dd
--- /dev/null
+++ b/share/regions/config_348.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf15c" SimName="348" SimLocationX="1028" SimLocationY="1010" Datastore="store_348_x12_y21.yap" SimListenPort="9448" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_349.xml b/share/regions/config_349.xml
new file mode 100644
index 0000000..de39dc9
--- /dev/null
+++ b/share/regions/config_349.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf15d" SimName="349" SimLocationX="1029" SimLocationY="1010" Datastore="store_349_x13_y21.yap" SimListenPort="9449" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_35.xml b/share/regions/config_35.xml
new file mode 100644
index 0000000..fde3552
--- /dev/null
+++ b/share/regions/config_35.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf023" SimName="35" SimLocationX="1003" SimLocationY="1001" Datastore="store_35_x03_y02.yap" SimListenPort="9135" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_350.xml b/share/regions/config_350.xml
new file mode 100644
index 0000000..aa10906
--- /dev/null
+++ b/share/regions/config_350.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf15e" SimName="350" SimLocationX="1030" SimLocationY="1010" Datastore="store_350_x14_y21.yap" SimListenPort="9450" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_351.xml b/share/regions/config_351.xml
new file mode 100644
index 0000000..e791e61
--- /dev/null
+++ b/share/regions/config_351.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf15f" SimName="351" SimLocationX="1031" SimLocationY="1010" Datastore="store_351_x15_y21.yap" SimListenPort="9451" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-6.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_352.xml b/share/regions/config_352.xml
new file mode 100644
index 0000000..7ab0219
--- /dev/null
+++ b/share/regions/config_352.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf160" SimName="352" SimLocationX="1000" SimLocationY="1011" Datastore="store_352_x00_y22.yap" SimListenPort="9452" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_353.xml b/share/regions/config_353.xml
new file mode 100644
index 0000000..489ce5a
--- /dev/null
+++ b/share/regions/config_353.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf161" SimName="353" SimLocationX="1001" SimLocationY="1011" Datastore="store_353_x01_y22.yap" SimListenPort="9453" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_354.xml b/share/regions/config_354.xml
new file mode 100644
index 0000000..4eacc38
--- /dev/null
+++ b/share/regions/config_354.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf162" SimName="354" SimLocationX="1002" SimLocationY="1011" Datastore="store_354_x02_y22.yap" SimListenPort="9454" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_355.xml b/share/regions/config_355.xml
new file mode 100644
index 0000000..1f85b26
--- /dev/null
+++ b/share/regions/config_355.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf163" SimName="355" SimLocationX="1003" SimLocationY="1011" Datastore="store_355_x03_y22.yap" SimListenPort="9455" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_356.xml b/share/regions/config_356.xml
new file mode 100644
index 0000000..baf1880
--- /dev/null
+++ b/share/regions/config_356.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf164" SimName="356" SimLocationX="1004" SimLocationY="1011" Datastore="store_356_x04_y22.yap" SimListenPort="9456" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_357.xml b/share/regions/config_357.xml
new file mode 100644
index 0000000..37e2f28
--- /dev/null
+++ b/share/regions/config_357.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf165" SimName="357" SimLocationX="1005" SimLocationY="1011" Datastore="store_357_x05_y22.yap" SimListenPort="9457" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_358.xml b/share/regions/config_358.xml
new file mode 100644
index 0000000..75ae185
--- /dev/null
+++ b/share/regions/config_358.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf166" SimName="358" SimLocationX="1006" SimLocationY="1011" Datastore="store_358_x06_y22.yap" SimListenPort="9458" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_359.xml b/share/regions/config_359.xml
new file mode 100644
index 0000000..698ab2b
--- /dev/null
+++ b/share/regions/config_359.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf167" SimName="359" SimLocationX="1007" SimLocationY="1011" Datastore="store_359_x07_y22.yap" SimListenPort="9459" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_36.xml b/share/regions/config_36.xml
new file mode 100644
index 0000000..f50eda8
--- /dev/null
+++ b/share/regions/config_36.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf024" SimName="36" SimLocationX="1004" SimLocationY="1001" Datastore="store_36_x04_y02.yap" SimListenPort="9136" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_360.xml b/share/regions/config_360.xml
new file mode 100644
index 0000000..c18027c
--- /dev/null
+++ b/share/regions/config_360.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf168" SimName="360" SimLocationX="1008" SimLocationY="1011" Datastore="store_360_x08_y22.yap" SimListenPort="9460" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_361.xml b/share/regions/config_361.xml
new file mode 100644
index 0000000..97f12e6
--- /dev/null
+++ b/share/regions/config_361.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf169" SimName="361" SimLocationX="1009" SimLocationY="1011" Datastore="store_361_x09_y22.yap" SimListenPort="9461" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_362.xml b/share/regions/config_362.xml
new file mode 100644
index 0000000..ba0a464
--- /dev/null
+++ b/share/regions/config_362.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf16a" SimName="362" SimLocationX="1010" SimLocationY="1011" Datastore="store_362_x10_y22.yap" SimListenPort="9462" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_363.xml b/share/regions/config_363.xml
new file mode 100644
index 0000000..c0965e6
--- /dev/null
+++ b/share/regions/config_363.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf16b" SimName="363" SimLocationX="1011" SimLocationY="1011" Datastore="store_363_x11_y22.yap" SimListenPort="9463" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_364.xml b/share/regions/config_364.xml
new file mode 100644
index 0000000..d977ab4
--- /dev/null
+++ b/share/regions/config_364.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf16c" SimName="364" SimLocationX="1012" SimLocationY="1011" Datastore="store_364_x12_y22.yap" SimListenPort="9464" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_365.xml b/share/regions/config_365.xml
new file mode 100644
index 0000000..260e3a6
--- /dev/null
+++ b/share/regions/config_365.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf16d" SimName="365" SimLocationX="1013" SimLocationY="1011" Datastore="store_365_x13_y22.yap" SimListenPort="9465" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_366.xml b/share/regions/config_366.xml
new file mode 100644
index 0000000..3d61061
--- /dev/null
+++ b/share/regions/config_366.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf16e" SimName="366" SimLocationX="1014" SimLocationY="1011" Datastore="store_366_x14_y22.yap" SimListenPort="9466" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_367.xml b/share/regions/config_367.xml
new file mode 100644
index 0000000..cc2b5d6
--- /dev/null
+++ b/share/regions/config_367.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf16f" SimName="367" SimLocationX="1015" SimLocationY="1011" Datastore="store_367_x15_y22.yap" SimListenPort="9467" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-7.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_368.xml b/share/regions/config_368.xml
new file mode 100644
index 0000000..07bab28
--- /dev/null
+++ b/share/regions/config_368.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf170" SimName="368" SimLocationX="1016" SimLocationY="1011" Datastore="store_368_x00_y23.yap" SimListenPort="9468" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_369.xml b/share/regions/config_369.xml
new file mode 100644
index 0000000..6b0b8f8
--- /dev/null
+++ b/share/regions/config_369.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf171" SimName="369" SimLocationX="1017" SimLocationY="1011" Datastore="store_369_x01_y23.yap" SimListenPort="9469" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_37.xml b/share/regions/config_37.xml
new file mode 100644
index 0000000..d8f8e70
--- /dev/null
+++ b/share/regions/config_37.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf025" SimName="37" SimLocationX="1005" SimLocationY="1001" Datastore="store_37_x05_y02.yap" SimListenPort="9137" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_370.xml b/share/regions/config_370.xml
new file mode 100644
index 0000000..b9b23df
--- /dev/null
+++ b/share/regions/config_370.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf172" SimName="370" SimLocationX="1018" SimLocationY="1011" Datastore="store_370_x02_y23.yap" SimListenPort="9470" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_371.xml b/share/regions/config_371.xml
new file mode 100644
index 0000000..db2e347
--- /dev/null
+++ b/share/regions/config_371.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf173" SimName="371" SimLocationX="1019" SimLocationY="1011" Datastore="store_371_x03_y23.yap" SimListenPort="9471" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_372.xml b/share/regions/config_372.xml
new file mode 100644
index 0000000..daaf089
--- /dev/null
+++ b/share/regions/config_372.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf174" SimName="372" SimLocationX="1020" SimLocationY="1011" Datastore="store_372_x04_y23.yap" SimListenPort="9472" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_373.xml b/share/regions/config_373.xml
new file mode 100644
index 0000000..9169e6f
--- /dev/null
+++ b/share/regions/config_373.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf175" SimName="373" SimLocationX="1021" SimLocationY="1011" Datastore="store_373_x05_y23.yap" SimListenPort="9473" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_374.xml b/share/regions/config_374.xml
new file mode 100644
index 0000000..f7a8024
--- /dev/null
+++ b/share/regions/config_374.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf176" SimName="374" SimLocationX="1022" SimLocationY="1011" Datastore="store_374_x06_y23.yap" SimListenPort="9474" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_375.xml b/share/regions/config_375.xml
new file mode 100644
index 0000000..ee53e02
--- /dev/null
+++ b/share/regions/config_375.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf177" SimName="375" SimLocationX="1023" SimLocationY="1011" Datastore="store_375_x07_y23.yap" SimListenPort="9475" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_376.xml b/share/regions/config_376.xml
new file mode 100644
index 0000000..6567eba
--- /dev/null
+++ b/share/regions/config_376.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf178" SimName="376" SimLocationX="1024" SimLocationY="1011" Datastore="store_376_x08_y23.yap" SimListenPort="9476" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_377.xml b/share/regions/config_377.xml
new file mode 100644
index 0000000..9cfc07a
--- /dev/null
+++ b/share/regions/config_377.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf179" SimName="377" SimLocationX="1025" SimLocationY="1011" Datastore="store_377_x09_y23.yap" SimListenPort="9477" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_378.xml b/share/regions/config_378.xml
new file mode 100644
index 0000000..dc64f23
--- /dev/null
+++ b/share/regions/config_378.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf17a" SimName="378" SimLocationX="1026" SimLocationY="1011" Datastore="store_378_x10_y23.yap" SimListenPort="9478" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_379.xml b/share/regions/config_379.xml
new file mode 100644
index 0000000..b690161
--- /dev/null
+++ b/share/regions/config_379.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf17b" SimName="379" SimLocationX="1027" SimLocationY="1011" Datastore="store_379_x11_y23.yap" SimListenPort="9479" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_38.xml b/share/regions/config_38.xml
new file mode 100644
index 0000000..8b59756
--- /dev/null
+++ b/share/regions/config_38.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf026" SimName="38" SimLocationX="1006" SimLocationY="1001" Datastore="store_38_x06_y02.yap" SimListenPort="9138" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_380.xml b/share/regions/config_380.xml
new file mode 100644
index 0000000..c287ca7
--- /dev/null
+++ b/share/regions/config_380.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf17c" SimName="380" SimLocationX="1028" SimLocationY="1011" Datastore="store_380_x12_y23.yap" SimListenPort="9480" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_381.xml b/share/regions/config_381.xml
new file mode 100644
index 0000000..6407a59
--- /dev/null
+++ b/share/regions/config_381.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf17d" SimName="381" SimLocationX="1029" SimLocationY="1011" Datastore="store_381_x13_y23.yap" SimListenPort="9481" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_382.xml b/share/regions/config_382.xml
new file mode 100644
index 0000000..c3601c0
--- /dev/null
+++ b/share/regions/config_382.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf17e" SimName="382" SimLocationX="1030" SimLocationY="1011" Datastore="store_382_x14_y23.yap" SimListenPort="9482" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_383.xml b/share/regions/config_383.xml
new file mode 100644
index 0000000..5067b99
--- /dev/null
+++ b/share/regions/config_383.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf17f" SimName="383" SimLocationX="1031" SimLocationY="1011" Datastore="store_383_x15_y23.yap" SimListenPort="9483" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-8.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_384.xml b/share/regions/config_384.xml
new file mode 100644
index 0000000..e624312
--- /dev/null
+++ b/share/regions/config_384.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf180" SimName="384" SimLocationX="1000" SimLocationY="1012" Datastore="store_384_x00_y24.yap" SimListenPort="9484" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_385.xml b/share/regions/config_385.xml
new file mode 100644
index 0000000..d0095f3
--- /dev/null
+++ b/share/regions/config_385.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf181" SimName="385" SimLocationX="1001" SimLocationY="1012" Datastore="store_385_x01_y24.yap" SimListenPort="9485" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_386.xml b/share/regions/config_386.xml
new file mode 100644
index 0000000..ae9549d
--- /dev/null
+++ b/share/regions/config_386.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf182" SimName="386" SimLocationX="1002" SimLocationY="1012" Datastore="store_386_x02_y24.yap" SimListenPort="9486" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_387.xml b/share/regions/config_387.xml
new file mode 100644
index 0000000..e2c2880
--- /dev/null
+++ b/share/regions/config_387.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf183" SimName="387" SimLocationX="1003" SimLocationY="1012" Datastore="store_387_x03_y24.yap" SimListenPort="9487" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_388.xml b/share/regions/config_388.xml
new file mode 100644
index 0000000..5b0e3e2
--- /dev/null
+++ b/share/regions/config_388.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf184" SimName="388" SimLocationX="1004" SimLocationY="1012" Datastore="store_388_x04_y24.yap" SimListenPort="9488" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_389.xml b/share/regions/config_389.xml
new file mode 100644
index 0000000..a77061a
--- /dev/null
+++ b/share/regions/config_389.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf185" SimName="389" SimLocationX="1005" SimLocationY="1012" Datastore="store_389_x05_y24.yap" SimListenPort="9489" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_39.xml b/share/regions/config_39.xml
new file mode 100644
index 0000000..75050bb
--- /dev/null
+++ b/share/regions/config_39.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf027" SimName="39" SimLocationX="1007" SimLocationY="1001" Datastore="store_39_x07_y02.yap" SimListenPort="9139" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_390.xml b/share/regions/config_390.xml
new file mode 100644
index 0000000..79887c0
--- /dev/null
+++ b/share/regions/config_390.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf186" SimName="390" SimLocationX="1006" SimLocationY="1012" Datastore="store_390_x06_y24.yap" SimListenPort="9490" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_391.xml b/share/regions/config_391.xml
new file mode 100644
index 0000000..3863fb5
--- /dev/null
+++ b/share/regions/config_391.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf187" SimName="391" SimLocationX="1007" SimLocationY="1012" Datastore="store_391_x07_y24.yap" SimListenPort="9491" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_392.xml b/share/regions/config_392.xml
new file mode 100644
index 0000000..c5c4552
--- /dev/null
+++ b/share/regions/config_392.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf188" SimName="392" SimLocationX="1008" SimLocationY="1012" Datastore="store_392_x08_y24.yap" SimListenPort="9492" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_393.xml b/share/regions/config_393.xml
new file mode 100644
index 0000000..d0e0a61
--- /dev/null
+++ b/share/regions/config_393.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf189" SimName="393" SimLocationX="1009" SimLocationY="1012" Datastore="store_393_x09_y24.yap" SimListenPort="9493" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_394.xml b/share/regions/config_394.xml
new file mode 100644
index 0000000..3fd4cb5
--- /dev/null
+++ b/share/regions/config_394.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf18a" SimName="394" SimLocationX="1010" SimLocationY="1012" Datastore="store_394_x10_y24.yap" SimListenPort="9494" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_395.xml b/share/regions/config_395.xml
new file mode 100644
index 0000000..a49a948
--- /dev/null
+++ b/share/regions/config_395.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf18b" SimName="395" SimLocationX="1011" SimLocationY="1012" Datastore="store_395_x11_y24.yap" SimListenPort="9495" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_396.xml b/share/regions/config_396.xml
new file mode 100644
index 0000000..fd2461a
--- /dev/null
+++ b/share/regions/config_396.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf18c" SimName="396" SimLocationX="1012" SimLocationY="1012" Datastore="store_396_x12_y24.yap" SimListenPort="9496" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_397.xml b/share/regions/config_397.xml
new file mode 100644
index 0000000..d3a693b
--- /dev/null
+++ b/share/regions/config_397.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf18d" SimName="397" SimLocationX="1013" SimLocationY="1012" Datastore="store_397_x13_y24.yap" SimListenPort="9497" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_398.xml b/share/regions/config_398.xml
new file mode 100644
index 0000000..e2afde9
--- /dev/null
+++ b/share/regions/config_398.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf18e" SimName="398" SimLocationX="1014" SimLocationY="1012" Datastore="store_398_x14_y24.yap" SimListenPort="9498" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_399.xml b/share/regions/config_399.xml
new file mode 100644
index 0000000..938794c
--- /dev/null
+++ b/share/regions/config_399.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf18f" SimName="399" SimLocationX="1015" SimLocationY="1012" Datastore="store_399_x15_y24.yap" SimListenPort="9499" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-9.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_4.xml b/share/regions/config_4.xml
new file mode 100644
index 0000000..8744f4e
--- /dev/null
+++ b/share/regions/config_4.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf004" SimName="4" SimLocationX="1004" SimLocationY="1000" Datastore="store_4_x04_y00.yap" SimListenPort="9104" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_40.xml b/share/regions/config_40.xml
new file mode 100644
index 0000000..2e399da
--- /dev/null
+++ b/share/regions/config_40.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf028" SimName="40" SimLocationX="1008" SimLocationY="1001" Datastore="store_40_x08_y02.yap" SimListenPort="9140" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_400.xml b/share/regions/config_400.xml
new file mode 100644
index 0000000..cab19d9
--- /dev/null
+++ b/share/regions/config_400.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf190" SimName="400" SimLocationX="1016" SimLocationY="1012" Datastore="store_400_x00_y25.yap" SimListenPort="9500" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_401.xml b/share/regions/config_401.xml
new file mode 100644
index 0000000..f8c29e7
--- /dev/null
+++ b/share/regions/config_401.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf191" SimName="401" SimLocationX="1017" SimLocationY="1012" Datastore="store_401_x01_y25.yap" SimListenPort="9501" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_402.xml b/share/regions/config_402.xml
new file mode 100644
index 0000000..39fea36
--- /dev/null
+++ b/share/regions/config_402.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf192" SimName="402" SimLocationX="1018" SimLocationY="1012" Datastore="store_402_x02_y25.yap" SimListenPort="9502" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_403.xml b/share/regions/config_403.xml
new file mode 100644
index 0000000..d61a2da
--- /dev/null
+++ b/share/regions/config_403.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf193" SimName="403" SimLocationX="1019" SimLocationY="1012" Datastore="store_403_x03_y25.yap" SimListenPort="9503" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_404.xml b/share/regions/config_404.xml
new file mode 100644
index 0000000..d2d5a81
--- /dev/null
+++ b/share/regions/config_404.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf194" SimName="404" SimLocationX="1020" SimLocationY="1012" Datastore="store_404_x04_y25.yap" SimListenPort="9504" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_405.xml b/share/regions/config_405.xml
new file mode 100644
index 0000000..a07a7bc
--- /dev/null
+++ b/share/regions/config_405.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf195" SimName="405" SimLocationX="1021" SimLocationY="1012" Datastore="store_405_x05_y25.yap" SimListenPort="9505" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_406.xml b/share/regions/config_406.xml
new file mode 100644
index 0000000..5855778
--- /dev/null
+++ b/share/regions/config_406.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf196" SimName="406" SimLocationX="1022" SimLocationY="1012" Datastore="store_406_x06_y25.yap" SimListenPort="9506" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_407.xml b/share/regions/config_407.xml
new file mode 100644
index 0000000..9c54b3d
--- /dev/null
+++ b/share/regions/config_407.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf197" SimName="407" SimLocationX="1023" SimLocationY="1012" Datastore="store_407_x07_y25.yap" SimListenPort="9507" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_408.xml b/share/regions/config_408.xml
new file mode 100644
index 0000000..83e95b1
--- /dev/null
+++ b/share/regions/config_408.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf198" SimName="408" SimLocationX="1024" SimLocationY="1012" Datastore="store_408_x08_y25.yap" SimListenPort="9508" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_409.xml b/share/regions/config_409.xml
new file mode 100644
index 0000000..6b15ed3
--- /dev/null
+++ b/share/regions/config_409.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf199" SimName="409" SimLocationX="1025" SimLocationY="1012" Datastore="store_409_x09_y25.yap" SimListenPort="9509" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_41.xml b/share/regions/config_41.xml
new file mode 100644
index 0000000..c7ddbb9
--- /dev/null
+++ b/share/regions/config_41.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf029" SimName="41" SimLocationX="1009" SimLocationY="1001" Datastore="store_41_x09_y02.yap" SimListenPort="9141" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_410.xml b/share/regions/config_410.xml
new file mode 100644
index 0000000..0fb99a1
--- /dev/null
+++ b/share/regions/config_410.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf19a" SimName="410" SimLocationX="1026" SimLocationY="1012" Datastore="store_410_x10_y25.yap" SimListenPort="9510" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_411.xml b/share/regions/config_411.xml
new file mode 100644
index 0000000..aa6144d
--- /dev/null
+++ b/share/regions/config_411.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf19b" SimName="411" SimLocationX="1027" SimLocationY="1012" Datastore="store_411_x11_y25.yap" SimListenPort="9511" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_412.xml b/share/regions/config_412.xml
new file mode 100644
index 0000000..9645235
--- /dev/null
+++ b/share/regions/config_412.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf19c" SimName="412" SimLocationX="1028" SimLocationY="1012" Datastore="store_412_x12_y25.yap" SimListenPort="9512" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_413.xml b/share/regions/config_413.xml
new file mode 100644
index 0000000..1ae01f8
--- /dev/null
+++ b/share/regions/config_413.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf19d" SimName="413" SimLocationX="1029" SimLocationY="1012" Datastore="store_413_x13_y25.yap" SimListenPort="9513" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_414.xml b/share/regions/config_414.xml
new file mode 100644
index 0000000..9773a95
--- /dev/null
+++ b/share/regions/config_414.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf19e" SimName="414" SimLocationX="1030" SimLocationY="1012" Datastore="store_414_x14_y25.yap" SimListenPort="9514" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_415.xml b/share/regions/config_415.xml
new file mode 100644
index 0000000..7b43426
--- /dev/null
+++ b/share/regions/config_415.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf19f" SimName="415" SimLocationX="1031" SimLocationY="1012" Datastore="store_415_x15_y25.yap" SimListenPort="9515" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_416.xml b/share/regions/config_416.xml
new file mode 100644
index 0000000..a35c477
--- /dev/null
+++ b/share/regions/config_416.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a0" SimName="416" SimLocationX="1000" SimLocationY="1013" Datastore="store_416_x00_y26.yap" SimListenPort="9516" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_417.xml b/share/regions/config_417.xml
new file mode 100644
index 0000000..58001d1
--- /dev/null
+++ b/share/regions/config_417.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a1" SimName="417" SimLocationX="1001" SimLocationY="1013" Datastore="store_417_x01_y26.yap" SimListenPort="9517" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_418.xml b/share/regions/config_418.xml
new file mode 100644
index 0000000..3c525a1
--- /dev/null
+++ b/share/regions/config_418.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a2" SimName="418" SimLocationX="1002" SimLocationY="1013" Datastore="store_418_x02_y26.yap" SimListenPort="9518" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_419.xml b/share/regions/config_419.xml
new file mode 100644
index 0000000..9663580
--- /dev/null
+++ b/share/regions/config_419.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a3" SimName="419" SimLocationX="1003" SimLocationY="1013" Datastore="store_419_x03_y26.yap" SimListenPort="9519" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_42.xml b/share/regions/config_42.xml
new file mode 100644
index 0000000..edc7db7
--- /dev/null
+++ b/share/regions/config_42.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf02a" SimName="42" SimLocationX="1010" SimLocationY="1001" Datastore="store_42_x10_y02.yap" SimListenPort="9142" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_420.xml b/share/regions/config_420.xml
new file mode 100644
index 0000000..3df78a7
--- /dev/null
+++ b/share/regions/config_420.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a4" SimName="420" SimLocationX="1004" SimLocationY="1013" Datastore="store_420_x04_y26.yap" SimListenPort="9520" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_421.xml b/share/regions/config_421.xml
new file mode 100644
index 0000000..aed95bc
--- /dev/null
+++ b/share/regions/config_421.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a5" SimName="421" SimLocationX="1005" SimLocationY="1013" Datastore="store_421_x05_y26.yap" SimListenPort="9521" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_422.xml b/share/regions/config_422.xml
new file mode 100644
index 0000000..703c004
--- /dev/null
+++ b/share/regions/config_422.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a6" SimName="422" SimLocationX="1006" SimLocationY="1013" Datastore="store_422_x06_y26.yap" SimListenPort="9522" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_423.xml b/share/regions/config_423.xml
new file mode 100644
index 0000000..eca9a6f
--- /dev/null
+++ b/share/regions/config_423.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a7" SimName="423" SimLocationX="1007" SimLocationY="1013" Datastore="store_423_x07_y26.yap" SimListenPort="9523" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_424.xml b/share/regions/config_424.xml
new file mode 100644
index 0000000..91c68dc
--- /dev/null
+++ b/share/regions/config_424.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a8" SimName="424" SimLocationX="1008" SimLocationY="1013" Datastore="store_424_x08_y26.yap" SimListenPort="9524" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_425.xml b/share/regions/config_425.xml
new file mode 100644
index 0000000..92111f1
--- /dev/null
+++ b/share/regions/config_425.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1a9" SimName="425" SimLocationX="1009" SimLocationY="1013" Datastore="store_425_x09_y26.yap" SimListenPort="9525" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_426.xml b/share/regions/config_426.xml
new file mode 100644
index 0000000..9295577
--- /dev/null
+++ b/share/regions/config_426.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1aa" SimName="426" SimLocationX="1010" SimLocationY="1013" Datastore="store_426_x10_y26.yap" SimListenPort="9526" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_427.xml b/share/regions/config_427.xml
new file mode 100644
index 0000000..f54d20c
--- /dev/null
+++ b/share/regions/config_427.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ab" SimName="427" SimLocationX="1011" SimLocationY="1013" Datastore="store_427_x11_y26.yap" SimListenPort="9527" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_428.xml b/share/regions/config_428.xml
new file mode 100644
index 0000000..b4b407a
--- /dev/null
+++ b/share/regions/config_428.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ac" SimName="428" SimLocationX="1012" SimLocationY="1013" Datastore="store_428_x12_y26.yap" SimListenPort="9528" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_429.xml b/share/regions/config_429.xml
new file mode 100644
index 0000000..3389b8c
--- /dev/null
+++ b/share/regions/config_429.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ad" SimName="429" SimLocationX="1013" SimLocationY="1013" Datastore="store_429_x13_y26.yap" SimListenPort="9529" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_43.xml b/share/regions/config_43.xml
new file mode 100644
index 0000000..3841629
--- /dev/null
+++ b/share/regions/config_43.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf02b" SimName="43" SimLocationX="1011" SimLocationY="1001" Datastore="store_43_x11_y02.yap" SimListenPort="9143" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_430.xml b/share/regions/config_430.xml
new file mode 100644
index 0000000..1123c41
--- /dev/null
+++ b/share/regions/config_430.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ae" SimName="430" SimLocationX="1014" SimLocationY="1013" Datastore="store_430_x14_y26.yap" SimListenPort="9530" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_431.xml b/share/regions/config_431.xml
new file mode 100644
index 0000000..3c225d2
--- /dev/null
+++ b/share/regions/config_431.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1af" SimName="431" SimLocationX="1015" SimLocationY="1013" Datastore="store_431_x15_y26.yap" SimListenPort="9531" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_432.xml b/share/regions/config_432.xml
new file mode 100644
index 0000000..67579d3
--- /dev/null
+++ b/share/regions/config_432.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b0" SimName="432" SimLocationX="1016" SimLocationY="1013" Datastore="store_432_x00_y27.yap" SimListenPort="9532" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_433.xml b/share/regions/config_433.xml
new file mode 100644
index 0000000..6086a53
--- /dev/null
+++ b/share/regions/config_433.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b1" SimName="433" SimLocationX="1017" SimLocationY="1013" Datastore="store_433_x01_y27.yap" SimListenPort="9533" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_434.xml b/share/regions/config_434.xml
new file mode 100644
index 0000000..a634da2
--- /dev/null
+++ b/share/regions/config_434.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b2" SimName="434" SimLocationX="1018" SimLocationY="1013" Datastore="store_434_x02_y27.yap" SimListenPort="9534" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_435.xml b/share/regions/config_435.xml
new file mode 100644
index 0000000..06dcd5b
--- /dev/null
+++ b/share/regions/config_435.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b3" SimName="435" SimLocationX="1019" SimLocationY="1013" Datastore="store_435_x03_y27.yap" SimListenPort="9535" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_436.xml b/share/regions/config_436.xml
new file mode 100644
index 0000000..70c64a6
--- /dev/null
+++ b/share/regions/config_436.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b4" SimName="436" SimLocationX="1020" SimLocationY="1013" Datastore="store_436_x04_y27.yap" SimListenPort="9536" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_437.xml b/share/regions/config_437.xml
new file mode 100644
index 0000000..aaa105e
--- /dev/null
+++ b/share/regions/config_437.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b5" SimName="437" SimLocationX="1021" SimLocationY="1013" Datastore="store_437_x05_y27.yap" SimListenPort="9537" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_438.xml b/share/regions/config_438.xml
new file mode 100644
index 0000000..3f7b991
--- /dev/null
+++ b/share/regions/config_438.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b6" SimName="438" SimLocationX="1022" SimLocationY="1013" Datastore="store_438_x06_y27.yap" SimListenPort="9538" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_439.xml b/share/regions/config_439.xml
new file mode 100644
index 0000000..6ff6c99
--- /dev/null
+++ b/share/regions/config_439.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b7" SimName="439" SimLocationX="1023" SimLocationY="1013" Datastore="store_439_x07_y27.yap" SimListenPort="9539" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_44.xml b/share/regions/config_44.xml
new file mode 100644
index 0000000..00a639c
--- /dev/null
+++ b/share/regions/config_44.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf02c" SimName="44" SimLocationX="1012" SimLocationY="1001" Datastore="store_44_x12_y02.yap" SimListenPort="9144" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_440.xml b/share/regions/config_440.xml
new file mode 100644
index 0000000..2514f27
--- /dev/null
+++ b/share/regions/config_440.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b8" SimName="440" SimLocationX="1024" SimLocationY="1013" Datastore="store_440_x08_y27.yap" SimListenPort="9540" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_441.xml b/share/regions/config_441.xml
new file mode 100644
index 0000000..6c69568
--- /dev/null
+++ b/share/regions/config_441.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1b9" SimName="441" SimLocationX="1025" SimLocationY="1013" Datastore="store_441_x09_y27.yap" SimListenPort="9541" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_442.xml b/share/regions/config_442.xml
new file mode 100644
index 0000000..3b39f84
--- /dev/null
+++ b/share/regions/config_442.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ba" SimName="442" SimLocationX="1026" SimLocationY="1013" Datastore="store_442_x10_y27.yap" SimListenPort="9542" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_443.xml b/share/regions/config_443.xml
new file mode 100644
index 0000000..f86fcca
--- /dev/null
+++ b/share/regions/config_443.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1bb" SimName="443" SimLocationX="1027" SimLocationY="1013" Datastore="store_443_x11_y27.yap" SimListenPort="9543" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_444.xml b/share/regions/config_444.xml
new file mode 100644
index 0000000..0b2cecc
--- /dev/null
+++ b/share/regions/config_444.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1bc" SimName="444" SimLocationX="1028" SimLocationY="1013" Datastore="store_444_x12_y27.yap" SimListenPort="9544" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_445.xml b/share/regions/config_445.xml
new file mode 100644
index 0000000..cda5bf8
--- /dev/null
+++ b/share/regions/config_445.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1bd" SimName="445" SimLocationX="1029" SimLocationY="1013" Datastore="store_445_x13_y27.yap" SimListenPort="9545" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_446.xml b/share/regions/config_446.xml
new file mode 100644
index 0000000..d2daec5
--- /dev/null
+++ b/share/regions/config_446.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1be" SimName="446" SimLocationX="1030" SimLocationY="1013" Datastore="store_446_x14_y27.yap" SimListenPort="9546" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_447.xml b/share/regions/config_447.xml
new file mode 100644
index 0000000..c39cd11
--- /dev/null
+++ b/share/regions/config_447.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1bf" SimName="447" SimLocationX="1031" SimLocationY="1013" Datastore="store_447_x15_y27.yap" SimListenPort="9547" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_448.xml b/share/regions/config_448.xml
new file mode 100644
index 0000000..391cf51
--- /dev/null
+++ b/share/regions/config_448.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c0" SimName="448" SimLocationX="1000" SimLocationY="1014" Datastore="store_448_x00_y28.yap" SimListenPort="9548" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_449.xml b/share/regions/config_449.xml
new file mode 100644
index 0000000..fa67578
--- /dev/null
+++ b/share/regions/config_449.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c1" SimName="449" SimLocationX="1001" SimLocationY="1014" Datastore="store_449_x01_y28.yap" SimListenPort="9549" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_45.xml b/share/regions/config_45.xml
new file mode 100644
index 0000000..247bcd7
--- /dev/null
+++ b/share/regions/config_45.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf02d" SimName="45" SimLocationX="1013" SimLocationY="1001" Datastore="store_45_x13_y02.yap" SimListenPort="9145" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_450.xml b/share/regions/config_450.xml
new file mode 100644
index 0000000..54404a1
--- /dev/null
+++ b/share/regions/config_450.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c2" SimName="450" SimLocationX="1002" SimLocationY="1014" Datastore="store_450_x02_y28.yap" SimListenPort="9550" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_451.xml b/share/regions/config_451.xml
new file mode 100644
index 0000000..4c21c75
--- /dev/null
+++ b/share/regions/config_451.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c3" SimName="451" SimLocationX="1003" SimLocationY="1014" Datastore="store_451_x03_y28.yap" SimListenPort="9551" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_452.xml b/share/regions/config_452.xml
new file mode 100644
index 0000000..e2d8006
--- /dev/null
+++ b/share/regions/config_452.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c4" SimName="452" SimLocationX="1004" SimLocationY="1014" Datastore="store_452_x04_y28.yap" SimListenPort="9552" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_453.xml b/share/regions/config_453.xml
new file mode 100644
index 0000000..207829e
--- /dev/null
+++ b/share/regions/config_453.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c5" SimName="453" SimLocationX="1005" SimLocationY="1014" Datastore="store_453_x05_y28.yap" SimListenPort="9553" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_454.xml b/share/regions/config_454.xml
new file mode 100644
index 0000000..d216735
--- /dev/null
+++ b/share/regions/config_454.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c6" SimName="454" SimLocationX="1006" SimLocationY="1014" Datastore="store_454_x06_y28.yap" SimListenPort="9554" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_455.xml b/share/regions/config_455.xml
new file mode 100644
index 0000000..82fae24
--- /dev/null
+++ b/share/regions/config_455.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c7" SimName="455" SimLocationX="1007" SimLocationY="1014" Datastore="store_455_x07_y28.yap" SimListenPort="9555" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_456.xml b/share/regions/config_456.xml
new file mode 100644
index 0000000..0487f14
--- /dev/null
+++ b/share/regions/config_456.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c8" SimName="456" SimLocationX="1008" SimLocationY="1014" Datastore="store_456_x08_y28.yap" SimListenPort="9556" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_457.xml b/share/regions/config_457.xml
new file mode 100644
index 0000000..858c3e0
--- /dev/null
+++ b/share/regions/config_457.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1c9" SimName="457" SimLocationX="1009" SimLocationY="1014" Datastore="store_457_x09_y28.yap" SimListenPort="9557" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_458.xml b/share/regions/config_458.xml
new file mode 100644
index 0000000..09e4a6c
--- /dev/null
+++ b/share/regions/config_458.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ca" SimName="458" SimLocationX="1010" SimLocationY="1014" Datastore="store_458_x10_y28.yap" SimListenPort="9558" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_459.xml b/share/regions/config_459.xml
new file mode 100644
index 0000000..f0f069c
--- /dev/null
+++ b/share/regions/config_459.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1cb" SimName="459" SimLocationX="1011" SimLocationY="1014" Datastore="store_459_x11_y28.yap" SimListenPort="9559" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_46.xml b/share/regions/config_46.xml
new file mode 100644
index 0000000..e2b865c
--- /dev/null
+++ b/share/regions/config_46.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf02e" SimName="46" SimLocationX="1014" SimLocationY="1001" Datastore="store_46_x14_y02.yap" SimListenPort="9146" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_460.xml b/share/regions/config_460.xml
new file mode 100644
index 0000000..d90b4d2
--- /dev/null
+++ b/share/regions/config_460.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1cc" SimName="460" SimLocationX="1012" SimLocationY="1014" Datastore="store_460_x12_y28.yap" SimListenPort="9560" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_461.xml b/share/regions/config_461.xml
new file mode 100644
index 0000000..18bc3d7
--- /dev/null
+++ b/share/regions/config_461.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1cd" SimName="461" SimLocationX="1013" SimLocationY="1014" Datastore="store_461_x13_y28.yap" SimListenPort="9561" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_462.xml b/share/regions/config_462.xml
new file mode 100644
index 0000000..1d89c58
--- /dev/null
+++ b/share/regions/config_462.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ce" SimName="462" SimLocationX="1014" SimLocationY="1014" Datastore="store_462_x14_y28.yap" SimListenPort="9562" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_463.xml b/share/regions/config_463.xml
new file mode 100644
index 0000000..55c5dfd
--- /dev/null
+++ b/share/regions/config_463.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1cf" SimName="463" SimLocationX="1015" SimLocationY="1014" Datastore="store_463_x15_y28.yap" SimListenPort="9563" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_464.xml b/share/regions/config_464.xml
new file mode 100644
index 0000000..0831e89
--- /dev/null
+++ b/share/regions/config_464.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d0" SimName="464" SimLocationX="1016" SimLocationY="1014" Datastore="store_464_x00_y29.yap" SimListenPort="9564" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_465.xml b/share/regions/config_465.xml
new file mode 100644
index 0000000..0f5c04b
--- /dev/null
+++ b/share/regions/config_465.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d1" SimName="465" SimLocationX="1017" SimLocationY="1014" Datastore="store_465_x01_y29.yap" SimListenPort="9565" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_466.xml b/share/regions/config_466.xml
new file mode 100644
index 0000000..6ae69b0
--- /dev/null
+++ b/share/regions/config_466.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d2" SimName="466" SimLocationX="1018" SimLocationY="1014" Datastore="store_466_x02_y29.yap" SimListenPort="9566" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_467.xml b/share/regions/config_467.xml
new file mode 100644
index 0000000..b9904a3
--- /dev/null
+++ b/share/regions/config_467.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d3" SimName="467" SimLocationX="1019" SimLocationY="1014" Datastore="store_467_x03_y29.yap" SimListenPort="9567" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_468.xml b/share/regions/config_468.xml
new file mode 100644
index 0000000..94ed66a
--- /dev/null
+++ b/share/regions/config_468.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d4" SimName="468" SimLocationX="1020" SimLocationY="1014" Datastore="store_468_x04_y29.yap" SimListenPort="9568" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_469.xml b/share/regions/config_469.xml
new file mode 100644
index 0000000..5ac092e
--- /dev/null
+++ b/share/regions/config_469.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d5" SimName="469" SimLocationX="1021" SimLocationY="1014" Datastore="store_469_x05_y29.yap" SimListenPort="9569" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_47.xml b/share/regions/config_47.xml
new file mode 100644
index 0000000..b0efa2b
--- /dev/null
+++ b/share/regions/config_47.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf02f" SimName="47" SimLocationX="1015" SimLocationY="1001" Datastore="store_47_x15_y02.yap" SimListenPort="9147" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y13.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_470.xml b/share/regions/config_470.xml
new file mode 100644
index 0000000..c1d592a
--- /dev/null
+++ b/share/regions/config_470.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d6" SimName="470" SimLocationX="1022" SimLocationY="1014" Datastore="store_470_x06_y29.yap" SimListenPort="9570" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_471.xml b/share/regions/config_471.xml
new file mode 100644
index 0000000..4a53f11
--- /dev/null
+++ b/share/regions/config_471.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d7" SimName="471" SimLocationX="1023" SimLocationY="1014" Datastore="store_471_x07_y29.yap" SimListenPort="9571" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_472.xml b/share/regions/config_472.xml
new file mode 100644
index 0000000..e5e387c
--- /dev/null
+++ b/share/regions/config_472.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d8" SimName="472" SimLocationX="1024" SimLocationY="1014" Datastore="store_472_x08_y29.yap" SimListenPort="9572" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_473.xml b/share/regions/config_473.xml
new file mode 100644
index 0000000..4303c15
--- /dev/null
+++ b/share/regions/config_473.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1d9" SimName="473" SimLocationX="1025" SimLocationY="1014" Datastore="store_473_x09_y29.yap" SimListenPort="9573" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_474.xml b/share/regions/config_474.xml
new file mode 100644
index 0000000..77c264f
--- /dev/null
+++ b/share/regions/config_474.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1da" SimName="474" SimLocationX="1026" SimLocationY="1014" Datastore="store_474_x10_y29.yap" SimListenPort="9574" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_475.xml b/share/regions/config_475.xml
new file mode 100644
index 0000000..d1d660f
--- /dev/null
+++ b/share/regions/config_475.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1db" SimName="475" SimLocationX="1027" SimLocationY="1014" Datastore="store_475_x11_y29.yap" SimListenPort="9575" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_476.xml b/share/regions/config_476.xml
new file mode 100644
index 0000000..7daed61
--- /dev/null
+++ b/share/regions/config_476.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1dc" SimName="476" SimLocationX="1028" SimLocationY="1014" Datastore="store_476_x12_y29.yap" SimListenPort="9576" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_477.xml b/share/regions/config_477.xml
new file mode 100644
index 0000000..d146e10
--- /dev/null
+++ b/share/regions/config_477.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1dd" SimName="477" SimLocationX="1029" SimLocationY="1014" Datastore="store_477_x13_y29.yap" SimListenPort="9577" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_478.xml b/share/regions/config_478.xml
new file mode 100644
index 0000000..e1d4b30
--- /dev/null
+++ b/share/regions/config_478.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1de" SimName="478" SimLocationX="1030" SimLocationY="1014" Datastore="store_478_x14_y29.yap" SimListenPort="9578" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_479.xml b/share/regions/config_479.xml
new file mode 100644
index 0000000..8b8d0a8
--- /dev/null
+++ b/share/regions/config_479.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1df" SimName="479" SimLocationX="1031" SimLocationY="1014" Datastore="store_479_x15_y29.yap" SimListenPort="9579" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-14.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_48.xml b/share/regions/config_48.xml
new file mode 100644
index 0000000..ce31b09
--- /dev/null
+++ b/share/regions/config_48.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf030" SimName="48" SimLocationX="1016" SimLocationY="1001" Datastore="store_48_x00_y03.yap" SimListenPort="9148" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_480.xml b/share/regions/config_480.xml
new file mode 100644
index 0000000..b6fecdc
--- /dev/null
+++ b/share/regions/config_480.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e0" SimName="480" SimLocationX="1000" SimLocationY="1015" Datastore="store_480_x00_y30.yap" SimListenPort="9580" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_481.xml b/share/regions/config_481.xml
new file mode 100644
index 0000000..ec438e5
--- /dev/null
+++ b/share/regions/config_481.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e1" SimName="481" SimLocationX="1001" SimLocationY="1015" Datastore="store_481_x01_y30.yap" SimListenPort="9581" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_482.xml b/share/regions/config_482.xml
new file mode 100644
index 0000000..c684968
--- /dev/null
+++ b/share/regions/config_482.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e2" SimName="482" SimLocationX="1002" SimLocationY="1015" Datastore="store_482_x02_y30.yap" SimListenPort="9582" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_483.xml b/share/regions/config_483.xml
new file mode 100644
index 0000000..a22c870
--- /dev/null
+++ b/share/regions/config_483.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e3" SimName="483" SimLocationX="1003" SimLocationY="1015" Datastore="store_483_x03_y30.yap" SimListenPort="9583" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_484.xml b/share/regions/config_484.xml
new file mode 100644
index 0000000..27d3e36
--- /dev/null
+++ b/share/regions/config_484.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e4" SimName="484" SimLocationX="1004" SimLocationY="1015" Datastore="store_484_x04_y30.yap" SimListenPort="9584" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_485.xml b/share/regions/config_485.xml
new file mode 100644
index 0000000..cd85329
--- /dev/null
+++ b/share/regions/config_485.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e5" SimName="485" SimLocationX="1005" SimLocationY="1015" Datastore="store_485_x05_y30.yap" SimListenPort="9585" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_486.xml b/share/regions/config_486.xml
new file mode 100644
index 0000000..4c6667a
--- /dev/null
+++ b/share/regions/config_486.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e6" SimName="486" SimLocationX="1006" SimLocationY="1015" Datastore="store_486_x06_y30.yap" SimListenPort="9586" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_487.xml b/share/regions/config_487.xml
new file mode 100644
index 0000000..96a2da7
--- /dev/null
+++ b/share/regions/config_487.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e7" SimName="487" SimLocationX="1007" SimLocationY="1015" Datastore="store_487_x07_y30.yap" SimListenPort="9587" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_488.xml b/share/regions/config_488.xml
new file mode 100644
index 0000000..f8e7e04
--- /dev/null
+++ b/share/regions/config_488.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e8" SimName="488" SimLocationX="1008" SimLocationY="1015" Datastore="store_488_x08_y30.yap" SimListenPort="9588" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_489.xml b/share/regions/config_489.xml
new file mode 100644
index 0000000..1209ee0
--- /dev/null
+++ b/share/regions/config_489.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1e9" SimName="489" SimLocationX="1009" SimLocationY="1015" Datastore="store_489_x09_y30.yap" SimListenPort="9589" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_49.xml b/share/regions/config_49.xml
new file mode 100644
index 0000000..4c775f0
--- /dev/null
+++ b/share/regions/config_49.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf031" SimName="49" SimLocationX="1017" SimLocationY="1001" Datastore="store_49_x01_y03.yap" SimListenPort="9149" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_490.xml b/share/regions/config_490.xml
new file mode 100644
index 0000000..4f125ac
--- /dev/null
+++ b/share/regions/config_490.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ea" SimName="490" SimLocationX="1010" SimLocationY="1015" Datastore="store_490_x10_y30.yap" SimListenPort="9590" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_491.xml b/share/regions/config_491.xml
new file mode 100644
index 0000000..7ed67c4
--- /dev/null
+++ b/share/regions/config_491.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1eb" SimName="491" SimLocationX="1011" SimLocationY="1015" Datastore="store_491_x11_y30.yap" SimListenPort="9591" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_492.xml b/share/regions/config_492.xml
new file mode 100644
index 0000000..8a8bbaa
--- /dev/null
+++ b/share/regions/config_492.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ec" SimName="492" SimLocationX="1012" SimLocationY="1015" Datastore="store_492_x12_y30.yap" SimListenPort="9592" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_493.xml b/share/regions/config_493.xml
new file mode 100644
index 0000000..b6238a3
--- /dev/null
+++ b/share/regions/config_493.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ed" SimName="493" SimLocationX="1013" SimLocationY="1015" Datastore="store_493_x13_y30.yap" SimListenPort="9593" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_494.xml b/share/regions/config_494.xml
new file mode 100644
index 0000000..2c4e400
--- /dev/null
+++ b/share/regions/config_494.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ee" SimName="494" SimLocationX="1014" SimLocationY="1015" Datastore="store_494_x14_y30.yap" SimListenPort="9594" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_495.xml b/share/regions/config_495.xml
new file mode 100644
index 0000000..f249907
--- /dev/null
+++ b/share/regions/config_495.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ef" SimName="495" SimLocationX="1015" SimLocationY="1015" Datastore="store_495_x15_y30.yap" SimListenPort="9595" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_496.xml b/share/regions/config_496.xml
new file mode 100644
index 0000000..c5870f2
--- /dev/null
+++ b/share/regions/config_496.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f0" SimName="496" SimLocationX="1016" SimLocationY="1015" Datastore="store_496_x00_y31.yap" SimListenPort="9596" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_497.xml b/share/regions/config_497.xml
new file mode 100644
index 0000000..efeeda6
--- /dev/null
+++ b/share/regions/config_497.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f1" SimName="497" SimLocationX="1017" SimLocationY="1015" Datastore="store_497_x01_y31.yap" SimListenPort="9597" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_498.xml b/share/regions/config_498.xml
new file mode 100644
index 0000000..257e3a4
--- /dev/null
+++ b/share/regions/config_498.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f2" SimName="498" SimLocationX="1018" SimLocationY="1015" Datastore="store_498_x02_y31.yap" SimListenPort="9598" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_499.xml b/share/regions/config_499.xml
new file mode 100644
index 0000000..b42f29b
--- /dev/null
+++ b/share/regions/config_499.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f3" SimName="499" SimLocationX="1019" SimLocationY="1015" Datastore="store_499_x03_y31.yap" SimListenPort="9599" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_5.xml b/share/regions/config_5.xml
new file mode 100644
index 0000000..b32cb4b
--- /dev/null
+++ b/share/regions/config_5.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf005" SimName="5" SimLocationX="1005" SimLocationY="1000" Datastore="store_5_x05_y00.yap" SimListenPort="9105" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_50.xml b/share/regions/config_50.xml
new file mode 100644
index 0000000..bd3138f
--- /dev/null
+++ b/share/regions/config_50.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf032" SimName="50" SimLocationX="1018" SimLocationY="1001" Datastore="store_50_x02_y03.yap" SimListenPort="9150" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_500.xml b/share/regions/config_500.xml
new file mode 100644
index 0000000..d272b8f
--- /dev/null
+++ b/share/regions/config_500.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f4" SimName="500" SimLocationX="1020" SimLocationY="1015" Datastore="store_500_x04_y31.yap" SimListenPort="9600" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_501.xml b/share/regions/config_501.xml
new file mode 100644
index 0000000..70701c3
--- /dev/null
+++ b/share/regions/config_501.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f5" SimName="501" SimLocationX="1021" SimLocationY="1015" Datastore="store_501_x05_y31.yap" SimListenPort="9601" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_502.xml b/share/regions/config_502.xml
new file mode 100644
index 0000000..f29d78f
--- /dev/null
+++ b/share/regions/config_502.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f6" SimName="502" SimLocationX="1022" SimLocationY="1015" Datastore="store_502_x06_y31.yap" SimListenPort="9602" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_503.xml b/share/regions/config_503.xml
new file mode 100644
index 0000000..fc27205
--- /dev/null
+++ b/share/regions/config_503.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f7" SimName="503" SimLocationX="1023" SimLocationY="1015" Datastore="store_503_x07_y31.yap" SimListenPort="9603" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_504.xml b/share/regions/config_504.xml
new file mode 100644
index 0000000..4324371
--- /dev/null
+++ b/share/regions/config_504.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f8" SimName="504" SimLocationX="1024" SimLocationY="1015" Datastore="store_504_x08_y31.yap" SimListenPort="9604" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_505.xml b/share/regions/config_505.xml
new file mode 100644
index 0000000..b5d7933
--- /dev/null
+++ b/share/regions/config_505.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1f9" SimName="505" SimLocationX="1025" SimLocationY="1015" Datastore="store_505_x09_y31.yap" SimListenPort="9605" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_506.xml b/share/regions/config_506.xml
new file mode 100644
index 0000000..9c34e60
--- /dev/null
+++ b/share/regions/config_506.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1fa" SimName="506" SimLocationX="1026" SimLocationY="1015" Datastore="store_506_x10_y31.yap" SimListenPort="9606" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_507.xml b/share/regions/config_507.xml
new file mode 100644
index 0000000..8cf3e32
--- /dev/null
+++ b/share/regions/config_507.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1fb" SimName="507" SimLocationX="1027" SimLocationY="1015" Datastore="store_507_x11_y31.yap" SimListenPort="9607" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_508.xml b/share/regions/config_508.xml
new file mode 100644
index 0000000..629dc2f
--- /dev/null
+++ b/share/regions/config_508.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1fc" SimName="508" SimLocationX="1028" SimLocationY="1015" Datastore="store_508_x12_y31.yap" SimListenPort="9608" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_509.xml b/share/regions/config_509.xml
new file mode 100644
index 0000000..f850296
--- /dev/null
+++ b/share/regions/config_509.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1fd" SimName="509" SimLocationX="1029" SimLocationY="1015" Datastore="store_509_x13_y31.yap" SimListenPort="9609" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_51.xml b/share/regions/config_51.xml
new file mode 100644
index 0000000..f40bd4e
--- /dev/null
+++ b/share/regions/config_51.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf033" SimName="51" SimLocationX="1019" SimLocationY="1001" Datastore="store_51_x03_y03.yap" SimListenPort="9151" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_510.xml b/share/regions/config_510.xml
new file mode 100644
index 0000000..84c7aa3
--- /dev/null
+++ b/share/regions/config_510.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1fe" SimName="510" SimLocationX="1030" SimLocationY="1015" Datastore="store_510_x14_y31.yap" SimListenPort="9610" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_511.xml b/share/regions/config_511.xml
new file mode 100644
index 0000000..e802fe9
--- /dev/null
+++ b/share/regions/config_511.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf1ff" SimName="511" SimLocationX="1031" SimLocationY="1015" Datastore="store_511_x15_y31.yap" SimListenPort="9611" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-16.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_512.xml b/share/regions/config_512.xml
new file mode 100644
index 0000000..2c7f382
--- /dev/null
+++ b/share/regions/config_512.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf200" SimName="512" SimLocationX="1000" SimLocationY="1016" Datastore="store_512_x00_y32.yap" SimListenPort="9612" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_513.xml b/share/regions/config_513.xml
new file mode 100644
index 0000000..3f8b78e
--- /dev/null
+++ b/share/regions/config_513.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf201" SimName="513" SimLocationX="1001" SimLocationY="1016" Datastore="store_513_x01_y32.yap" SimListenPort="9613" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_514.xml b/share/regions/config_514.xml
new file mode 100644
index 0000000..ce0b6c3
--- /dev/null
+++ b/share/regions/config_514.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf202" SimName="514" SimLocationX="1002" SimLocationY="1016" Datastore="store_514_x02_y32.yap" SimListenPort="9614" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_515.xml b/share/regions/config_515.xml
new file mode 100644
index 0000000..bbea25c
--- /dev/null
+++ b/share/regions/config_515.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf203" SimName="515" SimLocationX="1003" SimLocationY="1016" Datastore="store_515_x03_y32.yap" SimListenPort="9615" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_516.xml b/share/regions/config_516.xml
new file mode 100644
index 0000000..b71f9c9
--- /dev/null
+++ b/share/regions/config_516.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf204" SimName="516" SimLocationX="1004" SimLocationY="1016" Datastore="store_516_x04_y32.yap" SimListenPort="9616" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_517.xml b/share/regions/config_517.xml
new file mode 100644
index 0000000..6c113bd
--- /dev/null
+++ b/share/regions/config_517.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf205" SimName="517" SimLocationX="1005" SimLocationY="1016" Datastore="store_517_x05_y32.yap" SimListenPort="9617" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_518.xml b/share/regions/config_518.xml
new file mode 100644
index 0000000..0091020
--- /dev/null
+++ b/share/regions/config_518.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf206" SimName="518" SimLocationX="1006" SimLocationY="1016" Datastore="store_518_x06_y32.yap" SimListenPort="9618" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_519.xml b/share/regions/config_519.xml
new file mode 100644
index 0000000..deb4357
--- /dev/null
+++ b/share/regions/config_519.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf207" SimName="519" SimLocationX="1007" SimLocationY="1016" Datastore="store_519_x07_y32.yap" SimListenPort="9619" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_52.xml b/share/regions/config_52.xml
new file mode 100644
index 0000000..32b8f45
--- /dev/null
+++ b/share/regions/config_52.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf034" SimName="52" SimLocationX="1020" SimLocationY="1001" Datastore="store_52_x04_y03.yap" SimListenPort="9152" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_520.xml b/share/regions/config_520.xml
new file mode 100644
index 0000000..a6bbdfc
--- /dev/null
+++ b/share/regions/config_520.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf208" SimName="520" SimLocationX="1008" SimLocationY="1016" Datastore="store_520_x08_y32.yap" SimListenPort="9620" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_521.xml b/share/regions/config_521.xml
new file mode 100644
index 0000000..11bb267
--- /dev/null
+++ b/share/regions/config_521.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf209" SimName="521" SimLocationX="1009" SimLocationY="1016" Datastore="store_521_x09_y32.yap" SimListenPort="9621" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_522.xml b/share/regions/config_522.xml
new file mode 100644
index 0000000..4bd3d4c
--- /dev/null
+++ b/share/regions/config_522.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf20a" SimName="522" SimLocationX="1010" SimLocationY="1016" Datastore="store_522_x10_y32.yap" SimListenPort="9622" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_523.xml b/share/regions/config_523.xml
new file mode 100644
index 0000000..9b71352
--- /dev/null
+++ b/share/regions/config_523.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf20b" SimName="523" SimLocationX="1011" SimLocationY="1016" Datastore="store_523_x11_y32.yap" SimListenPort="9623" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_524.xml b/share/regions/config_524.xml
new file mode 100644
index 0000000..bdac61a
--- /dev/null
+++ b/share/regions/config_524.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf20c" SimName="524" SimLocationX="1012" SimLocationY="1016" Datastore="store_524_x12_y32.yap" SimListenPort="9624" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_525.xml b/share/regions/config_525.xml
new file mode 100644
index 0000000..4bffa37
--- /dev/null
+++ b/share/regions/config_525.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf20d" SimName="525" SimLocationX="1013" SimLocationY="1016" Datastore="store_525_x13_y32.yap" SimListenPort="9625" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_526.xml b/share/regions/config_526.xml
new file mode 100644
index 0000000..a85625e
--- /dev/null
+++ b/share/regions/config_526.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf20e" SimName="526" SimLocationX="1014" SimLocationY="1016" Datastore="store_526_x14_y32.yap" SimListenPort="9626" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_527.xml b/share/regions/config_527.xml
new file mode 100644
index 0000000..0ca64ea
--- /dev/null
+++ b/share/regions/config_527.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf20f" SimName="527" SimLocationX="1015" SimLocationY="1016" Datastore="store_527_x15_y32.yap" SimListenPort="9627" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-17.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_528.xml b/share/regions/config_528.xml
new file mode 100644
index 0000000..8bf8a53
--- /dev/null
+++ b/share/regions/config_528.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf210" SimName="528" SimLocationX="1016" SimLocationY="1016" Datastore="store_528_x00_y33.yap" SimListenPort="9628" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_529.xml b/share/regions/config_529.xml
new file mode 100644
index 0000000..d09b185
--- /dev/null
+++ b/share/regions/config_529.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf211" SimName="529" SimLocationX="1017" SimLocationY="1016" Datastore="store_529_x01_y33.yap" SimListenPort="9629" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_53.xml b/share/regions/config_53.xml
new file mode 100644
index 0000000..8ae55e1
--- /dev/null
+++ b/share/regions/config_53.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf035" SimName="53" SimLocationX="1021" SimLocationY="1001" Datastore="store_53_x05_y03.yap" SimListenPort="9153" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_530.xml b/share/regions/config_530.xml
new file mode 100644
index 0000000..aed5fbc
--- /dev/null
+++ b/share/regions/config_530.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf212" SimName="530" SimLocationX="1018" SimLocationY="1016" Datastore="store_530_x02_y33.yap" SimListenPort="9630" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_531.xml b/share/regions/config_531.xml
new file mode 100644
index 0000000..2ad352f
--- /dev/null
+++ b/share/regions/config_531.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf213" SimName="531" SimLocationX="1019" SimLocationY="1016" Datastore="store_531_x03_y33.yap" SimListenPort="9631" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_532.xml b/share/regions/config_532.xml
new file mode 100644
index 0000000..7650354
--- /dev/null
+++ b/share/regions/config_532.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf214" SimName="532" SimLocationX="1020" SimLocationY="1016" Datastore="store_532_x04_y33.yap" SimListenPort="9632" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_533.xml b/share/regions/config_533.xml
new file mode 100644
index 0000000..2bcfe71
--- /dev/null
+++ b/share/regions/config_533.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf215" SimName="533" SimLocationX="1021" SimLocationY="1016" Datastore="store_533_x05_y33.yap" SimListenPort="9633" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_534.xml b/share/regions/config_534.xml
new file mode 100644
index 0000000..2484ebc
--- /dev/null
+++ b/share/regions/config_534.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf216" SimName="534" SimLocationX="1022" SimLocationY="1016" Datastore="store_534_x06_y33.yap" SimListenPort="9634" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_535.xml b/share/regions/config_535.xml
new file mode 100644
index 0000000..c3310dd
--- /dev/null
+++ b/share/regions/config_535.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf217" SimName="535" SimLocationX="1023" SimLocationY="1016" Datastore="store_535_x07_y33.yap" SimListenPort="9635" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_536.xml b/share/regions/config_536.xml
new file mode 100644
index 0000000..a2733cf
--- /dev/null
+++ b/share/regions/config_536.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf218" SimName="536" SimLocationX="1024" SimLocationY="1016" Datastore="store_536_x08_y33.yap" SimListenPort="9636" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_537.xml b/share/regions/config_537.xml
new file mode 100644
index 0000000..fb04dc7
--- /dev/null
+++ b/share/regions/config_537.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf219" SimName="537" SimLocationX="1025" SimLocationY="1016" Datastore="store_537_x09_y33.yap" SimListenPort="9637" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_538.xml b/share/regions/config_538.xml
new file mode 100644
index 0000000..5c027f5
--- /dev/null
+++ b/share/regions/config_538.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf21a" SimName="538" SimLocationX="1026" SimLocationY="1016" Datastore="store_538_x10_y33.yap" SimListenPort="9638" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_539.xml b/share/regions/config_539.xml
new file mode 100644
index 0000000..6f892e1
--- /dev/null
+++ b/share/regions/config_539.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf21b" SimName="539" SimLocationX="1027" SimLocationY="1016" Datastore="store_539_x11_y33.yap" SimListenPort="9639" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_54.xml b/share/regions/config_54.xml
new file mode 100644
index 0000000..79e56bf
--- /dev/null
+++ b/share/regions/config_54.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf036" SimName="54" SimLocationX="1022" SimLocationY="1001" Datastore="store_54_x06_y03.yap" SimListenPort="9154" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_540.xml b/share/regions/config_540.xml
new file mode 100644
index 0000000..f9a02ba
--- /dev/null
+++ b/share/regions/config_540.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf21c" SimName="540" SimLocationX="1028" SimLocationY="1016" Datastore="store_540_x12_y33.yap" SimListenPort="9640" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_541.xml b/share/regions/config_541.xml
new file mode 100644
index 0000000..0f16ce2
--- /dev/null
+++ b/share/regions/config_541.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf21d" SimName="541" SimLocationX="1029" SimLocationY="1016" Datastore="store_541_x13_y33.yap" SimListenPort="9641" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_542.xml b/share/regions/config_542.xml
new file mode 100644
index 0000000..0d2800b
--- /dev/null
+++ b/share/regions/config_542.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf21e" SimName="542" SimLocationX="1030" SimLocationY="1016" Datastore="store_542_x14_y33.yap" SimListenPort="9642" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_543.xml b/share/regions/config_543.xml
new file mode 100644
index 0000000..e523447
--- /dev/null
+++ b/share/regions/config_543.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf21f" SimName="543" SimLocationX="1031" SimLocationY="1016" Datastore="store_543_x15_y33.yap" SimListenPort="9643" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-18.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_544.xml b/share/regions/config_544.xml
new file mode 100644
index 0000000..e778d54
--- /dev/null
+++ b/share/regions/config_544.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf220" SimName="544" SimLocationX="1000" SimLocationY="1017" Datastore="store_544_x00_y34.yap" SimListenPort="9644" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_545.xml b/share/regions/config_545.xml
new file mode 100644
index 0000000..d3361b2
--- /dev/null
+++ b/share/regions/config_545.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf221" SimName="545" SimLocationX="1001" SimLocationY="1017" Datastore="store_545_x01_y34.yap" SimListenPort="9645" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_546.xml b/share/regions/config_546.xml
new file mode 100644
index 0000000..4421558
--- /dev/null
+++ b/share/regions/config_546.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf222" SimName="546" SimLocationX="1002" SimLocationY="1017" Datastore="store_546_x02_y34.yap" SimListenPort="9646" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_547.xml b/share/regions/config_547.xml
new file mode 100644
index 0000000..90ec378
--- /dev/null
+++ b/share/regions/config_547.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf223" SimName="547" SimLocationX="1003" SimLocationY="1017" Datastore="store_547_x03_y34.yap" SimListenPort="9647" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_548.xml b/share/regions/config_548.xml
new file mode 100644
index 0000000..c7c5ab9
--- /dev/null
+++ b/share/regions/config_548.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf224" SimName="548" SimLocationX="1004" SimLocationY="1017" Datastore="store_548_x04_y34.yap" SimListenPort="9648" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_549.xml b/share/regions/config_549.xml
new file mode 100644
index 0000000..23f426f
--- /dev/null
+++ b/share/regions/config_549.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf225" SimName="549" SimLocationX="1005" SimLocationY="1017" Datastore="store_549_x05_y34.yap" SimListenPort="9649" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_55.xml b/share/regions/config_55.xml
new file mode 100644
index 0000000..1c95a26
--- /dev/null
+++ b/share/regions/config_55.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf037" SimName="55" SimLocationX="1023" SimLocationY="1001" Datastore="store_55_x07_y03.yap" SimListenPort="9155" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_550.xml b/share/regions/config_550.xml
new file mode 100644
index 0000000..9200dde
--- /dev/null
+++ b/share/regions/config_550.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf226" SimName="550" SimLocationX="1006" SimLocationY="1017" Datastore="store_550_x06_y34.yap" SimListenPort="9650" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_551.xml b/share/regions/config_551.xml
new file mode 100644
index 0000000..b0afa2e
--- /dev/null
+++ b/share/regions/config_551.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf227" SimName="551" SimLocationX="1007" SimLocationY="1017" Datastore="store_551_x07_y34.yap" SimListenPort="9651" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_552.xml b/share/regions/config_552.xml
new file mode 100644
index 0000000..a2ff8ce
--- /dev/null
+++ b/share/regions/config_552.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf228" SimName="552" SimLocationX="1008" SimLocationY="1017" Datastore="store_552_x08_y34.yap" SimListenPort="9652" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_553.xml b/share/regions/config_553.xml
new file mode 100644
index 0000000..504c70b
--- /dev/null
+++ b/share/regions/config_553.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf229" SimName="553" SimLocationX="1009" SimLocationY="1017" Datastore="store_553_x09_y34.yap" SimListenPort="9653" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_554.xml b/share/regions/config_554.xml
new file mode 100644
index 0000000..0f07c23
--- /dev/null
+++ b/share/regions/config_554.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf22a" SimName="554" SimLocationX="1010" SimLocationY="1017" Datastore="store_554_x10_y34.yap" SimListenPort="9654" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_555.xml b/share/regions/config_555.xml
new file mode 100644
index 0000000..780a240
--- /dev/null
+++ b/share/regions/config_555.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf22b" SimName="555" SimLocationX="1011" SimLocationY="1017" Datastore="store_555_x11_y34.yap" SimListenPort="9655" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_556.xml b/share/regions/config_556.xml
new file mode 100644
index 0000000..cc01dff
--- /dev/null
+++ b/share/regions/config_556.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf22c" SimName="556" SimLocationX="1012" SimLocationY="1017" Datastore="store_556_x12_y34.yap" SimListenPort="9656" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_557.xml b/share/regions/config_557.xml
new file mode 100644
index 0000000..af57ec2
--- /dev/null
+++ b/share/regions/config_557.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf22d" SimName="557" SimLocationX="1013" SimLocationY="1017" Datastore="store_557_x13_y34.yap" SimListenPort="9657" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_558.xml b/share/regions/config_558.xml
new file mode 100644
index 0000000..f34c431
--- /dev/null
+++ b/share/regions/config_558.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf22e" SimName="558" SimLocationX="1014" SimLocationY="1017" Datastore="store_558_x14_y34.yap" SimListenPort="9658" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_559.xml b/share/regions/config_559.xml
new file mode 100644
index 0000000..11ba4a5
--- /dev/null
+++ b/share/regions/config_559.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf22f" SimName="559" SimLocationX="1015" SimLocationY="1017" Datastore="store_559_x15_y34.yap" SimListenPort="9659" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-19.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_56.xml b/share/regions/config_56.xml
new file mode 100644
index 0000000..22d3547
--- /dev/null
+++ b/share/regions/config_56.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf038" SimName="56" SimLocationX="1024" SimLocationY="1001" Datastore="store_56_x08_y03.yap" SimListenPort="9156" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_560.xml b/share/regions/config_560.xml
new file mode 100644
index 0000000..62d856b
--- /dev/null
+++ b/share/regions/config_560.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf230" SimName="560" SimLocationX="1016" SimLocationY="1017" Datastore="store_560_x00_y35.yap" SimListenPort="9660" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_561.xml b/share/regions/config_561.xml
new file mode 100644
index 0000000..823f3aa
--- /dev/null
+++ b/share/regions/config_561.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf231" SimName="561" SimLocationX="1017" SimLocationY="1017" Datastore="store_561_x01_y35.yap" SimListenPort="9661" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_562.xml b/share/regions/config_562.xml
new file mode 100644
index 0000000..c364231
--- /dev/null
+++ b/share/regions/config_562.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf232" SimName="562" SimLocationX="1018" SimLocationY="1017" Datastore="store_562_x02_y35.yap" SimListenPort="9662" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_563.xml b/share/regions/config_563.xml
new file mode 100644
index 0000000..26e60c7
--- /dev/null
+++ b/share/regions/config_563.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf233" SimName="563" SimLocationX="1019" SimLocationY="1017" Datastore="store_563_x03_y35.yap" SimListenPort="9663" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_564.xml b/share/regions/config_564.xml
new file mode 100644
index 0000000..98f671b
--- /dev/null
+++ b/share/regions/config_564.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf234" SimName="564" SimLocationX="1020" SimLocationY="1017" Datastore="store_564_x04_y35.yap" SimListenPort="9664" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_565.xml b/share/regions/config_565.xml
new file mode 100644
index 0000000..40877b1
--- /dev/null
+++ b/share/regions/config_565.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf235" SimName="565" SimLocationX="1021" SimLocationY="1017" Datastore="store_565_x05_y35.yap" SimListenPort="9665" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_566.xml b/share/regions/config_566.xml
new file mode 100644
index 0000000..efeaf26
--- /dev/null
+++ b/share/regions/config_566.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf236" SimName="566" SimLocationX="1022" SimLocationY="1017" Datastore="store_566_x06_y35.yap" SimListenPort="9666" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_567.xml b/share/regions/config_567.xml
new file mode 100644
index 0000000..5937c5f
--- /dev/null
+++ b/share/regions/config_567.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf237" SimName="567" SimLocationX="1023" SimLocationY="1017" Datastore="store_567_x07_y35.yap" SimListenPort="9667" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_568.xml b/share/regions/config_568.xml
new file mode 100644
index 0000000..62a019e
--- /dev/null
+++ b/share/regions/config_568.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf238" SimName="568" SimLocationX="1024" SimLocationY="1017" Datastore="store_568_x08_y35.yap" SimListenPort="9668" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_569.xml b/share/regions/config_569.xml
new file mode 100644
index 0000000..e8e2d4c
--- /dev/null
+++ b/share/regions/config_569.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf239" SimName="569" SimLocationX="1025" SimLocationY="1017" Datastore="store_569_x09_y35.yap" SimListenPort="9669" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_57.xml b/share/regions/config_57.xml
new file mode 100644
index 0000000..57366a8
--- /dev/null
+++ b/share/regions/config_57.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf039" SimName="57" SimLocationX="1025" SimLocationY="1001" Datastore="store_57_x09_y03.yap" SimListenPort="9157" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_570.xml b/share/regions/config_570.xml
new file mode 100644
index 0000000..4f71090
--- /dev/null
+++ b/share/regions/config_570.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf23a" SimName="570" SimLocationX="1026" SimLocationY="1017" Datastore="store_570_x10_y35.yap" SimListenPort="9670" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_571.xml b/share/regions/config_571.xml
new file mode 100644
index 0000000..4aee950
--- /dev/null
+++ b/share/regions/config_571.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf23b" SimName="571" SimLocationX="1027" SimLocationY="1017" Datastore="store_571_x11_y35.yap" SimListenPort="9671" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_572.xml b/share/regions/config_572.xml
new file mode 100644
index 0000000..fb784b8
--- /dev/null
+++ b/share/regions/config_572.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf23c" SimName="572" SimLocationX="1028" SimLocationY="1017" Datastore="store_572_x12_y35.yap" SimListenPort="9672" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_573.xml b/share/regions/config_573.xml
new file mode 100644
index 0000000..ecfdb93
--- /dev/null
+++ b/share/regions/config_573.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf23d" SimName="573" SimLocationX="1029" SimLocationY="1017" Datastore="store_573_x13_y35.yap" SimListenPort="9673" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_574.xml b/share/regions/config_574.xml
new file mode 100644
index 0000000..4ac455d
--- /dev/null
+++ b/share/regions/config_574.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf23e" SimName="574" SimLocationX="1030" SimLocationY="1017" Datastore="store_574_x14_y35.yap" SimListenPort="9674" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_575.xml b/share/regions/config_575.xml
new file mode 100644
index 0000000..2dce467
--- /dev/null
+++ b/share/regions/config_575.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf23f" SimName="575" SimLocationX="1031" SimLocationY="1017" Datastore="store_575_x15_y35.yap" SimListenPort="9675" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-20.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_576.xml b/share/regions/config_576.xml
new file mode 100644
index 0000000..f870dcd
--- /dev/null
+++ b/share/regions/config_576.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf240" SimName="576" SimLocationX="1000" SimLocationY="1018" Datastore="store_576_x00_y36.yap" SimListenPort="9676" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_577.xml b/share/regions/config_577.xml
new file mode 100644
index 0000000..349d03b
--- /dev/null
+++ b/share/regions/config_577.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf241" SimName="577" SimLocationX="1001" SimLocationY="1018" Datastore="store_577_x01_y36.yap" SimListenPort="9677" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_578.xml b/share/regions/config_578.xml
new file mode 100644
index 0000000..eebe8bb
--- /dev/null
+++ b/share/regions/config_578.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf242" SimName="578" SimLocationX="1002" SimLocationY="1018" Datastore="store_578_x02_y36.yap" SimListenPort="9678" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_579.xml b/share/regions/config_579.xml
new file mode 100644
index 0000000..5970a14
--- /dev/null
+++ b/share/regions/config_579.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf243" SimName="579" SimLocationX="1003" SimLocationY="1018" Datastore="store_579_x03_y36.yap" SimListenPort="9679" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_58.xml b/share/regions/config_58.xml
new file mode 100644
index 0000000..2e8febd
--- /dev/null
+++ b/share/regions/config_58.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf03a" SimName="58" SimLocationX="1026" SimLocationY="1001" Datastore="store_58_x10_y03.yap" SimListenPort="9158" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_580.xml b/share/regions/config_580.xml
new file mode 100644
index 0000000..ee93b09
--- /dev/null
+++ b/share/regions/config_580.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf244" SimName="580" SimLocationX="1004" SimLocationY="1018" Datastore="store_580_x04_y36.yap" SimListenPort="9680" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_581.xml b/share/regions/config_581.xml
new file mode 100644
index 0000000..3d73d61
--- /dev/null
+++ b/share/regions/config_581.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf245" SimName="581" SimLocationX="1005" SimLocationY="1018" Datastore="store_581_x05_y36.yap" SimListenPort="9681" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_582.xml b/share/regions/config_582.xml
new file mode 100644
index 0000000..98f6b4f
--- /dev/null
+++ b/share/regions/config_582.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf246" SimName="582" SimLocationX="1006" SimLocationY="1018" Datastore="store_582_x06_y36.yap" SimListenPort="9682" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_583.xml b/share/regions/config_583.xml
new file mode 100644
index 0000000..e625c3e
--- /dev/null
+++ b/share/regions/config_583.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf247" SimName="583" SimLocationX="1007" SimLocationY="1018" Datastore="store_583_x07_y36.yap" SimListenPort="9683" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_584.xml b/share/regions/config_584.xml
new file mode 100644
index 0000000..5da7869
--- /dev/null
+++ b/share/regions/config_584.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf248" SimName="584" SimLocationX="1008" SimLocationY="1018" Datastore="store_584_x08_y36.yap" SimListenPort="9684" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_585.xml b/share/regions/config_585.xml
new file mode 100644
index 0000000..0d989a8
--- /dev/null
+++ b/share/regions/config_585.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf249" SimName="585" SimLocationX="1009" SimLocationY="1018" Datastore="store_585_x09_y36.yap" SimListenPort="9685" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_586.xml b/share/regions/config_586.xml
new file mode 100644
index 0000000..17941ae
--- /dev/null
+++ b/share/regions/config_586.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf24a" SimName="586" SimLocationX="1010" SimLocationY="1018" Datastore="store_586_x10_y36.yap" SimListenPort="9686" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_587.xml b/share/regions/config_587.xml
new file mode 100644
index 0000000..dd191d1
--- /dev/null
+++ b/share/regions/config_587.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf24b" SimName="587" SimLocationX="1011" SimLocationY="1018" Datastore="store_587_x11_y36.yap" SimListenPort="9687" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_588.xml b/share/regions/config_588.xml
new file mode 100644
index 0000000..c8e93b2
--- /dev/null
+++ b/share/regions/config_588.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf24c" SimName="588" SimLocationX="1012" SimLocationY="1018" Datastore="store_588_x12_y36.yap" SimListenPort="9688" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_589.xml b/share/regions/config_589.xml
new file mode 100644
index 0000000..bb65f6c
--- /dev/null
+++ b/share/regions/config_589.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf24d" SimName="589" SimLocationX="1013" SimLocationY="1018" Datastore="store_589_x13_y36.yap" SimListenPort="9689" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_59.xml b/share/regions/config_59.xml
new file mode 100644
index 0000000..5c5b754
--- /dev/null
+++ b/share/regions/config_59.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf03b" SimName="59" SimLocationX="1027" SimLocationY="1001" Datastore="store_59_x11_y03.yap" SimListenPort="9159" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_590.xml b/share/regions/config_590.xml
new file mode 100644
index 0000000..82bf00d
--- /dev/null
+++ b/share/regions/config_590.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf24e" SimName="590" SimLocationX="1014" SimLocationY="1018" Datastore="store_590_x14_y36.yap" SimListenPort="9690" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_591.xml b/share/regions/config_591.xml
new file mode 100644
index 0000000..3fb37d4
--- /dev/null
+++ b/share/regions/config_591.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf24f" SimName="591" SimLocationX="1015" SimLocationY="1018" Datastore="store_591_x15_y36.yap" SimListenPort="9691" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-21.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_592.xml b/share/regions/config_592.xml
new file mode 100644
index 0000000..0ffdab8
--- /dev/null
+++ b/share/regions/config_592.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf250" SimName="592" SimLocationX="1016" SimLocationY="1018" Datastore="store_592_x00_y37.yap" SimListenPort="9692" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_593.xml b/share/regions/config_593.xml
new file mode 100644
index 0000000..3e02f70
--- /dev/null
+++ b/share/regions/config_593.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf251" SimName="593" SimLocationX="1017" SimLocationY="1018" Datastore="store_593_x01_y37.yap" SimListenPort="9693" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_594.xml b/share/regions/config_594.xml
new file mode 100644
index 0000000..e75d997
--- /dev/null
+++ b/share/regions/config_594.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf252" SimName="594" SimLocationX="1018" SimLocationY="1018" Datastore="store_594_x02_y37.yap" SimListenPort="9694" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_595.xml b/share/regions/config_595.xml
new file mode 100644
index 0000000..57a58da
--- /dev/null
+++ b/share/regions/config_595.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf253" SimName="595" SimLocationX="1019" SimLocationY="1018" Datastore="store_595_x03_y37.yap" SimListenPort="9695" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_596.xml b/share/regions/config_596.xml
new file mode 100644
index 0000000..0a4f07f
--- /dev/null
+++ b/share/regions/config_596.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf254" SimName="596" SimLocationX="1020" SimLocationY="1018" Datastore="store_596_x04_y37.yap" SimListenPort="9696" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_597.xml b/share/regions/config_597.xml
new file mode 100644
index 0000000..1d74ae4
--- /dev/null
+++ b/share/regions/config_597.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf255" SimName="597" SimLocationX="1021" SimLocationY="1018" Datastore="store_597_x05_y37.yap" SimListenPort="9697" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_598.xml b/share/regions/config_598.xml
new file mode 100644
index 0000000..933d93d
--- /dev/null
+++ b/share/regions/config_598.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf256" SimName="598" SimLocationX="1022" SimLocationY="1018" Datastore="store_598_x06_y37.yap" SimListenPort="9698" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_599.xml b/share/regions/config_599.xml
new file mode 100644
index 0000000..4ed64d0
--- /dev/null
+++ b/share/regions/config_599.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf257" SimName="599" SimLocationX="1023" SimLocationY="1018" Datastore="store_599_x07_y37.yap" SimListenPort="9699" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_6.xml b/share/regions/config_6.xml
new file mode 100644
index 0000000..e5a52ac
--- /dev/null
+++ b/share/regions/config_6.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf006" SimName="6" SimLocationX="1006" SimLocationY="1000" Datastore="store_6_x06_y00.yap" SimListenPort="9106" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_60.xml b/share/regions/config_60.xml
new file mode 100644
index 0000000..8159d99
--- /dev/null
+++ b/share/regions/config_60.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf03c" SimName="60" SimLocationX="1028" SimLocationY="1001" Datastore="store_60_x12_y03.yap" SimListenPort="9160" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_600.xml b/share/regions/config_600.xml
new file mode 100644
index 0000000..1fd886e
--- /dev/null
+++ b/share/regions/config_600.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf258" SimName="600" SimLocationX="1024" SimLocationY="1018" Datastore="store_600_x08_y37.yap" SimListenPort="9700" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_601.xml b/share/regions/config_601.xml
new file mode 100644
index 0000000..e5ccd9d
--- /dev/null
+++ b/share/regions/config_601.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf259" SimName="601" SimLocationX="1025" SimLocationY="1018" Datastore="store_601_x09_y37.yap" SimListenPort="9701" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_602.xml b/share/regions/config_602.xml
new file mode 100644
index 0000000..97ebf22
--- /dev/null
+++ b/share/regions/config_602.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf25a" SimName="602" SimLocationX="1026" SimLocationY="1018" Datastore="store_602_x10_y37.yap" SimListenPort="9702" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_603.xml b/share/regions/config_603.xml
new file mode 100644
index 0000000..c4abec1
--- /dev/null
+++ b/share/regions/config_603.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf25b" SimName="603" SimLocationX="1027" SimLocationY="1018" Datastore="store_603_x11_y37.yap" SimListenPort="9703" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_604.xml b/share/regions/config_604.xml
new file mode 100644
index 0000000..f8fb610
--- /dev/null
+++ b/share/regions/config_604.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf25c" SimName="604" SimLocationX="1028" SimLocationY="1018" Datastore="store_604_x12_y37.yap" SimListenPort="9704" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_605.xml b/share/regions/config_605.xml
new file mode 100644
index 0000000..9fe0d84
--- /dev/null
+++ b/share/regions/config_605.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf25d" SimName="605" SimLocationX="1029" SimLocationY="1018" Datastore="store_605_x13_y37.yap" SimListenPort="9705" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_606.xml b/share/regions/config_606.xml
new file mode 100644
index 0000000..221310d
--- /dev/null
+++ b/share/regions/config_606.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf25e" SimName="606" SimLocationX="1030" SimLocationY="1018" Datastore="store_606_x14_y37.yap" SimListenPort="9706" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_607.xml b/share/regions/config_607.xml
new file mode 100644
index 0000000..77e16e4
--- /dev/null
+++ b/share/regions/config_607.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf25f" SimName="607" SimLocationX="1031" SimLocationY="1018" Datastore="store_607_x15_y37.yap" SimListenPort="9707" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-22.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_608.xml b/share/regions/config_608.xml
new file mode 100644
index 0000000..2e75ba6
--- /dev/null
+++ b/share/regions/config_608.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf260" SimName="608" SimLocationX="1000" SimLocationY="1019" Datastore="store_608_x00_y38.yap" SimListenPort="9708" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_609.xml b/share/regions/config_609.xml
new file mode 100644
index 0000000..232d072
--- /dev/null
+++ b/share/regions/config_609.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf261" SimName="609" SimLocationX="1001" SimLocationY="1019" Datastore="store_609_x01_y38.yap" SimListenPort="9709" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_61.xml b/share/regions/config_61.xml
new file mode 100644
index 0000000..55a8c64
--- /dev/null
+++ b/share/regions/config_61.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf03d" SimName="61" SimLocationX="1029" SimLocationY="1001" Datastore="store_61_x13_y03.yap" SimListenPort="9161" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_610.xml b/share/regions/config_610.xml
new file mode 100644
index 0000000..f0bc96b
--- /dev/null
+++ b/share/regions/config_610.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf262" SimName="610" SimLocationX="1002" SimLocationY="1019" Datastore="store_610_x02_y38.yap" SimListenPort="9710" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_611.xml b/share/regions/config_611.xml
new file mode 100644
index 0000000..e6340c4
--- /dev/null
+++ b/share/regions/config_611.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf263" SimName="611" SimLocationX="1003" SimLocationY="1019" Datastore="store_611_x03_y38.yap" SimListenPort="9711" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_612.xml b/share/regions/config_612.xml
new file mode 100644
index 0000000..f233f89
--- /dev/null
+++ b/share/regions/config_612.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf264" SimName="612" SimLocationX="1004" SimLocationY="1019" Datastore="store_612_x04_y38.yap" SimListenPort="9712" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_613.xml b/share/regions/config_613.xml
new file mode 100644
index 0000000..ec6ae40
--- /dev/null
+++ b/share/regions/config_613.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf265" SimName="613" SimLocationX="1005" SimLocationY="1019" Datastore="store_613_x05_y38.yap" SimListenPort="9713" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_614.xml b/share/regions/config_614.xml
new file mode 100644
index 0000000..4a6eb03
--- /dev/null
+++ b/share/regions/config_614.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf266" SimName="614" SimLocationX="1006" SimLocationY="1019" Datastore="store_614_x06_y38.yap" SimListenPort="9714" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_615.xml b/share/regions/config_615.xml
new file mode 100644
index 0000000..dc4c2f9
--- /dev/null
+++ b/share/regions/config_615.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf267" SimName="615" SimLocationX="1007" SimLocationY="1019" Datastore="store_615_x07_y38.yap" SimListenPort="9715" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_616.xml b/share/regions/config_616.xml
new file mode 100644
index 0000000..34ce6d6
--- /dev/null
+++ b/share/regions/config_616.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf268" SimName="616" SimLocationX="1008" SimLocationY="1019" Datastore="store_616_x08_y38.yap" SimListenPort="9716" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_617.xml b/share/regions/config_617.xml
new file mode 100644
index 0000000..b4903c2
--- /dev/null
+++ b/share/regions/config_617.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf269" SimName="617" SimLocationX="1009" SimLocationY="1019" Datastore="store_617_x09_y38.yap" SimListenPort="9717" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_618.xml b/share/regions/config_618.xml
new file mode 100644
index 0000000..78b23b5
--- /dev/null
+++ b/share/regions/config_618.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf26a" SimName="618" SimLocationX="1010" SimLocationY="1019" Datastore="store_618_x10_y38.yap" SimListenPort="9718" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_619.xml b/share/regions/config_619.xml
new file mode 100644
index 0000000..6b14d81
--- /dev/null
+++ b/share/regions/config_619.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf26b" SimName="619" SimLocationX="1011" SimLocationY="1019" Datastore="store_619_x11_y38.yap" SimListenPort="9719" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_62.xml b/share/regions/config_62.xml
new file mode 100644
index 0000000..e35c51f
--- /dev/null
+++ b/share/regions/config_62.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf03e" SimName="62" SimLocationX="1030" SimLocationY="1001" Datastore="store_62_x14_y03.yap" SimListenPort="9162" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_620.xml b/share/regions/config_620.xml
new file mode 100644
index 0000000..660b624
--- /dev/null
+++ b/share/regions/config_620.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf26c" SimName="620" SimLocationX="1012" SimLocationY="1019" Datastore="store_620_x12_y38.yap" SimListenPort="9720" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_621.xml b/share/regions/config_621.xml
new file mode 100644
index 0000000..d4d7767
--- /dev/null
+++ b/share/regions/config_621.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf26d" SimName="621" SimLocationX="1013" SimLocationY="1019" Datastore="store_621_x13_y38.yap" SimListenPort="9721" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_622.xml b/share/regions/config_622.xml
new file mode 100644
index 0000000..ee45a34
--- /dev/null
+++ b/share/regions/config_622.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf26e" SimName="622" SimLocationX="1014" SimLocationY="1019" Datastore="store_622_x14_y38.yap" SimListenPort="9722" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_623.xml b/share/regions/config_623.xml
new file mode 100644
index 0000000..0919d49
--- /dev/null
+++ b/share/regions/config_623.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf26f" SimName="623" SimLocationX="1015" SimLocationY="1019" Datastore="store_623_x15_y38.yap" SimListenPort="9723" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-23.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_624.xml b/share/regions/config_624.xml
new file mode 100644
index 0000000..572a48f
--- /dev/null
+++ b/share/regions/config_624.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf270" SimName="624" SimLocationX="1016" SimLocationY="1019" Datastore="store_624_x00_y39.yap" SimListenPort="9724" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_625.xml b/share/regions/config_625.xml
new file mode 100644
index 0000000..98bec19
--- /dev/null
+++ b/share/regions/config_625.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf271" SimName="625" SimLocationX="1017" SimLocationY="1019" Datastore="store_625_x01_y39.yap" SimListenPort="9725" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_626.xml b/share/regions/config_626.xml
new file mode 100644
index 0000000..a64fb56
--- /dev/null
+++ b/share/regions/config_626.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf272" SimName="626" SimLocationX="1018" SimLocationY="1019" Datastore="store_626_x02_y39.yap" SimListenPort="9726" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_627.xml b/share/regions/config_627.xml
new file mode 100644
index 0000000..a388684
--- /dev/null
+++ b/share/regions/config_627.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf273" SimName="627" SimLocationX="1019" SimLocationY="1019" Datastore="store_627_x03_y39.yap" SimListenPort="9727" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_628.xml b/share/regions/config_628.xml
new file mode 100644
index 0000000..786bf6e
--- /dev/null
+++ b/share/regions/config_628.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf274" SimName="628" SimLocationX="1020" SimLocationY="1019" Datastore="store_628_x04_y39.yap" SimListenPort="9728" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_629.xml b/share/regions/config_629.xml
new file mode 100644
index 0000000..bc815b7
--- /dev/null
+++ b/share/regions/config_629.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf275" SimName="629" SimLocationX="1021" SimLocationY="1019" Datastore="store_629_x05_y39.yap" SimListenPort="9729" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_63.xml b/share/regions/config_63.xml
new file mode 100644
index 0000000..bd9992b
--- /dev/null
+++ b/share/regions/config_63.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf03f" SimName="63" SimLocationX="1031" SimLocationY="1001" Datastore="store_63_x15_y03.yap" SimListenPort="9163" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y12.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_630.xml b/share/regions/config_630.xml
new file mode 100644
index 0000000..f654ce4
--- /dev/null
+++ b/share/regions/config_630.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf276" SimName="630" SimLocationX="1022" SimLocationY="1019" Datastore="store_630_x06_y39.yap" SimListenPort="9730" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_631.xml b/share/regions/config_631.xml
new file mode 100644
index 0000000..fbc2bf9
--- /dev/null
+++ b/share/regions/config_631.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf277" SimName="631" SimLocationX="1023" SimLocationY="1019" Datastore="store_631_x07_y39.yap" SimListenPort="9731" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_632.xml b/share/regions/config_632.xml
new file mode 100644
index 0000000..9530a63
--- /dev/null
+++ b/share/regions/config_632.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf278" SimName="632" SimLocationX="1024" SimLocationY="1019" Datastore="store_632_x08_y39.yap" SimListenPort="9732" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_633.xml b/share/regions/config_633.xml
new file mode 100644
index 0000000..35babf2
--- /dev/null
+++ b/share/regions/config_633.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf279" SimName="633" SimLocationX="1025" SimLocationY="1019" Datastore="store_633_x09_y39.yap" SimListenPort="9733" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_634.xml b/share/regions/config_634.xml
new file mode 100644
index 0000000..ee3965d
--- /dev/null
+++ b/share/regions/config_634.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf27a" SimName="634" SimLocationX="1026" SimLocationY="1019" Datastore="store_634_x10_y39.yap" SimListenPort="9734" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_635.xml b/share/regions/config_635.xml
new file mode 100644
index 0000000..10e388f
--- /dev/null
+++ b/share/regions/config_635.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf27b" SimName="635" SimLocationX="1027" SimLocationY="1019" Datastore="store_635_x11_y39.yap" SimListenPort="9735" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_636.xml b/share/regions/config_636.xml
new file mode 100644
index 0000000..b4a962c
--- /dev/null
+++ b/share/regions/config_636.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf27c" SimName="636" SimLocationX="1028" SimLocationY="1019" Datastore="store_636_x12_y39.yap" SimListenPort="9736" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_637.xml b/share/regions/config_637.xml
new file mode 100644
index 0000000..1d0ccfc
--- /dev/null
+++ b/share/regions/config_637.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf27d" SimName="637" SimLocationX="1029" SimLocationY="1019" Datastore="store_637_x13_y39.yap" SimListenPort="9737" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_638.xml b/share/regions/config_638.xml
new file mode 100644
index 0000000..a4ebf85
--- /dev/null
+++ b/share/regions/config_638.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf27e" SimName="638" SimLocationX="1030" SimLocationY="1019" Datastore="store_638_x14_y39.yap" SimListenPort="9738" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_639.xml b/share/regions/config_639.xml
new file mode 100644
index 0000000..99d42e4
--- /dev/null
+++ b/share/regions/config_639.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf27f" SimName="639" SimLocationX="1031" SimLocationY="1019" Datastore="store_639_x15_y39.yap" SimListenPort="9739" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-24.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_64.xml b/share/regions/config_64.xml
new file mode 100644
index 0000000..669676c
--- /dev/null
+++ b/share/regions/config_64.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf040" SimName="64" SimLocationX="1000" SimLocationY="1002" Datastore="store_64_x00_y04.yap" SimListenPort="9164" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_640.xml b/share/regions/config_640.xml
new file mode 100644
index 0000000..e32bc2e
--- /dev/null
+++ b/share/regions/config_640.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf280" SimName="640" SimLocationX="1000" SimLocationY="1020" Datastore="store_640_x00_y40.yap" SimListenPort="9740" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_641.xml b/share/regions/config_641.xml
new file mode 100644
index 0000000..da68ff4
--- /dev/null
+++ b/share/regions/config_641.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf281" SimName="641" SimLocationX="1001" SimLocationY="1020" Datastore="store_641_x01_y40.yap" SimListenPort="9741" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_642.xml b/share/regions/config_642.xml
new file mode 100644
index 0000000..a90333f
--- /dev/null
+++ b/share/regions/config_642.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf282" SimName="642" SimLocationX="1002" SimLocationY="1020" Datastore="store_642_x02_y40.yap" SimListenPort="9742" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_643.xml b/share/regions/config_643.xml
new file mode 100644
index 0000000..7912a3c
--- /dev/null
+++ b/share/regions/config_643.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf283" SimName="643" SimLocationX="1003" SimLocationY="1020" Datastore="store_643_x03_y40.yap" SimListenPort="9743" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_644.xml b/share/regions/config_644.xml
new file mode 100644
index 0000000..89a302b
--- /dev/null
+++ b/share/regions/config_644.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf284" SimName="644" SimLocationX="1004" SimLocationY="1020" Datastore="store_644_x04_y40.yap" SimListenPort="9744" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_645.xml b/share/regions/config_645.xml
new file mode 100644
index 0000000..f5fd1b6
--- /dev/null
+++ b/share/regions/config_645.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf285" SimName="645" SimLocationX="1005" SimLocationY="1020" Datastore="store_645_x05_y40.yap" SimListenPort="9745" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_646.xml b/share/regions/config_646.xml
new file mode 100644
index 0000000..8cd3548
--- /dev/null
+++ b/share/regions/config_646.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf286" SimName="646" SimLocationX="1006" SimLocationY="1020" Datastore="store_646_x06_y40.yap" SimListenPort="9746" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_647.xml b/share/regions/config_647.xml
new file mode 100644
index 0000000..8d82b10
--- /dev/null
+++ b/share/regions/config_647.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf287" SimName="647" SimLocationX="1007" SimLocationY="1020" Datastore="store_647_x07_y40.yap" SimListenPort="9747" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_648.xml b/share/regions/config_648.xml
new file mode 100644
index 0000000..d02a8df
--- /dev/null
+++ b/share/regions/config_648.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf288" SimName="648" SimLocationX="1008" SimLocationY="1020" Datastore="store_648_x08_y40.yap" SimListenPort="9748" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_649.xml b/share/regions/config_649.xml
new file mode 100644
index 0000000..407e855
--- /dev/null
+++ b/share/regions/config_649.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf289" SimName="649" SimLocationX="1009" SimLocationY="1020" Datastore="store_649_x09_y40.yap" SimListenPort="9749" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_65.xml b/share/regions/config_65.xml
new file mode 100644
index 0000000..d502fda
--- /dev/null
+++ b/share/regions/config_65.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf041" SimName="65" SimLocationX="1001" SimLocationY="1002" Datastore="store_65_x01_y04.yap" SimListenPort="9165" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_650.xml b/share/regions/config_650.xml
new file mode 100644
index 0000000..ff9ecf2
--- /dev/null
+++ b/share/regions/config_650.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf28a" SimName="650" SimLocationX="1010" SimLocationY="1020" Datastore="store_650_x10_y40.yap" SimListenPort="9750" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_651.xml b/share/regions/config_651.xml
new file mode 100644
index 0000000..07643d3
--- /dev/null
+++ b/share/regions/config_651.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf28b" SimName="651" SimLocationX="1011" SimLocationY="1020" Datastore="store_651_x11_y40.yap" SimListenPort="9751" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_652.xml b/share/regions/config_652.xml
new file mode 100644
index 0000000..f3bb531
--- /dev/null
+++ b/share/regions/config_652.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf28c" SimName="652" SimLocationX="1012" SimLocationY="1020" Datastore="store_652_x12_y40.yap" SimListenPort="9752" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_653.xml b/share/regions/config_653.xml
new file mode 100644
index 0000000..6e7c4b8
--- /dev/null
+++ b/share/regions/config_653.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf28d" SimName="653" SimLocationX="1013" SimLocationY="1020" Datastore="store_653_x13_y40.yap" SimListenPort="9753" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_654.xml b/share/regions/config_654.xml
new file mode 100644
index 0000000..0346807
--- /dev/null
+++ b/share/regions/config_654.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf28e" SimName="654" SimLocationX="1014" SimLocationY="1020" Datastore="store_654_x14_y40.yap" SimListenPort="9754" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_655.xml b/share/regions/config_655.xml
new file mode 100644
index 0000000..5113188
--- /dev/null
+++ b/share/regions/config_655.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf28f" SimName="655" SimLocationX="1015" SimLocationY="1020" Datastore="store_655_x15_y40.yap" SimListenPort="9755" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-25.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_656.xml b/share/regions/config_656.xml
new file mode 100644
index 0000000..f7d1ca4
--- /dev/null
+++ b/share/regions/config_656.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf290" SimName="656" SimLocationX="1016" SimLocationY="1020" Datastore="store_656_x00_y41.yap" SimListenPort="9756" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_657.xml b/share/regions/config_657.xml
new file mode 100644
index 0000000..04cdf41
--- /dev/null
+++ b/share/regions/config_657.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf291" SimName="657" SimLocationX="1017" SimLocationY="1020" Datastore="store_657_x01_y41.yap" SimListenPort="9757" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_658.xml b/share/regions/config_658.xml
new file mode 100644
index 0000000..9682b36
--- /dev/null
+++ b/share/regions/config_658.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf292" SimName="658" SimLocationX="1018" SimLocationY="1020" Datastore="store_658_x02_y41.yap" SimListenPort="9758" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_659.xml b/share/regions/config_659.xml
new file mode 100644
index 0000000..a5380c4
--- /dev/null
+++ b/share/regions/config_659.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf293" SimName="659" SimLocationX="1019" SimLocationY="1020" Datastore="store_659_x03_y41.yap" SimListenPort="9759" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_66.xml b/share/regions/config_66.xml
new file mode 100644
index 0000000..5cf1043
--- /dev/null
+++ b/share/regions/config_66.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf042" SimName="66" SimLocationX="1002" SimLocationY="1002" Datastore="store_66_x02_y04.yap" SimListenPort="9166" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_660.xml b/share/regions/config_660.xml
new file mode 100644
index 0000000..7801bcb
--- /dev/null
+++ b/share/regions/config_660.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf294" SimName="660" SimLocationX="1020" SimLocationY="1020" Datastore="store_660_x04_y41.yap" SimListenPort="9760" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_661.xml b/share/regions/config_661.xml
new file mode 100644
index 0000000..3ff4ef9
--- /dev/null
+++ b/share/regions/config_661.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf295" SimName="661" SimLocationX="1021" SimLocationY="1020" Datastore="store_661_x05_y41.yap" SimListenPort="9761" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_662.xml b/share/regions/config_662.xml
new file mode 100644
index 0000000..6b0ffb3
--- /dev/null
+++ b/share/regions/config_662.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf296" SimName="662" SimLocationX="1022" SimLocationY="1020" Datastore="store_662_x06_y41.yap" SimListenPort="9762" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_663.xml b/share/regions/config_663.xml
new file mode 100644
index 0000000..2efec8d
--- /dev/null
+++ b/share/regions/config_663.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf297" SimName="663" SimLocationX="1023" SimLocationY="1020" Datastore="store_663_x07_y41.yap" SimListenPort="9763" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_664.xml b/share/regions/config_664.xml
new file mode 100644
index 0000000..1535dd4
--- /dev/null
+++ b/share/regions/config_664.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf298" SimName="664" SimLocationX="1024" SimLocationY="1020" Datastore="store_664_x08_y41.yap" SimListenPort="9764" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_665.xml b/share/regions/config_665.xml
new file mode 100644
index 0000000..4a7c0e5
--- /dev/null
+++ b/share/regions/config_665.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf299" SimName="665" SimLocationX="1025" SimLocationY="1020" Datastore="store_665_x09_y41.yap" SimListenPort="9765" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_666.xml b/share/regions/config_666.xml
new file mode 100644
index 0000000..3dd6225
--- /dev/null
+++ b/share/regions/config_666.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf29a" SimName="666" SimLocationX="1026" SimLocationY="1020" Datastore="store_666_x10_y41.yap" SimListenPort="9766" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_667.xml b/share/regions/config_667.xml
new file mode 100644
index 0000000..0bd4d2f
--- /dev/null
+++ b/share/regions/config_667.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf29b" SimName="667" SimLocationX="1027" SimLocationY="1020" Datastore="store_667_x11_y41.yap" SimListenPort="9767" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_668.xml b/share/regions/config_668.xml
new file mode 100644
index 0000000..872ca80
--- /dev/null
+++ b/share/regions/config_668.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf29c" SimName="668" SimLocationX="1028" SimLocationY="1020" Datastore="store_668_x12_y41.yap" SimListenPort="9768" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_669.xml b/share/regions/config_669.xml
new file mode 100644
index 0000000..3b04eea
--- /dev/null
+++ b/share/regions/config_669.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf29d" SimName="669" SimLocationX="1029" SimLocationY="1020" Datastore="store_669_x13_y41.yap" SimListenPort="9769" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_67.xml b/share/regions/config_67.xml
new file mode 100644
index 0000000..ce0b3be
--- /dev/null
+++ b/share/regions/config_67.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf043" SimName="67" SimLocationX="1003" SimLocationY="1002" Datastore="store_67_x03_y04.yap" SimListenPort="9167" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_670.xml b/share/regions/config_670.xml
new file mode 100644
index 0000000..ba31ce9
--- /dev/null
+++ b/share/regions/config_670.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf29e" SimName="670" SimLocationX="1030" SimLocationY="1020" Datastore="store_670_x14_y41.yap" SimListenPort="9770" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_671.xml b/share/regions/config_671.xml
new file mode 100644
index 0000000..99260f5
--- /dev/null
+++ b/share/regions/config_671.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf29f" SimName="671" SimLocationX="1031" SimLocationY="1020" Datastore="store_671_x15_y41.yap" SimListenPort="9771" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-26.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_672.xml b/share/regions/config_672.xml
new file mode 100644
index 0000000..faa4e9f
--- /dev/null
+++ b/share/regions/config_672.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a0" SimName="672" SimLocationX="1000" SimLocationY="1021" Datastore="store_672_x00_y42.yap" SimListenPort="9772" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_673.xml b/share/regions/config_673.xml
new file mode 100644
index 0000000..304dee4
--- /dev/null
+++ b/share/regions/config_673.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a1" SimName="673" SimLocationX="1001" SimLocationY="1021" Datastore="store_673_x01_y42.yap" SimListenPort="9773" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_674.xml b/share/regions/config_674.xml
new file mode 100644
index 0000000..d7224ad
--- /dev/null
+++ b/share/regions/config_674.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a2" SimName="674" SimLocationX="1002" SimLocationY="1021" Datastore="store_674_x02_y42.yap" SimListenPort="9774" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_675.xml b/share/regions/config_675.xml
new file mode 100644
index 0000000..713354f
--- /dev/null
+++ b/share/regions/config_675.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a3" SimName="675" SimLocationX="1003" SimLocationY="1021" Datastore="store_675_x03_y42.yap" SimListenPort="9775" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_676.xml b/share/regions/config_676.xml
new file mode 100644
index 0000000..6e5eea0
--- /dev/null
+++ b/share/regions/config_676.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a4" SimName="676" SimLocationX="1004" SimLocationY="1021" Datastore="store_676_x04_y42.yap" SimListenPort="9776" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_677.xml b/share/regions/config_677.xml
new file mode 100644
index 0000000..dc85b78
--- /dev/null
+++ b/share/regions/config_677.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a5" SimName="677" SimLocationX="1005" SimLocationY="1021" Datastore="store_677_x05_y42.yap" SimListenPort="9777" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_678.xml b/share/regions/config_678.xml
new file mode 100644
index 0000000..238a63c
--- /dev/null
+++ b/share/regions/config_678.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a6" SimName="678" SimLocationX="1006" SimLocationY="1021" Datastore="store_678_x06_y42.yap" SimListenPort="9778" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_679.xml b/share/regions/config_679.xml
new file mode 100644
index 0000000..8afb0de
--- /dev/null
+++ b/share/regions/config_679.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a7" SimName="679" SimLocationX="1007" SimLocationY="1021" Datastore="store_679_x07_y42.yap" SimListenPort="9779" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_68.xml b/share/regions/config_68.xml
new file mode 100644
index 0000000..e3e4b40
--- /dev/null
+++ b/share/regions/config_68.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf044" SimName="68" SimLocationX="1004" SimLocationY="1002" Datastore="store_68_x04_y04.yap" SimListenPort="9168" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_680.xml b/share/regions/config_680.xml
new file mode 100644
index 0000000..3afcc52
--- /dev/null
+++ b/share/regions/config_680.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a8" SimName="680" SimLocationX="1008" SimLocationY="1021" Datastore="store_680_x08_y42.yap" SimListenPort="9780" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_681.xml b/share/regions/config_681.xml
new file mode 100644
index 0000000..f5c6f7b
--- /dev/null
+++ b/share/regions/config_681.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2a9" SimName="681" SimLocationX="1009" SimLocationY="1021" Datastore="store_681_x09_y42.yap" SimListenPort="9781" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_682.xml b/share/regions/config_682.xml
new file mode 100644
index 0000000..f88d81c
--- /dev/null
+++ b/share/regions/config_682.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2aa" SimName="682" SimLocationX="1010" SimLocationY="1021" Datastore="store_682_x10_y42.yap" SimListenPort="9782" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_683.xml b/share/regions/config_683.xml
new file mode 100644
index 0000000..315e47c
--- /dev/null
+++ b/share/regions/config_683.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ab" SimName="683" SimLocationX="1011" SimLocationY="1021" Datastore="store_683_x11_y42.yap" SimListenPort="9783" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_684.xml b/share/regions/config_684.xml
new file mode 100644
index 0000000..cef1951
--- /dev/null
+++ b/share/regions/config_684.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ac" SimName="684" SimLocationX="1012" SimLocationY="1021" Datastore="store_684_x12_y42.yap" SimListenPort="9784" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_685.xml b/share/regions/config_685.xml
new file mode 100644
index 0000000..fce8917
--- /dev/null
+++ b/share/regions/config_685.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ad" SimName="685" SimLocationX="1013" SimLocationY="1021" Datastore="store_685_x13_y42.yap" SimListenPort="9785" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_686.xml b/share/regions/config_686.xml
new file mode 100644
index 0000000..20c19dc
--- /dev/null
+++ b/share/regions/config_686.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ae" SimName="686" SimLocationX="1014" SimLocationY="1021" Datastore="store_686_x14_y42.yap" SimListenPort="9786" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_687.xml b/share/regions/config_687.xml
new file mode 100644
index 0000000..8604eaf
--- /dev/null
+++ b/share/regions/config_687.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2af" SimName="687" SimLocationX="1015" SimLocationY="1021" Datastore="store_687_x15_y42.yap" SimListenPort="9787" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-27.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_688.xml b/share/regions/config_688.xml
new file mode 100644
index 0000000..12033c9
--- /dev/null
+++ b/share/regions/config_688.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b0" SimName="688" SimLocationX="1016" SimLocationY="1021" Datastore="store_688_x00_y43.yap" SimListenPort="9788" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_689.xml b/share/regions/config_689.xml
new file mode 100644
index 0000000..bda5afb
--- /dev/null
+++ b/share/regions/config_689.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b1" SimName="689" SimLocationX="1017" SimLocationY="1021" Datastore="store_689_x01_y43.yap" SimListenPort="9789" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_69.xml b/share/regions/config_69.xml
new file mode 100644
index 0000000..55e75ab
--- /dev/null
+++ b/share/regions/config_69.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf045" SimName="69" SimLocationX="1005" SimLocationY="1002" Datastore="store_69_x05_y04.yap" SimListenPort="9169" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_690.xml b/share/regions/config_690.xml
new file mode 100644
index 0000000..fd1ed38
--- /dev/null
+++ b/share/regions/config_690.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b2" SimName="690" SimLocationX="1018" SimLocationY="1021" Datastore="store_690_x02_y43.yap" SimListenPort="9790" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_691.xml b/share/regions/config_691.xml
new file mode 100644
index 0000000..8c6f56e
--- /dev/null
+++ b/share/regions/config_691.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b3" SimName="691" SimLocationX="1019" SimLocationY="1021" Datastore="store_691_x03_y43.yap" SimListenPort="9791" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_692.xml b/share/regions/config_692.xml
new file mode 100644
index 0000000..2b6133b
--- /dev/null
+++ b/share/regions/config_692.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b4" SimName="692" SimLocationX="1020" SimLocationY="1021" Datastore="store_692_x04_y43.yap" SimListenPort="9792" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_693.xml b/share/regions/config_693.xml
new file mode 100644
index 0000000..1fa28f4
--- /dev/null
+++ b/share/regions/config_693.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b5" SimName="693" SimLocationX="1021" SimLocationY="1021" Datastore="store_693_x05_y43.yap" SimListenPort="9793" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_694.xml b/share/regions/config_694.xml
new file mode 100644
index 0000000..7ea9a56
--- /dev/null
+++ b/share/regions/config_694.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b6" SimName="694" SimLocationX="1022" SimLocationY="1021" Datastore="store_694_x06_y43.yap" SimListenPort="9794" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_695.xml b/share/regions/config_695.xml
new file mode 100644
index 0000000..6e57b7a
--- /dev/null
+++ b/share/regions/config_695.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b7" SimName="695" SimLocationX="1023" SimLocationY="1021" Datastore="store_695_x07_y43.yap" SimListenPort="9795" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_696.xml b/share/regions/config_696.xml
new file mode 100644
index 0000000..5311547
--- /dev/null
+++ b/share/regions/config_696.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b8" SimName="696" SimLocationX="1024" SimLocationY="1021" Datastore="store_696_x08_y43.yap" SimListenPort="9796" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_697.xml b/share/regions/config_697.xml
new file mode 100644
index 0000000..a549fac
--- /dev/null
+++ b/share/regions/config_697.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2b9" SimName="697" SimLocationX="1025" SimLocationY="1021" Datastore="store_697_x09_y43.yap" SimListenPort="9797" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_698.xml b/share/regions/config_698.xml
new file mode 100644
index 0000000..07aa253
--- /dev/null
+++ b/share/regions/config_698.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ba" SimName="698" SimLocationX="1026" SimLocationY="1021" Datastore="store_698_x10_y43.yap" SimListenPort="9798" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_699.xml b/share/regions/config_699.xml
new file mode 100644
index 0000000..e85dc5c
--- /dev/null
+++ b/share/regions/config_699.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2bb" SimName="699" SimLocationX="1027" SimLocationY="1021" Datastore="store_699_x11_y43.yap" SimListenPort="9799" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_7.xml b/share/regions/config_7.xml
new file mode 100644
index 0000000..fb8b2a4
--- /dev/null
+++ b/share/regions/config_7.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf007" SimName="7" SimLocationX="1007" SimLocationY="1000" Datastore="store_7_x07_y00.yap" SimListenPort="9107" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_70.xml b/share/regions/config_70.xml
new file mode 100644
index 0000000..bce1dc1
--- /dev/null
+++ b/share/regions/config_70.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf046" SimName="70" SimLocationX="1006" SimLocationY="1002" Datastore="store_70_x06_y04.yap" SimListenPort="9170" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_700.xml b/share/regions/config_700.xml
new file mode 100644
index 0000000..d315e2f
--- /dev/null
+++ b/share/regions/config_700.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2bc" SimName="700" SimLocationX="1028" SimLocationY="1021" Datastore="store_700_x12_y43.yap" SimListenPort="9800" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_701.xml b/share/regions/config_701.xml
new file mode 100644
index 0000000..2c2ee68
--- /dev/null
+++ b/share/regions/config_701.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2bd" SimName="701" SimLocationX="1029" SimLocationY="1021" Datastore="store_701_x13_y43.yap" SimListenPort="9801" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_702.xml b/share/regions/config_702.xml
new file mode 100644
index 0000000..b2f6b63
--- /dev/null
+++ b/share/regions/config_702.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2be" SimName="702" SimLocationX="1030" SimLocationY="1021" Datastore="store_702_x14_y43.yap" SimListenPort="9802" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_703.xml b/share/regions/config_703.xml
new file mode 100644
index 0000000..3ad5f15
--- /dev/null
+++ b/share/regions/config_703.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2bf" SimName="703" SimLocationX="1031" SimLocationY="1021" Datastore="store_703_x15_y43.yap" SimListenPort="9803" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-28.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_704.xml b/share/regions/config_704.xml
new file mode 100644
index 0000000..94dc04e
--- /dev/null
+++ b/share/regions/config_704.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c0" SimName="704" SimLocationX="1000" SimLocationY="1022" Datastore="store_704_x00_y44.yap" SimListenPort="9804" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_705.xml b/share/regions/config_705.xml
new file mode 100644
index 0000000..00b9909
--- /dev/null
+++ b/share/regions/config_705.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c1" SimName="705" SimLocationX="1001" SimLocationY="1022" Datastore="store_705_x01_y44.yap" SimListenPort="9805" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_706.xml b/share/regions/config_706.xml
new file mode 100644
index 0000000..729934d
--- /dev/null
+++ b/share/regions/config_706.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c2" SimName="706" SimLocationX="1002" SimLocationY="1022" Datastore="store_706_x02_y44.yap" SimListenPort="9806" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_707.xml b/share/regions/config_707.xml
new file mode 100644
index 0000000..c65288a
--- /dev/null
+++ b/share/regions/config_707.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c3" SimName="707" SimLocationX="1003" SimLocationY="1022" Datastore="store_707_x03_y44.yap" SimListenPort="9807" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_708.xml b/share/regions/config_708.xml
new file mode 100644
index 0000000..bcdbd8a
--- /dev/null
+++ b/share/regions/config_708.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c4" SimName="708" SimLocationX="1004" SimLocationY="1022" Datastore="store_708_x04_y44.yap" SimListenPort="9808" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_709.xml b/share/regions/config_709.xml
new file mode 100644
index 0000000..e385e33
--- /dev/null
+++ b/share/regions/config_709.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c5" SimName="709" SimLocationX="1005" SimLocationY="1022" Datastore="store_709_x05_y44.yap" SimListenPort="9809" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_71.xml b/share/regions/config_71.xml
new file mode 100644
index 0000000..dc746dc
--- /dev/null
+++ b/share/regions/config_71.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf047" SimName="71" SimLocationX="1007" SimLocationY="1002" Datastore="store_71_x07_y04.yap" SimListenPort="9171" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_710.xml b/share/regions/config_710.xml
new file mode 100644
index 0000000..25c91de
--- /dev/null
+++ b/share/regions/config_710.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c6" SimName="710" SimLocationX="1006" SimLocationY="1022" Datastore="store_710_x06_y44.yap" SimListenPort="9810" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_711.xml b/share/regions/config_711.xml
new file mode 100644
index 0000000..3cfc51d
--- /dev/null
+++ b/share/regions/config_711.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c7" SimName="711" SimLocationX="1007" SimLocationY="1022" Datastore="store_711_x07_y44.yap" SimListenPort="9811" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_712.xml b/share/regions/config_712.xml
new file mode 100644
index 0000000..7ef6107
--- /dev/null
+++ b/share/regions/config_712.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c8" SimName="712" SimLocationX="1008" SimLocationY="1022" Datastore="store_712_x08_y44.yap" SimListenPort="9812" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_713.xml b/share/regions/config_713.xml
new file mode 100644
index 0000000..5a81394
--- /dev/null
+++ b/share/regions/config_713.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2c9" SimName="713" SimLocationX="1009" SimLocationY="1022" Datastore="store_713_x09_y44.yap" SimListenPort="9813" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_714.xml b/share/regions/config_714.xml
new file mode 100644
index 0000000..d4738a7
--- /dev/null
+++ b/share/regions/config_714.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ca" SimName="714" SimLocationX="1010" SimLocationY="1022" Datastore="store_714_x10_y44.yap" SimListenPort="9814" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_715.xml b/share/regions/config_715.xml
new file mode 100644
index 0000000..d86bf2b
--- /dev/null
+++ b/share/regions/config_715.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2cb" SimName="715" SimLocationX="1011" SimLocationY="1022" Datastore="store_715_x11_y44.yap" SimListenPort="9815" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_716.xml b/share/regions/config_716.xml
new file mode 100644
index 0000000..e57720d
--- /dev/null
+++ b/share/regions/config_716.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2cc" SimName="716" SimLocationX="1012" SimLocationY="1022" Datastore="store_716_x12_y44.yap" SimListenPort="9816" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_717.xml b/share/regions/config_717.xml
new file mode 100644
index 0000000..c2ad944
--- /dev/null
+++ b/share/regions/config_717.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2cd" SimName="717" SimLocationX="1013" SimLocationY="1022" Datastore="store_717_x13_y44.yap" SimListenPort="9817" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_718.xml b/share/regions/config_718.xml
new file mode 100644
index 0000000..33211bc
--- /dev/null
+++ b/share/regions/config_718.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ce" SimName="718" SimLocationX="1014" SimLocationY="1022" Datastore="store_718_x14_y44.yap" SimListenPort="9818" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_719.xml b/share/regions/config_719.xml
new file mode 100644
index 0000000..a3a32d2
--- /dev/null
+++ b/share/regions/config_719.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2cf" SimName="719" SimLocationX="1015" SimLocationY="1022" Datastore="store_719_x15_y44.yap" SimListenPort="9819" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-29.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_72.xml b/share/regions/config_72.xml
new file mode 100644
index 0000000..132db9a
--- /dev/null
+++ b/share/regions/config_72.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf048" SimName="72" SimLocationX="1008" SimLocationY="1002" Datastore="store_72_x08_y04.yap" SimListenPort="9172" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_720.xml b/share/regions/config_720.xml
new file mode 100644
index 0000000..898cd57
--- /dev/null
+++ b/share/regions/config_720.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d0" SimName="720" SimLocationX="1016" SimLocationY="1022" Datastore="store_720_x00_y45.yap" SimListenPort="9820" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_721.xml b/share/regions/config_721.xml
new file mode 100644
index 0000000..30ec038
--- /dev/null
+++ b/share/regions/config_721.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d1" SimName="721" SimLocationX="1017" SimLocationY="1022" Datastore="store_721_x01_y45.yap" SimListenPort="9821" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_722.xml b/share/regions/config_722.xml
new file mode 100644
index 0000000..56f5e4a
--- /dev/null
+++ b/share/regions/config_722.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d2" SimName="722" SimLocationX="1018" SimLocationY="1022" Datastore="store_722_x02_y45.yap" SimListenPort="9822" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_723.xml b/share/regions/config_723.xml
new file mode 100644
index 0000000..ce8fbf9
--- /dev/null
+++ b/share/regions/config_723.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d3" SimName="723" SimLocationX="1019" SimLocationY="1022" Datastore="store_723_x03_y45.yap" SimListenPort="9823" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_724.xml b/share/regions/config_724.xml
new file mode 100644
index 0000000..0a72dbc
--- /dev/null
+++ b/share/regions/config_724.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d4" SimName="724" SimLocationX="1020" SimLocationY="1022" Datastore="store_724_x04_y45.yap" SimListenPort="9824" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_725.xml b/share/regions/config_725.xml
new file mode 100644
index 0000000..8608f8b
--- /dev/null
+++ b/share/regions/config_725.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d5" SimName="725" SimLocationX="1021" SimLocationY="1022" Datastore="store_725_x05_y45.yap" SimListenPort="9825" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_726.xml b/share/regions/config_726.xml
new file mode 100644
index 0000000..5766227
--- /dev/null
+++ b/share/regions/config_726.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d6" SimName="726" SimLocationX="1022" SimLocationY="1022" Datastore="store_726_x06_y45.yap" SimListenPort="9826" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_727.xml b/share/regions/config_727.xml
new file mode 100644
index 0000000..6553367
--- /dev/null
+++ b/share/regions/config_727.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d7" SimName="727" SimLocationX="1023" SimLocationY="1022" Datastore="store_727_x07_y45.yap" SimListenPort="9827" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_728.xml b/share/regions/config_728.xml
new file mode 100644
index 0000000..867cdd1
--- /dev/null
+++ b/share/regions/config_728.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d8" SimName="728" SimLocationX="1024" SimLocationY="1022" Datastore="store_728_x08_y45.yap" SimListenPort="9828" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_729.xml b/share/regions/config_729.xml
new file mode 100644
index 0000000..4c3f3bf
--- /dev/null
+++ b/share/regions/config_729.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2d9" SimName="729" SimLocationX="1025" SimLocationY="1022" Datastore="store_729_x09_y45.yap" SimListenPort="9829" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_73.xml b/share/regions/config_73.xml
new file mode 100644
index 0000000..a9dff11
--- /dev/null
+++ b/share/regions/config_73.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf049" SimName="73" SimLocationX="1009" SimLocationY="1002" Datastore="store_73_x09_y04.yap" SimListenPort="9173" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_730.xml b/share/regions/config_730.xml
new file mode 100644
index 0000000..95567f3
--- /dev/null
+++ b/share/regions/config_730.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2da" SimName="730" SimLocationX="1026" SimLocationY="1022" Datastore="store_730_x10_y45.yap" SimListenPort="9830" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_731.xml b/share/regions/config_731.xml
new file mode 100644
index 0000000..b1eac25
--- /dev/null
+++ b/share/regions/config_731.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2db" SimName="731" SimLocationX="1027" SimLocationY="1022" Datastore="store_731_x11_y45.yap" SimListenPort="9831" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_732.xml b/share/regions/config_732.xml
new file mode 100644
index 0000000..df6ab85
--- /dev/null
+++ b/share/regions/config_732.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2dc" SimName="732" SimLocationX="1028" SimLocationY="1022" Datastore="store_732_x12_y45.yap" SimListenPort="9832" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_733.xml b/share/regions/config_733.xml
new file mode 100644
index 0000000..cba3b47
--- /dev/null
+++ b/share/regions/config_733.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2dd" SimName="733" SimLocationX="1029" SimLocationY="1022" Datastore="store_733_x13_y45.yap" SimListenPort="9833" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_734.xml b/share/regions/config_734.xml
new file mode 100644
index 0000000..21cad95
--- /dev/null
+++ b/share/regions/config_734.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2de" SimName="734" SimLocationX="1030" SimLocationY="1022" Datastore="store_734_x14_y45.yap" SimListenPort="9834" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_735.xml b/share/regions/config_735.xml
new file mode 100644
index 0000000..78386fe
--- /dev/null
+++ b/share/regions/config_735.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2df" SimName="735" SimLocationX="1031" SimLocationY="1022" Datastore="store_735_x15_y45.yap" SimListenPort="9835" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-30.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_736.xml b/share/regions/config_736.xml
new file mode 100644
index 0000000..2001880
--- /dev/null
+++ b/share/regions/config_736.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e0" SimName="736" SimLocationX="1000" SimLocationY="1023" Datastore="store_736_x00_y46.yap" SimListenPort="9836" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_737.xml b/share/regions/config_737.xml
new file mode 100644
index 0000000..8e73b25
--- /dev/null
+++ b/share/regions/config_737.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e1" SimName="737" SimLocationX="1001" SimLocationY="1023" Datastore="store_737_x01_y46.yap" SimListenPort="9837" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_738.xml b/share/regions/config_738.xml
new file mode 100644
index 0000000..c27bea7
--- /dev/null
+++ b/share/regions/config_738.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e2" SimName="738" SimLocationX="1002" SimLocationY="1023" Datastore="store_738_x02_y46.yap" SimListenPort="9838" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_739.xml b/share/regions/config_739.xml
new file mode 100644
index 0000000..2a59512
--- /dev/null
+++ b/share/regions/config_739.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e3" SimName="739" SimLocationX="1003" SimLocationY="1023" Datastore="store_739_x03_y46.yap" SimListenPort="9839" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_74.xml b/share/regions/config_74.xml
new file mode 100644
index 0000000..d1955d5
--- /dev/null
+++ b/share/regions/config_74.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf04a" SimName="74" SimLocationX="1010" SimLocationY="1002" Datastore="store_74_x10_y04.yap" SimListenPort="9174" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_740.xml b/share/regions/config_740.xml
new file mode 100644
index 0000000..21948b2
--- /dev/null
+++ b/share/regions/config_740.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e4" SimName="740" SimLocationX="1004" SimLocationY="1023" Datastore="store_740_x04_y46.yap" SimListenPort="9840" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_741.xml b/share/regions/config_741.xml
new file mode 100644
index 0000000..f3c5719
--- /dev/null
+++ b/share/regions/config_741.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e5" SimName="741" SimLocationX="1005" SimLocationY="1023" Datastore="store_741_x05_y46.yap" SimListenPort="9841" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_742.xml b/share/regions/config_742.xml
new file mode 100644
index 0000000..d545076
--- /dev/null
+++ b/share/regions/config_742.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e6" SimName="742" SimLocationX="1006" SimLocationY="1023" Datastore="store_742_x06_y46.yap" SimListenPort="9842" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_743.xml b/share/regions/config_743.xml
new file mode 100644
index 0000000..6bc85e7
--- /dev/null
+++ b/share/regions/config_743.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e7" SimName="743" SimLocationX="1007" SimLocationY="1023" Datastore="store_743_x07_y46.yap" SimListenPort="9843" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_744.xml b/share/regions/config_744.xml
new file mode 100644
index 0000000..c6b0084
--- /dev/null
+++ b/share/regions/config_744.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e8" SimName="744" SimLocationX="1008" SimLocationY="1023" Datastore="store_744_x08_y46.yap" SimListenPort="9844" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_745.xml b/share/regions/config_745.xml
new file mode 100644
index 0000000..726cbe4
--- /dev/null
+++ b/share/regions/config_745.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2e9" SimName="745" SimLocationX="1009" SimLocationY="1023" Datastore="store_745_x09_y46.yap" SimListenPort="9845" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_746.xml b/share/regions/config_746.xml
new file mode 100644
index 0000000..8352089
--- /dev/null
+++ b/share/regions/config_746.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ea" SimName="746" SimLocationX="1010" SimLocationY="1023" Datastore="store_746_x10_y46.yap" SimListenPort="9846" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_747.xml b/share/regions/config_747.xml
new file mode 100644
index 0000000..6b3f7bb
--- /dev/null
+++ b/share/regions/config_747.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2eb" SimName="747" SimLocationX="1011" SimLocationY="1023" Datastore="store_747_x11_y46.yap" SimListenPort="9847" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_748.xml b/share/regions/config_748.xml
new file mode 100644
index 0000000..df21b05
--- /dev/null
+++ b/share/regions/config_748.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ec" SimName="748" SimLocationX="1012" SimLocationY="1023" Datastore="store_748_x12_y46.yap" SimListenPort="9848" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_749.xml b/share/regions/config_749.xml
new file mode 100644
index 0000000..ef66c7b
--- /dev/null
+++ b/share/regions/config_749.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ed" SimName="749" SimLocationX="1013" SimLocationY="1023" Datastore="store_749_x13_y46.yap" SimListenPort="9849" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_75.xml b/share/regions/config_75.xml
new file mode 100644
index 0000000..6849f9e
--- /dev/null
+++ b/share/regions/config_75.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf04b" SimName="75" SimLocationX="1011" SimLocationY="1002" Datastore="store_75_x11_y04.yap" SimListenPort="9175" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_750.xml b/share/regions/config_750.xml
new file mode 100644
index 0000000..d86e2af
--- /dev/null
+++ b/share/regions/config_750.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ee" SimName="750" SimLocationX="1014" SimLocationY="1023" Datastore="store_750_x14_y46.yap" SimListenPort="9850" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_751.xml b/share/regions/config_751.xml
new file mode 100644
index 0000000..84d4b55
--- /dev/null
+++ b/share/regions/config_751.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ef" SimName="751" SimLocationX="1015" SimLocationY="1023" Datastore="store_751_x15_y46.yap" SimListenPort="9851" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-31.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_752.xml b/share/regions/config_752.xml
new file mode 100644
index 0000000..4c29c01
--- /dev/null
+++ b/share/regions/config_752.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f0" SimName="752" SimLocationX="1016" SimLocationY="1023" Datastore="store_752_x00_y47.yap" SimListenPort="9852" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_753.xml b/share/regions/config_753.xml
new file mode 100644
index 0000000..4967672
--- /dev/null
+++ b/share/regions/config_753.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f1" SimName="753" SimLocationX="1017" SimLocationY="1023" Datastore="store_753_x01_y47.yap" SimListenPort="9853" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_754.xml b/share/regions/config_754.xml
new file mode 100644
index 0000000..9963821
--- /dev/null
+++ b/share/regions/config_754.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f2" SimName="754" SimLocationX="1018" SimLocationY="1023" Datastore="store_754_x02_y47.yap" SimListenPort="9854" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_755.xml b/share/regions/config_755.xml
new file mode 100644
index 0000000..f4dc0a0
--- /dev/null
+++ b/share/regions/config_755.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f3" SimName="755" SimLocationX="1019" SimLocationY="1023" Datastore="store_755_x03_y47.yap" SimListenPort="9855" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_756.xml b/share/regions/config_756.xml
new file mode 100644
index 0000000..027d8fd
--- /dev/null
+++ b/share/regions/config_756.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f4" SimName="756" SimLocationX="1020" SimLocationY="1023" Datastore="store_756_x04_y47.yap" SimListenPort="9856" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_757.xml b/share/regions/config_757.xml
new file mode 100644
index 0000000..053ad3f
--- /dev/null
+++ b/share/regions/config_757.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f5" SimName="757" SimLocationX="1021" SimLocationY="1023" Datastore="store_757_x05_y47.yap" SimListenPort="9857" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_758.xml b/share/regions/config_758.xml
new file mode 100644
index 0000000..2a9f270
--- /dev/null
+++ b/share/regions/config_758.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f6" SimName="758" SimLocationX="1022" SimLocationY="1023" Datastore="store_758_x06_y47.yap" SimListenPort="9858" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_759.xml b/share/regions/config_759.xml
new file mode 100644
index 0000000..fb00e58
--- /dev/null
+++ b/share/regions/config_759.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f7" SimName="759" SimLocationX="1023" SimLocationY="1023" Datastore="store_759_x07_y47.yap" SimListenPort="9859" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_76.xml b/share/regions/config_76.xml
new file mode 100644
index 0000000..55cb583
--- /dev/null
+++ b/share/regions/config_76.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf04c" SimName="76" SimLocationX="1012" SimLocationY="1002" Datastore="store_76_x12_y04.yap" SimListenPort="9176" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_760.xml b/share/regions/config_760.xml
new file mode 100644
index 0000000..da23a264
--- /dev/null
+++ b/share/regions/config_760.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f8" SimName="760" SimLocationX="1024" SimLocationY="1023" Datastore="store_760_x08_y47.yap" SimListenPort="9860" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_761.xml b/share/regions/config_761.xml
new file mode 100644
index 0000000..fd1d1bf
--- /dev/null
+++ b/share/regions/config_761.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2f9" SimName="761" SimLocationX="1025" SimLocationY="1023" Datastore="store_761_x09_y47.yap" SimListenPort="9861" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_762.xml b/share/regions/config_762.xml
new file mode 100644
index 0000000..9da782a
--- /dev/null
+++ b/share/regions/config_762.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2fa" SimName="762" SimLocationX="1026" SimLocationY="1023" Datastore="store_762_x10_y47.yap" SimListenPort="9862" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_763.xml b/share/regions/config_763.xml
new file mode 100644
index 0000000..eb8ae20
--- /dev/null
+++ b/share/regions/config_763.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2fb" SimName="763" SimLocationX="1027" SimLocationY="1023" Datastore="store_763_x11_y47.yap" SimListenPort="9863" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_764.xml b/share/regions/config_764.xml
new file mode 100644
index 0000000..db700e8
--- /dev/null
+++ b/share/regions/config_764.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2fc" SimName="764" SimLocationX="1028" SimLocationY="1023" Datastore="store_764_x12_y47.yap" SimListenPort="9864" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_765.xml b/share/regions/config_765.xml
new file mode 100644
index 0000000..dcd8fb5
--- /dev/null
+++ b/share/regions/config_765.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2fd" SimName="765" SimLocationX="1029" SimLocationY="1023" Datastore="store_765_x13_y47.yap" SimListenPort="9865" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_766.xml b/share/regions/config_766.xml
new file mode 100644
index 0000000..42d7ca1
--- /dev/null
+++ b/share/regions/config_766.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2fe" SimName="766" SimLocationX="1030" SimLocationY="1023" Datastore="store_766_x14_y47.yap" SimListenPort="9866" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_767.xml b/share/regions/config_767.xml
new file mode 100644
index 0000000..26c871f
--- /dev/null
+++ b/share/regions/config_767.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf2ff" SimName="767" SimLocationX="1031" SimLocationY="1023" Datastore="store_767_x15_y47.yap" SimListenPort="9867" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-32.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_768.xml b/share/regions/config_768.xml
new file mode 100644
index 0000000..2f03610
--- /dev/null
+++ b/share/regions/config_768.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf300" SimName="768" SimLocationX="1000" SimLocationY="1024" Datastore="store_768_x00_y48.yap" SimListenPort="9868" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_769.xml b/share/regions/config_769.xml
new file mode 100644
index 0000000..e203642
--- /dev/null
+++ b/share/regions/config_769.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf301" SimName="769" SimLocationX="1001" SimLocationY="1024" Datastore="store_769_x01_y48.yap" SimListenPort="9869" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_77.xml b/share/regions/config_77.xml
new file mode 100644
index 0000000..098fadb
--- /dev/null
+++ b/share/regions/config_77.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf04d" SimName="77" SimLocationX="1013" SimLocationY="1002" Datastore="store_77_x13_y04.yap" SimListenPort="9177" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_770.xml b/share/regions/config_770.xml
new file mode 100644
index 0000000..4ba6aca
--- /dev/null
+++ b/share/regions/config_770.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf302" SimName="770" SimLocationX="1002" SimLocationY="1024" Datastore="store_770_x02_y48.yap" SimListenPort="9870" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_771.xml b/share/regions/config_771.xml
new file mode 100644
index 0000000..930228b
--- /dev/null
+++ b/share/regions/config_771.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf303" SimName="771" SimLocationX="1003" SimLocationY="1024" Datastore="store_771_x03_y48.yap" SimListenPort="9871" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_772.xml b/share/regions/config_772.xml
new file mode 100644
index 0000000..89b63c7
--- /dev/null
+++ b/share/regions/config_772.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf304" SimName="772" SimLocationX="1004" SimLocationY="1024" Datastore="store_772_x04_y48.yap" SimListenPort="9872" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_773.xml b/share/regions/config_773.xml
new file mode 100644
index 0000000..3fd3ebb
--- /dev/null
+++ b/share/regions/config_773.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf305" SimName="773" SimLocationX="1005" SimLocationY="1024" Datastore="store_773_x05_y48.yap" SimListenPort="9873" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_774.xml b/share/regions/config_774.xml
new file mode 100644
index 0000000..00bc7ea
--- /dev/null
+++ b/share/regions/config_774.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf306" SimName="774" SimLocationX="1006" SimLocationY="1024" Datastore="store_774_x06_y48.yap" SimListenPort="9874" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_775.xml b/share/regions/config_775.xml
new file mode 100644
index 0000000..8b5a0e4
--- /dev/null
+++ b/share/regions/config_775.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf307" SimName="775" SimLocationX="1007" SimLocationY="1024" Datastore="store_775_x07_y48.yap" SimListenPort="9875" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_776.xml b/share/regions/config_776.xml
new file mode 100644
index 0000000..6ce71f7
--- /dev/null
+++ b/share/regions/config_776.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf308" SimName="776" SimLocationX="1008" SimLocationY="1024" Datastore="store_776_x08_y48.yap" SimListenPort="9876" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_777.xml b/share/regions/config_777.xml
new file mode 100644
index 0000000..3dc2da2
--- /dev/null
+++ b/share/regions/config_777.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf309" SimName="777" SimLocationX="1009" SimLocationY="1024" Datastore="store_777_x09_y48.yap" SimListenPort="9877" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_778.xml b/share/regions/config_778.xml
new file mode 100644
index 0000000..90c422e
--- /dev/null
+++ b/share/regions/config_778.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf30a" SimName="778" SimLocationX="1010" SimLocationY="1024" Datastore="store_778_x10_y48.yap" SimListenPort="9878" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_779.xml b/share/regions/config_779.xml
new file mode 100644
index 0000000..61bc661
--- /dev/null
+++ b/share/regions/config_779.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf30b" SimName="779" SimLocationX="1011" SimLocationY="1024" Datastore="store_779_x11_y48.yap" SimListenPort="9879" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_78.xml b/share/regions/config_78.xml
new file mode 100644
index 0000000..ad83220
--- /dev/null
+++ b/share/regions/config_78.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf04e" SimName="78" SimLocationX="1014" SimLocationY="1002" Datastore="store_78_x14_y04.yap" SimListenPort="9178" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_780.xml b/share/regions/config_780.xml
new file mode 100644
index 0000000..2a37177
--- /dev/null
+++ b/share/regions/config_780.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf30c" SimName="780" SimLocationX="1012" SimLocationY="1024" Datastore="store_780_x12_y48.yap" SimListenPort="9880" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_781.xml b/share/regions/config_781.xml
new file mode 100644
index 0000000..27abcfb
--- /dev/null
+++ b/share/regions/config_781.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf30d" SimName="781" SimLocationX="1013" SimLocationY="1024" Datastore="store_781_x13_y48.yap" SimListenPort="9881" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_782.xml b/share/regions/config_782.xml
new file mode 100644
index 0000000..7307283
--- /dev/null
+++ b/share/regions/config_782.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf30e" SimName="782" SimLocationX="1014" SimLocationY="1024" Datastore="store_782_x14_y48.yap" SimListenPort="9882" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_783.xml b/share/regions/config_783.xml
new file mode 100644
index 0000000..b27f4cc
--- /dev/null
+++ b/share/regions/config_783.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf30f" SimName="783" SimLocationX="1015" SimLocationY="1024" Datastore="store_783_x15_y48.yap" SimListenPort="9883" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-33.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_784.xml b/share/regions/config_784.xml
new file mode 100644
index 0000000..50c1d5a
--- /dev/null
+++ b/share/regions/config_784.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf310" SimName="784" SimLocationX="1016" SimLocationY="1024" Datastore="store_784_x00_y49.yap" SimListenPort="9884" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_785.xml b/share/regions/config_785.xml
new file mode 100644
index 0000000..4449502
--- /dev/null
+++ b/share/regions/config_785.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf311" SimName="785" SimLocationX="1017" SimLocationY="1024" Datastore="store_785_x01_y49.yap" SimListenPort="9885" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_786.xml b/share/regions/config_786.xml
new file mode 100644
index 0000000..3987f24
--- /dev/null
+++ b/share/regions/config_786.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf312" SimName="786" SimLocationX="1018" SimLocationY="1024" Datastore="store_786_x02_y49.yap" SimListenPort="9886" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_787.xml b/share/regions/config_787.xml
new file mode 100644
index 0000000..226675a
--- /dev/null
+++ b/share/regions/config_787.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf313" SimName="787" SimLocationX="1019" SimLocationY="1024" Datastore="store_787_x03_y49.yap" SimListenPort="9887" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_788.xml b/share/regions/config_788.xml
new file mode 100644
index 0000000..0d2b063
--- /dev/null
+++ b/share/regions/config_788.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf314" SimName="788" SimLocationX="1020" SimLocationY="1024" Datastore="store_788_x04_y49.yap" SimListenPort="9888" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_789.xml b/share/regions/config_789.xml
new file mode 100644
index 0000000..340351d
--- /dev/null
+++ b/share/regions/config_789.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf315" SimName="789" SimLocationX="1021" SimLocationY="1024" Datastore="store_789_x05_y49.yap" SimListenPort="9889" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_79.xml b/share/regions/config_79.xml
new file mode 100644
index 0000000..04cbad1
--- /dev/null
+++ b/share/regions/config_79.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf04f" SimName="79" SimLocationX="1015" SimLocationY="1002" Datastore="store_79_x15_y04.yap" SimListenPort="9179" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y11.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_790.xml b/share/regions/config_790.xml
new file mode 100644
index 0000000..5a0f061
--- /dev/null
+++ b/share/regions/config_790.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf316" SimName="790" SimLocationX="1022" SimLocationY="1024" Datastore="store_790_x06_y49.yap" SimListenPort="9890" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_791.xml b/share/regions/config_791.xml
new file mode 100644
index 0000000..712e3e4
--- /dev/null
+++ b/share/regions/config_791.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf317" SimName="791" SimLocationX="1023" SimLocationY="1024" Datastore="store_791_x07_y49.yap" SimListenPort="9891" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_792.xml b/share/regions/config_792.xml
new file mode 100644
index 0000000..36d1b4f
--- /dev/null
+++ b/share/regions/config_792.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf318" SimName="792" SimLocationX="1024" SimLocationY="1024" Datastore="store_792_x08_y49.yap" SimListenPort="9892" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_793.xml b/share/regions/config_793.xml
new file mode 100644
index 0000000..777df87
--- /dev/null
+++ b/share/regions/config_793.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf319" SimName="793" SimLocationX="1025" SimLocationY="1024" Datastore="store_793_x09_y49.yap" SimListenPort="9893" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_794.xml b/share/regions/config_794.xml
new file mode 100644
index 0000000..0fe4c96
--- /dev/null
+++ b/share/regions/config_794.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf31a" SimName="794" SimLocationX="1026" SimLocationY="1024" Datastore="store_794_x10_y49.yap" SimListenPort="9894" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_795.xml b/share/regions/config_795.xml
new file mode 100644
index 0000000..a830ff1
--- /dev/null
+++ b/share/regions/config_795.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf31b" SimName="795" SimLocationX="1027" SimLocationY="1024" Datastore="store_795_x11_y49.yap" SimListenPort="9895" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_796.xml b/share/regions/config_796.xml
new file mode 100644
index 0000000..4bb7ead
--- /dev/null
+++ b/share/regions/config_796.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf31c" SimName="796" SimLocationX="1028" SimLocationY="1024" Datastore="store_796_x12_y49.yap" SimListenPort="9896" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_797.xml b/share/regions/config_797.xml
new file mode 100644
index 0000000..84465a3
--- /dev/null
+++ b/share/regions/config_797.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf31d" SimName="797" SimLocationX="1029" SimLocationY="1024" Datastore="store_797_x13_y49.yap" SimListenPort="9897" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_798.xml b/share/regions/config_798.xml
new file mode 100644
index 0000000..b7327c6
--- /dev/null
+++ b/share/regions/config_798.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf31e" SimName="798" SimLocationX="1030" SimLocationY="1024" Datastore="store_798_x14_y49.yap" SimListenPort="9898" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_799.xml b/share/regions/config_799.xml
new file mode 100644
index 0000000..d810bcd
--- /dev/null
+++ b/share/regions/config_799.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf31f" SimName="799" SimLocationX="1031" SimLocationY="1024" Datastore="store_799_x15_y49.yap" SimListenPort="9899" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-34.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_8.xml b/share/regions/config_8.xml
new file mode 100644
index 0000000..b4be610
--- /dev/null
+++ b/share/regions/config_8.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf008" SimName="8" SimLocationX="1008" SimLocationY="1000" Datastore="store_8_x08_y00.yap" SimListenPort="9108" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_80.xml b/share/regions/config_80.xml
new file mode 100644
index 0000000..f3613ce
--- /dev/null
+++ b/share/regions/config_80.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf050" SimName="80" SimLocationX="1016" SimLocationY="1002" Datastore="store_80_x00_y05.yap" SimListenPort="9180" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_800.xml b/share/regions/config_800.xml
new file mode 100644
index 0000000..3d467d7
--- /dev/null
+++ b/share/regions/config_800.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf320" SimName="800" SimLocationX="1000" SimLocationY="1025" Datastore="store_800_x00_y50.yap" SimListenPort="9900" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_801.xml b/share/regions/config_801.xml
new file mode 100644
index 0000000..8e58788
--- /dev/null
+++ b/share/regions/config_801.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf321" SimName="801" SimLocationX="1001" SimLocationY="1025" Datastore="store_801_x01_y50.yap" SimListenPort="9901" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_802.xml b/share/regions/config_802.xml
new file mode 100644
index 0000000..b91ee06
--- /dev/null
+++ b/share/regions/config_802.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf322" SimName="802" SimLocationX="1002" SimLocationY="1025" Datastore="store_802_x02_y50.yap" SimListenPort="9902" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_803.xml b/share/regions/config_803.xml
new file mode 100644
index 0000000..797e25b
--- /dev/null
+++ b/share/regions/config_803.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf323" SimName="803" SimLocationX="1003" SimLocationY="1025" Datastore="store_803_x03_y50.yap" SimListenPort="9903" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_804.xml b/share/regions/config_804.xml
new file mode 100644
index 0000000..fbb552b
--- /dev/null
+++ b/share/regions/config_804.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf324" SimName="804" SimLocationX="1004" SimLocationY="1025" Datastore="store_804_x04_y50.yap" SimListenPort="9904" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_805.xml b/share/regions/config_805.xml
new file mode 100644
index 0000000..c2813a7
--- /dev/null
+++ b/share/regions/config_805.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf325" SimName="805" SimLocationX="1005" SimLocationY="1025" Datastore="store_805_x05_y50.yap" SimListenPort="9905" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_806.xml b/share/regions/config_806.xml
new file mode 100644
index 0000000..5ddfcb4
--- /dev/null
+++ b/share/regions/config_806.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf326" SimName="806" SimLocationX="1006" SimLocationY="1025" Datastore="store_806_x06_y50.yap" SimListenPort="9906" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_807.xml b/share/regions/config_807.xml
new file mode 100644
index 0000000..ebb9b3e
--- /dev/null
+++ b/share/regions/config_807.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf327" SimName="807" SimLocationX="1007" SimLocationY="1025" Datastore="store_807_x07_y50.yap" SimListenPort="9907" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_808.xml b/share/regions/config_808.xml
new file mode 100644
index 0000000..6718f13
--- /dev/null
+++ b/share/regions/config_808.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf328" SimName="808" SimLocationX="1008" SimLocationY="1025" Datastore="store_808_x08_y50.yap" SimListenPort="9908" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_809.xml b/share/regions/config_809.xml
new file mode 100644
index 0000000..cbe981a
--- /dev/null
+++ b/share/regions/config_809.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf329" SimName="809" SimLocationX="1009" SimLocationY="1025" Datastore="store_809_x09_y50.yap" SimListenPort="9909" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_81.xml b/share/regions/config_81.xml
new file mode 100644
index 0000000..ee52bf7
--- /dev/null
+++ b/share/regions/config_81.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf051" SimName="81" SimLocationX="1017" SimLocationY="1002" Datastore="store_81_x01_y05.yap" SimListenPort="9181" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_810.xml b/share/regions/config_810.xml
new file mode 100644
index 0000000..8dfcdec
--- /dev/null
+++ b/share/regions/config_810.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf32a" SimName="810" SimLocationX="1010" SimLocationY="1025" Datastore="store_810_x10_y50.yap" SimListenPort="9910" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_811.xml b/share/regions/config_811.xml
new file mode 100644
index 0000000..1eaaa83
--- /dev/null
+++ b/share/regions/config_811.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf32b" SimName="811" SimLocationX="1011" SimLocationY="1025" Datastore="store_811_x11_y50.yap" SimListenPort="9911" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_812.xml b/share/regions/config_812.xml
new file mode 100644
index 0000000..a5e7f49
--- /dev/null
+++ b/share/regions/config_812.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf32c" SimName="812" SimLocationX="1012" SimLocationY="1025" Datastore="store_812_x12_y50.yap" SimListenPort="9912" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_813.xml b/share/regions/config_813.xml
new file mode 100644
index 0000000..991d105
--- /dev/null
+++ b/share/regions/config_813.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf32d" SimName="813" SimLocationX="1013" SimLocationY="1025" Datastore="store_813_x13_y50.yap" SimListenPort="9913" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_814.xml b/share/regions/config_814.xml
new file mode 100644
index 0000000..c7ea360
--- /dev/null
+++ b/share/regions/config_814.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf32e" SimName="814" SimLocationX="1014" SimLocationY="1025" Datastore="store_814_x14_y50.yap" SimListenPort="9914" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_815.xml b/share/regions/config_815.xml
new file mode 100644
index 0000000..813f64b
--- /dev/null
+++ b/share/regions/config_815.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf32f" SimName="815" SimLocationX="1015" SimLocationY="1025" Datastore="store_815_x15_y50.yap" SimListenPort="9915" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-35.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_816.xml b/share/regions/config_816.xml
new file mode 100644
index 0000000..a15e217
--- /dev/null
+++ b/share/regions/config_816.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf330" SimName="816" SimLocationX="1016" SimLocationY="1025" Datastore="store_816_x00_y51.yap" SimListenPort="9916" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_817.xml b/share/regions/config_817.xml
new file mode 100644
index 0000000..81e6c67
--- /dev/null
+++ b/share/regions/config_817.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf331" SimName="817" SimLocationX="1017" SimLocationY="1025" Datastore="store_817_x01_y51.yap" SimListenPort="9917" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_818.xml b/share/regions/config_818.xml
new file mode 100644
index 0000000..18a9086
--- /dev/null
+++ b/share/regions/config_818.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf332" SimName="818" SimLocationX="1018" SimLocationY="1025" Datastore="store_818_x02_y51.yap" SimListenPort="9918" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_819.xml b/share/regions/config_819.xml
new file mode 100644
index 0000000..7b207ad
--- /dev/null
+++ b/share/regions/config_819.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf333" SimName="819" SimLocationX="1019" SimLocationY="1025" Datastore="store_819_x03_y51.yap" SimListenPort="9919" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_82.xml b/share/regions/config_82.xml
new file mode 100644
index 0000000..d74644d
--- /dev/null
+++ b/share/regions/config_82.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf052" SimName="82" SimLocationX="1018" SimLocationY="1002" Datastore="store_82_x02_y05.yap" SimListenPort="9182" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_820.xml b/share/regions/config_820.xml
new file mode 100644
index 0000000..d6b65c5
--- /dev/null
+++ b/share/regions/config_820.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf334" SimName="820" SimLocationX="1020" SimLocationY="1025" Datastore="store_820_x04_y51.yap" SimListenPort="9920" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_821.xml b/share/regions/config_821.xml
new file mode 100644
index 0000000..49cf8ba
--- /dev/null
+++ b/share/regions/config_821.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf335" SimName="821" SimLocationX="1021" SimLocationY="1025" Datastore="store_821_x05_y51.yap" SimListenPort="9921" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_822.xml b/share/regions/config_822.xml
new file mode 100644
index 0000000..2ef23f1
--- /dev/null
+++ b/share/regions/config_822.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf336" SimName="822" SimLocationX="1022" SimLocationY="1025" Datastore="store_822_x06_y51.yap" SimListenPort="9922" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_823.xml b/share/regions/config_823.xml
new file mode 100644
index 0000000..f317ab9
--- /dev/null
+++ b/share/regions/config_823.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf337" SimName="823" SimLocationX="1023" SimLocationY="1025" Datastore="store_823_x07_y51.yap" SimListenPort="9923" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_824.xml b/share/regions/config_824.xml
new file mode 100644
index 0000000..b0e22a4
--- /dev/null
+++ b/share/regions/config_824.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf338" SimName="824" SimLocationX="1024" SimLocationY="1025" Datastore="store_824_x08_y51.yap" SimListenPort="9924" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_825.xml b/share/regions/config_825.xml
new file mode 100644
index 0000000..282bd47
--- /dev/null
+++ b/share/regions/config_825.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf339" SimName="825" SimLocationX="1025" SimLocationY="1025" Datastore="store_825_x09_y51.yap" SimListenPort="9925" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_826.xml b/share/regions/config_826.xml
new file mode 100644
index 0000000..3093150
--- /dev/null
+++ b/share/regions/config_826.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf33a" SimName="826" SimLocationX="1026" SimLocationY="1025" Datastore="store_826_x10_y51.yap" SimListenPort="9926" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_827.xml b/share/regions/config_827.xml
new file mode 100644
index 0000000..4608a28
--- /dev/null
+++ b/share/regions/config_827.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf33b" SimName="827" SimLocationX="1027" SimLocationY="1025" Datastore="store_827_x11_y51.yap" SimListenPort="9927" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_828.xml b/share/regions/config_828.xml
new file mode 100644
index 0000000..4bba5e4
--- /dev/null
+++ b/share/regions/config_828.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf33c" SimName="828" SimLocationX="1028" SimLocationY="1025" Datastore="store_828_x12_y51.yap" SimListenPort="9928" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_829.xml b/share/regions/config_829.xml
new file mode 100644
index 0000000..bd0e7db
--- /dev/null
+++ b/share/regions/config_829.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf33d" SimName="829" SimLocationX="1029" SimLocationY="1025" Datastore="store_829_x13_y51.yap" SimListenPort="9929" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_83.xml b/share/regions/config_83.xml
new file mode 100644
index 0000000..eea085c
--- /dev/null
+++ b/share/regions/config_83.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf053" SimName="83" SimLocationX="1019" SimLocationY="1002" Datastore="store_83_x03_y05.yap" SimListenPort="9183" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_830.xml b/share/regions/config_830.xml
new file mode 100644
index 0000000..118864d
--- /dev/null
+++ b/share/regions/config_830.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf33e" SimName="830" SimLocationX="1030" SimLocationY="1025" Datastore="store_830_x14_y51.yap" SimListenPort="9930" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_831.xml b/share/regions/config_831.xml
new file mode 100644
index 0000000..6f3b420
--- /dev/null
+++ b/share/regions/config_831.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf33f" SimName="831" SimLocationX="1031" SimLocationY="1025" Datastore="store_831_x15_y51.yap" SimListenPort="9931" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-36.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_832.xml b/share/regions/config_832.xml
new file mode 100644
index 0000000..7578fa6
--- /dev/null
+++ b/share/regions/config_832.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf340" SimName="832" SimLocationX="1000" SimLocationY="1026" Datastore="store_832_x00_y52.yap" SimListenPort="9932" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_833.xml b/share/regions/config_833.xml
new file mode 100644
index 0000000..e526d62
--- /dev/null
+++ b/share/regions/config_833.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf341" SimName="833" SimLocationX="1001" SimLocationY="1026" Datastore="store_833_x01_y52.yap" SimListenPort="9933" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_834.xml b/share/regions/config_834.xml
new file mode 100644
index 0000000..d7b6c57
--- /dev/null
+++ b/share/regions/config_834.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf342" SimName="834" SimLocationX="1002" SimLocationY="1026" Datastore="store_834_x02_y52.yap" SimListenPort="9934" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_835.xml b/share/regions/config_835.xml
new file mode 100644
index 0000000..0dc42d2
--- /dev/null
+++ b/share/regions/config_835.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf343" SimName="835" SimLocationX="1003" SimLocationY="1026" Datastore="store_835_x03_y52.yap" SimListenPort="9935" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_836.xml b/share/regions/config_836.xml
new file mode 100644
index 0000000..a937d60
--- /dev/null
+++ b/share/regions/config_836.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf344" SimName="836" SimLocationX="1004" SimLocationY="1026" Datastore="store_836_x04_y52.yap" SimListenPort="9936" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_837.xml b/share/regions/config_837.xml
new file mode 100644
index 0000000..b9900fc
--- /dev/null
+++ b/share/regions/config_837.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf345" SimName="837" SimLocationX="1005" SimLocationY="1026" Datastore="store_837_x05_y52.yap" SimListenPort="9937" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_838.xml b/share/regions/config_838.xml
new file mode 100644
index 0000000..9c4c909
--- /dev/null
+++ b/share/regions/config_838.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf346" SimName="838" SimLocationX="1006" SimLocationY="1026" Datastore="store_838_x06_y52.yap" SimListenPort="9938" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_839.xml b/share/regions/config_839.xml
new file mode 100644
index 0000000..b9e76e6
--- /dev/null
+++ b/share/regions/config_839.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf347" SimName="839" SimLocationX="1007" SimLocationY="1026" Datastore="store_839_x07_y52.yap" SimListenPort="9939" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_84.xml b/share/regions/config_84.xml
new file mode 100644
index 0000000..c5ecb24
--- /dev/null
+++ b/share/regions/config_84.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf054" SimName="84" SimLocationX="1020" SimLocationY="1002" Datastore="store_84_x04_y05.yap" SimListenPort="9184" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_840.xml b/share/regions/config_840.xml
new file mode 100644
index 0000000..89d5da2
--- /dev/null
+++ b/share/regions/config_840.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf348" SimName="840" SimLocationX="1008" SimLocationY="1026" Datastore="store_840_x08_y52.yap" SimListenPort="9940" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_841.xml b/share/regions/config_841.xml
new file mode 100644
index 0000000..f1727da
--- /dev/null
+++ b/share/regions/config_841.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf349" SimName="841" SimLocationX="1009" SimLocationY="1026" Datastore="store_841_x09_y52.yap" SimListenPort="9941" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_842.xml b/share/regions/config_842.xml
new file mode 100644
index 0000000..b3cb8c3
--- /dev/null
+++ b/share/regions/config_842.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf34a" SimName="842" SimLocationX="1010" SimLocationY="1026" Datastore="store_842_x10_y52.yap" SimListenPort="9942" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_843.xml b/share/regions/config_843.xml
new file mode 100644
index 0000000..aca572c
--- /dev/null
+++ b/share/regions/config_843.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf34b" SimName="843" SimLocationX="1011" SimLocationY="1026" Datastore="store_843_x11_y52.yap" SimListenPort="9943" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_844.xml b/share/regions/config_844.xml
new file mode 100644
index 0000000..7fddd7e
--- /dev/null
+++ b/share/regions/config_844.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf34c" SimName="844" SimLocationX="1012" SimLocationY="1026" Datastore="store_844_x12_y52.yap" SimListenPort="9944" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_845.xml b/share/regions/config_845.xml
new file mode 100644
index 0000000..fe70502
--- /dev/null
+++ b/share/regions/config_845.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf34d" SimName="845" SimLocationX="1013" SimLocationY="1026" Datastore="store_845_x13_y52.yap" SimListenPort="9945" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_846.xml b/share/regions/config_846.xml
new file mode 100644
index 0000000..f2230ff
--- /dev/null
+++ b/share/regions/config_846.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf34e" SimName="846" SimLocationX="1014" SimLocationY="1026" Datastore="store_846_x14_y52.yap" SimListenPort="9946" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_847.xml b/share/regions/config_847.xml
new file mode 100644
index 0000000..433bbc0
--- /dev/null
+++ b/share/regions/config_847.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf34f" SimName="847" SimLocationX="1015" SimLocationY="1026" Datastore="store_847_x15_y52.yap" SimListenPort="9947" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-37.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_848.xml b/share/regions/config_848.xml
new file mode 100644
index 0000000..ef82380
--- /dev/null
+++ b/share/regions/config_848.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf350" SimName="848" SimLocationX="1016" SimLocationY="1026" Datastore="store_848_x00_y53.yap" SimListenPort="9948" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_849.xml b/share/regions/config_849.xml
new file mode 100644
index 0000000..991e279
--- /dev/null
+++ b/share/regions/config_849.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf351" SimName="849" SimLocationX="1017" SimLocationY="1026" Datastore="store_849_x01_y53.yap" SimListenPort="9949" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_85.xml b/share/regions/config_85.xml
new file mode 100644
index 0000000..c180750
--- /dev/null
+++ b/share/regions/config_85.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf055" SimName="85" SimLocationX="1021" SimLocationY="1002" Datastore="store_85_x05_y05.yap" SimListenPort="9185" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_850.xml b/share/regions/config_850.xml
new file mode 100644
index 0000000..440eb71
--- /dev/null
+++ b/share/regions/config_850.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf352" SimName="850" SimLocationX="1018" SimLocationY="1026" Datastore="store_850_x02_y53.yap" SimListenPort="9950" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_851.xml b/share/regions/config_851.xml
new file mode 100644
index 0000000..5fe3b64
--- /dev/null
+++ b/share/regions/config_851.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf353" SimName="851" SimLocationX="1019" SimLocationY="1026" Datastore="store_851_x03_y53.yap" SimListenPort="9951" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_852.xml b/share/regions/config_852.xml
new file mode 100644
index 0000000..a1513ba
--- /dev/null
+++ b/share/regions/config_852.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf354" SimName="852" SimLocationX="1020" SimLocationY="1026" Datastore="store_852_x04_y53.yap" SimListenPort="9952" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_853.xml b/share/regions/config_853.xml
new file mode 100644
index 0000000..b2e572a
--- /dev/null
+++ b/share/regions/config_853.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf355" SimName="853" SimLocationX="1021" SimLocationY="1026" Datastore="store_853_x05_y53.yap" SimListenPort="9953" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_854.xml b/share/regions/config_854.xml
new file mode 100644
index 0000000..aff8b91
--- /dev/null
+++ b/share/regions/config_854.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf356" SimName="854" SimLocationX="1022" SimLocationY="1026" Datastore="store_854_x06_y53.yap" SimListenPort="9954" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_855.xml b/share/regions/config_855.xml
new file mode 100644
index 0000000..115e960
--- /dev/null
+++ b/share/regions/config_855.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf357" SimName="855" SimLocationX="1023" SimLocationY="1026" Datastore="store_855_x07_y53.yap" SimListenPort="9955" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_856.xml b/share/regions/config_856.xml
new file mode 100644
index 0000000..40b79fd
--- /dev/null
+++ b/share/regions/config_856.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf358" SimName="856" SimLocationX="1024" SimLocationY="1026" Datastore="store_856_x08_y53.yap" SimListenPort="9956" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_857.xml b/share/regions/config_857.xml
new file mode 100644
index 0000000..a4e114c
--- /dev/null
+++ b/share/regions/config_857.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf359" SimName="857" SimLocationX="1025" SimLocationY="1026" Datastore="store_857_x09_y53.yap" SimListenPort="9957" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_858.xml b/share/regions/config_858.xml
new file mode 100644
index 0000000..2881865
--- /dev/null
+++ b/share/regions/config_858.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf35a" SimName="858" SimLocationX="1026" SimLocationY="1026" Datastore="store_858_x10_y53.yap" SimListenPort="9958" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_859.xml b/share/regions/config_859.xml
new file mode 100644
index 0000000..865a470
--- /dev/null
+++ b/share/regions/config_859.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf35b" SimName="859" SimLocationX="1027" SimLocationY="1026" Datastore="store_859_x11_y53.yap" SimListenPort="9959" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_86.xml b/share/regions/config_86.xml
new file mode 100644
index 0000000..9b14bb1
--- /dev/null
+++ b/share/regions/config_86.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf056" SimName="86" SimLocationX="1022" SimLocationY="1002" Datastore="store_86_x06_y05.yap" SimListenPort="9186" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_860.xml b/share/regions/config_860.xml
new file mode 100644
index 0000000..71062cd
--- /dev/null
+++ b/share/regions/config_860.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf35c" SimName="860" SimLocationX="1028" SimLocationY="1026" Datastore="store_860_x12_y53.yap" SimListenPort="9960" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_861.xml b/share/regions/config_861.xml
new file mode 100644
index 0000000..d828145
--- /dev/null
+++ b/share/regions/config_861.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf35d" SimName="861" SimLocationX="1029" SimLocationY="1026" Datastore="store_861_x13_y53.yap" SimListenPort="9961" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_862.xml b/share/regions/config_862.xml
new file mode 100644
index 0000000..0700999
--- /dev/null
+++ b/share/regions/config_862.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf35e" SimName="862" SimLocationX="1030" SimLocationY="1026" Datastore="store_862_x14_y53.yap" SimListenPort="9962" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_863.xml b/share/regions/config_863.xml
new file mode 100644
index 0000000..954d08c
--- /dev/null
+++ b/share/regions/config_863.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf35f" SimName="863" SimLocationX="1031" SimLocationY="1026" Datastore="store_863_x15_y53.yap" SimListenPort="9963" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-38.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_864.xml b/share/regions/config_864.xml
new file mode 100644
index 0000000..68918af
--- /dev/null
+++ b/share/regions/config_864.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf360" SimName="864" SimLocationX="1000" SimLocationY="1027" Datastore="store_864_x00_y54.yap" SimListenPort="9964" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_865.xml b/share/regions/config_865.xml
new file mode 100644
index 0000000..adff624
--- /dev/null
+++ b/share/regions/config_865.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf361" SimName="865" SimLocationX="1001" SimLocationY="1027" Datastore="store_865_x01_y54.yap" SimListenPort="9965" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_866.xml b/share/regions/config_866.xml
new file mode 100644
index 0000000..0ffd723
--- /dev/null
+++ b/share/regions/config_866.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf362" SimName="866" SimLocationX="1002" SimLocationY="1027" Datastore="store_866_x02_y54.yap" SimListenPort="9966" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_867.xml b/share/regions/config_867.xml
new file mode 100644
index 0000000..94e112f
--- /dev/null
+++ b/share/regions/config_867.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf363" SimName="867" SimLocationX="1003" SimLocationY="1027" Datastore="store_867_x03_y54.yap" SimListenPort="9967" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_868.xml b/share/regions/config_868.xml
new file mode 100644
index 0000000..9b794ed
--- /dev/null
+++ b/share/regions/config_868.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf364" SimName="868" SimLocationX="1004" SimLocationY="1027" Datastore="store_868_x04_y54.yap" SimListenPort="9968" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_869.xml b/share/regions/config_869.xml
new file mode 100644
index 0000000..c2b5405
--- /dev/null
+++ b/share/regions/config_869.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf365" SimName="869" SimLocationX="1005" SimLocationY="1027" Datastore="store_869_x05_y54.yap" SimListenPort="9969" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_87.xml b/share/regions/config_87.xml
new file mode 100644
index 0000000..bd39935
--- /dev/null
+++ b/share/regions/config_87.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf057" SimName="87" SimLocationX="1023" SimLocationY="1002" Datastore="store_87_x07_y05.yap" SimListenPort="9187" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_870.xml b/share/regions/config_870.xml
new file mode 100644
index 0000000..6220e45
--- /dev/null
+++ b/share/regions/config_870.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf366" SimName="870" SimLocationX="1006" SimLocationY="1027" Datastore="store_870_x06_y54.yap" SimListenPort="9970" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_871.xml b/share/regions/config_871.xml
new file mode 100644
index 0000000..79be33d
--- /dev/null
+++ b/share/regions/config_871.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf367" SimName="871" SimLocationX="1007" SimLocationY="1027" Datastore="store_871_x07_y54.yap" SimListenPort="9971" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_872.xml b/share/regions/config_872.xml
new file mode 100644
index 0000000..4d864d5
--- /dev/null
+++ b/share/regions/config_872.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf368" SimName="872" SimLocationX="1008" SimLocationY="1027" Datastore="store_872_x08_y54.yap" SimListenPort="9972" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_873.xml b/share/regions/config_873.xml
new file mode 100644
index 0000000..592fa53
--- /dev/null
+++ b/share/regions/config_873.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf369" SimName="873" SimLocationX="1009" SimLocationY="1027" Datastore="store_873_x09_y54.yap" SimListenPort="9973" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_874.xml b/share/regions/config_874.xml
new file mode 100644
index 0000000..6347776
--- /dev/null
+++ b/share/regions/config_874.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf36a" SimName="874" SimLocationX="1010" SimLocationY="1027" Datastore="store_874_x10_y54.yap" SimListenPort="9974" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_875.xml b/share/regions/config_875.xml
new file mode 100644
index 0000000..2c91a9f
--- /dev/null
+++ b/share/regions/config_875.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf36b" SimName="875" SimLocationX="1011" SimLocationY="1027" Datastore="store_875_x11_y54.yap" SimListenPort="9975" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_876.xml b/share/regions/config_876.xml
new file mode 100644
index 0000000..662ece3
--- /dev/null
+++ b/share/regions/config_876.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf36c" SimName="876" SimLocationX="1012" SimLocationY="1027" Datastore="store_876_x12_y54.yap" SimListenPort="9976" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_877.xml b/share/regions/config_877.xml
new file mode 100644
index 0000000..4015a98
--- /dev/null
+++ b/share/regions/config_877.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf36d" SimName="877" SimLocationX="1013" SimLocationY="1027" Datastore="store_877_x13_y54.yap" SimListenPort="9977" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_878.xml b/share/regions/config_878.xml
new file mode 100644
index 0000000..49d452c
--- /dev/null
+++ b/share/regions/config_878.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf36e" SimName="878" SimLocationX="1014" SimLocationY="1027" Datastore="store_878_x14_y54.yap" SimListenPort="9978" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_879.xml b/share/regions/config_879.xml
new file mode 100644
index 0000000..363e9b0
--- /dev/null
+++ b/share/regions/config_879.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf36f" SimName="879" SimLocationX="1015" SimLocationY="1027" Datastore="store_879_x15_y54.yap" SimListenPort="9979" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-39.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_88.xml b/share/regions/config_88.xml
new file mode 100644
index 0000000..a180aee
--- /dev/null
+++ b/share/regions/config_88.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf058" SimName="88" SimLocationX="1024" SimLocationY="1002" Datastore="store_88_x08_y05.yap" SimListenPort="9188" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_880.xml b/share/regions/config_880.xml
new file mode 100644
index 0000000..8f00bd3
--- /dev/null
+++ b/share/regions/config_880.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf370" SimName="880" SimLocationX="1016" SimLocationY="1027" Datastore="store_880_x00_y55.yap" SimListenPort="9980" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_881.xml b/share/regions/config_881.xml
new file mode 100644
index 0000000..bec63f2
--- /dev/null
+++ b/share/regions/config_881.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf371" SimName="881" SimLocationX="1017" SimLocationY="1027" Datastore="store_881_x01_y55.yap" SimListenPort="9981" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_882.xml b/share/regions/config_882.xml
new file mode 100644
index 0000000..745f1b2
--- /dev/null
+++ b/share/regions/config_882.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf372" SimName="882" SimLocationX="1018" SimLocationY="1027" Datastore="store_882_x02_y55.yap" SimListenPort="9982" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_883.xml b/share/regions/config_883.xml
new file mode 100644
index 0000000..4d88d25
--- /dev/null
+++ b/share/regions/config_883.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf373" SimName="883" SimLocationX="1019" SimLocationY="1027" Datastore="store_883_x03_y55.yap" SimListenPort="9983" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_884.xml b/share/regions/config_884.xml
new file mode 100644
index 0000000..bc1e55b
--- /dev/null
+++ b/share/regions/config_884.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf374" SimName="884" SimLocationX="1020" SimLocationY="1027" Datastore="store_884_x04_y55.yap" SimListenPort="9984" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_885.xml b/share/regions/config_885.xml
new file mode 100644
index 0000000..e0e94a8
--- /dev/null
+++ b/share/regions/config_885.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf375" SimName="885" SimLocationX="1021" SimLocationY="1027" Datastore="store_885_x05_y55.yap" SimListenPort="9985" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_886.xml b/share/regions/config_886.xml
new file mode 100644
index 0000000..1f18106
--- /dev/null
+++ b/share/regions/config_886.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf376" SimName="886" SimLocationX="1022" SimLocationY="1027" Datastore="store_886_x06_y55.yap" SimListenPort="9986" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_887.xml b/share/regions/config_887.xml
new file mode 100644
index 0000000..318304a
--- /dev/null
+++ b/share/regions/config_887.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf377" SimName="887" SimLocationX="1023" SimLocationY="1027" Datastore="store_887_x07_y55.yap" SimListenPort="9987" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_888.xml b/share/regions/config_888.xml
new file mode 100644
index 0000000..c073f6d
--- /dev/null
+++ b/share/regions/config_888.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf378" SimName="888" SimLocationX="1024" SimLocationY="1027" Datastore="store_888_x08_y55.yap" SimListenPort="9988" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_889.xml b/share/regions/config_889.xml
new file mode 100644
index 0000000..944bff7
--- /dev/null
+++ b/share/regions/config_889.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf379" SimName="889" SimLocationX="1025" SimLocationY="1027" Datastore="store_889_x09_y55.yap" SimListenPort="9989" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_89.xml b/share/regions/config_89.xml
new file mode 100644
index 0000000..8a50594
--- /dev/null
+++ b/share/regions/config_89.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf059" SimName="89" SimLocationX="1025" SimLocationY="1002" Datastore="store_89_x09_y05.yap" SimListenPort="9189" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_890.xml b/share/regions/config_890.xml
new file mode 100644
index 0000000..a587c10
--- /dev/null
+++ b/share/regions/config_890.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf37a" SimName="890" SimLocationX="1026" SimLocationY="1027" Datastore="store_890_x10_y55.yap" SimListenPort="9990" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_891.xml b/share/regions/config_891.xml
new file mode 100644
index 0000000..16b1c82
--- /dev/null
+++ b/share/regions/config_891.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf37b" SimName="891" SimLocationX="1027" SimLocationY="1027" Datastore="store_891_x11_y55.yap" SimListenPort="9991" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_892.xml b/share/regions/config_892.xml
new file mode 100644
index 0000000..d1b3545
--- /dev/null
+++ b/share/regions/config_892.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf37c" SimName="892" SimLocationX="1028" SimLocationY="1027" Datastore="store_892_x12_y55.yap" SimListenPort="9992" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_893.xml b/share/regions/config_893.xml
new file mode 100644
index 0000000..77e3e51
--- /dev/null
+++ b/share/regions/config_893.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf37d" SimName="893" SimLocationX="1029" SimLocationY="1027" Datastore="store_893_x13_y55.yap" SimListenPort="9993" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_894.xml b/share/regions/config_894.xml
new file mode 100644
index 0000000..f313e48
--- /dev/null
+++ b/share/regions/config_894.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf37e" SimName="894" SimLocationX="1030" SimLocationY="1027" Datastore="store_894_x14_y55.yap" SimListenPort="9994" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_895.xml b/share/regions/config_895.xml
new file mode 100644
index 0000000..4e5204c
--- /dev/null
+++ b/share/regions/config_895.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf37f" SimName="895" SimLocationX="1031" SimLocationY="1027" Datastore="store_895_x15_y55.yap" SimListenPort="9995" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-40.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_896.xml b/share/regions/config_896.xml
new file mode 100644
index 0000000..54de294
--- /dev/null
+++ b/share/regions/config_896.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf380" SimName="896" SimLocationX="1000" SimLocationY="1028" Datastore="store_896_x00_y56.yap" SimListenPort="9996" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_897.xml b/share/regions/config_897.xml
new file mode 100644
index 0000000..0a7ca98
--- /dev/null
+++ b/share/regions/config_897.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf381" SimName="897" SimLocationX="1001" SimLocationY="1028" Datastore="store_897_x01_y56.yap" SimListenPort="9997" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_898.xml b/share/regions/config_898.xml
new file mode 100644
index 0000000..919b69e
--- /dev/null
+++ b/share/regions/config_898.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf382" SimName="898" SimLocationX="1002" SimLocationY="1028" Datastore="store_898_x02_y56.yap" SimListenPort="9998" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_899.xml b/share/regions/config_899.xml
new file mode 100644
index 0000000..b379919
--- /dev/null
+++ b/share/regions/config_899.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf383" SimName="899" SimLocationX="1003" SimLocationY="1028" Datastore="store_899_x03_y56.yap" SimListenPort="9999" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_9.xml b/share/regions/config_9.xml
new file mode 100644
index 0000000..ab795c9
--- /dev/null
+++ b/share/regions/config_9.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf009" SimName="9" SimLocationX="1009" SimLocationY="1000" Datastore="store_9_x09_y00.yap" SimListenPort="9109" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y15.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_90.xml b/share/regions/config_90.xml
new file mode 100644
index 0000000..1493d48
--- /dev/null
+++ b/share/regions/config_90.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf05a" SimName="90" SimLocationX="1026" SimLocationY="1002" Datastore="store_90_x10_y05.yap" SimListenPort="9190" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_900.xml b/share/regions/config_900.xml
new file mode 100644
index 0000000..9f0b217
--- /dev/null
+++ b/share/regions/config_900.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf384" SimName="900" SimLocationX="1004" SimLocationY="1028" Datastore="store_900_x04_y56.yap" SimListenPort="10000" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_901.xml b/share/regions/config_901.xml
new file mode 100644
index 0000000..2c7f4d0
--- /dev/null
+++ b/share/regions/config_901.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf385" SimName="901" SimLocationX="1005" SimLocationY="1028" Datastore="store_901_x05_y56.yap" SimListenPort="10001" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_902.xml b/share/regions/config_902.xml
new file mode 100644
index 0000000..4e353df
--- /dev/null
+++ b/share/regions/config_902.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf386" SimName="902" SimLocationX="1006" SimLocationY="1028" Datastore="store_902_x06_y56.yap" SimListenPort="10002" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_903.xml b/share/regions/config_903.xml
new file mode 100644
index 0000000..1c95582
--- /dev/null
+++ b/share/regions/config_903.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf387" SimName="903" SimLocationX="1007" SimLocationY="1028" Datastore="store_903_x07_y56.yap" SimListenPort="10003" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_904.xml b/share/regions/config_904.xml
new file mode 100644
index 0000000..7e007a7
--- /dev/null
+++ b/share/regions/config_904.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf388" SimName="904" SimLocationX="1008" SimLocationY="1028" Datastore="store_904_x08_y56.yap" SimListenPort="10004" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_905.xml b/share/regions/config_905.xml
new file mode 100644
index 0000000..fe91207
--- /dev/null
+++ b/share/regions/config_905.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf389" SimName="905" SimLocationX="1009" SimLocationY="1028" Datastore="store_905_x09_y56.yap" SimListenPort="10005" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_906.xml b/share/regions/config_906.xml
new file mode 100644
index 0000000..5d69d23
--- /dev/null
+++ b/share/regions/config_906.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf38a" SimName="906" SimLocationX="1010" SimLocationY="1028" Datastore="store_906_x10_y56.yap" SimListenPort="10006" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_907.xml b/share/regions/config_907.xml
new file mode 100644
index 0000000..f8efb84
--- /dev/null
+++ b/share/regions/config_907.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf38b" SimName="907" SimLocationX="1011" SimLocationY="1028" Datastore="store_907_x11_y56.yap" SimListenPort="10007" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_908.xml b/share/regions/config_908.xml
new file mode 100644
index 0000000..f17d7b3
--- /dev/null
+++ b/share/regions/config_908.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf38c" SimName="908" SimLocationX="1012" SimLocationY="1028" Datastore="store_908_x12_y56.yap" SimListenPort="10008" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_909.xml b/share/regions/config_909.xml
new file mode 100644
index 0000000..cfd5fb1
--- /dev/null
+++ b/share/regions/config_909.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf38d" SimName="909" SimLocationX="1013" SimLocationY="1028" Datastore="store_909_x13_y56.yap" SimListenPort="10009" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_91.xml b/share/regions/config_91.xml
new file mode 100644
index 0000000..3d25728
--- /dev/null
+++ b/share/regions/config_91.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf05b" SimName="91" SimLocationX="1027" SimLocationY="1002" Datastore="store_91_x11_y05.yap" SimListenPort="9191" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_910.xml b/share/regions/config_910.xml
new file mode 100644
index 0000000..ddaa044
--- /dev/null
+++ b/share/regions/config_910.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf38e" SimName="910" SimLocationX="1014" SimLocationY="1028" Datastore="store_910_x14_y56.yap" SimListenPort="10010" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_911.xml b/share/regions/config_911.xml
new file mode 100644
index 0000000..405cf70
--- /dev/null
+++ b/share/regions/config_911.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf38f" SimName="911" SimLocationX="1015" SimLocationY="1028" Datastore="store_911_x15_y56.yap" SimListenPort="10011" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-41.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_912.xml b/share/regions/config_912.xml
new file mode 100644
index 0000000..88298bd
--- /dev/null
+++ b/share/regions/config_912.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf390" SimName="912" SimLocationX="1016" SimLocationY="1028" Datastore="store_912_x00_y57.yap" SimListenPort="10012" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_913.xml b/share/regions/config_913.xml
new file mode 100644
index 0000000..ae50f3f
--- /dev/null
+++ b/share/regions/config_913.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf391" SimName="913" SimLocationX="1017" SimLocationY="1028" Datastore="store_913_x01_y57.yap" SimListenPort="10013" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_914.xml b/share/regions/config_914.xml
new file mode 100644
index 0000000..bc51b2d
--- /dev/null
+++ b/share/regions/config_914.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf392" SimName="914" SimLocationX="1018" SimLocationY="1028" Datastore="store_914_x02_y57.yap" SimListenPort="10014" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_915.xml b/share/regions/config_915.xml
new file mode 100644
index 0000000..492a463
--- /dev/null
+++ b/share/regions/config_915.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf393" SimName="915" SimLocationX="1019" SimLocationY="1028" Datastore="store_915_x03_y57.yap" SimListenPort="10015" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_916.xml b/share/regions/config_916.xml
new file mode 100644
index 0000000..2d11875
--- /dev/null
+++ b/share/regions/config_916.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf394" SimName="916" SimLocationX="1020" SimLocationY="1028" Datastore="store_916_x04_y57.yap" SimListenPort="10016" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_917.xml b/share/regions/config_917.xml
new file mode 100644
index 0000000..4ff3d2d
--- /dev/null
+++ b/share/regions/config_917.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf395" SimName="917" SimLocationX="1021" SimLocationY="1028" Datastore="store_917_x05_y57.yap" SimListenPort="10017" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_918.xml b/share/regions/config_918.xml
new file mode 100644
index 0000000..985dd0f
--- /dev/null
+++ b/share/regions/config_918.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf396" SimName="918" SimLocationX="1022" SimLocationY="1028" Datastore="store_918_x06_y57.yap" SimListenPort="10018" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_919.xml b/share/regions/config_919.xml
new file mode 100644
index 0000000..6fdace3
--- /dev/null
+++ b/share/regions/config_919.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf397" SimName="919" SimLocationX="1023" SimLocationY="1028" Datastore="store_919_x07_y57.yap" SimListenPort="10019" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_92.xml b/share/regions/config_92.xml
new file mode 100644
index 0000000..7484e94
--- /dev/null
+++ b/share/regions/config_92.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf05c" SimName="92" SimLocationX="1028" SimLocationY="1002" Datastore="store_92_x12_y05.yap" SimListenPort="9192" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_920.xml b/share/regions/config_920.xml
new file mode 100644
index 0000000..a1ae514
--- /dev/null
+++ b/share/regions/config_920.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf398" SimName="920" SimLocationX="1024" SimLocationY="1028" Datastore="store_920_x08_y57.yap" SimListenPort="10020" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_921.xml b/share/regions/config_921.xml
new file mode 100644
index 0000000..44e612a
--- /dev/null
+++ b/share/regions/config_921.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf399" SimName="921" SimLocationX="1025" SimLocationY="1028" Datastore="store_921_x09_y57.yap" SimListenPort="10021" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_922.xml b/share/regions/config_922.xml
new file mode 100644
index 0000000..3d19b64
--- /dev/null
+++ b/share/regions/config_922.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf39a" SimName="922" SimLocationX="1026" SimLocationY="1028" Datastore="store_922_x10_y57.yap" SimListenPort="10022" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_923.xml b/share/regions/config_923.xml
new file mode 100644
index 0000000..343ac3f
--- /dev/null
+++ b/share/regions/config_923.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf39b" SimName="923" SimLocationX="1027" SimLocationY="1028" Datastore="store_923_x11_y57.yap" SimListenPort="10023" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_924.xml b/share/regions/config_924.xml
new file mode 100644
index 0000000..ddcfa10
--- /dev/null
+++ b/share/regions/config_924.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf39c" SimName="924" SimLocationX="1028" SimLocationY="1028" Datastore="store_924_x12_y57.yap" SimListenPort="10024" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_925.xml b/share/regions/config_925.xml
new file mode 100644
index 0000000..bd8308a
--- /dev/null
+++ b/share/regions/config_925.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf39d" SimName="925" SimLocationX="1029" SimLocationY="1028" Datastore="store_925_x13_y57.yap" SimListenPort="10025" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_926.xml b/share/regions/config_926.xml
new file mode 100644
index 0000000..8771df5
--- /dev/null
+++ b/share/regions/config_926.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf39e" SimName="926" SimLocationX="1030" SimLocationY="1028" Datastore="store_926_x14_y57.yap" SimListenPort="10026" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_927.xml b/share/regions/config_927.xml
new file mode 100644
index 0000000..2275d3a
--- /dev/null
+++ b/share/regions/config_927.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf39f" SimName="927" SimLocationX="1031" SimLocationY="1028" Datastore="store_927_x15_y57.yap" SimListenPort="10027" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-42.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_928.xml b/share/regions/config_928.xml
new file mode 100644
index 0000000..347bf87
--- /dev/null
+++ b/share/regions/config_928.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a0" SimName="928" SimLocationX="1000" SimLocationY="1029" Datastore="store_928_x00_y58.yap" SimListenPort="10028" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_929.xml b/share/regions/config_929.xml
new file mode 100644
index 0000000..a7ed82b
--- /dev/null
+++ b/share/regions/config_929.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a1" SimName="929" SimLocationX="1001" SimLocationY="1029" Datastore="store_929_x01_y58.yap" SimListenPort="10029" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_93.xml b/share/regions/config_93.xml
new file mode 100644
index 0000000..922e9c8
--- /dev/null
+++ b/share/regions/config_93.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf05d" SimName="93" SimLocationX="1029" SimLocationY="1002" Datastore="store_93_x13_y05.yap" SimListenPort="9193" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_930.xml b/share/regions/config_930.xml
new file mode 100644
index 0000000..0aa90f7
--- /dev/null
+++ b/share/regions/config_930.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a2" SimName="930" SimLocationX="1002" SimLocationY="1029" Datastore="store_930_x02_y58.yap" SimListenPort="10030" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_931.xml b/share/regions/config_931.xml
new file mode 100644
index 0000000..b8f520b
--- /dev/null
+++ b/share/regions/config_931.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a3" SimName="931" SimLocationX="1003" SimLocationY="1029" Datastore="store_931_x03_y58.yap" SimListenPort="10031" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_932.xml b/share/regions/config_932.xml
new file mode 100644
index 0000000..2bc2aea
--- /dev/null
+++ b/share/regions/config_932.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a4" SimName="932" SimLocationX="1004" SimLocationY="1029" Datastore="store_932_x04_y58.yap" SimListenPort="10032" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_933.xml b/share/regions/config_933.xml
new file mode 100644
index 0000000..a1cdc75
--- /dev/null
+++ b/share/regions/config_933.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a5" SimName="933" SimLocationX="1005" SimLocationY="1029" Datastore="store_933_x05_y58.yap" SimListenPort="10033" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_934.xml b/share/regions/config_934.xml
new file mode 100644
index 0000000..0a893c1
--- /dev/null
+++ b/share/regions/config_934.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a6" SimName="934" SimLocationX="1006" SimLocationY="1029" Datastore="store_934_x06_y58.yap" SimListenPort="10034" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_935.xml b/share/regions/config_935.xml
new file mode 100644
index 0000000..d4de084
--- /dev/null
+++ b/share/regions/config_935.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a7" SimName="935" SimLocationX="1007" SimLocationY="1029" Datastore="store_935_x07_y58.yap" SimListenPort="10035" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_936.xml b/share/regions/config_936.xml
new file mode 100644
index 0000000..70b40b4
--- /dev/null
+++ b/share/regions/config_936.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a8" SimName="936" SimLocationX="1008" SimLocationY="1029" Datastore="store_936_x08_y58.yap" SimListenPort="10036" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_937.xml b/share/regions/config_937.xml
new file mode 100644
index 0000000..6fd7316
--- /dev/null
+++ b/share/regions/config_937.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3a9" SimName="937" SimLocationX="1009" SimLocationY="1029" Datastore="store_937_x09_y58.yap" SimListenPort="10037" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_938.xml b/share/regions/config_938.xml
new file mode 100644
index 0000000..cf8d865
--- /dev/null
+++ b/share/regions/config_938.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3aa" SimName="938" SimLocationX="1010" SimLocationY="1029" Datastore="store_938_x10_y58.yap" SimListenPort="10038" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_939.xml b/share/regions/config_939.xml
new file mode 100644
index 0000000..18e724e
--- /dev/null
+++ b/share/regions/config_939.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ab" SimName="939" SimLocationX="1011" SimLocationY="1029" Datastore="store_939_x11_y58.yap" SimListenPort="10039" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_94.xml b/share/regions/config_94.xml
new file mode 100644
index 0000000..47e8187
--- /dev/null
+++ b/share/regions/config_94.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf05e" SimName="94" SimLocationX="1030" SimLocationY="1002" Datastore="store_94_x14_y05.yap" SimListenPort="9194" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_940.xml b/share/regions/config_940.xml
new file mode 100644
index 0000000..5803c20
--- /dev/null
+++ b/share/regions/config_940.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ac" SimName="940" SimLocationX="1012" SimLocationY="1029" Datastore="store_940_x12_y58.yap" SimListenPort="10040" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_941.xml b/share/regions/config_941.xml
new file mode 100644
index 0000000..186feff
--- /dev/null
+++ b/share/regions/config_941.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ad" SimName="941" SimLocationX="1013" SimLocationY="1029" Datastore="store_941_x13_y58.yap" SimListenPort="10041" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_942.xml b/share/regions/config_942.xml
new file mode 100644
index 0000000..264557b
--- /dev/null
+++ b/share/regions/config_942.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ae" SimName="942" SimLocationX="1014" SimLocationY="1029" Datastore="store_942_x14_y58.yap" SimListenPort="10042" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_943.xml b/share/regions/config_943.xml
new file mode 100644
index 0000000..3f6a272
--- /dev/null
+++ b/share/regions/config_943.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3af" SimName="943" SimLocationX="1015" SimLocationY="1029" Datastore="store_943_x15_y58.yap" SimListenPort="10043" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-43.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_944.xml b/share/regions/config_944.xml
new file mode 100644
index 0000000..f244937
--- /dev/null
+++ b/share/regions/config_944.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b0" SimName="944" SimLocationX="1016" SimLocationY="1029" Datastore="store_944_x00_y59.yap" SimListenPort="10044" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_945.xml b/share/regions/config_945.xml
new file mode 100644
index 0000000..0a0e9e6
--- /dev/null
+++ b/share/regions/config_945.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b1" SimName="945" SimLocationX="1017" SimLocationY="1029" Datastore="store_945_x01_y59.yap" SimListenPort="10045" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_946.xml b/share/regions/config_946.xml
new file mode 100644
index 0000000..dbca9e1
--- /dev/null
+++ b/share/regions/config_946.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b2" SimName="946" SimLocationX="1018" SimLocationY="1029" Datastore="store_946_x02_y59.yap" SimListenPort="10046" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_947.xml b/share/regions/config_947.xml
new file mode 100644
index 0000000..e0d2ef5
--- /dev/null
+++ b/share/regions/config_947.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b3" SimName="947" SimLocationX="1019" SimLocationY="1029" Datastore="store_947_x03_y59.yap" SimListenPort="10047" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_948.xml b/share/regions/config_948.xml
new file mode 100644
index 0000000..92476ef
--- /dev/null
+++ b/share/regions/config_948.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b4" SimName="948" SimLocationX="1020" SimLocationY="1029" Datastore="store_948_x04_y59.yap" SimListenPort="10048" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_949.xml b/share/regions/config_949.xml
new file mode 100644
index 0000000..41a97e7
--- /dev/null
+++ b/share/regions/config_949.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b5" SimName="949" SimLocationX="1021" SimLocationY="1029" Datastore="store_949_x05_y59.yap" SimListenPort="10049" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_95.xml b/share/regions/config_95.xml
new file mode 100644
index 0000000..930a609
--- /dev/null
+++ b/share/regions/config_95.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf05f" SimName="95" SimLocationX="1031" SimLocationY="1002" Datastore="store_95_x15_y05.yap" SimListenPort="9195" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y10.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_950.xml b/share/regions/config_950.xml
new file mode 100644
index 0000000..e772291
--- /dev/null
+++ b/share/regions/config_950.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b6" SimName="950" SimLocationX="1022" SimLocationY="1029" Datastore="store_950_x06_y59.yap" SimListenPort="10050" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_951.xml b/share/regions/config_951.xml
new file mode 100644
index 0000000..50a0631
--- /dev/null
+++ b/share/regions/config_951.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b7" SimName="951" SimLocationX="1023" SimLocationY="1029" Datastore="store_951_x07_y59.yap" SimListenPort="10051" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_952.xml b/share/regions/config_952.xml
new file mode 100644
index 0000000..9c2bc5e
--- /dev/null
+++ b/share/regions/config_952.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b8" SimName="952" SimLocationX="1024" SimLocationY="1029" Datastore="store_952_x08_y59.yap" SimListenPort="10052" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_953.xml b/share/regions/config_953.xml
new file mode 100644
index 0000000..d8342fc
--- /dev/null
+++ b/share/regions/config_953.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3b9" SimName="953" SimLocationX="1025" SimLocationY="1029" Datastore="store_953_x09_y59.yap" SimListenPort="10053" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_954.xml b/share/regions/config_954.xml
new file mode 100644
index 0000000..685d074
--- /dev/null
+++ b/share/regions/config_954.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ba" SimName="954" SimLocationX="1026" SimLocationY="1029" Datastore="store_954_x10_y59.yap" SimListenPort="10054" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_955.xml b/share/regions/config_955.xml
new file mode 100644
index 0000000..52dfa18
--- /dev/null
+++ b/share/regions/config_955.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3bb" SimName="955" SimLocationX="1027" SimLocationY="1029" Datastore="store_955_x11_y59.yap" SimListenPort="10055" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_956.xml b/share/regions/config_956.xml
new file mode 100644
index 0000000..8ed9e2b
--- /dev/null
+++ b/share/regions/config_956.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3bc" SimName="956" SimLocationX="1028" SimLocationY="1029" Datastore="store_956_x12_y59.yap" SimListenPort="10056" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_957.xml b/share/regions/config_957.xml
new file mode 100644
index 0000000..3e9fe73
--- /dev/null
+++ b/share/regions/config_957.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3bd" SimName="957" SimLocationX="1029" SimLocationY="1029" Datastore="store_957_x13_y59.yap" SimListenPort="10057" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_958.xml b/share/regions/config_958.xml
new file mode 100644
index 0000000..3636698
--- /dev/null
+++ b/share/regions/config_958.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3be" SimName="958" SimLocationX="1030" SimLocationY="1029" Datastore="store_958_x14_y59.yap" SimListenPort="10058" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_959.xml b/share/regions/config_959.xml
new file mode 100644
index 0000000..3202187
--- /dev/null
+++ b/share/regions/config_959.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3bf" SimName="959" SimLocationX="1031" SimLocationY="1029" Datastore="store_959_x15_y59.yap" SimListenPort="10059" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-44.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_96.xml b/share/regions/config_96.xml
new file mode 100644
index 0000000..9227a91
--- /dev/null
+++ b/share/regions/config_96.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf060" SimName="96" SimLocationX="1000" SimLocationY="1003" Datastore="store_96_x00_y06.yap" SimListenPort="9196" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_960.xml b/share/regions/config_960.xml
new file mode 100644
index 0000000..8bf372c
--- /dev/null
+++ b/share/regions/config_960.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c0" SimName="960" SimLocationX="1000" SimLocationY="1030" Datastore="store_960_x00_y60.yap" SimListenPort="10060" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_961.xml b/share/regions/config_961.xml
new file mode 100644
index 0000000..2bc4c13
--- /dev/null
+++ b/share/regions/config_961.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c1" SimName="961" SimLocationX="1001" SimLocationY="1030" Datastore="store_961_x01_y60.yap" SimListenPort="10061" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_962.xml b/share/regions/config_962.xml
new file mode 100644
index 0000000..80a3554
--- /dev/null
+++ b/share/regions/config_962.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c2" SimName="962" SimLocationX="1002" SimLocationY="1030" Datastore="store_962_x02_y60.yap" SimListenPort="10062" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_963.xml b/share/regions/config_963.xml
new file mode 100644
index 0000000..17b9f93
--- /dev/null
+++ b/share/regions/config_963.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c3" SimName="963" SimLocationX="1003" SimLocationY="1030" Datastore="store_963_x03_y60.yap" SimListenPort="10063" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_964.xml b/share/regions/config_964.xml
new file mode 100644
index 0000000..823730e
--- /dev/null
+++ b/share/regions/config_964.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c4" SimName="964" SimLocationX="1004" SimLocationY="1030" Datastore="store_964_x04_y60.yap" SimListenPort="10064" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_965.xml b/share/regions/config_965.xml
new file mode 100644
index 0000000..8260f46
--- /dev/null
+++ b/share/regions/config_965.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c5" SimName="965" SimLocationX="1005" SimLocationY="1030" Datastore="store_965_x05_y60.yap" SimListenPort="10065" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_966.xml b/share/regions/config_966.xml
new file mode 100644
index 0000000..16afa28
--- /dev/null
+++ b/share/regions/config_966.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c6" SimName="966" SimLocationX="1006" SimLocationY="1030" Datastore="store_966_x06_y60.yap" SimListenPort="10066" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_967.xml b/share/regions/config_967.xml
new file mode 100644
index 0000000..dd7876a
--- /dev/null
+++ b/share/regions/config_967.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c7" SimName="967" SimLocationX="1007" SimLocationY="1030" Datastore="store_967_x07_y60.yap" SimListenPort="10067" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_968.xml b/share/regions/config_968.xml
new file mode 100644
index 0000000..0e62f7b
--- /dev/null
+++ b/share/regions/config_968.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c8" SimName="968" SimLocationX="1008" SimLocationY="1030" Datastore="store_968_x08_y60.yap" SimListenPort="10068" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_969.xml b/share/regions/config_969.xml
new file mode 100644
index 0000000..69c6091
--- /dev/null
+++ b/share/regions/config_969.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3c9" SimName="969" SimLocationX="1009" SimLocationY="1030" Datastore="store_969_x09_y60.yap" SimListenPort="10069" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_97.xml b/share/regions/config_97.xml
new file mode 100644
index 0000000..533c926
--- /dev/null
+++ b/share/regions/config_97.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf061" SimName="97" SimLocationX="1001" SimLocationY="1003" Datastore="store_97_x01_y06.yap" SimListenPort="9197" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_970.xml b/share/regions/config_970.xml
new file mode 100644
index 0000000..738b338
--- /dev/null
+++ b/share/regions/config_970.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ca" SimName="970" SimLocationX="1010" SimLocationY="1030" Datastore="store_970_x10_y60.yap" SimListenPort="10070" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_971.xml b/share/regions/config_971.xml
new file mode 100644
index 0000000..814ec0b
--- /dev/null
+++ b/share/regions/config_971.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3cb" SimName="971" SimLocationX="1011" SimLocationY="1030" Datastore="store_971_x11_y60.yap" SimListenPort="10071" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_972.xml b/share/regions/config_972.xml
new file mode 100644
index 0000000..5c6c9f2
--- /dev/null
+++ b/share/regions/config_972.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3cc" SimName="972" SimLocationX="1012" SimLocationY="1030" Datastore="store_972_x12_y60.yap" SimListenPort="10072" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_973.xml b/share/regions/config_973.xml
new file mode 100644
index 0000000..c21e807
--- /dev/null
+++ b/share/regions/config_973.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3cd" SimName="973" SimLocationX="1013" SimLocationY="1030" Datastore="store_973_x13_y60.yap" SimListenPort="10073" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_974.xml b/share/regions/config_974.xml
new file mode 100644
index 0000000..159cfc7
--- /dev/null
+++ b/share/regions/config_974.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3ce" SimName="974" SimLocationX="1014" SimLocationY="1030" Datastore="store_974_x14_y60.yap" SimListenPort="10074" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_975.xml b/share/regions/config_975.xml
new file mode 100644
index 0000000..117a250
--- /dev/null
+++ b/share/regions/config_975.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3cf" SimName="975" SimLocationX="1015" SimLocationY="1030" Datastore="store_975_x15_y60.yap" SimListenPort="10075" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-45.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_976.xml b/share/regions/config_976.xml
new file mode 100644
index 0000000..a910b53
--- /dev/null
+++ b/share/regions/config_976.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d0" SimName="976" SimLocationX="1016" SimLocationY="1030" Datastore="store_976_x00_y61.yap" SimListenPort="10076" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_977.xml b/share/regions/config_977.xml
new file mode 100644
index 0000000..67e5c69
--- /dev/null
+++ b/share/regions/config_977.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d1" SimName="977" SimLocationX="1017" SimLocationY="1030" Datastore="store_977_x01_y61.yap" SimListenPort="10077" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_978.xml b/share/regions/config_978.xml
new file mode 100644
index 0000000..5dc48dd
--- /dev/null
+++ b/share/regions/config_978.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d2" SimName="978" SimLocationX="1018" SimLocationY="1030" Datastore="store_978_x02_y61.yap" SimListenPort="10078" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_979.xml b/share/regions/config_979.xml
new file mode 100644
index 0000000..4054954
--- /dev/null
+++ b/share/regions/config_979.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d3" SimName="979" SimLocationX="1019" SimLocationY="1030" Datastore="store_979_x03_y61.yap" SimListenPort="10079" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_98.xml b/share/regions/config_98.xml
new file mode 100644
index 0000000..111c4a9
--- /dev/null
+++ b/share/regions/config_98.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf062" SimName="98" SimLocationX="1002" SimLocationY="1003" Datastore="store_98_x02_y06.yap" SimListenPort="9198" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_980.xml b/share/regions/config_980.xml
new file mode 100644
index 0000000..75b036f
--- /dev/null
+++ b/share/regions/config_980.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d4" SimName="980" SimLocationX="1020" SimLocationY="1030" Datastore="store_980_x04_y61.yap" SimListenPort="10080" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_981.xml b/share/regions/config_981.xml
new file mode 100644
index 0000000..fd71c85
--- /dev/null
+++ b/share/regions/config_981.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d5" SimName="981" SimLocationX="1021" SimLocationY="1030" Datastore="store_981_x05_y61.yap" SimListenPort="10081" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_982.xml b/share/regions/config_982.xml
new file mode 100644
index 0000000..c33fcec
--- /dev/null
+++ b/share/regions/config_982.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d6" SimName="982" SimLocationX="1022" SimLocationY="1030" Datastore="store_982_x06_y61.yap" SimListenPort="10082" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_983.xml b/share/regions/config_983.xml
new file mode 100644
index 0000000..a989801
--- /dev/null
+++ b/share/regions/config_983.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d7" SimName="983" SimLocationX="1023" SimLocationY="1030" Datastore="store_983_x07_y61.yap" SimListenPort="10083" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_984.xml b/share/regions/config_984.xml
new file mode 100644
index 0000000..d494071
--- /dev/null
+++ b/share/regions/config_984.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d8" SimName="984" SimLocationX="1024" SimLocationY="1030" Datastore="store_984_x08_y61.yap" SimListenPort="10084" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x08_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_985.xml b/share/regions/config_985.xml
new file mode 100644
index 0000000..2239f97
--- /dev/null
+++ b/share/regions/config_985.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3d9" SimName="985" SimLocationX="1025" SimLocationY="1030" Datastore="store_985_x09_y61.yap" SimListenPort="10085" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x09_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_986.xml b/share/regions/config_986.xml
new file mode 100644
index 0000000..67bc5b5
--- /dev/null
+++ b/share/regions/config_986.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3da" SimName="986" SimLocationX="1026" SimLocationY="1030" Datastore="store_986_x10_y61.yap" SimListenPort="10086" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x10_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_987.xml b/share/regions/config_987.xml
new file mode 100644
index 0000000..f4d52bb
--- /dev/null
+++ b/share/regions/config_987.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3db" SimName="987" SimLocationX="1027" SimLocationY="1030" Datastore="store_987_x11_y61.yap" SimListenPort="10087" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x11_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_988.xml b/share/regions/config_988.xml
new file mode 100644
index 0000000..ce12b39
--- /dev/null
+++ b/share/regions/config_988.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3dc" SimName="988" SimLocationX="1028" SimLocationY="1030" Datastore="store_988_x12_y61.yap" SimListenPort="10088" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x12_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_989.xml b/share/regions/config_989.xml
new file mode 100644
index 0000000..dc2c44a
--- /dev/null
+++ b/share/regions/config_989.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3dd" SimName="989" SimLocationX="1029" SimLocationY="1030" Datastore="store_989_x13_y61.yap" SimListenPort="10089" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x13_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_99.xml b/share/regions/config_99.xml
new file mode 100644
index 0000000..4be94a1
--- /dev/null
+++ b/share/regions/config_99.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf063" SimName="99" SimLocationX="1003" SimLocationY="1003" Datastore="store_99_x03_y06.yap" SimListenPort="9199" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y09.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_990.xml b/share/regions/config_990.xml
new file mode 100644
index 0000000..79c26ac
--- /dev/null
+++ b/share/regions/config_990.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3de" SimName="990" SimLocationX="1030" SimLocationY="1030" Datastore="store_990_x14_y61.yap" SimListenPort="10090" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x14_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_991.xml b/share/regions/config_991.xml
new file mode 100644
index 0000000..aefaa04
--- /dev/null
+++ b/share/regions/config_991.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3df" SimName="991" SimLocationX="1031" SimLocationY="1030" Datastore="store_991_x15_y61.yap" SimListenPort="10091" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x15_y-46.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_992.xml b/share/regions/config_992.xml
new file mode 100644
index 0000000..5b777ac
--- /dev/null
+++ b/share/regions/config_992.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e0" SimName="992" SimLocationX="1000" SimLocationY="1031" Datastore="store_992_x00_y62.yap" SimListenPort="10092" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x00_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_993.xml b/share/regions/config_993.xml
new file mode 100644
index 0000000..193dc0f
--- /dev/null
+++ b/share/regions/config_993.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e1" SimName="993" SimLocationX="1001" SimLocationY="1031" Datastore="store_993_x01_y62.yap" SimListenPort="10093" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x01_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_994.xml b/share/regions/config_994.xml
new file mode 100644
index 0000000..2481ec9
--- /dev/null
+++ b/share/regions/config_994.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e2" SimName="994" SimLocationX="1002" SimLocationY="1031" Datastore="store_994_x02_y62.yap" SimListenPort="10094" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x02_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_995.xml b/share/regions/config_995.xml
new file mode 100644
index 0000000..0947860
--- /dev/null
+++ b/share/regions/config_995.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e3" SimName="995" SimLocationX="1003" SimLocationY="1031" Datastore="store_995_x03_y62.yap" SimListenPort="10095" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x03_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_996.xml b/share/regions/config_996.xml
new file mode 100644
index 0000000..94e92ab
--- /dev/null
+++ b/share/regions/config_996.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e4" SimName="996" SimLocationX="1004" SimLocationY="1031" Datastore="store_996_x04_y62.yap" SimListenPort="10096" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x04_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_997.xml b/share/regions/config_997.xml
new file mode 100644
index 0000000..59f280a
--- /dev/null
+++ b/share/regions/config_997.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e5" SimName="997" SimLocationX="1005" SimLocationY="1031" Datastore="store_997_x05_y62.yap" SimListenPort="10097" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x05_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_998.xml b/share/regions/config_998.xml
new file mode 100644
index 0000000..ec78c85
--- /dev/null
+++ b/share/regions/config_998.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e6" SimName="998" SimLocationX="1006" SimLocationY="1031" Datastore="store_998_x06_y62.yap" SimListenPort="10098" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x06_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/regions/config_999.xml b/share/regions/config_999.xml
new file mode 100644
index 0000000..4ec70e4
--- /dev/null
+++ b/share/regions/config_999.xml
@@ -0,0 +1,3 @@
1<Root>
2 <Config SimUUID="e24110fd35684a8ba79651a8c81bf3e7" SimName="999" SimLocationX="1007" SimLocationY="1031" Datastore="store_999_x07_y62.yap" SimListenPort="10099" SimListenAddress="SYSTEMIP" TerrainFile="terrain_x07_y-47.r32" TerrainMultiplier="177.8" MasterAvatarFirstName="Adam" MasterAvatarLastName="Omega" MasterAvatarSandboxPassword="bork" />
3</Root>
diff --git a/share/sql/mysql-agents.sql b/share/sql/mysql-agents.sql
new file mode 100644
index 0000000..8194ca9
--- /dev/null
+++ b/share/sql/mysql-agents.sql
@@ -0,0 +1,24 @@
1SET FOREIGN_KEY_CHECKS=0;
2-- ----------------------------
3-- Table structure for agents
4-- ----------------------------
5CREATE TABLE `agents` (
6 `UUID` varchar(36) NOT NULL,
7 `sessionID` varchar(36) NOT NULL,
8 `secureSessionID` varchar(36) NOT NULL,
9 `agentIP` varchar(16) NOT NULL,
10 `agentPort` int(11) NOT NULL,
11 `agentOnline` tinyint(4) NOT NULL,
12 `loginTime` int(11) NOT NULL,
13 `logoutTime` int(11) NOT NULL,
14 `currentRegion` varchar(36) NOT NULL,
15 `currentHandle` bigint(20) unsigned NOT NULL,
16 `currentPos` varchar(64) NOT NULL,
17 PRIMARY KEY (`UUID`),
18 UNIQUE KEY `session` (`sessionID`),
19 UNIQUE KEY `ssession` (`secureSessionID`)
20) ENGINE=MyISAM DEFAULT CHARSET=utf8;
21
22-- ----------------------------
23-- Records
24-- ----------------------------
diff --git a/share/sql/mysql-inventoryfolders.sql b/share/sql/mysql-inventoryfolders.sql
new file mode 100644
index 0000000..c30239e
--- /dev/null
+++ b/share/sql/mysql-inventoryfolders.sql
@@ -0,0 +1,9 @@
1CREATE TABLE `inventoryfolders` (
2 `folderID` varchar(36) NOT NULL default '',
3 `agentID` varchar(36) default NULL,
4 `parentFolderID` varchar(36) default NULL,
5 `folderName` varchar(64) default NULL,
6 PRIMARY KEY (`folderID`),
7 KEY `owner` (`agentID`),
8 KEY `parent` (`parentFolderID`)
9) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/share/sql/mysql-inventoryitems.sql b/share/sql/mysql-inventoryitems.sql
new file mode 100644
index 0000000..6e90005
--- /dev/null
+++ b/share/sql/mysql-inventoryitems.sql
@@ -0,0 +1,14 @@
1CREATE TABLE `inventoryitems` (
2 `inventoryID` varchar(36) NOT NULL default '',
3 `assetID` varchar(36) default NULL,
4 `type` int(11) default NULL,
5 `parentFolderID` varchar(36) default NULL,
6 `avatarID` varchar(36) default NULL,
7 `inventoryName` varchar(64) default NULL,
8 `inventoryDescription` varchar(64) default NULL,
9 `inventoryNextPermissions` int(10) unsigned default NULL,
10 `inventoryCurrentPermissions` int(10) unsigned default NULL,
11 PRIMARY KEY (`inventoryID`),
12 KEY `owner` (`avatarID`),
13 KEY `folder` (`parentFolderID`)
14) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/share/sql/mysql-logs.sql b/share/sql/mysql-logs.sql
new file mode 100644
index 0000000..05c19e8
--- /dev/null
+++ b/share/sql/mysql-logs.sql
@@ -0,0 +1,10 @@
1CREATE TABLE `logs` (
2 `logID` int(10) unsigned NOT NULL auto_increment,
3 `target` varchar(36) default NULL,
4 `server` varchar(64) default NULL,
5 `method` varchar(64) default NULL,
6 `arguments` varchar(255) default NULL,
7 `priority` int(11) default NULL,
8 `message` text,
9 PRIMARY KEY (`logID`)
10) ENGINE=InnoDB DEFAULT CHARSET=utf8 \ No newline at end of file
diff --git a/share/sql/mysql-regions.sql b/share/sql/mysql-regions.sql
new file mode 100644
index 0000000..4f98826
--- /dev/null
+++ b/share/sql/mysql-regions.sql
@@ -0,0 +1,29 @@
1CREATE TABLE `regions` (
2 `uuid` varchar(36) NOT NULL,
3 `regionHandle` bigint(20) unsigned NOT NULL,
4 `regionName` varchar(32) default NULL,
5 `regionRecvKey` varchar(128) default NULL,
6 `regionSendKey` varchar(128) default NULL,
7 `regionSecret` varchar(128) default NULL,
8 `regionDataURI` varchar(255) default NULL,
9 `serverIP` varchar(16) default NULL,
10 `serverPort` int(10) unsigned default NULL,
11 `serverURI` varchar(255) default NULL,
12 `locX` int(10) unsigned default NULL,
13 `locY` int(10) unsigned default NULL,
14 `locZ` int(10) unsigned default NULL,
15 `eastOverrideHandle` bigint(20) unsigned default NULL,
16 `westOverrideHandle` bigint(20) unsigned default NULL,
17 `southOverrideHandle` bigint(20) unsigned default NULL,
18 `northOverrideHandle` bigint(20) unsigned default NULL,
19 `regionAssetURI` varchar(255) default NULL,
20 `regionAssetRecvKey` varchar(128) default NULL,
21 `regionAssetSendKey` varchar(128) default NULL,
22 `regionUserURI` varchar(255) default NULL,
23 `regionUserRecvKey` varchar(128) default NULL,
24 `regionUserSendKey` varchar(128) default NULL, `regionMapTexture` varchar(36) default NULL,
25 PRIMARY KEY (`uuid`),
26 KEY `regionName` (`regionName`),
27 KEY `regionHandle` (`regionHandle`),
28 KEY `overrideHandles` (`eastOverrideHandle`,`westOverrideHandle`,`southOverrideHandle`,`northOverrideHandle`)
29) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED \ No newline at end of file
diff --git a/share/sql/mysql-reservations.txt b/share/sql/mysql-reservations.txt
new file mode 100644
index 0000000..d6d84b9
--- /dev/null
+++ b/share/sql/mysql-reservations.txt
@@ -0,0 +1,16 @@
1CREATE TABLE `reservations` (
2 `resID` int(10) unsigned NOT NULL auto_increment,
3 `userUUID` varchar(36) default NULL,
4 `gridSendKey` varchar(64) default NULL,
5 `gridRecvKey` varchar(64) default NULL,
6 `resName` varchar(255) default NULL,
7 `resCompany` varchar(128) default NULL,
8 `resXMin` int(10) unsigned default NULL,
9 `resXMax` int(10) unsigned default NULL,
10 `resYMin` int(10) unsigned default NULL,
11 `resYMax` int(10) unsigned default NULL,
12 `status` int(10) unsigned default NULL,
13 PRIMARY KEY (`resID`),
14 KEY `resident` (`userUUID`),
15 KEY `coords` (`resXMin`,`resXMax`,`resYMin`,`resYMax`)
16) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ;
diff --git a/share/sql/mysql-users.sql b/share/sql/mysql-users.sql
new file mode 100644
index 0000000..5ce4d1c
--- /dev/null
+++ b/share/sql/mysql-users.sql
@@ -0,0 +1,34 @@
1SET FOREIGN_KEY_CHECKS=0;
2-- ----------------------------
3-- Table structure for users
4-- ----------------------------
5CREATE TABLE `users` (
6 `UUID` varchar(36) NOT NULL default '',
7 `username` varchar(32) NOT NULL,
8 `lastname` varchar(32) NOT NULL,
9 `passwordHash` varchar(32) NOT NULL,
10 `passwordSalt` varchar(32) NOT NULL,
11 `homeRegion` bigint(20) unsigned default NULL,
12 `homeLocationX` float default NULL,
13 `homeLocationY` float default NULL,
14 `homeLocationZ` float default NULL,
15 `homeLookAtX` float default NULL,
16 `homeLookAtY` float default NULL,
17 `homeLookAtZ` float default NULL,
18 `created` int(11) NOT NULL,
19 `lastLogin` int(11) NOT NULL,
20 `userInventoryURI` varchar(255) default NULL,
21 `userAssetURI` varchar(255) default NULL,
22 `profileCanDoMask` int(10) unsigned default NULL,
23 `profileWantDoMask` int(10) unsigned default NULL,
24 `profileAboutText` text,
25 `profileFirstText` text,
26 `profileImage` varchar(36) default NULL,
27 `profileFirstImage` varchar(36) default NULL,
28 PRIMARY KEY (`UUID`),
29 UNIQUE KEY `usernames` (`username`,`lastname`)
30) ENGINE=MyISAM DEFAULT CHARSET=utf8;
31
32-- ----------------------------
33-- Records
34-- ----------------------------