in provisioning/transport/mqtt/src/ProvisioningTransportHandlerMqtt.cs [91:165]
public override async Task<DeviceRegistrationResult> RegisterAsync(
ProvisioningTransportRegisterMessage message,
CancellationToken cancellationToken)
{
if (Logging.IsEnabled)
Logging.Enter(this, $"{nameof(ProvisioningTransportHandlerMqtt)}.{nameof(RegisterAsync)}");
if (message == null)
{
throw new ArgumentNullException(nameof(message));
}
cancellationToken.ThrowIfCancellationRequested();
RegistrationOperationStatus operation = null;
try
{
if (message.Security is SecurityProviderX509 x509Security)
{
if (FallbackType == TransportFallbackType.TcpWithWebSocketFallback || FallbackType == TransportFallbackType.TcpOnly)
{
// TODO: Fallback not implemented.
operation = await ProvisionOverTcpUsingX509CertificateAsync(message, cancellationToken).ConfigureAwait(false);
}
else if (FallbackType == TransportFallbackType.WebSocketOnly)
{
operation = await ProvisionOverWssUsingX509CertificateAsync(message, cancellationToken).ConfigureAwait(false);
}
else
{
throw new NotSupportedException($"Not supported {nameof(FallbackType)} value: {FallbackType}");
}
}
else if (message.Security is SecurityProviderSymmetricKey symmetricKeySecurity)
{
if (FallbackType == TransportFallbackType.TcpWithWebSocketFallback ||
FallbackType == TransportFallbackType.TcpOnly)
{
// TODO: Fallback not implemented.
operation = await ProvisionOverTcpUsingSymmetricKeyAsync(message, cancellationToken).ConfigureAwait(false);
}
else if (FallbackType == TransportFallbackType.WebSocketOnly)
{
operation = await ProvisionOverWssUsingSymmetricKeyAsync(message, cancellationToken).ConfigureAwait(false);
}
else
{
throw new NotSupportedException($"Not supported {nameof(FallbackType)} value: {FallbackType}");
}
}
else
{
if (Logging.IsEnabled)
Logging.Error(this, $"Invalid {nameof(SecurityProvider)} type.");
throw new NotSupportedException(
$"{nameof(message.Security)} must be of type {nameof(SecurityProviderX509)} or {nameof(SecurityProviderSymmetricKey)}");
}
return ConvertToProvisioningRegistrationResult(operation.RegistrationState);
}
catch (Exception ex) when (!(ex is ProvisioningTransportException))
{
if (Logging.IsEnabled)
Logging.Error(this, $"{nameof(ProvisioningTransportHandlerMqtt)} threw exception {ex}", nameof(RegisterAsync));
throw new ProvisioningTransportException($"MQTT transport exception", ex, true);
}
finally
{
if (Logging.IsEnabled)
Logging.Exit(this, $"{nameof(ProvisioningTransportHandlerMqtt)}.{nameof(RegisterAsync)}");
}
}