aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/Net
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model/Net')
-rw-r--r--MediaBrowser.Model/Net/IPData.cs74
-rw-r--r--MediaBrowser.Model/Net/ISocket.cs34
-rw-r--r--MediaBrowser.Model/Net/ISocketFactory.cs50
3 files changed, 101 insertions, 57 deletions
diff --git a/MediaBrowser.Model/Net/IPData.cs b/MediaBrowser.Model/Net/IPData.cs
new file mode 100644
index 000000000..985b16c6e
--- /dev/null
+++ b/MediaBrowser.Model/Net/IPData.cs
@@ -0,0 +1,74 @@
+using System.Net;
+using System.Net.Sockets;
+using Microsoft.AspNetCore.HttpOverrides;
+
+namespace MediaBrowser.Model.Net;
+
+/// <summary>
+/// Base network object class.
+/// </summary>
+public class IPData
+{
+ /// <summary>
+ /// Initializes a new instance of the <see cref="IPData"/> class.
+ /// </summary>
+ /// <param name="address">The <see cref="IPAddress"/>.</param>
+ /// <param name="subnet">The <see cref="IPNetwork"/>.</param>
+ /// <param name="name">The interface name.</param>
+ public IPData(IPAddress address, IPNetwork? subnet, string name)
+ {
+ Address = address;
+ Subnet = subnet ?? (address.AddressFamily == AddressFamily.InterNetwork ? new IPNetwork(address, 32) : new IPNetwork(address, 128));
+ Name = name;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="IPData"/> class.
+ /// </summary>
+ /// <param name="address">The <see cref="IPAddress"/>.</param>
+ /// <param name="subnet">The <see cref="IPNetwork"/>.</param>
+ public IPData(IPAddress address, IPNetwork? subnet)
+ : this(address, subnet, string.Empty)
+ {
+ }
+
+ /// <summary>
+ /// Gets or sets the object's IP address.
+ /// </summary>
+ public IPAddress Address { get; set; }
+
+ /// <summary>
+ /// Gets or sets the object's IP address.
+ /// </summary>
+ public IPNetwork Subnet { get; set; }
+
+ /// <summary>
+ /// Gets or sets the interface index.
+ /// </summary>
+ public int Index { get; set; }
+
+ /// <summary>
+ /// Gets or sets the interface name.
+ /// </summary>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets the AddressFamily of the object.
+ /// </summary>
+ public AddressFamily AddressFamily
+ {
+ get
+ {
+ if (Address.Equals(IPAddress.None))
+ {
+ return Subnet.Prefix.AddressFamily.Equals(IPAddress.None)
+ ? AddressFamily.Unspecified
+ : Subnet.Prefix.AddressFamily;
+ }
+ else
+ {
+ return Address.AddressFamily;
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Model/Net/ISocket.cs b/MediaBrowser.Model/Net/ISocket.cs
deleted file mode 100644
index 3de41d565..000000000
--- a/MediaBrowser.Model/Net/ISocket.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Net;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Model.Net
-{
- /// <summary>
- /// Provides a common interface across platforms for UDP sockets used by this SSDP implementation.
- /// </summary>
- public interface ISocket : IDisposable
- {
- IPAddress LocalIPAddress { get; }
-
- Task<SocketReceiveResult> ReceiveAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken);
-
- IAsyncResult BeginReceive(byte[] buffer, int offset, int count, AsyncCallback callback);
-
- SocketReceiveResult EndReceive(IAsyncResult result);
-
- /// <summary>
- /// Sends a UDP message to a particular end point (uni or multicast).
- /// </summary>
- /// <param name="buffer">An array of type <see cref="byte" /> that contains the data to send.</param>
- /// <param name="offset">The zero-based position in buffer at which to begin sending data.</param>
- /// <param name="bytes">The number of bytes to send.</param>
- /// <param name="endPoint">An <see cref="IPEndPoint" /> that represents the remote device.</param>
- /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
- /// <returns>The task object representing the asynchronous operation.</returns>
- Task SendToAsync(byte[] buffer, int offset, int bytes, IPEndPoint endPoint, CancellationToken cancellationToken);
- }
-}
diff --git a/MediaBrowser.Model/Net/ISocketFactory.cs b/MediaBrowser.Model/Net/ISocketFactory.cs
index a2835b711..128034eb8 100644
--- a/MediaBrowser.Model/Net/ISocketFactory.cs
+++ b/MediaBrowser.Model/Net/ISocketFactory.cs
@@ -1,31 +1,35 @@
-#pragma warning disable CS1591
-
using System.Net;
+using System.Net.Sockets;
+
+namespace MediaBrowser.Model.Net;
-namespace MediaBrowser.Model.Net
+/// <summary>
+/// Implemented by components that can create specific socket configurations.
+/// </summary>
+public interface ISocketFactory
{
/// <summary>
- /// Implemented by components that can create a platform specific UDP socket implementation, and wrap it in the cross platform <see cref="ISocket"/> interface.
+ /// Creates a new unicast socket using the specified local port number.
/// </summary>
- public interface ISocketFactory
- {
- ISocket CreateUdpBroadcastSocket(int localPort);
+ /// <param name="localPort">The local port to bind to.</param>
+ /// <returns>A new unicast socket using the specified local port number.</returns>
+ Socket CreateUdpBroadcastSocket(int localPort);
- /// <summary>
- /// Creates a new unicast socket using the specified local port number.
- /// </summary>
- /// <param name="localIp">The local IP address to bind to.</param>
- /// <param name="localPort">The local port to bind to.</param>
- /// <returns>A new unicast socket using the specified local port number.</returns>
- ISocket CreateSsdpUdpSocket(IPAddress localIp, int localPort);
+ /// <summary>
+ /// Creates a new unicast socket using the specified local port number.
+ /// </summary>
+ /// <param name="bindInterface">The bind interface.</param>
+ /// <param name="localPort">The local port to bind to.</param>
+ /// <returns>A new unicast socket using the specified local port number.</returns>
+ Socket CreateSsdpUdpSocket(IPData bindInterface, int localPort);
- /// <summary>
- /// Creates a new multicast socket using the specified multicast IP address, multicast time to live and local port.
- /// </summary>
- /// <param name="ipAddress">The multicast IP address to bind to.</param>
- /// <param name="multicastTimeToLive">The multicast time to live value. Actually a maximum number of network hops for UDP packets.</param>
- /// <param name="localPort">The local port to bind to.</param>
- /// <returns>A <see cref="ISocket"/> implementation.</returns>
- ISocket CreateUdpMulticastSocket(IPAddress ipAddress, int multicastTimeToLive, int localPort);
- }
+ /// <summary>
+ /// Creates a new multicast socket using the specified multicast IP address, multicast time to live and local port.
+ /// </summary>
+ /// <param name="multicastAddress">The multicast IP address to bind to.</param>
+ /// <param name="bindInterface">The bind interface.</param>
+ /// <param name="multicastTimeToLive">The multicast time to live value. Actually a maximum number of network hops for UDP packets.</param>
+ /// <param name="localPort">The local port to bind to.</param>
+ /// <returns>A new multicast socket using the specfied bind interface, multicast address, multicast time to live and port.</returns>
+ Socket CreateUdpMulticastSocket(IPAddress multicastAddress, IPData bindInterface, int multicastTimeToLive, int localPort);
}