aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorTeravus Ovares2008-01-05 06:05:25 +0000
committerTeravus Ovares2008-01-05 06:05:25 +0000
commitdb3edff5d5f1c9a31f377db77d1ac4e1fa685623 (patch)
tree5b2066a5556b3eff8f0152bdb3ce109b428081fe /OpenSim
parent* Added shell Messaging Server. Don't run the MessagingServer yet or you mig... (diff)
downloadopensim-SC_OLD-db3edff5d5f1c9a31f377db77d1ac4e1fa685623.zip
opensim-SC_OLD-db3edff5d5f1c9a31f377db77d1ac4e1fa685623.tar.gz
opensim-SC_OLD-db3edff5d5f1c9a31f377db77d1ac4e1fa685623.tar.bz2
opensim-SC_OLD-db3edff5d5f1c9a31f377db77d1ac4e1fa685623.tar.xz
* Applying jhurliman's LLSD login enablement patch.
* I'm keeping it deactivated until some issues are resolved. * I'm patching it in deactivated so the patch doesn't get outdated * I've deactivated it by commenting out the handler for the application/xml+llsd content type. * While I've tested this as much as possible on my setup and found the deactivated code doesn't cause any problems, consider this update experimental (event though it's deactivated)
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/Communications/LoginResponse.cs161
-rw-r--r--OpenSim/Framework/Communications/LoginService.cs132
-rw-r--r--OpenSim/Framework/Communications/UserManagerBase.cs38
-rw-r--r--OpenSim/Framework/Servers/BaseHttpServer.cs75
-rw-r--r--OpenSim/Framework/Servers/LLSDMethod.cs33
-rw-r--r--OpenSim/Grid/UserServer/Main.cs3
-rw-r--r--OpenSim/Region/Application/OpenSimMain.cs1
7 files changed, 437 insertions, 6 deletions
diff --git a/OpenSim/Framework/Communications/LoginResponse.cs b/OpenSim/Framework/Communications/LoginResponse.cs
index 954aecb..2239a9c 100644
--- a/OpenSim/Framework/Communications/LoginResponse.cs
+++ b/OpenSim/Framework/Communications/LoginResponse.cs
@@ -30,6 +30,7 @@ using System;
30using System.Collections; 30using System.Collections;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using libsecondlife; 32using libsecondlife;
33using libsecondlife.StructuredData;
33using Nwc.XmlRpc; 34using Nwc.XmlRpc;
34using OpenSim.Framework.Console; 35using OpenSim.Framework.Console;
35 36
@@ -197,11 +198,31 @@ namespace OpenSim.Framework.UserManagement
197 return (xmlRpcResponse); 198 return (xmlRpcResponse);
198 } // GenerateResponse 199 } // GenerateResponse
199 200
201 public LLSD GenerateFailureResponseLLSD(string reason, string message, string login)
202 {
203 LLSDMap map = new LLSDMap();
204
205 // Ensure Login Failed message/reason;
206 ErrorMessage = message;
207 ErrorReason = reason;
208
209 map["reason"] = LLSD.FromString(ErrorReason);
210 map["message"] = LLSD.FromString(ErrorMessage);
211 map["login"] = LLSD.FromString(login);
212
213 return map;
214 }
215
200 public XmlRpcResponse CreateFailedResponse() 216 public XmlRpcResponse CreateFailedResponse()
201 { 217 {
202 return (CreateLoginFailedResponse()); 218 return (CreateLoginFailedResponse());
203 } // CreateErrorConnectingToGridResponse() 219 } // CreateErrorConnectingToGridResponse()
204 220
221 public LLSD CreateFailedResponseLLSD()
222 {
223 return CreateLoginFailedResponseLLSD();
224 }
225
205 public XmlRpcResponse CreateLoginFailedResponse() 226 public XmlRpcResponse CreateLoginFailedResponse()
206 { 227 {
207 return 228 return
@@ -210,6 +231,14 @@ namespace OpenSim.Framework.UserManagement
210 "false")); 231 "false"));
211 } // LoginFailedResponse 232 } // LoginFailedResponse
212 233
234 public LLSD CreateLoginFailedResponseLLSD()
235 {
236 return GenerateFailureResponseLLSD(
237 "key",
238 "Could not authenticate your avatar. Please check your username and password, and check the grid if problems persist.",
239 "false");
240 }
241
213 public XmlRpcResponse CreateAlreadyLoggedInResponse() 242 public XmlRpcResponse CreateAlreadyLoggedInResponse()
214 { 243 {
215 return 244 return
@@ -218,6 +247,14 @@ namespace OpenSim.Framework.UserManagement
218 "false")); 247 "false"));
219 } // CreateAlreadyLoggedInResponse() 248 } // CreateAlreadyLoggedInResponse()
220 249
250 public LLSD CreateAlreadyLoggedInResponseLLSD()
251 {
252 return GenerateFailureResponseLLSD(
253 "presence",
254 "You appear to be already logged in, if this is not the case please wait for your session to timeout, if this takes longer than a few minutes please contact the grid owner",
255 "false");
256 }
257
221 public XmlRpcResponse CreateDeadRegionResponse() 258 public XmlRpcResponse CreateDeadRegionResponse()
222 { 259 {
223 return 260 return
@@ -226,6 +263,14 @@ namespace OpenSim.Framework.UserManagement
226 "false")); 263 "false"));
227 } 264 }
228 265
266 public LLSD CreateDeadRegionResponseLLSD()
267 {
268 return GenerateFailureResponseLLSD(
269 "key",
270 "The region you are attempting to log into is not responding. Please select another region and try again.",
271 "false");
272 }
273
229 public XmlRpcResponse CreateGridErrorResponse() 274 public XmlRpcResponse CreateGridErrorResponse()
230 { 275 {
231 return 276 return
@@ -234,6 +279,14 @@ namespace OpenSim.Framework.UserManagement
234 "false")); 279 "false"));
235 } 280 }
236 281
282 public LLSD CreateGridErrorResponseLLSD()
283 {
284 return GenerateFailureResponseLLSD(
285 "key",
286 "Error connecting to grid. Could not percieve credentials from login XML.",
287 "false");
288 }
289
237 #endregion 290 #endregion
238 291
239 public XmlRpcResponse ToXmlRpcResponse() 292 public XmlRpcResponse ToXmlRpcResponse()
@@ -317,6 +370,112 @@ namespace OpenSim.Framework.UserManagement
317 } 370 }
318 } // ToXmlRpcResponse 371 } // ToXmlRpcResponse
319 372
373 public LLSD ToLLSDResponse()
374 {
375 try
376 {
377 LLSDMap map = new LLSDMap();
378
379 map["first_name"] = LLSD.FromString(Firstname);
380 map["last_name"] = LLSD.FromString(Lastname);
381 map["agent_access"] = LLSD.FromString(agentAccess);
382
383 map["sim_port"] = LLSD.FromInteger(SimPort);
384 map["sim_ip"] = LLSD.FromString(SimAddress);
385
386 map["agent_id"] = LLSD.FromUUID(AgentID);
387 map["session_id"] = LLSD.FromUUID(SessionID);
388 map["secure_session_id"] = LLSD.FromUUID(SecureSessionID);
389 map["circuit_code"] = LLSD.FromInteger(CircuitCode);
390 map["seconds_since_epoch"] = LLSD.FromInteger((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds);
391
392 #region Login Flags
393
394 LLSDMap loginFlagsLLSD = new LLSDMap();
395 loginFlagsLLSD["daylight_savings"] = LLSD.FromString(DST);
396 loginFlagsLLSD["stipend_since_login"] = LLSD.FromString(StipendSinceLogin);
397 loginFlagsLLSD["gendered"] = LLSD.FromString(Gendered);
398 loginFlagsLLSD["ever_logged_in"] = LLSD.FromString(EverLoggedIn);
399 map["login-flags"] = WrapLLSDMap(loginFlagsLLSD);
400
401 #endregion Login Flags
402
403 #region Global Textures
404
405 LLSDMap globalTexturesLLSD = new LLSDMap();
406 globalTexturesLLSD["sun_texture_id"] = LLSD.FromString(SunTexture);
407 globalTexturesLLSD["cloud_texture_id"] = LLSD.FromString(CloudTexture);
408 globalTexturesLLSD["moon_texture_id"] = LLSD.FromString(MoonTexture);
409
410 map["global-textures"] = WrapLLSDMap(globalTexturesLLSD);
411
412 #endregion Global Textures
413
414 map["seed_capability"] = LLSD.FromString(seedCapability);
415
416 // FIXME: Need a function that will convert these ArrayLists in to LLSDArrays,
417 // and convert the data inside them to LLSD objects as well
418
419 //map["event_categories"] = eventCategories;
420 //map["event_notifications"] = new LLSDArray(); // todo
421 //map["classified_categories"] = classifiedCategories;
422
423 #region UI Config
424
425 LLSDMap uiConfigLLSD = new LLSDMap();
426 uiConfigLLSD["allow_first_life"] = LLSD.FromString(allowFirstLife);
427 map["ui-config"] = WrapLLSDMap(uiConfigLLSD);
428
429 #endregion UI Config
430
431 #region Inventory
432
433 //map["inventory-skeleton"] = agentInventory;
434 //map["inventory-skel-lib"] = inventoryLibrary;
435 //map["inventory-root"] = inventoryRoot;
436 //map["inventory-lib-root"] = inventoryLibRoot;
437 //map["inventory-lib-owner"] = inventoryLibraryOwner;
438
439 #endregion Inventory
440
441 map["gestures"] = new LLSDArray(); // todo
442
443 //responseData["initial-outfit"] = initialOutfit;
444 //responseData["start_location"] = startLocation;
445
446 map["seed_capability"] = LLSD.FromString(seedCapability);
447 map["home"] = LLSD.FromString(home);
448 map["look_at"] = LLSD.FromString(lookAt);
449 map["message"] = LLSD.FromString(welcomeMessage);
450 map["region_x"] = LLSD.FromInteger(RegionX * 256);
451 map["region_y"] = LLSD.FromInteger(RegionY * 256);
452
453 if (m_buddyList != null)
454 {
455 //map["buddy-list"] = m_buddyList.ToArray();
456 }
457
458 map["login"] = LLSD.FromString("true");
459
460 return map;
461 }
462 catch (Exception e)
463 {
464 MainLog.Instance.Warn(
465 "CLIENT",
466 "LoginResponse: Error creating XML-RPC Response: " + e.Message
467 );
468 return GenerateFailureResponseLLSD("Internal Error", "Error generating Login Response", "false");
469 }
470 }
471
472 private LLSDArray WrapLLSDMap(LLSDMap wrapMe)
473 {
474 LLSDArray array = new LLSDArray();
475 array.Add(wrapMe);
476 return array;
477 }
478
320 public void SetEventCategories(string category, string value) 479 public void SetEventCategories(string category, string value)
321 { 480 {
322 // this.eventCategoriesHash[category] = value; 481 // this.eventCategoriesHash[category] = value;
@@ -591,4 +750,4 @@ namespace OpenSim.Framework.UserManagement
591 } 750 }
592 } 751 }
593 } 752 }
594} \ No newline at end of file 753}
diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs
index 0531d6a..9cfac1c 100644
--- a/OpenSim/Framework/Communications/LoginService.cs
+++ b/OpenSim/Framework/Communications/LoginService.cs
@@ -31,6 +31,7 @@ using System.Collections;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using System.Threading; 32using System.Threading;
33using libsecondlife; 33using libsecondlife;
34using libsecondlife.StructuredData;
34using Nwc.XmlRpc; 35using Nwc.XmlRpc;
35 36
36using OpenSim.Framework.Communications.Cache; 37using OpenSim.Framework.Communications.Cache;
@@ -198,6 +199,132 @@ namespace OpenSim.Framework.UserManagement
198 } 199 }
199 } 200 }
200 201
202 public LLSD LLSDLoginMethod(LLSD request)
203 {
204 // Temporary fix
205 m_loginMutex.WaitOne();
206
207 try
208 {
209 bool GoodLogin = false;
210
211 UserProfileData userProfile = null;
212 LoginResponse logResponse = new LoginResponse();
213
214 if (request.Type == LLSDType.Map)
215 {
216 LLSDMap map = (LLSDMap)request;
217
218 if (map.ContainsKey("first") && map.ContainsKey("last") && map.ContainsKey("passwd"))
219 {
220 string firstname = map["first"].AsString();
221 string lastname = map["last"].AsString();
222 string passwd = map["passwd"].AsString();
223
224 userProfile = GetTheUser(firstname, lastname);
225 if (userProfile == null)
226 {
227 MainLog.Instance.Verbose(
228 "LOGIN",
229 "Could not find a profile for " + firstname + " " + lastname);
230
231 return logResponse.CreateLoginFailedResponseLLSD();
232 }
233
234 GoodLogin = AuthenticateUser(userProfile, passwd);
235 }
236 }
237
238 if (!GoodLogin)
239 {
240 return logResponse.CreateLoginFailedResponseLLSD();
241 }
242 else
243 {
244 // If we already have a session...
245 if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline)
246 {
247 userProfile.currentAgent = null;
248 m_userManager.CommitAgent(ref userProfile);
249
250 // Reject the login
251 return logResponse.CreateAlreadyLoggedInResponseLLSD();
252 }
253
254 // Otherwise...
255 // Create a new agent session
256 CreateAgent(userProfile, request);
257
258 try
259 {
260 LLUUID agentID = userProfile.UUID;
261
262 // Inventory Library Section
263 InventoryData inventData = CreateInventoryData(agentID);
264 ArrayList AgentInventoryArray = inventData.InventoryArray;
265
266 Hashtable InventoryRootHash = new Hashtable();
267 InventoryRootHash["folder_id"] = inventData.RootFolderID.ToString();
268 ArrayList InventoryRoot = new ArrayList();
269 InventoryRoot.Add(InventoryRootHash);
270 userProfile.rootInventoryFolderID = inventData.RootFolderID;
271
272 // Circuit Code
273 uint circode = (uint)(Util.RandomClass.Next());
274
275 logResponse.Lastname = userProfile.surname;
276 logResponse.Firstname = userProfile.username;
277 logResponse.AgentID = agentID.ToString();
278 logResponse.SessionID = userProfile.currentAgent.sessionID.ToString();
279 logResponse.SecureSessionID = userProfile.currentAgent.secureSessionID.ToString();
280 logResponse.InventoryRoot = InventoryRoot;
281 logResponse.InventorySkeleton = AgentInventoryArray;
282 logResponse.InventoryLibrary = GetInventoryLibrary();
283
284 Hashtable InventoryLibRootHash = new Hashtable();
285 InventoryLibRootHash["folder_id"] = "00000112-000f-0000-0000-000100bba000";
286 ArrayList InventoryLibRoot = new ArrayList();
287 InventoryLibRoot.Add(InventoryLibRootHash);
288 logResponse.InventoryLibRoot = InventoryLibRoot;
289
290 logResponse.InventoryLibraryOwner = GetLibraryOwner();
291 logResponse.CircuitCode = (Int32)circode;
292 //logResponse.RegionX = 0; //overwritten
293 //logResponse.RegionY = 0; //overwritten
294 logResponse.Home = "!!null temporary value {home}!!"; // Overwritten
295 //logResponse.LookAt = "\n[r" + TheUser.homeLookAt.X.ToString() + ",r" + TheUser.homeLookAt.Y.ToString() + ",r" + TheUser.homeLookAt.Z.ToString() + "]\n";
296 //logResponse.SimAddress = "127.0.0.1"; //overwritten
297 //logResponse.SimPort = 0; //overwritten
298 logResponse.Message = GetMessage();
299 logResponse.BuddList = ConvertFriendListItem(m_userManager.GetUserFriendList(agentID));
300
301 try
302 {
303 CustomiseResponse(logResponse, userProfile);
304 }
305 catch (Exception ex)
306 {
307 MainLog.Instance.Verbose("LOGIN", ex.ToString());
308 return logResponse.CreateDeadRegionResponseLLSD();
309 }
310
311 CommitAgent(ref userProfile);
312
313 return logResponse.ToLLSDResponse();
314 }
315 catch (Exception ex)
316 {
317 MainLog.Instance.Verbose("LOGIN", ex.ToString());
318 return logResponse.CreateFailedResponseLLSD();
319 }
320 }
321 }
322 finally
323 {
324 m_loginMutex.ReleaseMutex();
325 }
326 }
327
201 /// <summary> 328 /// <summary>
202 /// Customises the login response and fills in missing values. 329 /// Customises the login response and fills in missing values.
203 /// </summary> 330 /// </summary>
@@ -246,6 +373,11 @@ namespace OpenSim.Framework.UserManagement
246 m_userManager.CreateAgent(profile, request); 373 m_userManager.CreateAgent(profile, request);
247 } 374 }
248 375
376 public void CreateAgent(UserProfileData profile, LLSD request)
377 {
378 m_userManager.CreateAgent(profile, request);
379 }
380
249 /// <summary> 381 /// <summary>
250 /// 382 ///
251 /// </summary> 383 /// </summary>
diff --git a/OpenSim/Framework/Communications/UserManagerBase.cs b/OpenSim/Framework/Communications/UserManagerBase.cs
index 5d62e5e..bea56ea 100644
--- a/OpenSim/Framework/Communications/UserManagerBase.cs
+++ b/OpenSim/Framework/Communications/UserManagerBase.cs
@@ -31,6 +31,7 @@ using System.Collections.Generic;
31using System.Reflection; 31using System.Reflection;
32using System.Security.Cryptography; 32using System.Security.Cryptography;
33using libsecondlife; 33using libsecondlife;
34using libsecondlife.StructuredData;
34using Nwc.XmlRpc; 35using Nwc.XmlRpc;
35using OpenSim.Framework.Console; 36using OpenSim.Framework.Console;
36 37
@@ -394,6 +395,41 @@ namespace OpenSim.Framework.UserManagement
394 profile.currentAgent = agent; 395 profile.currentAgent = agent;
395 } 396 }
396 397
398 public void CreateAgent(UserProfileData profile, LLSD request)
399 {
400 UserAgentData agent = new UserAgentData();
401
402 // User connection
403 agent.agentOnline = true;
404
405 // Generate sessions
406 RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();
407 byte[] randDataS = new byte[16];
408 byte[] randDataSS = new byte[16];
409 rand.GetBytes(randDataS);
410 rand.GetBytes(randDataSS);
411
412 agent.secureSessionID = new LLUUID(randDataSS, 0);
413 agent.sessionID = new LLUUID(randDataS, 0);
414
415 // Profile UUID
416 agent.UUID = profile.UUID;
417
418 // Current position (from Home)
419 agent.currentHandle = profile.homeRegion;
420 agent.currentPos = profile.homeLocation;
421
422 // What time did the user login?
423 agent.loginTime = Util.UnixTimeSinceEpoch();
424 agent.logoutTime = 0;
425
426 // Current location
427 agent.regionID = LLUUID.Zero; // Fill in later
428 agent.currentRegion = LLUUID.Zero; // Fill in later
429
430 profile.currentAgent = agent;
431 }
432
397 /// <summary> 433 /// <summary>
398 /// Saves a target agent to the database 434 /// Saves a target agent to the database
399 /// </summary> 435 /// </summary>
@@ -445,4 +481,4 @@ namespace OpenSim.Framework.UserManagement
445 public abstract UserProfileData SetupMasterUser(string firstName, string lastName, string password); 481 public abstract UserProfileData SetupMasterUser(string firstName, string lastName, string password);
446 public abstract UserProfileData SetupMasterUser(LLUUID uuid); 482 public abstract UserProfileData SetupMasterUser(LLUUID uuid);
447 } 483 }
448} \ No newline at end of file 484}
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs
index af2b27c..b36cc8a 100644
--- a/OpenSim/Framework/Servers/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/BaseHttpServer.cs
@@ -34,6 +34,7 @@ using System.Text;
34using System.Threading; 34using System.Threading;
35using System.Xml; 35using System.Xml;
36using Nwc.XmlRpc; 36using Nwc.XmlRpc;
37using libsecondlife.StructuredData;
37using OpenSim.Framework.Console; 38using OpenSim.Framework.Console;
38 39
39namespace OpenSim.Framework.Servers 40namespace OpenSim.Framework.Servers
@@ -43,6 +44,7 @@ namespace OpenSim.Framework.Servers
43 protected Thread m_workerThread; 44 protected Thread m_workerThread;
44 protected HttpListener m_httpListener; 45 protected HttpListener m_httpListener;
45 protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>(); 46 protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>();
47 protected LLSDMethod m_llsdHandler = null;
46 protected Dictionary<string, IRequestHandler> m_streamHandlers = new Dictionary<string, IRequestHandler>(); 48 protected Dictionary<string, IRequestHandler> m_streamHandlers = new Dictionary<string, IRequestHandler>();
47 protected uint m_port; 49 protected uint m_port;
48 protected bool m_ssl = false; 50 protected bool m_ssl = false;
@@ -90,6 +92,11 @@ namespace OpenSim.Framework.Servers
90 return false; 92 return false;
91 } 93 }
92 94
95 public bool SetLLSDHandler(LLSDMethod handler)
96 {
97 m_llsdHandler = handler;
98 return true;
99 }
93 100
94 public virtual void HandleRequest(Object stateinfo) 101 public virtual void HandleRequest(Object stateinfo)
95 { 102 {
@@ -136,7 +143,17 @@ namespace OpenSim.Framework.Servers
136 } 143 }
137 else 144 else
138 { 145 {
139 HandleXmlRpcRequests(request, response); 146 switch (request.ContentType)
147 {
148 //case "application/xml+llsd":
149 //HandleLLSDRequests(request, response);
150 //break;
151 case "text/xml":
152 case "application/xml":
153 default:
154 HandleXmlRpcRequests(request, response);
155 break;
156 }
140 } 157 }
141 } 158 }
142 159
@@ -242,7 +259,7 @@ namespace OpenSim.Framework.Servers
242 } 259 }
243 } 260 }
244 261
245 response.AddHeader("Content-type", "text/xml"); 262 response.ContentType = "text/xml";
246 263
247 byte[] buffer = Encoding.UTF8.GetBytes(responseString); 264 byte[] buffer = Encoding.UTF8.GetBytes(responseString);
248 265
@@ -263,6 +280,58 @@ namespace OpenSim.Framework.Servers
263 } 280 }
264 } 281 }
265 282
283 private void HandleLLSDRequests(HttpListenerRequest request, HttpListenerResponse response)
284 {
285 Stream requestStream = request.InputStream;
286
287 Encoding encoding = Encoding.UTF8;
288 StreamReader reader = new StreamReader(requestStream, encoding);
289
290 string requestBody = reader.ReadToEnd();
291 reader.Close();
292 requestStream.Close();
293
294 LLSD llsdRequest = null;
295 LLSD llsdResponse = null;
296
297 try { llsdRequest = LLSDParser.DeserializeXml(requestBody); }
298 catch (Exception ex) { MainLog.Instance.Warn("HTTPD", "Error - " + ex.Message); }
299
300 if (llsdRequest != null && m_llsdHandler != null)
301 {
302 llsdResponse = m_llsdHandler(llsdRequest);
303 }
304 else
305 {
306 LLSDMap map = new LLSDMap();
307 map["reason"] = LLSD.FromString("LLSDRequest");
308 map["message"] = LLSD.FromString("No handler registered for LLSD Requests");
309 map["login"] = LLSD.FromString("false");
310 llsdResponse = map;
311 }
312
313 response.ContentType = "application/xml+llsd";
314
315 byte[] buffer = LLSDParser.SerializeXmlBytes(llsdResponse);
316
317 response.SendChunked = false;
318 response.ContentLength64 = buffer.Length;
319 response.ContentEncoding = Encoding.UTF8;
320
321 try
322 {
323 response.OutputStream.Write(buffer, 0, buffer.Length);
324 }
325 catch (Exception ex)
326 {
327 MainLog.Instance.Warn("HTTPD", "Error - " + ex.Message);
328 }
329 finally
330 {
331 response.OutputStream.Close();
332 }
333 }
334
266 public void HandleHTTPRequest(Hashtable keysvals, HttpListenerRequest request, HttpListenerResponse response) 335 public void HandleHTTPRequest(Hashtable keysvals, HttpListenerRequest request, HttpListenerResponse response)
267 { 336 {
268 // This is a test. There's a workable alternative.. as this way sucks. 337 // This is a test. There's a workable alternative.. as this way sucks.
@@ -436,4 +505,4 @@ namespace OpenSim.Framework.Servers
436 m_streamHandlers.Remove(GetHandlerKey(httpMethod, path)); 505 m_streamHandlers.Remove(GetHandlerKey(httpMethod, path));
437 } 506 }
438 } 507 }
439} \ No newline at end of file 508}
diff --git a/OpenSim/Framework/Servers/LLSDMethod.cs b/OpenSim/Framework/Servers/LLSDMethod.cs
new file mode 100644
index 0000000..5cd225b
--- /dev/null
+++ b/OpenSim/Framework/Servers/LLSDMethod.cs
@@ -0,0 +1,33 @@
1/*
2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using libsecondlife.StructuredData;
29
30namespace OpenSim.Framework.Servers
31{
32 public delegate LLSD LLSDMethod(LLSD request);
33}
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs
index 4645c7e..5264870 100644
--- a/OpenSim/Grid/UserServer/Main.cs
+++ b/OpenSim/Grid/UserServer/Main.cs
@@ -97,6 +97,7 @@ namespace OpenSim.Grid.UserServer
97 BaseHttpServer httpServer = new BaseHttpServer(Cfg.HttpPort); 97 BaseHttpServer httpServer = new BaseHttpServer(Cfg.HttpPort);
98 98
99 httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); 99 httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod);
100 httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod);
100 101
101 httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName); 102 httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName);
102 httpServer.AddXmlRPCHandler("get_user_by_uuid", m_userManager.XmlRPCGetUserMethodUUID); 103 httpServer.AddXmlRPCHandler("get_user_by_uuid", m_userManager.XmlRPCGetUserMethodUUID);
@@ -223,4 +224,4 @@ namespace OpenSim.Grid.UserServer
223 { 224 {
224 } 225 }
225 } 226 }
226} \ No newline at end of file 227}
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index 0e8d71a..831db22 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -312,6 +312,7 @@ namespace OpenSim
312 m_loginService.OnLoginToRegion += backendService.AddNewSession; 312 m_loginService.OnLoginToRegion += backendService.AddNewSession;
313 313
314 m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); 314 m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod);
315 m_httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod);
315 316
316 if (m_standaloneAuthenticate) 317 if (m_standaloneAuthenticate)
317 { 318 {