From 5c2168cae758ae19367f4c2f5a02713e74fc0912 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 25 May 2011 12:32:21 -0700
Subject: HG: Instant Message working. Tested on HG standalones only. Needs a
lot more testing.
---
.../Handlers/Hypergrid/UserAgentServerConnector.cs | 48 ++++++++++++++++++++++
1 file changed, 48 insertions(+)
(limited to 'OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs')
diff --git a/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs
index e51fe0b..942d960 100644
--- a/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs
+++ b/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs
@@ -52,6 +52,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
// MethodBase.GetCurrentMethod().DeclaringType);
private IUserAgentService m_HomeUsersService;
+ private string[] m_AuthorizedCallers;
public UserAgentServerConnector(IConfigSource config, IHttpServer server) :
this(config, server, null)
@@ -75,6 +76,10 @@ namespace OpenSim.Server.Handlers.Hypergrid
string loginServerIP = gridConfig.GetString("LoginServerIP", "127.0.0.1");
bool proxy = gridConfig.GetBoolean("HasProxy", false);
+ string csv = gridConfig.GetString("AuthorizedCallers", "127.0.0.1");
+ csv = csv.Replace(" ", "");
+ m_AuthorizedCallers = csv.Split(',');
+
server.AddXmlRPCHandler("agent_is_coming_home", AgentIsComingHome, false);
server.AddXmlRPCHandler("get_home_region", GetHomeRegion, false);
server.AddXmlRPCHandler("verify_agent", VerifyAgent, false);
@@ -85,6 +90,8 @@ namespace OpenSim.Server.Handlers.Hypergrid
server.AddXmlRPCHandler("get_online_friends", GetOnlineFriends, false);
server.AddXmlRPCHandler("get_server_urls", GetServerURLs, false);
+ server.AddXmlRPCHandler("locate_user", LocateUser, false);
+
server.AddHTTPHandler("/homeagent/", new HomeAgentHandler(m_HomeUsersService, loginServerIP, proxy).Handler);
}
@@ -306,5 +313,46 @@ namespace OpenSim.Server.Handlers.Hypergrid
}
+ ///
+ /// Locates the user.
+ /// This is a sensitive operation, only authorized IP addresses can perform it.
+ ///
+ ///
+ ///
+ ///
+ public XmlRpcResponse LocateUser(XmlRpcRequest request, IPEndPoint remoteClient)
+ {
+ Hashtable hash = new Hashtable();
+
+ bool authorized = false;
+ foreach (string s in m_AuthorizedCallers)
+ if (s == remoteClient.Address.ToString())
+ {
+ authorized = true;
+ break;
+ }
+
+ if (authorized)
+ {
+ Hashtable requestData = (Hashtable)request.Params[0];
+ //string host = (string)requestData["host"];
+ //string portstr = (string)requestData["port"];
+ if (requestData.ContainsKey("userID"))
+ {
+ string userID_str = (string)requestData["userID"];
+ UUID userID = UUID.Zero;
+ UUID.TryParse(userID_str, out userID);
+
+ string url = m_HomeUsersService.LocateUser(userID);
+ if (url != string.Empty)
+ hash["URL"] = url;
+ }
+ }
+
+ XmlRpcResponse response = new XmlRpcResponse();
+ response.Value = hash;
+ return response;
+
+ }
}
}
--
cgit v1.1