diff --git a/OpenGridServices.GridServer/Main.cs b/OpenGridServices.GridServer/Main.cs index c69b6dcd86..55e2b00196 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 9e93db08e9..5e02b4f3da 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 = "" + m_gridManager.SimSendKey + ""; + respstring = ""; + respstring += "" + m_gridManager.Cfg.SimSendKey + ""; respstring += ""; respstring += "" + TheSim.UUID.ToString() + ""; respstring += "" + TheSim.regionname + ""; @@ -271,6 +289,7 @@ namespace OpenGridServices.GridServer respstring += "" + TheSim.RegionLocY.ToString() + ""; respstring += "1"; respstring += ""; + respstring += ""; } return respstring; diff --git a/OpenSim.RegionServer/RegionInfo.cs b/OpenSim.RegionServer/RegionInfo.cs index 9958f1a5b9..abc674fe68 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 = "" + this.GridSendKey + ""; + reqtext = ""; + reqtext += "" + this.GridSendKey + ""; reqtext += ""; reqtext += "" + this.SimUUID.ToString() + ""; reqtext += "" + this.RegionName + ""; @@ -54,6 +55,7 @@ namespace OpenSim reqtext += "" + this.RegionLocY.ToString() + ""; reqtext += "1"; reqtext += ""; + reqtext += ""; 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 0a123b75cd..bb8f0ad176 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()