120 lines
2.3 KiB
C
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;
|
||
|
}
|