diff options
Diffstat (limited to 'OpenSim/Services/Connectors')
3 files changed, 107 insertions, 27 deletions
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs index c426bba..291dd73 100644 --- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs | |||
@@ -38,6 +38,7 @@ using GridRegion = OpenSim.Services.Interfaces.GridRegion; | |||
38 | 38 | ||
39 | using OpenMetaverse; | 39 | using OpenMetaverse; |
40 | using OpenMetaverse.Imaging; | 40 | using OpenMetaverse.Imaging; |
41 | using OpenMetaverse.StructuredData; | ||
41 | using Nwc.XmlRpc; | 42 | using Nwc.XmlRpc; |
42 | using log4net; | 43 | using log4net; |
43 | 44 | ||
@@ -268,5 +269,48 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
268 | return null; | 269 | return null; |
269 | } | 270 | } |
270 | 271 | ||
272 | public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string myipaddress, out string reason) | ||
273 | { | ||
274 | HttpWebRequest AgentCreateRequest = null; | ||
275 | myipaddress = String.Empty; | ||
276 | reason = String.Empty; | ||
277 | |||
278 | if (SendRequest(destination, aCircuit, flags, out reason, out AgentCreateRequest)) | ||
279 | { | ||
280 | string response = GetResponse(AgentCreateRequest, out reason); | ||
281 | bool success = true; | ||
282 | UnpackResponse(response, out success, out reason, out myipaddress); | ||
283 | return success; | ||
284 | } | ||
285 | |||
286 | return false; | ||
287 | } | ||
288 | |||
289 | protected void UnpackResponse(string response, out bool result, out string reason, out string ipaddress) | ||
290 | { | ||
291 | result = true; | ||
292 | reason = string.Empty; | ||
293 | ipaddress = string.Empty; | ||
294 | |||
295 | if (!String.IsNullOrEmpty(response)) | ||
296 | { | ||
297 | try | ||
298 | { | ||
299 | // we assume we got an OSDMap back | ||
300 | OSDMap r = Util.GetOSDMap(response); | ||
301 | result = r["success"].AsBoolean(); | ||
302 | reason = r["reason"].AsString(); | ||
303 | ipaddress = r["your_ip"].AsString(); | ||
304 | } | ||
305 | catch (NullReferenceException e) | ||
306 | { | ||
307 | m_log.InfoFormat("[GATEKEEPER SERVICE CONNECTOR]: exception on UnpackResponse of DoCreateChildAgentCall {0}", e.Message); | ||
308 | reason = "Internal error"; | ||
309 | result = false; | ||
310 | } | ||
311 | } | ||
312 | } | ||
313 | |||
314 | |||
271 | } | 315 | } |
272 | } | 316 | } |
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs index 69dff3c..c1e5949 100644 --- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs | |||
@@ -73,6 +73,13 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
73 | { | 73 | { |
74 | } | 74 | } |
75 | 75 | ||
76 | public bool LoginAgentToGrid(AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, IPEndPoint ipaddress, out string reason) | ||
77 | { | ||
78 | // not available over remote calls | ||
79 | reason = "Method not available over remote calls"; | ||
80 | return false; | ||
81 | } | ||
82 | |||
76 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason) | 83 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason) |
77 | { | 84 | { |
78 | reason = String.Empty; | 85 | reason = String.Empty; |
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs index 6244565..2b96b96 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | |||
@@ -77,8 +77,26 @@ namespace OpenSim.Services.Connectors.Simulation | |||
77 | 77 | ||
78 | public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason) | 78 | public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason) |
79 | { | 79 | { |
80 | HttpWebRequest AgentCreateRequest = null; | ||
80 | reason = String.Empty; | 81 | reason = String.Empty; |
81 | 82 | ||
83 | if (SendRequest(destination, aCircuit, flags, out reason, out AgentCreateRequest)) | ||
84 | { | ||
85 | string response = GetResponse(AgentCreateRequest, out reason); | ||
86 | bool success = true; | ||
87 | UnpackResponse(response, out success, out reason); | ||
88 | return success; | ||
89 | } | ||
90 | |||
91 | return false; | ||
92 | } | ||
93 | |||
94 | |||
95 | protected bool SendRequest(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason, out HttpWebRequest AgentCreateRequest) | ||
96 | { | ||
97 | reason = String.Empty; | ||
98 | AgentCreateRequest = null; | ||
99 | |||
82 | if (destination == null) | 100 | if (destination == null) |
83 | { | 101 | { |
84 | reason = "Destination is null"; | 102 | reason = "Destination is null"; |
@@ -101,7 +119,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
101 | 119 | ||
102 | //Console.WriteLine(" >>> DoCreateChildAgentCall <<< " + uri); | 120 | //Console.WriteLine(" >>> DoCreateChildAgentCall <<< " + uri); |
103 | 121 | ||
104 | HttpWebRequest AgentCreateRequest = (HttpWebRequest)WebRequest.Create(uri); | 122 | AgentCreateRequest = (HttpWebRequest)WebRequest.Create(uri); |
105 | AgentCreateRequest.Method = "POST"; | 123 | AgentCreateRequest.Method = "POST"; |
106 | AgentCreateRequest.ContentType = "application/json"; | 124 | AgentCreateRequest.ContentType = "application/json"; |
107 | AgentCreateRequest.Timeout = 10000; | 125 | AgentCreateRequest.Timeout = 10000; |
@@ -134,7 +152,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
134 | AgentCreateRequest.ContentLength = buffer.Length; //Count bytes to send | 152 | AgentCreateRequest.ContentLength = buffer.Length; //Count bytes to send |
135 | os = AgentCreateRequest.GetRequestStream(); | 153 | os = AgentCreateRequest.GetRequestStream(); |
136 | os.Write(buffer, 0, strBuffer.Length); //Send it | 154 | os.Write(buffer, 0, strBuffer.Length); //Send it |
137 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateAgent request to remote sim {0}, region {1}, x={2} y={3}", | 155 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateAgent request to remote sim {0}, region {1}, x={2} y={3}", |
138 | uri, destination.RegionName, destination.RegionLocX, destination.RegionLocY); | 156 | uri, destination.RegionName, destination.RegionLocX, destination.RegionLocY); |
139 | } | 157 | } |
140 | //catch (WebException ex) | 158 | //catch (WebException ex) |
@@ -150,11 +168,18 @@ namespace OpenSim.Services.Connectors.Simulation | |||
150 | os.Close(); | 168 | os.Close(); |
151 | } | 169 | } |
152 | 170 | ||
171 | return true; | ||
172 | } | ||
173 | |||
174 | protected string GetResponse(HttpWebRequest AgentCreateRequest, out string reason) | ||
175 | { | ||
153 | // Let's wait for the response | 176 | // Let's wait for the response |
154 | //m_log.Info("[REMOTE SIMULATION CONNECTOR]: Waiting for a reply after DoCreateChildAgentCall"); | 177 | //m_log.Info("[REMOTE SIMULATION CONNECTOR]: Waiting for a reply after DoCreateChildAgentCall"); |
178 | reason = string.Empty; | ||
155 | 179 | ||
156 | WebResponse webResponse = null; | 180 | WebResponse webResponse = null; |
157 | StreamReader sr = null; | 181 | StreamReader sr = null; |
182 | string response = string.Empty; | ||
158 | try | 183 | try |
159 | { | 184 | { |
160 | webResponse = AgentCreateRequest.GetResponse(); | 185 | webResponse = AgentCreateRequest.GetResponse(); |
@@ -166,37 +191,15 @@ namespace OpenSim.Services.Connectors.Simulation | |||
166 | { | 191 | { |
167 | 192 | ||
168 | sr = new StreamReader(webResponse.GetResponseStream()); | 193 | sr = new StreamReader(webResponse.GetResponseStream()); |
169 | string response = sr.ReadToEnd().Trim(); | 194 | response = sr.ReadToEnd().Trim(); |
170 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: DoCreateChildAgentCall reply was {0} ", response); | 195 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: DoCreateChildAgentCall reply was {0} ", response); |
171 | |||
172 | if (!String.IsNullOrEmpty(response)) | ||
173 | { | ||
174 | try | ||
175 | { | ||
176 | // we assume we got an OSDMap back | ||
177 | OSDMap r = Util.GetOSDMap(response); | ||
178 | bool success = r["success"].AsBoolean(); | ||
179 | reason = r["reason"].AsString(); | ||
180 | return success; | ||
181 | } | ||
182 | catch (NullReferenceException e) | ||
183 | { | ||
184 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", e.Message); | ||
185 | |||
186 | // check for old style response | ||
187 | if (response.ToLower().StartsWith("true")) | ||
188 | return true; | ||
189 | |||
190 | return false; | ||
191 | } | ||
192 | } | ||
193 | } | 196 | } |
194 | } | 197 | } |
195 | catch (WebException ex) | 198 | catch (WebException ex) |
196 | { | 199 | { |
197 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message); | 200 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message); |
198 | reason = "Destination did not reply"; | 201 | reason = "Destination did not reply"; |
199 | return false; | 202 | return string.Empty; |
200 | } | 203 | } |
201 | finally | 204 | finally |
202 | { | 205 | { |
@@ -204,7 +207,33 @@ namespace OpenSim.Services.Connectors.Simulation | |||
204 | sr.Close(); | 207 | sr.Close(); |
205 | } | 208 | } |
206 | 209 | ||
207 | return true; | 210 | return response; |
211 | } | ||
212 | |||
213 | protected void UnpackResponse(string response, out bool result, out string reason) | ||
214 | { | ||
215 | result = true; | ||
216 | reason = string.Empty; | ||
217 | if (!String.IsNullOrEmpty(response)) | ||
218 | { | ||
219 | try | ||
220 | { | ||
221 | // we assume we got an OSDMap back | ||
222 | OSDMap r = Util.GetOSDMap(response); | ||
223 | result = r["success"].AsBoolean(); | ||
224 | reason = r["reason"].AsString(); | ||
225 | } | ||
226 | catch (NullReferenceException e) | ||
227 | { | ||
228 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", e.Message); | ||
229 | |||
230 | // check for old style response | ||
231 | if (response.ToLower().StartsWith("true")) | ||
232 | result = true; | ||
233 | |||
234 | result = false; | ||
235 | } | ||
236 | } | ||
208 | } | 237 | } |
209 | 238 | ||
210 | protected virtual OSDMap PackCreateAgentArguments(AgentCircuitData aCircuit, GridRegion destination, uint flags) | 239 | protected virtual OSDMap PackCreateAgentArguments(AgentCircuitData aCircuit, GridRegion destination, uint flags) |