|
@@ -254,7 +254,7 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerIpAddress">Broker IP address</param>
|
|
|
[Obsolete("Use this ctor MqttClient(string brokerHostName) insted")]
|
|
|
public MqttClient(IPAddress brokerIpAddress) :
|
|
|
- this(brokerIpAddress, MqttSettings.MQTT_BROKER_DEFAULT_PORT, false, null)
|
|
|
+ this(brokerIpAddress, MqttSettings.MQTT_BROKER_DEFAULT_PORT, false, null, MqttSslProtocols.None)
|
|
|
{
|
|
|
}
|
|
|
|
|
@@ -265,13 +265,14 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerPort">Broker port</param>
|
|
|
/// <param name="secure">Using secure connection</param>
|
|
|
/// <param name="caCert">CA certificate for secure connection</param>
|
|
|
+ /// <param name="sslProtocol">SSL/TLS protocol version</param>
|
|
|
[Obsolete("Use this ctor MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert) insted")]
|
|
|
- public MqttClient(IPAddress brokerIpAddress, int brokerPort, bool secure, X509Certificate caCert)
|
|
|
+ public MqttClient(IPAddress brokerIpAddress, int brokerPort, bool secure, X509Certificate caCert, MqttSslProtocols sslProtocol)
|
|
|
{
|
|
|
#if !(MF_FRAMEWORK_VERSION_V4_2 || MF_FRAMEWORK_VERSION_V4_3 || COMPACT_FRAMEWORK)
|
|
|
- this.Init(brokerIpAddress.ToString(), brokerPort, secure, caCert, null, null);
|
|
|
+ this.Init(brokerIpAddress.ToString(), brokerPort, secure, caCert, sslProtocol, null, null);
|
|
|
#else
|
|
|
- this.Init(brokerIpAddress.ToString(), brokerPort, secure, caCert);
|
|
|
+ this.Init(brokerIpAddress.ToString(), brokerPort, secure, caCert, sslProtocol);
|
|
|
#endif
|
|
|
}
|
|
|
#endif
|
|
@@ -282,9 +283,9 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerHostName">Broker Host Name or IP Address</param>
|
|
|
public MqttClient(string brokerHostName) :
|
|
|
#if !(WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
- this(brokerHostName, MqttSettings.MQTT_BROKER_DEFAULT_PORT, false, null)
|
|
|
+ this(brokerHostName, MqttSettings.MQTT_BROKER_DEFAULT_PORT, false, null, MqttSslProtocols.None)
|
|
|
#else
|
|
|
- this(brokerHostName, MqttSettings.MQTT_BROKER_DEFAULT_PORT, false)
|
|
|
+ this(brokerHostName, MqttSettings.MQTT_BROKER_DEFAULT_PORT, false, MqttSslProtocols.None)
|
|
|
#endif
|
|
|
{
|
|
|
}
|
|
@@ -295,19 +296,20 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerHostName">Broker Host Name or IP Address</param>
|
|
|
/// <param name="brokerPort">Broker port</param>
|
|
|
/// <param name="secure">Using secure connection</param>
|
|
|
+ /// <param name="sslProtocol">SSL/TLS protocol version</param>
|
|
|
#if !(WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
/// <param name="caCert">CA certificate for secure connection</param>
|
|
|
- public MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert)
|
|
|
+ public MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert, MqttSslProtocols sslProtocol)
|
|
|
#else
|
|
|
- public MqttClient(string brokerHostName, int brokerPort, bool secure)
|
|
|
+ public MqttClient(string brokerHostName, int brokerPort, bool secure, MqttSslProtocols sslProtocol)
|
|
|
#endif
|
|
|
{
|
|
|
#if !(MF_FRAMEWORK_VERSION_V4_2 || MF_FRAMEWORK_VERSION_V4_3 || COMPACT_FRAMEWORK || WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
- this.Init(brokerHostName, brokerPort, secure, caCert, null, null);
|
|
|
+ this.Init(brokerHostName, brokerPort, secure, caCert, sslProtocol, null, null);
|
|
|
#elif (WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
- this.Init(brokerHostName, brokerPort, secure);
|
|
|
+ this.Init(brokerHostName, brokerPort, secure, sslProtocol);
|
|
|
#else
|
|
|
- this.Init(brokerHostName, brokerPort, secure, caCert);
|
|
|
+ this.Init(brokerHostName, brokerPort, secure, caCert, sslProtocol);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -321,10 +323,11 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerPort">Broker port</param>
|
|
|
/// <param name="secure">Using secure connection</param>
|
|
|
/// <param name="caCert">CA certificate for secure connection</param>
|
|
|
+ /// <param name="sslProtocol">SSL/TLS protocol version</param>
|
|
|
/// <param name="userCertificateValidationCallback">A RemoteCertificateValidationCallback delegate responsible for validating the certificate supplied by the remote party</param>
|
|
|
- public MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert,
|
|
|
+ public MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert, MqttSslProtocols sslProtocol,
|
|
|
RemoteCertificateValidationCallback userCertificateValidationCallback)
|
|
|
- : this(brokerHostName, brokerPort, secure, caCert, userCertificateValidationCallback, null)
|
|
|
+ : this(brokerHostName, brokerPort, secure, caCert, sslProtocol, userCertificateValidationCallback, null)
|
|
|
{
|
|
|
}
|
|
|
|
|
@@ -334,12 +337,13 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerHostName">Broker Host Name or IP Address</param>
|
|
|
/// <param name="brokerPort">Broker port</param>
|
|
|
/// <param name="secure">Using secure connection</param>
|
|
|
+ /// <param name="sslProtocol">SSL/TLS protocol version</param>
|
|
|
/// <param name="userCertificateValidationCallback">A RemoteCertificateValidationCallback delegate responsible for validating the certificate supplied by the remote party</param>
|
|
|
/// <param name="userCertificateSelectionCallback">A LocalCertificateSelectionCallback delegate responsible for selecting the certificate used for authentication</param>
|
|
|
- public MqttClient(string brokerHostName, int brokerPort, bool secure,
|
|
|
+ public MqttClient(string brokerHostName, int brokerPort, bool secure, MqttSslProtocols sslProtocol,
|
|
|
RemoteCertificateValidationCallback userCertificateValidationCallback,
|
|
|
LocalCertificateSelectionCallback userCertificateSelectionCallback)
|
|
|
- : this(brokerHostName, brokerPort, secure, null, userCertificateValidationCallback, userCertificateSelectionCallback)
|
|
|
+ : this(brokerHostName, brokerPort, secure, null, sslProtocol, userCertificateValidationCallback, userCertificateSelectionCallback)
|
|
|
{
|
|
|
}
|
|
|
|
|
@@ -350,31 +354,28 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerPort">Broker port</param>
|
|
|
/// <param name="secure">Using secure connection</param>
|
|
|
/// <param name="caCert">CA certificate for secure connection</param>
|
|
|
+ /// <param name="sslProtocol">SSL/TLS protocol version</param>
|
|
|
/// <param name="userCertificateValidationCallback">A RemoteCertificateValidationCallback delegate responsible for validating the certificate supplied by the remote party</param>
|
|
|
/// <param name="userCertificateSelectionCallback">A LocalCertificateSelectionCallback delegate responsible for selecting the certificate used for authentication</param>
|
|
|
- public MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert,
|
|
|
+ public MqttClient(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert, MqttSslProtocols sslProtocol,
|
|
|
RemoteCertificateValidationCallback userCertificateValidationCallback,
|
|
|
LocalCertificateSelectionCallback userCertificateSelectionCallback)
|
|
|
{
|
|
|
- this.Init(brokerHostName, brokerPort, secure, caCert, userCertificateValidationCallback, userCertificateSelectionCallback);
|
|
|
+ this.Init(brokerHostName, brokerPort, secure, caCert, sslProtocol, userCertificateValidationCallback, userCertificateSelectionCallback);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
#if BROKER
|
|
|
- #if !(WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
/// <summary>
|
|
|
/// Constructor
|
|
|
/// </summary>
|
|
|
- /// <param name="socket">Raw socket for communication</param>
|
|
|
- public MqttClient(Socket socket)
|
|
|
-#else
|
|
|
- public MqttClient(StreamSocket socket)
|
|
|
-#endif
|
|
|
+ /// <param name="channel">Network channel for communication</param>
|
|
|
+ public MqttClient(IMqttNetworkChannel channel)
|
|
|
{
|
|
|
// set default MQTT protocol version (default is 3.1.1)
|
|
|
this.ProtocolVersion = MqttProtocolVersion.Version_3_1_1;
|
|
|
|
|
|
- this.channel = new MqttNetworkChannel(socket);
|
|
|
+ this.channel = channel;
|
|
|
|
|
|
// reference to MQTT settings
|
|
|
this.settings = MqttSettings.Instance;
|
|
@@ -407,16 +408,17 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
/// <param name="brokerPort">Broker port</param>
|
|
|
/// <param name="secure">>Using secure connection</param>
|
|
|
/// <param name="caCert">CA certificate for secure connection</param>
|
|
|
+ /// <param name="sslProtocol">SSL/TLS protocol version</param>
|
|
|
#if !(MF_FRAMEWORK_VERSION_V4_2 || MF_FRAMEWORK_VERSION_V4_3 || COMPACT_FRAMEWORK || WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
/// <param name="userCertificateSelectionCallback">A RemoteCertificateValidationCallback delegate responsible for validating the certificate supplied by the remote party</param>
|
|
|
/// <param name="userCertificateValidationCallback">A LocalCertificateSelectionCallback delegate responsible for selecting the certificate used for authentication</param>
|
|
|
- private void Init(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert,
|
|
|
+ private void Init(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert, MqttSslProtocols sslProtocol,
|
|
|
RemoteCertificateValidationCallback userCertificateValidationCallback,
|
|
|
LocalCertificateSelectionCallback userCertificateSelectionCallback)
|
|
|
#elif (WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
- private void Init(string brokerHostName, int brokerPort, bool secure)
|
|
|
+ private void Init(string brokerHostName, int brokerPort, bool secure, MqttSslProtocols sslProtocol)
|
|
|
#else
|
|
|
- private void Init(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert)
|
|
|
+ private void Init(string brokerHostName, int brokerPort, bool secure, X509Certificate caCert, MqttSslProtocols sslProtocol)
|
|
|
#endif
|
|
|
{
|
|
|
// set default MQTT protocol version (default is 3.1.1)
|
|
@@ -455,11 +457,11 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
|
|
|
// create network channel
|
|
|
#if !(MF_FRAMEWORK_VERSION_V4_2 || MF_FRAMEWORK_VERSION_V4_3 || COMPACT_FRAMEWORK || WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
- this.channel = new MqttNetworkChannel(this.brokerHostName, this.brokerPort, secure, caCert, userCertificateValidationCallback, userCertificateSelectionCallback);
|
|
|
+ this.channel = new MqttNetworkChannel(this.brokerHostName, this.brokerPort, secure, caCert, sslProtocol, userCertificateValidationCallback, userCertificateSelectionCallback);
|
|
|
#elif (WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
- this.channel = new MqttNetworkChannel(this.brokerHostName, this.brokerPort, secure);
|
|
|
+ this.channel = new MqttNetworkChannel(this.brokerHostName, this.brokerPort, secure, sslProtocol);
|
|
|
#else
|
|
|
- this.channel = new MqttNetworkChannel(this.brokerHostName, this.brokerPort, secure, caCert);
|
|
|
+ this.channel = new MqttNetworkChannel(this.brokerHostName, this.brokerPort, secure, caCert, sslProtocol);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -1601,7 +1603,8 @@ namespace uPLibrary.Networking.M2Mqtt
|
|
|
(ex.ErrorCode == MqttClientErrorCode.InvalidConnectFlags));
|
|
|
}
|
|
|
#if !(WINDOWS_APP || WINDOWS_PHONE_APP)
|
|
|
- else if (e.GetType() == typeof(SocketException))
|
|
|
+ else if ((e.GetType() == typeof(SocketException)) ||
|
|
|
+ ((e.InnerException != null) && (e.InnerException.GetType() == typeof(SocketException)))) // added for SSL/TLS incoming connection that use SslStream that wraps SocketException
|
|
|
{
|
|
|
close = true;
|
|
|
}
|