aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/Net
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model/Net')
-rw-r--r--MediaBrowser.Model/Net/ISocket.cs16
-rw-r--r--MediaBrowser.Model/Net/ISocketFactory.cs14
-rw-r--r--MediaBrowser.Model/Net/IpAddressInfo.cs29
-rw-r--r--MediaBrowser.Model/Net/IpEndPointInfo.cs14
4 files changed, 70 insertions, 3 deletions
diff --git a/MediaBrowser.Model/Net/ISocket.cs b/MediaBrowser.Model/Net/ISocket.cs
new file mode 100644
index 000000000..371fbc567
--- /dev/null
+++ b/MediaBrowser.Model/Net/ISocket.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace MediaBrowser.Model.Net
+{
+ public interface ISocket : IDisposable
+ {
+ IpEndPointInfo LocalEndPoint { get; }
+ IpEndPointInfo RemoteEndPoint { get; }
+ void Close();
+ void Shutdown(bool both);
+ void Listen(int backlog);
+ void Bind(IpEndPointInfo endpoint);
+
+ void StartAccept(Action<ISocket> onAccept, Func<bool> isClosed);
+ }
+}
diff --git a/MediaBrowser.Model/Net/ISocketFactory.cs b/MediaBrowser.Model/Net/ISocketFactory.cs
index 3f1ddf84f..599292ddf 100644
--- a/MediaBrowser.Model/Net/ISocketFactory.cs
+++ b/MediaBrowser.Model/Net/ISocketFactory.cs
@@ -27,5 +27,17 @@ namespace MediaBrowser.Model.Net
/// <param name="localPort">The local port to bind to.</param>
/// <returns>A <see cref="IUdpSocket"/> implementation.</returns>
IUdpSocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort);
- }
+
+ ISocket CreateSocket(IpAddressFamily family, SocketType socketType, ProtocolType protocolType, bool dualMode);
+ }
+
+ public enum SocketType
+ {
+ Stream
+ }
+
+ public enum ProtocolType
+ {
+ Tcp
+ }
}
diff --git a/MediaBrowser.Model/Net/IpAddressInfo.cs b/MediaBrowser.Model/Net/IpAddressInfo.cs
index b48347d1d..47ffe5118 100644
--- a/MediaBrowser.Model/Net/IpAddressInfo.cs
+++ b/MediaBrowser.Model/Net/IpAddressInfo.cs
@@ -4,12 +4,39 @@ namespace MediaBrowser.Model.Net
{
public class IpAddressInfo
{
+ public static IpAddressInfo Any = new IpAddressInfo("0.0.0.0", IpAddressFamily.InterNetwork);
+ public static IpAddressInfo IPv6Any = new IpAddressInfo("00000000000000000000", IpAddressFamily.InterNetworkV6);
+ public static IpAddressInfo Loopback = new IpAddressInfo("127.0.0.1", IpAddressFamily.InterNetwork);
+ public static IpAddressInfo IPv6Loopback = new IpAddressInfo("IPv6Loopback", IpAddressFamily.InterNetworkV6);
+
public string Address { get; set; }
- public bool IsIpv6 { get; set; }
+ public IpAddressFamily AddressFamily { get; set; }
+
+ public IpAddressInfo()
+ {
+
+ }
+
+ public IpAddressInfo(string address, IpAddressFamily addressFamily)
+ {
+ Address = address;
+ AddressFamily = addressFamily;
+ }
+
+ public bool Equals(IpAddressInfo address)
+ {
+ return string.Equals(address.Address, Address, StringComparison.OrdinalIgnoreCase);
+ }
public override String ToString()
{
return Address;
}
}
+
+ public enum IpAddressFamily
+ {
+ InterNetwork,
+ InterNetworkV6
+ }
}
diff --git a/MediaBrowser.Model/Net/IpEndPointInfo.cs b/MediaBrowser.Model/Net/IpEndPointInfo.cs
index 5fd331a16..b5cadc429 100644
--- a/MediaBrowser.Model/Net/IpEndPointInfo.cs
+++ b/MediaBrowser.Model/Net/IpEndPointInfo.cs
@@ -1,4 +1,5 @@
using System;
+using System.Globalization;
namespace MediaBrowser.Model.Net
{
@@ -8,11 +9,22 @@ namespace MediaBrowser.Model.Net
public int Port { get; set; }
+ public IpEndPointInfo()
+ {
+
+ }
+
+ public IpEndPointInfo(IpAddressInfo address, int port)
+ {
+ IpAddress = address;
+ Port = port;
+ }
+
public override string ToString()
{
var ipAddresString = IpAddress == null ? string.Empty : IpAddress.ToString();
- return ipAddresString + ":" + this.Port.ToString();
+ return ipAddresString + ":" + Port.ToString(CultureInfo.InvariantCulture);
}
}
}