private async Task DpsRegisterInternalAsync()

in DeviceBridge/Services/ConnectionManager.cs [885:921]


        private async Task<string> DpsRegisterInternalAsync(Logger logger, string deviceId, string deviceKey, string modelId = null, CancellationToken? cancellationToken = null)
        {
            using (var security = new SecurityProviderSymmetricKey(deviceId, deviceKey, null))
            using (var transport = new ProvisioningTransportHandlerHttp())
            {
                logger.Info("Attempting DPS registration for device {deviceId}, model Id {modelId}", deviceId, modelId);
                ProvisioningDeviceClient provisioningClient = ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, _idScope, security, transport);
                DeviceRegistrationResult result;

                // If a model Id was provided, pass it along to DPS.
                if (modelId != null)
                {
                    var pnpPayload = new ProvisioningRegistrationAdditionalData
                    {
                        JsonData = $"{{\"modelId\":\"{modelId}\"}}",
                    };

                    result = cancellationToken.HasValue ? await provisioningClient.RegisterAsync(pnpPayload, cancellationToken.Value) : await provisioningClient.RegisterAsync(pnpPayload);
                }
                else
                {
                    result = cancellationToken.HasValue ? await provisioningClient.RegisterAsync(cancellationToken.Value) : await provisioningClient.RegisterAsync();
                }

                if (result.Status == ProvisioningRegistrationStatusType.Assigned)
                {
                    logger.Info("DPS registration successful for device {deviceId}. Assigned to hub {deviceHub}", deviceId, result.AssignedHub);
                    return result.AssignedHub;
                }
                else
                {
                    var e = new DpsRegistrationFailedWithUnknownStatusException(deviceId, result.Status.ToString(), result.Substatus.ToString(), result.ErrorCode, result.ErrorMessage);
                    logger.Error(e);
                    throw e;
                }
            }
        }