IPData.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.Net;
  2. using System.Net.Sockets;
  3. namespace MediaBrowser.Model.Net;
  4. /// <summary>
  5. /// Base network object class.
  6. /// </summary>
  7. public class IPData
  8. {
  9. /// <summary>
  10. /// Initializes a new instance of the <see cref="IPData"/> class.
  11. /// </summary>
  12. /// <param name="address">The <see cref="IPAddress"/>.</param>
  13. /// <param name="subnet">The <see cref="IPNetwork"/>.</param>
  14. /// <param name="name">The interface name.</param>
  15. public IPData(IPAddress address, IPNetwork? subnet, string name)
  16. {
  17. Address = address;
  18. Subnet = subnet ?? (address.AddressFamily == AddressFamily.InterNetwork ? new IPNetwork(address, 32) : new IPNetwork(address, 128));
  19. Name = name;
  20. }
  21. /// <summary>
  22. /// Initializes a new instance of the <see cref="IPData"/> class.
  23. /// </summary>
  24. /// <param name="address">The <see cref="IPAddress"/>.</param>
  25. /// <param name="subnet">The <see cref="IPNetwork"/>.</param>
  26. public IPData(IPAddress address, IPNetwork? subnet)
  27. : this(address, subnet, string.Empty)
  28. {
  29. }
  30. /// <summary>
  31. /// Gets or sets the object's IP address.
  32. /// </summary>
  33. public IPAddress Address { get; set; }
  34. /// <summary>
  35. /// Gets or sets the object's IP address.
  36. /// </summary>
  37. public IPNetwork Subnet { get; set; }
  38. /// <summary>
  39. /// Gets or sets the interface index.
  40. /// </summary>
  41. public int Index { get; set; }
  42. /// <summary>
  43. /// Gets or sets a value indicating whether the network supports multicast.
  44. /// </summary>
  45. public bool SupportsMulticast { get; set; } = false;
  46. /// <summary>
  47. /// Gets or sets the interface name.
  48. /// </summary>
  49. public string Name { get; set; }
  50. /// <summary>
  51. /// Gets the AddressFamily of the object.
  52. /// </summary>
  53. public AddressFamily AddressFamily
  54. {
  55. get
  56. {
  57. if (Address.Equals(IPAddress.None))
  58. {
  59. return Subnet.BaseAddress.AddressFamily.Equals(IPAddress.None)
  60. ? AddressFamily.Unspecified
  61. : Subnet.BaseAddress.AddressFamily;
  62. }
  63. else
  64. {
  65. return Address.AddressFamily;
  66. }
  67. }
  68. }
  69. }