* This allows configuration of the assetset and library control file paths to be other than ./inventory/Libraries.xml and ./assets/AssetSets.xml
* This is controlled via the LibrariesXMLFile and AssetSetsXMLFile configuration settings in [StandAlone] in OpenSim.ini (in standalone)
and via the user and asset config xml files for grid mode
* Thanks to SirKimba for the patch
0.6.2-post-fixes
Justin Clarke Casey 2008-12-29 16:56:48 +00:00
parent 817a10d0aa
commit 266d0fbaae
12 changed files with 87 additions and 42 deletions

View File

@ -40,6 +40,7 @@ namespace OpenSim.Framework
public string DatabaseConnect = String.Empty; public string DatabaseConnect = String.Empty;
public string DatabaseProvider = String.Empty; public string DatabaseProvider = String.Empty;
public uint HttpPort = DefaultHttpPort; public uint HttpPort = DefaultHttpPort;
public string AssetSetsLocation = string.Empty;
public AssetConfig(string description, string filename) public AssetConfig(string description, string filename)
{ {
@ -58,6 +59,10 @@ namespace OpenSim.Framework
configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32,
"Http Listener port", DefaultHttpPort.ToString(), false); "Http Listener port", DefaultHttpPort.ToString(), false);
configMember.addConfigurationOption("assetset_location", ConfigurationOption.ConfigurationTypes.TYPE_STRING,
"Location of 'AssetSets.xml'",
string.Format(".{0}assets{0}AssetSets.xml", System.IO.Path.DirectorySeparatorChar), false);
} }
public bool handleIncomingConfiguration(string configuration_key, object configuration_result) public bool handleIncomingConfiguration(string configuration_key, object configuration_result)
@ -70,6 +75,9 @@ namespace OpenSim.Framework
case "database_connect": case "database_connect":
DatabaseConnect = (string) configuration_result; DatabaseConnect = (string) configuration_result;
break; break;
case "assetset_location":
AssetSetsLocation = (string) configuration_result;
break;
case "http_port": case "http_port":
HttpPort = (uint) configuration_result; HttpPort = (uint) configuration_result;
break; break;
@ -78,4 +86,4 @@ namespace OpenSim.Framework
return true; return true;
} }
} }
} }

View File

@ -86,12 +86,6 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
} }
} }
public void ForEachDefaultXmlAsset(Action<AssetBase> action)
{
string assetSetFilename = Path.Combine(Util.assetsDir(), "AssetSets.xml");
ForEachDefaultXmlAsset(assetSetFilename, action);
}
public void ForEachDefaultXmlAsset(string assetSetFilename, Action<AssetBase> action) public void ForEachDefaultXmlAsset(string assetSetFilename, Action<AssetBase> action)
{ {
@ -99,16 +93,18 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
if (File.Exists(assetSetFilename)) if (File.Exists(assetSetFilename))
{ {
string assetSetPath = "ERROR"; string assetSetPath = "ERROR";
string assetRootPath = "";
try try
{ {
XmlConfigSource source = new XmlConfigSource(assetSetFilename); XmlConfigSource source = new XmlConfigSource(assetSetFilename);
assetRootPath = Path.GetFullPath(source.SavePath);
assetRootPath = Path.GetDirectoryName(assetRootPath);
for (int i = 0; i < source.Configs.Count; i++) for (int i = 0; i < source.Configs.Count; i++)
{ {
assetSetPath = source.Configs[i].GetString("file", String.Empty); assetSetPath = source.Configs[i].GetString("file", String.Empty);
LoadXmlAssetSet(Path.Combine(Util.assetsDir(), assetSetPath), assets); LoadXmlAssetSet(Path.Combine(assetRootPath, assetSetPath), assets);
} }
} }
catch (XmlException e) catch (XmlException e)
@ -118,7 +114,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
} }
else else
{ {
m_log.Error("[ASSETS]: Asset set control file assets/AssetSets.xml does not exist! No assets loaded."); m_log.ErrorFormat("[ASSETS]: Asset set control file {0} does not exist! No assets loaded.", assetSetFilename);
} }
assets.ForEach(action); assets.ForEach(action);

View File

@ -106,11 +106,11 @@ namespace OpenSim.Framework.Communications.Cache
} }
} }
public virtual void LoadDefaultAssets() public virtual void LoadDefaultAssets(string pAssetSetsXml)
{ {
m_log.Info("[ASSET SERVER]: Setting up asset database"); m_log.Info("[ASSET SERVER]: Setting up asset database");
assetLoader.ForEachDefaultXmlAsset(StoreAsset); assetLoader.ForEachDefaultXmlAsset(pAssetSetsXml, StoreAsset);
} }
public AssetServerBase() public AssetServerBase()

