aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Net/INetworkManager.cs
blob: a0330afeff3333a347db5516286358b0620a6249 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#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;

        /// <summary>
        /// Gets or sets a function to return the list of user defined LAN addresses.
        /// </summary>
        Func<string[]> LocalSubnetsFn { get; set; }

        /// <summary>
        /// Gets a random port TCP number that is currently available.
        /// </summary>
        /// <returns>System.Int32.</returns>
        int GetRandomUnusedTcpPort();

        /// <summary>
        /// Gets a random port UDP number that is currently available.
        /// </summary>
        /// <returns>System.Int32.</returns>
        int GetRandomUnusedUdpPort();

        /// <summary>
        /// Returns the MAC Address from first Network Card in Computer.
        /// </summary>
        /// <returns>The MAC Address.</returns>
        List<PhysicalAddress> GetMacAddresses();

        /// <summary>
        /// Determines whether [is in private address space] [the specified endpoint].
        /// </summary>
        /// <param name="endpoint">The endpoint.</param>
        /// <returns><c>true</c> if [is in private address space] [the specified endpoint]; otherwise, <c>false</c>.</returns>
        bool IsInPrivateAddressSpace(string endpoint);

        /// <summary>
        /// Determines whether [is in private address space 10.x.x.x] [the specified endpoint] and exists in the subnets returned by GetSubnets().
        /// </summary>
        /// <param name="endpoint">The endpoint.</param>
        /// <returns><c>true</c> if [is in private address space 10.x.x.x] [the specified endpoint]; otherwise, <c>false</c>.</returns>
        bool IsInPrivateAddressSpaceAndLocalSubnet(string endpoint);

        /// <summary>
        /// Determines whether [is in local network] [the specified endpoint].
        /// </summary>
        /// <param name="endpoint">The endpoint.</param>
        /// <returns><c>true</c> if [is in local network] [the specified endpoint]; otherwise, <c>false</c>.</returns>
        bool IsInLocalNetwork(string endpoint);

        /// <summary>
        /// Investigates an caches a list of interface addresses, excluding local link and LAN excluded addresses.
        /// </summary>
        /// <returns>The list of ipaddresses.</returns>
        IPAddress[] GetLocalIpAddresses();

        /// <summary>
        /// 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.
        /// </summary>
        /// <param name="addressString">The address to check.</param>
        /// <param name="subnets">If true, check against addresses in the LAN settings surrounded by brackets ([]).</param>
        /// <returns><c>true</c>if the address is in at least one of the given subnets, <c>false</c> otherwise.</returns>
        bool IsAddressInSubnets(string addressString, string[] subnets);

        /// <summary>
        /// Returns true if address is in the LAN list in the config file.
        /// </summary>
        /// <param name="address">The address to check.</param>
        /// <param name="excludeInterfaces">If true, check against addresses in the LAN settings which have [] arroud and return true if it matches the address give in address.</param>
        /// <param name="excludeRFC">If true, returns false if address is in the 127.x.x.x or 169.128.x.x range.</param>
        /// <returns><c>false</c>if the address isn't in the LAN list, <c>true</c> if the address has been defined as a LAN address.</returns>
        bool IsAddressInSubnets(IPAddress address, bool excludeInterfaces, bool excludeRFC);

        /// <summary>
        /// Checks if address is in the LAN list in the config file.
        /// </summary>
        /// <param name="address1">Source address to check.</param>
        /// <param name="address2">Destination address to check against.</param>
        /// <param name="subnetMask">Destination subnet to check against.</param>
        /// <returns><c>true/false</c>depending on whether address1 is in the same subnet as IPAddress2 with subnetMask.</returns>
        bool IsInSameSubnet(IPAddress address1, IPAddress address2, IPAddress subnetMask);

        /// <summary>
        /// Returns the subnet mask of an interface with the given address.
        /// </summary>
        /// <param name="address">The address to check.</param>
        /// <returns>Returns the subnet mask of an interface with the given address, or null if an interface match cannot be found.</returns>
        IPAddress GetLocalIpSubnetMask(IPAddress address);
    }
}