aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenGridServices.GridServer/SimProfiles.cs
diff options
context:
space:
mode:
authorMW2007-04-25 13:03:48 +0000
committerMW2007-04-25 13:03:48 +0000
commitf7b51d63a87a6703d7cb8f376d1f3f7ec6ede8a0 (patch)
treeb9f8f1dac346906f1333aa3fc8da704466eda005 /OpenGridServices.GridServer/SimProfiles.cs
parent* Added try{}catch{} to RunTerrainCmd (diff)
downloadopensim-SC_OLD-f7b51d63a87a6703d7cb8f376d1f3f7ec6ede8a0.zip
opensim-SC_OLD-f7b51d63a87a6703d7cb8f376d1f3f7ec6ede8a0.tar.gz
opensim-SC_OLD-f7b51d63a87a6703d7cb8f376d1f3f7ec6ede8a0.tar.bz2
opensim-SC_OLD-f7b51d63a87a6703d7cb8f376d1f3f7ec6ede8a0.tar.xz
Small clean up of files and directories
Diffstat (limited to 'OpenGridServices.GridServer/SimProfiles.cs')
-rw-r--r--OpenGridServices.GridServer/SimProfiles.cs341
1 files changed, 182 insertions, 159 deletions
diff --git a/OpenGridServices.GridServer/SimProfiles.cs b/OpenGridServices.GridServer/SimProfiles.cs
index bd91d5b..ae40133 100644
--- a/OpenGridServices.GridServer/SimProfiles.cs
+++ b/OpenGridServices.GridServer/SimProfiles.cs
@@ -41,88 +41,105 @@ using System.Xml;
41 41
42namespace OpenGridServices.GridServer 42namespace OpenGridServices.GridServer
43{ 43{
44 /// <summary> 44 /// <summary>
45 /// </summary> 45 /// </summary>
46 public class SimProfileManager { 46 public class SimProfileManager
47 47 {
48 public Dictionary<LLUUID, SimProfileBase> SimProfiles = new Dictionary<LLUUID, SimProfileBase>(); 48
49 private OpenGrid_Main m_gridManager; 49 public Dictionary<LLUUID, SimProfileBase> SimProfiles = new Dictionary<LLUUID, SimProfileBase>();
50 50 private OpenGrid_Main m_gridManager;
51 public SimProfileManager(OpenGrid_Main gridManager) { 51
52 m_gridManager = gridManager; 52 public SimProfileManager(OpenGrid_Main gridManager)
53 } 53 {
54 54 m_gridManager = gridManager;
55 public void LoadProfiles() { // should abstract this out 55 }
56 IObjectContainer db; 56
57 db = Db4oFactory.OpenFile("simprofiles.yap"); 57 public void LoadProfiles()
58 IObjectSet result = db.Get(typeof(SimProfileBase)); 58 { // should abstract this out
59 foreach (SimProfileBase simprof in result) { 59 IObjectContainer db;
60 SimProfiles.Add(simprof.UUID, simprof); 60 db = Db4oFactory.OpenFile("simprofiles.yap");
61 } 61 IObjectSet result = db.Get(typeof(SimProfileBase));
62 MainConsole.Instance.WriteLine("SimProfiles.Cs:LoadProfiles() - Successfully loaded " + result.Count.ToString() + " from database"); 62 foreach (SimProfileBase simprof in result)
63 db.Close(); 63 {
64 } 64 SimProfiles.Add(simprof.UUID, simprof);
65 65 }
66 public SimProfileBase GetProfileByHandle(ulong reqhandle) { 66 MainConsole.Instance.WriteLine("SimProfiles.Cs:LoadProfiles() - Successfully loaded " + result.Count.ToString() + " from database");
67 foreach (libsecondlife.LLUUID UUID in SimProfiles.Keys) { 67 db.Close();
68 if(SimProfiles[UUID].regionhandle==reqhandle) return SimProfiles[UUID]; 68 }
69 } 69
70 return null; 70 public SimProfileBase GetProfileByHandle(ulong reqhandle)
71 } 71 {
72 72 foreach (libsecondlife.LLUUID UUID in SimProfiles.Keys)
73 public SimProfileBase GetProfileByLLUUID(LLUUID ProfileLLUUID) { 73 {
74 foreach (libsecondlife.LLUUID UUID in SimProfiles.Keys) { 74 if (SimProfiles[UUID].regionhandle == reqhandle) return SimProfiles[UUID];
75 if(SimProfiles[UUID].UUID==ProfileLLUUID) return SimProfiles[UUID]; 75 }
76 } 76 return null;
77 return null; 77 }
78 } 78
79 79 public SimProfileBase GetProfileByLLUUID(LLUUID ProfileLLUUID)
80 public bool AuthenticateSim(LLUUID RegionUUID, uint regionhandle, string simrecvkey) { 80 {
81 SimProfileBase TheSim=GetProfileByHandle(regionhandle); 81 foreach (libsecondlife.LLUUID UUID in SimProfiles.Keys)
82 if(TheSim != null) 82 {
83 if(TheSim.recvkey==simrecvkey) { 83 if (SimProfiles[UUID].UUID == ProfileLLUUID) return SimProfiles[UUID];
84 return true; 84 }
85 } else { 85 return null;
86 return false; 86 }
87 } else return false; 87
88 88 public bool AuthenticateSim(LLUUID RegionUUID, uint regionhandle, string simrecvkey)
89 } 89 {
90 90 SimProfileBase TheSim = GetProfileByHandle(regionhandle);
91 public string GetXMLNeighbours(ulong reqhandle) { 91 if (TheSim != null)
92 string response=""; 92 if (TheSim.recvkey == simrecvkey)
93 SimProfileBase central_region = GetProfileByHandle(reqhandle); 93 {
94 SimProfileBase neighbour; 94 return true;
95 for(int x=-1; x<2; x++) for(int y=-1; y<2; y++) { 95 }
96 if(GetProfileByHandle(Util.UIntsToLong((uint)((central_region.RegionLocX+x)*256), (uint)(central_region.RegionLocY+y)*256))!=null) { 96 else
97 neighbour=GetProfileByHandle(Util.UIntsToLong((uint)((central_region.RegionLocX+x)*256), (uint)(central_region.RegionLocY+y)*256)); 97 {
98 response+="<neighbour>"; 98 return false;
99 response+="<sim_ip>" + neighbour.sim_ip + "</sim_ip>"; 99 }
100 response+="<sim_port>" + neighbour.sim_port.ToString() + "</sim_port>"; 100 else return false;
101 response+="<locx>" + neighbour.RegionLocX.ToString() + "</locx>"; 101
102 response+="<locy>" + neighbour.RegionLocY.ToString() + "</locy>"; 102 }
103 response+="<regionhandle>" + neighbour.regionhandle.ToString() + "</regionhandle>"; 103
104 response+="</neighbour>"; 104 public string GetXMLNeighbours(ulong reqhandle)
105 105 {
106 } 106 string response = "";
107 } 107 SimProfileBase central_region = GetProfileByHandle(reqhandle);
108 return response; 108 SimProfileBase neighbour;
109 } 109 for (int x = -1; x < 2; x++) for (int y = -1; y < 2; y++)
110 110 {
111 public SimProfileBase CreateNewProfile(string regionname, string caps_url, string sim_ip, uint sim_port, uint RegionLocX, uint RegionLocY, string sendkey, string recvkey) { 111 if (GetProfileByHandle(Util.UIntsToLong((uint)((central_region.RegionLocX + x) * 256), (uint)(central_region.RegionLocY + y) * 256)) != null)
112 SimProfileBase newprofile = new SimProfileBase(); 112 {
113 newprofile.regionname=regionname; 113 neighbour = GetProfileByHandle(Util.UIntsToLong((uint)((central_region.RegionLocX + x) * 256), (uint)(central_region.RegionLocY + y) * 256));
114 newprofile.sim_ip=sim_ip; 114 response += "<neighbour>";
115 newprofile.sim_port=sim_port; 115 response += "<sim_ip>" + neighbour.sim_ip + "</sim_ip>";
116 newprofile.RegionLocX=RegionLocX; 116 response += "<sim_port>" + neighbour.sim_port.ToString() + "</sim_port>";
117 newprofile.RegionLocY=RegionLocY; 117 response += "<locx>" + neighbour.RegionLocX.ToString() + "</locx>";
118 newprofile.caps_url="http://" + sim_ip + ":9000/"; 118 response += "<locy>" + neighbour.RegionLocY.ToString() + "</locy>";
119 newprofile.sendkey=sendkey; 119 response += "<regionhandle>" + neighbour.regionhandle.ToString() + "</regionhandle>";
120 newprofile.recvkey=recvkey; 120 response += "</neighbour>";
121 newprofile.regionhandle=Util.UIntsToLong((RegionLocX*256), (RegionLocY*256)); 121
122 newprofile.UUID=LLUUID.Random(); 122 }
123 this.SimProfiles.Add(newprofile.UUID,newprofile); 123 }
124 return newprofile; 124 return response;
125 } 125 }
126
127 public SimProfileBase CreateNewProfile(string regionname, string caps_url, string sim_ip, uint sim_port, uint RegionLocX, uint RegionLocY, string sendkey, string recvkey)
128 {
129 SimProfileBase newprofile = new SimProfileBase();
130 newprofile.regionname = regionname;
131 newprofile.sim_ip = sim_ip;
132 newprofile.sim_port = sim_port;
133 newprofile.RegionLocX = RegionLocX;
134 newprofile.RegionLocY = RegionLocY;
135 newprofile.caps_url = "http://" + sim_ip + ":9000/";
136 newprofile.sendkey = sendkey;
137 newprofile.recvkey = recvkey;
138 newprofile.regionhandle = Util.UIntsToLong((RegionLocX * 256), (RegionLocY * 256));
139 newprofile.UUID = LLUUID.Random();
140 this.SimProfiles.Add(newprofile.UUID, newprofile);
141 return newprofile;
142 }
126 143
127 public XmlRpcResponse XmlRpcLoginToSimulatorMethod(XmlRpcRequest request) 144 public XmlRpcResponse XmlRpcLoginToSimulatorMethod(XmlRpcRequest request)
128 { 145 {
@@ -158,15 +175,15 @@ namespace OpenGridServices.GridServer
158 if (GetProfileByHandle(Helpers.UIntsToLong((uint)((TheSim.RegionLocX + x) * 256), (uint)(TheSim.RegionLocY + y) * 256)) != null) 175 if (GetProfileByHandle(Helpers.UIntsToLong((uint)((TheSim.RegionLocX + x) * 256), (uint)(TheSim.RegionLocY + y) * 256)) != null)
159 { 176 {
160 neighbour = GetProfileByHandle(Helpers.UIntsToLong((uint)((TheSim.RegionLocX + x) * 256), (uint)(TheSim.RegionLocY + y) * 256)); 177 neighbour = GetProfileByHandle(Helpers.UIntsToLong((uint)((TheSim.RegionLocX + x) * 256), (uint)(TheSim.RegionLocY + y) * 256));
161 178
162 NeighbourBlock = new Hashtable(); 179 NeighbourBlock = new Hashtable();
163 NeighbourBlock["sim_ip"] = neighbour.sim_ip; 180 NeighbourBlock["sim_ip"] = neighbour.sim_ip;
164 NeighbourBlock["sim_port"] = neighbour.sim_port.ToString(); 181 NeighbourBlock["sim_port"] = neighbour.sim_port.ToString();
165 NeighbourBlock["region_locx"] = neighbour.RegionLocX.ToString(); 182 NeighbourBlock["region_locx"] = neighbour.RegionLocX.ToString();
166 NeighbourBlock["region_locy"] = neighbour.RegionLocY.ToString(); 183 NeighbourBlock["region_locy"] = neighbour.RegionLocY.ToString();
167 NeighbourBlock["UUID"] = neighbour.UUID.ToString(); 184 NeighbourBlock["UUID"] = neighbour.UUID.ToString();
168 185
169 if(neighbour.UUID!=TheSim.UUID) SimNeighboursData.Add(NeighbourBlock); 186 if (neighbour.UUID != TheSim.UUID) SimNeighboursData.Add(NeighbourBlock);
170 } 187 }
171 } 188 }
172 189
@@ -176,9 +193,9 @@ namespace OpenGridServices.GridServer
176 responseData["regionname"] = TheSim.regionname; 193 responseData["regionname"] = TheSim.regionname;
177 responseData["estate_id"] = "1"; 194 responseData["estate_id"] = "1";
178 responseData["neighbours"] = SimNeighboursData; 195 responseData["neighbours"] = SimNeighboursData;
179 196
180 responseData["sim_ip"] = TheSim.sim_ip; 197 responseData["sim_ip"] = TheSim.sim_ip;
181 responseData["sim_port"] = TheSim.sim_port.ToString(); 198 responseData["sim_port"] = TheSim.sim_port.ToString();
182 responseData["asset_url"] = m_gridManager.Cfg.DefaultAssetServer; 199 responseData["asset_url"] = m_gridManager.Cfg.DefaultAssetServer;
183 responseData["asset_sendkey"] = m_gridManager.Cfg.AssetSendKey; 200 responseData["asset_sendkey"] = m_gridManager.Cfg.AssetSendKey;
184 responseData["asset_recvkey"] = m_gridManager.Cfg.AssetRecvKey; 201 responseData["asset_recvkey"] = m_gridManager.Cfg.AssetRecvKey;
@@ -193,97 +210,103 @@ namespace OpenGridServices.GridServer
193 210
194 public string RestSetSimMethod(string request, string path, string param) 211 public string RestSetSimMethod(string request, string path, string param)
195 { 212 {
196 Console.WriteLine("SimProfiles.cs:RestSetSimMethod() - processing request......"); 213 Console.WriteLine("SimProfiles.cs:RestSetSimMethod() - processing request......");
197 SimProfileBase TheSim; 214 SimProfileBase TheSim;
198 TheSim = GetProfileByLLUUID(new LLUUID(param)); 215 TheSim = GetProfileByLLUUID(new LLUUID(param));
199 if ((TheSim) == null) { 216 if ((TheSim) == null)
200 TheSim = new SimProfileBase(); 217 {
201 LLUUID UUID = new LLUUID(param); 218 TheSim = new SimProfileBase();
202 TheSim.UUID=UUID; 219 LLUUID UUID = new LLUUID(param);
203 } 220 TheSim.UUID = UUID;
204 221 }
222
205 XmlDocument doc = new XmlDocument(); 223 XmlDocument doc = new XmlDocument();
206 doc.LoadXml(request); 224 doc.LoadXml(request);
207 XmlNode rootnode=doc.FirstChild; 225 XmlNode rootnode = doc.FirstChild;
208 XmlNode authkeynode = rootnode.ChildNodes[0]; 226 XmlNode authkeynode = rootnode.ChildNodes[0];
209 if (authkeynode.Name != "authkey") 227 if (authkeynode.Name != "authkey")
210 { 228 {
211 return "ERROR! bad XML - expected authkey tag"; 229 return "ERROR! bad XML - expected authkey tag";
212 } 230 }
213 231
214 XmlNode simnode = rootnode.ChildNodes[1]; 232 XmlNode simnode = rootnode.ChildNodes[1];
215 if (simnode.Name != "sim") 233 if (simnode.Name != "sim")
216 { 234 {
217 return "ERROR! bad XML - expected sim tag"; 235 return "ERROR! bad XML - expected sim tag";
218 } 236 }
219 237
220 if (authkeynode.InnerText != m_gridManager.Cfg.SimRecvKey) 238 if (authkeynode.InnerText != m_gridManager.Cfg.SimRecvKey)
239 {
240 return "ERROR! invalid key";
241 }
242 for (int i = 0; i < simnode.ChildNodes.Count; i++)
243 {
244 switch (simnode.ChildNodes[i].Name)
221 { 245 {
222 return "ERROR! invalid key"; 246 case "regionname":
223 } 247 TheSim.regionname = simnode.ChildNodes[i].InnerText;
224 for (int i = 0; i < simnode.ChildNodes.Count; i++) { 248 break;
225 switch (simnode.ChildNodes[i].Name) { 249
226 case "regionname": 250 case "sim_ip":
227 TheSim.regionname = simnode.ChildNodes[i].InnerText; 251 TheSim.sim_ip = simnode.ChildNodes[i].InnerText;
228 break; 252 break;
229 253
230 case "sim_ip": 254 case "sim_port":
231 TheSim.sim_ip = simnode.ChildNodes[i].InnerText; 255 TheSim.sim_port = Convert.ToUInt32(simnode.ChildNodes[i].InnerText);
232 break; 256 break;
233 257
234 case "sim_port": 258 case "region_locx":
235 TheSim.sim_port = Convert.ToUInt32(simnode.ChildNodes[i].InnerText); 259 TheSim.RegionLocX = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
236 break; 260 TheSim.regionhandle = Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256));
237 261 break;
238 case "region_locx": 262
239 TheSim.RegionLocX = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText); 263 case "region_locy":
240 TheSim.regionhandle = Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256));
241 break;
242
243 case "region_locy":
244 TheSim.RegionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText); 264 TheSim.RegionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
245 TheSim.regionhandle = Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256)); 265 TheSim.regionhandle = Helpers.UIntsToLong((TheSim.RegionLocX * 256), (TheSim.RegionLocY * 256));
246 break; 266 break;
247 } 267 }
248 } 268 }
249 269
250 try { 270 try
251 SimProfiles.Add(TheSim.UUID, TheSim); 271 {
252 IObjectContainer db; 272 SimProfiles.Add(TheSim.UUID, TheSim);
253 db = Db4oFactory.OpenFile("simprofiles.yap"); 273 IObjectContainer db;
254 db.Set(TheSim); 274 db = Db4oFactory.OpenFile("simprofiles.yap");
255 db.Close(); 275 db.Set(TheSim);
256 return "OK"; 276 db.Close();
257 } catch(Exception e) { 277 return "OK";
258 return "ERROR! could not save to database!"; 278 }
259 } 279 catch (Exception e)
280 {
281 return "ERROR! could not save to database!";
282 }
260 283
261 } 284 }
262 285
263 public string RestGetRegionMethod(string request, string path, string param ) 286 public string RestGetRegionMethod(string request, string path, string param)
264 { 287 {
265 SimProfileBase TheSim = GetProfileByHandle((ulong)Convert.ToUInt64(param)); 288 SimProfileBase TheSim = GetProfileByHandle((ulong)Convert.ToUInt64(param));
266 return RestGetSimMethod("", "/sims/", param); 289 return RestGetSimMethod("", "/sims/", param);
267 } 290 }
268 291
269 public string RestSetRegionMethod(string request, string path, string param ) 292 public string RestSetRegionMethod(string request, string path, string param)
270 { 293 {
271 SimProfileBase TheSim = GetProfileByHandle((ulong)Convert.ToUInt64(param)); 294 SimProfileBase TheSim = GetProfileByHandle((ulong)Convert.ToUInt64(param));
272 return RestSetSimMethod("", "/sims/", param); 295 return RestSetSimMethod("", "/sims/", param);
273 } 296 }
274 297
275 public string RestGetSimMethod(string request, string path, string param ) 298 public string RestGetSimMethod(string request, string path, string param)
276 { 299 {
277 string respstring = String.Empty; 300 string respstring = String.Empty;
278 301
279 SimProfileBase TheSim; 302 SimProfileBase TheSim;
280 LLUUID UUID = new LLUUID(param); 303 LLUUID UUID = new LLUUID(param);
281 TheSim = GetProfileByLLUUID(UUID); 304 TheSim = GetProfileByLLUUID(UUID);
282 305
283 if (!(TheSim == null)) 306 if (!(TheSim == null))
284 { 307 {
285 respstring = "<Root>"; 308 respstring = "<Root>";
286 respstring += "<authkey>" + m_gridManager.Cfg.SimSendKey + "</authkey>"; 309 respstring += "<authkey>" + m_gridManager.Cfg.SimSendKey + "</authkey>";
287 respstring += "<sim>"; 310 respstring += "<sim>";
288 respstring += "<uuid>" + TheSim.UUID.ToString() + "</uuid>"; 311 respstring += "<uuid>" + TheSim.UUID.ToString() + "</uuid>";
289 respstring += "<regionname>" + TheSim.regionname + "</regionname>"; 312 respstring += "<regionname>" + TheSim.regionname + "</regionname>";
@@ -293,13 +316,13 @@ namespace OpenGridServices.GridServer
293 respstring += "<region_locy>" + TheSim.RegionLocY.ToString() + "</region_locy>"; 316 respstring += "<region_locy>" + TheSim.RegionLocY.ToString() + "</region_locy>";
294 respstring += "<estate_id>1</estate_id>"; 317 respstring += "<estate_id>1</estate_id>";
295 respstring += "</sim>"; 318 respstring += "</sim>";
296 respstring += "</Root>"; 319 respstring += "</Root>";
297 } 320 }
298 321
299 return respstring; 322 return respstring;
300 } 323 }
301 324
302 } 325 }
303 326
304 327
305} 328}