An example of updating a list of IP addresses with Azure IoT Edge Module Twin
#include <stdio.h> | |
#include <stdlib.h> | |
#include "iothub_module_client_ll.h" | |
#include "iothub_client_options.h" | |
#include "iothub_message.h" | |
#include "azure_c_shared_utility/threadapi.h" | |
#include "azure_c_shared_utility/crt_abstractions.h" | |
#include "azure_c_shared_utility/platform.h" | |
#include "azure_c_shared_utility/shared_util_options.h" | |
#include "iothubtransportmqtt.h" | |
#include "iothub.h" | |
#include "time.h" | |
#include "parson.h" | |
typedef struct IP_ADDRESS_NODE | |
{ | |
const char * address; | |
struct IP_ADDRESS_NODE * next; | |
} ip_address_node; | |
ip_address_node * add_address(const char * address,ip_address_node * previous) | |
{ | |
ip_address_node * new_node = (ip_address_node *)malloc(sizeof(ip_address_node)); | |
new_node->address = address; | |
new_node->next = NULL; | |
if (previous == NULL) | |
{ | |
return new_node; | |
} | |
previous->next = new_node; | |
return previous; | |
} | |
void delete_address(ip_address_node * current) | |
{ | |
if (current == NULL) | |
{ | |
return; | |
} | |
delete_address(current->next); | |
//free(current->address); | |
free(current); | |
} | |
ip_address_node * root_node = NULL; | |
ip_address_node * add_address_to_root(const char * address) | |
{ | |
if (root_node = NULL) | |
{ | |
root_node = add_address(address,root_node); | |
} | |
ip_address_node * current = root_node; | |
while(current->next != NULL) | |
{ | |
current = current->next; | |
} | |
add_address(address,current); | |
} | |
static void moduleTwinCallback(DEVICE_TWIN_UPDATE_STATE update_state, const unsigned char* payLoad, size_t size, void* userContextCallback) | |
{ | |
printf("\r\nTwin callback called with (state=%s, size=%zu):\r\n%s\r\n", | |
ENUM_TO_STRING(DEVICE_TWIN_UPDATE_STATE, update_state), size, payLoad); | |
JSON_Value *root_value = json_parse_string(payLoad); | |
JSON_Object *root_object = json_value_get_object(root_value); | |
JSON_Array * ipaddresses = json_object_dotget_array(root_object, "desired.CameraAddresses"); | |
if (ipaddresses != NULL) { | |
delete_address(root_node); | |
for (int i = 0; i < json_array_get_count(ipaddresses); i++) { | |
add_address_to_root(json_array_get_string(ipaddresses,i)); | |
} | |
return; | |
} | |
ipaddresses = json_object_get_array(root_object, "CameraAddresses"); | |
if (ipaddresses != NULL) { | |
delete_address(root_node); | |
for (int i = 0; i < json_array_get_count(ipaddresses); i++) { | |
add_address_to_root(json_array_get_string(ipaddresses,i)); | |
} | |
return; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment