mirror of
https://github.com/ManfredAabye/opensim-tsassets.git
synced 2026-07-27 22:25:23 +00:00
Delete opensim directory
This commit is contained in:
@@ -1,62 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace OpenSim.Data
|
||||
{
|
||||
public struct TSAssetMoveReport
|
||||
{
|
||||
public string Source;
|
||||
public string Destination;
|
||||
public int CandidateCount;
|
||||
public int AlreadyInTargetCount;
|
||||
public int InsertedCount;
|
||||
public int DeletedFromSourceCount;
|
||||
public int IndexAffectedCount;
|
||||
}
|
||||
|
||||
public struct TSAssetMoveOptions
|
||||
{
|
||||
public bool ResetCheckpoint;
|
||||
public int BatchSize;
|
||||
public int CommandTimeoutSeconds;
|
||||
}
|
||||
|
||||
public struct TSAssetFindReport
|
||||
{
|
||||
public string AssetId;
|
||||
public bool Found;
|
||||
public string TableName;
|
||||
public bool HasIndexEntry;
|
||||
public int IndexAssetType;
|
||||
}
|
||||
|
||||
public struct TSAssetVerifyReport
|
||||
{
|
||||
public string Scope;
|
||||
public int TablesChecked;
|
||||
public int TotalRows;
|
||||
public int MissingIndexRows;
|
||||
public int WrongIndexTypeRows;
|
||||
public int OrphanIndexRows;
|
||||
public int LegacyRowsWithIndex;
|
||||
}
|
||||
|
||||
public struct TSAssetReindexReport
|
||||
{
|
||||
public string Scope;
|
||||
public int TablesProcessed;
|
||||
public int RowsScanned;
|
||||
public int IndexRowsUpserted;
|
||||
public int IndexRowsDeleted;
|
||||
}
|
||||
|
||||
public interface ITSAssetAdminData
|
||||
{
|
||||
bool TryMoveAssets(string from, string to, out TSAssetMoveReport report, out string errorMessage);
|
||||
bool TryMoveAssets(string from, string to, TSAssetMoveOptions options, out TSAssetMoveReport report, out string errorMessage);
|
||||
bool TryPreviewMoveAssets(string from, string to, out TSAssetMoveReport report, out string errorMessage);
|
||||
bool TryFindAssetLocation(string assetId, out TSAssetFindReport report, out string errorMessage);
|
||||
bool TryVerifyAssets(string scope, out TSAssetVerifyReport report, out string errorMessage);
|
||||
bool TryReindexAssets(string scope, TSAssetMoveOptions options, out TSAssetReindexReport report, out string errorMessage);
|
||||
bool TryCleanLegacyIndex(TSAssetMoveOptions options, out TSAssetReindexReport report, out string errorMessage);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,18 +0,0 @@
|
||||
# -----------------
|
||||
:VERSION 1
|
||||
|
||||
BEGIN;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tsassets_index` (
|
||||
`id` char(36) NOT NULL,
|
||||
`assetType` tinyint(4) NOT NULL,
|
||||
`updated_at` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_tsassets_index_assetType` (`assetType`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- Type tables are created dynamically at runtime
|
||||
-- using the same schema and name pattern: assets_<assetType>
|
||||
-- e.g. assets_1, assets_22, assets_-1, assets_-2.
|
||||
|
||||
COMMIT;
|
||||
@@ -1,323 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions 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.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 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.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using log4net.Config;
|
||||
using NUnit.Framework;
|
||||
using NUnit.Framework.Constraints;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Tests.Common;
|
||||
using System.Data.Common;
|
||||
using log4net;
|
||||
|
||||
// DBMS-specific:
|
||||
using MySql.Data.MySqlClient;
|
||||
using OpenSim.Data.MySQL;
|
||||
|
||||
using Mono.Data.Sqlite;
|
||||
using OpenSim.Data.SQLite;
|
||||
|
||||
namespace OpenSim.Data.Tests
|
||||
{
|
||||
[TestFixture(Description = "Asset store tests (SQLite)")]
|
||||
public class SQLiteAssetTests : AssetTests<SqliteConnection, SQLiteAssetData>
|
||||
{
|
||||
}
|
||||
|
||||
[TestFixture(Description = "Asset store tests (MySQL)")]
|
||||
public class MySqlAssetTests : AssetTests<MySqlConnection, MySQLAssetData>
|
||||
{
|
||||
}
|
||||
|
||||
[TestFixture(Description = "Asset store tests (MySQL TSAsset)")]
|
||||
public class MySqlTsAssetTests : AssetTests<MySqlConnection, MySQLtsAssetData>
|
||||
{
|
||||
protected override void ClearDB()
|
||||
{
|
||||
DropTables(
|
||||
"`tsassets_index`",
|
||||
"`assets_0`",
|
||||
"`assets_-2`",
|
||||
"`assets_49`");
|
||||
|
||||
ResetMigrations("TSAssetStore");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T030_StoreReadKnownNegativeAndMeshTypes()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
UUID legacyId = UUID.Random();
|
||||
UUID meshId = UUID.Random();
|
||||
|
||||
AssetBase legacyMaterial = new AssetBase(legacyId, "legacy material", -2, UUID.Random().ToString());
|
||||
legacyMaterial.Data = new byte[] { 1, 2, 3 };
|
||||
|
||||
AssetBase mesh = new AssetBase(meshId, "mesh asset", 49, UUID.Random().ToString());
|
||||
mesh.Data = new byte[] { 4, 5, 6 };
|
||||
|
||||
Assert.IsTrue(m_db.StoreAsset(legacyMaterial), "StoreAsset should succeed for type -2");
|
||||
Assert.IsTrue(m_db.StoreAsset(mesh), "StoreAsset should succeed for type 49");
|
||||
|
||||
AssetBase legacyMaterialRead = m_db.GetAsset(legacyId);
|
||||
AssetBase meshRead = m_db.GetAsset(meshId);
|
||||
|
||||
Assert.That(legacyMaterialRead, Is.Not.Null);
|
||||
Assert.That(meshRead, Is.Not.Null);
|
||||
Assert.That(legacyMaterialRead.Type, Is.EqualTo((sbyte)-2));
|
||||
Assert.That(meshRead.Type, Is.EqualTo((sbyte)49));
|
||||
|
||||
bool[] exists = m_db.AssetsExist(new[] { legacyId, meshId });
|
||||
Assert.That(exists[0], Is.True);
|
||||
Assert.That(exists[1], Is.True);
|
||||
|
||||
int tableCount = 0;
|
||||
ExecQuery(
|
||||
"SELECT COUNT(*) AS cnt FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name IN ('assets_-2','assets_49')",
|
||||
true,
|
||||
reader =>
|
||||
{
|
||||
tableCount = Convert.ToInt32(reader["cnt"]);
|
||||
return false;
|
||||
});
|
||||
|
||||
Assert.That(tableCount, Is.EqualTo(2), "Expected dynamic type tables assets_-2 and assets_49 to exist");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T031_StoreReadBoundarySignedTinyIntAssetTypes()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
UUID minId = UUID.Random();
|
||||
UUID maxId = UUID.Random();
|
||||
|
||||
AssetBase minTypeAsset = new AssetBase(minId, "min type asset", -128, UUID.Random().ToString());
|
||||
minTypeAsset.Data = new byte[] { 10, 20, 30 };
|
||||
|
||||
AssetBase maxTypeAsset = new AssetBase(maxId, "max type asset", 127, UUID.Random().ToString());
|
||||
maxTypeAsset.Data = new byte[] { 40, 50, 60 };
|
||||
|
||||
Assert.IsTrue(m_db.StoreAsset(minTypeAsset), "StoreAsset should succeed for type -128");
|
||||
Assert.IsTrue(m_db.StoreAsset(maxTypeAsset), "StoreAsset should succeed for type 127");
|
||||
|
||||
AssetBase minTypeRead = m_db.GetAsset(minId);
|
||||
AssetBase maxTypeRead = m_db.GetAsset(maxId);
|
||||
|
||||
Assert.That(minTypeRead, Is.Not.Null);
|
||||
Assert.That(maxTypeRead, Is.Not.Null);
|
||||
Assert.That(minTypeRead.Type, Is.EqualTo((sbyte)-128));
|
||||
Assert.That(maxTypeRead.Type, Is.EqualTo((sbyte)127));
|
||||
|
||||
bool[] exists = m_db.AssetsExist(new[] { minId, maxId });
|
||||
Assert.That(exists[0], Is.True);
|
||||
Assert.That(exists[1], Is.True);
|
||||
|
||||
int tableCount = 0;
|
||||
ExecQuery(
|
||||
"SELECT COUNT(*) AS cnt FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name IN ('assets_-128','assets_127')",
|
||||
true,
|
||||
reader =>
|
||||
{
|
||||
tableCount = Convert.ToInt32(reader["cnt"]);
|
||||
return false;
|
||||
});
|
||||
|
||||
Assert.That(tableCount, Is.EqualTo(2), "Expected dynamic type tables assets_-128 and assets_127 to exist");
|
||||
}
|
||||
}
|
||||
|
||||
public class AssetTests<TConn, TAssetData> : BasicDataServiceTest<TConn, TAssetData>
|
||||
where TConn : DbConnection, new()
|
||||
where TAssetData : AssetDataBase, new()
|
||||
{
|
||||
protected TAssetData m_db;
|
||||
|
||||
public UUID uuid1 = UUID.Random();
|
||||
public UUID uuid2 = UUID.Random();
|
||||
public UUID uuid3 = UUID.Random();
|
||||
|
||||
public string critter1 = UUID.Random().ToString();
|
||||
public string critter2 = UUID.Random().ToString();
|
||||
public string critter3 = UUID.Random().ToString();
|
||||
|
||||
public byte[] data1 = new byte[100];
|
||||
|
||||
PropertyScrambler<AssetBase> scrambler = new PropertyScrambler<AssetBase>()
|
||||
.DontScramble(x => x.ID)
|
||||
.DontScramble(x => x.Type)
|
||||
.DontScramble(x => x.FullID)
|
||||
.DontScramble(x => x.Metadata.ID)
|
||||
.DontScramble(x => x.Metadata.CreatorID)
|
||||
.DontScramble(x => x.Metadata.ContentType)
|
||||
.DontScramble(x => x.Metadata.FullID)
|
||||
.DontScramble(x => x.Data);
|
||||
|
||||
protected override void InitService(object service)
|
||||
{
|
||||
ClearDB();
|
||||
m_db = (TAssetData)service;
|
||||
m_db.Initialise(m_connStr);
|
||||
}
|
||||
|
||||
protected virtual void ClearDB()
|
||||
{
|
||||
DropTables("assets");
|
||||
ResetMigrations("AssetStore");
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void T001_LoadEmpty()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
bool[] exist = m_db.AssetsExist(new[] { uuid1, uuid2, uuid3 });
|
||||
Assert.IsFalse(exist[0]);
|
||||
Assert.IsFalse(exist[1]);
|
||||
Assert.IsFalse(exist[2]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T010_StoreReadVerifyAssets()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
AssetBase a1 = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture, critter1.ToString());
|
||||
AssetBase a2 = new AssetBase(uuid2, "asset two", (sbyte)AssetType.Texture, critter2.ToString());
|
||||
AssetBase a3 = new AssetBase(uuid3, "asset three", (sbyte)AssetType.Texture, critter3.ToString());
|
||||
a1.Data = data1;
|
||||
a2.Data = data1;
|
||||
a3.Data = data1;
|
||||
|
||||
scrambler.Scramble(a1);
|
||||
scrambler.Scramble(a2);
|
||||
scrambler.Scramble(a3);
|
||||
|
||||
m_db.StoreAsset(a1);
|
||||
m_db.StoreAsset(a2);
|
||||
m_db.StoreAsset(a3);
|
||||
a1.UploadAttempts = 0;
|
||||
a2.UploadAttempts = 0;
|
||||
a3.UploadAttempts = 0;
|
||||
|
||||
AssetBase a1a = m_db.GetAsset(uuid1);
|
||||
a1a.UploadAttempts = 0;
|
||||
Assert.That(a1a, Constraints.PropertyCompareConstraint(a1));
|
||||
|
||||
AssetBase a2a = m_db.GetAsset(uuid2);
|
||||
a2a.UploadAttempts = 0;
|
||||
Assert.That(a2a, Constraints.PropertyCompareConstraint(a2));
|
||||
|
||||
AssetBase a3a = m_db.GetAsset(uuid3);
|
||||
a3a.UploadAttempts = 0;
|
||||
Assert.That(a3a, Constraints.PropertyCompareConstraint(a3));
|
||||
|
||||
scrambler.Scramble(a1a);
|
||||
scrambler.Scramble(a2a);
|
||||
scrambler.Scramble(a3a);
|
||||
|
||||
m_db.StoreAsset(a1a);
|
||||
m_db.StoreAsset(a2a);
|
||||
m_db.StoreAsset(a3a);
|
||||
a1a.UploadAttempts = 0;
|
||||
a2a.UploadAttempts = 0;
|
||||
a3a.UploadAttempts = 0;
|
||||
|
||||
AssetBase a1b = m_db.GetAsset(uuid1);
|
||||
a1b.UploadAttempts = 0;
|
||||
Assert.That(a1b, Constraints.PropertyCompareConstraint(a1a));
|
||||
|
||||
AssetBase a2b = m_db.GetAsset(uuid2);
|
||||
a2b.UploadAttempts = 0;
|
||||
Assert.That(a2b, Constraints.PropertyCompareConstraint(a2a));
|
||||
|
||||
AssetBase a3b = m_db.GetAsset(uuid3);
|
||||
a3b.UploadAttempts = 0;
|
||||
Assert.That(a3b, Constraints.PropertyCompareConstraint(a3a));
|
||||
|
||||
bool[] exist = m_db.AssetsExist(new[] { uuid1, uuid2, uuid3 });
|
||||
Assert.IsTrue(exist[0]);
|
||||
Assert.IsTrue(exist[1]);
|
||||
Assert.IsTrue(exist[2]);
|
||||
|
||||
List<AssetMetadata> metadatas = m_db.FetchAssetMetadataSet(0, 1000);
|
||||
|
||||
Assert.That(metadatas.Count >= 3, "FetchAssetMetadataSet() should have returned at least 3 assets!");
|
||||
|
||||
// It is possible that the Asset table is filled with data, in which case we don't try to find "our"
|
||||
// assets there:
|
||||
if (metadatas.Count < 1000)
|
||||
{
|
||||
AssetMetadata metadata = metadatas.Find(x => x.FullID == uuid1);
|
||||
Assert.That(metadata.Name, Is.EqualTo(a1b.Name));
|
||||
Assert.That(metadata.Description, Is.EqualTo(a1b.Description));
|
||||
Assert.That(metadata.Type, Is.EqualTo(a1b.Type));
|
||||
Assert.That(metadata.Temporary, Is.EqualTo(a1b.Temporary));
|
||||
Assert.That(metadata.FullID, Is.EqualTo(a1b.FullID));
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T020_CheckForWeirdCreatorID()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
// It is expected that eventually the CreatorID might be an arbitrary string (an URI)
|
||||
// rather than a valid UUID (?). This test is to make sure that the database layer does not
|
||||
// attempt to convert CreatorID to GUID, but just passes it both ways as a string.
|
||||
AssetBase a1 = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture, critter1);
|
||||
AssetBase a2 = new AssetBase(uuid2, "asset two", (sbyte)AssetType.Texture, "This is not a GUID!");
|
||||
AssetBase a3 = new AssetBase(uuid3, "asset three", (sbyte)AssetType.Texture, "");
|
||||
a1.Data = data1;
|
||||
a2.Data = data1;
|
||||
a3.Data = data1;
|
||||
|
||||
m_db.StoreAsset(a1);
|
||||
a1.UploadAttempts = 0;
|
||||
m_db.StoreAsset(a2);
|
||||
a2.UploadAttempts = 0;
|
||||
m_db.StoreAsset(a3);
|
||||
a3.UploadAttempts = 0;
|
||||
|
||||
AssetBase a1a = m_db.GetAsset(uuid1);
|
||||
a1a.UploadAttempts = 0;
|
||||
Assert.That(a1a, Constraints.PropertyCompareConstraint(a1));
|
||||
|
||||
AssetBase a2a = m_db.GetAsset(uuid2);
|
||||
a2a.UploadAttempts = 0;
|
||||
Assert.That(a2a, Constraints.PropertyCompareConstraint(a2));
|
||||
|
||||
AssetBase a3a = m_db.GetAsset(uuid3);
|
||||
a3a.UploadAttempts = 0;
|
||||
Assert.That(a3a, Constraints.PropertyCompareConstraint(a3));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace OpenSim.Data
|
||||
{
|
||||
public struct TSAssetMoveReport
|
||||
{
|
||||
public string Source;
|
||||
public string Destination;
|
||||
public int CandidateCount;
|
||||
public int AlreadyInTargetCount;
|
||||
public int InsertedCount;
|
||||
public int DeletedFromSourceCount;
|
||||
public int IndexAffectedCount;
|
||||
}
|
||||
|
||||
public struct TSAssetMoveOptions
|
||||
{
|
||||
public bool ResetCheckpoint;
|
||||
public int BatchSize;
|
||||
public int CommandTimeoutSeconds;
|
||||
}
|
||||
|
||||
public struct TSAssetFindReport
|
||||
{
|
||||
public string AssetId;
|
||||
public bool Found;
|
||||
public string TableName;
|
||||
public bool HasIndexEntry;
|
||||
public int IndexAssetType;
|
||||
}
|
||||
|
||||
public struct TSAssetVerifyReport
|
||||
{
|
||||
public string Scope;
|
||||
public int TablesChecked;
|
||||
public int TotalRows;
|
||||
public int MissingIndexRows;
|
||||
public int WrongIndexTypeRows;
|
||||
public int OrphanIndexRows;
|
||||
public int LegacyRowsWithIndex;
|
||||
}
|
||||
|
||||
public struct TSAssetReindexReport
|
||||
{
|
||||
public string Scope;
|
||||
public int TablesProcessed;
|
||||
public int RowsScanned;
|
||||
public int IndexRowsUpserted;
|
||||
public int IndexRowsDeleted;
|
||||
}
|
||||
|
||||
public interface ITSAssetAdminData
|
||||
{
|
||||
bool TryMoveAssets(string from, string to, out TSAssetMoveReport report, out string errorMessage);
|
||||
bool TryMoveAssets(string from, string to, TSAssetMoveOptions options, out TSAssetMoveReport report, out string errorMessage);
|
||||
bool TryPreviewMoveAssets(string from, string to, out TSAssetMoveReport report, out string errorMessage);
|
||||
bool TryFindAssetLocation(string assetId, out TSAssetFindReport report, out string errorMessage);
|
||||
bool TryVerifyAssets(string scope, out TSAssetVerifyReport report, out string errorMessage);
|
||||
bool TryReindexAssets(string scope, TSAssetMoveOptions options, out TSAssetReindexReport report, out string errorMessage);
|
||||
bool TryCleanLegacyIndex(TSAssetMoveOptions options, out TSAssetReindexReport report, out string errorMessage);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,18 +0,0 @@
|
||||
# -----------------
|
||||
:VERSION 1
|
||||
|
||||
BEGIN;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tsassets_index` (
|
||||
`id` char(36) NOT NULL,
|
||||
`assetType` tinyint(4) NOT NULL,
|
||||
`updated_at` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_tsassets_index_assetType` (`assetType`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- Type tables are created dynamically at runtime
|
||||
-- using the same schema and name pattern: assets_<assetType>
|
||||
-- e.g. assets_1, assets_22, assets_-1, assets_-2.
|
||||
|
||||
COMMIT;
|
||||
@@ -1,323 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions 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.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 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.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using log4net.Config;
|
||||
using NUnit.Framework;
|
||||
using NUnit.Framework.Constraints;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Tests.Common;
|
||||
using System.Data.Common;
|
||||
using log4net;
|
||||
|
||||
// DBMS-specific:
|
||||
using MySql.Data.MySqlClient;
|
||||
using OpenSim.Data.MySQL;
|
||||
|
||||
using Mono.Data.Sqlite;
|
||||
using OpenSim.Data.SQLite;
|
||||
|
||||
namespace OpenSim.Data.Tests
|
||||
{
|
||||
[TestFixture(Description = "Asset store tests (SQLite)")]
|
||||
public class SQLiteAssetTests : AssetTests<SqliteConnection, SQLiteAssetData>
|
||||
{
|
||||
}
|
||||
|
||||
[TestFixture(Description = "Asset store tests (MySQL)")]
|
||||
public class MySqlAssetTests : AssetTests<MySqlConnection, MySQLAssetData>
|
||||
{
|
||||
}
|
||||
|
||||
[TestFixture(Description = "Asset store tests (MySQL TSAsset)")]
|
||||
public class MySqlTsAssetTests : AssetTests<MySqlConnection, MySQLtsAssetData>
|
||||
{
|
||||
protected override void ClearDB()
|
||||
{
|
||||
DropTables(
|
||||
"`tsassets_index`",
|
||||
"`assets_0`",
|
||||
"`assets_-2`",
|
||||
"`assets_49`");
|
||||
|
||||
ResetMigrations("TSAssetStore");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T030_StoreReadKnownNegativeAndMeshTypes()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
UUID legacyId = UUID.Random();
|
||||
UUID meshId = UUID.Random();
|
||||
|
||||
AssetBase legacyMaterial = new AssetBase(legacyId, "legacy material", -2, UUID.Random().ToString());
|
||||
legacyMaterial.Data = new byte[] { 1, 2, 3 };
|
||||
|
||||
AssetBase mesh = new AssetBase(meshId, "mesh asset", 49, UUID.Random().ToString());
|
||||
mesh.Data = new byte[] { 4, 5, 6 };
|
||||
|
||||
Assert.IsTrue(m_db.StoreAsset(legacyMaterial), "StoreAsset should succeed for type -2");
|
||||
Assert.IsTrue(m_db.StoreAsset(mesh), "StoreAsset should succeed for type 49");
|
||||
|
||||
AssetBase legacyMaterialRead = m_db.GetAsset(legacyId);
|
||||
AssetBase meshRead = m_db.GetAsset(meshId);
|
||||
|
||||
Assert.That(legacyMaterialRead, Is.Not.Null);
|
||||
Assert.That(meshRead, Is.Not.Null);
|
||||
Assert.That(legacyMaterialRead.Type, Is.EqualTo((sbyte)-2));
|
||||
Assert.That(meshRead.Type, Is.EqualTo((sbyte)49));
|
||||
|
||||
bool[] exists = m_db.AssetsExist(new[] { legacyId, meshId });
|
||||
Assert.That(exists[0], Is.True);
|
||||
Assert.That(exists[1], Is.True);
|
||||
|
||||
int tableCount = 0;
|
||||
ExecQuery(
|
||||
"SELECT COUNT(*) AS cnt FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name IN ('assets_-2','assets_49')",
|
||||
true,
|
||||
reader =>
|
||||
{
|
||||
tableCount = Convert.ToInt32(reader["cnt"]);
|
||||
return false;
|
||||
});
|
||||
|
||||
Assert.That(tableCount, Is.EqualTo(2), "Expected dynamic type tables assets_-2 and assets_49 to exist");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T031_StoreReadBoundarySignedTinyIntAssetTypes()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
UUID minId = UUID.Random();
|
||||
UUID maxId = UUID.Random();
|
||||
|
||||
AssetBase minTypeAsset = new AssetBase(minId, "min type asset", -128, UUID.Random().ToString());
|
||||
minTypeAsset.Data = new byte[] { 10, 20, 30 };
|
||||
|
||||
AssetBase maxTypeAsset = new AssetBase(maxId, "max type asset", 127, UUID.Random().ToString());
|
||||
maxTypeAsset.Data = new byte[] { 40, 50, 60 };
|
||||
|
||||
Assert.IsTrue(m_db.StoreAsset(minTypeAsset), "StoreAsset should succeed for type -128");
|
||||
Assert.IsTrue(m_db.StoreAsset(maxTypeAsset), "StoreAsset should succeed for type 127");
|
||||
|
||||
AssetBase minTypeRead = m_db.GetAsset(minId);
|
||||
AssetBase maxTypeRead = m_db.GetAsset(maxId);
|
||||
|
||||
Assert.That(minTypeRead, Is.Not.Null);
|
||||
Assert.That(maxTypeRead, Is.Not.Null);
|
||||
Assert.That(minTypeRead.Type, Is.EqualTo((sbyte)-128));
|
||||
Assert.That(maxTypeRead.Type, Is.EqualTo((sbyte)127));
|
||||
|
||||
bool[] exists = m_db.AssetsExist(new[] { minId, maxId });
|
||||
Assert.That(exists[0], Is.True);
|
||||
Assert.That(exists[1], Is.True);
|
||||
|
||||
int tableCount = 0;
|
||||
ExecQuery(
|
||||
"SELECT COUNT(*) AS cnt FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name IN ('assets_-128','assets_127')",
|
||||
true,
|
||||
reader =>
|
||||
{
|
||||
tableCount = Convert.ToInt32(reader["cnt"]);
|
||||
return false;
|
||||
});
|
||||
|
||||
Assert.That(tableCount, Is.EqualTo(2), "Expected dynamic type tables assets_-128 and assets_127 to exist");
|
||||
}
|
||||
}
|
||||
|
||||
public class AssetTests<TConn, TAssetData> : BasicDataServiceTest<TConn, TAssetData>
|
||||
where TConn : DbConnection, new()
|
||||
where TAssetData : AssetDataBase, new()
|
||||
{
|
||||
protected TAssetData m_db;
|
||||
|
||||
public UUID uuid1 = UUID.Random();
|
||||
public UUID uuid2 = UUID.Random();
|
||||
public UUID uuid3 = UUID.Random();
|
||||
|
||||
public string critter1 = UUID.Random().ToString();
|
||||
public string critter2 = UUID.Random().ToString();
|
||||
public string critter3 = UUID.Random().ToString();
|
||||
|
||||
public byte[] data1 = new byte[100];
|
||||
|
||||
PropertyScrambler<AssetBase> scrambler = new PropertyScrambler<AssetBase>()
|
||||
.DontScramble(x => x.ID)
|
||||
.DontScramble(x => x.Type)
|
||||
.DontScramble(x => x.FullID)
|
||||
.DontScramble(x => x.Metadata.ID)
|
||||
.DontScramble(x => x.Metadata.CreatorID)
|
||||
.DontScramble(x => x.Metadata.ContentType)
|
||||
.DontScramble(x => x.Metadata.FullID)
|
||||
.DontScramble(x => x.Data);
|
||||
|
||||
protected override void InitService(object service)
|
||||
{
|
||||
ClearDB();
|
||||
m_db = (TAssetData)service;
|
||||
m_db.Initialise(m_connStr);
|
||||
}
|
||||
|
||||
protected virtual void ClearDB()
|
||||
{
|
||||
DropTables("assets");
|
||||
ResetMigrations("AssetStore");
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void T001_LoadEmpty()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
bool[] exist = m_db.AssetsExist(new[] { uuid1, uuid2, uuid3 });
|
||||
Assert.IsFalse(exist[0]);
|
||||
Assert.IsFalse(exist[1]);
|
||||
Assert.IsFalse(exist[2]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T010_StoreReadVerifyAssets()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
AssetBase a1 = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture, critter1.ToString());
|
||||
AssetBase a2 = new AssetBase(uuid2, "asset two", (sbyte)AssetType.Texture, critter2.ToString());
|
||||
AssetBase a3 = new AssetBase(uuid3, "asset three", (sbyte)AssetType.Texture, critter3.ToString());
|
||||
a1.Data = data1;
|
||||
a2.Data = data1;
|
||||
a3.Data = data1;
|
||||
|
||||
scrambler.Scramble(a1);
|
||||
scrambler.Scramble(a2);
|
||||
scrambler.Scramble(a3);
|
||||
|
||||
m_db.StoreAsset(a1);
|
||||
m_db.StoreAsset(a2);
|
||||
m_db.StoreAsset(a3);
|
||||
a1.UploadAttempts = 0;
|
||||
a2.UploadAttempts = 0;
|
||||
a3.UploadAttempts = 0;
|
||||
|
||||
AssetBase a1a = m_db.GetAsset(uuid1);
|
||||
a1a.UploadAttempts = 0;
|
||||
Assert.That(a1a, Constraints.PropertyCompareConstraint(a1));
|
||||
|
||||
AssetBase a2a = m_db.GetAsset(uuid2);
|
||||
a2a.UploadAttempts = 0;
|
||||
Assert.That(a2a, Constraints.PropertyCompareConstraint(a2));
|
||||
|
||||
AssetBase a3a = m_db.GetAsset(uuid3);
|
||||
a3a.UploadAttempts = 0;
|
||||
Assert.That(a3a, Constraints.PropertyCompareConstraint(a3));
|
||||
|
||||
scrambler.Scramble(a1a);
|
||||
scrambler.Scramble(a2a);
|
||||
scrambler.Scramble(a3a);
|
||||
|
||||
m_db.StoreAsset(a1a);
|
||||
m_db.StoreAsset(a2a);
|
||||
m_db.StoreAsset(a3a);
|
||||
a1a.UploadAttempts = 0;
|
||||
a2a.UploadAttempts = 0;
|
||||
a3a.UploadAttempts = 0;
|
||||
|
||||
AssetBase a1b = m_db.GetAsset(uuid1);
|
||||
a1b.UploadAttempts = 0;
|
||||
Assert.That(a1b, Constraints.PropertyCompareConstraint(a1a));
|
||||
|
||||
AssetBase a2b = m_db.GetAsset(uuid2);
|
||||
a2b.UploadAttempts = 0;
|
||||
Assert.That(a2b, Constraints.PropertyCompareConstraint(a2a));
|
||||
|
||||
AssetBase a3b = m_db.GetAsset(uuid3);
|
||||
a3b.UploadAttempts = 0;
|
||||
Assert.That(a3b, Constraints.PropertyCompareConstraint(a3a));
|
||||
|
||||
bool[] exist = m_db.AssetsExist(new[] { uuid1, uuid2, uuid3 });
|
||||
Assert.IsTrue(exist[0]);
|
||||
Assert.IsTrue(exist[1]);
|
||||
Assert.IsTrue(exist[2]);
|
||||
|
||||
List<AssetMetadata> metadatas = m_db.FetchAssetMetadataSet(0, 1000);
|
||||
|
||||
Assert.That(metadatas.Count >= 3, "FetchAssetMetadataSet() should have returned at least 3 assets!");
|
||||
|
||||
// It is possible that the Asset table is filled with data, in which case we don't try to find "our"
|
||||
// assets there:
|
||||
if (metadatas.Count < 1000)
|
||||
{
|
||||
AssetMetadata metadata = metadatas.Find(x => x.FullID == uuid1);
|
||||
Assert.That(metadata.Name, Is.EqualTo(a1b.Name));
|
||||
Assert.That(metadata.Description, Is.EqualTo(a1b.Description));
|
||||
Assert.That(metadata.Type, Is.EqualTo(a1b.Type));
|
||||
Assert.That(metadata.Temporary, Is.EqualTo(a1b.Temporary));
|
||||
Assert.That(metadata.FullID, Is.EqualTo(a1b.FullID));
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void T020_CheckForWeirdCreatorID()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
// It is expected that eventually the CreatorID might be an arbitrary string (an URI)
|
||||
// rather than a valid UUID (?). This test is to make sure that the database layer does not
|
||||
// attempt to convert CreatorID to GUID, but just passes it both ways as a string.
|
||||
AssetBase a1 = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture, critter1);
|
||||
AssetBase a2 = new AssetBase(uuid2, "asset two", (sbyte)AssetType.Texture, "This is not a GUID!");
|
||||
AssetBase a3 = new AssetBase(uuid3, "asset three", (sbyte)AssetType.Texture, "");
|
||||
a1.Data = data1;
|
||||
a2.Data = data1;
|
||||
a3.Data = data1;
|
||||
|
||||
m_db.StoreAsset(a1);
|
||||
a1.UploadAttempts = 0;
|
||||
m_db.StoreAsset(a2);
|
||||
a2.UploadAttempts = 0;
|
||||
m_db.StoreAsset(a3);
|
||||
a3.UploadAttempts = 0;
|
||||
|
||||
AssetBase a1a = m_db.GetAsset(uuid1);
|
||||
a1a.UploadAttempts = 0;
|
||||
Assert.That(a1a, Constraints.PropertyCompareConstraint(a1));
|
||||
|
||||
AssetBase a2a = m_db.GetAsset(uuid2);
|
||||
a2a.UploadAttempts = 0;
|
||||
Assert.That(a2a, Constraints.PropertyCompareConstraint(a2));
|
||||
|
||||
AssetBase a3a = m_db.GetAsset(uuid3);
|
||||
a3a.UploadAttempts = 0;
|
||||
Assert.That(a3a, Constraints.PropertyCompareConstraint(a3));
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,929 +0,0 @@
|
||||
; * Run
|
||||
; * $ Robust.exe -inifile Robust.HG.ini
|
||||
; *
|
||||
|
||||
; * Configurations for enabling HG1.5
|
||||
; *
|
||||
; * HG1.5 handlers are: OpenSim.Server.Handlers.dll:GatekeeperService
|
||||
; * OpenSim.Server.Handlers.dll:UserAgentService
|
||||
; * Additional OpenSim.Server.Handlers.dll:AssetServiceConnector and
|
||||
; * OpenSim.Server.Handlers.dll:XInventoryInConnector
|
||||
; * are started in port 8002, outside the firewall
|
||||
; *
|
||||
; **
|
||||
; *
|
||||
; * The Const section allows us to define some basic information that we
|
||||
; * will use throughout our configuration. We will provide examples for
|
||||
; * setting the base url of the Robust server and the public and private ports
|
||||
; * it uses. Changing the values of the constants will set the operating
|
||||
; * parameters thoughout the configuration. Other constants that may prove
|
||||
; * to be useful may be added to the followin section. They may be
|
||||
; * referenced anywhere in the configuration by using ${Const|Name}. One
|
||||
; * such use is providing a base path for setting locations that Robust
|
||||
; * uses to write data.
|
||||
; *
|
||||
[Const]
|
||||
; The domain or IP of the Robust server.
|
||||
BaseHostname = "127.0.0.1"
|
||||
|
||||
; The http URL of the Robust server.
|
||||
BaseURL = "http://${Const|BaseHostname}"
|
||||
|
||||
; The https URL of the Robust server.
|
||||
; Use this if you have the SSL enabled.
|
||||
; BaseURL = "https://${Const|BaseHostname}"
|
||||
|
||||
; The public port of the Robust server
|
||||
PublicPort = "8002"
|
||||
|
||||
; The private port of the Robust server
|
||||
PrivatePort = "8003"
|
||||
|
||||
; * The startup section lists all the connectors to start up in this server
|
||||
; * instance. This may be only one, or it may be the entire server suite.
|
||||
; * Multiple connectors should be separated by commas.
|
||||
; *
|
||||
; * These are the IN connectors the server uses, the in connectors
|
||||
; * read this config file and load the needed service and database connectors
|
||||
; *
|
||||
; * The full syntax of a connector string is:
|
||||
; * [[<ConfigName>@]<port>/]<dll name>[:<class name>]
|
||||
; *
|
||||
[Startup]
|
||||
; Place to create a PID file
|
||||
; If no path if specified then a PID file is not created.
|
||||
; PIDFile = "/tmp/Robust.exe.pid"
|
||||
|
||||
; Plugin Registry Location
|
||||
; Set path to directory for plugin registry. Information
|
||||
; about the registered repositories and installed plugins
|
||||
; will be stored here
|
||||
; The Robust.exe process must have R/W access to the location
|
||||
RegistryLocation = "."
|
||||
|
||||
; Modular configurations
|
||||
; Set path to directory for modular ini files...
|
||||
; The Robust.exe process must have R/W access to the location
|
||||
ConfigDirectory = "robust-include"
|
||||
|
||||
; Console commands can be saved to a file, so the command history persists after a restart. (default is true)
|
||||
ConsoleHistoryFileEnabled = true
|
||||
|
||||
; The history file can be just a filename (relative to OpenSim's bin/ directory
|
||||
; or it can be a full path to somewhere else. (default is OpenSimConsoleHistory.txt in bin/)
|
||||
ConsoleHistoryFile = "RobustConsoleHistory.txt"
|
||||
|
||||
; How many lines of command history should we keep? (default is 100)
|
||||
ConsoleHistoryFileLines = 100
|
||||
|
||||
; Time stamp commands in history file (default false)
|
||||
; ConsoleHistoryTimeStamp = false
|
||||
|
||||
;; SSL selfsigned certificate settings.
|
||||
; Enable selfsigned certificate creation for local and external use. When set to true, will create a folder SSL\ and 2 sub folders SSL\ssl\ and SSL\src\.
|
||||
; Next creates and store an RSA private key in SSL\src\ and the derived selfsigned certificate in SSL\ssl\ folder.
|
||||
; Is also possible to renew the certificate on every server restart if CertRenewOnStartup is set to true.
|
||||
EnableRobustSelfsignedCertSupport = false
|
||||
|
||||
;Renew the selfsigned certificate on every server startup ?
|
||||
RobustCertRenewOnStartup = false
|
||||
|
||||
;; Certificate options:
|
||||
; Set the certificate file name. the output files extensions are CertFileName.p12 and RobustCertFileName.pfx. This must be different than CertFileName in OpenSim.ini
|
||||
RobustCertFileName = "Robust"
|
||||
|
||||
; Set the certificate password.
|
||||
RobustCertPassword = "mycertpass"
|
||||
|
||||
; The certificate host name (CN).
|
||||
RobustCertHostName = ${Const|BaseHostname}
|
||||
|
||||
; The certificate host IP.
|
||||
RobustCertHostIp = "127.0.0.1"
|
||||
|
||||
; peers SSL certificate validation options
|
||||
; you can allow selfsigned certificates or no official CA with next option set to true
|
||||
NoVerifyCertChain = true
|
||||
; you can also bypass the hostname or domain verification
|
||||
NoVerifyCertHostname = true
|
||||
; having both options true does provide encryption but with low security
|
||||
; set both true if you don't care to use SSL, they are needed to contact regions or grids that do use it.
|
||||
|
||||
|
||||
[ServiceList]
|
||||
AssetServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AssetServiceConnector"
|
||||
InventoryInConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:XInventoryInConnector"
|
||||
;; Uncomment if you have set up Freeswitch (see [FreeswitchService] below)
|
||||
;VoiceConnector = "8004/OpenSim.Server.Handlers.dll:FreeswitchServerConnector"
|
||||
GridServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:GridServiceConnector"
|
||||
GridInfoServerInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:GridInfoServerInConnector"
|
||||
AuthenticationServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector"
|
||||
OpenIdServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:OpenIdServerConnector"
|
||||
AvatarServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AvatarServiceConnector"
|
||||
LLLoginServiceInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector"
|
||||
PresenceServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:PresenceServiceConnector"
|
||||
UserAccountServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:UserAccountServiceConnector"
|
||||
GridUserServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:GridUserServiceConnector"
|
||||
AgentPreferencesServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AgentPreferencesServiceConnector"
|
||||
FriendsServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:FriendsServiceConnector"
|
||||
MapAddServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:MapAddServiceConnector"
|
||||
MapGetServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:MapGetServiceConnector"
|
||||
;; Uncomment this if you want offline IM to work
|
||||
; OfflineIMServiceConnector = "${Const|PrivatePort}/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector"
|
||||
;; Uncomment this if you want Groups V2 to work
|
||||
; GroupsServiceConnector = "${Const|PrivatePort}/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector"
|
||||
;; Uncomment to provide bakes caching
|
||||
; BakedTextureService = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:XBakesConnector"
|
||||
|
||||
;; Uncomment for UserProfiles see [UserProfilesService] to configure...
|
||||
; UserProfilesServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserProfilesConnector"
|
||||
|
||||
;; Uncomment if you want to have centralized estate data
|
||||
; EstateDataService = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:EstateDataRobustConnector"
|
||||
|
||||
MuteListConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:MuteListServiceConnector"
|
||||
|
||||
;; Additions for Hypergrid
|
||||
|
||||
GatekeeperServiceInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:GatekeeperServiceInConnector"
|
||||
UserAgentServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserAgentServerConnector"
|
||||
HeloServiceInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:HeloServiceInConnector"
|
||||
HGFriendsServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:HGFriendsServerConnector"
|
||||
InstantMessageServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:InstantMessageServerConnector"
|
||||
HGInventoryServiceConnector = "HGInventoryService@${Const|PublicPort}/OpenSim.Server.Handlers.dll:XInventoryInConnector"
|
||||
HGAssetServiceConnector = "HGAssetService@${Const|PublicPort}/OpenSim.Server.Handlers.dll:AssetServiceConnector"
|
||||
;; Uncomment this if you want Groups V2, HG to work
|
||||
; HGGroupsServiceConnector = "${Const|PublicPort}/OpenSim.Addons.Groups.dll:HGGroupsServiceRobustConnector"
|
||||
|
||||
; * This is common for all services, it's the network setup for the entire
|
||||
; * server instance, if none is specified above
|
||||
; *
|
||||
[Network]
|
||||
port = ${Const|PrivatePort}
|
||||
|
||||
; HTTPS for "Out of band" management applications such as the remote admin
|
||||
; module. May specify https_main = True to make the main http server
|
||||
; use https or "False" to make the main server HTTP
|
||||
; https_main = False
|
||||
;
|
||||
; Create https_listener = "True" will create a listener on the port
|
||||
; specified. Provide the path to your server certificate along with it's
|
||||
; password
|
||||
; https_listener = False
|
||||
;
|
||||
; Set our listener to this port
|
||||
; https_port = 0
|
||||
;
|
||||
; Path to X509 certificate
|
||||
; cert_path = "path/to/cert.p12"
|
||||
;
|
||||
; Password for cert
|
||||
; cert_pass = "password"
|
||||
|
||||
;; The follow 3 variables are for HTTP Basic Authentication for the Robust services.
|
||||
;; Use this if your central services in port ${Const|PrivatePort} need to be accessible on the Internet
|
||||
;; but you want to protect them from unauthorized access.
|
||||
; AuthType = "BasicHttpAuthentication"
|
||||
; HttpAuthUsername = "some_username"
|
||||
; HttpAuthPassword = "some_password"
|
||||
;;
|
||||
;; AuthType above can be overriden in any of the service sections below by
|
||||
; AuthType = "None"
|
||||
;; This is useful in cases where you want to protect most of the services,
|
||||
;; but unprotect individual services. Username and Password can also be
|
||||
;; overriden if you want to use different credentials for the different services.
|
||||
;; Hypergrid services are not affected by this; they are publicly available
|
||||
;; by design.
|
||||
|
||||
;; By default, scripts are not allowed to call private services via llHttpRequest()
|
||||
;; Such calls are detected by the X-SecondLife-Shared HTTP header
|
||||
;; If you allow such calls you must be sure that they are restricted to very trusted scripters
|
||||
;; (remember scripts can also be in visiting avatar attachments).
|
||||
;; This can be overriden in individual private service sections if necessary
|
||||
AllowllHTTPRequestIn = false
|
||||
|
||||
; * The following are for the remote console
|
||||
; * They have no effect for the local or basic console types
|
||||
; * Leave commented to disable logins to the console
|
||||
;ConsoleUser = Test
|
||||
;ConsolePass = secret
|
||||
;ConsolePort = 0
|
||||
|
||||
|
||||
[Hypergrid]
|
||||
;# {HomeURI} {Hypergrid} {The Home URL of this grid} {}
|
||||
;; This is the address of the external robust server that
|
||||
;; runs the UserAgentsService, possibly this server.
|
||||
;; For example http://myworld.com:8002
|
||||
;; This is a default that can be overwritten in some sections.
|
||||
; HomeURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
;# {GatekeeperURI} {Hypergrid} {The URL of the gatekeeper of this grid} {}
|
||||
;; This is the address of the external robust server
|
||||
;; that runs the Gatekeeper service, possibly this server.
|
||||
;; For example http://myworld.com:8002
|
||||
;; This is a default that can be overwritten in some sections.
|
||||
; GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
;# {GatekeeperURIAlias} {Hypergrid} {alternative hostnames (FQDN), or IPs of the gatekeeper of this grid and port (default 80 or 443 if alias starts with https://)} {}
|
||||
;; comma separated list,
|
||||
;; this is to allow this grid to identify this as references to itself
|
||||
;; entries can be unsecure url (host:port) if using ssl, direct login url if different, old grid url, etc
|
||||
; GatekeeperURIAlias = "login.osgrid.org"
|
||||
|
||||
[AccessControl]
|
||||
;# {AllowedClients} {} {Bar (|) separated list of allowed clients} {}
|
||||
;; Bar (|) separated list of viewers which may gain access to the regions.
|
||||
;; One can use a substring of the viewer name to enable only certain
|
||||
;; versions
|
||||
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
|
||||
;; - "Imprudence" has access
|
||||
;; - "Imprudence 1.3" has access
|
||||
;; - "Imprudence 1.3.1" has no access
|
||||
; AllowedClients = ""
|
||||
|
||||
;# {DeniedClients} {} {Bar (|) separated list of denied clients} {}
|
||||
;; Bar (|) separated list of viewers which may not gain access to the regions.
|
||||
;; One can use a Substring of the viewer name to disable only certain
|
||||
;; versions
|
||||
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
|
||||
;; - "Imprudence" has no access
|
||||
;; - "Imprudence 1.3" has no access
|
||||
;; - "Imprudence 1.3.1" has access
|
||||
; DeniedClients = ""
|
||||
|
||||
[DatabaseService]
|
||||
; PGSQL
|
||||
; Uncomment these lines if you want to use PGSQL storage
|
||||
; Change the connection string to your db details
|
||||
;StorageProvider = "OpenSim.Data.PGSQL.dll"
|
||||
;ConnectionString = "Data Source=localhost;Database=opensim;User Id=opensim; password=***;"
|
||||
|
||||
; MySQL
|
||||
; Uncomment these lines if you want to use MySQL storage
|
||||
; Change the connection string to your db details
|
||||
; If using MySQL 8.0.4 or later, check that default-authentication-plugin=mysql_native_password
|
||||
; rather than caching_sha2_password is set in /etc/mysql/mysql.conf.d/mysqld.cnf (not applicable to MariaDB).
|
||||
StorageProvider = "OpenSim.Data.MySQL.dll"
|
||||
ConnectionString = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
|
||||
|
||||
; * As an example, the below configuration precisely mimicks the legacy
|
||||
; * asset server. It is read by the asset IN connector (defined above)
|
||||
; * and it then loads the OUT connector (a local database module). That,
|
||||
; * in turn, reads the asset loader and database connection information
|
||||
; *
|
||||
[AssetService]
|
||||
|
||||
;; Choose an asset service (Only one option should be enabled)
|
||||
;LocalServiceModule = "OpenSim.Services.AssetService.dll:TSAssetConnector"
|
||||
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
|
||||
;LocalServiceModule = "OpenSim.Services.FSAssetService.dll:FSAssetConnector"
|
||||
|
||||
;; FSAssets Directories. Base directory, where final asset files are stored and Spool directory for temp files
|
||||
;; These directories must be on the same physical filesystem
|
||||
;BaseDirectory = "./fsassets/data"
|
||||
;SpoolDirectory = "./fsassets/tmp"
|
||||
|
||||
;; FSAssets only: if running several instances, only one can run some services, so others need to be set as secondary
|
||||
;; for secondary instances uncoment this line
|
||||
;SecondaryInstance = true
|
||||
|
||||
;; FallbackService is only needed when TSAssetConnector is enabled
|
||||
;FallbackService = "OpenSim.Services.AssetService.dll:AssetService"
|
||||
|
||||
;; How many days since last updating the access time before its updated again by FSAssets when accessing an asset
|
||||
;; Reduces DB calls if asset is requested often. Default value 0 will always update access time
|
||||
;DaysBetweenAccessTimeUpdates = 30
|
||||
|
||||
;; Should FSAssets print read/write stats to the robust console, default is true
|
||||
;ShowConsoleStats = true
|
||||
|
||||
;; Legacy provider used by FallbackService (optional but recommended)
|
||||
StorageProvider = "OpenSim.Data.MySQL.dll:MySQLAssetData"
|
||||
ConnectionString = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
|
||||
;; FSAssets uses a folder structure to reduce file access times. By default that structure is 00/00/00
|
||||
;; Setting this to true will switch to an older 000/000 format, which can cause issues with long file lists
|
||||
;UseOsgridFormat = false
|
||||
|
||||
;; The following are common to both the default asset service and FSAsset service
|
||||
|
||||
;; Common asset service options
|
||||
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
|
||||
AssetLoaderArgs = "./assets/AssetSets.xml"
|
||||
|
||||
; Allow maptile assets to remotely deleted by remote calls to the asset service.
|
||||
; There is no harm in having this as false - it just means that historical maptile assets are not deleted.
|
||||
; This only applies to maptiles served via the version 1 viewer mechanisms
|
||||
; Default is false
|
||||
AllowRemoteDelete = false
|
||||
|
||||
; Allow all assets to be remotely deleted.
|
||||
; Only set this to true if you are operating a grid where you control all calls to the asset service
|
||||
; (where a necessary condition is that you control all simulators) and you need this for admin purposes.
|
||||
; If set to true, AllowRemoteDelete = true is required as well.
|
||||
; Default is false.
|
||||
AllowRemoteDeleteAllTypes = false
|
||||
|
||||
[TSAssetService]
|
||||
|
||||
;; Master switch for TS asset service. Must be true to activate TSAssetConnector.
|
||||
Enabled = false
|
||||
|
||||
;; TS provider (explicit class avoids wrong provider selection)
|
||||
StorageProvider = "OpenSim.Data.MySQL.dll:MySQLtsAssetData"
|
||||
ConnectionString = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
|
||||
;; Optional type allowlist. Empty means all asset types.
|
||||
TSAssetType = ""
|
||||
|
||||
;; Fallback hits are always copied immediately into TS storage (standard behavior)
|
||||
;; If true, failed immediate copies are queued and retried in background only when traffic is low
|
||||
;; If false, failed immediate copies are not retried by background worker
|
||||
EnableFallbackAutoMigration = false
|
||||
;; If true, fallback records are deleted after successful copy into TS storage
|
||||
EnableFallbackAutoDelete = false
|
||||
MigrationCheckIntervalSeconds = 60
|
||||
MigrationLowTrafficMaxRequests = 3
|
||||
MigrationBatchSize = 25
|
||||
MigrationQueueMax = 50000
|
||||
|
||||
;; Per-type DB routing (editierbar): nur Kern-Typen.
|
||||
;; Alle anderen Typen nutzen automatisch die Default-ConnectionString oben.
|
||||
AssetDatabase_-2 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_0 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_1 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_3 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_5 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_6 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_7 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_10 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_13 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_20 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_21 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_49 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_56 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
AssetDatabase_57 = "Data Source=localhost;Database=robust;User ID=opensim;Password=opensim123;Old Guids=true;SslMode=None;"
|
||||
|
||||
; * This configuration loads the inventory server modules. It duplicates
|
||||
; * the function of the legacy inventory server
|
||||
; *
|
||||
[InventoryService]
|
||||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService"
|
||||
|
||||
; Will calls to purge folders (empty trash) and immediately delete/update items or folders (not move to trash first) succeed?
|
||||
; If this is set to false then some other arrangement must be made to perform these operations if necessary.
|
||||
AllowDelete = true
|
||||
|
||||
|
||||
; * This is the new style grid service.
|
||||
; * "Realm" is the table that is used for user lookup.
|
||||
; * It defaults to "regions", which uses the legacy tables
|
||||
; *
|
||||
[GridService]
|
||||
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
||||
|
||||
; Realm = "regions"
|
||||
; AllowDuplicateNames = ""
|
||||
|
||||
;; Perform distance check for the creation of a linked region
|
||||
; Check4096 = "True"
|
||||
|
||||
;; Needed to display non-default map tile images for linked regions
|
||||
AssetService = "OpenSim.Services.AssetService.dll:AssetService"
|
||||
|
||||
;; Directory for map tile images of linked regions
|
||||
; MapTileDirectory = "./maptiles"
|
||||
|
||||
;; Next, we can specify properties of regions, including default and fallback regions
|
||||
;; The syntax is: Region_<RegionName> = "<flags>"
|
||||
;; or: Region_<RegionID> = "<flags>"
|
||||
;; where <flags> can be DefaultRegion, DefaultHGRegion, FallbackRegion, NoDirectLogin, Persistent, LockedOut, Reservation, NoMove, Authenticate
|
||||
;;
|
||||
;; DefaultRegion If a local login cannot be placed in the required region (e.g. home region does not exist, avatar is not allowed entry, etc.)
|
||||
;; then this region becomes the destination. Only the first online default region will be used. If no DefaultHGRegion
|
||||
;; is specified then this will also be used as the region for hypergrid connections that require it (commonly because they have not specified
|
||||
;; an explicit region.
|
||||
;;
|
||||
;; DefaultHGRegion If an avatar connecting via the hypergrid does not specify a region, then they are placed here. Only the first online
|
||||
;; region will be used.
|
||||
;;
|
||||
;; FallbackRegion If the DefaultRegion is not available for a local login, then any FallbackRegions are tried instead. These are tried in the
|
||||
;; order specified. This only applies to local logins at this time, not Hypergrid connections.
|
||||
;;
|
||||
;; NoDirectLogin A hypergrid user cannot directly connect to this region. This does not apply to local logins.
|
||||
;;
|
||||
;; Persistent When the simulator is shutdown, the region is signalled as offline but left registered on the grid.
|
||||
;;
|
||||
;; Example specification:
|
||||
; Region_Welcome_Area = "DefaultRegion, DefaultHGRegion"
|
||||
; (replace spaces with underscore)
|
||||
|
||||
;; Allow Hyperlinks to be created at the console
|
||||
HypergridLinker = true
|
||||
|
||||
;; Allow supporting viewers to export content
|
||||
;; Set to false to prevent export
|
||||
ExportSupported = true
|
||||
|
||||
;; If you have this set under [Hypergrid], no need to set it here, leave it commented
|
||||
; GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
|
||||
; * This is the configuration for the freeswitch server in grid mode
|
||||
[FreeswitchService]
|
||||
LocalServiceModule = "OpenSim.Services.FreeswitchService.dll:FreeswitchService"
|
||||
|
||||
;; The IP address of your FreeSWITCH server.
|
||||
;; This address must be reachable by viewers.
|
||||
; ServerAddress = 127.0.0.1
|
||||
|
||||
;; The following configuration parameters are optional
|
||||
|
||||
;; By default, this is the same as the ServerAddress
|
||||
; Realm = 127.0.0.1
|
||||
|
||||
;; By default, this is the same as the ServerAddress on port 5060
|
||||
; SIPProxy = 127.0.0.1:5060
|
||||
|
||||
;; Default is 5000ms
|
||||
; DefaultTimeout = 5000
|
||||
|
||||
;; The dial plan context. Default is "default"
|
||||
; Context = default
|
||||
|
||||
;; Currently unused
|
||||
; UserName = freeswitch
|
||||
|
||||
;; Currently unused
|
||||
; Password = password
|
||||
|
||||
;; The following parameters are for STUN = Simple Traversal of UDP through NATs
|
||||
;; See http://wiki.freeswitch.org/wiki/NAT_Traversal
|
||||
;; stun.freeswitch.org is not guaranteed to be running so use it in
|
||||
;; production at your own risk
|
||||
; EchoServer = 127.0.0.1
|
||||
; EchoPort = 50505
|
||||
; AttemptSTUN = false
|
||||
|
||||
|
||||
; * This is the new style authentication service. Currently, only MySQL
|
||||
; * is implemented.
|
||||
; *
|
||||
[AuthenticationService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||
; Realm = "auth"
|
||||
|
||||
;; Allow the service to process HTTP getauthinfo calls.
|
||||
;; Default is false.
|
||||
; AllowGetAuthInfo = false
|
||||
|
||||
;; Allow the service to process HTTP setauthinfo calls.
|
||||
;; Default is false.
|
||||
; AllowSetAuthInfo = false
|
||||
|
||||
;; Allow the service to process HTTP setpassword calls.
|
||||
;; Default is false.
|
||||
; AllowSetPassword = false
|
||||
|
||||
|
||||
[OpenIdService]
|
||||
; for the server connector
|
||||
AuthenticationServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||
UserAccountServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
|
||||
|
||||
; * This is the new style user service.
|
||||
; * "Realm" is the table that is used for user lookup.
|
||||
; * It defaults to "UserAccounts", which uses the new style.
|
||||
; * Realm = "users" will use the legacy tables as an authentication source
|
||||
; *
|
||||
[UserAccountService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
; Realm = "UserAccounts"
|
||||
|
||||
; These are for creating new accounts by the service
|
||||
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
|
||||
AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService"
|
||||
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
|
||||
;; This switch creates the minimum set of body parts and avatar entries for a viewer 2
|
||||
;; to show a default "Ruth" avatar rather than a cloud for a newly created user.
|
||||
;; Default is false
|
||||
CreateDefaultAvatarEntries = true
|
||||
|
||||
;; Allow the service to process HTTP createuser calls.
|
||||
;; Default is false.
|
||||
; AllowCreateUser = false
|
||||
|
||||
;; Allow the service to process HTTP setaccount calls.
|
||||
;; Default is false.
|
||||
; AllowSetAccount = false
|
||||
|
||||
|
||||
[GridUserService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
|
||||
|
||||
[AgentPreferencesService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:AgentPreferencesService"
|
||||
|
||||
|
||||
[PresenceService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
|
||||
[AvatarService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService"
|
||||
|
||||
|
||||
[FriendsService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService"
|
||||
|
||||
[EstateService]
|
||||
LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
|
||||
|
||||
[LibraryService]
|
||||
LibraryName = "OpenSim Library"
|
||||
DefaultLibrary = "./inventory/Libraries.xml"
|
||||
|
||||
|
||||
[LoginService]
|
||||
; for the server connector
|
||||
LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService"
|
||||
; for the service
|
||||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||
InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
|
||||
AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector"
|
||||
LibraryService = "OpenSim.Services.InventoryService.dll:LibraryService"
|
||||
FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService"
|
||||
; The minimum user level required for a user to be able to login. 0 by default
|
||||
; If you disable a particular user's account then you can set their login level below this number.
|
||||
; You can also change this level from the console though these changes will not be persisted.
|
||||
; MinLoginLevel = 0
|
||||
|
||||
;; for hypergrid
|
||||
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||
|
||||
; This inventory service will be used to initialize the user's inventory
|
||||
HGInventoryServicePlugin = "HGInventoryService@OpenSim.Services.HypergridService.dll:HGSuitcaseInventoryService"
|
||||
; NOTE: HGInventoryServiceConstructorArg is deprecated. For now it will work, but see above
|
||||
; for the correct method if passing additional arguments.
|
||||
;; end hypergrid
|
||||
|
||||
; Ask co-operative viewers to use a different currency name
|
||||
;Currency = ""
|
||||
|
||||
;; Set minimum fee to publish classified
|
||||
; ClassifiedFee = 0
|
||||
|
||||
WelcomeMessage = "Welcome, Avatar!"
|
||||
AllowRemoteSetLoginLevel = "false"
|
||||
|
||||
; For V2 map
|
||||
MapTileURL = "${Const|BaseURL}:${Const|PublicPort}/";
|
||||
|
||||
; Url to search service
|
||||
; SearchURL = "${Const|BaseURL}:${Const|PublicPort}/";
|
||||
|
||||
; For V3 destination guide
|
||||
; DestinationGuide = "${Const|BaseURL}/guide"
|
||||
|
||||
; For V3 avatar picker (( work in progress ))
|
||||
; AvatarPicker = "${Const|BaseURL}/avatars"
|
||||
|
||||
; If you run this login server behind a proxy, set this to true
|
||||
; HasProxy = false
|
||||
|
||||
; Defaults for the users, if none is specified in the useraccounts table entry (ServiceURLs)
|
||||
;; If you have GatekeeperURI set under [Hypergrid], no need to set it here, leave it commented
|
||||
; GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
SRV_HomeURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
SRV_InventoryServerURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
SRV_AssetServerURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
SRV_ProfileServerURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
SRV_FriendsServerURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
SRV_IMServerURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
SRV_GroupsServerURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
;# {DSTZone} {} {Override Daylight Saving Time rules} {* none local} "America/Los_Angeles;Pacific Standard Time"
|
||||
;; Viewers do not receive timezone information from the server - almost all (?) default to Pacific Standard Time
|
||||
;; However, they do rely on the server to tell them whether it's Daylight Saving Time or not.
|
||||
;; Hence, calculating DST based on a different timezone can result in a misleading viewer display and inconsistencies between grids.
|
||||
;; By default, this setting uses various timezone names to calculate DST with regards to the viewer's standard PST.
|
||||
;; Options are
|
||||
;; "none" no DST
|
||||
;; "local" use the server's only timezone to calculate DST. This is previous OpenSimulator behaviour.
|
||||
;; "America/Los_Angeles;Pacific Standard Time" use these timezone names to look up Daylight savings.
|
||||
;; 'America/Los_Angeles' is used on Linux/Mac systems whilst 'Pacific Standard Time' is used on Windows
|
||||
DSTZone = "America/Los_Angeles;Pacific Standard Time"
|
||||
|
||||
;; If the region requested at login is not found and there are no default or fallback regions
|
||||
;; online or defined in section [GridService], try to send user to any region online
|
||||
;; this similar to legacy (was disabled on 0.9.2.0)
|
||||
;; you should set this to false and define regions with Default and possible Fallback flags
|
||||
;; With this option set to true, users maybe sent to regions they where not supposed to be, or even know about
|
||||
AllowLoginFallbackToAnyRegion = false
|
||||
|
||||
;Basic Login Service Dos Protection Tweaks
|
||||
;;
|
||||
;; Some Grids/Users use a transparent proxy that makes use of the X-Forwarded-For HTTP Header, If you do, set this to true
|
||||
;; If you set this to true and you don't have a transparent proxy, it may allow attackers to put random things in the X-Forwarded-For header to
|
||||
;; get around this basic DOS protection.
|
||||
;DOSAllowXForwardedForHeader = false
|
||||
;;
|
||||
;; The protector adds up requests during this rolling period of time, default 10 seconds
|
||||
;DOSRequestTimeFrameMS = 10000
|
||||
;;
|
||||
;; The amount of requests in the above timeframe from the same endpoint that triggers protection
|
||||
;DOSMaxRequestsInTimeFrame = 5
|
||||
;;
|
||||
;; The amount of time that a specific endpoint is blocked. Default 2 minutes.
|
||||
;DOSForgiveClientAfterMS = 120000
|
||||
;;
|
||||
;; To turn off basic dos protection, set the DOSMaxRequestsInTimeFrame to 0.
|
||||
|
||||
;; Allow banning via hashed MAC must be set in both [GatekeeperService] and [LoginService]
|
||||
;DeniedMacs = "YOURLONGMACTRSING ANOTHERMAC"
|
||||
|
||||
[MapImageService]
|
||||
LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService"
|
||||
|
||||
; Set this if you want to change the default
|
||||
; TilesStoragePath = "maptiles"
|
||||
;
|
||||
; If for some reason you have the AddMapTile service outside the firewall (e.g. ${Const|PublicPort}),
|
||||
; you may want to set this. Otherwise, don't set it, because it's already protected.
|
||||
; GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
;
|
||||
; Additionally, if you run this server behind a proxy, set this to true
|
||||
; HasProxy = false
|
||||
|
||||
|
||||
[GridInfoService]
|
||||
; These settings are used to return information on a get_grid_info call.
|
||||
; Client launcher scripts and third-party clients make use of this to
|
||||
; autoconfigure the client and to provide a nice user experience. If you
|
||||
; want to facilitate that, you should configure the settings here according
|
||||
; to your grid or standalone setup.
|
||||
;
|
||||
; See http://opensimulator.org/wiki/GridInfo
|
||||
|
||||
; login uri: for grid this is the login server URI
|
||||
login = ${Const|BaseURL}:${Const|PublicPort}/
|
||||
|
||||
; long grid name: the long name of your grid
|
||||
gridname = "the lost continent of hippo"
|
||||
|
||||
; short grid name: the short name of your grid
|
||||
gridnick = "hippogrid"
|
||||
|
||||
; login page: optional: if it exists it will be used to tell the client to use
|
||||
; this as splash page
|
||||
;welcome = ${Const|BaseURL}/welcome
|
||||
|
||||
; helper uri: optional: if it exists it will be used to tell the client to use
|
||||
; this for all economy related things
|
||||
;economy = ${Const|BaseURL}/economy
|
||||
|
||||
; web page of grid: optional: page providing further information about your grid
|
||||
;about = ${Const|BaseURL}/about
|
||||
|
||||
; account creation: optional: page providing further information about obtaining
|
||||
; a user account on your grid
|
||||
;register = ${Const|BaseURL}/register
|
||||
|
||||
; help: optional: page providing further assistance for users of your grid
|
||||
;help = ${Const|BaseURL}/help
|
||||
|
||||
; password help: optional: page providing password assistance for users of your grid
|
||||
;password = ${Const|BaseURL}/password
|
||||
|
||||
; HG address of the gatekeeper, if you have one
|
||||
; this is the entry point for all the regions of the world
|
||||
; gatekeeper = ${Const|BaseURL}:${Const|PublicPort}/
|
||||
|
||||
; a http page for grid status
|
||||
;GridStatus = ${Const|BaseURL}:${Const|PublicPort}/GridStatus
|
||||
; a RSS page for grid status
|
||||
;GridStatusRSS = ${Const|BaseURL}:${Const|PublicPort}/GridStatusRSS
|
||||
|
||||
; optional web page for profiles
|
||||
;[AGENT_NAME] will be converted to Firstname.LastName by viewers
|
||||
; web_profile_url = http://webprofilesurl:ItsPort?name=[AGENT_NAME]
|
||||
|
||||
; http REST handler /get_grid_stats may output some grid statistics This can be turned off here
|
||||
;DisableStatsEndpoint = true
|
||||
|
||||
[GatekeeperService]
|
||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:GatekeeperService"
|
||||
;; for the service
|
||||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector"
|
||||
SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector"
|
||||
; how does the outside world reach me? This acts as public key too.
|
||||
;; If you have GatekeeperURI set under [Hypergrid], no need to set it here, leave it commented
|
||||
; ExternalName = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
; Does this grid allow incoming links to any region in it?
|
||||
; If false, HG TPs happen only to the Default regions specified in [GridService] section
|
||||
AllowTeleportsToAnyRegion = true
|
||||
|
||||
; If you run this gatekeeper server behind a proxy, set this to true
|
||||
; HasProxy = false
|
||||
|
||||
;; Are foreign visitors allowed?
|
||||
;ForeignAgentsAllowed = true
|
||||
;;
|
||||
;; If ForeignAgentsAllowed is true, make exceptions using AllowExcept.
|
||||
;; Leave blank or commented for no exceptions.
|
||||
; AllowExcept = "http://griefer.com:8002, http://enemy.com:8002"
|
||||
;;
|
||||
;; If ForeignAgentsAllowed is false, make exceptions using DisallowExcept
|
||||
;; Leave blank or commented for no exceptions.
|
||||
; DisallowExcept = "http://myfriendgrid.com:8002, http://myboss.com:8002"
|
||||
|
||||
;; Allow banning via hashed MAC must be set in both [GatekeeperService] and [LoginService]
|
||||
;DeniedMacs = "YOURLONGMACTRSING ANOTHERMAC"
|
||||
|
||||
[UserAgentService]
|
||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||
;; for the service
|
||||
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
GatekeeperService = "OpenSim.Services.HypergridService.dll:GatekeeperService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService"
|
||||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
|
||||
; If you run this user agent server behind a proxy, set this to true
|
||||
; HasProxy = false
|
||||
|
||||
;; If you separate the UserAgentService from the LoginService, set this to
|
||||
;; the IP address of the machine where your LoginService is
|
||||
;LoginServerIP = "127.0.0.1"
|
||||
|
||||
; User level required to be contacted from other grids
|
||||
;LevelOutsideContacts = 0
|
||||
|
||||
;; Restrictions on destinations of local users.
|
||||
;; Are local users allowed to visit other grids?
|
||||
;; What user level? Use variables of this forrm:
|
||||
;; ForeignTripsAllowed_Level_<UserLevel> = true | false
|
||||
;; (the default is true)
|
||||
;; For example:
|
||||
; ForeignTripsAllowed_Level_0 = false
|
||||
; ForeignTripsAllowed_Level_200 = true ; true is default, no need to say it
|
||||
;;
|
||||
;; If ForeignTripsAllowed is false, make exceptions using DisallowExcept
|
||||
;; Leave blank or commented for no exceptions.
|
||||
; DisallowExcept_Level_0 = "http://myothergrid.com:8002, http://boss.com:8002"
|
||||
;;
|
||||
;; If ForeignTripsAllowed is true, make exceptions using AllowExcept.
|
||||
;; Leave blank or commented for no exceptions.
|
||||
; AllowExcept_Level_200 = "http://griefer.com:8002, http://enemy.com:8002"
|
||||
|
||||
;; This variable controls what is exposed to profiles of local users
|
||||
;; as seen from outside of this grid. Leave it uncommented for exposing
|
||||
;; UserTitle, UserFlags and the creation date. Uncomment and change to False
|
||||
;; to block this info from being exposed.
|
||||
; ShowUserDetailsInHGProfile = True
|
||||
|
||||
|
||||
; * The interface that local users get when they are in other grids.
|
||||
; * This restricts the inventory operations while in other grids.
|
||||
; * Still not completely safe, especially if users perform inventory operations
|
||||
; * while in those grids. The more the user accesses his/her inventory, the more
|
||||
; * those simulators will know about the user's inventory.
|
||||
; *
|
||||
[HGInventoryService]
|
||||
; For the InventoryServiceInConnector
|
||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGSuitcaseInventoryService"
|
||||
;; alternatives:
|
||||
;; HG1.5, more permissive, not recommended, but still supported
|
||||
;LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGInventoryService"
|
||||
;; HG1.0, totally permissive, not recommended, but OK for grids with 100% trust
|
||||
;LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService"
|
||||
|
||||
UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService"
|
||||
|
||||
; HGInventoryService is a public-facing inventory service that allows users to
|
||||
; interact with their suitcase folder when on a foreign grid. This reuses the general inventory service connector.
|
||||
; Hence, if the user has set up authentication in [Network] to protect their private services
|
||||
; make sure it is not set here.
|
||||
AuthType = None
|
||||
|
||||
;; Can overwrite the default in [Hypergrid], but probably shouldn't
|
||||
; HomeURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
|
||||
; * The interface that local users get when they are in other grids.
|
||||
; * This restricts the access that the rest of the world has to
|
||||
; * the assets of this world.
|
||||
; *
|
||||
[HGAssetService]
|
||||
;; Use the second option if you have FSAsset service enabled
|
||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGAssetService"
|
||||
;LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGFSAssetService"
|
||||
|
||||
UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
|
||||
; HGAssetService is a public-facing service that allows users to
|
||||
; read and create assets when on another grid. This reuses the general asset service connector.
|
||||
; Hence, if the user has set up authentication in [Network] to protect their private services
|
||||
; make sure it is overriden for this public service.
|
||||
AuthType = None
|
||||
|
||||
;; Can overwrite the default in [Hypergrid], but probably shouldn't
|
||||
; HomeURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
|
||||
;; The asset types that this grid can export to / import from other grids.
|
||||
;; Comma separated.
|
||||
;; Valid values are all the asset types in OpenMetaverse.AssetType, namely:
|
||||
;; Unknown, Texture, Sound, CallingCard, Landmark, Clothing, Object, Notecard, LSLText,
|
||||
;; LSLBytecode, TextureTGA, Bodypart, SoundWAV, ImageTGA, ImageJPEG, Animation, Gesture, Mesh
|
||||
;;
|
||||
;; Leave blank or commented if you don't want to apply any restrictions.
|
||||
;; A more strict, but still reasonable, policy may be to disallow the exchange
|
||||
;; of scripts, like so:
|
||||
; DisallowExport ="LSLText"
|
||||
; DisallowImport ="LSLBytecode"
|
||||
|
||||
|
||||
[HGFriendsService]
|
||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGFriendsService"
|
||||
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||
FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService"
|
||||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
|
||||
|
||||
[HGInstantMessageService]
|
||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGInstantMessageService"
|
||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||
; This should always be true in the Robust config
|
||||
InGatekeeper = True
|
||||
|
||||
|
||||
[Messaging]
|
||||
; OfflineIM
|
||||
OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService"
|
||||
; maximum number of offline ims per user, default 25
|
||||
;MaxOfflineIMs = 25;
|
||||
|
||||
|
||||
[Groups]
|
||||
;; for the HG Groups service
|
||||
OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService"
|
||||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
|
||||
;; What is the HomeURI of users associated with this grid?
|
||||
;; Can overwrite the default in [Hypergrid], but probably shouldn't
|
||||
; HomeURI = "${Const|BaseURL}:${Const|PublicPort}"
|
||||
;; end hypergrid
|
||||
|
||||
;; Sets the maximum number of groups an agent may join
|
||||
; MaxAgentGroups = 42
|
||||
|
||||
|
||||
[UserProfilesService]
|
||||
LocalServiceModule = "OpenSim.Services.UserProfilesService.dll:UserProfilesService"
|
||||
Enabled = false
|
||||
;; Configure this for separate profiles database
|
||||
;; ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;Old Guids=true;"
|
||||
;; Realm = UserProfiles
|
||||
UserAccountService = OpenSim.Services.UserAccountService.dll:UserAccountService
|
||||
AuthenticationServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||
|
||||
|
||||
[BakedTextureService]
|
||||
LocalServiceModule = "OpenSim.Server.Handlers.dll:XBakes"
|
||||
;; This directory must be writable by the user ROBUST runs as. It will be created automatically.
|
||||
BaseDirectory = "./bakes"
|
||||
|
||||
[MuteListService]
|
||||
LocalServiceModule = "OpenSim.Services.MuteListService.dll:MuteListService"
|
||||
Reference in New Issue
Block a user