A modelling and serializer library for Microsoft Azure IoTHub client applications
Dependents: sht15_remote_monitoring f767zi_mqtt remote_monitoring simplesample_amqp ... more
This library implements a serializer library to be used in projects involving Microsoft Azure IoT Hub connectivity. The code is replicated from https://github.com/Azure/azure-iot-sdks
Diff: schemalib.c
- Revision:
- 0:1f9b2707ec7d
- Child:
- 5:c08e3ffc68e4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schemalib.c Tue Sep 15 21:57:26 2015 -0700 @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +#include <stdlib.h> +#ifdef _CRTDBG_MAP_ALLOC +#include <crtdbg.h> +#endif +#include "gballoc.h" + +#include "schemalib.h" +#include "codefirst.h" +#include "schema.h" +#include "datamarshaller.h" +#include "datapublisher.h" +#include <stddef.h> +#include "iot_logging.h" +#include "iotdevice.h" + +#define DEFAULT_CONTAINER_NAME "Container" + +DEFINE_ENUM_STRINGS(SERIALIZER_RESULT, SERIALIZER_RESULT_VALUES); + +typedef enum AGENT_STATE_TAG +{ + AGENT_NOT_INITIALIZED, + AGENT_INITIALIZED +} AGENT_STATE; + +static AGENT_STATE g_AgentState = AGENT_NOT_INITIALIZED; + +SERIALIZER_RESULT serializer_init(const char* overrideSchemaNamespace) +{ + SERIALIZER_RESULT result; + + /* Codes_SRS_SCHEMALIB_99_074:[serializer_init when already initialized shall return SERIALIZER_ALREADY_INIT.] */ + if (g_AgentState != AGENT_NOT_INITIALIZED) + { + result = SERIALIZER_ALREADY_INIT; + LogError("(result = %s)\r\n", ENUM_TO_STRING(SERIALIZER_RESULT, result)); + } + else + { + /* Codes_SRS_SCHEMALIB_99_006:[ Initialize CodeFirst by a call to CodeFirst_Init.] */ + /* Codes_SRS_SCHEMALIB_99_076:[serializer_init shall pass the value of overrideSchemaNamespace argument to CodeFirst_Init.] */ + if (CodeFirst_Init(overrideSchemaNamespace) != CODEFIRST_OK) + { + /* Codes_SRS_SCHEMALIB_99_007:[ On error SERIALIZER_CODEFIRST_INIT_FAILED shall be returned.] */ + result = SERIALIZER_CODEFIRST_INIT_FAILED; + LogError("(result = %s)\r\n", ENUM_TO_STRING(SERIALIZER_RESULT, result)); + } + else + { + /* Codes_SRS_SCHEMALIB_99_075:[When an serializer_init call fails for any reason the previous initialization state shall be preserved. The initialized state shall only be changed on a succesfull Init.] */ + g_AgentState = AGENT_INITIALIZED; + + /* Codes_SRS_SCHEMALIB_99_073:[On success serializer_init shall return SERIALIZER_OK.] */ + result = SERIALIZER_OK; + } + } + + return result; +} + +void serializer_deinit(void) +{ + /* Codes_SRS_SCHEMALIB_99_025:[ serializer_deinit shall de-initialize all modules initialized by serializer_init.] */ + if (g_AgentState == AGENT_INITIALIZED) + { + CodeFirst_Deinit(); + } + + /* Codes_SRS_SCHEMALIB_99_026:[ A subsequent call to serializer_start shall succeed.] */ + g_AgentState = AGENT_NOT_INITIALIZED; +} + +SERIALIZER_RESULT serializer_setconfig(SERIALIZER_CONFIG which, void* value) +{ + SERIALIZER_RESULT result; + + /* Codes_SRS_SCHEMALIB_99_137:[ If the value argument is NULL, serializer_setconfig shall return SERIALIZER_INVALID_ARG.] */ + if (value == NULL) + { + result = SERIALIZER_INVALID_ARG; + } + /* Codes_SRS_SCHEMALIB_99_142:[ When the which argument is SerializeDelayedBufferMaxSize, serializer_setconfig shall invoke DataPublisher_SetMaxBufferSize with the dereferenced value argument, and shall return SERIALIZER_OK.] */ + else if (which == SerializeDelayedBufferMaxSize) + { + DataPublisher_SetMaxBufferSize(*(size_t*)value); + result = SERIALIZER_OK; + } + /* Codes_SRS_SCHEMALIB_99_138:[ If the which argument is not one of the declared members of the SERIALIZER_CONFIG enum, serializer_setconfig shall return SERIALIZER_INVALID_ARG.] */ + else + { + result = SERIALIZER_INVALID_ARG; + } + + return result; +}