View File

@ -52,11 +52,9 @@ namespace OpenSim.Framework.Communications.Cache
/// </summary> /// </summary>
protected Dictionary<UUID, InventoryFolderImpl> libraryFolders protected Dictionary<UUID, InventoryFolderImpl> libraryFolders
= new Dictionary<UUID, InventoryFolderImpl>(); = new Dictionary<UUID, InventoryFolderImpl>();
public LibraryRootFolder() public LibraryRootFolder(string pLibrariesLocation)
{ {
m_log.Info("[LIBRARY INVENTORY]: Loading library inventory");
Owner = libOwner; Owner = libOwner;
ID = new UUID("00000112-000f-0000-0000-000100bba000"); ID = new UUID("00000112-000f-0000-0000-000100bba000");
Name = "OpenSim Library"; Name = "OpenSim Library";
@ -66,7 +64,7 @@ namespace OpenSim.Framework.Communications.Cache
libraryFolders.Add(ID, this); libraryFolders.Add(ID, this);
LoadLibraries(Path.Combine(Util.inventoryDir(), "Libraries.xml")); LoadLibraries(pLibrariesLocation);
} }
public InventoryItemBase CreateItem(UUID inventoryID, UUID assetID, string name, string description, public InventoryItemBase CreateItem(UUID inventoryID, UUID assetID, string name, string description,
@ -96,9 +94,7 @@ namespace OpenSim.Framework.Communications.Cache
/// <param name="assets"></param> /// <param name="assets"></param>
protected void LoadLibraries(string librariesControlPath) protected void LoadLibraries(string librariesControlPath)
{ {
m_log.InfoFormat( m_log.InfoFormat("[LIBRARY INVENTORY]: Loading library control file {0}", librariesControlPath);
"[LIBRARY INVENTORY]: Loading libraries control file {0}", librariesControlPath);
LoadFromFile(librariesControlPath, "Libraries control", ReadLibraryFromConfig); LoadFromFile(librariesControlPath, "Libraries control", ReadLibraryFromConfig);
} }
@ -106,17 +102,18 @@ namespace OpenSim.Framework.Communications.Cache
/// Read a library set from config /// Read a library set from config
/// </summary> /// </summary>
/// <param name="config"></param> /// <param name="config"></param>
protected void ReadLibraryFromConfig(IConfig config) protected void ReadLibraryFromConfig(IConfig config, string path)
{ {
string basePath = Path.GetDirectoryName(path);
string foldersPath string foldersPath
= Path.Combine( = Path.Combine(
Util.inventoryDir(), config.GetString("foldersFile", String.Empty)); basePath, config.GetString("foldersFile", String.Empty));
LoadFromFile(foldersPath, "Library folders", ReadFolderFromConfig); LoadFromFile(foldersPath, "Library folders", ReadFolderFromConfig);
string itemsPath string itemsPath
= Path.Combine( = Path.Combine(
Util.inventoryDir(), config.GetString("itemsFile", String.Empty)); basePath, config.GetString("itemsFile", String.Empty));
LoadFromFile(itemsPath, "Library items", ReadItemFromConfig); LoadFromFile(itemsPath, "Library items", ReadItemFromConfig);
} }
@ -125,7 +122,7 @@ namespace OpenSim.Framework.Communications.Cache
/// Read a library inventory folder from a loaded configuration /// Read a library inventory folder from a loaded configuration
/// </summary> /// </summary>
/// <param name="source"></param> /// <param name="source"></param>
private void ReadFolderFromConfig(IConfig config) private void ReadFolderFromConfig(IConfig config, string path)
{ {
InventoryFolderImpl folderInfo = new InventoryFolderImpl(); InventoryFolderImpl folderInfo = new InventoryFolderImpl();
@ -158,7 +155,7 @@ namespace OpenSim.Framework.Communications.Cache
/// Read a library inventory item metadata from a loaded configuration /// Read a library inventory item metadata from a loaded configuration
/// </summary> /// </summary>
/// <param name="source"></param> /// <param name="source"></param>
private void ReadItemFromConfig(IConfig config) private void ReadItemFromConfig(IConfig config, string path)
{ {
InventoryItemBase item = new InventoryItemBase(); InventoryItemBase item = new InventoryItemBase();
item.Owner = libOwner; item.Owner = libOwner;
@ -195,7 +192,7 @@ namespace OpenSim.Framework.Communications.Cache
} }
} }
private delegate void ConfigAction(IConfig config); private delegate void ConfigAction(IConfig config, string path);
/// <summary> /// <summary>
/// Load the given configuration at a path and perform an action on each Config contained within it /// Load the given configuration at a path and perform an action on each Config contained within it
@ -213,7 +210,7 @@ namespace OpenSim.Framework.Communications.Cache
for (int i = 0; i < source.Configs.Count; i++) for (int i = 0; i < source.Configs.Count; i++)
{ {
action(source.Configs[i]); action(source.Configs[i], path);
} }
} }
catch (XmlException e) catch (XmlException e)

