config structure

This commit is contained in:
Maxim Devaev
2022-07-16 11:27:27 +03:00
parent 2f86f818cc
commit 28f13f7514
4 changed files with 51 additions and 43 deletions

View File

@@ -23,35 +23,36 @@
#include "config.h"
static char *_get_value(janus_config *config, const char *section, const char *option);
static char *_get_value(janus_config *jcfg, const char *section, const char *option);
int read_config(const char *config_dir_path, char **video_sink_name, char **audio_dev_name, char **tc358743_dev_path) {
int retval = 0;
plugin_config_s *plugin_config_init(const char *config_dir_path) {
plugin_config_s *config;
A_CALLOC(config, 1);
char *config_file_path;
janus_config *config = NULL;
janus_config *jcfg = NULL;
A_ASPRINTF(config_file_path, "%s/%s.jcfg", config_dir_path, PLUGIN_PACKAGE);
JLOG_INFO("config", "Reading config file '%s' ...", config_file_path);
config = janus_config_parse(config_file_path);
if (config == NULL) {
jcfg = janus_config_parse(config_file_path);
if (jcfg == NULL) {
JLOG_ERROR("config", "Can't read config");
goto error;
}
janus_config_print(config);
janus_config_print(jcfg);
if (
(*video_sink_name = _get_value(config, "memsink", "object")) == NULL
&& (*video_sink_name = _get_value(config, "video", "sink")) == NULL
(config->video_sink_name = _get_value(jcfg, "memsink", "object")) == NULL
&& (config->video_sink_name = _get_value(jcfg, "video", "sink")) == NULL
) {
JLOG_ERROR("config", "Missing config value: video.sink (ex. memsink.object)");
goto error;
}
if ((*audio_dev_name = _get_value(config, "audio", "device")) != NULL) {
if ((config->audio_dev_name = _get_value(jcfg, "audio", "device")) != NULL) {
JLOG_INFO("config", "Enabled the experimental AUDIO feature");
if ((*tc358743_dev_path = _get_value(config, "audio", "tc358743")) == NULL) {
if ((config->tc358743_dev_path = _get_value(jcfg, "audio", "tc358743")) == NULL) {
JLOG_INFO("config", "Missing config value: audio.tc358743");
goto error;
}
@@ -59,18 +60,26 @@ int read_config(const char *config_dir_path, char **video_sink_name, char **audi
goto ok;
error:
retval = -1;
plugin_config_destroy(config);
config = NULL;
ok:
if (config) {
janus_config_destroy(config);
if (jcfg) {
janus_config_destroy(jcfg);
}
free(config_file_path);
return retval;
return config;
}
static char *_get_value(janus_config *config, const char *section, const char *option) {
janus_config_category *section_obj = janus_config_get_create(config, NULL, janus_config_type_category, section);
janus_config_item *option_obj = janus_config_get(config, section_obj, janus_config_type_item, option);
void plugin_config_destroy(plugin_config_s *config) {
DELETE(config->video_sink_name, free);
DELETE(config->audio_dev_name, free);
DELETE(config->tc358743_dev_path, free);
free(config);
}
static char *_get_value(janus_config *jcfg, const char *section, const char *option) {
janus_config_category *section_obj = janus_config_get_create(jcfg, NULL, janus_config_type_category, section);
janus_config_item *option_obj = janus_config_get(jcfg, section_obj, janus_config_type_item, option);
if (option_obj == NULL || option_obj->value == NULL || option_obj->value[0] == '\0') {
return NULL;
}