#include "../module/module.h" #include "state.h" char const *Usage = "usage: %1$s start [name] [configuration]\n" " %1$s stop [name] [configuration] [data]\n" " %1$s get-endpoint [name] [configuration] [data] [interface]\n" "unsupported commands: cmd mod\n"; static configuration Configuration; static data Data; static bool ConfigurationLoaded; static bool DataLoaded; // HELPERS static void Free_all(void) { if(ConfigurationLoaded == true) Free_configuration(&Configuration); if(DataLoaded == true) Free_data(&Data); } static void Load_configuration(ucl_object_t *root) { char *Error = Parse_configuration(&Configuration, root, ""); if(Error != NULL) { fprintf(stderr, "%s: configuration error: %s\n", Arg0, Error); free(Error); Free_all(); exit(-1); } ConfigurationLoaded = true; } static void Load_data(ucl_object_t *root) { char *Error = Parse_data(&Data, root, ""); if(Error != NULL) { fprintf(stderr, "%s: data error: %s\n", Arg0, Error); free(Error); Free_all(); exit(-1); } DataLoaded = true; // TODO: check that data matches configuration } // COMMANDS int start(char const *Name, ucl_object_t *configuration) { UNUSED(Name); Load_configuration(configuration); // Implement if((true)) goto error; jprint_state S; bzero(&S, sizeof(S)); S.F = stdout; Save_data(&S, &Data); Free_all(); return 0; error: Free_all(); return -1; } int stop(char const *Name, ucl_object_t *configuration, ucl_object_t *data) { UNUSED(Name); Load_configuration(configuration); Load_data(data); // Implement if((true)) goto error; Free_all(); return 0; error: Free_all(); return -1; } int get_endpoint(char const *Name, ucl_object_t *configuration, ucl_object_t *data, char const *Interface) { UNUSED(Name, Interface); Load_configuration(configuration); Load_data(data); // Implement Free_all(); return -1; } int cmd(char const *Name, ucl_object_t *configuration, ucl_object_t *data, size_t ArgCount, char **Arg) { UNUSED(Name, ArgCount, Arg); Load_configuration(configuration); Load_data(data); // Implement usage(); } int mod(char const *Name, ucl_object_t *configuration, ucl_object_t *data, size_t ArgCount, char **Arg) { UNUSED(Name, ArgCount, Arg); Load_configuration(configuration); Load_data(data); // Implement usage(); }