public AmqpAuthStrategyX509(SecurityProviderX509 security) { _security = security; }
/// <summary> /// Registers a device described by the message. /// </summary> /// <param name="message">The provisioning message.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The registration result.</returns> 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) { SecurityProviderX509 x509Security = (SecurityProviderX509)message.Security; 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) { SecurityProviderSymmetricKey symmetricKeySecurity = (SecurityProviderSymmetricKey)message.Security; 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)}"); } 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)}"); } } }
static async Task <DeviceRegistrationResult> GetDeviceRegistrationResultAsync(ProvisioningDeviceClient provClient, SecurityProviderX509 security) { DeviceRegistrationResult result = await provClient.RegisterAsync().ConfigureAwait(false); if (result.Status != ProvisioningRegistrationStatusType.Assigned) { throw new Exception("Device not assigned"); } return(result); }