From dd5f4abdb9423dd767ccb1c8be310e40fdd1ad43 Mon Sep 17 00:00:00 2001 From: gareth Date: Fri, 13 Apr 2007 15:14:21 +0000 Subject: Fixed weird XML/HTTP bugs Can now update a sim profile at startup automatically! W00t! Untested neighbours code (for sim crossings) Didn't drink any red bull today :( Used liquid guarana extract + cola --- OpenGridServices.GridServer/Main.cs | 20 +++------ OpenGridServices.GridServer/SimProfiles.cs | 65 +++++++++++++++++++----------- OpenSim.RegionServer/RegionInfo.cs | 6 ++- OpenSim.Servers/BaseHttpServer.cs | 6 ++- 4 files changed, 56 insertions(+), 41 deletions(-) diff --git a/OpenGridServices.GridServer/Main.cs b/OpenGridServices.GridServer/Main.cs index c69b6dc..55e2b00 100644 --- a/OpenGridServices.GridServer/Main.cs +++ b/OpenGridServices.GridServer/Main.cs @@ -47,20 +47,10 @@ namespace OpenGridServices.GridServer public class OpenGrid_Main : BaseServer, conscmd_callback { private string ConfigDll = "OpenGrid.Config.GridConfigDb4o.dll"; - private GridConfig Cfg; + public GridConfig Cfg; public static OpenGrid_Main thegrid; - public string GridOwner; - public string DefaultStartupMsg; - public string DefaultAssetServer; - public string AssetSendKey; - public string AssetRecvKey; - public string DefaultUserServer; - public string UserSendKey; - public string UserRecvKey; - public string SimSendKey; - public string SimRecvKey; //public LLUUID highestUUID; private SimProfileManager m_simProfileManager; @@ -109,10 +99,10 @@ namespace OpenGridServices.GridServer httpServer.AddXmlRPCHandler("simulator_login", m_simProfileManager.XmlRpcLoginToSimulatorMethod); - httpServer.AddRestHandler("GET", "/sims", m_simProfileManager.RestGetSimMethod); - httpServer.AddRestHandler("POST", "/sims", m_simProfileManager.RestSetSimMethod); - httpServer.AddRestHandler("GET", "/regions", m_simProfileManager.RestGetRegionMethod); - httpServer.AddRestHandler("POST", "/regions", m_simProfileManager.RestSetRegionMethod); + httpServer.AddRestHandler("GET", "/sims/", m_simProfileManager.RestGetSimMethod); + httpServer.AddRestHandler("POST", "/sims/", m_simProfileManager.RestSetSimMethod); + httpServer.AddRestHandler("GET", "/regions/", m_simProfileManager.RestGetRegionMethod); + httpServer.AddRestHandler("POST", "/regions/", m_simProfileManager.RestSetRegionMethod); // lbsa71 : This code snippet taken from old http server. diff --git a/OpenGridServices.GridServer/SimProfiles.cs b/OpenGridServices.GridServer/SimProfiles.cs index 9e93db0..5e02b4f 100644 --- a/OpenGridServices.GridServer/SimProfiles.cs +++ b/OpenGridServices.GridServer/SimProfiles.cs @@ -71,7 +71,10 @@ namespace OpenGridServices.GridServer } public SimProfileBase GetProfileByLLUUID(LLUUID ProfileLLUUID) { - return SimProfiles[ProfileLLUUID]; + foreach (libsecondlife.LLUUID UUID in SimProfiles.Keys) { + if(SimProfiles[UUID].UUID==ProfileLLUUID) return SimProfiles[UUID]; + } + return null; } public bool AuthenticateSim(LLUUID RegionUUID, uint regionhandle, string simrecvkey) { @@ -172,13 +175,13 @@ namespace OpenGridServices.GridServer responseData["estate_id"] = "1"; responseData["neighbours"] = SimNeighboursData; - responseData["asset_url"] = m_gridManager.DefaultAssetServer; - responseData["asset_sendkey"] = m_gridManager.AssetSendKey; - responseData["asset_recvkey"] = m_gridManager.AssetRecvKey; - responseData["user_url"] = m_gridManager.DefaultUserServer; - responseData["user_sendkey"] = m_gridManager.UserSendKey; - responseData["user_recvkey"] = m_gridManager.UserRecvKey; - responseData["authkey"] = m_gridManager.SimSendKey; + responseData["asset_url"] = m_gridManager.Cfg.DefaultAssetServer; + responseData["asset_sendkey"] = m_gridManager.Cfg.AssetSendKey; + responseData["asset_recvkey"] = m_gridManager.Cfg.AssetRecvKey; + responseData["user_url"] = m_gridManager.Cfg.DefaultUserServer; + responseData["user_sendkey"] = m_gridManager.Cfg.UserSendKey; + responseData["user_recvkey"] = m_gridManager.Cfg.UserRecvKey; + responseData["authkey"] = m_gridManager.Cfg.SimSendKey; } return response; @@ -188,30 +191,33 @@ namespace OpenGridServices.GridServer { Console.WriteLine("SimProfiles.cs:RestSetSimMethod() - processing request......"); SimProfileBase TheSim; - LLUUID UUID = new LLUUID(param); - TheSim = GetProfileByLLUUID(UUID); - if ((TheSim) == null) TheSim = new SimProfileBase(); - + TheSim = GetProfileByLLUUID(new LLUUID(param)); + if ((TheSim) == null) { + TheSim = new SimProfileBase(); + LLUUID UUID = new LLUUID(param); + TheSim.UUID=UUID; + } + XmlDocument doc = new XmlDocument(); doc.LoadXml(request); - XmlNode authkeynode = doc.FirstChild; + XmlNode rootnode=doc.FirstChild; + XmlNode authkeynode = rootnode.ChildNodes[0]; if (authkeynode.Name != "authkey") { return "ERROR! bad XML - expected authkey tag"; } - XmlNode simnode = doc.ChildNodes[1]; + XmlNode simnode = rootnode.ChildNodes[1]; if (simnode.Name != "sim") { return "ERROR! bad XML - expected sim tag"; } - if (authkeynode.InnerText != m_gridManager.SimRecvKey) + if (authkeynode.InnerText != m_gridManager.Cfg.SimRecvKey) { - return "ERROR! invalid key"; + return "ERROR! invalid key"; } - - for (int i = 0; i <= simnode.ChildNodes.Count; i++) { + for (int i = 0; i < simnode.ChildNodes.Count; i++) { switch (simnode.ChildNodes[i].Name) { case "regionname": TheSim.regionname = simnode.ChildNodes[i].InnerText; @@ -231,12 +237,23 @@ namespace OpenGridServices.GridServer break; case "region_locy": - TheSim.RegionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText); - TheSim.regionhandle = Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256)); + TheSim.RegionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText); + TheSim.regionhandle = Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256)); break; - } + } } - return "OK"; + + try { + SimProfiles.Add(TheSim.UUID, TheSim); + IObjectContainer db; + db = Db4oFactory.OpenFile("simprofiles.yap"); + db.Set(TheSim); + db.Close(); + return "OK"; + } catch(Exception e) { + return "ERROR! could not save to database!"; + } + } public string RestGetRegionMethod(string request, string path, string param ) @@ -261,7 +278,8 @@ namespace OpenGridServices.GridServer if (!(TheSim == null)) { - respstring = "<authkey>" + m_gridManager.SimSendKey + "</authkey>"; + respstring = "<Root>"; + respstring += "<authkey>" + m_gridManager.Cfg.SimSendKey + "</authkey>"; respstring += "<sim>"; respstring += "<uuid>" + TheSim.UUID.ToString() + "</uuid>"; respstring += "<regionname>" + TheSim.regionname + "</regionname>"; @@ -271,6 +289,7 @@ namespace OpenGridServices.GridServer respstring += "<region_locy>" + TheSim.RegionLocY.ToString() + "</region_locy>"; respstring += "<estate_id>1</estate_id>"; respstring += "</sim>"; + respstring += "</Root>"; } return respstring; diff --git a/OpenSim.RegionServer/RegionInfo.cs b/OpenSim.RegionServer/RegionInfo.cs index 9958f1a..abc674f 100644 --- a/OpenSim.RegionServer/RegionInfo.cs +++ b/OpenSim.RegionServer/RegionInfo.cs @@ -44,7 +44,8 @@ namespace OpenSim //we really want to keep any server connection code out of here and out of the code code // and put it in the server connection classes (those inheriting from IGridServer etc) string reqtext; - reqtext = "<authkey>" + this.GridSendKey + "</authkey>"; + reqtext = "<Root>"; + reqtext += "<authkey>" + this.GridSendKey + "</authkey>"; reqtext += "<sim>"; reqtext += "<uuid>" + this.SimUUID.ToString() + "</uuid>"; reqtext += "<regionname>" + this.RegionName + "</regionname>"; @@ -54,6 +55,7 @@ namespace OpenSim reqtext += "<region_locy>" + this.RegionLocY.ToString() + "</region_locy>"; reqtext += "<estate_id>1</estate_id>"; reqtext += "</sim>"; + reqtext += "</Root>"; byte[] reqdata = (new System.Text.ASCIIEncoding()).GetBytes(reqtext); @@ -67,7 +69,7 @@ namespace OpenSim stOut.Close(); WebResponse gridresp = GridSaveReq.GetResponse(); - StreamReader stIn = new StreamReader(gridresp.GetResponseStream()); + StreamReader stIn = new StreamReader(gridresp.GetResponseStream(), Encoding.ASCII); string GridResponse = stIn.ReadToEnd(); stIn.Close(); gridresp.Close(); diff --git a/OpenSim.Servers/BaseHttpServer.cs b/OpenSim.Servers/BaseHttpServer.cs index 0a123b7..bb8f0ad 100644 --- a/OpenSim.Servers/BaseHttpServer.cs +++ b/OpenSim.Servers/BaseHttpServer.cs @@ -154,6 +154,7 @@ namespace OpenSim.Servers public virtual void HandleRequest(Object stateinfo) { + try { HttpListenerContext context = (HttpListenerContext)stateinfo; HttpListenerRequest request = context.Request; @@ -210,7 +211,10 @@ namespace OpenSim.Servers response.SendChunked = false; response.ContentLength64 = buffer.Length; output.Write(buffer, 0, buffer.Length); - output.Close(); + output.Close(); + } catch (Exception e) { + Console.WriteLine(e.ToString()); + } } public void Start() -- cgit v1.1