diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-04-10 11:06:54 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-04-10 11:06:54 -0400 |
| commit | 3094868a83937d2f5c49b06abd53757ef304a7e2 (patch) | |
| tree | ed66b10daad8362000ea358e6d6f8f033d190a2b /MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs | |
| parent | f657e2981cb928720eb728790697c0653cb7344f (diff) | |
beginning dlna server
Diffstat (limited to 'MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs index ac6b9290e..e15c32518 100644 --- a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs +++ b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs @@ -16,6 +16,44 @@ namespace MediaBrowser.Common.Implementations.Networking /// <returns>IPAddress.</returns> public IEnumerable<string> GetLocalIpAddresses() { + var list = GetIPsDefault().Where(i => !IPAddress.IsLoopback(i)).Select(i => i.ToString()).ToList(); + + if (list.Count > 0) + { + return list; + } + + return GetLocalIpAddressesFallback(); + } + + private IEnumerable<IPAddress> GetIPsDefault() + { + foreach (var adapter in NetworkInterface.GetAllNetworkInterfaces()) + { + var props = adapter.GetIPProperties(); + var gateways = from ga in props.GatewayAddresses + where !ga.Address.Equals(IPAddress.Any) + select true; + + if (!gateways.Any()) + { + continue; + } + + foreach (var uni in props.UnicastAddresses) + { + var address = uni.Address; + if (address.AddressFamily != AddressFamily.InterNetwork) + { + continue; + } + yield return address; + } + } + } + + private IEnumerable<string> GetLocalIpAddressesFallback() + { var host = Dns.GetHostEntry(Dns.GetHostName()); // Reverse them because the last one is usually the correct one @@ -25,7 +63,7 @@ namespace MediaBrowser.Common.Implementations.Networking .Select(i => i.ToString()) .Reverse(); } - + /// <summary> /// Gets a random port number that is currently available /// </summary> @@ -50,6 +88,7 @@ namespace MediaBrowser.Common.Implementations.Networking .Select(i => BitConverter.ToString(i.GetPhysicalAddress().GetAddressBytes())) .FirstOrDefault(); } + /// <summary> /// Parses the specified endpointstring. /// </summary> |
