aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs345
-rw-r--r--OpenSim/Services/Connectors/Estate/EstateDataConnector.cs340
-rw-r--r--OpenSim/Services/EstateService/EstateDataService.cs (renamed from OpenSim/Services/Connectors/Simulation/EstateDataService.cs)5
-rw-r--r--OpenSim/Services/SimulationService/SimulationDataService.cs (renamed from OpenSim/Services/Connectors/Simulation/SimulationDataService.cs)3
-rw-r--r--bin/Robust.HG.ini.example4
-rw-r--r--bin/Robust.ini.example5
-rw-r--r--bin/config-include/Grid.ini4
-rw-r--r--bin/config-include/GridCommon.ini.example10
-rw-r--r--bin/config-include/GridHypergrid.ini4
-rw-r--r--bin/config-include/SimianGrid.ini4
-rw-r--r--bin/config-include/Standalone.ini4
-rw-r--r--bin/config-include/StandaloneHypergrid.ini4
-rw-r--r--prebuild.xml63
13 files changed, 779 insertions, 16 deletions
diff --git a/OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs b/OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs
new file mode 100644
index 0000000..4fe74f9
--- /dev/null
+++ b/OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs
@@ -0,0 +1,345 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.IO;
30using System.Reflection;
31using System.Net;
32
33using Nini.Config;
34using log4net;
35using OpenMetaverse;
36
37using OpenSim.Server.Base;
38using OpenSim.Services.Interfaces;
39using OpenSim.Framework;
40using OpenSim.Framework.ServiceAuth;
41using OpenSim.Framework.Servers.HttpServer;
42using OpenSim.Server.Handlers.Base;
43
44namespace OpenSim.Server.Handlers
45{
46 public class EstateDataRobustConnector : ServiceConnector
47 {
48 private string m_ConfigName = "EstateService";
49
50 public EstateDataRobustConnector(IConfigSource config, IHttpServer server, string configName) :
51 base(config, server, configName)
52 {
53 IConfig serverConfig = config.Configs[m_ConfigName];
54 if (serverConfig == null)
55 throw new Exception(String.Format("No section {0} in config file", m_ConfigName));
56
57 string service = serverConfig.GetString("LocalServiceModule",
58 String.Empty);
59
60 if (service == String.Empty)
61 throw new Exception("No LocalServiceModule in config file");
62
63 Object[] args = new Object[] { config };
64 IEstateDataService e_service = ServerUtils.LoadPlugin<IEstateDataService>(service, args);
65
66 IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName); ;
67
68 server.AddStreamHandler(new EstateServerGetHandler(e_service, auth));
69 server.AddStreamHandler(new EstateServerPostHandler(e_service, auth));
70 }
71 }
72
73
74 public class EstateServerGetHandler : BaseStreamHandler
75 {
76 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
77
78 IEstateDataService m_EstateService;
79
80 // Possibilities
81 // /estates/estate/?region=uuid&create=[t|f]
82 // /estates/estate/?eid=int
83 // /estates/?name=string
84 // /estates/?owner=uuid
85 // /estates/ (all)
86 // /estates/regions/?eid=int
87
88 public EstateServerGetHandler(IEstateDataService service, IServiceAuth auth) :
89 base("GET", "/estates", auth)
90 {
91 m_EstateService = service;
92 }
93
94 protected override byte[] ProcessRequest(string path, Stream request,
95 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
96 {
97 byte[] result = new byte[0];
98 Dictionary<string, object> data = null;
99
100 string[] p = SplitParams(path);
101
102 // /estates/ (all)
103 // /estates/?name=string
104 // /estates/?owner=uuid
105 if (p.Length == 0)
106 data = GetEstates(httpRequest, httpResponse);
107 else
108 {
109 string resource = p[0];
110
111 // /estates/estate/?region=uuid&create=[t|f]
112 // /estates/estate/?eid=int
113 if ("estate".Equals(resource))
114 data = GetEstate(httpRequest, httpResponse);
115 // /estates/regions/?eid=int
116 else if ("regions".Equals(resource))
117 data = GetRegions(httpRequest, httpResponse);
118 }
119
120 if (data == null)
121 data = new Dictionary<string, object>();
122
123 string xmlString = ServerUtils.BuildXmlResponse(data);
124 return Util.UTF8NoBomEncoding.GetBytes(xmlString);
125
126 }
127
128 private Dictionary<string, object> GetEstates(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
129 {
130 // /estates/ (all)
131 // /estates/?name=string
132 // /estates/?owner=uuid
133
134 Dictionary<string, object> data = null;
135 string name = (string)httpRequest.Query["name"];
136 string owner = (string)httpRequest.Query["owner"];
137
138 if (!string.IsNullOrEmpty(name) || !string.IsNullOrEmpty(owner))
139 {
140 List<int> estateIDs = null;
141 if (!string.IsNullOrEmpty(name))
142 {
143 estateIDs = m_EstateService.GetEstates(name);
144 }
145 else if (!string.IsNullOrEmpty(owner))
146 {
147 UUID ownerID = UUID.Zero;
148 if (UUID.TryParse(owner, out ownerID))
149 estateIDs = m_EstateService.GetEstatesByOwner(ownerID);
150 }
151
152 if (estateIDs == null || (estateIDs != null && estateIDs.Count == 0))
153 httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
154 else
155 {
156 httpResponse.StatusCode = (int)HttpStatusCode.OK;
157 httpResponse.ContentType = "text/xml";
158 data = new Dictionary<string, object>();
159 int i = 0;
160 foreach (int id in estateIDs)
161 data["estate" + i++] = id;
162 }
163 }
164 else
165 {
166 List<EstateSettings> estates = m_EstateService.LoadEstateSettingsAll();
167 if (estates == null || estates.Count == 0)
168 {
169 httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
170 }
171 else
172 {
173 httpResponse.StatusCode = (int)HttpStatusCode.OK;
174 httpResponse.ContentType = "text/xml";
175 data = new Dictionary<string, object>();
176 int i = 0;
177 foreach (EstateSettings es in estates)
178 data["estate" + i++] = es.ToMap();
179
180 }
181 }
182
183 return data;
184 }
185
186 private Dictionary<string, object> GetEstate(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
187 {
188 // /estates/estate/?region=uuid&create=[t|f]
189 // /estates/estate/?eid=int
190 Dictionary<string, object> data = null;
191 string region = (string)httpRequest.Query["region"];
192 string eid = (string)httpRequest.Query["eid"];
193
194 EstateSettings estate = null;
195
196 if (!string.IsNullOrEmpty(region))
197 {
198 UUID regionID = UUID.Zero;
199 if (UUID.TryParse(region, out regionID))
200 {
201 string create = (string)httpRequest.Query["create"];
202 bool createYN = false;
203 Boolean.TryParse(create, out createYN);
204 estate = m_EstateService.LoadEstateSettings(regionID, createYN);
205 }
206 }
207 else if (!string.IsNullOrEmpty(eid))
208 {
209 int id = 0;
210 if (Int32.TryParse(eid, out id))
211 estate = m_EstateService.LoadEstateSettings(id);
212 }
213
214 if (estate != null)
215 {
216 httpResponse.StatusCode = (int)HttpStatusCode.OK;
217 httpResponse.ContentType = "text/xml";
218 data = estate.ToMap();
219 }
220 else
221 httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
222
223 return data;
224 }
225
226 private Dictionary<string, object> GetRegions(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
227 {
228 // /estates/regions/?eid=int
229 Dictionary<string, object> data = null;
230 string eid = (string)httpRequest.Query["eid"];
231
232 httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
233 if (!string.IsNullOrEmpty(eid))
234 {
235 int id = 0;
236 if (Int32.TryParse(eid, out id))
237 {
238 List<UUID> regions = m_EstateService.GetRegions(id);
239 if (regions != null && regions.Count > 0)
240 {
241 data = new Dictionary<string, object>();
242 int i = 0;
243 foreach (UUID uuid in regions)
244 data["region" + i++] = uuid.ToString();
245 httpResponse.StatusCode = (int)HttpStatusCode.OK;
246 httpResponse.ContentType = "text/xml";
247 }
248 }
249 }
250
251 return data;
252 }
253 }
254
255 public class EstateServerPostHandler : BaseStreamHandler
256 {
257 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
258
259 IEstateDataService m_EstateService;
260
261 // Possibilities
262 // /estates/estate/ (post an estate)
263 // /estates/estate/?eid=int&region=uuid (link a region to an estate)
264
265 public EstateServerPostHandler(IEstateDataService service, IServiceAuth auth) :
266 base("POST", "/estates", auth)
267 {
268 m_EstateService = service;
269 }
270
271 protected override byte[] ProcessRequest(string path, Stream request,
272 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
273 {
274 byte[] result = new byte[0];
275 Dictionary<string, object> data = null;
276
277 string[] p = SplitParams(path);
278
279 if (p.Length > 0)
280 {
281 string resource = p[0];
282
283 // /estates/estate/
284 // /estates/estate/?eid=int&region=uuid
285 if ("estate".Equals(resource))
286 {
287 StreamReader sr = new StreamReader(request);
288 string body = sr.ReadToEnd();
289 sr.Close();
290 body = body.Trim();
291
292 Dictionary<string, object> requestData = ServerUtils.ParseQueryString(body);
293
294 data = UpdateEstate(requestData, httpRequest, httpResponse);
295 }
296 }
297
298 if (data == null)
299 data = new Dictionary<string, object>();
300
301 string xmlString = ServerUtils.BuildXmlResponse(data);
302 return Util.UTF8NoBomEncoding.GetBytes(xmlString);
303
304 }
305
306 private Dictionary<string, object> UpdateEstate(Dictionary<string, object> requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
307 {
308 // /estates/estate/
309 // /estates/estate/?eid=int&region=uuid
310 Dictionary<string, object> result = new Dictionary<string, object>();
311 string eid = (string)httpRequest.Query["eid"];
312 string region = (string)httpRequest.Query["region"];
313
314 httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
315
316 if (string.IsNullOrEmpty(eid) && string.IsNullOrEmpty(region) &&
317 requestData.ContainsKey("OP") && requestData["OP"] != null && "STORE".Equals(requestData["OP"]))
318 {
319 // /estates/estate/
320 EstateSettings es = new EstateSettings(requestData);
321 m_EstateService.StoreEstateSettings(es);
322 //m_log.DebugFormat("[EstateServerPostHandler]: Store estate {0}", es.ToString());
323 httpResponse.StatusCode = (int)HttpStatusCode.OK;
324 result["Result"] = true;
325 }
326 else if (!string.IsNullOrEmpty(region) && !string.IsNullOrEmpty(eid) &&
327 requestData.ContainsKey("OP") && requestData["OP"] != null && "LINK".Equals(requestData["OP"]))
328 {
329 int id = 0;
330 UUID regionID = UUID.Zero;
331 if (UUID.TryParse(region, out regionID) && Int32.TryParse(eid, out id))
332 {
333 m_log.DebugFormat("[EstateServerPostHandler]: Link region {0} to estate {1}", regionID, id);
334 httpResponse.StatusCode = (int)HttpStatusCode.OK;
335 result["Result"] = m_EstateService.LinkRegion(regionID, id);
336 }
337 }
338 else
339 m_log.WarnFormat("[EstateServerPostHandler]: something wrong with POST request {0}", httpRequest.RawUrl);
340
341 return result;
342 }
343
344 }
345}
diff --git a/OpenSim/Services/Connectors/Estate/EstateDataConnector.cs b/OpenSim/Services/Connectors/Estate/EstateDataConnector.cs
new file mode 100644
index 0000000..9d01b47
--- /dev/null
+++ b/OpenSim/Services/Connectors/Estate/EstateDataConnector.cs
@@ -0,0 +1,340 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.Net;
30using System.Reflection;
31
32using log4net;
33
34using OpenMetaverse;
35using Nini.Config;
36
37using OpenSim.Framework;
38using OpenSim.Framework.ServiceAuth;
39using OpenSim.Services.Connectors;
40using OpenSim.Services.Interfaces;
41using OpenSim.Server.Base;
42
43namespace OpenSim.Service.Connectors
44{
45 public class EstateDataRemoteConnector : BaseServiceConnector, IEstateDataService
46 {
47 private static readonly ILog m_log =
48 LogManager.GetLogger(
49 MethodBase.GetCurrentMethod().DeclaringType);
50
51 private string m_ServerURI = String.Empty;
52 private ExpiringCache<string, List<EstateSettings>> m_EstateCache = new ExpiringCache<string, List<EstateSettings>>();
53 private const int EXPIRATION = 5 * 60; // 5 minutes in secs
54
55 public EstateDataRemoteConnector(IConfigSource source)
56 {
57 Initialise(source);
58 }
59
60 public virtual void Initialise(IConfigSource source)
61 {
62 IConfig gridConfig = source.Configs["EstateService"];
63 if (gridConfig == null)
64 {
65 m_log.Error("[ESTATE CONNECTOR]: EstateService missing from OpenSim.ini");
66 throw new Exception("Estate connector init error");
67 }
68
69 string serviceURI = gridConfig.GetString("EstateServerURI",
70 String.Empty);
71
72 if (serviceURI == String.Empty)
73 {
74 m_log.Error("[ESTATE CONNECTOR]: No Server URI named in section EstateService");
75 throw new Exception("Estate connector init error");
76 }
77 m_ServerURI = serviceURI;
78
79 base.Initialise(source, "EstateService");
80 }
81
82 #region IEstateDataService
83
84 public List<EstateSettings> LoadEstateSettingsAll()
85 {
86 string reply = string.Empty;
87 string uri = m_ServerURI + "/estates";
88
89 reply = MakeRequest("GET", uri, string.Empty);
90 if (String.IsNullOrEmpty(reply))
91 return new List<EstateSettings>();
92
93 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
94
95 List<EstateSettings> estates = new List<EstateSettings>();
96 if (replyData != null && replyData.Count > 0)
97 {
98 m_log.DebugFormat("[ESTATE CONNECTOR]: LoadEstateSettingsAll returned {0} elements", replyData.Count);
99 Dictionary<string, object>.ValueCollection estateData = replyData.Values;
100 foreach (object r in estateData)
101 {
102 if (r is Dictionary<string, object>)
103 {
104 EstateSettings es = new EstateSettings((Dictionary<string, object>)r);
105 estates.Add(es);
106 }
107 }
108 m_EstateCache.AddOrUpdate("estates", estates, EXPIRATION);
109 }
110 else
111 m_log.DebugFormat("[ESTATE CONNECTOR]: LoadEstateSettingsAll from {0} received null or zero response", uri);
112
113 return estates;
114
115 }
116
117 public List<int> GetEstatesAll()
118 {
119 List<int> eids = new List<int>();
120 // If we don't have them, load them from the server
121 List<EstateSettings> estates = null;
122 if (!m_EstateCache.TryGetValue("estates", out estates))
123 LoadEstateSettingsAll();
124
125 foreach (EstateSettings es in estates)
126 eids.Add((int)es.EstateID);
127
128 return eids;
129 }
130
131 public List<int> GetEstates(string search)
132 {
133 // If we don't have them, load them from the server
134 List<EstateSettings> estates = null;
135 if (!m_EstateCache.TryGetValue("estates", out estates))
136 LoadEstateSettingsAll();
137
138 List<int> eids = new List<int>();
139 foreach (EstateSettings es in estates)
140 if (es.EstateName == search)
141 eids.Add((int)es.EstateID);
142
143 return eids;
144 }
145
146 public List<int> GetEstatesByOwner(UUID ownerID)
147 {
148 // If we don't have them, load them from the server
149 List<EstateSettings> estates = null;
150 if (!m_EstateCache.TryGetValue("estates", out estates))
151 LoadEstateSettingsAll();
152
153 List<int> eids = new List<int>();
154 foreach (EstateSettings es in estates)
155 if (es.EstateOwner == ownerID)
156 eids.Add((int)es.EstateID);
157
158 return eids;
159 }
160
161 public List<UUID> GetRegions(int estateID)
162 {
163 string reply = string.Empty;
164 // /estates/regions/?eid=int
165 string uri = m_ServerURI + "/estates/regions/?eid=" + estateID.ToString();
166
167 reply = MakeRequest("GET", uri, string.Empty);
168 if (String.IsNullOrEmpty(reply))
169 return new List<UUID>();
170
171 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
172
173 List<UUID> regions = new List<UUID>();
174 if (replyData != null && replyData.Count > 0)
175 {
176 m_log.DebugFormat("[ESTATE CONNECTOR]: GetRegions for estate {0} returned {1} elements", estateID, replyData.Count);
177 Dictionary<string, object>.ValueCollection data = replyData.Values;
178 foreach (object r in data)
179 {
180 UUID uuid = UUID.Zero;
181 if (UUID.TryParse(r.ToString(), out uuid))
182 regions.Add(uuid);
183 }
184 }
185 else
186 m_log.DebugFormat("[ESTATE CONNECTOR]: GetRegions from {0} received null or zero response", uri);
187
188 return regions;
189 }
190
191 public EstateSettings LoadEstateSettings(UUID regionID, bool create)
192 {
193 string reply = string.Empty;
194 // /estates/estate/?region=uuid&create=[t|f]
195 string uri = m_ServerURI + string.Format("/estates/estate/?region={0}&create={1}", regionID, create);
196
197 reply = MakeRequest("GET", uri, string.Empty);
198 if (String.IsNullOrEmpty(reply))
199 return null;
200
201 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
202
203 if (replyData != null && replyData.Count > 0)
204 {
205 m_log.DebugFormat("[ESTATE CONNECTOR]: LoadEstateSettings({0}) returned {1} elements", regionID, replyData.Count);
206 EstateSettings es = new EstateSettings(replyData);
207 return es;
208 }
209 else
210 m_log.DebugFormat("[ESTATE CONNECTOR]: LoadEstateSettings(regionID) from {0} received null or zero response", uri);
211
212 return null;
213 }
214
215 public EstateSettings LoadEstateSettings(int estateID)
216 {
217 string reply = string.Empty;
218 // /estates/estate/?eid=int
219 string uri = m_ServerURI + string.Format("/estates/estate/?eid={0}", estateID);
220
221 reply = MakeRequest("GET", uri, string.Empty);
222 if (String.IsNullOrEmpty(reply))
223 return null;
224
225 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
226
227 if (replyData != null && replyData.Count > 0)
228 {
229 m_log.DebugFormat("[ESTATE CONNECTOR]: LoadEstateSettings({0}) returned {1} elements", estateID, replyData.Count);
230 EstateSettings es = new EstateSettings(replyData);
231 return es;
232 }
233 else
234 m_log.DebugFormat("[ESTATE CONNECTOR]: LoadEstateSettings(estateID) from {0} received null or zero response", uri);
235
236 return null;
237 }
238
239 /// <summary>
240 /// Forbidden operation
241 /// </summary>
242 /// <returns></returns>
243 public EstateSettings CreateNewEstate()
244 {
245 // No can do
246 return null;
247 }
248
249 public void StoreEstateSettings(EstateSettings es)
250 {
251 string reply = string.Empty;
252 // /estates/estate/
253 string uri = m_ServerURI + ("/estates/estate");
254
255 Dictionary<string, object> formdata = es.ToMap();
256 formdata["OP"] = "STORE";
257
258 PostRequest(uri, formdata);
259 }
260
261 public bool LinkRegion(UUID regionID, int estateID)
262 {
263 string reply = string.Empty;
264 // /estates/estate/?eid=int&region=uuid
265 string uri = m_ServerURI + String.Format("/estates/estate/?eid={0}&region={1}", estateID, regionID);
266
267 Dictionary<string, object> formdata = new Dictionary<string, object>();
268 formdata["OP"] = "LINK";
269 return PostRequest(uri, formdata);
270 }
271
272 private bool PostRequest(string uri, Dictionary<string, object> sendData)
273 {
274 string reqString = ServerUtils.BuildQueryString(sendData);
275
276 string reply = MakeRequest("POST", uri, reqString);
277 if (String.IsNullOrEmpty(reply))
278 return false;
279
280 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
281
282 bool result = false;
283 if (replyData != null && replyData.Count > 0)
284 {
285 if (replyData.ContainsKey("Result"))
286 {
287 if (Boolean.TryParse(replyData["Result"].ToString(), out result))
288 m_log.DebugFormat("[ESTATE CONNECTOR]: PostRequest {0} returned {1}", uri, result);
289 }
290 }
291 else
292 m_log.DebugFormat("[ESTATE CONNECTOR]: PostRequest {0} received null or zero response", uri);
293
294 return result;
295 }
296
297 /// <summary>
298 /// Forbidden operation
299 /// </summary>
300 /// <returns></returns>
301 public bool DeleteEstate(int estateID)
302 {
303 return false;
304 }
305
306 #endregion
307
308 private string MakeRequest(string verb, string uri, string formdata)
309 {
310 string reply = string.Empty;
311 try
312 {
313 reply = SynchronousRestFormsRequester.MakeRequest(verb, uri, formdata, m_Auth);
314 }
315 catch (WebException e)
316 {
317 using (HttpWebResponse hwr = (HttpWebResponse)e.Response)
318 {
319 if (hwr != null)
320 {
321 if (hwr.StatusCode == HttpStatusCode.NotFound)
322 m_log.Error(string.Format("[ESTATE CONNECTOR]: Resource {0} not found ", uri));
323 if (hwr.StatusCode == HttpStatusCode.Unauthorized)
324 m_log.Error(string.Format("[ESTATE CONNECTOR]: Web request {0} requires authentication ", uri));
325 }
326 else
327 m_log.Error(string.Format(
328 "[ESTATE CONNECTOR]: WebException for {0} {1} {2} ",
329 verb, uri, formdata, e));
330 }
331 }
332 catch (Exception e)
333 {
334 m_log.DebugFormat("[ESTATE CONNECTOR]: Exception when contacting estate server at {0}: {1}", uri, e.Message);
335 }
336
337 return reply;
338 }
339 }
340}
diff --git a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs b/OpenSim/Services/EstateService/EstateDataService.cs
index 5962b99..f6a8654 100644
--- a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs
+++ b/OpenSim/Services/EstateService/EstateDataService.cs
@@ -29,17 +29,14 @@ using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using OpenMetaverse; 30using OpenMetaverse;
31using log4net; 31using log4net;
32using Mono.Addins;
33using Nini.Config; 32using Nini.Config;
34using System.Reflection; 33using System.Reflection;
35using OpenSim.Services.Base; 34using OpenSim.Services.Base;
36using OpenSim.Services.Interfaces; 35using OpenSim.Services.Interfaces;
37using OpenSim.Data; 36using OpenSim.Data;
38using OpenSim.Framework; 37using OpenSim.Framework;
39//using OpenSim.Region.Framework.Interfaces;
40//using OpenSim.Region.Framework.Scenes;
41 38
42namespace OpenSim.Services.Connectors 39namespace OpenSim.Services.EstateService
43{ 40{
44 public class EstateDataService : ServiceBase, IEstateDataService 41 public class EstateDataService : ServiceBase, IEstateDataService
45 { 42 {
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs b/OpenSim/Services/SimulationService/SimulationDataService.cs
index 2cbf967..d9684c4 100644
--- a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
+++ b/OpenSim/Services/SimulationService/SimulationDataService.cs
@@ -29,7 +29,6 @@ using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using OpenMetaverse; 30using OpenMetaverse;
31using log4net; 31using log4net;
32using Mono.Addins;
33using Nini.Config; 32using Nini.Config;
34using System.Reflection; 33using System.Reflection;
35using OpenSim.Services.Base; 34using OpenSim.Services.Base;
@@ -39,7 +38,7 @@ using OpenSim.Framework;
39using OpenSim.Region.Framework.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Region.Framework.Scenes; 39using OpenSim.Region.Framework.Scenes;
41 40
42namespace OpenSim.Services.Connectors 41namespace OpenSim.Services.SimulationService
43{ 42{
44 public class SimulationDataService : ServiceBase, ISimulationDataService 43 public class SimulationDataService : ServiceBase, ISimulationDataService
45 { 44 {
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example
index 71ce6ad..46dbc17 100644
--- a/bin/Robust.HG.ini.example
+++ b/bin/Robust.HG.ini.example
@@ -110,6 +110,8 @@
110 ;; Uncomment for UserProfiles see [UserProfilesService] to configure... 110 ;; Uncomment for UserProfiles see [UserProfilesService] to configure...
111 ; UserProfilesServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserProfilesConnector" 111 ; UserProfilesServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserProfilesConnector"
112 112
113 ;; Uncomment if you want to have centralized estate data
114 ; EstateDataService = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:EstateDataRobustConnector"
113 115
114; * This is common for all services, it's the network setup for the entire 116; * This is common for all services, it's the network setup for the entire
115; * server instance, if none is specified above 117; * server instance, if none is specified above
@@ -379,6 +381,8 @@
379 ; for the server connector 381 ; for the server connector
380 LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService" 382 LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService"
381 383
384[EstateService]
385 LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
382 386
383[LibraryService] 387[LibraryService]
384 LibraryName = "OpenSim Library" 388 LibraryName = "OpenSim Library"
diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example
index a7b39a3..687bb2e 100644
--- a/bin/Robust.ini.example
+++ b/bin/Robust.ini.example
@@ -89,6 +89,9 @@
89 ;; Uncomment for UserProfiles see [UserProfilesService] to configure... 89 ;; Uncomment for UserProfiles see [UserProfilesService] to configure...
90 ; UserProfilesServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserProfilesConnector" 90 ; UserProfilesServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserProfilesConnector"
91 91
92 ;; Uncomment if you want to have centralized estate data
93 ; EstateDataService = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:EstateDataRobustConnector"
94
92; * This is common for all services, it's the network setup for the entire 95; * This is common for all services, it's the network setup for the entire
93; * server instance, if none is specified above 96; * server instance, if none is specified above
94; * 97; *
@@ -339,6 +342,8 @@
339 ; for the server connector 342 ; for the server connector
340 LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService" 343 LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService"
341 344
345[EstateService]
346 LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
342 347
343[LibraryService] 348[LibraryService]
344 LibraryName = "OpenSim Library" 349 LibraryName = "OpenSim Library"
diff --git a/bin/config-include/Grid.ini b/bin/config-include/Grid.ini
index e9eaee3..42ecec2 100644
--- a/bin/config-include/Grid.ini
+++ b/bin/config-include/Grid.ini
@@ -46,10 +46,10 @@
46 ConnectorProtocolVersion = "SIMULATION/0.3" 46 ConnectorProtocolVersion = "SIMULATION/0.3"
47 47
48[SimulationDataStore] 48[SimulationDataStore]
49 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService" 49 LocalServiceModule = "OpenSim.Services.SimulationService.dll:SimulationDataService"
50 50
51[EstateDataStore] 51[EstateDataStore]
52 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService" 52 LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
53 53
54[GridService] 54[GridService]
55 LocalServiceModule = "OpenSim.Services.GridService.dll:GridService" 55 LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
diff --git a/bin/config-include/GridCommon.ini.example b/bin/config-include/GridCommon.ini.example
index 903641e..bffc504 100644
--- a/bin/config-include/GridCommon.ini.example
+++ b/bin/config-include/GridCommon.ini.example
@@ -108,6 +108,16 @@
108 ;; Robust server in port ${Const|PublicPort}, but not always) 108 ;; Robust server in port ${Const|PublicPort}, but not always)
109 Gatekeeper="${Const|BaseURL}:${Const|PublicPort}" 109 Gatekeeper="${Const|BaseURL}:${Const|PublicPort}"
110 110
111[EstateDataStore]
112 ;
113 ; Uncomment if you want centralized estate data at robust server,
114 ; in which case the URL in [EstateService] will be used
115 ;
116 ;LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataConnector"
117
118[EstateService]
119 EstateServerURI = "${Const|BaseURL}:${Const|PrivatePort}"
120
111[Messaging] 121[Messaging]
112 ; === HG ONLY === 122 ; === HG ONLY ===
113 ;; Change this to the address of your Gatekeeper service 123 ;; Change this to the address of your Gatekeeper service
diff --git a/bin/config-include/GridHypergrid.ini b/bin/config-include/GridHypergrid.ini
index 8dadd76..8b47ede 100644
--- a/bin/config-include/GridHypergrid.ini
+++ b/bin/config-include/GridHypergrid.ini
@@ -54,10 +54,10 @@
54 Module = "BasicProfileModule" 54 Module = "BasicProfileModule"
55 55
56[SimulationDataStore] 56[SimulationDataStore]
57 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService" 57 LocalServiceModule = "OpenSim.Services.SimulationService.dll:SimulationDataService"
58 58
59[EstateDataStore] 59[EstateDataStore]
60 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService" 60 LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
61 61
62[AssetService] 62[AssetService]
63 LocalGridAssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector" 63 LocalGridAssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector"
diff --git a/bin/config-include/SimianGrid.ini b/bin/config-include/SimianGrid.ini
index 311a55b..8e42fab 100644
--- a/bin/config-include/SimianGrid.ini
+++ b/bin/config-include/SimianGrid.ini
@@ -42,10 +42,10 @@
42 AssetCaching = "FlotsamAssetCache" 42 AssetCaching = "FlotsamAssetCache"
43 43
44[SimulationDataStore] 44[SimulationDataStore]
45 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService" 45 LocalServiceModule = "OpenSim.Services.SimulationService.dll:SimulationDataService"
46 46
47[EstateDataStore] 47[EstateDataStore]
48 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService" 48 LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
49 49
50[Friends] 50[Friends]
51 Connector = "OpenSim.Services.Connectors.dll:SimianFriendsServiceConnector" 51 Connector = "OpenSim.Services.Connectors.dll:SimianFriendsServiceConnector"
diff --git a/bin/config-include/Standalone.ini b/bin/config-include/Standalone.ini
index 887f4d8..398a76c 100644
--- a/bin/config-include/Standalone.ini
+++ b/bin/config-include/Standalone.ini
@@ -43,10 +43,10 @@
43 ConnectorProtocolVersion = "SIMULATION/0.3" 43 ConnectorProtocolVersion = "SIMULATION/0.3"
44 44
45[SimulationDataStore] 45[SimulationDataStore]
46 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService" 46 LocalServiceModule = "OpenSim.Services.SimulationService.dll:SimulationDataService"
47 47
48[EstateDataStore] 48[EstateDataStore]
49 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService" 49 LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
50 50
51[AssetService] 51[AssetService]
52 LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService" 52 LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
diff --git a/bin/config-include/StandaloneHypergrid.ini b/bin/config-include/StandaloneHypergrid.ini
index a3c7fa6..102947a 100644
--- a/bin/config-include/StandaloneHypergrid.ini
+++ b/bin/config-include/StandaloneHypergrid.ini
@@ -58,10 +58,10 @@
58 LureModule = HGLureModule 58 LureModule = HGLureModule
59 59
60[SimulationDataStore] 60[SimulationDataStore]
61 LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService" 61 LocalServiceModule = "OpenSim.Services.SimulationService.dll:SimulationDataService"
62 62
63[EstateDataStore] 63[EstateDataStore]
64 LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService" 64 LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService"
65 65
66[AssetService] 66[AssetService]
67 LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService" 67 LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
diff --git a/prebuild.xml b/prebuild.xml
index 663d4da..771b7c7 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -839,6 +839,40 @@
839 </Files> 839 </Files>
840 </Project> 840 </Project>
841 841
842 <Project frameworkVersion="v4_0" name="OpenSim.Services.SimulationService" path="OpenSim/Services/SimulationService" type="Library">
843 <Configuration name="Debug">
844 <Options>
845 <OutputPath>../../../bin/</OutputPath>
846 </Options>
847 </Configuration>
848 <Configuration name="Release">
849 <Options>
850 <OutputPath>../../../bin/</OutputPath>
851 </Options>
852 </Configuration>
853
854 <ReferencePath>../../../bin/</ReferencePath>
855 <Reference name="System"/>
856 <Reference name="System.Core"/>
857 <Reference name="System.Web"/>
858 <Reference name="System.Xml"/>
859 <Reference name="System.Drawing"/>
860 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
861 <Reference name="OpenMetaverse" path="../../../bin/"/>
862 <Reference name="OpenSim.Data"/>
863 <Reference name="OpenSim.Framework"/>
864 <Reference name="OpenSim.Region.Framework"/>
865 <Reference name="OpenSim.Services.Base"/>
866 <Reference name="OpenSim.Services.Interfaces"/>
867 <Reference name="Nini" path="../../../bin/"/>
868 <Reference name="log4net" path="../../../bin/"/>
869 <Reference name="XMLRPC" path="../../../bin/"/>
870
871 <Files>
872 <Match pattern="*.cs" recurse="true"/>
873 </Files>
874 </Project>
875
842 <Project frameworkVersion="v4_0" name="OpenSim.Services.AssetService" path="OpenSim/Services/AssetService" type="Library"> 876 <Project frameworkVersion="v4_0" name="OpenSim.Services.AssetService" path="OpenSim/Services/AssetService" type="Library">
843 <Configuration name="Debug"> 877 <Configuration name="Debug">
844 <Options> 878 <Options>
@@ -1000,6 +1034,35 @@
1000 </Files> 1034 </Files>
1001 </Project> 1035 </Project>
1002 1036
1037 <Project frameworkVersion="v4_0" name="OpenSim.Services.EstateService" path="OpenSim/Services/EstateService" type="Library">
1038 <Configuration name="Debug">
1039 <Options>
1040 <OutputPath>../../../bin/</OutputPath>
1041 </Options>
1042 </Configuration>
1043 <Configuration name="Release">
1044 <Options>
1045 <OutputPath>../../../bin/</OutputPath>
1046 </Options>
1047 </Configuration>
1048
1049 <ReferencePath>../../../bin/</ReferencePath>
1050 <Reference name="System"/>
1051 <Reference name="System.Core"/>
1052 <Reference name="OpenMetaverseTypes" path="../../../bin/"/>
1053 <Reference name="OpenMetaverse" path="../../../bin/"/>
1054 <Reference name="OpenSim.Framework"/>
1055 <Reference name="OpenSim.Services.Interfaces"/>
1056 <Reference name="OpenSim.Services.Base"/>
1057 <Reference name="OpenSim.Data"/>
1058 <Reference name="Nini" path="../../../bin/"/>
1059 <Reference name="log4net" path="../../../bin/"/>
1060
1061 <Files>
1062 <Match pattern="*.cs" recurse="true"/>
1063 </Files>
1064 </Project>
1065
1003 <Project frameworkVersion="v4_0" name="OpenSim.Services.PresenceService" path="OpenSim/Services/PresenceService" type="Library"> 1066 <Project frameworkVersion="v4_0" name="OpenSim.Services.PresenceService" path="OpenSim/Services/PresenceService" type="Library">
1004 <Configuration name="Debug"> 1067 <Configuration name="Debug">
1005 <Options> 1068 <Options>