diff options
author | Melanie Thielker | 2014-06-21 00:39:55 +0200 |
---|---|---|
committer | Melanie Thielker | 2014-06-21 00:39:55 +0200 |
commit | 159fcbf150b7da0e229b29aa7b94793484543d12 (patch) | |
tree | b8c0ff3b4c758a3fba8315b556c923ef4c02a185 /OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs | |
parent | Merge commit '68c8633ba18f0a11cfc0ed04d1d0c7c59e6cec76' (diff) | |
parent | Merge branch 'master' into careminster (diff) | |
download | opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.zip opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.gz opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.bz2 opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.xz |
Merge branch 'master' of ssh://3dhosting.de/var/git/careminster
Conflicts:
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
Diffstat (limited to 'OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs')
-rw-r--r-- | OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs | 140 |
1 files changed, 31 insertions, 109 deletions
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs index d7e38f1..32ea4ee 100644 --- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs | |||
@@ -44,13 +44,14 @@ using Nini.Config; | |||
44 | 44 | ||
45 | namespace OpenSim.Services.Connectors.Hypergrid | 45 | namespace OpenSim.Services.Connectors.Hypergrid |
46 | { | 46 | { |
47 | public class UserAgentServiceConnector : IUserAgentService | 47 | public class UserAgentServiceConnector : SimulationServiceConnector, IUserAgentService |
48 | { | 48 | { |
49 | private static readonly ILog m_log = | 49 | private static readonly ILog m_log = |
50 | LogManager.GetLogger( | 50 | LogManager.GetLogger( |
51 | MethodBase.GetCurrentMethod().DeclaringType); | 51 | MethodBase.GetCurrentMethod().DeclaringType); |
52 | 52 | ||
53 | string m_ServerURL; | 53 | private string m_ServerURL; |
54 | private GridRegion m_Gatekeeper; | ||
54 | 55 | ||
55 | public UserAgentServiceConnector(string url) : this(url, true) | 56 | public UserAgentServiceConnector(string url) : this(url, true) |
56 | { | 57 | { |
@@ -102,9 +103,15 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
102 | m_log.DebugFormat("[USER AGENT CONNECTOR]: UserAgentServiceConnector started for {0}", m_ServerURL); | 103 | m_log.DebugFormat("[USER AGENT CONNECTOR]: UserAgentServiceConnector started for {0}", m_ServerURL); |
103 | } | 104 | } |
104 | 105 | ||
106 | protected override string AgentPath() | ||
107 | { | ||
108 | return "homeagent/"; | ||
109 | } | ||
105 | 110 | ||
106 | // The Login service calls this interface with a non-null [client] ipaddress | 111 | // The Login service calls this interface with fromLogin=true |
107 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, IPEndPoint ipaddress, out string reason) | 112 | // Sims call it with fromLogin=false |
113 | // Either way, this is verified by the handler | ||
114 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, bool fromLogin, out string reason) | ||
108 | { | 115 | { |
109 | reason = String.Empty; | 116 | reason = String.Empty; |
110 | 117 | ||
@@ -115,119 +122,34 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
115 | return false; | 122 | return false; |
116 | } | 123 | } |
117 | 124 | ||
118 | string uri = m_ServerURL + "homeagent/" + aCircuit.AgentID + "/"; | 125 | GridRegion home = new GridRegion(); |
119 | 126 | home.ServerURI = m_ServerURL; | |
120 | Console.WriteLine(" >>> LoginAgentToGrid <<< " + uri); | 127 | home.RegionID = destination.RegionID; |
121 | 128 | home.RegionLocX = destination.RegionLocX; | |
122 | HttpWebRequest AgentCreateRequest = (HttpWebRequest)WebRequest.Create(uri); | 129 | home.RegionLocY = destination.RegionLocY; |
123 | AgentCreateRequest.Method = "POST"; | ||
124 | AgentCreateRequest.ContentType = "application/json"; | ||
125 | AgentCreateRequest.Timeout = 10000; | ||
126 | //AgentCreateRequest.KeepAlive = false; | ||
127 | //AgentCreateRequest.Headers.Add("Authorization", authKey); | ||
128 | |||
129 | // Fill it in | ||
130 | OSDMap args = PackCreateAgentArguments(aCircuit, gatekeeper, destination, ipaddress); | ||
131 | |||
132 | string strBuffer = ""; | ||
133 | byte[] buffer = new byte[1]; | ||
134 | try | ||
135 | { | ||
136 | strBuffer = OSDParser.SerializeJsonString(args); | ||
137 | Encoding str = Util.UTF8; | ||
138 | buffer = str.GetBytes(strBuffer); | ||
139 | |||
140 | } | ||
141 | catch (Exception e) | ||
142 | { | ||
143 | m_log.WarnFormat("[USER AGENT CONNECTOR]: Exception thrown on serialization of ChildCreate: {0}", e.Message); | ||
144 | // ignore. buffer will be empty, caller should check. | ||
145 | } | ||
146 | |||
147 | Stream os = null; | ||
148 | try | ||
149 | { // send the Post | ||
150 | AgentCreateRequest.ContentLength = buffer.Length; //Count bytes to send | ||
151 | os = AgentCreateRequest.GetRequestStream(); | ||
152 | os.Write(buffer, 0, strBuffer.Length); //Send it | ||
153 | m_log.InfoFormat("[USER AGENT CONNECTOR]: Posted CreateAgent request to remote sim {0}, region {1}, x={2} y={3}", | ||
154 | uri, destination.RegionName, destination.RegionLocX, destination.RegionLocY); | ||
155 | } | ||
156 | //catch (WebException ex) | ||
157 | catch | ||
158 | { | ||
159 | //m_log.InfoFormat("[USER AGENT CONNECTOR]: Bad send on ChildAgentUpdate {0}", ex.Message); | ||
160 | reason = "cannot contact remote region"; | ||
161 | return false; | ||
162 | } | ||
163 | finally | ||
164 | { | ||
165 | if (os != null) | ||
166 | os.Close(); | ||
167 | } | ||
168 | |||
169 | // Let's wait for the response | ||
170 | //m_log.Info("[USER AGENT CONNECTOR]: Waiting for a reply after DoCreateChildAgentCall"); | ||
171 | 130 | ||
172 | try | 131 | m_Gatekeeper = gatekeeper; |
173 | { | ||
174 | using (WebResponse webResponse = AgentCreateRequest.GetResponse()) | ||
175 | { | ||
176 | if (webResponse == null) | ||
177 | { | ||
178 | m_log.Info("[USER AGENT CONNECTOR]: Null reply on DoCreateChildAgentCall post"); | ||
179 | } | ||
180 | else | ||
181 | { | ||
182 | using (Stream s = webResponse.GetResponseStream()) | ||
183 | { | ||
184 | using (StreamReader sr = new StreamReader(s)) | ||
185 | { | ||
186 | string response = sr.ReadToEnd().Trim(); | ||
187 | m_log.InfoFormat("[USER AGENT CONNECTOR]: DoCreateChildAgentCall reply was {0} ", response); | ||
188 | |||
189 | if (!String.IsNullOrEmpty(response)) | ||
190 | { | ||
191 | try | ||
192 | { | ||
193 | // we assume we got an OSDMap back | ||
194 | OSDMap r = Util.GetOSDMap(response); | ||
195 | bool success = r["success"].AsBoolean(); | ||
196 | reason = r["reason"].AsString(); | ||
197 | return success; | ||
198 | } | ||
199 | catch (NullReferenceException e) | ||
200 | { | ||
201 | m_log.InfoFormat("[USER AGENT CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", e.Message); | ||
202 | |||
203 | // check for old style response | ||
204 | if (response.ToLower().StartsWith("true")) | ||
205 | return true; | ||
206 | |||
207 | return false; | ||
208 | } | ||
209 | } | ||
210 | } | ||
211 | } | ||
212 | } | ||
213 | } | ||
214 | } | ||
215 | catch (WebException ex) | ||
216 | { | ||
217 | m_log.InfoFormat("[USER AGENT CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message); | ||
218 | reason = "Destination did not reply"; | ||
219 | return false; | ||
220 | } | ||
221 | 132 | ||
222 | return true; | 133 | Console.WriteLine(" >>> LoginAgentToGrid <<< " + home.ServerURI); |
223 | 134 | ||
135 | uint flags = fromLogin ? (uint)TeleportFlags.ViaLogin : (uint)TeleportFlags.ViaHome; | ||
136 | return CreateAgent(home, aCircuit, flags, out reason); | ||
224 | } | 137 | } |
225 | 138 | ||
226 | 139 | ||
227 | // The simulators call this interface | 140 | // The simulators call this interface |
228 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason) | 141 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason) |
229 | { | 142 | { |
230 | return LoginAgentToGrid(aCircuit, gatekeeper, destination, null, out reason); | 143 | return LoginAgentToGrid(aCircuit, gatekeeper, destination, false, out reason); |
144 | } | ||
145 | |||
146 | protected override void PackData(OSDMap args, AgentCircuitData aCircuit, GridRegion destination, uint flags) | ||
147 | { | ||
148 | base.PackData(args, aCircuit, destination, flags); | ||
149 | args["gatekeeper_serveruri"] = OSD.FromString(m_Gatekeeper.ServerURI); | ||
150 | args["gatekeeper_host"] = OSD.FromString(m_Gatekeeper.ExternalHostName); | ||
151 | args["gatekeeper_port"] = OSD.FromString(m_Gatekeeper.HttpPort.ToString()); | ||
152 | args["destination_serveruri"] = OSD.FromString(destination.ServerURI); | ||
231 | } | 153 | } |
232 | 154 | ||
233 | protected OSDMap PackCreateAgentArguments(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, IPEndPoint ipaddress) | 155 | protected OSDMap PackCreateAgentArguments(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, IPEndPoint ipaddress) |
@@ -633,7 +555,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
633 | } | 555 | } |
634 | catch | 556 | catch |
635 | { | 557 | { |
636 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for GetServerURLs", m_ServerURL); | 558 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for GetServerURLs for user {1}", m_ServerURL, userID); |
637 | // reason = "Exception: " + e.Message; | 559 | // reason = "Exception: " + e.Message; |
638 | return serverURLs; | 560 | return serverURLs; |
639 | } | 561 | } |