diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/Util.cs | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 58a0d77..0ccc193 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -553,7 +553,7 @@ namespace OpenSim.Framework | |||
553 | } | 553 | } |
554 | catch (Exception e) | 554 | catch (Exception e) |
555 | { | 555 | { |
556 | m_log.ErrorFormat("[UTIL]: An error occurred while resolving {0}, {1}", dnsAddress, e); | 556 | m_log.WarnFormat("[UTIL]: An error occurred while resolving host name {0}, {1}", dnsAddress, e); |
557 | 557 | ||
558 | // Still going to throw the exception on for now, since this was what was happening in the first place | 558 | // Still going to throw the exception on for now, since this was what was happening in the first place |
559 | throw e; | 559 | throw e; |
@@ -589,11 +589,17 @@ namespace OpenSim.Framework | |||
589 | 589 | ||
590 | public static IPAddress GetLocalHost() | 590 | public static IPAddress GetLocalHost() |
591 | { | 591 | { |
592 | string dnsAddress = "localhost"; | 592 | IPAddress[] iplist = GetLocalHosts(); |
593 | 593 | ||
594 | IPAddress[] hosts = Dns.GetHostEntry(dnsAddress).AddressList; | 594 | if (iplist.Length == 0) // No accessible external interfaces |
595 | { | ||
596 | IPAddress[] loopback = Dns.GetHostAddresses("localhost"); | ||
597 | IPAddress localhost = loopback[0]; | ||
595 | 598 | ||
596 | foreach (IPAddress host in hosts) | 599 | return localhost; |
600 | } | ||
601 | |||
602 | foreach (IPAddress host in iplist) | ||
597 | { | 603 | { |
598 | if (!IPAddress.IsLoopback(host) && host.AddressFamily == AddressFamily.InterNetwork) | 604 | if (!IPAddress.IsLoopback(host) && host.AddressFamily == AddressFamily.InterNetwork) |
599 | { | 605 | { |
@@ -601,15 +607,15 @@ namespace OpenSim.Framework | |||
601 | } | 607 | } |
602 | } | 608 | } |
603 | 609 | ||
604 | if (hosts.Length > 0) | 610 | if (iplist.Length > 0) |
605 | { | 611 | { |
606 | foreach (IPAddress host in hosts) | 612 | foreach (IPAddress host in iplist) |
607 | { | 613 | { |
608 | if (host.AddressFamily == AddressFamily.InterNetwork) | 614 | if (host.AddressFamily == AddressFamily.InterNetwork) |
609 | return host; | 615 | return host; |
610 | } | 616 | } |
611 | // Well all else failed... | 617 | // Well all else failed... |
612 | return hosts[0]; | 618 | return iplist[0]; |
613 | } | 619 | } |
614 | 620 | ||
615 | return null; | 621 | return null; |
@@ -1186,6 +1192,33 @@ namespace OpenSim.Framework | |||
1186 | return null; | 1192 | return null; |
1187 | } | 1193 | } |
1188 | 1194 | ||
1195 | public static OSDMap GetOSDMap(string data) | ||
1196 | { | ||
1197 | OSDMap args = null; | ||
1198 | try | ||
1199 | { | ||
1200 | OSD buffer; | ||
1201 | // We should pay attention to the content-type, but let's assume we know it's Json | ||
1202 | buffer = OSDParser.DeserializeJson(data); | ||
1203 | if (buffer.Type == OSDType.Map) | ||
1204 | { | ||
1205 | args = (OSDMap)buffer; | ||
1206 | return args; | ||
1207 | } | ||
1208 | else | ||
1209 | { | ||
1210 | // uh? | ||
1211 | m_log.Debug(("[UTILS]: Got OSD of unexpected type " + buffer.Type.ToString())); | ||
1212 | return null; | ||
1213 | } | ||
1214 | } | ||
1215 | catch (Exception ex) | ||
1216 | { | ||
1217 | m_log.Debug("[UTILS]: exception on GetOSDMap " + ex.Message); | ||
1218 | return null; | ||
1219 | } | ||
1220 | } | ||
1221 | |||
1189 | public static string[] Glob(string path) | 1222 | public static string[] Glob(string path) |
1190 | { | 1223 | { |
1191 | string vol=String.Empty; | 1224 | string vol=String.Empty; |