diff --git a/src/HeightMapGenHills.cs b/OpenSim.FrameWork/HeightMapGenHills.cs similarity index 96% rename from src/HeightMapGenHills.cs rename to OpenSim.FrameWork/HeightMapGenHills.cs index e7589aff00..6a729da553 100644 --- a/src/HeightMapGenHills.cs +++ b/OpenSim.FrameWork/HeightMapGenHills.cs @@ -27,7 +27,7 @@ using System; -namespace OpenSim +namespace OpenSim.Framework.Terrain { public class HeightmapGenHills { diff --git a/OpenSim.FrameWork/IAssetServer.cs b/OpenSim.FrameWork/IAssetServer.cs index f6e6d7d934..76c63fc193 100644 --- a/OpenSim.FrameWork/IAssetServer.cs +++ b/OpenSim.FrameWork/IAssetServer.cs @@ -61,21 +61,6 @@ namespace OpenSim.Framework.Interfaces public bool IsTexture; } - /*public class AssetBase - { - public byte[] Data; - public LLUUID FullID; - public sbyte Type; - public sbyte InvType; - public string Name; - public string Description; - - public AssetBase() - { - - } - }*/ - public interface IAssetPlugin { IAssetServer GetAssetServer(); diff --git a/src/Config.cs b/OpenSim.FrameWork/IConfig.cs similarity index 88% rename from src/Config.cs rename to OpenSim.FrameWork/IConfig.cs index d36388b412..355bd6cea4 100644 --- a/src/Config.cs +++ b/OpenSim.FrameWork/IConfig.cs @@ -31,9 +31,9 @@ using System; using System.Collections.Generic; using System.IO; using libsecondlife; -using OpenSim.world; +//using OpenSim.world; -namespace OpenSim +namespace OpenSim.Framework.Interfaces { /// /// This class handles connection to the underlying database used for configuration of the region. @@ -60,10 +60,10 @@ namespace OpenSim public string GridURL; public string GridSendKey; - public abstract void InitConfig(); - public abstract void LoadFromGrid(); - public abstract World LoadWorld(); - public abstract void SaveMap(); + public abstract void InitConfig(bool sandboxMode); + public abstract void LoadFromGrid(); + public abstract float[] LoadWorld(); + public abstract void SaveMap(float[] heightmap); } diff --git a/OpenSim.FrameWork/IUserServer.cs b/OpenSim.FrameWork/IUserServer.cs new file mode 100644 index 0000000000..5e9d96e20d --- /dev/null +++ b/OpenSim.FrameWork/IUserServer.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OpenSim.Framework.Inventory; +using libsecondlife; + +namespace OpenSim.Framework.Interfaces +{ + public interface IUserServer + { + AgentInventory RequestAgentsInventory(LLUUID agentID); + } +} diff --git a/OpenSim.FrameWork/OpenSim.Framework.csproj b/OpenSim.FrameWork/OpenSim.Framework.csproj index 3b5c8ee628..61665f8309 100644 --- a/OpenSim.FrameWork/OpenSim.Framework.csproj +++ b/OpenSim.FrameWork/OpenSim.Framework.csproj @@ -41,10 +41,13 @@ + + + diff --git a/OpenSim.FrameWork/UserProfileManagerBase.cs b/OpenSim.FrameWork/UserProfileManagerBase.cs index 9a79b09119..ad03bc23d2 100644 --- a/OpenSim.FrameWork/UserProfileManagerBase.cs +++ b/OpenSim.FrameWork/UserProfileManagerBase.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using libsecondlife; using OpenSim.Framework.Utilities; +using OpenSim.Framework.Inventory; namespace OpenSim.Framework.User { @@ -75,5 +76,16 @@ namespace OpenSim.Framework.User return newprofile; } + public virtual AgentInventory GetUsersInventory(LLUUID agentID) + { + UserProfile user = this.GetProfileByLLUUID(agentID); + if (user != null) + { + return user.Inventory; + } + + return null; + } + } } diff --git a/OpenSim.FrameWork/Util.cs b/OpenSim.FrameWork/Util.cs index d864d3f88a..620a6a549e 100644 --- a/OpenSim.FrameWork/Util.cs +++ b/OpenSim.FrameWork/Util.cs @@ -8,11 +8,21 @@ namespace OpenSim.Framework.Utilities { public class Util { + private static Random randomClass = new Random(); + public static ulong UIntsToLong(uint X, uint Y) { return Helpers.UIntsToLong(X, Y); } + public static Random RandomClass + { + get + { + return randomClass; + } + } + public Util() { diff --git a/bin/PhysicsManager.dll b/bin/PhysicsManager.dll index 311d9d1ac4..12faf24fea 100644 Binary files a/bin/PhysicsManager.dll and b/bin/PhysicsManager.dll differ diff --git a/bin/RemoteGridServers.dll b/bin/RemoteGridServers.dll index 019b90d047..2c56a58f22 100644 Binary files a/bin/RemoteGridServers.dll and b/bin/RemoteGridServers.dll differ diff --git a/bin/ServerConsole.dll b/bin/ServerConsole.dll index 9afcf97f4e..cad4163544 100644 Binary files a/bin/ServerConsole.dll and b/bin/ServerConsole.dll differ diff --git a/bin/SimConfig.dll b/bin/SimConfig.dll index 9af49b5853..1b14d11ef2 100644 Binary files a/bin/SimConfig.dll and b/bin/SimConfig.dll differ diff --git a/src/CAPS/SimHttp.cs b/src/CAPS/SimHttp.cs index b473036935..32b7001555 100644 --- a/src/CAPS/SimHttp.cs +++ b/src/CAPS/SimHttp.cs @@ -63,7 +63,7 @@ namespace OpenSim ServerConsole.MainConsole.Instance.WriteLine("SimHttp.cs:StartHTTP() - Spawned main thread OK"); Listener = new HttpListener(); - Listener.Prefixes.Add("http://+:" + OpenSim_Main.cfg.IPListenPort + "/"); + Listener.Prefixes.Add("http://+:" + OpenSim_Main.Instance.Cfg.IPListenPort + "/"); Listener.Start(); HttpListenerContext context; @@ -96,9 +96,9 @@ namespace OpenSim agent_data.lastname = (string)requestData["lastname"]; agent_data.AgentID = new LLUUID((string)requestData["agent_id"]); agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); - if (OpenSim_Main.gridServers.GridServer.GetName() == "Remote") + if (OpenSim_Main.Instance.GridServers.GridServer.GetName() == "Remote") { - ((RemoteGridBase)OpenSim_Main.gridServers.GridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data); + ((RemoteGridBase)OpenSim_Main.Instance.GridServers.GridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data); } return ""; break; diff --git a/src/Config/SimConfig/Db4SimConfig.cs b/src/Config/SimConfig/Db4SimConfig.cs index 7037c444f9..1fafc10153 100644 --- a/src/Config/SimConfig/Db4SimConfig.cs +++ b/src/Config/SimConfig/Db4SimConfig.cs @@ -28,7 +28,9 @@ using System; using System.Collections.Generic; using OpenSim; using OpenSim.Framework.Utilities; -using OpenSim.world; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Terrain; +//using OpenSim.world; using Db4objects.Db4o; namespace Db40SimConfig @@ -44,6 +46,7 @@ namespace Db40SimConfig public class DbSimConfig :SimConfig { + private bool isSandbox; private IObjectContainer db; public void LoadDefaults() { @@ -55,7 +58,7 @@ namespace Db40SimConfig this.IPListenPort=Convert.ToInt32(ServerConsole.MainConsole.Instance.CmdPrompt("UDP port for client connections [9000]: ","9000")); this.IPListenAddr=ServerConsole.MainConsole.Instance.CmdPrompt("IP Address to listen on for client connections [127.0.0.1]: ","127.0.0.1"); - if(!OpenSim_Main.sim.sandbox) + if(!isSandbox) { this.AssetURL=ServerConsole.MainConsole.Instance.CmdPrompt("Asset server URL: "); this.AssetSendKey=ServerConsole.MainConsole.Instance.CmdPrompt("Asset server key: "); @@ -65,7 +68,8 @@ namespace Db40SimConfig this.RegionHandle = Util.UIntsToLong((RegionLocX*256), (RegionLocY*256)); } - public override void InitConfig() { + public override void InitConfig(bool sandboxMode) { + this.isSandbox = sandboxMode; try { db = Db4oFactory.OpenFile("opensim.yap"); IObjectSet result = db.Get(typeof(DbSimConfig)); @@ -100,37 +104,40 @@ namespace Db40SimConfig ServerConsole.MainConsole.Instance.WriteLine("Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]"); ServerConsole.MainConsole.Instance.WriteLine("Region Handle: " + this.RegionHandle.ToString()); ServerConsole.MainConsole.Instance.WriteLine("Listening on IP: " + this.IPListenAddr + ":" + this.IPListenPort); - ServerConsole.MainConsole.Instance.WriteLine("Sandbox Mode? " + OpenSim_Main.sim.sandbox.ToString()); + ServerConsole.MainConsole.Instance.WriteLine("Sandbox Mode? " + isSandbox.ToString()); ServerConsole.MainConsole.Instance.WriteLine("Asset URL: " + this.AssetURL); ServerConsole.MainConsole.Instance.WriteLine("Asset key: " + this.AssetSendKey); ServerConsole.MainConsole.Instance.WriteLine("Grid URL: " + this.GridURL); ServerConsole.MainConsole.Instance.WriteLine("Grid key: " + this.GridSendKey); } - public override World LoadWorld() + public override float[] LoadWorld() { ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Loading world...."); - World blank = new World(); + //World blank = new World(); + float[] heightmap = null; ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Looking for a heightmap in local DB"); IObjectSet world_result = db.Get(typeof(MapStorage)); if(world_result.Count>0) { ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Found a heightmap in local database, loading"); MapStorage map=(MapStorage)world_result.Next(); - blank.LandMap = map.Map; + //blank.LandMap = map.Map; + heightmap = map.Map; } else { ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - No heightmap found, generating new one"); HeightmapGenHills hills = new HeightmapGenHills(); - blank.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false); + // blank.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false); + heightmap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false); ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Saving heightmap to local database"); MapStorage map= new MapStorage(); - map.Map = blank.LandMap; + map.Map = heightmap; //blank.LandMap; db.Set(map); db.Commit(); } - return blank; + return heightmap; } - public override void SaveMap() + public override void SaveMap(float[] heightmap) { IObjectSet world_result = db.Get(typeof(MapStorage)); if(world_result.Count>0) { @@ -139,7 +146,7 @@ namespace Db40SimConfig db.Delete(map); } MapStorage map1= new MapStorage(); - map1.Map = OpenSim_Main.local_world.LandMap; + map1.Map = heightmap; //OpenSim_Main.local_world.LandMap; db.Set(map1); db.Commit(); } diff --git a/src/Config/SimConfig/SimConfig.csproj b/src/Config/SimConfig/SimConfig.csproj index 9a689ef6b0..9993b61983 100644 --- a/src/Config/SimConfig/SimConfig.csproj +++ b/src/Config/SimConfig/SimConfig.csproj @@ -44,10 +44,6 @@ {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} ServerConsole - - {132A6E3E-8F2D-4BF5-BDFB-8555F53F334E} - Second-server - \ No newline at end of file diff --git a/src/Grid.cs b/src/Grid.cs new file mode 100644 index 0000000000..d310bdb59d --- /dev/null +++ b/src/Grid.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.LocalServers; + +namespace OpenSim +{ + public class Grid + { + public IAssetServer AssetServer; + public IGridServer GridServer; + public string AssetDll = ""; + public string GridDll = ""; + + public Grid() + { + } + + public void LoadPlugins() + { + this.AssetServer = this.LoadAssetDll(this.AssetDll); + this.GridServer = this.LoadGridDll(this.GridDll); + } + public void Close() + { + this.AssetServer.Close(); + this.GridServer.Close(); + } + + private IAssetServer LoadAssetDll(string dllName) + { + Assembly pluginAssembly = Assembly.LoadFrom(dllName); + IAssetServer server = null; + + foreach (Type pluginType in pluginAssembly.GetTypes()) + { + if (pluginType.IsPublic) + { + if (!pluginType.IsAbstract) + { + Type typeInterface = pluginType.GetInterface("IAssetPlugin", true); + + if (typeInterface != null) + { + IAssetPlugin plug = (IAssetPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + server = plug.GetAssetServer(); + break; + } + + typeInterface = null; + } + } + } + pluginAssembly = null; + return server; + } + + private IGridServer LoadGridDll(string dllName) + { + Assembly pluginAssembly = Assembly.LoadFrom(dllName); + IGridServer server = null; + + foreach (Type pluginType in pluginAssembly.GetTypes()) + { + if (pluginType.IsPublic) + { + if (!pluginType.IsAbstract) + { + Type typeInterface = pluginType.GetInterface("IGridPlugin", true); + + if (typeInterface != null) + { + IGridPlugin plug = (IGridPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + server = plug.GetGridServer(); + break; + } + + typeInterface = null; + } + } + } + pluginAssembly = null; + return server; + } + } +} diff --git a/src/GridServers/LocalUserProfileManager.cs b/src/GridServers/LocalUserProfileManager.cs index 4952f04ff7..cb4c545d16 100644 --- a/src/GridServers/LocalUserProfileManager.cs +++ b/src/GridServers/LocalUserProfileManager.cs @@ -19,13 +19,18 @@ namespace OpenSim.Framework.LocalServers _gridServer = gridServer; } + public override void InitUserProfiles() + { + // TODO: need to load from database + } + public override void CustomiseResponse(ref System.Collections.Hashtable response, UserProfile theUser) { uint circode = (uint)response["circuit_code"]; theUser.AddSimCircuit(circode, LLUUID.Random()); response["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + theUser.homepos.X.ToString() + ",r" + theUser.homepos.Y.ToString() + ",r" + theUser.homepos.Z.ToString() + "], 'look_at':[r" + theUser.homelookat.X.ToString() + ",r" + theUser.homelookat.Y.ToString() + ",r" + theUser.homelookat.Z.ToString() + "]}"; - response["sim_port"] = OpenSim_Main.cfg.IPListenPort; - response["sim_ip"] = OpenSim_Main.cfg.IPListenAddr; + response["sim_port"] = OpenSim_Main.Instance.Cfg.IPListenPort; + response["sim_ip"] = OpenSim_Main.Instance.Cfg.IPListenAddr; response["region_y"] = (Int32)996 * 256; response["region_x"] = (Int32)997* 256; @@ -62,7 +67,7 @@ namespace OpenSim.Framework.LocalServers _login.InventoryFolder = new LLUUID((string)Inventory1["folder_id"]); //working on local computer if so lets add to the gridserver's list of sessions? - if (OpenSim_Main.gridServers.GridServer.GetName() == "Local") + if (OpenSim_Main.Instance.GridServers.GridServer.GetName() == "Local") { ((LocalGridBase)this._gridServer).AddNewSession(_login); } diff --git a/src/GridServers/LoginServer.cs b/src/GridServers/LoginServer.cs index cc14263dca..57b08bb4d8 100644 --- a/src/GridServers/LoginServer.cs +++ b/src/GridServers/LoginServer.cs @@ -42,6 +42,7 @@ using OpenSim.Framework.Interfaces; using OpenSim.Framework.Grid; using OpenSim.Framework.Inventory; using OpenSim.Framework.User; +using OpenSim.Framework.Utilities; namespace OpenSim.Framework.LocalServers { @@ -49,20 +50,13 @@ namespace OpenSim.Framework.LocalServers /// /// When running in local (default) mode , handles client logins. /// - public class LoginServer : LoginService + public class LoginServer : LoginService , IUserServer { - public LoginServer(IGridServer gridServer) - { - _gridServer = gridServer; - } - - private Login _login; private IGridServer _gridServer; private ushort _loginPort = 8080; public IPAddress clientAddress = IPAddress.Loopback; public IPAddress remoteAddress = IPAddress.Any; private Socket loginServer; - private Random RandomClass = new Random(); private int NumClients; private string _defaultResponse; private bool userAccounts = false; @@ -70,6 +64,11 @@ namespace OpenSim.Framework.LocalServers private bool _needPasswd = false; private LocalUserProfileManager userManager; + public LoginServer(IGridServer gridServer) + { + _gridServer = gridServer; + } + // InitializeLogin: initialize the login private void InitializeLogin() { @@ -89,7 +88,10 @@ namespace OpenSim.Framework.LocalServers } SR.Close(); this._mpasswd = EncodePassword("testpass"); + userManager = new LocalUserProfileManager(this._gridServer); + userManager.InitUserProfiles(); + userManager.SetKeys("", "", "", "Welcome to OpenSim"); loginServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); loginServer.Bind(new IPEndPoint(remoteAddress, _loginPort)); @@ -174,6 +176,7 @@ namespace OpenSim.Framework.LocalServers if (this.userAccounts) { + //ask the UserProfile Manager to process the request string reply = this.userManager.ParseXMLRPC(new String(content)); // forward the XML-RPC response to the client writer.WriteLine("HTTP/1.0 200 OK"); @@ -183,138 +186,158 @@ namespace OpenSim.Framework.LocalServers } else { + //handle ourselves XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(new String(content)); - this.ProcessXmlRequest(request, writer); + if (request.MethodName == "login_to_simulator") + { + this.ProcessXmlRequest(request, writer); + } + else + { + XmlRpcResponse PresenceErrorResp = new XmlRpcResponse(); + Hashtable PresenceErrorRespData = new Hashtable(); + PresenceErrorRespData["reason"] = "XmlRequest"; ; + PresenceErrorRespData["message"] = "Unknown Rpc request"; + PresenceErrorRespData["login"] = "false"; + PresenceErrorResp.Value = PresenceErrorRespData; + string reply = Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(PresenceErrorResp), " encoding=\"utf-16\"", ""); + writer.WriteLine("HTTP/1.0 200 OK"); + writer.WriteLine("Content-type: text/xml"); + writer.WriteLine(); + writer.WriteLine(reply); + } } } } public bool ProcessXmlRequest(XmlRpcRequest request, StreamWriter writer) { - if (request.MethodName == "login_to_simulator") + Hashtable requestData = (Hashtable)request.Params[0]; + string first; + string last; + string passwd; + LLUUID Agent; + LLUUID Session; + + //get login name + if (requestData.Contains("first")) { - Hashtable requestData = (Hashtable)request.Params[0]; - string first; - string last; - string passwd; - LLUUID Agent; - LLUUID Session; - - //get login name - if (requestData.Contains("first")) - { - first = (string)requestData["first"]; - } - else - { - first = "test"; - } - - if (requestData.Contains("last")) - { - last = (string)requestData["last"]; - } - else - { - last = "User" + NumClients.ToString(); - } - - if (requestData.Contains("passwd")) - { - passwd = (string)requestData["passwd"]; - } - else - { - passwd = "notfound"; - } - - if (!Authenticate(first, last, passwd)) - { - // Fail miserably - writer.WriteLine("HTTP/1.0 403 Authentication Forbidden"); - writer.WriteLine(); - return false; - } - NumClients++; - - //create a agent and session LLUUID - Agent = GetAgentId(first, last); - int SessionRand = this.RandomClass.Next(1, 999); - Session = new LLUUID("aaaabbbb-0200-" + SessionRand.ToString("0000") + "-8664-58f53e442797"); - - //create some login info - Hashtable LoginFlagsHash = new Hashtable(); - LoginFlagsHash["daylight_savings"] = "N"; - LoginFlagsHash["stipend_since_login"] = "N"; - LoginFlagsHash["gendered"] = "Y"; - LoginFlagsHash["ever_logged_in"] = "Y"; - ArrayList LoginFlags = new ArrayList(); - LoginFlags.Add(LoginFlagsHash); - - Hashtable GlobalT = new Hashtable(); - GlobalT["sun_texture_id"] = "cce0f112-878f-4586-a2e2-a8f104bba271"; - GlobalT["cloud_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; - GlobalT["moon_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; - ArrayList GlobalTextures = new ArrayList(); - GlobalTextures.Add(GlobalT); - - XmlRpcResponse response = (XmlRpcResponse)(new XmlRpcResponseDeserializer()).Deserialize(this._defaultResponse); - Hashtable responseData = (Hashtable)response.Value; - - responseData["sim_port"] = OpenSim_Main.cfg.IPListenPort; - responseData["sim_ip"] = OpenSim_Main.cfg.IPListenAddr; - responseData["agent_id"] = Agent.ToStringHyphenated(); - responseData["session_id"] = Session.ToStringHyphenated(); - responseData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; - responseData["login-flags"] = LoginFlags; - responseData["global-textures"] = GlobalTextures; - - //inventory - ArrayList InventoryList = (ArrayList)responseData["inventory-skeleton"]; - Hashtable Inventory1 = (Hashtable)InventoryList[0]; - Hashtable Inventory2 = (Hashtable)InventoryList[1]; - LLUUID BaseFolderID = LLUUID.Random(); - LLUUID InventoryFolderID = LLUUID.Random(); - Inventory2["name"] = "Base"; - Inventory2["folder_id"] = BaseFolderID.ToStringHyphenated(); - Inventory2["type_default"] = 6; - Inventory1["folder_id"] = InventoryFolderID.ToStringHyphenated(); - - ArrayList InventoryRoot = (ArrayList)responseData["inventory-root"]; - Hashtable Inventoryroot = (Hashtable)InventoryRoot[0]; - Inventoryroot["folder_id"] = InventoryFolderID.ToStringHyphenated(); - - CustomiseLoginResponse(responseData, first, last); - - this._login = new Login(); - //copy data to login object - _login.First = first; - _login.Last = last; - _login.Agent = Agent; - _login.Session = Session; - _login.BaseFolder = BaseFolderID; - _login.InventoryFolder = InventoryFolderID; - - //working on local computer if so lets add to the gridserver's list of sessions? - if (OpenSim_Main.gridServers.GridServer.GetName() == "Local") - { - ((LocalGridBase)this._gridServer).AddNewSession(_login); - } - - // forward the XML-RPC response to the client - writer.WriteLine("HTTP/1.0 200 OK"); - writer.WriteLine("Content-type: text/xml"); - writer.WriteLine(); - - XmlTextWriter responseWriter = new XmlTextWriter(writer); - XmlRpcResponseSerializer.Singleton.Serialize(responseWriter, response); - responseWriter.Close(); + first = (string)requestData["first"]; } else { - writer.WriteLine("HTTP/1.0 403 Authentication Forbidden"); - writer.WriteLine(); + first = "test"; } + + if (requestData.Contains("last")) + { + last = (string)requestData["last"]; + } + else + { + last = "User" + NumClients.ToString(); + } + + if (requestData.Contains("passwd")) + { + passwd = (string)requestData["passwd"]; + } + else + { + passwd = "notfound"; + } + + if (!Authenticate(first, last, passwd)) + { + XmlRpcResponse PresenceErrorResp = new XmlRpcResponse(); + Hashtable PresenceErrorRespData = new Hashtable(); + PresenceErrorRespData["reason"] = "key"; ; + PresenceErrorRespData["message"] = "You have entered an invalid name/password combination. Check Caps/lock."; + PresenceErrorRespData["login"] = "false"; + PresenceErrorResp.Value = PresenceErrorRespData; + string reply = Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(PresenceErrorResp), " encoding=\"utf-16\"", ""); + writer.WriteLine("HTTP/1.0 200 OK"); + writer.WriteLine("Content-type: text/xml"); + writer.WriteLine(); + writer.WriteLine(reply); + return false; + } + + NumClients++; + + //create a agent and session LLUUID + Agent = GetAgentId(first, last); + int SessionRand = Util.RandomClass.Next(1, 999); + Session = new LLUUID("aaaabbbb-0200-" + SessionRand.ToString("0000") + "-8664-58f53e442797"); + + //create some login info + Hashtable LoginFlagsHash = new Hashtable(); + LoginFlagsHash["daylight_savings"] = "N"; + LoginFlagsHash["stipend_since_login"] = "N"; + LoginFlagsHash["gendered"] = "Y"; + LoginFlagsHash["ever_logged_in"] = "Y"; + ArrayList LoginFlags = new ArrayList(); + LoginFlags.Add(LoginFlagsHash); + + Hashtable GlobalT = new Hashtable(); + GlobalT["sun_texture_id"] = "cce0f112-878f-4586-a2e2-a8f104bba271"; + GlobalT["cloud_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; + GlobalT["moon_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; + ArrayList GlobalTextures = new ArrayList(); + GlobalTextures.Add(GlobalT); + + XmlRpcResponse response = (XmlRpcResponse)(new XmlRpcResponseDeserializer()).Deserialize(this._defaultResponse); + Hashtable responseData = (Hashtable)response.Value; + + responseData["sim_port"] = OpenSim_Main.Instance.Cfg.IPListenPort; + responseData["sim_ip"] = OpenSim_Main.Instance.Cfg.IPListenAddr; + responseData["agent_id"] = Agent.ToStringHyphenated(); + responseData["session_id"] = Session.ToStringHyphenated(); + responseData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; + responseData["login-flags"] = LoginFlags; + responseData["global-textures"] = GlobalTextures; + + //inventory + ArrayList InventoryList = (ArrayList)responseData["inventory-skeleton"]; + Hashtable Inventory1 = (Hashtable)InventoryList[0]; + Hashtable Inventory2 = (Hashtable)InventoryList[1]; + LLUUID BaseFolderID = LLUUID.Random(); + LLUUID InventoryFolderID = LLUUID.Random(); + Inventory2["name"] = "Base"; + Inventory2["folder_id"] = BaseFolderID.ToStringHyphenated(); + Inventory2["type_default"] = 6; + Inventory1["folder_id"] = InventoryFolderID.ToStringHyphenated(); + + ArrayList InventoryRoot = (ArrayList)responseData["inventory-root"]; + Hashtable Inventoryroot = (Hashtable)InventoryRoot[0]; + Inventoryroot["folder_id"] = InventoryFolderID.ToStringHyphenated(); + + CustomiseLoginResponse(responseData, first, last); + + Login _login = new Login(); + //copy data to login object + _login.First = first; + _login.Last = last; + _login.Agent = Agent; + _login.Session = Session; + _login.BaseFolder = BaseFolderID; + _login.InventoryFolder = InventoryFolderID; + + //working on local computer if so lets add to the gridserver's list of sessions? + if (OpenSim_Main.Instance.GridServers.GridServer.GetName() == "Local") + { + ((LocalGridBase)this._gridServer).AddNewSession(_login); + } + + // forward the XML-RPC response to the client + writer.WriteLine("HTTP/1.0 200 OK"); + writer.WriteLine("Content-type: text/xml"); + writer.WriteLine(); + + XmlTextWriter responseWriter = new XmlTextWriter(writer); + XmlRpcResponseSerializer.Singleton.Serialize(responseWriter, response); + responseWriter.Close(); + return true; } @@ -325,7 +348,7 @@ namespace OpenSim.Framework.LocalServers protected virtual LLUUID GetAgentId(string firstName, string lastName) { LLUUID Agent; - int AgentRand = this.RandomClass.Next(1, 9999); + int AgentRand = Util.RandomClass.Next(1, 9999); Agent = new LLUUID("99998888-0100-" + AgentRand.ToString("0000") + "-8ec1-0b1d5cd6aead"); return Agent; } @@ -365,6 +388,17 @@ namespace OpenSim.Framework.LocalServers return Regex.Replace(BitConverter.ToString(encodedBytes), "-", "").ToLower(); } + public AgentInventory RequestAgentsInventory(LLUUID agentID) + { + AgentInventory aInventory = null; + if (this.userAccounts) + { + aInventory = this.userManager.GetUsersInventory(agentID); + } + + return aInventory; + } + } diff --git a/src/Main.cs b/src/Main.cs index 6a3b6fb8b2..3c48d179e7 100644 --- a/src/Main.cs +++ b/src/Main.cs @@ -52,12 +52,23 @@ namespace OpenSim /// public class OpenSim_Main { - public static OpenSim_Main sim; - public static SimConfig cfg; - public static World local_world; - public static Grid gridServers; + private static OpenSim_Main instance = null; + + public static OpenSim_Main Instance + { + get + { + return instance; + } + } + + public World LocalWorld; + public Grid GridServers; + public SimConfig Cfg; + public SimCAPSHTTPServer HttpServer; + public AssetCache AssetCache; + public InventoryManager InventoryCache; - public SimCAPSHTTPServer http_server; public Socket Server; private IPEndPoint ServerIncoming; private byte[] RecvBuffer = new byte[4096]; @@ -66,8 +77,6 @@ namespace OpenSim private EndPoint epSender; private AsyncCallback ReceivedData; - public AssetCache assetCache; - public InventoryManager inventoryManager; public DateTime startuptime; public Dictionary ClientThreads = new Dictionary(); private PhysicsManager physManager; @@ -84,55 +93,55 @@ namespace OpenSim Console.WriteLine("Starting...\n"); ServerConsole.MainConsole.Instance = new MServerConsole(ServerConsole.ConsoleBase.ConsoleType.Local, "", 0); - sim = new OpenSim_Main(); + instance = new OpenSim_Main(); - sim.sandbox = false; - sim.loginserver = false; - sim._physicsEngine = "PhysX"; + Instance.sandbox = false; + Instance.loginserver = false; + Instance._physicsEngine = "PhysX"; for (int i = 0; i < args.Length; i++) { if (args[i] == "-sandbox") { - sim.sandbox = true; + Instance.sandbox = true; } if (args[i] == "-loginserver") { - sim.loginserver = true; + Instance.loginserver = true; } if (args[i] == "-realphysx") { - sim._physicsEngine = "RealPhysX"; + Instance._physicsEngine = "RealPhysX"; OpenSim.world.Avatar.PhysicsEngineFlying = true; } } - OpenSim_Main.gridServers = new Grid(); - if (sim.sandbox) + OpenSim_Main.Instance.GridServers = new Grid(); + if (Instance.sandbox) { - OpenSim_Main.gridServers.AssetDll = "LocalGridServers.dll"; - OpenSim_Main.gridServers.GridDll = "LocalGridServers.dll"; - OpenSim_Main.gridServers.LoadPlugins(); + OpenSim_Main.Instance.GridServers.AssetDll = "LocalGridServers.dll"; + OpenSim_Main.Instance.GridServers.GridDll = "LocalGridServers.dll"; + OpenSim_Main.Instance.GridServers.LoadPlugins(); ServerConsole.MainConsole.Instance.WriteLine("Starting in Sandbox mode"); } else { - OpenSim_Main.gridServers.AssetDll = "RemoteGridServers.dll"; - OpenSim_Main.gridServers.GridDll = "RemoteGridServers.dll"; - OpenSim_Main.gridServers.LoadPlugins(); + OpenSim_Main.Instance.GridServers.AssetDll = "RemoteGridServers.dll"; + OpenSim_Main.Instance.GridServers.GridDll = "RemoteGridServers.dll"; + OpenSim_Main.Instance.GridServers.LoadPlugins(); ServerConsole.MainConsole.Instance.WriteLine("Starting in Grid mode"); } - if (sim.loginserver && sim.sandbox) + if (Instance.loginserver && Instance.sandbox) { - LoginServer loginServer = new LoginServer(OpenSim_Main.gridServers.GridServer); + LoginServer loginServer = new LoginServer(OpenSim_Main.Instance.GridServers.GridServer); loginServer.Startup(); } - sim.assetCache = new AssetCache(OpenSim_Main.gridServers.AssetServer); - sim.inventoryManager = new InventoryManager(); + Instance.AssetCache = new AssetCache(OpenSim_Main.Instance.GridServers.AssetServer); + Instance.InventoryCache = new InventoryManager(); - sim.Startup(); + Instance.Startup(); while (true) { @@ -150,41 +159,41 @@ namespace OpenSim // We check our local database first, then the grid for config options ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Loading configuration"); - cfg = this.LoadConfigDll(this.ConfigDll); - cfg.InitConfig(); + Cfg = this.LoadConfigDll(this.ConfigDll); + Cfg.InitConfig(this.sandbox); ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Contacting gridserver"); - cfg.LoadFromGrid(); + Cfg.LoadFromGrid(); - ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - We are " + cfg.RegionName + " at " + cfg.RegionLocX.ToString() + "," + cfg.RegionLocY.ToString()); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - We are " + Cfg.RegionName + " at " + Cfg.RegionLocX.ToString() + "," + Cfg.RegionLocY.ToString()); ServerConsole.MainConsole.Instance.WriteLine("Initialising world"); - local_world = cfg.LoadWorld(); + Instance.LocalWorld = new World(); + Instance.LocalWorld.LandMap = Cfg.LoadWorld(); this.physManager = new PhysicsSystem.PhysicsManager(); this.physManager.LoadPlugins(); ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting up messaging system"); - local_world.PhysScene = this.physManager.GetPhysicsScene(this._physicsEngine); //should be reading from the config file what physics engine to use - local_world.PhysScene.SetTerrain(local_world.LandMap); + Instance.LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this._physicsEngine); //should be reading from the config file what physics engine to use + Instance.LocalWorld.PhysScene.SetTerrain(Instance.LocalWorld.LandMap); - OpenSim_Main.gridServers.AssetServer.SetServerInfo(OpenSim_Main.cfg.AssetURL, OpenSim_Main.cfg.AssetSendKey); - OpenSim_Main.gridServers.GridServer.SetServerInfo(OpenSim_Main.cfg.GridURL, OpenSim_Main.cfg.GridSendKey); + OpenSim_Main.Instance.GridServers.AssetServer.SetServerInfo(OpenSim_Main.Instance.Cfg.AssetURL, OpenSim_Main.Instance.Cfg.AssetSendKey); + OpenSim_Main.Instance.GridServers.GridServer.SetServerInfo(OpenSim_Main.Instance.Cfg.GridURL, OpenSim_Main.Instance.Cfg.GridSendKey); - local_world.LoadStorageDLL("Db4LocalStorage.dll"); //all these dll names shouldn't be hard coded. - local_world.LoadPrimsFromStorage(); + Instance.LocalWorld.LoadStorageDLL("Db4LocalStorage.dll"); //all these dll names shouldn't be hard coded. + Instance.LocalWorld.LoadPrimsFromStorage(); if (this.sandbox) { - this.assetCache.LoadDefaultTextureSet(); + this.AssetCache.LoadDefaultTextureSet(); } ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting CAPS HTTP server"); - http_server = new SimCAPSHTTPServer(); + HttpServer = new SimCAPSHTTPServer(); timer1.Enabled = true; timer1.Interval = 100; timer1.Elapsed += new ElapsedEventHandler(this.Timer1Tick); MainServerListener(); - } private SimConfig LoadConfigDll(string dllName) @@ -244,9 +253,9 @@ namespace OpenSim private void MainServerListener() { ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - New thread started"); - ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + cfg.IPListenAddr + ":" + cfg.IPListenPort); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + Cfg.IPListenAddr + ":" + Cfg.IPListenPort); - ServerIncoming = new IPEndPoint(IPAddress.Any, cfg.IPListenPort); + ServerIncoming = new IPEndPoint(IPAddress.Any, Cfg.IPListenPort); Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Server.Bind(ServerIncoming); @@ -268,8 +277,8 @@ namespace OpenSim ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Killing clients"); // IMPLEMENT THIS ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Closing console and terminating"); - OpenSim_Main.local_world.Close(); - OpenSim_Main.gridServers.Close(); + OpenSim_Main.Instance.LocalWorld.Close(); + OpenSim_Main.Instance.GridServers.Close(); ServerConsole.MainConsole.Instance.Close(); Environment.Exit(0); } @@ -277,86 +286,9 @@ namespace OpenSim void Timer1Tick(object sender, System.EventArgs e) { - local_world.Update(); + Instance.LocalWorld.Update(); } } - public class Grid - { - public IAssetServer AssetServer; - public IGridServer GridServer; - public string AssetDll = ""; - public string GridDll = ""; - - public Grid() - { - } - - public void LoadPlugins() - { - this.AssetServer = this.LoadAssetDll(this.AssetDll); - this.GridServer = this.LoadGridDll(this.GridDll); - } - public void Close() - { - this.AssetServer.Close(); - this.GridServer.Close(); - } - - private IAssetServer LoadAssetDll(string dllName) - { - Assembly pluginAssembly = Assembly.LoadFrom(dllName); - IAssetServer server = null; - - foreach (Type pluginType in pluginAssembly.GetTypes()) - { - if (pluginType.IsPublic) - { - if (!pluginType.IsAbstract) - { - Type typeInterface = pluginType.GetInterface("IAssetPlugin", true); - - if (typeInterface != null) - { - IAssetPlugin plug = (IAssetPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); - server = plug.GetAssetServer(); - break; - } - - typeInterface = null; - } - } - } - pluginAssembly = null; - return server; - } - - private IGridServer LoadGridDll(string dllName) - { - Assembly pluginAssembly = Assembly.LoadFrom(dllName); - IGridServer server = null; - - foreach (Type pluginType in pluginAssembly.GetTypes()) - { - if (pluginType.IsPublic) - { - if (!pluginType.IsAbstract) - { - Type typeInterface = pluginType.GetInterface("IGridPlugin", true); - - if (typeInterface != null) - { - IGridPlugin plug = (IGridPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); - server = plug.GetGridServer(); - break; - } - - typeInterface = null; - } - } - } - pluginAssembly = null; - return server; - } - } + } diff --git a/src/OpenSimClient.cs b/src/OpenSimClient.cs index 062d04e8a6..3aa3480f7e 100644 --- a/src/OpenSimClient.cs +++ b/src/OpenSimClient.cs @@ -103,15 +103,15 @@ namespace OpenSim switch (Pack.Type) { case PacketType.CompleteAgentMovement: - ClientAvatar.CompleteMovement(OpenSim_Main.local_world); + ClientAvatar.CompleteMovement(OpenSim_Main.Instance.LocalWorld); ClientAvatar.SendInitialPosition(); break; case PacketType.RegionHandshakeReply: - OpenSim_Main.local_world.SendLayerData(this); + OpenSim_Main.Instance.LocalWorld.SendLayerData(this); break; case PacketType.AgentWearablesRequest: ClientAvatar.SendInitialAppearance(); - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { if (client.AgentID != this.AgentID) { @@ -120,10 +120,10 @@ namespace OpenSim client.ClientAvatar.SendAppearanceToOtherAgent(this); } } - OpenSim_Main.local_world.GetInitialPrims(this); + OpenSim_Main.Instance.LocalWorld.GetInitialPrims(this); break; case PacketType.ObjectAdd: - OpenSim_Main.local_world.AddNewPrim((ObjectAddPacket)Pack, this); + OpenSim_Main.Instance.LocalWorld.AddNewPrim((ObjectAddPacket)Pack, this); break; case PacketType.ObjectLink: ServerConsole.MainConsole.Instance.WriteLine(Pack.ToString()); @@ -135,7 +135,7 @@ namespace OpenSim ObjectShapePacket shape = (ObjectShapePacket)Pack; for (int i = 0; i < shape.ObjectData.Length; i++) { - foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + foreach (Entity ent in OpenSim_Main.Instance.LocalWorld.Entities.Values) { if (ent.localid == shape.ObjectData[i].ObjectLocalID) { @@ -152,7 +152,7 @@ namespace OpenSim if (multipleupdate.ObjectData[i].Type == 9) //change position { libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); - foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + foreach (Entity ent in OpenSim_Main.Instance.LocalWorld.Entities.Values) { if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) { @@ -166,7 +166,7 @@ namespace OpenSim else if (multipleupdate.ObjectData[i].Type == 10)//rotation { libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true); - foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + foreach (Entity ent in OpenSim_Main.Instance.LocalWorld.Entities.Values) { if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) { @@ -179,7 +179,7 @@ namespace OpenSim { libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12); - foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + foreach (Entity ent in OpenSim_Main.Instance.LocalWorld.Entities.Values) { if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) { @@ -193,13 +193,13 @@ namespace OpenSim RequestImagePacket imageRequest = (RequestImagePacket)Pack; for (int i = 0; i < imageRequest.RequestImage.Length; i++) { - OpenSim_Main.sim.assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image); + OpenSim_Main.Instance.AssetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image); } break; case PacketType.TransferRequest: //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request"); TransferRequestPacket transfer = (TransferRequestPacket)Pack; - OpenSim_Main.sim.assetCache.AddAssetRequest(this, transfer); + OpenSim_Main.Instance.AssetCache.AddAssetRequest(this, transfer); break; case PacketType.AgentUpdate: ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack); @@ -219,17 +219,17 @@ namespace OpenSim kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); kill.ObjectData[0].ID = this.ClientAvatar.localid; - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(kill); } - OpenSim_Main.gridServers.GridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode); - lock (OpenSim_Main.local_world.Entities) + OpenSim_Main.Instance.GridServers.GridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode); + lock (OpenSim_Main.Instance.LocalWorld.Entities) { - OpenSim_Main.local_world.Entities.Remove(this.AgentID); + OpenSim_Main.Instance.LocalWorld.Entities.Remove(this.AgentID); } //need to do other cleaning up here too - OpenSim_Main.sim.ClientThreads.Remove(this.userEP); + OpenSim_Main.Instance.ClientThreads.Remove(this.userEP); this.ClientThread.Abort(); break; case PacketType.ChatFromViewer: @@ -246,7 +246,7 @@ namespace OpenSim reply.ChatData.FromName = _enc.GetBytes(this.ClientAvatar.firstname + " " + this.ClientAvatar.lastname + "\0"); reply.ChatData.OwnerID = this.AgentID; reply.ChatData.SourceID = this.AgentID; - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(reply); } @@ -255,7 +255,7 @@ namespace OpenSim ObjectImagePacket imagePack = (ObjectImagePacket)Pack; for (int i = 0; i < imagePack.ObjectData.Length; i++) { - foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + foreach (Entity ent in OpenSim_Main.Instance.LocalWorld.Entities.Values) { if (ent.localid == imagePack.ObjectData[i].ObjectLocalID) { @@ -266,7 +266,7 @@ namespace OpenSim break; case PacketType.ObjectFlagUpdate: ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack; - foreach (Entity ent in OpenSim_Main.local_world.Entities.Values) + foreach (Entity ent in OpenSim_Main.Instance.LocalWorld.Entities.Values) { if (ent.localid == flags.AgentData.ObjectLocalID) { @@ -321,11 +321,11 @@ namespace OpenSim case PacketType.FetchInventory: Console.WriteLine("fetch item packet"); FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack; - OpenSim_Main.sim.inventoryManager.FetchInventory(this, FetchInventory); + OpenSim_Main.Instance.InventoryCache.FetchInventory(this, FetchInventory); break; case PacketType.FetchInventoryDescendents: FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack; - OpenSim_Main.sim.inventoryManager.FetchInventoryDescendents(this, Fetch); + OpenSim_Main.Instance.InventoryCache.FetchInventoryDescendents(this, Fetch); break; } } @@ -464,11 +464,11 @@ namespace OpenSim if (Pack.Header.Zerocoded) { int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer); - OpenSim_Main.sim.Server.SendTo(ZeroOutBuffer, packetsize, SocketFlags.None, userEP); + OpenSim_Main.Instance.Server.SendTo(ZeroOutBuffer, packetsize, SocketFlags.None, userEP); } else { - OpenSim_Main.sim.Server.SendTo(sendbuffer, sendbuffer.Length, SocketFlags.None, userEP); + OpenSim_Main.Instance.Server.SendTo(sendbuffer, sendbuffer.Length, SocketFlags.None, userEP); } } catch (Exception) @@ -569,14 +569,14 @@ namespace OpenSim private void InitNewClient() { ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:InitNewClient() - Adding viewer agent to world"); - OpenSim_Main.local_world.AddViewerAgent(this); - world.Entity tempent = OpenSim_Main.local_world.Entities[this.AgentID]; + OpenSim_Main.Instance.LocalWorld.AddViewerAgent(this); + world.Entity tempent = OpenSim_Main.Instance.LocalWorld.Entities[this.AgentID]; this.ClientAvatar = (world.Avatar)tempent; } private void AuthUser() { - AuthenticateResponse sessionInfo = OpenSim_Main.gridServers.GridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code); + AuthenticateResponse sessionInfo = OpenSim_Main.Instance.GridServers.GridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code); if (!sessionInfo.Authorised) { //session/circuit not authorised @@ -595,16 +595,16 @@ namespace OpenSim this.ClientAvatar.lastname = sessionInfo.LoginInfo.Last; // Create Inventory, currently only works for sandbox mode - if (OpenSim_Main.sim.sandbox) + if (OpenSim_Main.Instance.sandbox) { if (sessionInfo.LoginInfo.InventoryFolder != null) { this.CreateInventory(sessionInfo.LoginInfo.InventoryFolder); if (sessionInfo.LoginInfo.BaseFolder != null) { - OpenSim_Main.sim.inventoryManager.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder); + OpenSim_Main.Instance.InventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder); this.newAssetFolder = sessionInfo.LoginInfo.BaseFolder; - AssetBase[] inventorySet = OpenSim_Main.sim.assetCache.CreateNewInventorySet(this.AgentID); + AssetBase[] inventorySet = OpenSim_Main.Instance.AssetCache.CreateNewInventorySet(this.AgentID); if (inventorySet != null) { for (int i = 0; i < inventorySet.Length; i++) @@ -612,7 +612,7 @@ namespace OpenSim if (inventorySet[i] != null) { Console.WriteLine(Helpers.FieldToString(inventorySet[i].Data)); - OpenSim_Main.sim.inventoryManager.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]); + OpenSim_Main.Instance.InventoryCache.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]); } } } @@ -628,8 +628,8 @@ namespace OpenSim { AgentInventory inventory = new AgentInventory(); inventory.AgentID = this.AgentID; - OpenSim_Main.sim.inventoryManager.AddNewAgentsInventory(inventory); - OpenSim_Main.sim.inventoryManager.CreateNewInventoryFolder(this, baseFolder); + OpenSim_Main.Instance.InventoryCache.AddNewAgentsInventory(inventory); + OpenSim_Main.Instance.InventoryCache.CreateNewInventoryFolder(this, baseFolder); } } diff --git a/src/OpenSimConsole.cs b/src/OpenSimConsole.cs index cf8b648330..6a94288599 100644 --- a/src/OpenSimConsole.cs +++ b/src/OpenSimConsole.cs @@ -156,7 +156,7 @@ namespace OpenSim break; case "regenerate": - OpenSim_Main.local_world.RegenerateTerrain(); + OpenSim_Main.Instance.LocalWorld.RegenerateTerrain(); break; case "shutdown": @@ -170,16 +170,16 @@ namespace OpenSim public override void ShowCommands(string ShowWhat) { switch(ShowWhat) { case "uptime": - this.WriteLine("OpenSim has been running since " + OpenSim_Main.sim.startuptime.ToString()); - this.WriteLine("That is " + (DateTime.Now-OpenSim_Main.sim.startuptime).ToString()); + this.WriteLine("OpenSim has been running since " + OpenSim_Main.Instance.startuptime.ToString()); + this.WriteLine("That is " + (DateTime.Now-OpenSim_Main.Instance.startuptime).ToString()); break; case "users": OpenSim.world.Avatar TempAv; this.WriteLine(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16}{5,-16}","Firstname", "Lastname","Agent ID", "Session ID", "Circuit", "IP")); - foreach (libsecondlife.LLUUID UUID in OpenSim_Main.local_world.Entities.Keys) { - if(OpenSim_Main.local_world.Entities[UUID].ToString()== "OpenSim.world.Avatar") + foreach (libsecondlife.LLUUID UUID in OpenSim_Main.Instance.LocalWorld.Entities.Keys) { + if(OpenSim_Main.Instance.LocalWorld.Entities[UUID].ToString()== "OpenSim.world.Avatar") { - TempAv=(OpenSim.world.Avatar)OpenSim_Main.local_world.Entities[UUID]; + TempAv=(OpenSim.world.Avatar)OpenSim_Main.Instance.LocalWorld.Entities[UUID]; this.WriteLine(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}",TempAv.firstname, TempAv.lastname,UUID, TempAv.ControllingClient.SessionID, TempAv.ControllingClient.CircuitCode, TempAv.ControllingClient.userEP.ToString())); } } @@ -190,7 +190,7 @@ namespace OpenSim // Displays a prompt to the user and then runs the command they entered public override void MainConsolePrompt() { string[] tempstrarray; - string tempstr = this.CmdPrompt("OpenSim-" + OpenSim_Main.cfg.RegionHandle.ToString() + " # "); + string tempstr = this.CmdPrompt("OpenSim-" + OpenSim_Main.Instance.Cfg.RegionHandle.ToString() + " # "); tempstrarray = tempstr.Split(' '); string cmd=tempstrarray[0]; Array.Reverse(tempstrarray); diff --git a/src/Second-server.csproj b/src/Second-server.csproj index fa5bdbef99..f4dcae8fa8 100644 --- a/src/Second-server.csproj +++ b/src/Second-server.csproj @@ -57,7 +57,7 @@ - + @@ -73,20 +73,11 @@ - - - {D7F0395B-FADC-4936-80A0-D95AACE92F62} - LocalGridServers - - - {74784F23-B0FD-484C-82C1-96C0215733DC} - Db4LocalStorage - {2E46A825-3168-492F-93BC-637126B5B72B} OpenSim.Framework @@ -95,10 +86,6 @@ {3C86A846-7977-4EE7-A8DC-DD487FA5DC2B} PhysicsManager - - {CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5} - RemoteGridServers - {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} ServerConsole diff --git a/src/Util.cs b/src/Util.cs deleted file mode 100644 index 4323b6f58a..0000000000 --- a/src/Util.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* -Copyright (c) OpenSim project, http://osgrid.org/ - -* Copyright (c) , -* All rights reserved. -* -* 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 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 ``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 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 System.Threading; -using libsecondlife; -using libsecondlife.Packets; - -namespace OpenSim -{ - /// - /// - /// - public class Util - { - public static ulong UIntsToLong(uint X, uint Y) - { - return Helpers.UIntsToLong(X, Y); - } - public Util() - { - - } - } - - public class QueItem - { - public QueItem() - { - } - - public Packet Packet; - public bool Incoming; - } - - public class BlockingQueue - { - private Queue _queue = new Queue(); - private object _queueSync = new object(); - - public void Enqueue(T value) - { - lock (_queueSync) - { - _queue.Enqueue(value); - Monitor.Pulse(_queueSync); - } - } - - public T Dequeue() - { - lock (_queueSync) - { - if (_queue.Count < 1) - Monitor.Wait(_queueSync); - - return _queue.Dequeue(); - } - } - } -} diff --git a/src/world/Avatar.cs b/src/world/Avatar.cs index 477dd62465..0717c56f44 100644 --- a/src/world/Avatar.cs +++ b/src/world/Avatar.cs @@ -27,9 +27,9 @@ namespace OpenSim.world { ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)"); ControllingClient = TheClient; - localid = 8880000 + (OpenSim_Main.local_world._localNumber++); + localid = 8880000 + (OpenSim_Main.Instance.LocalWorld._localNumber++); position = new LLVector3(100.0f, 100.0f, 30.0f); - position.Z = OpenSim_Main.local_world.LandMap[(int)position.Y * 256 + (int)position.X] + 1; + position.Z = OpenSim_Main.Instance.LocalWorld.LandMap[(int)position.Y * 256 + (int)position.X] + 1; } public PhysicsActor PhysActor @@ -73,11 +73,11 @@ namespace OpenSim.world //use CreateTerseBlock() ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock(); ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = terseBlock; - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(terse); } @@ -95,11 +95,11 @@ namespace OpenSim.world //It has been a while since last update was sent so lets send one. ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock(); ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = terseBlock; - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(terse); } @@ -141,7 +141,7 @@ namespace OpenSim.world AgentMovementCompletePacket mov = new AgentMovementCompletePacket(); mov.AgentData.SessionID = this.ControllingClient.SessionID; mov.AgentData.AgentID = this.ControllingClient.AgentID; - mov.Data.RegionHandle = OpenSim_Main.cfg.RegionHandle; + mov.Data.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; // TODO - dynamicalise this stuff mov.Data.Timestamp = 1172750370; mov.Data.Position = new LLVector3(100f, 100f, 23f); @@ -156,7 +156,7 @@ namespace OpenSim.world System.Text.Encoding _enc = System.Text.Encoding.ASCII; //send a objectupdate packet with information about the clients avatar ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; + objupdate.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -171,9 +171,9 @@ namespace OpenSim.world byte[] pb = pos2.GetBytes(); Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); - OpenSim_Main.local_world._localNumber++; + OpenSim_Main.Instance.LocalWorld._localNumber++; - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(objupdate); if (client.AgentID != ControllingClient.AgentID) @@ -215,7 +215,7 @@ namespace OpenSim.world System.Text.Encoding _enc = System.Text.Encoding.ASCII; //send a objectupdate packet with information about the clients avatar ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; + objupdate.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -394,7 +394,7 @@ namespace OpenSim.world handshake.RegionInfo.SimAccess = 13; handshake.RegionInfo.WaterHeight = 20; handshake.RegionInfo.RegionFlags = 72458694; - handshake.RegionInfo.SimName = _enc.GetBytes(OpenSim_Main.cfg.RegionName + "\0"); + handshake.RegionInfo.SimName = _enc.GetBytes(OpenSim_Main.Instance.Cfg.RegionName + "\0"); handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000"); handshake.RegionInfo.TerrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); handshake.RegionInfo.TerrainBase1 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3"); diff --git a/src/world/Primitive.cs b/src/world/Primitive.cs index 3195b1e448..149dd8665b 100644 --- a/src/world/Primitive.cs +++ b/src/world/Primitive.cs @@ -99,7 +99,7 @@ namespace OpenSim.world { if (this.newPrimFlag) { - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(OurPacket); } @@ -108,11 +108,11 @@ namespace OpenSim.world else if (this.updateFlag) { ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = this.CreateImprovedBlock(); - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(terse); } @@ -120,7 +120,7 @@ namespace OpenSim.world } else if (this.dirtyFlag) { - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { UpdateClient(client); } @@ -131,11 +131,11 @@ namespace OpenSim.world if (this._physActor != null && this.physicsEnabled) { ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = this.CreateImprovedBlock(); - foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) + foreach (OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { client.OutPacket(terse); } @@ -254,7 +254,7 @@ namespace OpenSim.world public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID) { ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; + objupdate.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -301,8 +301,6 @@ namespace OpenSim.world PData.PathTwist = objupdate.ObjectData[0].PathTwist = addPacket.ObjectData.PathTwist; PData.PathTwistBegin = objupdate.ObjectData[0].PathTwistBegin = addPacket.ObjectData.PathTwistBegin; - //finish off copying rest of shape data - objupdate.ObjectData[0].ID = (uint)(localID); objupdate.ObjectData[0].FullID = new LLUUID("edba7151-5857-acc5-b30b-f01efef" + (localID - 702000).ToString("00000")); objupdate.ObjectData[0].ObjectData = new byte[60]; @@ -324,7 +322,7 @@ namespace OpenSim.world { //need to clean this up as it shares a lot of code with CreateFromPacket() ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; + objupdate.RegionData.RegionHandle = OpenSim_Main.Instance.Cfg.RegionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -476,12 +474,11 @@ namespace OpenSim.world public override void BackUp() { - this.primData.FullID = this.uuid; this.primData.LocalID = this.localid; this.primData.Position = this.position; this.primData.Rotation = new LLQuaternion(this.rotation.x, this.rotation.y, this.rotation.z, this.rotation.w); - OpenSim_Main.local_world.localStorage.StorePrim(this.primData); + OpenSim_Main.Instance.LocalWorld.localStorage.StorePrim(this.primData); } } diff --git a/src/world/World.cs b/src/world/World.cs index d55830c1b0..fbab044e15 100644 --- a/src/world/World.cs +++ b/src/world/World.cs @@ -8,6 +8,7 @@ using System.IO; using PhysicsSystem; using OpenSim.Framework.Interfaces; using OpenSim.Framework.Assets; +using OpenSim.Framework.Terrain; namespace OpenSim.world { @@ -113,9 +114,9 @@ namespace OpenSim.world HeightmapGenHills hills = new HeightmapGenHills(); this.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false); this.phyScene.SetTerrain(this.LandMap); - OpenSim_Main.cfg.SaveMap(); + OpenSim_Main.Instance.Cfg.SaveMap(this.LandMap); - foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) { + foreach(OpenSimClient client in OpenSim_Main.Instance.ClientThreads.Values) { this.SendLayerData(client); } }