Add new configuartion model

Added new models for review
This commit is contained in:
Kiarash
2019-03-10 13:58:18 +01:00
parent 6e64d653c5
commit 9e7c70e649
8 changed files with 270 additions and 91 deletions
@@ -1,9 +0,0 @@
namespace MQTTnet.Server.Configuration
{
public class EndpointConfiguration
{
public int Port { get; set; } = 1883;
public int BacklogSize { get; set; } = 10;
}
}
@@ -1,4 +1,7 @@
namespace MQTTnet.Server.Configuration
using System.IO;
using System.Net;
namespace MQTTnet.Server.Configuration
{
/// <summary>
/// Listen Entry Settings Model
@@ -12,19 +15,142 @@
{
}
/// <summary>
/// Path to Certificate
/// </summary>
public string CertificatePath { get; set; }
/// <summary>
/// Enabled / Disable
/// </summary>
public bool Enabled { get; set; } = true;
/// <summary>
/// Listen Address
/// </summary>
public string Address { get; set; }
public string IPv4 { get; set; }
/// <summary>
/// Listen Address
/// </summary>
public string IPv6 { get; set; }
/// <summary>
/// Listen Port
/// </summary>
public int Port { get; set; }
public int Port { get; set; } = 1883;
/// <summary>
/// Protocol Type
/// Read Certificate file
/// </summary>
public ListenProtocolTypes Protocol { get; set; } = ListenProtocolTypes.HTTP;
/// <returns></returns>
public byte[] ReadCertificate()
{
if (string.IsNullOrEmpty(CertificatePath) || string.IsNullOrWhiteSpace(CertificatePath))
{
throw new FileNotFoundException("No path set");
}
if (!File.Exists(CertificatePath))
{
throw new FileNotFoundException($"Could not find Certificate in path: {CertificatePath}");
}
return File.ReadAllBytes(CertificatePath);
}
/// <summary>
/// Read IPv4
/// </summary>
/// <returns></returns>
public IPAddress ReafIPv4()
{
if (IPv4 == "*")
{
return IPAddress.Parse("0.0.0.0");
}
if (IPv4 == "localhost")
{
return IPAddress.Parse("127.0.0.1");
}
if (IPAddress.TryParse(IPv4, out var ip))
{
return ip;
}
throw new System.Exception($"Could not parse IPv4 address: {IPv4}");
}
/// <summary>
/// Read IPv4
/// </summary>
/// <returns></returns>
public bool TryReadIPv4(out IPAddress address)
{
if (IPv4 == "*")
{
address = IPAddress.Parse("::");
return true;
}
if (IPv4 == "localhost")
{
address = IPAddress.Parse("::1");
return true;
}
if (IPv4 == "disable")
{
address = null;
return false;
}
if (IPAddress.TryParse(IPv4, out var ip))
{
address = ip;
return true;
}
else
{
throw new System.Exception($"Could not parse IPv4 address: {IPv4}");
}
}
/// <summary>
/// Read IPv6
/// </summary>
/// <returns></returns>
public bool TryReadIPv6(out IPAddress address)
{
if (IPv6 == "*")
{
address = IPAddress.Parse("::");
return true;
}
if (IPv6 == "localhost")
{
address = IPAddress.Parse("::1");
return true;
}
if (IPv6 == "disable")
{
address = null;
return false;
}
if (IPAddress.TryParse(IPv6, out var ip))
{
address = ip;
return true;
}
else
{
throw new System.Exception($"Could not parse IPv6 address: {IPv6}");
}
}
}
}
@@ -1,23 +0,0 @@
namespace MQTTnet.Server.Configuration
{
/// <summary>
/// Listen Protocol Types
/// </summary>
public enum ListenProtocolTypes
{
/// <summary>
/// HTTP
/// </summary>
HTTP = 0,
/// <summary>
/// HTTPS
/// </summary>
HTTPS = 1,
/// <summary>
/// MQTT
/// </summary>
MQTT = 20
}
}
@@ -1,7 +0,0 @@
namespace MQTTnet.Server.Configuration
{
public class MqttNetServerConfiguration
{
}
}
@@ -1,15 +1,42 @@
using System.Collections.Generic;
namespace MQTTnet.Server.Configuration
namespace MQTTnet.Server.Configuration
{
/// <summary>
/// Main Settings Model
/// </summary>
public class SettingsModel
{
public SettingsModel()
{
}
/// <summary>
/// Set default connection timeout in seconds
/// </summary>
public int CommunicationTimeout { get; set; } = 15;
/// <summary>
/// Set 0 to disable connection backlogging
/// </summary>
public int ConnectionBacklog { get; set; }
/// <summary>
/// Enable support for persistent sessions
/// </summary>
public bool EnablePersistentSessions { get; set; } = false;
/// <summary>
/// Listen Settings
/// </summary>
public IEnumerable<ListenModel> Listen { get; set; }
public ListenModel Listen { get; set; } = new ListenModel();
/// <summary>
/// Encryption Listen Settings
/// </summary>
public ListenModel ListenEncryption { get; set; } = new ListenModel();
/// <summary>
/// Set limit for max pending messages per client
/// </summary>
public int MaxPendingMessagesPerClient { get; set; } = 250;
}
}