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;
}
}
}