diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/RegionInfo.cs | 410 |
1 files changed, 147 insertions, 263 deletions
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index 721233d..88b62e0 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs | |||
@@ -38,238 +38,7 @@ using OpenSim.Framework.Console; | |||
38 | 38 | ||
39 | namespace OpenSim.Framework | 39 | namespace OpenSim.Framework |
40 | { | 40 | { |
41 | [Serializable] | 41 | public class RegionInfo |
42 | public class SimpleRegionInfo | ||
43 | { | ||
44 | // private static readonly log4net.ILog m_log | ||
45 | // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | ||
46 | |||
47 | /// <summary> | ||
48 | /// The port by which http communication occurs with the region (most noticeably, CAPS communication) | ||
49 | /// </summary> | ||
50 | public uint HttpPort | ||
51 | { | ||
52 | get { return m_httpPort; } | ||
53 | set { m_httpPort = value; } | ||
54 | } | ||
55 | protected uint m_httpPort; | ||
56 | |||
57 | /// <summary> | ||
58 | /// A well-formed URI for the host region server (namely "http://" + ExternalHostName) | ||
59 | /// </summary> | ||
60 | public string ServerURI | ||
61 | { | ||
62 | get { return m_serverURI; } | ||
63 | set { m_serverURI = value; } | ||
64 | } | ||
65 | protected string m_serverURI; | ||
66 | |||
67 | public string RegionName | ||
68 | { | ||
69 | get { return m_regionName; } | ||
70 | set { m_regionName = value; } | ||
71 | } | ||
72 | protected string m_regionName = String.Empty; | ||
73 | |||
74 | protected bool Allow_Alternate_Ports; | ||
75 | public bool m_allow_alternate_ports; | ||
76 | protected string m_externalHostName; | ||
77 | |||
78 | protected IPEndPoint m_internalEndPoint; | ||
79 | protected uint? m_regionLocX; | ||
80 | protected uint? m_regionLocY; | ||
81 | protected uint m_remotingPort; | ||
82 | public UUID RegionID = UUID.Zero; | ||
83 | public string RemotingAddress; | ||
84 | public UUID ScopeID = UUID.Zero; | ||
85 | |||
86 | public SimpleRegionInfo() | ||
87 | { | ||
88 | } | ||
89 | |||
90 | public SimpleRegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri) | ||
91 | { | ||
92 | m_regionLocX = regionLocX; | ||
93 | m_regionLocY = regionLocY; | ||
94 | |||
95 | m_internalEndPoint = internalEndPoint; | ||
96 | m_externalHostName = externalUri; | ||
97 | } | ||
98 | |||
99 | public SimpleRegionInfo(uint regionLocX, uint regionLocY, string externalUri, uint port) | ||
100 | { | ||
101 | m_regionLocX = regionLocX; | ||
102 | m_regionLocY = regionLocY; | ||
103 | |||
104 | m_externalHostName = externalUri; | ||
105 | |||
106 | m_internalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int) port); | ||
107 | } | ||
108 | |||
109 | public SimpleRegionInfo(RegionInfo ConvertFrom) | ||
110 | { | ||
111 | m_regionName = ConvertFrom.RegionName; | ||
112 | m_regionLocX = ConvertFrom.RegionLocX; | ||
113 | m_regionLocY = ConvertFrom.RegionLocY; | ||
114 | m_internalEndPoint = ConvertFrom.InternalEndPoint; | ||
115 | m_externalHostName = ConvertFrom.ExternalHostName; | ||
116 | m_remotingPort = ConvertFrom.RemotingPort; | ||
117 | m_httpPort = ConvertFrom.HttpPort; | ||
118 | m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; | ||
119 | RemotingAddress = ConvertFrom.RemotingAddress; | ||
120 | RegionID = UUID.Zero; | ||
121 | ServerURI = ConvertFrom.ServerURI; | ||
122 | } | ||
123 | |||
124 | public uint RemotingPort | ||
125 | { | ||
126 | get { return m_remotingPort; } | ||
127 | set { m_remotingPort = value; } | ||
128 | } | ||
129 | |||
130 | /// <value> | ||
131 | /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw. | ||
132 | /// | ||
133 | /// XXX Isn't this really doing too much to be a simple getter, rather than an explict method? | ||
134 | /// </value> | ||
135 | public IPEndPoint ExternalEndPoint | ||
136 | { | ||
137 | get | ||
138 | { | ||
139 | // Old one defaults to IPv6 | ||
140 | //return new IPEndPoint(Dns.GetHostAddresses(m_externalHostName)[0], m_internalEndPoint.Port); | ||
141 | |||
142 | IPAddress ia = null; | ||
143 | // If it is already an IP, don't resolve it - just return directly | ||
144 | if (IPAddress.TryParse(m_externalHostName, out ia)) | ||
145 | return new IPEndPoint(ia, m_internalEndPoint.Port); | ||
146 | |||
147 | // Reset for next check | ||
148 | ia = null; | ||
149 | try | ||
150 | { | ||
151 | foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName)) | ||
152 | { | ||
153 | if (ia == null) | ||
154 | ia = Adr; | ||
155 | |||
156 | if (Adr.AddressFamily == AddressFamily.InterNetwork) | ||
157 | { | ||
158 | ia = Adr; | ||
159 | break; | ||
160 | } | ||
161 | } | ||
162 | } | ||
163 | catch (SocketException e) | ||
164 | { | ||
165 | throw new Exception( | ||
166 | "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" + | ||
167 | e + "' attached to this exception", e); | ||
168 | } | ||
169 | |||
170 | return new IPEndPoint(ia, m_internalEndPoint.Port); | ||
171 | } | ||
172 | |||
173 | set { m_externalHostName = value.ToString(); } | ||
174 | } | ||
175 | |||
176 | public string ExternalHostName | ||
177 | { | ||
178 | get { return m_externalHostName; } | ||
179 | set { m_externalHostName = value; } | ||
180 | } | ||
181 | |||
182 | public IPEndPoint InternalEndPoint | ||
183 | { | ||
184 | get { return m_internalEndPoint; } | ||
185 | set { m_internalEndPoint = value; } | ||
186 | } | ||
187 | |||
188 | public uint RegionLocX | ||
189 | { | ||
190 | get { return m_regionLocX.Value; } | ||
191 | set { m_regionLocX = value; } | ||
192 | } | ||
193 | |||
194 | public uint RegionLocY | ||
195 | { | ||
196 | get { return m_regionLocY.Value; } | ||
197 | set { m_regionLocY = value; } | ||
198 | } | ||
199 | |||
200 | public ulong RegionHandle | ||
201 | { | ||
202 | get { return Util.UIntsToLong((RegionLocX * (uint) Constants.RegionSize), (RegionLocY * (uint) Constants.RegionSize)); } | ||
203 | } | ||
204 | |||
205 | public int getInternalEndPointPort() | ||
206 | { | ||
207 | return m_internalEndPoint.Port; | ||
208 | } | ||
209 | |||
210 | public Dictionary<string, object> ToKeyValuePairs() | ||
211 | { | ||
212 | Dictionary<string, object> kvp = new Dictionary<string, object>(); | ||
213 | kvp["uuid"] = RegionID.ToString(); | ||
214 | kvp["locX"] = RegionLocX.ToString(); | ||
215 | kvp["locY"] = RegionLocY.ToString(); | ||
216 | kvp["external_ip_address"] = ExternalEndPoint.Address.ToString(); | ||
217 | kvp["external_port"] = ExternalEndPoint.Port.ToString(); | ||
218 | kvp["external_host_name"] = ExternalHostName; | ||
219 | kvp["http_port"] = HttpPort.ToString(); | ||
220 | kvp["internal_ip_address"] = InternalEndPoint.Address.ToString(); | ||
221 | kvp["internal_port"] = InternalEndPoint.Port.ToString(); | ||
222 | kvp["alternate_ports"] = m_allow_alternate_ports.ToString(); | ||
223 | kvp["server_uri"] = ServerURI; | ||
224 | |||
225 | return kvp; | ||
226 | } | ||
227 | |||
228 | public SimpleRegionInfo(Dictionary<string, object> kvp) | ||
229 | { | ||
230 | if ((kvp["external_ip_address"] != null) && (kvp["external_port"] != null)) | ||
231 | { | ||
232 | int port = 0; | ||
233 | Int32.TryParse((string)kvp["external_port"], out port); | ||
234 | IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["external_ip_address"]), port); | ||
235 | ExternalEndPoint = ep; | ||
236 | } | ||
237 | else | ||
238 | ExternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0); | ||
239 | |||
240 | if (kvp["external_host_name"] != null) | ||
241 | ExternalHostName = (string)kvp["external_host_name"]; | ||
242 | |||
243 | if (kvp["http_port"] != null) | ||
244 | { | ||
245 | UInt32 port = 0; | ||
246 | UInt32.TryParse((string)kvp["http_port"], out port); | ||
247 | HttpPort = port; | ||
248 | } | ||
249 | |||
250 | if ((kvp["internal_ip_address"] != null) && (kvp["internal_port"] != null)) | ||
251 | { | ||
252 | int port = 0; | ||
253 | Int32.TryParse((string)kvp["internal_port"], out port); | ||
254 | IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["internal_ip_address"]), port); | ||
255 | InternalEndPoint = ep; | ||
256 | } | ||
257 | else | ||
258 | InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0); | ||
259 | |||
260 | if (kvp["alternate_ports"] != null) | ||
261 | { | ||
262 | bool alts = false; | ||
263 | Boolean.TryParse((string)kvp["alternate_ports"], out alts); | ||
264 | m_allow_alternate_ports = alts; | ||
265 | } | ||
266 | |||
267 | if (kvp["server_uri"] != null) | ||
268 | ServerURI = (string)kvp["server_uri"]; | ||
269 | } | ||
270 | } | ||
271 | |||
272 | public class RegionInfo : SimpleRegionInfo | ||
273 | { | 42 | { |
274 | // private static readonly log4net.ILog m_log | 43 | // private static readonly log4net.ILog m_log |
275 | // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | 44 | // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); |
@@ -304,6 +73,19 @@ namespace OpenSim.Framework | |||
304 | private bool m_clampPrimSize = false; | 73 | private bool m_clampPrimSize = false; |
305 | private int m_objectCapacity = 0; | 74 | private int m_objectCapacity = 0; |
306 | private string m_regionType = String.Empty; | 75 | private string m_regionType = String.Empty; |
76 | protected uint m_httpPort; | ||
77 | protected string m_serverURI; | ||
78 | protected string m_regionName = String.Empty; | ||
79 | protected bool Allow_Alternate_Ports; | ||
80 | public bool m_allow_alternate_ports; | ||
81 | protected string m_externalHostName; | ||
82 | protected IPEndPoint m_internalEndPoint; | ||
83 | protected uint? m_regionLocX; | ||
84 | protected uint? m_regionLocY; | ||
85 | protected uint m_remotingPort; | ||
86 | public UUID RegionID = UUID.Zero; | ||
87 | public string RemotingAddress; | ||
88 | public UUID ScopeID = UUID.Zero; | ||
307 | 89 | ||
308 | 90 | ||
309 | // Apparently, we're applying the same estatesettings regardless of whether it's local or remote. | 91 | // Apparently, we're applying the same estatesettings regardless of whether it's local or remote. |
@@ -386,42 +168,17 @@ namespace OpenSim.Framework | |||
386 | configMember.performConfigurationRetrieve(); | 168 | configMember.performConfigurationRetrieve(); |
387 | } | 169 | } |
388 | 170 | ||
389 | public RegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri) : | 171 | public RegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri) |
390 | base(regionLocX, regionLocY, internalEndPoint, externalUri) | ||
391 | { | 172 | { |
392 | } | 173 | m_regionLocX = regionLocX; |
393 | 174 | m_regionLocY = regionLocY; | |
394 | public RegionInfo() | ||
395 | { | ||
396 | } | ||
397 | 175 | ||
398 | public RegionInfo(SerializableRegionInfo ConvertFrom) | 176 | m_internalEndPoint = internalEndPoint; |
399 | { | 177 | m_externalHostName = externalUri; |
400 | m_regionLocX = ConvertFrom.RegionLocX; | ||
401 | m_regionLocY = ConvertFrom.RegionLocY; | ||
402 | m_internalEndPoint = ConvertFrom.InternalEndPoint; | ||
403 | m_externalHostName = ConvertFrom.ExternalHostName; | ||
404 | m_remotingPort = ConvertFrom.RemotingPort; | ||
405 | m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; | ||
406 | RemotingAddress = ConvertFrom.RemotingAddress; | ||
407 | RegionID = UUID.Zero; | ||
408 | proxyUrl = ConvertFrom.ProxyUrl; | ||
409 | originRegionID = ConvertFrom.OriginRegionID; | ||
410 | RegionName = ConvertFrom.RegionName; | ||
411 | ServerURI = ConvertFrom.ServerURI; | ||
412 | } | 178 | } |
413 | 179 | ||
414 | public RegionInfo(SimpleRegionInfo ConvertFrom) | 180 | public RegionInfo() |
415 | { | 181 | { |
416 | m_regionLocX = ConvertFrom.RegionLocX; | ||
417 | m_regionLocY = ConvertFrom.RegionLocY; | ||
418 | m_internalEndPoint = ConvertFrom.InternalEndPoint; | ||
419 | m_externalHostName = ConvertFrom.ExternalHostName; | ||
420 | m_remotingPort = ConvertFrom.RemotingPort; | ||
421 | m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports; | ||
422 | RemotingAddress = ConvertFrom.RemotingAddress; | ||
423 | RegionID = UUID.Zero; | ||
424 | ServerURI = ConvertFrom.ServerURI; | ||
425 | } | 182 | } |
426 | 183 | ||
427 | public EstateSettings EstateSettings | 184 | public EstateSettings EstateSettings |
@@ -484,6 +241,111 @@ namespace OpenSim.Framework | |||
484 | get { return m_regionType; } | 241 | get { return m_regionType; } |
485 | } | 242 | } |
486 | 243 | ||
244 | /// <summary> | ||
245 | /// The port by which http communication occurs with the region (most noticeably, CAPS communication) | ||
246 | /// </summary> | ||
247 | public uint HttpPort | ||
248 | { | ||
249 | get { return m_httpPort; } | ||
250 | set { m_httpPort = value; } | ||
251 | } | ||
252 | |||
253 | /// <summary> | ||
254 | /// A well-formed URI for the host region server (namely "http://" + ExternalHostName) | ||
255 | /// </summary> | ||
256 | public string ServerURI | ||
257 | { | ||
258 | get { return m_serverURI; } | ||
259 | set { m_serverURI = value; } | ||
260 | } | ||
261 | |||
262 | public string RegionName | ||
263 | { | ||
264 | get { return m_regionName; } | ||
265 | set { m_regionName = value; } | ||
266 | } | ||
267 | |||
268 | public uint RemotingPort | ||
269 | { | ||
270 | get { return m_remotingPort; } | ||
271 | set { m_remotingPort = value; } | ||
272 | } | ||
273 | |||
274 | /// <value> | ||
275 | /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw. | ||
276 | /// | ||
277 | /// XXX Isn't this really doing too much to be a simple getter, rather than an explict method? | ||
278 | /// </value> | ||
279 | public IPEndPoint ExternalEndPoint | ||
280 | { | ||
281 | get | ||
282 | { | ||
283 | // Old one defaults to IPv6 | ||
284 | //return new IPEndPoint(Dns.GetHostAddresses(m_externalHostName)[0], m_internalEndPoint.Port); | ||
285 | |||
286 | IPAddress ia = null; | ||
287 | // If it is already an IP, don't resolve it - just return directly | ||
288 | if (IPAddress.TryParse(m_externalHostName, out ia)) | ||
289 | return new IPEndPoint(ia, m_internalEndPoint.Port); | ||
290 | |||
291 | // Reset for next check | ||
292 | ia = null; | ||
293 | try | ||
294 | { | ||
295 | foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName)) | ||
296 | { | ||
297 | if (ia == null) | ||
298 | ia = Adr; | ||
299 | |||
300 | if (Adr.AddressFamily == AddressFamily.InterNetwork) | ||
301 | { | ||
302 | ia = Adr; | ||
303 | break; | ||
304 | } | ||
305 | } | ||
306 | } | ||
307 | catch (SocketException e) | ||
308 | { | ||
309 | throw new Exception( | ||
310 | "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" + | ||
311 | e + "' attached to this exception", e); | ||
312 | } | ||
313 | |||
314 | return new IPEndPoint(ia, m_internalEndPoint.Port); | ||
315 | } | ||
316 | |||
317 | set { m_externalHostName = value.ToString(); } | ||
318 | } | ||
319 | |||
320 | public string ExternalHostName | ||
321 | { | ||
322 | get { return m_externalHostName; } | ||
323 | set { m_externalHostName = value; } | ||
324 | } | ||
325 | |||
326 | public IPEndPoint InternalEndPoint | ||
327 | { | ||
328 | get { return m_internalEndPoint; } | ||
329 | set { m_internalEndPoint = value; } | ||
330 | } | ||
331 | |||
332 | public uint RegionLocX | ||
333 | { | ||
334 | get { return m_regionLocX.Value; } | ||
335 | set { m_regionLocX = value; } | ||
336 | } | ||
337 | |||
338 | public uint RegionLocY | ||
339 | { | ||
340 | get { return m_regionLocY.Value; } | ||
341 | set { m_regionLocY = value; } | ||
342 | } | ||
343 | |||
344 | public ulong RegionHandle | ||
345 | { | ||
346 | get { return Util.UIntsToLong((RegionLocX * (uint) Constants.RegionSize), (RegionLocY * (uint) Constants.RegionSize)); } | ||
347 | } | ||
348 | |||
487 | public void SetEndPoint(string ipaddr, int port) | 349 | public void SetEndPoint(string ipaddr, int port) |
488 | { | 350 | { |
489 | IPAddress tmpIP = IPAddress.Parse(ipaddr); | 351 | IPAddress tmpIP = IPAddress.Parse(ipaddr); |
@@ -1074,5 +936,27 @@ namespace OpenSim.Framework | |||
1074 | return regionInfo; | 936 | return regionInfo; |
1075 | } | 937 | } |
1076 | 938 | ||
939 | public int getInternalEndPointPort() | ||
940 | { | ||
941 | return m_internalEndPoint.Port; | ||
942 | } | ||
943 | |||
944 | public Dictionary<string, object> ToKeyValuePairs() | ||
945 | { | ||
946 | Dictionary<string, object> kvp = new Dictionary<string, object>(); | ||
947 | kvp["uuid"] = RegionID.ToString(); | ||
948 | kvp["locX"] = RegionLocX.ToString(); | ||
949 | kvp["locY"] = RegionLocY.ToString(); | ||
950 | kvp["external_ip_address"] = ExternalEndPoint.Address.ToString(); | ||
951 | kvp["external_port"] = ExternalEndPoint.Port.ToString(); | ||
952 | kvp["external_host_name"] = ExternalHostName; | ||
953 | kvp["http_port"] = HttpPort.ToString(); | ||
954 | kvp["internal_ip_address"] = InternalEndPoint.Address.ToString(); | ||
955 | kvp["internal_port"] = InternalEndPoint.Port.ToString(); | ||
956 | kvp["alternate_ports"] = m_allow_alternate_ports.ToString(); | ||
957 | kvp["server_uri"] = ServerURI; | ||
958 | |||
959 | return kvp; | ||
960 | } | ||
1077 | } | 961 | } |
1078 | } | 962 | } |