aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-03-23 21:21:39 +0000
committerJustin Clarke Casey2008-03-23 21:21:39 +0000
commitda531fa9e124394228a7c7597bd50e548af81efb (patch)
treef522f4f115b8bf5db07b45ddcc1c60261dcde680 /OpenSim
parentImplements llGetParcelPrimOwners() (diff)
downloadopensim-SC_OLD-da531fa9e124394228a7c7597bd50e548af81efb.zip
opensim-SC_OLD-da531fa9e124394228a7c7597bd50e548af81efb.tar.gz
opensim-SC_OLD-da531fa9e124394228a7c7597bd50e548af81efb.tar.bz2
opensim-SC_OLD-da531fa9e124394228a7c7597bd50e548af81efb.tar.xz
* Start passing around a region server's http port in RegionInfo.
* This means that caps methods (editing scripts, poss map functions, etc) on non-home regions should now work with servers which are listening for http ports on a non default (9000) port. * If you are running a region server, this may only work properly once your grid server upgrades to this revision * PLEASE NOTE: This shouldn't cause inter-region problems if one end of the connection hasn't upgraded to this revision. However if it does, the instability will persist until the grid and region (and possibly all the region's neighbours) have upgraded to this revision. * This revision also adds extra login related messages, both for success and failure conditions
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/Communications/LoginService.cs57
-rw-r--r--OpenSim/Framework/NetworkServersInfo.cs2
-rw-r--r--OpenSim/Framework/RegionInfo.cs17
-rw-r--r--OpenSim/Framework/SerializableRegionInfo.cs17
-rw-r--r--OpenSim/Grid/UserServer/UserLoginService.cs6
-rw-r--r--OpenSim/Region/Application/OpenSimMain.cs2
-rw-r--r--OpenSim/Region/Communications/Local/LocalLoginService.cs4
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs28
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs3
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs4
10 files changed, 107 insertions, 33 deletions
diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs
index be47258..3e3216f 100644
--- a/OpenSim/Framework/Communications/LoginService.cs
+++ b/OpenSim/Framework/Communications/LoginService.cs
@@ -73,7 +73,7 @@ namespace OpenSim.Framework.UserManagement
73 } 73 }
74 74
75 /// <summary> 75 /// <summary>
76 /// Main user login function 76 /// Called when we receive the client's initial
77 /// </summary> 77 /// </summary>
78 /// <param name="request">The XMLRPC request</param> 78 /// <param name="request">The XMLRPC request</param>
79 /// <returns>The response to send</returns> 79 /// <returns>The response to send</returns>
@@ -94,25 +94,32 @@ namespace OpenSim.Framework.UserManagement
94 94
95 string startLocationRequest = "last"; 95 string startLocationRequest = "last";
96 96
97 if (requestData.Contains("start"))
98 {
99 startLocationRequest = (string)requestData["start"];
100 m_log.Info("[LOGIN]: Client Requested Start: " + (string)requestData["start"]);
101 }
102
103 UserProfileData userProfile; 97 UserProfileData userProfile;
104 LoginResponse logResponse = new LoginResponse(); 98 LoginResponse logResponse = new LoginResponse();
99
100 string firstname = String.Empty;
101 string lastname = String.Empty;
105 102
106 if (GoodXML) 103 if (GoodXML)
107 { 104 {
108 string firstname = (string) requestData["first"]; 105 firstname = (string) requestData["first"];
109 string lastname = (string) requestData["last"]; 106 lastname = (string) requestData["last"];
107
108 m_log.InfoFormat(
109 "[LOGIN]: Received login request message from user {0} {1}",
110 firstname, lastname);
110 111
111 if( requestData.Contains("version")) 112 if( requestData.Contains("version"))
112 { 113 {
113 string clientversion = (string)requestData["version"]; 114 string clientversion = (string)requestData["version"];
114 m_log.Info("[LOGIN]: Client Version " + clientversion + " for " + firstname + " " + lastname); 115 m_log.Info("[LOGIN]: Client version: " + clientversion);
115 } 116 }
117
118 if (requestData.Contains("start"))
119 {
120 startLocationRequest = (string)requestData["start"];
121 m_log.Info("[LOGIN]: Client requested start location: " + (string)requestData["start"]);
122 }
116 123
117 userProfile = GetTheUser(firstname, lastname); 124 userProfile = GetTheUser(firstname, lastname);
118 if (userProfile == null) 125 if (userProfile == null)
@@ -134,31 +141,35 @@ namespace OpenSim.Framework.UserManagement
134 { 141 {
135 webloginkey = new LLUUID((string)requestData["web_login_key"]); 142 webloginkey = new LLUUID((string)requestData["web_login_key"]);
136 } 143 }
137 catch (System.Exception) 144 catch (System.Exception e)
138 { 145 {
146 m_log.InfoFormat(
147 "[LOGIN]: Bad web_login_key: {0} for user {1} {2}, exception {3}",
148 requestData["web_login_key"], firstname, lastname, e);
149
139 return logResponse.CreateFailedResponse(); 150 return logResponse.CreateFailedResponse();
140 } 151 }
141 GoodLogin = AuthenticateUser(userProfile, webloginkey); 152 GoodLogin = AuthenticateUser(userProfile, webloginkey);
142 153
143 } 154 }
144 else
145 {
146 return logResponse.CreateFailedResponse();
147 }
148 } 155 }
149 else 156 else
150 { 157 {
158 m_log.Info(
159 "[LOGIN]: login_to_simulator login message did not contain all the required data");
160
151 return logResponse.CreateGridErrorResponse(); 161 return logResponse.CreateGridErrorResponse();
152 } 162 }
153 163
154 if (!GoodLogin) 164 if (!GoodLogin)
155 { 165 {
166 m_log.InfoFormat("[LOGIN]: User {0} {1} failed authentication", firstname, lastname);
167
156 return logResponse.CreateLoginFailedResponse(); 168 return logResponse.CreateLoginFailedResponse();
157 } 169 }
158 else 170 else
159 { 171 {
160 // If we already have a session... 172 // If we already have a session...
161
162 if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline) 173 if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline)
163 { 174 {
164 //TODO: The following statements can cause trouble: 175 //TODO: The following statements can cause trouble:
@@ -169,6 +180,11 @@ namespace OpenSim.Framework.UserManagement
169 m_userManager.CommitAgent(ref userProfile); 180 m_userManager.CommitAgent(ref userProfile);
170 181
171 // Reject the login 182 // Reject the login
183
184 m_log.InfoFormat(
185 "[LOGIN]: Notifying user {0} {1} that they are already logged in",
186 firstname, lastname);
187
172 return logResponse.CreateAlreadyLoggedInResponse(); 188 return logResponse.CreateAlreadyLoggedInResponse();
173 } 189 }
174 // Otherwise... 190 // Otherwise...
@@ -234,14 +250,19 @@ namespace OpenSim.Framework.UserManagement
234 if (StatsManager.UserStats != null) 250 if (StatsManager.UserStats != null)
235 StatsManager.UserStats.AddSuccessfulLogin(); 251 StatsManager.UserStats.AddSuccessfulLogin();
236 252
253 m_log.InfoFormat(
254 "[LOGIN]: Authentication of user {0} {1} successful. Sending response to client.",
255 firstname, lastname);
256
237 return logResponse.ToXmlRpcResponse(); 257 return logResponse.ToXmlRpcResponse();
238 } 258 }
239 catch (Exception e) 259 catch (Exception e)
240 { 260 {
241 m_log.Info("[LOGIN]: " + e.ToString()); 261 m_log.Info("[LOGIN]: Login failed, exception" + e.ToString());
242 } 262 }
243 //}
244 } 263 }
264
265 m_log.Info("[LOGIN]: Login failed. Sending back blank XMLRPC response");
245 return response; 266 return response;
246 } 267 }
247 finally 268 finally
diff --git a/OpenSim/Framework/NetworkServersInfo.cs b/OpenSim/Framework/NetworkServersInfo.cs
index 20cd768..df559fc 100644
--- a/OpenSim/Framework/NetworkServersInfo.cs
+++ b/OpenSim/Framework/NetworkServersInfo.cs
@@ -45,7 +45,7 @@ namespace OpenSim.Framework
45 45
46 public string InventoryURL = String.Empty; 46 public string InventoryURL = String.Empty;
47 47
48 public static uint DefaultHttpListenerPort = 9000; 48 public static readonly uint DefaultHttpListenerPort = 9000;
49 public uint HttpListenerPort = DefaultHttpListenerPort; 49 public uint HttpListenerPort = DefaultHttpListenerPort;
50 50
51 public static uint RemotingListenerPort = 8895; 51 public static uint RemotingListenerPort = 8895;
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index b5d6869..fc6da57 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -71,6 +71,7 @@ namespace OpenSim.Framework
71 m_internalEndPoint = ConvertFrom.InternalEndPoint; 71 m_internalEndPoint = ConvertFrom.InternalEndPoint;
72 m_externalHostName = ConvertFrom.ExternalHostName; 72 m_externalHostName = ConvertFrom.ExternalHostName;
73 m_remotingPort = ConvertFrom.RemotingPort; 73 m_remotingPort = ConvertFrom.RemotingPort;
74 m_httpPort = ConvertFrom.HttpPort;
74 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; 75 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
75 RemotingAddress = ConvertFrom.RemotingAddress; 76 RemotingAddress = ConvertFrom.RemotingAddress;
76 RegionID = LLUUID.Zero; 77 RegionID = LLUUID.Zero;
@@ -79,16 +80,27 @@ namespace OpenSim.Framework
79 80
80 public LLUUID RegionID = LLUUID.Zero; 81 public LLUUID RegionID = LLUUID.Zero;
81 82
82 public uint m_remotingPort; 83 protected uint m_remotingPort;
83 84
84 public uint RemotingPort 85 public uint RemotingPort
85 { 86 {
86 get { return m_remotingPort; } 87 get { return m_remotingPort; }
87 set { m_remotingPort = value; } 88 set { m_remotingPort = value; }
88 } 89 }
90
91 /// <value>
92 /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
93 /// </value>
94 protected uint m_httpPort;
95 public uint HttpPort
96 {
97 get { return m_httpPort; }
98 set { m_httpPort = value; }
99 }
100
89 public bool m_allow_alternate_ports; 101 public bool m_allow_alternate_ports;
90 102
91 public string m_serverURI; 103 protected string m_serverURI;
92 public string ServerURI 104 public string ServerURI
93 { 105 {
94 get 106 get
@@ -142,7 +154,6 @@ namespace OpenSim.Framework
142 } 154 }
143 155
144 protected string m_externalHostName; 156 protected string m_externalHostName;
145
146 public string ExternalHostName 157 public string ExternalHostName
147 { 158 {
148 get { return m_externalHostName; } 159 get { return m_externalHostName; }
diff --git a/OpenSim/Framework/SerializableRegionInfo.cs b/OpenSim/Framework/SerializableRegionInfo.cs
index 39a5993..2c73da8 100644
--- a/OpenSim/Framework/SerializableRegionInfo.cs
+++ b/OpenSim/Framework/SerializableRegionInfo.cs
@@ -49,6 +49,7 @@ namespace OpenSim.Framework
49 m_internalEndPoint = ConvertFrom.InternalEndPoint; 49 m_internalEndPoint = ConvertFrom.InternalEndPoint;
50 m_externalHostName = ConvertFrom.ExternalHostName; 50 m_externalHostName = ConvertFrom.ExternalHostName;
51 m_remotingPort = ConvertFrom.RemotingPort; 51 m_remotingPort = ConvertFrom.RemotingPort;
52 m_httpPort = ConvertFrom.HttpPort;
52 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; 53 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
53 RemotingAddress = ConvertFrom.RemotingAddress; 54 RemotingAddress = ConvertFrom.RemotingAddress;
54 m_proxyUrl = ConvertFrom.proxyUrl; 55 m_proxyUrl = ConvertFrom.proxyUrl;
@@ -79,17 +80,29 @@ namespace OpenSim.Framework
79 public Guid RegionID = LLUUID.Zero.UUID; 80 public Guid RegionID = LLUUID.Zero.UUID;
80 81
81 public uint m_remotingPort; 82 public uint m_remotingPort;
82
83 public uint RemotingPort 83 public uint RemotingPort
84 { 84 {
85 get { return m_remotingPort; } 85 get { return m_remotingPort; }
86 set { m_remotingPort = value; } 86 set { m_remotingPort = value; }
87 } 87 }
88
89 /// <value>
90 /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
91 ///
92 /// FIXME: Defaulting to 9000 temporarily (on the basis that this is the http port most region
93 /// servers are running) until the revision in which this change is made propogates around grids.
94 /// </value>
95 protected uint m_httpPort = 9000;
96 public uint HttpPort
97 {
98 get { return m_httpPort; }
99 set { m_httpPort = value; }
100 }
101
88 public bool m_allow_alternate_ports; 102 public bool m_allow_alternate_ports;
89 103
90 public string RemotingAddress; 104 public string RemotingAddress;
91 105
92
93 public IPEndPoint ExternalEndPoint 106 public IPEndPoint ExternalEndPoint
94 { 107 {
95 get 108 get
diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs
index 823733f..20273ab 100644
--- a/OpenSim/Grid/UserServer/UserLoginService.cs
+++ b/OpenSim/Grid/UserServer/UserLoginService.cs
@@ -174,9 +174,9 @@ namespace OpenSim.Grid.UserServer
174 174
175 // Update agent with target sim 175 // Update agent with target sim
176 176
177 m_log.Info("[LOGIN]: Telling " 177 m_log.InfoFormat(
178 + SimInfo.regionName + " @ " + SimInfo.httpServerURI + " " + 178 "[LOGIN]: Telling region {0} @ {1},{2} ({3}) to expect user connection",
179 SimInfo.regionLocX + "," + SimInfo.regionLocY + " to expect user connection"); 179 SimInfo.regionName, response.RegionX, response.RegionY, SimInfo.httpServerURI);
180 180
181 XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams); 181 XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
182 XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 6000); 182 XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 6000);
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index f96d474..aa5a432 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -349,7 +349,7 @@ namespace OpenSim
349 m_standaloneAuthenticate); 349 m_standaloneAuthenticate);
350 m_loginService.OnLoginToRegion += backendService.AddNewSession; 350 m_loginService.OnLoginToRegion += backendService.AddNewSession;
351 351
352 // XMLRPC action 352 // set up XMLRPC handler for client's initial login request message
353 m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); 353 m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod);
354 354
355 // provides the web form login 355 // provides the web form login
diff --git a/OpenSim/Region/Communications/Local/LocalLoginService.cs b/OpenSim/Region/Communications/Local/LocalLoginService.cs
index 9f47239..3eac7e9 100644
--- a/OpenSim/Region/Communications/Local/LocalLoginService.cs
+++ b/OpenSim/Region/Communications/Local/LocalLoginService.cs
@@ -178,6 +178,10 @@ namespace OpenSim.Region.Communications.Local
178 _login.StartPos = new LLVector3(128, 128, 70); 178 _login.StartPos = new LLVector3(128, 128, 70);
179 _login.CapsPath = capsPath; 179 _login.CapsPath = capsPath;
180 180
181 m_log.InfoFormat(
182 "[LOGIN]: Telling region {0} @ {1},{2} ({3}:{4}) to expect user connection",
183 reg.RegionName, response.RegionX, response.RegionY, response.SimAddress, response.SimPort);
184
181 handlerLoginToRegion = OnLoginToRegion; 185 handlerLoginToRegion = OnLoginToRegion;
182 if (handlerLoginToRegion != null) 186 if (handlerLoginToRegion != null)
183 { 187 {
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index fa1db15..23b8fb4 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -228,7 +228,14 @@ namespace OpenSim.Region.Communications.OGS1
228 228
229 string externalIpStr = Util.GetHostFromDNS(simIp).ToString(); 229 string externalIpStr = Util.GetHostFromDNS(simIp).ToString();
230 SimpleRegionInfo sri = new SimpleRegionInfo(regX, regY, simIp, port); 230 SimpleRegionInfo sri = new SimpleRegionInfo(regX, regY, simIp, port);
231
231 sri.RemotingPort = Convert.ToUInt32(neighbourData["remoting_port"]); 232 sri.RemotingPort = Convert.ToUInt32(neighbourData["remoting_port"]);
233
234 if (neighbourData.ContainsKey("http_port"))
235 {
236 sri.HttpPort = Convert.ToUInt32(neighbourData["http_port"]);
237 }
238
232 sri.RegionID = new LLUUID((string) neighbourData["uuid"]); 239 sri.RegionID = new LLUUID((string) neighbourData["uuid"]);
233 240
234 neighbours.Add(sri); 241 neighbours.Add(sri);
@@ -275,6 +282,11 @@ namespace OpenSim.Region.Communications.OGS1
275 282
276 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]); 283 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
277 regionInfo.RemotingAddress = internalIpStr; 284 regionInfo.RemotingAddress = internalIpStr;
285
286 if (responseData.ContainsKey("http_port"))
287 {
288 regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]);
289 }
278 290
279 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]); 291 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
280 regionInfo.RegionName = (string) responseData["region_name"]; 292 regionInfo.RegionName = (string) responseData["region_name"];
@@ -333,6 +345,11 @@ namespace OpenSim.Region.Communications.OGS1
333 345
334 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]); 346 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
335 regionInfo.RemotingAddress = internalIpStr; 347 regionInfo.RemotingAddress = internalIpStr;
348
349 if (responseData.ContainsKey("http_port"))
350 {
351 regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]);
352 }
336 353
337 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]); 354 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
338 regionInfo.RegionName = (string) responseData["region_name"]; 355 regionInfo.RegionName = (string) responseData["region_name"];
@@ -385,6 +402,11 @@ namespace OpenSim.Region.Communications.OGS1
385 402
386 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]); 403 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
387 regionInfo.RemotingAddress = internalIpStr; 404 regionInfo.RemotingAddress = internalIpStr;
405
406 if (responseData.ContainsKey("http_port"))
407 {
408 regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]);
409 }
388 410
389 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]); 411 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
390 regionInfo.RegionName = (string) responseData["region_name"]; 412 regionInfo.RegionName = (string) responseData["region_name"];
@@ -813,8 +835,10 @@ namespace OpenSim.Region.Communications.OGS1
813 // And, surprisingly, the reason is.. it doesn't know 835 // And, surprisingly, the reason is.. it doesn't know
814 // it's own remoting port! How special. 836 // it's own remoting port! How special.
815 region = new SearializableRegionInfo(RequestNeighbourInfo(region.RegionHandle)); 837 region = new SearializableRegionInfo(RequestNeighbourInfo(region.RegionHandle));
816 region.RemotingAddress = region.ExternalHostName; 838 region.RemotingAddress = region.ExternalHostName;
817 region.RemotingPort = NetworkServersInfo.RemotingListenerPort; 839 region.RemotingPort = NetworkServersInfo.RemotingListenerPort;
840 region.HttpPort = serversInfo.HttpListenerPort;
841
818 if (m_localBackend.RegionUp(region, regionhandle)) 842 if (m_localBackend.RegionUp(region, regionhandle))
819 { 843 {
820 return true; 844 return true;
diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
index 5dccf13..f2b2f20 100644
--- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
@@ -554,7 +554,8 @@ namespace OpenSim.Region.Environment.Scenes
554 554
555 // TODO Should construct this behind a method 555 // TODO Should construct this behind a method
556 string capsPath = 556 string capsPath =
557 "http://" + reg.ExternalHostName + ":" + 9000 + "/CAPS/" + circuitdata.CapsPath + "0000/"; 557 "http://" + reg.ExternalHostName + ":" + reg.HttpPort
558 + "/CAPS/" + circuitdata.CapsPath + "0000/";
558 559
559 avatar.ControllingClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4), 560 avatar.ControllingClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4),
560 capsPath); 561 capsPath);
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index f58109d..def7a77 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -1618,9 +1618,9 @@ namespace OpenSim.Region.Environment.Scenes
1618 { 1618 {
1619 AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo(); 1619 AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo();
1620 1620
1621 // TODO Should construct this behind a method 1621 // TODO Should construct this behind a method
1622 string capsPath = 1622 string capsPath =
1623 "http://" + neighbourRegion.ExternalHostName + ":" + 9000 1623 "http://" + neighbourRegion.ExternalHostName + ":" + neighbourRegion.HttpPort
1624 + "/CAPS/" + circuitdata.CapsPath + "0000/"; 1624 + "/CAPS/" + circuitdata.CapsPath + "0000/";
1625 1625
1626 m_log.DebugFormat( 1626 m_log.DebugFormat(