Browse Source

update: interface of string list

dev
Dnomd343 2 years ago
parent
commit
f0794e5614
  1. 6
      include/common/structure.h
  2. 6
      src/applet/dnsproxy.c
  3. 28
      src/cleardns.c
  4. 4
      src/common/json.c
  5. 36
      src/common/structure.c
  6. 14
      src/common/system.c
  7. 18
      src/loader/loader.c
  8. 5
      src/utils/process.c

6
include/common/structure.h

@ -7,8 +7,10 @@ char** string_list_init();
void string_list_free(char **string_list);
char* string_list_dump(char **string_list);
uint32_t string_list_len(char **string_list);
char** string_list_update(char **base_list, char **update_list);
char** string_list_append(char **string_list, const char *string);
//char** string_list_update(char **base_list, char **update_list);
//char** string_list_append(char **string_list, const char *string);
void string_list_update(char ***base_list, char **update_list);
void string_list_append(char ***string_list, const char *string);
uint32_t** uint32_list_init();
char* uint32_list_dump(uint32_t **int_list);

6
src/applet/dnsproxy.c

@ -11,15 +11,15 @@ char* dnsproxy_config(dnsproxy *info);
void dnsproxy_dump(const char *caption, dnsproxy *info);
void dnsproxy_add_primary(dnsproxy *info, const char *server) { // add primary dns server
info->primary = string_list_append(info->primary, server);
string_list_append(&info->primary, server);
}
void dnsproxy_add_fallback(dnsproxy *info, const char *server) { // add fallback dns server
info->fallback = string_list_append(info->fallback, server);
string_list_append(&info->fallback, server);
}
void dnsproxy_add_bootstrap(dnsproxy *info, const char *server) { // add bootstrap dns server
info->bootstrap = string_list_append(info->bootstrap, server);
string_list_append(&info->bootstrap, server);
}
void dnsproxy_free(dnsproxy *info) { // free dnsproxy options

28
src/cleardns.c

@ -10,6 +10,7 @@
#include "adguard.h"
#include "system.h"
#include "sundry.h"
#include "structure.h"
char* init(int argc, char *argv[]) { // return config file
char *config = string_init(CONFIG_FILE);
@ -45,6 +46,27 @@ int main(int argc, char *argv[]) { // ClearDNS service
LOG_LEVEL = LOG_DEBUG;
log_info("ClearDNS server start (%s)", VERSION);
char **test = string_list_init();
log_info("len -> %u", string_list_len(test));
string_list_append(&test, "test1");
string_list_append(&test, "test2");
string_list_append(&test, "test3");
log_info("len -> %u", string_list_len(test));
char *temp = string_list_dump(test);
log_info("content -> %s", temp);
free(temp);
char **add = string_list_init();
string_list_append(&add, "test4");
string_list_append(&add, "test5");
string_list_update(&test, add);
log_info("len -> %d", string_list_len(test));
temp = string_list_dump(test);
log_info("content -> %s", temp);
free(temp);
// process *test = process_init("TEST", "lls");
// process *test = process_init("TEST", "ls");
// process_add_arg(test, "-al");
@ -56,11 +78,11 @@ int main(int argc, char *argv[]) { // ClearDNS service
// wait(&status);
// return 0;
create_folder(WORK_DIR);
// create_folder(WORK_DIR);
// TODO: load assets first
load_config(config_file);
free(config_file);
// load_config(config_file);
// free(config_file);
// process_list_init();
// process_list_append(dnsproxy_load("Domestic", loader.domestic, "domestic.json"));

4
src/common/json.c

@ -92,14 +92,14 @@ char* json_string_value(char* key, cJSON *json) { // json string value -> string
char** json_string_list_value(char *key, cJSON *json, char **string_list) { // json string array -> string list
if (cJSON_IsString(json)) {
string_list = string_list_append(string_list, json->valuestring);
string_list_append(&string_list, json->valuestring);
} else if (cJSON_IsArray(json)) {
json = json->child;
while (json != NULL) {
if (!cJSON_IsString(json)) {
log_fatal("`%s` must be string array", key);
}
string_list = string_list_append(string_list, json->valuestring);
string_list_append(&string_list, json->valuestring);
json = json->next; // next key
}
} else if (!cJSON_IsNull(json)) { // allow null -> empty string list

36
src/common/structure.c

@ -4,6 +4,7 @@
#include <string.h>
#include "sundry.h"
#include "constant.h"
#include "structure.h"
char** string_list_init() { // init string list
char **string_list = (char **)malloc(sizeof(char *));
@ -18,19 +19,36 @@ uint32_t string_list_len(char **string_list) { // get len of string list
}
// TODO: use char *** with void return
char** string_list_append(char **string_list, const char *string) { // add new string at the end of list
uint32_t len = string_list_len(string_list);
string_list = (char **)realloc(string_list, sizeof(char *) * (len + 2)); // extend string list
string_list[len] = string_init(string);
string_list[len + 1] = NULL; // list end sign
return string_list;
//char** string_list_append(char **string_list, const char *string) { // add new string at the end of list
// uint32_t len = string_list_len(string_list);
// string_list = (char **)realloc(string_list, sizeof(char *) * (len + 2)); // extend string list
// string_list[len] = string_init(string);
// string_list[len + 1] = NULL; // list end sign
// return string_list;
//}
void string_list_append(char ***string_list, const char *string) {
uint32_t len = string_list_len(*string_list);
*string_list = (char **)realloc(*string_list, sizeof(char *) * (len + 2)); // extend string list
(*string_list)[len] = string_init(string);
(*string_list)[len + 1] = NULL; // list end sign
// return string_list;
}
char** string_list_update(char **base_list, char **update_list) { // combine two string list
//char** string_list_update(char **base_list, char **update_list) { // combine two string list
// for (char **string = update_list; *string != NULL; ++string) {
//// base_list = string_list_append(base_list, *string);
// string_list_append(&base_list, *string);
// }
// return base_list;
//}
void string_list_update(char ***base_list, char **update_list) { // combine two string list
for (char **string = update_list; *string != NULL; ++string) {
base_list = string_list_append(base_list, *string);
// base_list = string_list_append(base_list, *string);
string_list_append(base_list, *string);
}
return base_list;
// return base_list;
}
void string_list_free(char **string_list) { // free string list

14
src/common/system.c

@ -7,16 +7,17 @@
#include "sundry.h"
#include "constant.h"
int run_command(const char *command) { // running command with system shell
int run_command(const char *command) { // running command under system shell
log_debug("Run command -> `%s`", command);
int ret = system(command) / 256;
if (ret != 0) {
log_warn("Command `%s` return non-zero code -> %d", command, ret);
int ret_code = system(command) / 256;
if (ret_code != 0) {
log_warn("Command `%s` return non-zero code %d", command, ret_code);
}
return ret;
return ret_code;
}
void remove_file(const char *file) {
void remove_file(const char *file) { // delete file
// TODO: use system interface (not `rm` command)
char *remove_cmd = string_join("rm -f ", file);
run_command(remove_cmd);
free(remove_cmd);
@ -32,6 +33,7 @@ void create_folder(const char *folder) { // create folder
return;
}
log_debug("Create folder -> %s", folder);
// TODO: use system command (not `mkdir` command)
char *command = string_join("mkdir -p ", folder);
system(command);
free(command);

18
src/loader/loader.c

@ -35,9 +35,9 @@ dnsproxy* load_domestic(cleardns_config *config) {
domestic->cache = config->cache.size;
domestic->optimistic = config->cache.optimistic;
}
domestic->bootstrap = string_list_update(domestic->bootstrap, config->domestic.bootstrap);
domestic->fallback = string_list_update(domestic->fallback, config->domestic.fallback);
domestic->primary = string_list_update(domestic->primary, config->domestic.primary);
string_list_update(&domestic->bootstrap, config->domestic.bootstrap);
string_list_update(&domestic->fallback, config->domestic.fallback);
string_list_update(&domestic->primary, config->domestic.primary);
return domestic;
}
@ -49,9 +49,9 @@ dnsproxy* load_foreign(cleardns_config *config) {
foreign->cache = config->cache.size;
foreign->optimistic = config->cache.optimistic;
}
foreign->bootstrap = string_list_update(foreign->bootstrap, config->foreign.bootstrap);
foreign->fallback = string_list_update(foreign->fallback, config->foreign.fallback);
foreign->primary = string_list_update(foreign->primary, config->foreign.primary);
string_list_update(&foreign->bootstrap, config->foreign.bootstrap);
string_list_update(&foreign->fallback, config->foreign.fallback);
string_list_update(&foreign->primary, config->foreign.primary);
return foreign;
}
@ -119,8 +119,8 @@ void load_config(const char *config_file) {
config_parser(config, config_file); // configure parser
// insert code (remove after test)
config->assets.update_file = string_list_append(config->assets.update_file, "geoip.dat");
config->assets.update_url = string_list_append(config->assets.update_url, "https://test.net/geoip.dat");
string_list_append(&config->assets.update_file, "geoip.dat");
string_list_append(&config->assets.update_url, "https://test.net/geoip.dat");
config_dump(config);
log_info("Loading configure options");
@ -136,6 +136,6 @@ void load_config(const char *config_file) {
loader.filter = load_filter(config);
log_debug("Filter options parser success");
loader.script = string_list_init();
loader.script = string_list_update(loader.script, config->script);
string_list_update(&loader.script, config->script);
config_free(config);
}

5
src/utils/process.c

@ -15,7 +15,8 @@ process **process_list;
process* process_init(const char *caption, const char *bin) { // init process struct
process *proc = (process *)malloc(sizeof(process));
proc->name = string_init(caption); // process caption
proc->cmd = string_list_append(string_list_init(), bin); // argv[0] normally be process file name
proc->cmd = string_list_init();
string_list_append(&proc->cmd, bin); // argv[0] normally be process file name
proc->env = string_list_init(); // empty environment variable
proc->cwd = WORK_DIR; // current working directory
proc->is_group = FALSE; // create new process group
@ -23,7 +24,7 @@ process* process_init(const char *caption, const char *bin) { // init process st
}
void process_add_arg(process *proc, const char *arg) { // add argument for process
proc->cmd = string_list_append(proc->cmd, arg);
string_list_append(&proc->cmd, arg);
}
void process_list_init() { // init process list

Loading…
Cancel
Save