diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs
index be47258d23..3e3216fdf9 100644
--- a/OpenSim/Framework/Communications/LoginService.cs
+++ b/OpenSim/Framework/Communications/LoginService.cs
@@ -73,7 +73,7 @@ namespace OpenSim.Framework.UserManagement
}
///
- /// Main user login function
+ /// Called when we receive the client's initial
///
/// The XMLRPC request
/// The response to send
@@ -94,25 +94,32 @@ namespace OpenSim.Framework.UserManagement
string startLocationRequest = "last";
- if (requestData.Contains("start"))
- {
- startLocationRequest = (string)requestData["start"];
- m_log.Info("[LOGIN]: Client Requested Start: " + (string)requestData["start"]);
- }
-
UserProfileData userProfile;
LoginResponse logResponse = new LoginResponse();
+
+ string firstname = String.Empty;
+ string lastname = String.Empty;
if (GoodXML)
{
- string firstname = (string) requestData["first"];
- string lastname = (string) requestData["last"];
+ firstname = (string) requestData["first"];
+ lastname = (string) requestData["last"];
+
+ m_log.InfoFormat(
+ "[LOGIN]: Received login request message from user {0} {1}",
+ firstname, lastname);
if( requestData.Contains("version"))
{
string clientversion = (string)requestData["version"];
- m_log.Info("[LOGIN]: Client Version " + clientversion + " for " + firstname + " " + lastname);
+ m_log.Info("[LOGIN]: Client version: " + clientversion);
}
+
+ if (requestData.Contains("start"))
+ {
+ startLocationRequest = (string)requestData["start"];
+ m_log.Info("[LOGIN]: Client requested start location: " + (string)requestData["start"]);
+ }
userProfile = GetTheUser(firstname, lastname);
if (userProfile == null)
@@ -134,31 +141,35 @@ namespace OpenSim.Framework.UserManagement
{
webloginkey = new LLUUID((string)requestData["web_login_key"]);
}
- catch (System.Exception)
+ catch (System.Exception e)
{
+ m_log.InfoFormat(
+ "[LOGIN]: Bad web_login_key: {0} for user {1} {2}, exception {3}",
+ requestData["web_login_key"], firstname, lastname, e);
+
return logResponse.CreateFailedResponse();
}
GoodLogin = AuthenticateUser(userProfile, webloginkey);
}
- else
- {
- return logResponse.CreateFailedResponse();
- }
}
else
{
+ m_log.Info(
+ "[LOGIN]: login_to_simulator login message did not contain all the required data");
+
return logResponse.CreateGridErrorResponse();
}
if (!GoodLogin)
{
+ m_log.InfoFormat("[LOGIN]: User {0} {1} failed authentication", firstname, lastname);
+
return logResponse.CreateLoginFailedResponse();
}
else
{
// If we already have a session...
-
if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline)
{
//TODO: The following statements can cause trouble:
@@ -169,6 +180,11 @@ namespace OpenSim.Framework.UserManagement
m_userManager.CommitAgent(ref userProfile);
// Reject the login
+
+ m_log.InfoFormat(
+ "[LOGIN]: Notifying user {0} {1} that they are already logged in",
+ firstname, lastname);
+
return logResponse.CreateAlreadyLoggedInResponse();
}
// Otherwise...
@@ -234,14 +250,19 @@ namespace OpenSim.Framework.UserManagement
if (StatsManager.UserStats != null)
StatsManager.UserStats.AddSuccessfulLogin();
+ m_log.InfoFormat(
+ "[LOGIN]: Authentication of user {0} {1} successful. Sending response to client.",
+ firstname, lastname);
+
return logResponse.ToXmlRpcResponse();
}
catch (Exception e)
{
- m_log.Info("[LOGIN]: " + e.ToString());
+ m_log.Info("[LOGIN]: Login failed, exception" + e.ToString());
}
- //}
}
+
+ m_log.Info("[LOGIN]: Login failed. Sending back blank XMLRPC response");
return response;
}
finally
diff --git a/OpenSim/Framework/NetworkServersInfo.cs b/OpenSim/Framework/NetworkServersInfo.cs
index 20cd768b27..df559fcafe 100644
--- a/OpenSim/Framework/NetworkServersInfo.cs
+++ b/OpenSim/Framework/NetworkServersInfo.cs
@@ -45,7 +45,7 @@ namespace OpenSim.Framework
public string InventoryURL = String.Empty;
- public static uint DefaultHttpListenerPort = 9000;
+ public static readonly uint DefaultHttpListenerPort = 9000;
public uint HttpListenerPort = DefaultHttpListenerPort;
public static uint RemotingListenerPort = 8895;
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index b5d6869894..fc6da5790c 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -71,6 +71,7 @@ namespace OpenSim.Framework
m_internalEndPoint = ConvertFrom.InternalEndPoint;
m_externalHostName = ConvertFrom.ExternalHostName;
m_remotingPort = ConvertFrom.RemotingPort;
+ m_httpPort = ConvertFrom.HttpPort;
m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
RemotingAddress = ConvertFrom.RemotingAddress;
RegionID = LLUUID.Zero;
@@ -79,16 +80,27 @@ namespace OpenSim.Framework
public LLUUID RegionID = LLUUID.Zero;
- public uint m_remotingPort;
+ protected uint m_remotingPort;
public uint RemotingPort
{
get { return m_remotingPort; }
set { m_remotingPort = value; }
}
+
+ ///
+ /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
+ ///
+ protected uint m_httpPort;
+ public uint HttpPort
+ {
+ get { return m_httpPort; }
+ set { m_httpPort = value; }
+ }
+
public bool m_allow_alternate_ports;
- public string m_serverURI;
+ protected string m_serverURI;
public string ServerURI
{
get
@@ -142,7 +154,6 @@ namespace OpenSim.Framework
}
protected string m_externalHostName;
-
public string ExternalHostName
{
get { return m_externalHostName; }
diff --git a/OpenSim/Framework/SerializableRegionInfo.cs b/OpenSim/Framework/SerializableRegionInfo.cs
index 39a5993017..2c73da8749 100644
--- a/OpenSim/Framework/SerializableRegionInfo.cs
+++ b/OpenSim/Framework/SerializableRegionInfo.cs
@@ -49,6 +49,7 @@ namespace OpenSim.Framework
m_internalEndPoint = ConvertFrom.InternalEndPoint;
m_externalHostName = ConvertFrom.ExternalHostName;
m_remotingPort = ConvertFrom.RemotingPort;
+ m_httpPort = ConvertFrom.HttpPort;
m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
RemotingAddress = ConvertFrom.RemotingAddress;
m_proxyUrl = ConvertFrom.proxyUrl;
@@ -79,17 +80,29 @@ namespace OpenSim.Framework
public Guid RegionID = LLUUID.Zero.UUID;
public uint m_remotingPort;
-
public uint RemotingPort
{
get { return m_remotingPort; }
set { m_remotingPort = value; }
}
+
+ ///
+ /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
+ ///
+ /// FIXME: Defaulting to 9000 temporarily (on the basis that this is the http port most region
+ /// servers are running) until the revision in which this change is made propogates around grids.
+ ///
+ protected uint m_httpPort = 9000;
+ public uint HttpPort
+ {
+ get { return m_httpPort; }
+ set { m_httpPort = value; }
+ }
+
public bool m_allow_alternate_ports;
public string RemotingAddress;
-
public IPEndPoint ExternalEndPoint
{
get
diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs
index 823733f47c..20273ab8c1 100644
--- a/OpenSim/Grid/UserServer/UserLoginService.cs
+++ b/OpenSim/Grid/UserServer/UserLoginService.cs
@@ -174,9 +174,9 @@ namespace OpenSim.Grid.UserServer
// Update agent with target sim
- m_log.Info("[LOGIN]: Telling "
- + SimInfo.regionName + " @ " + SimInfo.httpServerURI + " " +
- SimInfo.regionLocX + "," + SimInfo.regionLocY + " to expect user connection");
+ m_log.InfoFormat(
+ "[LOGIN]: Telling region {0} @ {1},{2} ({3}) to expect user connection",
+ SimInfo.regionName, response.RegionX, response.RegionY, SimInfo.httpServerURI);
XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 6000);
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index f96d474e94..aa5a432a83 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -349,7 +349,7 @@ namespace OpenSim
m_standaloneAuthenticate);
m_loginService.OnLoginToRegion += backendService.AddNewSession;
- // XMLRPC action
+ // set up XMLRPC handler for client's initial login request message
m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod);
// provides the web form login
diff --git a/OpenSim/Region/Communications/Local/LocalLoginService.cs b/OpenSim/Region/Communications/Local/LocalLoginService.cs
index 9f4723990b..3eac7e99a0 100644
--- a/OpenSim/Region/Communications/Local/LocalLoginService.cs
+++ b/OpenSim/Region/Communications/Local/LocalLoginService.cs
@@ -178,6 +178,10 @@ namespace OpenSim.Region.Communications.Local
_login.StartPos = new LLVector3(128, 128, 70);
_login.CapsPath = capsPath;
+ m_log.InfoFormat(
+ "[LOGIN]: Telling region {0} @ {1},{2} ({3}:{4}) to expect user connection",
+ reg.RegionName, response.RegionX, response.RegionY, response.SimAddress, response.SimPort);
+
handlerLoginToRegion = OnLoginToRegion;
if (handlerLoginToRegion != null)
{
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index fa1db15735..23b8fb41b2 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -228,7 +228,14 @@ namespace OpenSim.Region.Communications.OGS1
string externalIpStr = Util.GetHostFromDNS(simIp).ToString();
SimpleRegionInfo sri = new SimpleRegionInfo(regX, regY, simIp, port);
+
sri.RemotingPort = Convert.ToUInt32(neighbourData["remoting_port"]);
+
+ if (neighbourData.ContainsKey("http_port"))
+ {
+ sri.HttpPort = Convert.ToUInt32(neighbourData["http_port"]);
+ }
+
sri.RegionID = new LLUUID((string) neighbourData["uuid"]);
neighbours.Add(sri);
@@ -275,6 +282,11 @@ namespace OpenSim.Region.Communications.OGS1
regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
regionInfo.RemotingAddress = internalIpStr;
+
+ if (responseData.ContainsKey("http_port"))
+ {
+ regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]);
+ }
regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
regionInfo.RegionName = (string) responseData["region_name"];
@@ -333,6 +345,11 @@ namespace OpenSim.Region.Communications.OGS1
regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
regionInfo.RemotingAddress = internalIpStr;
+
+ if (responseData.ContainsKey("http_port"))
+ {
+ regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]);
+ }
regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
regionInfo.RegionName = (string) responseData["region_name"];
@@ -385,6 +402,11 @@ namespace OpenSim.Region.Communications.OGS1
regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
regionInfo.RemotingAddress = internalIpStr;
+
+ if (responseData.ContainsKey("http_port"))
+ {
+ regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]);
+ }
regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
regionInfo.RegionName = (string) responseData["region_name"];
@@ -813,8 +835,10 @@ namespace OpenSim.Region.Communications.OGS1
// And, surprisingly, the reason is.. it doesn't know
// it's own remoting port! How special.
region = new SearializableRegionInfo(RequestNeighbourInfo(region.RegionHandle));
- region.RemotingAddress = region.ExternalHostName;
- region.RemotingPort = NetworkServersInfo.RemotingListenerPort;
+ region.RemotingAddress = region.ExternalHostName;
+ region.RemotingPort = NetworkServersInfo.RemotingListenerPort;
+ region.HttpPort = serversInfo.HttpListenerPort;
+
if (m_localBackend.RegionUp(region, regionhandle))
{
return true;
diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
index 5dccf135c1..f2b2f20e63 100644
--- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
@@ -554,7 +554,8 @@ namespace OpenSim.Region.Environment.Scenes
// TODO Should construct this behind a method
string capsPath =
- "http://" + reg.ExternalHostName + ":" + 9000 + "/CAPS/" + circuitdata.CapsPath + "0000/";
+ "http://" + reg.ExternalHostName + ":" + reg.HttpPort
+ + "/CAPS/" + circuitdata.CapsPath + "0000/";
avatar.ControllingClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4),
capsPath);
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index f58109d0f7..def7a77cdc 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -1618,9 +1618,9 @@ namespace OpenSim.Region.Environment.Scenes
{
AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo();
- // TODO Should construct this behind a method
+ // TODO Should construct this behind a method
string capsPath =
- "http://" + neighbourRegion.ExternalHostName + ":" + 9000
+ "http://" + neighbourRegion.ExternalHostName + ":" + neighbourRegion.HttpPort
+ "/CAPS/" + circuitdata.CapsPath + "0000/";
m_log.DebugFormat(