diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
index 922857f5ce..35e6495642 100644
--- a/OpenSim/Grid/AssetServer/Main.cs
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -1,189 +1,195 @@
-/*
-* 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 OpenSim 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.IO;
-using System.Reflection;
-using libsecondlife;
-using OpenSim.Framework;
-using OpenSim.Framework.AssetLoader.Filesystem;
-using OpenSim.Framework.Console;
-using OpenSim.Framework.Servers;
-
-namespace OpenSim.Grid.AssetServer
-{
- ///
- /// An asset server
- ///
- public class OpenAsset_Main : conscmd_callback
- {
- public AssetConfig m_config;
-
- public static OpenAsset_Main assetserver;
-
- private LogBase m_console;
-
- // Temporarily hardcoded - should be a plugin
- protected IAssetLoader assetLoader = new AssetLoaderFileSystem();
-
- private IAssetProvider m_assetProvider;
-
- [STAThread]
- public static void Main(string[] args)
- {
- Console.WriteLine("Starting...\n");
-
- assetserver = new OpenAsset_Main();
- assetserver.Startup();
-
- assetserver.Work();
- }
-
- private void Work()
- {
- m_console.Notice("Enter help for a list of commands");
-
- while (true)
- {
- m_console.MainLogPrompt();
- }
- }
-
- private OpenAsset_Main()
- {
- if (!Directory.Exists(Util.logDir()))
- {
- Directory.CreateDirectory(Util.logDir());
- }
- m_console =
- new LogBase((Path.Combine(Util.logDir(), "opengrid-AssetServer-console.log")), "OpenAsset", this, true);
- MainLog.Instance = m_console;
- }
-
- public void Startup()
- {
- m_config = new AssetConfig("ASSET SERVER", (Path.Combine(Util.configDir(), "AssetServer_Config.xml")));
-
- m_console.Verbose("ASSET", "Setting up asset DB");
- setupDB(m_config);
-
- m_console.Verbose("ASSET", "Loading default asset set..");
- LoadDefaultAssets();
-
- m_console.Verbose("ASSET", "Starting HTTP process");
- BaseHttpServer httpServer = new BaseHttpServer(m_config.HttpPort);
-
- httpServer.AddStreamHandler(new GetAssetStreamHandler(this, m_assetProvider));
- httpServer.AddStreamHandler(new PostAssetStreamHandler(this, m_assetProvider));
-
- httpServer.Start();
- }
-
- public byte[] GetAssetData(LLUUID assetID, bool isTexture)
- {
- return null;
- }
-
- public IAssetProvider LoadDatabasePlugin(string FileName)
- {
- MainLog.Instance.Verbose("ASSET SERVER", "LoadDatabasePlugin: Attempting to load " + FileName);
- Assembly pluginAssembly = Assembly.LoadFrom(FileName);
- IAssetProvider assetPlugin = null;
- foreach (Type pluginType in pluginAssembly.GetTypes())
- {
- if (!pluginType.IsAbstract)
- {
- Type typeInterface = pluginType.GetInterface("IAssetProvider", true);
-
- if (typeInterface != null)
- {
- IAssetProvider plug =
- (IAssetProvider) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
- assetPlugin = plug;
- assetPlugin.Initialise();
-
- MainLog.Instance.Verbose("ASSET SERVER", "Added " + assetPlugin.Name + " " + assetPlugin.Version);
- break;
- }
-
- typeInterface = null;
- }
- }
-
- pluginAssembly = null;
- return assetPlugin;
- }
-
- public void setupDB(AssetConfig config)
- {
- try
- {
- m_assetProvider = LoadDatabasePlugin(config.DatabaseProvider);
- if (m_assetProvider == null)
- {
- MainLog.Instance.Error("ASSET", "Failed to load a database plugin, server halting");
- Environment.Exit(-1);
- }
- }
- catch (Exception e)
- {
- MainLog.Instance.Warn("ASSET", "setupDB() - Exception occured");
- MainLog.Instance.Warn("ASSET", e.ToString());
- }
- }
-
- public void LoadDefaultAssets()
- {
- assetLoader.ForEachDefaultXmlAsset(StoreAsset);
- }
-
- protected void StoreAsset(AssetBase asset)
- {
- m_assetProvider.CreateAsset(asset);
- }
-
- public void RunCmd(string cmd, string[] cmdparams)
- {
- switch (cmd)
- {
- case "help":
- m_console.Notice("shutdown - shutdown this asset server (USE CAUTION!)");
- break;
-
- case "shutdown":
- m_console.Close();
- Environment.Exit(0);
- break;
- }
- }
-
- public void Show(string ShowWhat)
- {
- }
- }
-}
\ No newline at end of file
+/*
+* 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 OpenSim 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.IO;
+using System.Reflection;
+using libsecondlife;
+using OpenSim.Framework;
+using OpenSim.Framework.AssetLoader.Filesystem;
+using OpenSim.Framework.Console;
+using OpenSim.Framework.Servers;
+using OpenSim.Framework.Statistics;
+
+namespace OpenSim.Grid.AssetServer
+{
+ ///
+ /// An asset server
+ ///
+ public class OpenAsset_Main : BaseOpenSimServer, conscmd_callback
+ {
+ private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ public AssetConfig m_config;
+
+ public static OpenAsset_Main assetserver;
+
+ // Temporarily hardcoded - should be a plugin
+ protected IAssetLoader assetLoader = new AssetLoaderFileSystem();
+
+ private IAssetProvider m_assetProvider;
+
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ log4net.Config.XmlConfigurator.Configure();
+
+ m_log.Info("Starting...\n");
+
+ assetserver = new OpenAsset_Main();
+ assetserver.Startup();
+
+ assetserver.Work();
+ }
+
+ private void Work()
+ {
+ m_console.Notice("Enter help for a list of commands");
+
+ while (true)
+ {
+ m_console.Prompt();
+ }
+ }
+
+ private OpenAsset_Main()
+ {
+ m_console = new ConsoleBase("OpenAsset", this);
+
+ MainConsole.Instance = m_console;
+ }
+
+ public void Startup()
+ {
+ m_config = new AssetConfig("ASSET SERVER", (Path.Combine(Util.configDir(), "AssetServer_Config.xml")));
+
+ m_log.Info("[ASSET]: Setting up asset DB");
+ setupDB(m_config);
+
+ m_log.Info("[ASSET]: Loading default asset set..");
+ LoadDefaultAssets();
+
+ m_log.Info("[ASSET]: Starting HTTP process");
+ BaseHttpServer httpServer = new BaseHttpServer(m_config.HttpPort);
+
+ StatsManager.StartCollectingAssetStats();
+
+ httpServer.AddStreamHandler(new GetAssetStreamHandler(this, m_assetProvider));
+ httpServer.AddStreamHandler(new PostAssetStreamHandler(this, m_assetProvider));
+
+ httpServer.Start();
+ }
+
+ public byte[] GetAssetData(LLUUID assetID, bool isTexture)
+ {
+ return null;
+ }
+
+ public IAssetProvider LoadDatabasePlugin(string FileName)
+ {
+ m_log.Info("[ASSET SERVER]: LoadDatabasePlugin: Attempting to load " + FileName);
+ Assembly pluginAssembly = Assembly.LoadFrom(FileName);
+ IAssetProvider assetPlugin = null;
+ foreach (Type pluginType in pluginAssembly.GetTypes())
+ {
+ if (!pluginType.IsAbstract)
+ {
+ Type typeInterface = pluginType.GetInterface("IAssetProvider", true);
+
+ if (typeInterface != null)
+ {
+ IAssetProvider plug =
+ (IAssetProvider) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
+ assetPlugin = plug;
+ assetPlugin.Initialise();
+
+ m_log.Info("[ASSET SERVER]: Added " + assetPlugin.Name + " " + assetPlugin.Version);
+ break;
+ }
+
+ typeInterface = null;
+ }
+ }
+
+ pluginAssembly = null;
+ return assetPlugin;
+ }
+
+ public void setupDB(AssetConfig config)
+ {
+ try
+ {
+ m_assetProvider = LoadDatabasePlugin(config.DatabaseProvider);
+ if (m_assetProvider == null)
+ {
+ m_log.Error("[ASSET]: Failed to load a database plugin, server halting");
+ Environment.Exit(-1);
+ }
+ }
+ catch (Exception e)
+ {
+ m_log.Warn("[ASSET]: setupDB() - Exception occured");
+ m_log.Warn("[ASSET]: " + e.ToString());
+ }
+ }
+
+ public void LoadDefaultAssets()
+ {
+ assetLoader.ForEachDefaultXmlAsset(StoreAsset);
+ }
+
+ protected void StoreAsset(AssetBase asset)
+ {
+ m_assetProvider.CreateAsset(asset);
+ }
+
+ public override void RunCmd(string cmd, string[] cmdparams)
+ {
+ base.RunCmd(cmd, cmdparams);
+
+ switch (cmd)
+ {
+ case "help":
+ m_console.Notice(
+ @"shutdown - shutdown this asset server (USE CAUTION!)
+ stats - statistical information for this server");
+
+ break;
+
+ case "stats":
+ m_console.Notice("STATS", Environment.NewLine + StatsManager.AssetStats.Report());
+ break;
+
+ case "shutdown":
+ m_console.Close();
+ Environment.Exit(0);
+ break;
+ }
+ }
+ }
+}
diff --git a/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs
index 453d238e18..da4b435057 100644
--- a/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs
+++ b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs
@@ -1,63 +1,63 @@
-/*
-* 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 OpenSim 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.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-
-[assembly : AssemblyTitle("OGS-AssetServer")]
-[assembly : AssemblyDescription("")]
-[assembly : AssemblyConfiguration("")]
-[assembly : AssemblyCompany("")]
-[assembly : AssemblyProduct("OGS-AssetServer")]
-[assembly : AssemblyCopyright("Copyright © 2007")]
-[assembly : AssemblyTrademark("")]
-[assembly : AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-
-[assembly : ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-
-[assembly : Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-
-[assembly : AssemblyVersion("1.0.0.0")]
-[assembly : AssemblyFileVersion("1.0.0.0")]
\ No newline at end of file
+/*
+* 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 OpenSim 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.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+
+[assembly : AssemblyTitle("OGS-AssetServer")]
+[assembly : AssemblyDescription("")]
+[assembly : AssemblyConfiguration("")]
+[assembly : AssemblyCompany("")]
+[assembly : AssemblyProduct("OGS-AssetServer")]
+[assembly : AssemblyCopyright("Copyright © OpenSimulator.org Developers 2007-2008")]
+[assembly : AssemblyTrademark("")]
+[assembly : AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+
+[assembly : ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+
+[assembly : Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+
+[assembly : AssemblyVersion("1.0.0.0")]
+[assembly : AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Grid/AssetServer/RestService.cs b/OpenSim/Grid/AssetServer/RestService.cs
index 0ce4fd8003..7e6e84c19b 100644
--- a/OpenSim/Grid/AssetServer/RestService.cs
+++ b/OpenSim/Grid/AssetServer/RestService.cs
@@ -1,132 +1,155 @@
-/*
-* 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 OpenSim 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.IO;
-using System.Text;
-using System.Xml;
-using System.Xml.Serialization;
-using libsecondlife;
-using OpenSim.Framework;
-using OpenSim.Framework.Console;
-using OpenSim.Framework.Servers;
-
-namespace OpenSim.Grid.AssetServer
-{
- public class GetAssetStreamHandler : BaseStreamHandler
- {
- private OpenAsset_Main m_assetManager;
- private IAssetProvider m_assetProvider;
-
- public override byte[] Handle(string path, Stream request)
- {
- MainLog.Instance.Verbose("REST", "In Handle");
- string param = GetParam(path);
- byte[] result = new byte[] {};
- try
- {
- string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries);
-
- if (p.Length > 0)
- {
- LLUUID assetID = LLUUID.Parse(p[0]);
-
- MainLog.Instance.Verbose("REST", "GET:/asset fetch param={0} UUID={1}", param, assetID);
- AssetBase asset = m_assetProvider.FetchAsset(assetID);
- if (asset != null)
- {
- MainLog.Instance.Verbose("REST", "GET:/asset found {0}, {1}", assetID, asset.Name);
-
- XmlSerializer xs = new XmlSerializer(typeof (AssetBase));
- MemoryStream ms = new MemoryStream();
- XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8);
- xw.Formatting = Formatting.Indented;
- xs.Serialize(xw, asset);
- xw.Flush();
-
- ms.Seek(0, SeekOrigin.Begin);
- StreamReader sr = new StreamReader(ms);
-
- result = ms.GetBuffer();
- MainLog.Instance.Verbose("REST", "Buffer: {0}", result);
- Array.Resize(ref result, (int) ms.Length);
- }
- else
- {
- MainLog.Instance.Verbose("REST", "GET:/asset failed to find {0}", assetID);
- }
- }
- }
- catch (Exception e)
- {
- MainLog.Instance.Error(e.ToString());
- }
- return result;
- }
-
- public GetAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider)
- : base("GET", "/assets")
- {
- MainLog.Instance.Verbose("REST", "In Get Request");
- m_assetManager = assetManager;
- m_assetProvider = assetProvider;
- }
- }
-
- public class PostAssetStreamHandler : BaseStreamHandler
- {
- private OpenAsset_Main m_assetManager;
- private IAssetProvider m_assetProvider;
-
- public override byte[] Handle(string path, Stream request)
- {
- string param = GetParam(path);
-
- LLUUID assetId;
- if (param.Length > 0)
- LLUUID.TryParse(param, out assetId);
- byte[] txBuffer = new byte[4096];
-
- XmlSerializer xs = new XmlSerializer(typeof (AssetBase));
- AssetBase asset = (AssetBase) xs.Deserialize(request);
-
- MainLog.Instance.Verbose("REST", "StoreAndCommitAsset {0}", asset.FullID);
- m_assetProvider.CreateAsset(asset);
- m_assetProvider.CommitAssets();
-
- return new byte[] {};
- }
-
- public PostAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider)
- : base("POST", "/assets")
- {
- m_assetManager = assetManager;
- m_assetProvider = assetProvider;
- }
- }
-}
\ No newline at end of file
+/*
+* 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 OpenSim 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.IO;
+using System.Text;
+using System.Xml;
+using System.Xml.Serialization;
+using libsecondlife;
+using OpenSim.Framework;
+using OpenSim.Framework.Console;
+using OpenSim.Framework.Servers;
+using OpenSim.Framework.Statistics;
+
+namespace OpenSim.Grid.AssetServer
+{
+ public class GetAssetStreamHandler : BaseStreamHandler
+ {
+ private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ private OpenAsset_Main m_assetManager;
+ private IAssetProvider m_assetProvider;
+
+ ///
+ /// Constructor.
+ ///
+ ///
+ ///
+ public GetAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider)
+ : base("GET", "/assets")
+ {
+ m_log.Info("[REST]: In Get Request");
+ m_assetManager = assetManager;
+ m_assetProvider = assetProvider;
+ }
+
+ public override byte[] Handle(string path, Stream request)
+ {
+ string param = GetParam(path);
+ byte[] result = new byte[] {};
+ try
+ {
+ string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries);
+
+ if (p.Length > 0)
+ {
+ LLUUID assetID = null;
+
+ if (!LLUUID.TryParse(p[0], out assetID))
+ {
+ m_log.InfoFormat(
+ "[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]);
+ return result;
+ }
+
+ if (StatsManager.AssetStats != null)
+ StatsManager.AssetStats.AddRequest();
+
+ AssetBase asset = m_assetProvider.FetchAsset(assetID);
+ if (asset != null)
+ {
+ XmlSerializer xs = new XmlSerializer(typeof (AssetBase));
+ MemoryStream ms = new MemoryStream();
+ XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8);
+ xw.Formatting = Formatting.Indented;
+ xs.Serialize(xw, asset);
+ xw.Flush();
+
+ ms.Seek(0, SeekOrigin.Begin);
+ //StreamReader sr = new StreamReader(ms);
+
+ result = ms.GetBuffer();
+
+ m_log.InfoFormat(
+ "[REST]: GET:/asset found {0} with name {1}, size {2} bytes",
+ assetID, asset.Name, result.Length);
+
+ Array.Resize(ref result, (int) ms.Length);
+ }
+ else
+ {
+ if (StatsManager.AssetStats != null)
+ StatsManager.AssetStats.AddNotFoundRequest();
+
+ m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ m_log.Error(e.ToString());
+ }
+ return result;
+ }
+ }
+
+ public class PostAssetStreamHandler : BaseStreamHandler
+ {
+ private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ private OpenAsset_Main m_assetManager;
+ private IAssetProvider m_assetProvider;
+
+ public override byte[] Handle(string path, Stream request)
+ {
+ string param = GetParam(path);
+
+ LLUUID assetId;
+ if (param.Length > 0)
+ LLUUID.TryParse(param, out assetId);
+ byte[] txBuffer = new byte[4096];
+
+ XmlSerializer xs = new XmlSerializer(typeof (AssetBase));
+ AssetBase asset = (AssetBase) xs.Deserialize(request);
+
+ m_log.InfoFormat("[REST]: StoreAndCommitAsset {0}", asset.FullID);
+ m_assetProvider.CreateAsset(asset);
+ m_assetProvider.CommitAssets();
+
+ return new byte[] {};
+ }
+
+ public PostAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider)
+ : base("POST", "/assets")
+ {
+ m_assetManager = assetManager;
+ m_assetProvider = assetProvider;
+ }
+ }
+}