View File

@ -179,5 +179,30 @@ namespace OpenSim.Framework
get { return m_dumpAssetsToFile; } get { return m_dumpAssetsToFile; }
set { m_dumpAssetsToFile = value; } set { m_dumpAssetsToFile = value; }
} }
protected string m_librariesXMLFile;
public string LibrariesXMLFile
{
get
{
return m_librariesXMLFile;
}
set
{
m_librariesXMLFile = value;
}
}
protected string m_assetSetsXMLFile;
public string AssetSetsXMLFile
{
get
{
return m_assetSetsXMLFile;
}
set
{
m_assetSetsXMLFile = value;
}
}
} }
} }

View File

@ -31,7 +31,6 @@ namespace OpenSim.Framework
{ {
public interface IAssetLoader public interface IAssetLoader
{ {
void ForEachDefaultXmlAsset(Action<AssetBase> action);
void ForEachDefaultXmlAsset(string assetSetFilename, Action<AssetBase> action); void ForEachDefaultXmlAsset(string assetSetFilename, Action<AssetBase> action);
} }
} }

View File

@ -47,6 +47,7 @@ namespace OpenSim.Framework
public uint HttpPort = DefaultHttpPort; public uint HttpPort = DefaultHttpPort;
public bool HttpSSL = DefaultHttpSSL; public bool HttpSSL = DefaultHttpSSL;
public uint DefaultUserLevel = 0; public uint DefaultUserLevel = 0;
public string LibraryXmlfile = "";
private Uri m_inventoryUrl; private Uri m_inventoryUrl;
@ -109,6 +110,11 @@ namespace OpenSim.Framework
"Default Inventory Server URI", "Default Inventory Server URI",
"http://127.0.0.1:" + InventoryConfig.DefaultHttpPort + "/", "http://127.0.0.1:" + InventoryConfig.DefaultHttpPort + "/",
false); false);
configMember.addConfigurationOption("library_location",
ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY,
"Path to library control file",
string.Format(".{0}inventory{0}Libraries.xml", System.IO.Path.DirectorySeparatorChar), false);
configMember.addConfigurationOption("database_provider", ConfigurationOption.ConfigurationTypes.TYPE_STRING, configMember.addConfigurationOption("database_provider", ConfigurationOption.ConfigurationTypes.TYPE_STRING,
"DLL for database provider", "OpenSim.Data.MySQL.dll", false); "DLL for database provider", "OpenSim.Data.MySQL.dll", false);
configMember.addConfigurationOption("database_connect", ConfigurationOption.ConfigurationTypes.TYPE_STRING, configMember.addConfigurationOption("database_connect", ConfigurationOption.ConfigurationTypes.TYPE_STRING,
@ -173,7 +179,10 @@ namespace OpenSim.Framework
case "default_loginLevel": case "default_loginLevel":
DefaultUserLevel = (uint)configuration_result; DefaultUserLevel = (uint)configuration_result;
break; break;
case "library_location":
LibraryXmlfile = (string)configuration_result;
break;
} }
return true; return true;

