aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/NetworkUtil.cs
diff options
context:
space:
mode:
authorAdam Frisby2009-05-23 07:07:02 +0000
committerAdam Frisby2009-05-23 07:07:02 +0000
commitbb363d9aa46932085296cadbd603f25d5be5a6a1 (patch)
tree4cb8da83546075258f713f24d64a0ba149a5634b /OpenSim/Framework/NetworkUtil.cs
parent* Implements automatic loopback handling for standalone regions. (diff)
downloadopensim-SC-bb363d9aa46932085296cadbd603f25d5be5a6a1.zip
opensim-SC-bb363d9aa46932085296cadbd603f25d5be5a6a1.tar.gz
opensim-SC-bb363d9aa46932085296cadbd603f25d5be5a6a1.tar.bz2
opensim-SC-bb363d9aa46932085296cadbd603f25d5be5a6a1.tar.xz
* "Fixed" an issue with NAT Login Handler, apparently an IPv4Mask can be null on an IPv4 address. Go figure. (!?!)
Diffstat (limited to 'OpenSim/Framework/NetworkUtil.cs')
-rw-r--r--OpenSim/Framework/NetworkUtil.cs25
1 files changed, 24 insertions, 1 deletions
diff --git a/OpenSim/Framework/NetworkUtil.cs b/OpenSim/Framework/NetworkUtil.cs
index 81e6cad..f9d9b89 100644
--- a/OpenSim/Framework/NetworkUtil.cs
+++ b/OpenSim/Framework/NetworkUtil.cs
@@ -3,6 +3,8 @@ using System.Collections.Generic;
3using System.Net.Sockets; 3using System.Net.Sockets;
4using System.Net; 4using System.Net;
5using System.Net.NetworkInformation; 5using System.Net.NetworkInformation;
6using System.Reflection;
7using log4net;
6 8
7namespace OpenSim.Framework 9namespace OpenSim.Framework
8{ 10{
@@ -16,6 +18,9 @@ namespace OpenSim.Framework
16 /// </summary> 18 /// </summary>
17 public static class NetworkUtil 19 public static class NetworkUtil
18 { 20 {
21 // Logger
22 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
23
19 // IPv4Address, Subnet 24 // IPv4Address, Subnet
20 static readonly Dictionary<IPAddress,IPAddress> m_subnets = new Dictionary<IPAddress, IPAddress>(); 25 static readonly Dictionary<IPAddress,IPAddress> m_subnets = new Dictionary<IPAddress, IPAddress>();
21 26
@@ -25,7 +30,10 @@ namespace OpenSim.Framework
25 foreach (IPAddress host in Dns.GetHostAddresses(Dns.GetHostName())) 30 foreach (IPAddress host in Dns.GetHostAddresses(Dns.GetHostName()))
26 { 31 {
27 if (host.Equals(user) && host.AddressFamily == AddressFamily.InterNetwork) 32 if (host.Equals(user) && host.AddressFamily == AddressFamily.InterNetwork)
33 {
34 m_log.Info("[NATROUTING] Localhost user detected, sending them '" + host + "' instead of '" + simulator + "'");
28 return host; 35 return host;
36 }
29 } 37 }
30 38
31 // Check for same LAN segment 39 // Check for same LAN segment
@@ -50,7 +58,10 @@ namespace OpenSim.Framework
50 } 58 }
51 59
52 if (valid) 60 if (valid)
61 {
62 m_log.Info("[NATROUTING] Local LAN user detected, sending them '" + subnet.Key + "' instead of '" + simulator + "'");
53 return subnet.Key; 63 return subnet.Key;
64 }
54 } 65 }
55 66
56 // Otherwise, return outside address 67 // Otherwise, return outside address
@@ -65,7 +76,10 @@ namespace OpenSim.Framework
65 foreach (IPAddress host in Dns.GetHostAddresses(defaultHostname)) 76 foreach (IPAddress host in Dns.GetHostAddresses(defaultHostname))
66 { 77 {
67 if (host.AddressFamily == AddressFamily.InterNetworkV6) 78 if (host.AddressFamily == AddressFamily.InterNetworkV6)
79 {
80 m_log.Info("[NATROUTING] Localhost user detected, sending them '" + host + "' instead of '" + defaultHostname + "'");
68 return host; 81 return host;
82 }
69 } 83 }
70 } 84 }
71 85
@@ -101,7 +115,10 @@ namespace OpenSim.Framework
101 } 115 }
102 116
103 if (valid) 117 if (valid)
118 {
119 m_log.Info("[NATROUTING] Local LAN user detected, sending them '" + subnet.Key + "' instead of '" + defaultHostname + "'");
104 return subnet.Key; 120 return subnet.Key;
121 }
105 } 122 }
106 123
107 // Check to see if we can find a IPv4 address. 124 // Check to see if we can find a IPv4 address.
@@ -123,7 +140,13 @@ namespace OpenSim.Framework
123 { 140 {
124 if (address.Address.AddressFamily == AddressFamily.InterNetwork) 141 if (address.Address.AddressFamily == AddressFamily.InterNetwork)
125 { 142 {
126 m_subnets.Add(address.Address, address.IPv4Mask); 143 if (address.IPv4Mask != null)
144 {
145 m_subnets.Add(address.Address, address.IPv4Mask);
146 } else
147 {
148 m_log.Warn("[NetworkUtil] Found IPv4 Address without Subnet Mask!?");
149 }
127 } 150 }
128 } 151 }
129 } 152 }