aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Communications/LoginService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Communications/LoginService.cs')
-rw-r--r--OpenSim/Framework/Communications/LoginService.cs132
1 files changed, 132 insertions, 0 deletions
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>