aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorCharles Krinke2008-07-29 03:43:31 +0000
committerCharles Krinke2008-07-29 03:43:31 +0000
commitbfa1fd768b2c6bbd49542c2873a8fbf31747fcea (patch)
tree1c94e44c5036c5f8f901ec13ce3febc41a51c6ed /OpenSim
parentTrying to guestimate sensible default values for GridInfoService if no (diff)
downloadopensim-SC_OLD-bfa1fd768b2c6bbd49542c2873a8fbf31747fcea.zip
opensim-SC_OLD-bfa1fd768b2c6bbd49542c2873a8fbf31747fcea.tar.gz
opensim-SC_OLD-bfa1fd768b2c6bbd49542c2873a8fbf31747fcea.tar.bz2
opensim-SC_OLD-bfa1fd768b2c6bbd49542c2873a8fbf31747fcea.tar.xz
Mantis#1849. Thank you kindly, Kinoc for a patch that:
- LLSDLoginMethod should error out in similar way to XMLRPC login for already logged in condition - Have LLSDLoginMethod mirror the sequence of the XMLRPC for easier side by side compare - Log messages report which process XML or LLSD generated them for easier debugging
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/Communications/LoginResponse.cs4
-rw-r--r--OpenSim/Framework/Communications/LoginService.cs93
2 files changed, 66 insertions, 31 deletions
diff --git a/OpenSim/Framework/Communications/LoginResponse.cs b/OpenSim/Framework/Communications/LoginResponse.cs
index 113e3f0..686d1bb 100644
--- a/OpenSim/Framework/Communications/LoginResponse.cs
+++ b/OpenSim/Framework/Communications/LoginResponse.cs
@@ -475,7 +475,7 @@ namespace OpenSim.Framework.Communications
475 } 475 }
476 catch (Exception e) 476 catch (Exception e)
477 { 477 {
478 m_log.Warn("[CLIENT]: LoginResponse: Error creating XML-RPC Response: " + e.Message); 478 m_log.Warn("[CLIENT]: LoginResponse: Error creating LLSD Response: " + e.Message);
479 479
480 return GenerateFailureResponseLLSD("Internal Error", "Error generating Login Response", "false"); 480 return GenerateFailureResponseLLSD("Internal Error", "Error generating Login Response", "false");
481 } 481 }
@@ -777,4 +777,4 @@ namespace OpenSim.Framework.Communications
777 } 777 }
778 } 778 }
779 } 779 }
780} \ No newline at end of file 780}
diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs
index e95dd21..d603052 100644
--- a/OpenSim/Framework/Communications/LoginService.cs
+++ b/OpenSim/Framework/Communications/LoginService.cs
@@ -130,7 +130,7 @@ namespace OpenSim.Framework.Communications
130 lastname = (string) requestData["last"]; 130 lastname = (string) requestData["last"];
131 131
132 m_log.InfoFormat( 132 m_log.InfoFormat(
133 "[LOGIN BEGIN]: Received login request message from user {0} {1}", 133 "[LOGIN BEGIN]: XMLRPC Received login request message from user '{0}' '{1}'",
134 firstname, lastname); 134 firstname, lastname);
135 135
136 string clientVersion = "Unknown"; 136 string clientVersion = "Unknown";
@@ -146,12 +146,12 @@ namespace OpenSim.Framework.Communications
146 } 146 }
147 147
148 m_log.DebugFormat( 148 m_log.DebugFormat(
149 "[LOGIN]: Client is {0}, start location is {1}", clientVersion, startLocationRequest); 149 "[LOGIN]: XMLRPC Client is {0}, start location is {1}", clientVersion, startLocationRequest);
150 150
151 userProfile = GetTheUser(firstname, lastname); 151 userProfile = GetTheUser(firstname, lastname);
152 if (userProfile == null) 152 if (userProfile == null)
153 { 153 {
154 m_log.Info("[LOGIN END]: Could not find a profile for " + firstname + " " + lastname); 154 m_log.Info("[LOGIN END]: XMLRPC Could not find a profile for " + firstname + " " + lastname);
155 155
156 return logResponse.CreateLoginFailedResponse(); 156 return logResponse.CreateLoginFailedResponse();
157 } 157 }
@@ -171,7 +171,7 @@ namespace OpenSim.Framework.Communications
171 catch (Exception e) 171 catch (Exception e)
172 { 172 {
173 m_log.InfoFormat( 173 m_log.InfoFormat(
174 "[LOGIN END]: Bad web_login_key: {0} for user {1} {2}, exception {3}", 174 "[LOGIN END]: XMLRPC Bad web_login_key: {0} for user {1} {2}, exception {3}",
175 requestData["web_login_key"], firstname, lastname, e); 175 requestData["web_login_key"], firstname, lastname, e);
176 176
177 return logResponse.CreateFailedResponse(); 177 return logResponse.CreateFailedResponse();
@@ -183,14 +183,14 @@ namespace OpenSim.Framework.Communications
183 else 183 else
184 { 184 {
185 m_log.Info( 185 m_log.Info(
186 "[LOGIN END]: login_to_simulator login message did not contain all the required data"); 186 "[LOGIN END]: XMLRPC login_to_simulator login message did not contain all the required data");
187 187
188 return logResponse.CreateGridErrorResponse(); 188 return logResponse.CreateGridErrorResponse();
189 } 189 }
190 190
191 if (!GoodLogin) 191 if (!GoodLogin)
192 { 192 {
193 m_log.InfoFormat("[LOGIN END]: User {0} {1} failed authentication", firstname, lastname); 193 m_log.InfoFormat("[LOGIN END]: XMLRPC User {0} {1} failed authentication", firstname, lastname);
194 194
195 return logResponse.CreateLoginFailedResponse(); 195 return logResponse.CreateLoginFailedResponse();
196 } 196 }
@@ -208,13 +208,13 @@ namespace OpenSim.Framework.Communications
208 m_userManager.CommitAgent(ref userProfile); 208 m_userManager.CommitAgent(ref userProfile);
209 209
210 // try to tell the region that their user is dead. 210 // try to tell the region that their user is dead.
211 LogOffUser(userProfile, "You were logged off because you logged in from another location"); 211 LogOffUser(userProfile, " XMLRPC You were logged off because you logged in from another location");
212 212
213 // Reject the login 213 // Reject the login
214 214
215 215
216 m_log.InfoFormat( 216 m_log.InfoFormat(
217 "[LOGIN END]: Notifying user {0} {1} that they are already logged in", 217 "[LOGIN END]: XMLRPC Notifying user {0} {1} that they are already logged in",
218 firstname, lastname); 218 firstname, lastname);
219 219
220 return logResponse.CreateAlreadyLoggedInResponse(); 220 return logResponse.CreateAlreadyLoggedInResponse();
@@ -235,7 +235,7 @@ namespace OpenSim.Framework.Communications
235 catch (Exception e) 235 catch (Exception e)
236 { 236 {
237 m_log.ErrorFormat( 237 m_log.ErrorFormat(
238 "[LOGIN END]: Error retrieving inventory skeleton of agent {0}, {1} - {2}", 238 "[LOGIN END]: XMLRPC Error retrieving inventory skeleton of agent {0}, {1} - {2}",
239 agentID, e.GetType(), e.Message); 239 agentID, e.GetType(), e.Message);
240 240
241 return logResponse.CreateLoginInventoryFailedResponse(); 241 return logResponse.CreateLoginInventoryFailedResponse();
@@ -288,7 +288,7 @@ namespace OpenSim.Framework.Communications
288 } 288 }
289 catch (Exception e) 289 catch (Exception e)
290 { 290 {
291 m_log.Info("[LOGIN END]: " + e.ToString()); 291 m_log.Info("[LOGIN END]: XMLRPC " + e.ToString());
292 return logResponse.CreateDeadRegionResponse(); 292 return logResponse.CreateDeadRegionResponse();
293 //return logResponse.ToXmlRpcResponse(); 293 //return logResponse.ToXmlRpcResponse();
294 } 294 }
@@ -299,18 +299,18 @@ namespace OpenSim.Framework.Communications
299 StatsManager.UserStats.AddSuccessfulLogin(); 299 StatsManager.UserStats.AddSuccessfulLogin();
300 300
301 m_log.DebugFormat( 301 m_log.DebugFormat(
302 "[LOGIN END]: Authentication of user {0} {1} successful. Sending response to client.", 302 "[LOGIN END]: XMLRPC Authentication of user {0} {1} successful. Sending response to client.",
303 firstname, lastname); 303 firstname, lastname);
304 304
305 return logResponse.ToXmlRpcResponse(); 305 return logResponse.ToXmlRpcResponse();
306 } 306 }
307 catch (Exception e) 307 catch (Exception e)
308 { 308 {
309 m_log.Info("[LOGIN END]: Login failed, " + e.ToString()); 309 m_log.Info("[LOGIN END]: XMLRPC Login failed, " + e.ToString());
310 } 310 }
311 } 311 }
312 312
313 m_log.Info("[LOGIN END]: Login failed. Sending back blank XMLRPC response"); 313 m_log.Info("[LOGIN END]: XMLRPC Login failed. Sending back blank XMLRPC response");
314 return response; 314 return response;
315 } 315 }
316 finally 316 finally
@@ -345,14 +345,15 @@ namespace OpenSim.Framework.Communications
345 345
346 if (map.ContainsKey("start")) 346 if (map.ContainsKey("start"))
347 { 347 {
348 m_log.Info("[LOGIN]: StartLocation Requested: " + map["start"].AsString()); 348 m_log.Info("[LOGIN]: LLSD StartLocation Requested: " + map["start"].AsString());
349 startLocationRequest = map["start"].AsString(); 349 startLocationRequest = map["start"].AsString();
350 } 350 }
351 m_log.Info("[LOGIN]: LLSD Login Requested for: '" + firstname+"' '"+lastname+"' / "+passwd);
351 352
352 userProfile = GetTheUser(firstname, lastname); 353 userProfile = GetTheUser(firstname, lastname);
353 if (userProfile == null) 354 if (userProfile == null)
354 { 355 {
355 m_log.Info("[LOGIN]: Could not find a profile for " + firstname + " " + lastname); 356 m_log.Info("[LOGIN]: LLSD Could not find a profile for " + firstname + " " + lastname);
356 357
357 return logResponse.CreateLoginFailedResponseLLSD(); 358 return logResponse.CreateLoginFailedResponseLLSD();
358 } 359 }
@@ -370,10 +371,19 @@ namespace OpenSim.Framework.Communications
370 // If we already have a session... 371 // If we already have a session...
371 if (userProfile.CurrentAgent != null && userProfile.CurrentAgent.AgentOnline) 372 if (userProfile.CurrentAgent != null && userProfile.CurrentAgent.AgentOnline)
372 { 373 {
373 userProfile.CurrentAgent = null; 374 userProfile.CurrentAgent.AgentOnline = false;
375
374 m_userManager.CommitAgent(ref userProfile); 376 m_userManager.CommitAgent(ref userProfile);
377 // try to tell the region that their user is dead.
378 LogOffUser(userProfile, " LLSD You were logged off because you logged in from another location");
375 379
376 // Reject the login 380 // Reject the login
381
382 m_log.InfoFormat(
383 "[LOGIN END]: LLSD Notifying user {0} {1} that they are already logged in",
384 userProfile.FirstName, userProfile.SurName);
385
386 userProfile.CurrentAgent = null;
377 return logResponse.CreateAlreadyLoggedInResponseLLSD(); 387 return logResponse.CreateAlreadyLoggedInResponseLLSD();
378 } 388 }
379 389
@@ -385,7 +395,23 @@ namespace OpenSim.Framework.Communications
385 { 395 {
386 LLUUID agentID = userProfile.ID; 396 LLUUID agentID = userProfile.ID;
387 397
388 InventoryData inventData = GetInventorySkeleton(agentID); 398 //InventoryData inventData = GetInventorySkeleton(agentID);
399 InventoryData inventData = null;
400
401 try
402 {
403 inventData = GetInventorySkeleton(agentID);
404 }
405 catch (Exception e)
406 {
407 m_log.ErrorFormat(
408 "[LOGIN END]: LLSD Error retrieving inventory skeleton of agent {0}, {1} - {2}",
409 agentID, e.GetType(), e.Message);
410
411 return logResponse.CreateLoginFailedResponseLLSD();// .CreateLoginInventoryFailedResponseLLSD ();
412 }
413
414
389 ArrayList AgentInventoryArray = inventData.InventoryArray; 415 ArrayList AgentInventoryArray = inventData.InventoryArray;
390 416
391 Hashtable InventoryRootHash = new Hashtable(); 417 Hashtable InventoryRootHash = new Hashtable();
@@ -394,6 +420,20 @@ namespace OpenSim.Framework.Communications
394 InventoryRoot.Add(InventoryRootHash); 420 InventoryRoot.Add(InventoryRootHash);
395 userProfile.RootInventoryFolderID = inventData.RootFolderID; 421 userProfile.RootInventoryFolderID = inventData.RootFolderID;
396 422
423
424 // Inventory Library Section
425 Hashtable InventoryLibRootHash = new Hashtable();
426 InventoryLibRootHash["folder_id"] = "00000112-000f-0000-0000-000100bba000";
427 ArrayList InventoryLibRoot = new ArrayList();
428 InventoryLibRoot.Add(InventoryLibRootHash);
429 logResponse.InventoryLibRoot = InventoryLibRoot;
430
431 logResponse.InventoryLibraryOwner = GetLibraryOwner();
432
433 logResponse.InventoryRoot = InventoryRoot;
434 logResponse.InventorySkeleton = AgentInventoryArray;
435 logResponse.InventoryLibrary = GetInventoryLibrary();
436
397 // Circuit Code 437 // Circuit Code
398 uint circode = (uint)(Util.RandomClass.Next()); 438 uint circode = (uint)(Util.RandomClass.Next());
399 439
@@ -402,17 +442,7 @@ namespace OpenSim.Framework.Communications
402 logResponse.AgentID = agentID.ToString(); 442 logResponse.AgentID = agentID.ToString();
403 logResponse.SessionID = userProfile.CurrentAgent.SessionID.ToString(); 443 logResponse.SessionID = userProfile.CurrentAgent.SessionID.ToString();
404 logResponse.SecureSessionID = userProfile.CurrentAgent.SecureSessionID.ToString(); 444 logResponse.SecureSessionID = userProfile.CurrentAgent.SecureSessionID.ToString();
405 logResponse.InventoryRoot = InventoryRoot;
406 logResponse.InventorySkeleton = AgentInventoryArray;
407 logResponse.InventoryLibrary = GetInventoryLibrary();
408
409 Hashtable InventoryLibRootHash = new Hashtable();
410 InventoryLibRootHash["folder_id"] = "00000112-000f-0000-0000-000100bba000";
411 ArrayList InventoryLibRoot = new ArrayList();
412 InventoryLibRoot.Add(InventoryLibRootHash);
413 logResponse.InventoryLibRoot = InventoryLibRoot;
414 445
415 logResponse.InventoryLibraryOwner = GetLibraryOwner();
416 logResponse.CircuitCode = (Int32)circode; 446 logResponse.CircuitCode = (Int32)circode;
417 //logResponse.RegionX = 0; //overwritten 447 //logResponse.RegionX = 0; //overwritten
418 //logResponse.RegionY = 0; //overwritten 448 //logResponse.RegionY = 0; //overwritten
@@ -422,6 +452,7 @@ namespace OpenSim.Framework.Communications
422 //logResponse.SimPort = 0; //overwritten 452 //logResponse.SimPort = 0; //overwritten
423 logResponse.Message = GetMessage(); 453 logResponse.Message = GetMessage();
424 logResponse.BuddList = ConvertFriendListItem(m_userManager.GetUserFriendList(agentID)); 454 logResponse.BuddList = ConvertFriendListItem(m_userManager.GetUserFriendList(agentID));
455 logResponse.StartLocation = startLocationRequest;
425 456
426 try 457 try
427 { 458 {
@@ -429,7 +460,7 @@ namespace OpenSim.Framework.Communications
429 } 460 }
430 catch (Exception ex) 461 catch (Exception ex)
431 { 462 {
432 m_log.Info("[LOGIN]: " + ex.ToString()); 463 m_log.Info("[LOGIN]: LLSD " + ex.ToString());
433 return logResponse.CreateDeadRegionResponseLLSD(); 464 return logResponse.CreateDeadRegionResponseLLSD();
434 } 465 }
435 466
@@ -439,11 +470,15 @@ namespace OpenSim.Framework.Communications
439 if (StatsManager.UserStats != null) 470 if (StatsManager.UserStats != null)
440 StatsManager.UserStats.AddSuccessfulLogin(); 471 StatsManager.UserStats.AddSuccessfulLogin();
441 472
473 m_log.DebugFormat(
474 "[LOGIN END]: LLSD Authentication of user {0} {1} successful. Sending response to client.",
475 userProfile.FirstName, userProfile.SurName);
476
442 return logResponse.ToLLSDResponse(); 477 return logResponse.ToLLSDResponse();
443 } 478 }
444 catch (Exception ex) 479 catch (Exception ex)
445 { 480 {
446 m_log.Info("[LOGIN]: " + ex.ToString()); 481 m_log.Info("[LOGIN]: LLSD " + ex.ToString());
447 return logResponse.CreateFailedResponseLLSD(); 482 return logResponse.CreateFailedResponseLLSD();
448 } 483 }
449 } 484 }