#include #include #include #include #include #include "config.h" struct config_symbol { char* name; char* value; }; static struct config_symbol config[] = { {"RTMP_HOST", NULL}, {"RTMP_PORT", NULL}, {"RTMP_APP", NULL}, {"CAM_COMMANDER_HOST", NULL}, {"CAM_COMMANDER_PORT", NULL}, {"SERIAL_NUMBER", NULL}, {"PRODUCT_KEY", NULL}, {NULL, NULL} }; int config_set(char* name, char* value) { unsigned int i; for(i = 0; config[i].name != NULL; i++) { if(!strcmp(config[i].name, name)) { size_t value_size = strlen(value); if(config[i].value == NULL) { if((config[i].value = malloc(value_size + 1)) == NULL) { fprintf(stderr, "error malloc()\n"); exit(-1); } } else { if((config[i].value = realloc(config[i].value, value_size + 1)) == NULL) { fprintf(stderr, "error realloc()\n"); exit(-1); } } strcpy(config[i].value, value); return 0; } } return -1; } void config_free() { unsigned int i; for(i = 0; config[i].name != NULL; i++) { if(config[i].value != NULL) { free(config[i].value); config[i].value = NULL; } } } char* config_get(char* name) { unsigned int i; for(i = 0; config[i].name != NULL; i++) { if(!strcmp(config[i].name, name)) { return config[i].value; } } return NULL; } int config_check_values() { unsigned int i; int ret = 0; for(i = 0; config[i].name != NULL; i++) { if(config[i].value == NULL) { fprintf(stderr, "[CameraManager] (error) : The configuration variable <%s> is not set\n", config[i].name); ret = -1; } } return ret; } void config_load_default_values() { config_free(); config_set("RTMP_PORT", "1935"); config_set("CAM_COMMANDER_PORT", "41551"); } int config_load_from_file(char* path) { char tmp_name[256]; char tmp_value[256]; int c; int scan; FILE* file; printf("[CameraManager] : Load configuration from file <%s>...", path); file = fopen(path, "r"); if(file == NULL) { printf("Failed\n"); perror("config_load_from_file"); return -1; } do { scan = fscanf(file, "%[A-Za-z0-9_]=%s", tmp_name, tmp_value); if(scan == 2) { config_set(tmp_name, tmp_value); } else if(scan == EOF) { break; } do { c = fgetc(file); } while(c != EOF && c != '\n'); } while(!feof(file)); fclose(file); printf("Success\n"); return 0; }