#pragma warning disable CS1591
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
namespace MediaBrowser.Common.Net
{
public interface INetworkManager
{
event EventHandler NetworkChanged;
///
/// Gets or sets a function to return the list of user defined LAN addresses.
///
Func LocalSubnetsFn { get; set; }
///
/// Gets a random port TCP number that is currently available.
///
/// System.Int32.
int GetRandomUnusedTcpPort();
///
/// Gets a random port UDP number that is currently available.
///
/// System.Int32.
int GetRandomUnusedUdpPort();
///
/// Returns the MAC Address from first Network Card in Computer.
///
/// The MAC Address.
List GetMacAddresses();
///
/// Determines whether [is in private address space] [the specified endpoint].
///
/// The endpoint.
/// true if [is in private address space] [the specified endpoint]; otherwise, false.
bool IsInPrivateAddressSpace(string endpoint);
///
/// Determines whether [is in private address space 10.x.x.x] [the specified endpoint] and exists in the subnets returned by GetSubnets().
///
/// The endpoint.
/// true if [is in private address space 10.x.x.x] [the specified endpoint]; otherwise, false.
bool IsInPrivateAddressSpaceAndLocalSubnet(string endpoint);
///
/// Determines whether [is in local network] [the specified endpoint].
///
/// The endpoint.
/// true if [is in local network] [the specified endpoint]; otherwise, false.
bool IsInLocalNetwork(string endpoint);
///
/// Investigates an caches a list of interface addresses, excluding local link and LAN excluded addresses.
///
/// The list of ipaddresses.
IPAddress[] GetLocalIpAddresses();
///
/// Checks if the given address falls within the ranges given in [subnets]. The addresses in subnets can be hosts or subnets in the CIDR format.
///
/// The address to check.
/// If true, check against addresses in the LAN settings surrounded by brackets ([]).
/// trueif the address is in at least one of the given subnets, false otherwise.
bool IsAddressInSubnets(string addressString, string[] subnets);
///
/// Returns true if address is in the LAN list in the config file.
///
/// The address to check.
/// If true, check against addresses in the LAN settings which have [] arroud and return true if it matches the address give in address.
/// If true, returns false if address is in the 127.x.x.x or 169.128.x.x range.
/// falseif the address isn't in the LAN list, true if the address has been defined as a LAN address.
bool IsAddressInSubnets(IPAddress address, bool excludeInterfaces, bool excludeRFC);
///
/// Checks if address is in the LAN list in the config file.
///
/// Source address to check.
/// Destination address to check against.
/// Destination subnet to check against.
/// true/falsedepending on whether address1 is in the same subnet as IPAddress2 with subnetMask.
bool IsInSameSubnet(IPAddress address1, IPAddress address2, IPAddress subnetMask);
///
/// Returns the subnet mask of an interface with the given address.
///
/// The address to check.
/// Returns the subnet mask of an interface with the given address, or null if an interface match cannot be found.
IPAddress GetLocalIpSubnetMask(IPAddress address);
}
}