aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs')
-rw-r--r--OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs323
1 files changed, 323 insertions, 0 deletions
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
index 7ddcfa6..5028206 100644
--- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
@@ -400,6 +400,329 @@ namespace OpenSim.Services.Connectors.Hypergrid
400 GetBoolResponse(request, out reason); 400 GetBoolResponse(request, out reason);
401 } 401 }
402 402
403 public List<UUID> StatusNotification(List<string> friends, UUID userID, bool online)
404 {
405 Hashtable hash = new Hashtable();
406 hash["userID"] = userID.ToString();
407 hash["online"] = online.ToString();
408 int i = 0;
409 foreach (string s in friends)
410 {
411 hash["friend_" + i.ToString()] = s;
412 i++;
413 }
414
415 IList paramList = new ArrayList();
416 paramList.Add(hash);
417
418 XmlRpcRequest request = new XmlRpcRequest("status_notification", paramList);
419 string reason = string.Empty;
420
421 // Send and get reply
422 List<UUID> friendsOnline = new List<UUID>();
423 XmlRpcResponse response = null;
424 try
425 {
426 response = request.Send(m_ServerURL, 10000);
427 }
428 catch (Exception e)
429 {
430 m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0}", m_ServerURL);
431 reason = "Exception: " + e.Message;
432 return friendsOnline;
433 }
434
435 if (response.IsFault)
436 {
437 m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
438 reason = "XMLRPC Fault";
439 return friendsOnline;
440 }
441
442 hash = (Hashtable)response.Value;
443 //foreach (Object o in hash)
444 // m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
445 try
446 {
447 if (hash == null)
448 {
449 m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetOnlineFriends Got null response from {0}! THIS IS BAAAAD", m_ServerURL);
450 reason = "Internal error 1";
451 return friendsOnline;
452 }
453
454 // Here is the actual response
455 foreach (object key in hash.Keys)
456 {
457 if (key is string && ((string)key).StartsWith("friend_") && hash[key] != null)
458 {
459 UUID uuid;
460 if (UUID.TryParse(hash[key].ToString(), out uuid))
461 friendsOnline.Add(uuid);
462 }
463 }
464
465 }
466 catch (Exception e)
467 {
468 m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on GetOnlineFriends response.");
469 reason = "Exception: " + e.Message;
470 }
471
472 return friendsOnline;
473 }
474
475 public List<UUID> GetOnlineFriends(UUID userID, List<string> friends)
476 {
477 Hashtable hash = new Hashtable();
478 hash["userID"] = userID.ToString();
479 int i = 0;
480 foreach (string s in friends)
481 {
482 hash["friend_" + i.ToString()] = s;
483 i++;
484 }
485
486 IList paramList = new ArrayList();
487 paramList.Add(hash);
488
489 XmlRpcRequest request = new XmlRpcRequest("get_online_friends", paramList);
490 string reason = string.Empty;
491
492 // Send and get reply
493 List<UUID> online = new List<UUID>();
494 XmlRpcResponse response = null;
495 try
496 {
497 response = request.Send(m_ServerURL, 10000);
498 }
499 catch (Exception e)
500 {
501 m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0}", m_ServerURL);
502 reason = "Exception: " + e.Message;
503 return online;
504 }
505
506 if (response.IsFault)
507 {
508 m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
509 reason = "XMLRPC Fault";
510 return online;
511 }
512
513 hash = (Hashtable)response.Value;
514 //foreach (Object o in hash)
515 // m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
516 try
517 {
518 if (hash == null)
519 {
520 m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetOnlineFriends Got null response from {0}! THIS IS BAAAAD", m_ServerURL);
521 reason = "Internal error 1";
522 return online;
523 }
524
525 // Here is the actual response
526 foreach (object key in hash.Keys)
527 {
528 if (key is string && ((string)key).StartsWith("friend_") && hash[key] != null)
529 {
530 UUID uuid;
531 if (UUID.TryParse(hash[key].ToString(), out uuid))
532 online.Add(uuid);
533 }
534 }
535
536 }
537 catch (Exception e)
538 {
539 m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on GetOnlineFriends response.");
540 reason = "Exception: " + e.Message;
541 }
542
543 return online;
544 }
545
546 public Dictionary<string, object> GetServerURLs(UUID userID)
547 {
548 Hashtable hash = new Hashtable();
549 hash["userID"] = userID.ToString();
550
551 IList paramList = new ArrayList();
552 paramList.Add(hash);
553
554 XmlRpcRequest request = new XmlRpcRequest("get_server_urls", paramList);
555 string reason = string.Empty;
556
557 // Send and get reply
558 Dictionary<string, object> serverURLs = new Dictionary<string,object>();
559 XmlRpcResponse response = null;
560 try
561 {
562 response = request.Send(m_ServerURL, 10000);
563 }
564 catch (Exception e)
565 {
566 m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0}", m_ServerURL);
567 reason = "Exception: " + e.Message;
568 return serverURLs;
569 }
570
571 if (response.IsFault)
572 {
573 m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
574 reason = "XMLRPC Fault";
575 return serverURLs;
576 }
577
578 hash = (Hashtable)response.Value;
579 //foreach (Object o in hash)
580 // m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
581 try
582 {
583 if (hash == null)
584 {
585 m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetServerURLs Got null response from {0}! THIS IS BAAAAD", m_ServerURL);
586 reason = "Internal error 1";
587 return serverURLs;
588 }
589
590 // Here is the actual response
591 foreach (object key in hash.Keys)
592 {
593 if (key is string && ((string)key).StartsWith("SRV_") && hash[key] != null)
594 {
595 string serverType = key.ToString().Substring(4); // remove "SRV_"
596 serverURLs.Add(serverType, hash[key].ToString());
597 }
598 }
599
600 }
601 catch (Exception e)
602 {
603 m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on GetOnlineFriends response.");
604 reason = "Exception: " + e.Message;
605 }
606
607 return serverURLs;
608 }
609
610 public string LocateUser(UUID userID)
611 {
612 Hashtable hash = new Hashtable();
613 hash["userID"] = userID.ToString();
614
615 IList paramList = new ArrayList();
616 paramList.Add(hash);
617
618 XmlRpcRequest request = new XmlRpcRequest("locate_user", paramList);
619 string reason = string.Empty;
620
621 // Send and get reply
622 string url = string.Empty;
623 XmlRpcResponse response = null;
624 try
625 {
626 response = request.Send(m_ServerURL, 10000);
627 }
628 catch (Exception e)
629 {
630 m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0}", m_ServerURL);
631 reason = "Exception: " + e.Message;
632 return url;
633 }
634
635 if (response.IsFault)
636 {
637 m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
638 reason = "XMLRPC Fault";
639 return url;
640 }
641
642 hash = (Hashtable)response.Value;
643 //foreach (Object o in hash)
644 // m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
645 try
646 {
647 if (hash == null)
648 {
649 m_log.ErrorFormat("[USER AGENT CONNECTOR]: LocateUser Got null response from {0}! THIS IS BAAAAD", m_ServerURL);
650 reason = "Internal error 1";
651 return url;
652 }
653
654 // Here's the actual response
655 if (hash.ContainsKey("URL"))
656 url = hash["URL"].ToString();
657
658 }
659 catch (Exception e)
660 {
661 m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on LocateUser response.");
662 reason = "Exception: " + e.Message;
663 }
664
665 return url;
666 }
667
668 public string GetUUI(UUID userID, UUID targetUserID)
669 {
670 Hashtable hash = new Hashtable();
671 hash["userID"] = userID.ToString();
672 hash["targetUserID"] = targetUserID.ToString();
673
674 IList paramList = new ArrayList();
675 paramList.Add(hash);
676
677 XmlRpcRequest request = new XmlRpcRequest("get_uui", paramList);
678 string reason = string.Empty;
679
680 // Send and get reply
681 string uui = string.Empty;
682 XmlRpcResponse response = null;
683 try
684 {
685 response = request.Send(m_ServerURL, 10000);
686 }
687 catch (Exception e)
688 {
689 m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0}", m_ServerURL);
690 reason = "Exception: " + e.Message;
691 return uui;
692 }
693
694 if (response.IsFault)
695 {
696 m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
697 reason = "XMLRPC Fault";
698 return uui;
699 }
700
701 hash = (Hashtable)response.Value;
702 //foreach (Object o in hash)
703 // m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
704 try
705 {
706 if (hash == null)
707 {
708 m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetUUI Got null response from {0}! THIS IS BAAAAD", m_ServerURL);
709 reason = "Internal error 1";
710 return uui;
711 }
712
713 // Here's the actual response
714 if (hash.ContainsKey("UUI"))
715 uui = hash["UUI"].ToString();
716
717 }
718 catch (Exception e)
719 {
720 m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on LocateUser response.");
721 reason = "Exception: " + e.Message;
722 }
723
724 return uui;
725 }
403 726
404 private bool GetBoolResponse(XmlRpcRequest request, out string reason) 727 private bool GetBoolResponse(XmlRpcRequest request, out string reason)
405 { 728 {