View File

@ -87,8 +87,8 @@ namespace OpenSim.Grid.AssetServer
m_log.Info("[ASSET]: Setting up asset DB"); m_log.Info("[ASSET]: Setting up asset DB");
setupDB(config); setupDB(config);
m_log.Info("[ASSET]: Loading default asset set.."); m_log.Info("[ASSET]: Loading default asset set from '" + config.AssetSetsLocation + "'");
LoadDefaultAssets(); LoadDefaultAssets(config.AssetSetsLocation);
m_log.Info("[ASSET]: Starting HTTP process"); m_log.Info("[ASSET]: Starting HTTP process");
m_httpServer = new BaseHttpServer(config.HttpPort); m_httpServer = new BaseHttpServer(config.HttpPort);
@ -142,9 +142,9 @@ namespace OpenSim.Grid.AssetServer
} }
} }
public void LoadDefaultAssets() public void LoadDefaultAssets(string pAssetSetsLocation)
{ {
assetLoader.ForEachDefaultXmlAsset(StoreAsset); assetLoader.ForEachDefaultXmlAsset(pAssetSetsLocation, StoreAsset);
} }
protected void StoreAsset(AssetBase asset) protected void StoreAsset(AssetBase asset)

View File

@ -137,7 +137,7 @@ namespace OpenSim.Grid.UserServer
protected virtual void StartupLoginService(IInterServiceInventoryServices inventoryService) protected virtual void StartupLoginService(IInterServiceInventoryServices inventoryService)
{ {
m_loginService = new UserLoginService( m_loginService = new UserLoginService(
m_userManager, inventoryService, new LibraryRootFolder(), Cfg, Cfg.DefaultStartupMsg); m_userManager, inventoryService, new LibraryRootFolder(Cfg.LibraryXmlfile), Cfg, Cfg.DefaultStartupMsg);
} }
protected virtual void AddHttpHandlers() protected virtual void AddHttpHandlers()

View File

