aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/RegionInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/RegionInfo.cs')
-rw-r--r--OpenSim/Framework/RegionInfo.cs181
1 files changed, 149 insertions, 32 deletions
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index c39cc03..9e00528 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -320,7 +320,7 @@ namespace OpenSim.Framework
320 } 320 }
321 } 321 }
322 322
323 public class RegionInfo : SimpleRegionInfo 323 public class RegionInfo
324 { 324 {
325 // private static readonly log4net.ILog m_log 325 // private static readonly log4net.ILog m_log
326 // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 326 // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -356,6 +356,21 @@ namespace OpenSim.Framework
356 private int m_objectCapacity = 0; 356 private int m_objectCapacity = 0;
357 private string m_regionType = String.Empty; 357 private string m_regionType = String.Empty;
358 private RegionMeta7WindlightData m_windlight = new RegionMeta7WindlightData(); 358 private RegionMeta7WindlightData m_windlight = new RegionMeta7WindlightData();
359 protected uint m_httpPort;
360 protected string m_serverURI;
361 protected string m_regionName = String.Empty;
362 protected bool Allow_Alternate_Ports;
363 public bool m_allow_alternate_ports;
364 protected string m_externalHostName;
365 protected IPEndPoint m_internalEndPoint;
366 protected uint? m_regionLocX;
367 protected uint? m_regionLocY;
368 protected uint m_remotingPort;
369 public UUID RegionID = UUID.Zero;
370 public string RemotingAddress;
371 public UUID ScopeID = UUID.Zero;
372
373
359 // Apparently, we're applying the same estatesettings regardless of whether it's local or remote. 374 // Apparently, we're applying the same estatesettings regardless of whether it's local or remote.
360 375
361 // MT: Yes. Estates can't span trust boundaries. Therefore, it can be 376 // MT: Yes. Estates can't span trust boundaries. Therefore, it can be
@@ -436,42 +451,17 @@ namespace OpenSim.Framework
436 configMember.performConfigurationRetrieve(); 451 configMember.performConfigurationRetrieve();
437 } 452 }
438 453
439 public RegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri) : 454 public RegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri)
440 base(regionLocX, regionLocY, internalEndPoint, externalUri)
441 { 455 {
442 } 456 m_regionLocX = regionLocX;
443 457 m_regionLocY = regionLocY;
444 public RegionInfo()
445 {
446 }
447 458
448 public RegionInfo(SerializableRegionInfo ConvertFrom) 459 m_internalEndPoint = internalEndPoint;
449 { 460 m_externalHostName = externalUri;
450 m_regionLocX = ConvertFrom.RegionLocX;
451 m_regionLocY = ConvertFrom.RegionLocY;
452 m_internalEndPoint = ConvertFrom.InternalEndPoint;
453 m_externalHostName = ConvertFrom.ExternalHostName;
454 m_remotingPort = ConvertFrom.RemotingPort;
455 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
456 RemotingAddress = ConvertFrom.RemotingAddress;
457 RegionID = UUID.Zero;
458 proxyUrl = ConvertFrom.ProxyUrl;
459 originRegionID = ConvertFrom.OriginRegionID;
460 RegionName = ConvertFrom.RegionName;
461 ServerURI = ConvertFrom.ServerURI;
462 } 461 }
463 462
464 public RegionInfo(SimpleRegionInfo ConvertFrom) 463 public RegionInfo()
465 { 464 {
466 m_regionLocX = ConvertFrom.RegionLocX;
467 m_regionLocY = ConvertFrom.RegionLocY;
468 m_internalEndPoint = ConvertFrom.InternalEndPoint;
469 m_externalHostName = ConvertFrom.ExternalHostName;
470 m_remotingPort = ConvertFrom.RemotingPort;
471 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
472 RemotingAddress = ConvertFrom.RemotingAddress;
473 RegionID = UUID.Zero;
474 ServerURI = ConvertFrom.ServerURI;
475 } 465 }
476 466
477 public EstateSettings EstateSettings 467 public EstateSettings EstateSettings
@@ -549,6 +539,111 @@ namespace OpenSim.Framework
549 get { return m_regionType; } 539 get { return m_regionType; }
550 } 540 }
551 541
542 /// <summary>
543 /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
544 /// </summary>
545 public uint HttpPort
546 {
547 get { return m_httpPort; }
548 set { m_httpPort = value; }
549 }
550
551 /// <summary>
552 /// A well-formed URI for the host region server (namely "http://" + ExternalHostName)
553 /// </summary>
554 public string ServerURI
555 {
556 get { return m_serverURI; }
557 set { m_serverURI = value; }
558 }
559
560 public string RegionName
561 {
562 get { return m_regionName; }
563 set { m_regionName = value; }
564 }
565
566 public uint RemotingPort
567 {
568 get { return m_remotingPort; }
569 set { m_remotingPort = value; }
570 }
571
572 /// <value>
573 /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw.
574 ///
575 /// XXX Isn't this really doing too much to be a simple getter, rather than an explict method?
576 /// </value>
577 public IPEndPoint ExternalEndPoint
578 {
579 get
580 {
581 // Old one defaults to IPv6
582 //return new IPEndPoint(Dns.GetHostAddresses(m_externalHostName)[0], m_internalEndPoint.Port);
583
584 IPAddress ia = null;
585 // If it is already an IP, don't resolve it - just return directly
586 if (IPAddress.TryParse(m_externalHostName, out ia))
587 return new IPEndPoint(ia, m_internalEndPoint.Port);
588
589 // Reset for next check
590 ia = null;
591 try
592 {
593 foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName))
594 {
595 if (ia == null)
596 ia = Adr;
597
598 if (Adr.AddressFamily == AddressFamily.InterNetwork)
599 {
600 ia = Adr;
601 break;
602 }
603 }
604 }
605 catch (SocketException e)
606 {
607 throw new Exception(
608 "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" +
609 e + "' attached to this exception", e);
610 }
611
612 return new IPEndPoint(ia, m_internalEndPoint.Port);
613 }
614
615 set { m_externalHostName = value.ToString(); }
616 }
617
618 public string ExternalHostName
619 {
620 get { return m_externalHostName; }
621 set { m_externalHostName = value; }
622 }
623
624 public IPEndPoint InternalEndPoint
625 {
626 get { return m_internalEndPoint; }
627 set { m_internalEndPoint = value; }
628 }
629
630 public uint RegionLocX
631 {
632 get { return m_regionLocX.Value; }
633 set { m_regionLocX = value; }
634 }
635
636 public uint RegionLocY
637 {
638 get { return m_regionLocY.Value; }
639 set { m_regionLocY = value; }
640 }
641
642 public ulong RegionHandle
643 {
644 get { return Util.UIntsToLong((RegionLocX * (uint) Constants.RegionSize), (RegionLocY * (uint) Constants.RegionSize)); }
645 }
646
552 public void SetEndPoint(string ipaddr, int port) 647 public void SetEndPoint(string ipaddr, int port)
553 { 648 {
554 IPAddress tmpIP = IPAddress.Parse(ipaddr); 649 IPAddress tmpIP = IPAddress.Parse(ipaddr);
@@ -1139,5 +1234,27 @@ namespace OpenSim.Framework
1139 return regionInfo; 1234 return regionInfo;
1140 } 1235 }
1141 1236
1237 public int getInternalEndPointPort()
1238 {
1239 return m_internalEndPoint.Port;
1240 }
1241
1242 public Dictionary<string, object> ToKeyValuePairs()
1243 {
1244 Dictionary<string, object> kvp = new Dictionary<string, object>();
1245 kvp["uuid"] = RegionID.ToString();
1246 kvp["locX"] = RegionLocX.ToString();
1247 kvp["locY"] = RegionLocY.ToString();
1248 kvp["external_ip_address"] = ExternalEndPoint.Address.ToString();
1249 kvp["external_port"] = ExternalEndPoint.Port.ToString();
1250 kvp["external_host_name"] = ExternalHostName;
1251 kvp["http_port"] = HttpPort.ToString();
1252 kvp["internal_ip_address"] = InternalEndPoint.Address.ToString();
1253 kvp["internal_port"] = InternalEndPoint.Port.ToString();
1254 kvp["alternate_ports"] = m_allow_alternate_ports.ToString();
1255 kvp["server_uri"] = ServerURI;
1256
1257 return kvp;
1258 }
1142 } 1259 }
1143} 1260}