2020-05-15 12:27:34 +02:00

120 lines
2.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <errno.h>
#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;
}