aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services')
-rw-r--r--OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs43
-rw-r--r--OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs30
-rw-r--r--OpenSim/Services/HypergridService/GatekeeperService.cs14
-rw-r--r--OpenSim/Services/HypergridService/UserAgentService.cs12
-rw-r--r--OpenSim/Services/Interfaces/IGridService.cs14
-rw-r--r--OpenSim/Services/Interfaces/IHypergridServices.cs5
-rw-r--r--OpenSim/Services/Interfaces/ISimulationService.cs4
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs11
8 files changed, 61 insertions, 72 deletions
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
index 61f8516..8abd046 100644
--- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
@@ -116,7 +116,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
116 // The Login service calls this interface with fromLogin=true 116 // The Login service calls this interface with fromLogin=true
117 // Sims call it with fromLogin=false 117 // Sims call it with fromLogin=false
118 // Either way, this is verified by the handler 118 // Either way, this is verified by the handler
119 public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, bool fromLogin, out string reason) 119 public bool LoginAgentToGrid(GridRegion source, AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, bool fromLogin, out string reason)
120 { 120 {
121 reason = String.Empty; 121 reason = String.Empty;
122 122
@@ -138,56 +138,25 @@ namespace OpenSim.Services.Connectors.Hypergrid
138 Console.WriteLine(" >>> LoginAgentToGrid <<< " + home.ServerURI); 138 Console.WriteLine(" >>> LoginAgentToGrid <<< " + home.ServerURI);
139 139
140 uint flags = fromLogin ? (uint)TeleportFlags.ViaLogin : (uint)TeleportFlags.ViaHome; 140 uint flags = fromLogin ? (uint)TeleportFlags.ViaLogin : (uint)TeleportFlags.ViaHome;
141 return CreateAgent(home, aCircuit, flags, out reason); 141 return CreateAgent(source, home, aCircuit, flags, out reason);
142 } 142 }
143 143
144 144
145 // The simulators call this interface 145 // The simulators call this interface
146 public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason) 146 public bool LoginAgentToGrid(GridRegion source, AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason)
147 { 147 {
148 return LoginAgentToGrid(aCircuit, gatekeeper, destination, false, out reason); 148 return LoginAgentToGrid(source, aCircuit, gatekeeper, destination, false, out reason);
149 } 149 }
150 150
151 protected override void PackData(OSDMap args, AgentCircuitData aCircuit, GridRegion destination, uint flags) 151 protected override void PackData(OSDMap args, GridRegion source, AgentCircuitData aCircuit, GridRegion destination, uint flags)
152 { 152 {
153 base.PackData(args, aCircuit, destination, flags); 153 base.PackData(args, source, aCircuit, destination, flags);
154 args["gatekeeper_serveruri"] = OSD.FromString(m_Gatekeeper.ServerURI); 154 args["gatekeeper_serveruri"] = OSD.FromString(m_Gatekeeper.ServerURI);
155 args["gatekeeper_host"] = OSD.FromString(m_Gatekeeper.ExternalHostName); 155 args["gatekeeper_host"] = OSD.FromString(m_Gatekeeper.ExternalHostName);
156 args["gatekeeper_port"] = OSD.FromString(m_Gatekeeper.HttpPort.ToString()); 156 args["gatekeeper_port"] = OSD.FromString(m_Gatekeeper.HttpPort.ToString());
157 args["destination_serveruri"] = OSD.FromString(destination.ServerURI); 157 args["destination_serveruri"] = OSD.FromString(destination.ServerURI);
158 } 158 }
159 159
160 protected OSDMap PackCreateAgentArguments(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, IPEndPoint ipaddress)
161 {
162 OSDMap args = null;
163 try
164 {
165 args = aCircuit.PackAgentCircuitData();
166 }
167 catch (Exception e)
168 {
169 m_log.Debug("[USER AGENT CONNECTOR]: PackAgentCircuitData failed with exception: " + e.Message);
170 }
171
172 // Add the input arguments
173 args["gatekeeper_serveruri"] = OSD.FromString(gatekeeper.ServerURI);
174 args["gatekeeper_host"] = OSD.FromString(gatekeeper.ExternalHostName);
175 args["gatekeeper_port"] = OSD.FromString(gatekeeper.HttpPort.ToString());
176 args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString());
177 args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString());
178 args["destination_name"] = OSD.FromString(destination.RegionName);
179 args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString());
180 args["destination_serveruri"] = OSD.FromString(destination.ServerURI);
181
182 // 10/3/2010
183 // I added the client_ip up to the regular AgentCircuitData, so this doesn't need to be here.
184 // This need cleaning elsewhere...
185 //if (ipaddress != null)
186 // args["client_ip"] = OSD.FromString(ipaddress.Address.ToString());
187
188 return args;
189 }
190
191 public void SetClientToken(UUID sessionID, string token) 160 public void SetClientToken(UUID sessionID, string token)
192 { 161 {
193 // no-op 162 // no-op
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
index 98686f8..a5520c4 100644
--- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
@@ -79,22 +79,32 @@ namespace OpenSim.Services.Connectors.Simulation
79 return "agent/"; 79 return "agent/";
80 } 80 }
81 81
82 protected virtual void PackData(OSDMap args, AgentCircuitData aCircuit, GridRegion destination, uint flags) 82 protected virtual void PackData(OSDMap args, GridRegion source, AgentCircuitData aCircuit, GridRegion destination, uint flags)
83 { 83 {
84 args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString()); 84 if (source != null)
85 args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString()); 85 {
86 args["destination_name"] = OSD.FromString(destination.RegionName); 86 args["source_x"] = OSD.FromString(source.RegionLocX.ToString());
87 args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); 87 args["source_y"] = OSD.FromString(source.RegionLocY.ToString());
88 args["teleport_flags"] = OSD.FromString(flags.ToString()); 88 args["source_name"] = OSD.FromString(source.RegionName);
89 args["source_uuid"] = OSD.FromString(source.RegionID.ToString());
90 if (!String.IsNullOrEmpty(source.RawServerURI))
91 args["source_server_uri"] = OSD.FromString(source.RawServerURI);
92 }
93
94 args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString());
95 args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString());
96 args["destination_name"] = OSD.FromString(destination.RegionName);
97 args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString());
98 args["teleport_flags"] = OSD.FromString(flags.ToString());
89 } 99 }
90 100
91 public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason) 101 public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason)
92 { 102 {
93 string tmp = String.Empty; 103 string tmp = String.Empty;
94 return CreateAgent(destination, aCircuit, flags, out tmp, out reason); 104 return CreateAgent(source, destination, aCircuit, flags, out tmp, out reason);
95 } 105 }
96 106
97 public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string myipaddress, out string reason) 107 public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string myipaddress, out string reason)
98 { 108 {
99 m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI); 109 m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI);
100 reason = String.Empty; 110 reason = String.Empty;
@@ -111,7 +121,7 @@ namespace OpenSim.Services.Connectors.Simulation
111 try 121 try
112 { 122 {
113 OSDMap args = aCircuit.PackAgentCircuitData(); 123 OSDMap args = aCircuit.PackAgentCircuitData();
114 PackData(args, aCircuit, destination, flags); 124 PackData(args, source, aCircuit, destination, flags);
115 125
116 OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000); 126 OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000);
117 bool success = result["success"].AsBoolean(); 127 bool success = result["success"].AsBoolean();
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 24b98fd..69a593b 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -230,16 +230,18 @@ namespace OpenSim.Services.HypergridService
230 } 230 }
231 231
232 #region Login Agent 232 #region Login Agent
233 public bool LoginAgent(AgentCircuitData aCircuit, GridRegion destination, out string reason) 233 public bool LoginAgent(GridRegion source, AgentCircuitData aCircuit, GridRegion destination, out string reason)
234 { 234 {
235 reason = string.Empty; 235 reason = string.Empty;
236 236
237 string authURL = string.Empty; 237 string authURL = string.Empty;
238 if (aCircuit.ServiceURLs.ContainsKey("HomeURI")) 238 if (aCircuit.ServiceURLs.ContainsKey("HomeURI"))
239 authURL = aCircuit.ServiceURLs["HomeURI"].ToString(); 239 authURL = aCircuit.ServiceURLs["HomeURI"].ToString();
240 m_log.InfoFormat("[GATEKEEPER SERVICE]: Login request for {0} {1} @ {2} ({3}) at {4} using viewer {5}, channel {6}, IP {7}, Mac {8}, Id0 {9} Teleport Flags {10}", 240
241 aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName, 241 m_log.InfoFormat("[GATEKEEPER SERVICE]: Login request for {0} {1} @ {2} ({3}) at {4} using viewer {5}, channel {6}, IP {7}, Mac {8}, Id0 {9}, Teleport Flags: {10}. From region {11}",
242 aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0, aCircuit.teleportFlags.ToString()); 242 aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionID,
243 aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0, (TeleportFlags)aCircuit.teleportFlags,
244 (source == null) ? "Unknown" : string.Format("{0} ({1}){2}", source.RegionName, source.RegionID, (source.RawServerURI == null) ? "" : " @ " + source.ServerURI));
243 245
244 string curViewer = Util.GetViewerName(aCircuit); 246 string curViewer = Util.GetViewerName(aCircuit);
245 247
@@ -428,9 +430,9 @@ namespace OpenSim.Services.HypergridService
428 // Preserve our TeleportFlags we have gathered so-far 430 // Preserve our TeleportFlags we have gathered so-far
429 loginFlag |= (Constants.TeleportFlags) aCircuit.teleportFlags; 431 loginFlag |= (Constants.TeleportFlags) aCircuit.teleportFlags;
430 432
431 m_log.DebugFormat("[GATEKEEPER SERVICE]: Launching {0} {1}", aCircuit.Name, loginFlag); 433 m_log.DebugFormat("[GATEKEEPER SERVICE]: Launching {0}, Teleport Flags: {1}", aCircuit.Name, loginFlag);
432 434
433 return m_SimulationService.CreateAgent(destination, aCircuit, (uint)loginFlag, out reason); 435 return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, out reason);
434 } 436 }
435 437
436 protected bool Authenticate(AgentCircuitData aCircuit) 438 protected bool Authenticate(AgentCircuitData aCircuit)
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs
index b414aca..6ec2f19 100644
--- a/OpenSim/Services/HypergridService/UserAgentService.cs
+++ b/OpenSim/Services/HypergridService/UserAgentService.cs
@@ -215,7 +215,7 @@ namespace OpenSim.Services.HypergridService
215 return home; 215 return home;
216 } 216 }
217 217
218 public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, bool fromLogin, out string reason) 218 public bool LoginAgentToGrid(GridRegion source, AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, bool fromLogin, out string reason)
219 { 219 {
220 m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}", 220 m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}",
221 agentCircuit.firstname, agentCircuit.lastname, (fromLogin ? agentCircuit.IPAddress : "stored IP"), gatekeeper.ServerURI); 221 agentCircuit.firstname, agentCircuit.lastname, (fromLogin ? agentCircuit.IPAddress : "stored IP"), gatekeeper.ServerURI);
@@ -274,10 +274,12 @@ namespace OpenSim.Services.HypergridService
274 m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}, desired region: {2}", m_GridName, gridName, region.RegionID); 274 m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}, desired region: {2}", m_GridName, gridName, region.RegionID);
275 275
276 if (m_GridName == gridName) 276 if (m_GridName == gridName)
277 success = m_GatekeeperService.LoginAgent(agentCircuit, finalDestination, out reason); 277 {
278 success = m_GatekeeperService.LoginAgent(source, agentCircuit, finalDestination, out reason);
279 }
278 else 280 else
279 { 281 {
280 success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out myExternalIP, out reason); 282 success = m_GatekeeperConnector.CreateAgent(source, region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out myExternalIP, out reason);
281 if (success) 283 if (success)
282 // Report them as nowhere 284 // Report them as nowhere
283 m_PresenceService.ReportAgent(agentCircuit.SessionID, UUID.Zero); 285 m_PresenceService.ReportAgent(agentCircuit.SessionID, UUID.Zero);
@@ -307,10 +309,10 @@ namespace OpenSim.Services.HypergridService
307 return true; 309 return true;
308 } 310 }
309 311
310 public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, out string reason) 312 public bool LoginAgentToGrid(GridRegion source, AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, out string reason)
311 { 313 {
312 reason = string.Empty; 314 reason = string.Empty;
313 return LoginAgentToGrid(agentCircuit, gatekeeper, finalDestination, false, out reason); 315 return LoginAgentToGrid(source, agentCircuit, gatekeeper, finalDestination, false, out reason);
314 } 316 }
315 317
316 TravelingAgentInfo CreateTravelInfo(AgentCircuitData agentCircuit, GridRegion region, bool fromLogin, out TravelingAgentInfo existing) 318 TravelingAgentInfo CreateTravelInfo(AgentCircuitData agentCircuit, GridRegion region, bool fromLogin, out TravelingAgentInfo existing)
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index 8e6279e..bbf95ad 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -142,7 +142,7 @@ namespace OpenSim.Services.Interfaces
142 public string ServerURI 142 public string ServerURI
143 { 143 {
144 get { 144 get {
145 if ( m_serverURI != string.Empty ) { 145 if (!String.IsNullOrEmpty(m_serverURI)) {
146 return m_serverURI; 146 return m_serverURI;
147 } else { 147 } else {
148 if (m_httpPort == 0) 148 if (m_httpPort == 0)
@@ -152,7 +152,7 @@ namespace OpenSim.Services.Interfaces
152 } 152 }
153 } 153 }
154 set { 154 set {
155 if ( value.EndsWith("/") ) { 155 if (value.EndsWith("/")) {
156 m_serverURI = value; 156 m_serverURI = value;
157 } else { 157 } else {
158 m_serverURI = value + '/'; 158 m_serverURI = value + '/';
@@ -161,6 +161,16 @@ namespace OpenSim.Services.Interfaces
161 } 161 }
162 protected string m_serverURI; 162 protected string m_serverURI;
163 163
164 /// <summary>
165 /// Provides direct access to the 'm_serverURI' field, without returning a generated URL if m_serverURI is missing.
166 /// </summary>
167 public string RawServerURI
168 {
169 get { return m_serverURI; }
170 set { m_serverURI = value; }
171 }
172
173
164 public string RegionName 174 public string RegionName
165 { 175 {
166 get { return m_regionName; } 176 get { return m_regionName; }
diff --git a/OpenSim/Services/Interfaces/IHypergridServices.cs b/OpenSim/Services/Interfaces/IHypergridServices.cs
index 30f27ee..5e012fb 100644
--- a/OpenSim/Services/Interfaces/IHypergridServices.cs
+++ b/OpenSim/Services/Interfaces/IHypergridServices.cs
@@ -52,13 +52,14 @@ namespace OpenSim.Services.Interfaces
52 /// <returns>The region the visitor should enter, or null if no region can be found / is allowed</returns> 52 /// <returns>The region the visitor should enter, or null if no region can be found / is allowed</returns>
53 GridRegion GetHyperlinkRegion(UUID regionID, UUID agentID, string agentHomeURI, out string message); 53 GridRegion GetHyperlinkRegion(UUID regionID, UUID agentID, string agentHomeURI, out string message);
54 54
55 bool LoginAgent(AgentCircuitData aCircuit, GridRegion destination, out string reason); 55 bool LoginAgent(GridRegion source, AgentCircuitData aCircuit, GridRegion destination, out string reason);
56 56
57 } 57 }
58 58
59 public interface IUserAgentService 59 public interface IUserAgentService
60 { 60 {
61 bool LoginAgentToGrid(AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, bool fromLogin, out string reason); 61 bool LoginAgentToGrid(GridRegion source, AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, bool fromLogin, out string reason);
62
62 void LogoutAgent(UUID userID, UUID sessionID); 63 void LogoutAgent(UUID userID, UUID sessionID);
63 64
64 /// <summary> 65 /// <summary>
diff --git a/OpenSim/Services/Interfaces/ISimulationService.cs b/OpenSim/Services/Interfaces/ISimulationService.cs
index d359056..375a35c 100644
--- a/OpenSim/Services/Interfaces/ISimulationService.cs
+++ b/OpenSim/Services/Interfaces/ISimulationService.cs
@@ -53,11 +53,13 @@ namespace OpenSim.Services.Interfaces
53 /// <summary> 53 /// <summary>
54 /// Ask the simulator hosting the destination to create an agent on that region. 54 /// Ask the simulator hosting the destination to create an agent on that region.
55 /// </summary> 55 /// </summary>
56 /// <param name="source">The region that the user is coming from. Will be null if the user
57 /// logged-in directly, or arrived from a simulator that doesn't send this parameter.</param>
56 /// <param name="destination"></param> 58 /// <param name="destination"></param>
57 /// <param name="aCircuit"></param> 59 /// <param name="aCircuit"></param>
58 /// <param name="flags"></param> 60 /// <param name="flags"></param>
59 /// <param name="reason">Reason message in the event of a failure.</param> 61 /// <param name="reason">Reason message in the event of a failure.</param>
60 bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason); 62 bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason);
61 63
62 /// <summary> 64 /// <summary>
63 /// Full child agent update. 65 /// Full child agent update.
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index a2fb308..25c9417 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -905,13 +905,6 @@ namespace OpenSim.Services.LLLoginService
905 SetServiceURLs(aCircuit, account); 905 SetServiceURLs(aCircuit, account);
906 906
907 return aCircuit; 907 return aCircuit;
908
909 //m_UserAgentService.LoginAgentToGrid(aCircuit, GatekeeperServiceConnector, region, out reason);
910 //if (simConnector.CreateAgent(region, aCircuit, 0, out reason))
911 // return aCircuit;
912
913 //return null;
914
915 } 908 }
916 909
917 private void SetServiceURLs(AgentCircuitData aCircuit, UserAccount account) 910 private void SetServiceURLs(AgentCircuitData aCircuit, UserAccount account)
@@ -966,13 +959,13 @@ namespace OpenSim.Services.LLLoginService
966 959
967 private bool LaunchAgentDirectly(ISimulationService simConnector, GridRegion region, AgentCircuitData aCircuit, TeleportFlags flags, out string reason) 960 private bool LaunchAgentDirectly(ISimulationService simConnector, GridRegion region, AgentCircuitData aCircuit, TeleportFlags flags, out string reason)
968 { 961 {
969 return simConnector.CreateAgent(region, aCircuit, (uint)flags, out reason); 962 return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, out reason);
970 } 963 }
971 964
972 private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason) 965 private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason)
973 { 966 {
974 m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName); 967 m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName);
975 if (m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, true, out reason)) 968 if (m_UserAgentService.LoginAgentToGrid(null, aCircuit, gatekeeper, destination, true, out reason))
976 return true; 969 return true;
977 return false; 970 return false;
978 } 971 }