@ -43,8 +43,7 @@ namespace OpenSim
protected NetworkServersInfo m_networkServersInfo; protected NetworkServersInfo m_networkServersInfo;
public ConfigurationLoader() public ConfigurationLoader()
{ {
} }
public OpenSimConfigSource LoadConfigSettings(IConfigSource configSource, out ConfigSettings configSettings, out NetworkServersInfo networkInfo) public OpenSimConfigSource LoadConfigSettings(IConfigSource configSource, out ConfigSettings configSettings, out NetworkServersInfo networkInfo)
@ -149,7 +148,9 @@ namespace OpenSim
config.Set("userDatabase_plugin", "OpenSim.Data.SQLite.dll"); config.Set("userDatabase_plugin", "OpenSim.Data.SQLite.dll");
config.Set("user_source", ""); config.Set("user_source", "");
config.Set("asset_plugin", "OpenSim.Data.SQLite.dll"); config.Set("asset_plugin", "OpenSim.Data.SQLite.dll");
config.Set("asset_source", ""); config.Set("asset_source", "");
config.Set("LibrariesXMLFile", string.Format(".{0}inventory{0}Libraries.xml", Path.DirectorySeparatorChar));
config.Set("AssetSetsXMLFile", string.Format(".{0}assets{0}AssetSets.xml", Path.DirectorySeparatorChar));
config.Set("dump_assets_to_file", false); config.Set("dump_assets_to_file", false);
} }
@ -186,7 +187,6 @@ namespace OpenSim
m_configSettings.Standalone = !startupConfig.GetBoolean("gridmode", false); m_configSettings.Standalone = !startupConfig.GetBoolean("gridmode", false);
m_configSettings.PhysicsEngine = startupConfig.GetString("physics"); m_configSettings.PhysicsEngine = startupConfig.GetString("physics");
m_configSettings.MeshEngineName = startupConfig.GetString("meshing"); m_configSettings.MeshEngineName = startupConfig.GetString("meshing");
m_configSettings.PhysicalPrim = startupConfig.GetBoolean("physical_prim", true); m_configSettings.PhysicalPrim = startupConfig.GetBoolean("physical_prim", true);
m_configSettings.See_into_region_from_neighbor = startupConfig.GetBoolean("see_into_this_sim_from_neighbor", true); m_configSettings.See_into_region_from_neighbor = startupConfig.GetBoolean("see_into_this_sim_from_neighbor", true);
@ -218,7 +218,10 @@ namespace OpenSim
m_configSettings.StandaloneAssetPlugin = standaloneConfig.GetString("asset_plugin"); m_configSettings.StandaloneAssetPlugin = standaloneConfig.GetString("asset_plugin");
m_configSettings.StandaloneAssetSource = standaloneConfig.GetString("asset_source"); m_configSettings.StandaloneAssetSource = standaloneConfig.GetString("asset_source");
m_configSettings.DumpAssetsToFile = standaloneConfig.GetBoolean("dump_assets_to_file", false); m_configSettings.LibrariesXMLFile = standaloneConfig.GetString("LibrariesXMLFile");
m_configSettings.AssetSetsXMLFile = standaloneConfig.GetString("AssetSetsXMLFile");
m_configSettings.DumpAssetsToFile = standaloneConfig.GetBoolean("dump_assets_to_file", false);
} }
m_networkServersInfo.loadFromConfiguration(m_config.Source); m_networkServersInfo.loadFromConfiguration(m_config.Source);

View File

@ -178,7 +178,7 @@ namespace OpenSim
m_stats = StatsManager.StartCollectingSimExtraStats(); m_stats = StatsManager.StartCollectingSimExtraStats();
LibraryRootFolder libraryRootFolder = new LibraryRootFolder(); LibraryRootFolder libraryRootFolder = new LibraryRootFolder(m_configSettings.LibrariesXMLFile);
// StandAlone mode? is determined by !startupConfig.GetBoolean("gridmode", false) // StandAlone mode? is determined by !startupConfig.GetBoolean("gridmode", false)
if (m_configSettings.Standalone) if (m_configSettings.Standalone)
@ -291,7 +291,7 @@ namespace OpenSim
else else
{ {
SQLAssetServer sqlAssetServer = new SQLAssetServer(m_configSettings.StandaloneAssetPlugin, m_configSettings.StandaloneAssetSource); SQLAssetServer sqlAssetServer = new SQLAssetServer(m_configSettings.StandaloneAssetPlugin, m_configSettings.StandaloneAssetSource);
sqlAssetServer.LoadDefaultAssets(); sqlAssetServer.LoadDefaultAssets(m_configSettings.AssetSetsXMLFile);
assetServer = sqlAssetServer; assetServer = sqlAssetServer;
} }

View File

@ -178,7 +178,7 @@
;WorldMapModule = "WorldMap" ;WorldMapModule = "WorldMap"
;MapImageModule = "MapImageModule" ;MapImageModule = "MapImageModule"
[StandAlone] [StandAlone]
accounts_authenticate = true accounts_authenticate = true
@ -225,6 +225,14 @@
; User Source MySQL example ; User Source MySQL example
;user_source = "Data Source=localhost;Database=opensim;User ID=opensim;Password=****;" ;user_source = "Data Source=localhost;Database=opensim;User ID=opensim;Password=****;"
; Specifies the location and filename of the default inventory library control file. The path can be relative or absolute
; Default is ./inventory/Libraries.xml
;LibrariesXMLFile="./inventory/Libraries.xml"
; Specifies the location and filename of the inventory library assets control file. The path can be relative or absolute
; Setting is optional. Default is ./assets/AssetSets.xml
;AssetSetsXMLFile="./assets/AssetSets.xml"
dump_assets_to_file = false dump_assets_to_file = false