Microsoft Azure IoT Gateway SDK  1.0.8
The Microsoft Azure IoT Gateway SDK contains the infrastructure and modules to create IoT gateway solutions.
module_loader.h
Go to the documentation of this file.
1 // Copyright (c) Microsoft. All rights reserved.
2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3 
15 #ifndef MODULE_LOADER_H
16 #define MODULE_LOADER_H
17 
18 #include "azure_c_shared_utility/macro_utils.h"
19 #include "azure_c_shared_utility/umock_c_prod.h"
20 
21 #include "module.h"
22 #include "parson.h"
23 
24 #ifdef __cplusplus
25 extern "C"
26 {
27 #endif
28 
30 typedef void* MODULE_LIBRARY_HANDLE;
31 
32 struct MODULE_LOADER_TAG;
33 
40 {
43  STRING_HANDLE binding_path;
45 
46 typedef MODULE_LIBRARY_HANDLE(*pfModuleLoader_Load)(const struct MODULE_LOADER_TAG* loader, const void* entrypoint);
47 typedef void(*pfModuleLoader_Unload)(const struct MODULE_LOADER_TAG* loader, MODULE_LIBRARY_HANDLE handle);
48 typedef const MODULE_API*(*pfModuleLoader_GetApi)(const struct MODULE_LOADER_TAG* loader, MODULE_LIBRARY_HANDLE handle);
49 
50 typedef void*(*pfModuleLoader_ParseEntrypointFromJson)(const struct MODULE_LOADER_TAG* loader, const JSON_Value* json);
51 typedef void(*pfModuleLoader_FreeEntrypoint)(const struct MODULE_LOADER_TAG* loader, void* entrypoint);
52 
53 typedef MODULE_LOADER_BASE_CONFIGURATION*(*pfModuleLoader_ParseConfigurationFromJson)(const struct MODULE_LOADER_TAG* loader, const JSON_Value* json);
54 typedef void(*pfModuleLoader_FreeConfiguration)(const struct MODULE_LOADER_TAG* loader, MODULE_LOADER_BASE_CONFIGURATION* configuration);
55 
56 typedef void*(*pfModuleLoader_BuildModuleConfiguration)(const struct MODULE_LOADER_TAG* loader, const void* entrypoint, const void* module_configuration);
57 typedef void(*pfModuleLoader_FreeModuleConfiguration)(const struct MODULE_LOADER_TAG* loader, const void* module_configuration);
58 
60 typedef struct MODULE_LOADER_API_TAG
61 {
64  pfModuleLoader_Load Load;
65 
67  pfModuleLoader_Unload Unload;
68 
70  pfModuleLoader_GetApi GetApi;
71 
75  pfModuleLoader_ParseEntrypointFromJson ParseEntrypointFromJson;
78  pfModuleLoader_FreeEntrypoint FreeEntrypoint;
79 
83  pfModuleLoader_ParseConfigurationFromJson ParseConfigurationFromJson;
86  pfModuleLoader_FreeConfiguration FreeConfiguration;
87 
91  pfModuleLoader_BuildModuleConfiguration BuildModuleConfiguration;
94  pfModuleLoader_FreeModuleConfiguration FreeModuleConfiguration;
96 
101 #define MODULE_LOADER_TYPE_VALUES \
102  UNKNOWN, \
103  NATIVE, \
104  JAVA, \
105  DOTNET, \
106  DOTNETCORE, \
107  NODEJS, \
108  OUTPROCESS
109 
113 DEFINE_ENUM(MODULE_LOADER_TYPE, MODULE_LOADER_TYPE_VALUES);
114 
115 
119 typedef struct MODULE_LOADER_TAG
120 {
123 
126  const char* name;
127 
131 
134 } MODULE_LOADER;
135 
136 #define MODULE_LOADER_RESULT_VALUES \
137  MODULE_LOADER_SUCCESS, \
138  MODULE_LOADER_ERROR
139 
143 DEFINE_ENUM(MODULE_LOADER_RESULT, MODULE_LOADER_RESULT_VALUES);
144 
149 MOCKABLE_FUNCTION(, MODULE_LOADER_RESULT, ModuleLoader_ParseBaseConfigurationFromJson,
150  MODULE_LOADER_BASE_CONFIGURATION*, configuration,
151  const JSON_Value*, json
152 );
153 
159 MOCKABLE_FUNCTION(, void, ModuleLoader_FreeBaseConfiguration, MODULE_LOADER_BASE_CONFIGURATION*, configuration);
160 
165 MOCKABLE_FUNCTION(, MODULE_LOADER_RESULT, ModuleLoader_Initialize);
166 
170 MOCKABLE_FUNCTION(, void, ModuleLoader_Destroy);
171 
175 MOCKABLE_FUNCTION(, MODULE_LOADER_RESULT, ModuleLoader_Add, const MODULE_LOADER*, loader);
176 
181 MOCKABLE_FUNCTION(, MODULE_LOADER_RESULT, ModuleLoader_UpdateConfiguration,
182  MODULE_LOADER*, loader,
183  MODULE_LOADER_BASE_CONFIGURATION*, configuration
184 );
185 
189 MOCKABLE_FUNCTION(, MODULE_LOADER*, ModuleLoader_FindByName, const char*, name);
190 
194 MOCKABLE_FUNCTION(, MODULE_LOADER*, ModuleLoader_GetDefaultLoaderForType, MODULE_LOADER_TYPE, type);
195 
200 MOCKABLE_FUNCTION(, MODULE_LOADER_TYPE, ModuleLoader_ParseType, const char*, type);
201 
206 MOCKABLE_FUNCTION(, bool, ModuleLoader_IsDefaultLoader, const char*, name);
207 
239 MOCKABLE_FUNCTION(, MODULE_LOADER_RESULT, ModuleLoader_InitializeFromJson, const JSON_Value*, loaders);
240 
241 #ifdef __cplusplus
242 }
243 #endif
244 
245 #endif // MODULE_LOADER_H
MOCKABLE_FUNCTION(, MODULE_LOADER_RESULT, ModuleLoader_ParseBaseConfigurationFromJson, MODULE_LOADER_BASE_CONFIGURATION *, configuration, const JSON_Value *, json)
Utility function for parsing a JSON object that has a property called "binding.path" into a MODULE_LO...
struct MODULE_LOADER_TAG MODULE_LOADER
MODULE_LOADER_TYPE type
The module loader type from the MODULE_LOADER_TYPE enumeration.
Definition: module_loader.h:122
Function table for loading modules into a gateway.
Definition: module_loader.h:60
void * MODULE_LIBRARY_HANDLE
handle for a module library
Definition: module_loader.h:30
Definition: module_loader.h:39
const char * name
The module loader's name used to reference this loader when using JSON to configure a gateway...
Definition: module_loader.h:126
struct MODULE_LOADER_API_TAG MODULE_LOADER_API
Function table for loading modules into a gateway.
enum MODULE_LOADER_RESULT_TAG MODULE_LOADER_RESULT
Enumeration describing the result of module loader APIs.
MODULE_LOADER_BASE_CONFIGURATION * configuration
The module loader's' configuration. For example the Java language binding loader might store JVM runt...
Definition: module_loader.h:130
struct MODULE_LOADER_BASE_CONFIGURATION_TAG MODULE_LOADER_BASE_CONFIGURATION
Definition: module_loader.h:119
Structure returned by Module_GetApi containing the API version. By convention, the module returns a c...
Definition: module.h:135
STRING_HANDLE binding_path
The path to the native binding module.
Definition: module_loader.h:43
enum MODULE_LOADER_TYPE_TAG MODULE_LOADER_TYPE
Enumeration listing all supported module loaders.
Interface for modules which communicate with other modules via a message broker.
MODULE_LOADER_API * api
The module loader's' API implementation.
Definition: module_loader.h:133