aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/RegionInfo.cs38
-rw-r--r--OpenSim/Framework/Util.cs59
-rw-r--r--OpenSim/Server/Base/ServerUtils.cs21
-rw-r--r--OpenSim/Services/Interfaces/IGridService.cs45
4 files changed, 75 insertions, 88 deletions
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 7de8c52..75ed999 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -420,6 +420,7 @@ namespace OpenSim.Framework
420 set { m_remotingPort = value; } 420 set { m_remotingPort = value; }
421 } 421 }
422 422
423
423 /// <value> 424 /// <value>
424 /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw. 425 /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw.
425 /// 426 ///
@@ -427,42 +428,7 @@ namespace OpenSim.Framework
427 /// </value> 428 /// </value>
428 public IPEndPoint ExternalEndPoint 429 public IPEndPoint ExternalEndPoint
429 { 430 {
430 get 431 get { return Util.getEndPoint(m_externalHostName, m_internalEndPoint.Port); }
431 {
432 // Old one defaults to IPv6
433 //return new IPEndPoint(Dns.GetHostAddresses(m_externalHostName)[0], m_internalEndPoint.Port);
434
435 IPAddress ia = null;
436 // If it is already an IP, don't resolve it - just return directly
437 if (IPAddress.TryParse(m_externalHostName, out ia))
438 return new IPEndPoint(ia, m_internalEndPoint.Port);
439
440 // Reset for next check
441 ia = null;
442 try
443 {
444 foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName))
445 {
446 if (ia == null)
447 ia = Adr;
448
449 if (Adr.AddressFamily == AddressFamily.InterNetwork)
450 {
451 ia = Adr;
452 break;
453 }
454 }
455 }
456 catch (SocketException e)
457 {
458 throw new Exception(
459 "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" +
460 e + "' attached to this exception", e);
461 }
462
463 return new IPEndPoint(ia, m_internalEndPoint.Port);
464 }
465
466 set { m_externalHostName = value.ToString(); } 432 set { m_externalHostName = value.ToString(); }
467 } 433 }
468 434
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 5eedd29..83d9df1 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -429,6 +429,65 @@ namespace OpenSim.Framework
429 return regionCoord << 8; 429 return regionCoord << 8;
430 } 430 }
431 431
432 public static IPEndPoint getEndPoint(IPAddress ia, int port)
433 {
434 if(ia == null)
435 return null;
436
437 IPEndPoint newEP = null;
438 try
439 {
440 newEP = new IPEndPoint(ia, port);
441 }
442 catch
443 {
444 newEP = null;
445 }
446 return newEP;
447 }
448
449 public static IPEndPoint getEndPoint(string hostname, int port)
450 {
451 IPAddress ia = null;
452 // If it is already an IP, don't resolve it - just return directly
453 // we should not need this
454 if (IPAddress.TryParse(hostname, out ia))
455 {
456 if (ia.Equals(IPAddress.Any) || ia.Equals(IPAddress.IPv6Any))
457 return null;
458 return getEndPoint(ia, port);
459 }
460
461 // Reset for next check
462 ia = null;
463 try
464 {
465 foreach (IPAddress Adr in Dns.GetHostAddresses(hostname))
466 {
467 if (ia == null)
468 ia = Adr;
469
470 if (Adr.AddressFamily == AddressFamily.InterNetwork)
471 {
472 ia = Adr;
473 break;
474 }
475 }
476 }
477 catch // (SocketException e)
478 {
479 /*throw new Exception(
480 "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" +
481 e + "' attached to this exception", e);*/
482 // Don't throw a fatal exception here, instead, return Null and handle it in the caller.
483 // Reason is, on systems such as OSgrid it has occured that known hostnames stop
484 // resolving and thus make surrounding regions crash out with this exception.
485 return null;
486 }
487
488 return getEndPoint(ia,port);
489 }
490
432 public static bool checkServiceURI(string uristr, out string serviceURI) 491 public static bool checkServiceURI(string uristr, out string serviceURI)
433 { 492 {
434 serviceURI = string.Empty; 493 serviceURI = string.Empty;
diff --git a/OpenSim/Server/Base/ServerUtils.cs b/OpenSim/Server/Base/ServerUtils.cs
index b17d7ba..aff6b4f 100644
--- a/OpenSim/Server/Base/ServerUtils.cs
+++ b/OpenSim/Server/Base/ServerUtils.cs
@@ -478,17 +478,22 @@ namespace OpenSim.Server.Base
478 478
479 XmlDocument doc = new XmlDocument(); 479 XmlDocument doc = new XmlDocument();
480 480
481 doc.LoadXml(data); 481 try
482 482 {
483 XmlNodeList rootL = doc.GetElementsByTagName("ServerResponse"); 483 doc.LoadXml(data);
484 484 XmlNodeList rootL = doc.GetElementsByTagName("ServerResponse");
485 if (rootL.Count != 1)
486 return ret;
487 485
488 XmlNode rootNode = rootL[0]; 486 if (rootL.Count != 1)
487 return ret;
489 488
490 ret = ParseElement(rootNode); 489 XmlNode rootNode = rootL[0];
491 490
491 ret = ParseElement(rootNode);
492 }
493 catch (Exception e)
494 {
495 m_log.DebugFormat("[serverUtils.ParseXmlResponse]: failed error: {0} \n --- string: {1} - ",e.Message, data);
496 }
492 return ret; 497 return ret;
493 } 498 }
494 499
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index 8068ff5..ead5d3c 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -462,50 +462,7 @@ namespace OpenSim.Services.Interfaces
462 /// </value> 462 /// </value>
463 public IPEndPoint ExternalEndPoint 463 public IPEndPoint ExternalEndPoint
464 { 464 {
465 get 465 get { return Util.getEndPoint(m_externalHostName, m_internalEndPoint.Port); }
466 {
467 IPAddress ia = null;
468 // If it is already an IP, don't resolve it - just return directly
469 // we should not need this
470 if (IPAddress.TryParse(m_externalHostName, out ia))
471 {
472 if (ia.Equals(IPAddress.Any) || ia.Equals(IPAddress.IPv6Any))
473 return null;
474 return new IPEndPoint(ia, m_internalEndPoint.Port);
475 }
476
477 // Reset for next check
478 ia = null;
479 try
480 {
481 foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName))
482 {
483 if (ia == null)
484 ia = Adr;
485
486 if (Adr.AddressFamily == AddressFamily.InterNetwork)
487 {
488 ia = Adr;
489 break;
490 }
491 }
492 }
493 catch // (SocketException e)
494 {
495 /*throw new Exception(
496 "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" +
497 e + "' attached to this exception", e);*/
498 // Don't throw a fatal exception here, instead, return Null and handle it in the caller.
499 // Reason is, on systems such as OSgrid it has occured that known hostnames stop
500 // resolving and thus make surrounding regions crash out with this exception.
501 return null;
502 }
503
504 if(ia == null)
505 return null;
506
507 return new IPEndPoint(ia, m_internalEndPoint.Port);
508 }
509 } 466 }
510 467
511 public string ExternalHostName 468 public string ExternalHostName