change is_span_empty
This commit is contained in:
Родитель
4c642f2cd6
Коммит
a285a5765a
|
@ -73,7 +73,7 @@ static int get_mqtt_client_config_for_iot_hub(azure_iot_t* azure_iot, mqtt_clien
|
||||||
static az_span generate_dps_register_custom_property(az_span model_id, az_span data_buffer, az_span* remainder);
|
static az_span generate_dps_register_custom_property(az_span model_id, az_span data_buffer, az_span* remainder);
|
||||||
|
|
||||||
#define is_device_provisioned(azure_iot) \
|
#define is_device_provisioned(azure_iot) \
|
||||||
(!is_az_span_empty(azure_iot->config->iot_hub_fqdn) && !is_az_span_empty(azure_iot->config->device_id))
|
(!az_span_is_content_equal(azure_iot->config->iot_hub_fqdn, AZ_SPAN_EMPTY) && !az_span_is_content_equal(azure_iot->config->device_id, AZ_SPAN_EMPTY))
|
||||||
|
|
||||||
/* --- Public API --- */
|
/* --- Public API --- */
|
||||||
void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config)
|
void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config)
|
||||||
|
@ -82,8 +82,8 @@ void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config
|
||||||
_az_PRECONDITION_NOT_NULL(azure_iot_config);
|
_az_PRECONDITION_NOT_NULL(azure_iot_config);
|
||||||
if (azure_iot_config->use_device_provisioning)
|
if (azure_iot_config->use_device_provisioning)
|
||||||
{
|
{
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->iot_hub_fqdn));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->iot_hub_fqdn, AZ_SPAN_EMPTY));
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->device_id));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->device_id, AZ_SPAN_EMPTY));
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_id_scope, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_id_scope, 1, false);
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_registration_id, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_registration_id, 1, false);
|
||||||
}
|
}
|
||||||
|
@ -91,13 +91,13 @@ void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config
|
||||||
{
|
{
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->iot_hub_fqdn, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->iot_hub_fqdn, 1, false);
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->device_id, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->device_id, 1, false);
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->dps_id_scope));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->dps_id_scope, AZ_SPAN_EMPTY));
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->dps_registration_id));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->dps_registration_id, AZ_SPAN_EMPTY));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Either device key or device certificate and certificate key should be defined.
|
// Either device key or device certificate and certificate key should be defined.
|
||||||
if (is_az_span_empty(azure_iot_config->device_key) &&
|
if (az_span_is_content_equal(azure_iot_config->device_key, AZ_SPAN_EMPTY) &&
|
||||||
(is_az_span_empty(azure_iot_config->device_certificate) || is_az_span_empty(azure_iot_config->device_certificate_private_key) ))
|
(az_span_is_content_equal(azure_iot_config->device_certificate, AZ_SPAN_EMPTY) || az_span_is_content_equal(azure_iot_config->device_certificate_private_key, AZ_SPAN_EMPTY) ))
|
||||||
{
|
{
|
||||||
LogError("Please define either a device key or a device certificate and certificate private key. See iot_configs.h");
|
LogError("Please define either a device key or a device certificate and certificate private key. See iot_configs.h");
|
||||||
_az_PRECONDITION(false);
|
_az_PRECONDITION(false);
|
||||||
|
@ -326,7 +326,7 @@ void azure_iot_do_work(azure_iot_t* azure_iot)
|
||||||
|
|
||||||
mqtt_message.topic = split_az_span(data_buffer, length + 1, &data_buffer);
|
mqtt_message.topic = split_az_span(data_buffer, length + 1, &data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(mqtt_message.topic) || is_az_span_empty(data_buffer))
|
if (az_span_is_content_equal(mqtt_message.topic, AZ_SPAN_EMPTY) || az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed reserving memory for DPS register payload.");
|
LogError("Failed reserving memory for DPS register payload.");
|
||||||
|
@ -336,7 +336,7 @@ void azure_iot_do_work(azure_iot_t* azure_iot)
|
||||||
dps_register_custom_property = generate_dps_register_custom_property(
|
dps_register_custom_property = generate_dps_register_custom_property(
|
||||||
azure_iot->config->model_id, data_buffer, &mqtt_message.payload);
|
azure_iot->config->model_id, data_buffer, &mqtt_message.payload);
|
||||||
|
|
||||||
if (is_az_span_empty(dps_register_custom_property))
|
if (az_span_is_content_equal(dps_register_custom_property, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed generating DPS register custom property payload.");
|
LogError("Failed generating DPS register custom property payload.");
|
||||||
|
@ -812,11 +812,11 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
{
|
{
|
||||||
result = RESULT_OK;
|
result = RESULT_OK;
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->dps_operation_id))
|
if (az_span_is_content_equal(azure_iot->dps_operation_id, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->dps_operation_id = slice_and_copy_az_span(azure_iot->data_buffer, register_response.operation_id, &azure_iot->data_buffer);
|
azure_iot->dps_operation_id = slice_and_copy_az_span(azure_iot->data_buffer, register_response.operation_id, &azure_iot->data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->dps_operation_id))
|
if (az_span_is_content_equal(azure_iot->dps_operation_id, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed reserving memory for DPS operation id.");
|
LogError("Failed reserving memory for DPS operation id.");
|
||||||
|
@ -837,7 +837,7 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
|
|
||||||
azure_iot->config->iot_hub_fqdn = slice_and_copy_az_span(data_buffer, register_response.registration_state.assigned_hub_hostname, &data_buffer);
|
azure_iot->config->iot_hub_fqdn = slice_and_copy_az_span(data_buffer, register_response.registration_state.assigned_hub_hostname, &data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->config->iot_hub_fqdn))
|
if (az_span_is_content_equal(azure_iot->config->iot_hub_fqdn, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed saving IoT Hub fqdn from provisioning.");
|
LogError("Failed saving IoT Hub fqdn from provisioning.");
|
||||||
|
@ -847,7 +847,7 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
{
|
{
|
||||||
azure_iot->config->device_id = slice_and_copy_az_span(data_buffer, register_response.registration_state.device_id, &data_buffer);
|
azure_iot->config->device_id = slice_and_copy_az_span(data_buffer, register_response.registration_state.device_id, &data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->config->device_id))
|
if (az_span_is_content_equal(azure_iot->config->device_id, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed saving device id from provisioning.");
|
LogError("Failed saving device id from provisioning.");
|
||||||
|
@ -955,9 +955,9 @@ static int get_mqtt_client_config_for_dps(azure_iot_t* azure_iot, mqtt_client_co
|
||||||
data_buffer_span = azure_iot->data_buffer;
|
data_buffer_span = azure_iot->data_buffer;
|
||||||
|
|
||||||
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(password_span), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(password_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
||||||
|
|
||||||
if(!is_az_span_empty(azure_iot->config->device_key))
|
if(!az_span_is_content_equal(azure_iot->config->device_key, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
password_length = generate_sas_token_for_dps(
|
password_length = generate_sas_token_for_dps(
|
||||||
&azure_iot->dps_client,
|
&azure_iot->dps_client,
|
||||||
|
@ -971,7 +971,7 @@ static int get_mqtt_client_config_for_dps(azure_iot_t* azure_iot, mqtt_client_co
|
||||||
}
|
}
|
||||||
|
|
||||||
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(client_id_span), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(client_id_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
||||||
|
|
||||||
azrc = az_iot_provisioning_client_get_client_id(
|
azrc = az_iot_provisioning_client_get_client_id(
|
||||||
&azure_iot->dps_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
&azure_iot->dps_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
||||||
|
@ -989,7 +989,7 @@ static int get_mqtt_client_config_for_dps(azure_iot_t* azure_iot, mqtt_client_co
|
||||||
mqtt_client_config->client_id = client_id_span;
|
mqtt_client_config->client_id = client_id_span;
|
||||||
mqtt_client_config->username = username_span;
|
mqtt_client_config->username = username_span;
|
||||||
|
|
||||||
if(!is_az_span_empty(azure_iot->config->device_key))
|
if(!az_span_is_content_equal(azure_iot->config->device_key, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
mqtt_client_config->password = password_span;
|
mqtt_client_config->password = password_span;
|
||||||
}
|
}
|
||||||
|
@ -1035,7 +1035,7 @@ static int get_mqtt_client_config_for_iot_hub(azure_iot_t* azure_iot, mqtt_clien
|
||||||
data_buffer_span = azure_iot->data_buffer;
|
data_buffer_span = azure_iot->data_buffer;
|
||||||
|
|
||||||
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(password_span), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(password_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
||||||
|
|
||||||
password_length = generate_sas_token_for_iot_hub(
|
password_length = generate_sas_token_for_iot_hub(
|
||||||
&azure_iot->iot_hub_client,
|
&azure_iot->iot_hub_client,
|
||||||
|
@ -1048,7 +1048,7 @@ static int get_mqtt_client_config_for_iot_hub(azure_iot_t* azure_iot, mqtt_clien
|
||||||
EXIT_IF_TRUE(password_length == 0, RESULT_ERROR, "Failed creating mqtt password for IoT Hub connection.");
|
EXIT_IF_TRUE(password_length == 0, RESULT_ERROR, "Failed creating mqtt password for IoT Hub connection.");
|
||||||
|
|
||||||
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(client_id_span), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(client_id_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
||||||
|
|
||||||
azrc = az_iot_hub_client_get_client_id(
|
azrc = az_iot_hub_client_get_client_id(
|
||||||
&azure_iot->iot_hub_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
&azure_iot->iot_hub_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
||||||
|
@ -1113,7 +1113,7 @@ static int generate_sas_token_for_dps(
|
||||||
|
|
||||||
// Step 2.a.
|
// Step 2.a.
|
||||||
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(plain_sas_signature), 0, "Failed reserving buffer for plain sas token.");
|
EXIT_IF_TRUE(az_span_is_content_equal(plain_sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for plain sas token.");
|
||||||
|
|
||||||
rc = az_iot_provisioning_client_sas_get_signature(
|
rc = az_iot_provisioning_client_sas_get_signature(
|
||||||
provisioning_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
provisioning_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
||||||
|
@ -1121,10 +1121,10 @@ static int generate_sas_token_for_dps(
|
||||||
|
|
||||||
// Step 2.b.
|
// Step 2.b.
|
||||||
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_signature), 0, "Failed reserving buffer for sas_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_signature.");
|
||||||
|
|
||||||
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(decoded_sas_key), 0, "Failed reserving buffer for decoded_sas_key.");
|
EXIT_IF_TRUE(az_span_is_content_equal(decoded_sas_key, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for decoded_sas_key.");
|
||||||
|
|
||||||
result = data_manipulation_functions.base64_decode(
|
result = data_manipulation_functions.base64_decode(
|
||||||
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
||||||
|
@ -1132,7 +1132,7 @@ static int generate_sas_token_for_dps(
|
||||||
|
|
||||||
// Step 2.c.
|
// Step 2.c.
|
||||||
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_hmac256_signed_signature), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_hmac256_signed_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
||||||
|
|
||||||
result = data_manipulation_functions.hmac_sha256_encrypt(
|
result = data_manipulation_functions.hmac_sha256_encrypt(
|
||||||
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
||||||
|
@ -1204,7 +1204,7 @@ static int generate_sas_token_for_iot_hub(
|
||||||
|
|
||||||
// Step 2.a.
|
// Step 2.a.
|
||||||
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(plain_sas_signature), 0, "Failed reserving buffer for plain sas token.");
|
EXIT_IF_TRUE(az_span_is_content_equal(plain_sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for plain sas token.");
|
||||||
|
|
||||||
rc = az_iot_hub_client_sas_get_signature(
|
rc = az_iot_hub_client_sas_get_signature(
|
||||||
iot_hub_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
iot_hub_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
||||||
|
@ -1212,10 +1212,10 @@ static int generate_sas_token_for_iot_hub(
|
||||||
|
|
||||||
// Step 2.b.
|
// Step 2.b.
|
||||||
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_signature), 0, "Failed reserving buffer for sas_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_signature.");
|
||||||
|
|
||||||
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(decoded_sas_key), 0, "Failed reserving buffer for decoded_sas_key.");
|
EXIT_IF_TRUE(az_span_is_content_equal(decoded_sas_key, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for decoded_sas_key.");
|
||||||
|
|
||||||
result = data_manipulation_functions.base64_decode(
|
result = data_manipulation_functions.base64_decode(
|
||||||
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
||||||
|
@ -1223,7 +1223,7 @@ static int generate_sas_token_for_iot_hub(
|
||||||
|
|
||||||
// Step 2.c.
|
// Step 2.c.
|
||||||
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_hmac256_signed_signature), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_hmac256_signed_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
||||||
|
|
||||||
result = data_manipulation_functions.hmac_sha256_encrypt(
|
result = data_manipulation_functions.hmac_sha256_encrypt(
|
||||||
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
||||||
|
@ -1271,16 +1271,16 @@ static az_span generate_dps_register_custom_property(az_span model_id, az_span d
|
||||||
size_t length = lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN) + az_span_size(model_id) + lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_END);
|
size_t length = lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN) + az_span_size(model_id) + lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_END);
|
||||||
|
|
||||||
custom_property = split_az_span(data_buffer, length, remainder);
|
custom_property = split_az_span(data_buffer, length, remainder);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(custom_property), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (not enough space).");
|
EXIT_IF_TRUE(az_span_is_content_equal(custom_property, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (not enough space).");
|
||||||
|
|
||||||
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN));
|
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN));
|
||||||
EXIT_IF_TRUE(is_az_span_empty(data_buffer), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (prefix).");
|
EXIT_IF_TRUE(az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (prefix).");
|
||||||
|
|
||||||
data_buffer = az_span_copy(data_buffer, model_id);
|
data_buffer = az_span_copy(data_buffer, model_id);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(data_buffer), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (model id).");
|
EXIT_IF_TRUE(az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (model id).");
|
||||||
|
|
||||||
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_END));
|
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_END));
|
||||||
EXIT_IF_TRUE(is_az_span_empty(data_buffer), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (suffix).");
|
EXIT_IF_TRUE(az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (suffix).");
|
||||||
|
|
||||||
return custom_property;
|
return custom_property;
|
||||||
}
|
}
|
||||||
|
@ -1290,7 +1290,7 @@ az_span split_az_span(az_span span, int32_t size, az_span* remainder)
|
||||||
{
|
{
|
||||||
az_span result = az_span_slice(span, 0, size);
|
az_span result = az_span_slice(span, 0, size);
|
||||||
|
|
||||||
if (remainder != NULL && !is_az_span_empty(result))
|
if (remainder != NULL && !az_span_is_content_equal(result, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
*remainder = az_span_slice(span, size, az_span_size(span));
|
*remainder = az_span_slice(span, size, az_span_size(span));
|
||||||
}
|
}
|
||||||
|
@ -1302,12 +1302,12 @@ az_span slice_and_copy_az_span(az_span destination, az_span source, az_span* rem
|
||||||
{
|
{
|
||||||
az_span result = split_az_span(destination, az_span_size(source), remainder);
|
az_span result = split_az_span(destination, az_span_size(source), remainder);
|
||||||
|
|
||||||
if (is_az_span_empty(*remainder))
|
if (az_span_is_content_equal(*remainder, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
result = AZ_SPAN_EMPTY;
|
result = AZ_SPAN_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_az_span_empty(result))
|
if (!az_span_is_content_equal(result, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
(void)az_span_copy(result, source);
|
(void)az_span_copy(result, source);
|
||||||
}
|
}
|
||||||
|
|
|
@ -788,15 +788,6 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
* These functions are used internally by the Azure IoT client code and its extensions.
|
* These functions are used internally by the Azure IoT client code and its extensions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Checks whether `span` is equal to AZ_SPAN_EMPTY.
|
|
||||||
*
|
|
||||||
* @param[in] span A span to be verified.
|
|
||||||
*
|
|
||||||
* @return boolean True if `span`'s pointer and size are equal to AZ_SPAN_EMPTY, or false otherwise.
|
|
||||||
*/
|
|
||||||
#define is_az_span_empty(span) az_span_is_content_equal(span, AZ_SPAN_EMPTY)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Slices `span` at position `size`, returns the first slice and assigns the second slice to `remainder`.
|
* @brief Slices `span` at position `size`, returns the first slice and assigns the second slice to `remainder`.
|
||||||
*
|
*
|
||||||
|
|
|
@ -73,7 +73,7 @@ static int get_mqtt_client_config_for_iot_hub(azure_iot_t* azure_iot, mqtt_clien
|
||||||
static az_span generate_dps_register_custom_property(az_span model_id, az_span data_buffer, az_span* remainder);
|
static az_span generate_dps_register_custom_property(az_span model_id, az_span data_buffer, az_span* remainder);
|
||||||
|
|
||||||
#define is_device_provisioned(azure_iot) \
|
#define is_device_provisioned(azure_iot) \
|
||||||
(!is_az_span_empty(azure_iot->config->iot_hub_fqdn) && !is_az_span_empty(azure_iot->config->device_id))
|
(!az_span_is_content_equal(azure_iot->config->iot_hub_fqdn, AZ_SPAN_EMPTY) && !az_span_is_content_equal(azure_iot->config->device_id, AZ_SPAN_EMPTY))
|
||||||
|
|
||||||
/* --- Public API --- */
|
/* --- Public API --- */
|
||||||
void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config)
|
void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config)
|
||||||
|
@ -82,8 +82,8 @@ void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config
|
||||||
_az_PRECONDITION_NOT_NULL(azure_iot_config);
|
_az_PRECONDITION_NOT_NULL(azure_iot_config);
|
||||||
if (azure_iot_config->use_device_provisioning)
|
if (azure_iot_config->use_device_provisioning)
|
||||||
{
|
{
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->iot_hub_fqdn));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->iot_hub_fqdn, AZ_SPAN_EMPTY));
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->device_id));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->device_id, AZ_SPAN_EMPTY));
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_id_scope, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_id_scope, 1, false);
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_registration_id, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->dps_registration_id, 1, false);
|
||||||
}
|
}
|
||||||
|
@ -91,13 +91,13 @@ void azure_iot_init(azure_iot_t* azure_iot, azure_iot_config_t* azure_iot_config
|
||||||
{
|
{
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->iot_hub_fqdn, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->iot_hub_fqdn, 1, false);
|
||||||
_az_PRECONDITION_VALID_SPAN(azure_iot_config->device_id, 1, false);
|
_az_PRECONDITION_VALID_SPAN(azure_iot_config->device_id, 1, false);
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->dps_id_scope));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->dps_id_scope, AZ_SPAN_EMPTY));
|
||||||
_az_PRECONDITION(is_az_span_empty(azure_iot_config->dps_registration_id));
|
_az_PRECONDITION(az_span_is_content_equal(azure_iot_config->dps_registration_id, AZ_SPAN_EMPTY));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Either device key or device certificate and certificate key should be defined.
|
// Either device key or device certificate and certificate key should be defined.
|
||||||
if (is_az_span_empty(azure_iot_config->device_key) &&
|
if (az_span_is_content_equal(azure_iot_config->device_key, AZ_SPAN_EMPTY) &&
|
||||||
(is_az_span_empty(azure_iot_config->device_certificate) || is_az_span_empty(azure_iot_config->device_certificate_private_key) ))
|
(az_span_is_content_equal(azure_iot_config->device_certificate, AZ_SPAN_EMPTY) || az_span_is_content_equal(azure_iot_config->device_certificate_private_key, AZ_SPAN_EMPTY) ))
|
||||||
{
|
{
|
||||||
LogError("Please define either a device key or a device certificate and certificate private key. See iot_configs.h");
|
LogError("Please define either a device key or a device certificate and certificate private key. See iot_configs.h");
|
||||||
_az_PRECONDITION(false);
|
_az_PRECONDITION(false);
|
||||||
|
@ -326,7 +326,7 @@ void azure_iot_do_work(azure_iot_t* azure_iot)
|
||||||
|
|
||||||
mqtt_message.topic = split_az_span(data_buffer, length + 1, &data_buffer);
|
mqtt_message.topic = split_az_span(data_buffer, length + 1, &data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(mqtt_message.topic) || is_az_span_empty(data_buffer))
|
if (az_span_is_content_equal(mqtt_message.topic, AZ_SPAN_EMPTY) || az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed reserving memory for DPS register payload.");
|
LogError("Failed reserving memory for DPS register payload.");
|
||||||
|
@ -336,7 +336,7 @@ void azure_iot_do_work(azure_iot_t* azure_iot)
|
||||||
dps_register_custom_property = generate_dps_register_custom_property(
|
dps_register_custom_property = generate_dps_register_custom_property(
|
||||||
azure_iot->config->model_id, data_buffer, &mqtt_message.payload);
|
azure_iot->config->model_id, data_buffer, &mqtt_message.payload);
|
||||||
|
|
||||||
if (is_az_span_empty(dps_register_custom_property))
|
if (az_span_is_content_equal(dps_register_custom_property, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed generating DPS register custom property payload.");
|
LogError("Failed generating DPS register custom property payload.");
|
||||||
|
@ -812,11 +812,11 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
{
|
{
|
||||||
result = RESULT_OK;
|
result = RESULT_OK;
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->dps_operation_id))
|
if (az_span_is_content_equal(azure_iot->dps_operation_id, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->dps_operation_id = slice_and_copy_az_span(azure_iot->data_buffer, register_response.operation_id, &azure_iot->data_buffer);
|
azure_iot->dps_operation_id = slice_and_copy_az_span(azure_iot->data_buffer, register_response.operation_id, &azure_iot->data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->dps_operation_id))
|
if (az_span_is_content_equal(azure_iot->dps_operation_id, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed reserving memory for DPS operation id.");
|
LogError("Failed reserving memory for DPS operation id.");
|
||||||
|
@ -837,7 +837,7 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
|
|
||||||
azure_iot->config->iot_hub_fqdn = slice_and_copy_az_span(data_buffer, register_response.registration_state.assigned_hub_hostname, &data_buffer);
|
azure_iot->config->iot_hub_fqdn = slice_and_copy_az_span(data_buffer, register_response.registration_state.assigned_hub_hostname, &data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->config->iot_hub_fqdn))
|
if (az_span_is_content_equal(azure_iot->config->iot_hub_fqdn, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed saving IoT Hub fqdn from provisioning.");
|
LogError("Failed saving IoT Hub fqdn from provisioning.");
|
||||||
|
@ -847,7 +847,7 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
{
|
{
|
||||||
azure_iot->config->device_id = slice_and_copy_az_span(data_buffer, register_response.registration_state.device_id, &data_buffer);
|
azure_iot->config->device_id = slice_and_copy_az_span(data_buffer, register_response.registration_state.device_id, &data_buffer);
|
||||||
|
|
||||||
if (is_az_span_empty(azure_iot->config->device_id))
|
if (az_span_is_content_equal(azure_iot->config->device_id, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
azure_iot->state = azure_iot_state_error;
|
azure_iot->state = azure_iot_state_error;
|
||||||
LogError("Failed saving device id from provisioning.");
|
LogError("Failed saving device id from provisioning.");
|
||||||
|
@ -955,9 +955,9 @@ static int get_mqtt_client_config_for_dps(azure_iot_t* azure_iot, mqtt_client_co
|
||||||
data_buffer_span = azure_iot->data_buffer;
|
data_buffer_span = azure_iot->data_buffer;
|
||||||
|
|
||||||
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(password_span), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(password_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
||||||
|
|
||||||
if(!is_az_span_empty(azure_iot->config->device_key))
|
if(!az_span_is_content_equal(azure_iot->config->device_key, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
password_length = generate_sas_token_for_dps(
|
password_length = generate_sas_token_for_dps(
|
||||||
&azure_iot->dps_client,
|
&azure_iot->dps_client,
|
||||||
|
@ -971,7 +971,7 @@ static int get_mqtt_client_config_for_dps(azure_iot_t* azure_iot, mqtt_client_co
|
||||||
}
|
}
|
||||||
|
|
||||||
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(client_id_span), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(client_id_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
||||||
|
|
||||||
azrc = az_iot_provisioning_client_get_client_id(
|
azrc = az_iot_provisioning_client_get_client_id(
|
||||||
&azure_iot->dps_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
&azure_iot->dps_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
||||||
|
@ -989,7 +989,7 @@ static int get_mqtt_client_config_for_dps(azure_iot_t* azure_iot, mqtt_client_co
|
||||||
mqtt_client_config->client_id = client_id_span;
|
mqtt_client_config->client_id = client_id_span;
|
||||||
mqtt_client_config->username = username_span;
|
mqtt_client_config->username = username_span;
|
||||||
|
|
||||||
if(!is_az_span_empty(azure_iot->config->device_key))
|
if(!az_span_is_content_equal(azure_iot->config->device_key, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
mqtt_client_config->password = password_span;
|
mqtt_client_config->password = password_span;
|
||||||
}
|
}
|
||||||
|
@ -1035,7 +1035,7 @@ static int get_mqtt_client_config_for_iot_hub(azure_iot_t* azure_iot, mqtt_clien
|
||||||
data_buffer_span = azure_iot->data_buffer;
|
data_buffer_span = azure_iot->data_buffer;
|
||||||
|
|
||||||
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
password_span = split_az_span(data_buffer_span, MQTT_PASSWORD_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(password_span), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(password_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for password_span.");
|
||||||
|
|
||||||
password_length = generate_sas_token_for_iot_hub(
|
password_length = generate_sas_token_for_iot_hub(
|
||||||
&azure_iot->iot_hub_client,
|
&azure_iot->iot_hub_client,
|
||||||
|
@ -1048,7 +1048,7 @@ static int get_mqtt_client_config_for_iot_hub(azure_iot_t* azure_iot, mqtt_clien
|
||||||
EXIT_IF_TRUE(password_length == 0, RESULT_ERROR, "Failed creating mqtt password for IoT Hub connection.");
|
EXIT_IF_TRUE(password_length == 0, RESULT_ERROR, "Failed creating mqtt password for IoT Hub connection.");
|
||||||
|
|
||||||
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
client_id_span = split_az_span(data_buffer_span, MQTT_CLIENT_ID_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(client_id_span), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
EXIT_IF_TRUE(az_span_is_content_equal(client_id_span, AZ_SPAN_EMPTY), RESULT_ERROR, "Failed reserving buffer for client_id_span.");
|
||||||
|
|
||||||
azrc = az_iot_hub_client_get_client_id(
|
azrc = az_iot_hub_client_get_client_id(
|
||||||
&azure_iot->iot_hub_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
&azure_iot->iot_hub_client, (char*)az_span_ptr(client_id_span), az_span_size(client_id_span), &client_id_length);
|
||||||
|
@ -1113,7 +1113,7 @@ static int generate_sas_token_for_dps(
|
||||||
|
|
||||||
// Step 2.a.
|
// Step 2.a.
|
||||||
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(plain_sas_signature), 0, "Failed reserving buffer for plain sas token.");
|
EXIT_IF_TRUE(az_span_is_content_equal(plain_sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for plain sas token.");
|
||||||
|
|
||||||
rc = az_iot_provisioning_client_sas_get_signature(
|
rc = az_iot_provisioning_client_sas_get_signature(
|
||||||
provisioning_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
provisioning_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
||||||
|
@ -1121,10 +1121,10 @@ static int generate_sas_token_for_dps(
|
||||||
|
|
||||||
// Step 2.b.
|
// Step 2.b.
|
||||||
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_signature), 0, "Failed reserving buffer for sas_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_signature.");
|
||||||
|
|
||||||
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(decoded_sas_key), 0, "Failed reserving buffer for decoded_sas_key.");
|
EXIT_IF_TRUE(az_span_is_content_equal(decoded_sas_key, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for decoded_sas_key.");
|
||||||
|
|
||||||
result = data_manipulation_functions.base64_decode(
|
result = data_manipulation_functions.base64_decode(
|
||||||
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
||||||
|
@ -1132,7 +1132,7 @@ static int generate_sas_token_for_dps(
|
||||||
|
|
||||||
// Step 2.c.
|
// Step 2.c.
|
||||||
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_hmac256_signed_signature), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_hmac256_signed_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
||||||
|
|
||||||
result = data_manipulation_functions.hmac_sha256_encrypt(
|
result = data_manipulation_functions.hmac_sha256_encrypt(
|
||||||
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
||||||
|
@ -1204,7 +1204,7 @@ static int generate_sas_token_for_iot_hub(
|
||||||
|
|
||||||
// Step 2.a.
|
// Step 2.a.
|
||||||
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
plain_sas_signature = split_az_span(data_buffer_span, PLAIN_SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(plain_sas_signature), 0, "Failed reserving buffer for plain sas token.");
|
EXIT_IF_TRUE(az_span_is_content_equal(plain_sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for plain sas token.");
|
||||||
|
|
||||||
rc = az_iot_hub_client_sas_get_signature(
|
rc = az_iot_hub_client_sas_get_signature(
|
||||||
iot_hub_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
iot_hub_client, *expiration_time, plain_sas_signature, &plain_sas_signature);
|
||||||
|
@ -1212,10 +1212,10 @@ static int generate_sas_token_for_iot_hub(
|
||||||
|
|
||||||
// Step 2.b.
|
// Step 2.b.
|
||||||
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_signature = split_az_span(data_buffer_span, SAS_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_signature), 0, "Failed reserving buffer for sas_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_signature.");
|
||||||
|
|
||||||
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
decoded_sas_key = split_az_span(data_buffer_span, DECODED_SAS_KEY_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(decoded_sas_key), 0, "Failed reserving buffer for decoded_sas_key.");
|
EXIT_IF_TRUE(az_span_is_content_equal(decoded_sas_key, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for decoded_sas_key.");
|
||||||
|
|
||||||
result = data_manipulation_functions.base64_decode(
|
result = data_manipulation_functions.base64_decode(
|
||||||
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
az_span_ptr(device_key), az_span_size(device_key), az_span_ptr(decoded_sas_key), az_span_size(decoded_sas_key), &decoded_sas_key_length);
|
||||||
|
@ -1223,7 +1223,7 @@ static int generate_sas_token_for_iot_hub(
|
||||||
|
|
||||||
// Step 2.c.
|
// Step 2.c.
|
||||||
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
sas_hmac256_signed_signature = split_az_span(data_buffer_span, SAS_HMAC256_ENCRYPTED_SIGNATURE_BUFFER_SIZE, &data_buffer_span);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(sas_hmac256_signed_signature), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
EXIT_IF_TRUE(az_span_is_content_equal(sas_hmac256_signed_signature, AZ_SPAN_EMPTY), 0, "Failed reserving buffer for sas_hmac256_signed_signature.");
|
||||||
|
|
||||||
result = data_manipulation_functions.hmac_sha256_encrypt(
|
result = data_manipulation_functions.hmac_sha256_encrypt(
|
||||||
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
az_span_ptr(decoded_sas_key), decoded_sas_key_length,
|
||||||
|
@ -1271,16 +1271,16 @@ static az_span generate_dps_register_custom_property(az_span model_id, az_span d
|
||||||
size_t length = lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN) + az_span_size(model_id) + lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_END);
|
size_t length = lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN) + az_span_size(model_id) + lengthof(DPS_REGISTER_CUSTOM_PAYLOAD_END);
|
||||||
|
|
||||||
custom_property = split_az_span(data_buffer, length, remainder);
|
custom_property = split_az_span(data_buffer, length, remainder);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(custom_property), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (not enough space).");
|
EXIT_IF_TRUE(az_span_is_content_equal(custom_property, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (not enough space).");
|
||||||
|
|
||||||
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN));
|
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_BEGIN));
|
||||||
EXIT_IF_TRUE(is_az_span_empty(data_buffer), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (prefix).");
|
EXIT_IF_TRUE(az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (prefix).");
|
||||||
|
|
||||||
data_buffer = az_span_copy(data_buffer, model_id);
|
data_buffer = az_span_copy(data_buffer, model_id);
|
||||||
EXIT_IF_TRUE(is_az_span_empty(data_buffer), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (model id).");
|
EXIT_IF_TRUE(az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (model id).");
|
||||||
|
|
||||||
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_END));
|
data_buffer = az_span_copy(data_buffer, AZ_SPAN_FROM_STR(DPS_REGISTER_CUSTOM_PAYLOAD_END));
|
||||||
EXIT_IF_TRUE(is_az_span_empty(data_buffer), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (suffix).");
|
EXIT_IF_TRUE(az_span_is_content_equal(data_buffer, AZ_SPAN_EMPTY), AZ_SPAN_EMPTY, "Failed generating DPS register custom property (suffix).");
|
||||||
|
|
||||||
return custom_property;
|
return custom_property;
|
||||||
}
|
}
|
||||||
|
@ -1290,7 +1290,7 @@ az_span split_az_span(az_span span, int32_t size, az_span* remainder)
|
||||||
{
|
{
|
||||||
az_span result = az_span_slice(span, 0, size);
|
az_span result = az_span_slice(span, 0, size);
|
||||||
|
|
||||||
if (remainder != NULL && !is_az_span_empty(result))
|
if (remainder != NULL && !az_span_is_content_equal(result, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
*remainder = az_span_slice(span, size, az_span_size(span));
|
*remainder = az_span_slice(span, size, az_span_size(span));
|
||||||
}
|
}
|
||||||
|
@ -1302,12 +1302,12 @@ az_span slice_and_copy_az_span(az_span destination, az_span source, az_span* rem
|
||||||
{
|
{
|
||||||
az_span result = split_az_span(destination, az_span_size(source), remainder);
|
az_span result = split_az_span(destination, az_span_size(source), remainder);
|
||||||
|
|
||||||
if (is_az_span_empty(*remainder))
|
if (az_span_is_content_equal(*remainder, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
result = AZ_SPAN_EMPTY;
|
result = AZ_SPAN_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_az_span_empty(result))
|
if (!az_span_is_content_equal(result, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
(void)az_span_copy(result, source);
|
(void)az_span_copy(result, source);
|
||||||
}
|
}
|
||||||
|
|
|
@ -788,15 +788,6 @@ int azure_iot_mqtt_client_message_received(azure_iot_t* azure_iot, mqtt_message_
|
||||||
* These functions are used internally by the Azure IoT client code and its extensions.
|
* These functions are used internally by the Azure IoT client code and its extensions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Checks whether `span` is equal to AZ_SPAN_EMPTY.
|
|
||||||
*
|
|
||||||
* @param[in] span A span to be verified.
|
|
||||||
*
|
|
||||||
* @return boolean True if `span`'s pointer and size are equal to AZ_SPAN_EMPTY, or false otherwise.
|
|
||||||
*/
|
|
||||||
#define is_az_span_empty(span) az_span_is_content_equal(span, AZ_SPAN_EMPTY)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Slices `span` at position `size`, returns the first slice and assigns the second slice to `remainder`.
|
* @brief Slices `span` at position `size`, returns the first slice and assigns the second slice to `remainder`.
|
||||||
*
|
*
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#define INDEFINITE_TIME ((time_t)-1)
|
#define INDEFINITE_TIME ((time_t)-1)
|
||||||
|
|
||||||
#define is_az_span_empty(x) (az_span_size(x) == az_span_size(AZ_SPAN_EMPTY) && az_span_ptr(x) == az_span_ptr(AZ_SPAN_EMPTY))
|
#define az_span_is_content_equal(x, AZ_SPAN_EMPTY) (az_span_size(x) == az_span_size(AZ_SPAN_EMPTY) && az_span_ptr(x) == az_span_ptr(AZ_SPAN_EMPTY))
|
||||||
|
|
||||||
static uint32_t getSasTokenExpiration(const char* sasToken)
|
static uint32_t getSasTokenExpiration(const char* sasToken)
|
||||||
{
|
{
|
||||||
|
@ -242,7 +242,7 @@ int AzIoTSasToken::Generate(unsigned int expiryTimeInMinutes)
|
||||||
expiryTimeInMinutes,
|
expiryTimeInMinutes,
|
||||||
this->sasTokenBuffer);
|
this->sasTokenBuffer);
|
||||||
|
|
||||||
if (is_az_span_empty(this->sasToken))
|
if (az_span_is_content_equal(this->sasToken, AZ_SPAN_EMPTY))
|
||||||
{
|
{
|
||||||
Logger.Error("Failed generating SAS token");
|
Logger.Error("Failed generating SAS token");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче