IPAddressCollection.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Net;
  5. using System.Numerics;
  6. namespace Emby.Server.Implementations.Networking.IPNetwork
  7. {
  8. public class IPAddressCollection : IEnumerable<IPAddress>, IEnumerator<IPAddress>
  9. {
  10. private IPNetwork _ipnetwork;
  11. private BigInteger _enumerator;
  12. internal IPAddressCollection(IPNetwork ipnetwork)
  13. {
  14. this._ipnetwork = ipnetwork;
  15. this._enumerator = -1;
  16. }
  17. #region Count, Array, Enumerator
  18. public BigInteger Count => this._ipnetwork.Total;
  19. public IPAddress this[BigInteger i]
  20. {
  21. get
  22. {
  23. if (i >= this.Count)
  24. {
  25. throw new ArgumentOutOfRangeException(nameof(i));
  26. }
  27. byte width = this._ipnetwork.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ? (byte)32 : (byte)128;
  28. var ipn = this._ipnetwork.Subnet(width);
  29. return ipn[i].Network;
  30. }
  31. }
  32. #endregion
  33. #region IEnumerable Members
  34. IEnumerator<IPAddress> IEnumerable<IPAddress>.GetEnumerator()
  35. {
  36. return this;
  37. }
  38. IEnumerator IEnumerable.GetEnumerator()
  39. {
  40. return this;
  41. }
  42. #region IEnumerator<IPNetwork> Members
  43. public IPAddress Current => this[this._enumerator];
  44. #endregion
  45. #region IDisposable Members
  46. public void Dispose()
  47. {
  48. // nothing to dispose
  49. return;
  50. }
  51. #endregion
  52. #region IEnumerator Members
  53. object IEnumerator.Current => this.Current;
  54. public bool MoveNext()
  55. {
  56. this._enumerator++;
  57. if (this._enumerator >= this.Count)
  58. {
  59. return false;
  60. }
  61. return true;
  62. }
  63. public void Reset()
  64. {
  65. this._enumerator = -1;
  66. }
  67. #endregion
  68. #endregion
  69. }
  70. }