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); void string_list_free(char **string_list);
char* string_list_dump(char **string_list); char* string_list_dump(char **string_list);
uint32_t string_list_len(char **string_list); uint32_t string_list_len(char **string_list);
char** string_list_update(char **base_list, char **update_list); //char** string_list_update(char **base_list, char **update_list);
char** string_list_append(char **string_list, const char *string); //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(); uint32_t** uint32_list_init();
char* uint32_list_dump(uint32_t **int_list); 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_dump(const char *caption, dnsproxy *info);
void dnsproxy_add_primary(dnsproxy *info, const char *server) { // add primary dns server 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 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 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 void dnsproxy_free(dnsproxy *info) { // free dnsproxy options

28
src/cleardns.c

@ -10,6 +10,7 @@
#include "adguard.h" #include "adguard.h"
#include "system.h" #include "system.h"
#include "sundry.h" #include "sundry.h"
#include "structure.h"
char* init(int argc, char *argv[]) { // return config file char* init(int argc, char *argv[]) { // return config file
char *config = string_init(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_LEVEL = LOG_DEBUG;
log_info("ClearDNS server start (%s)", VERSION); 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", "lls");
// process *test = process_init("TEST", "ls"); // process *test = process_init("TEST", "ls");
// process_add_arg(test, "-al"); // process_add_arg(test, "-al");
@ -56,11 +78,11 @@ int main(int argc, char *argv[]) { // ClearDNS service
// wait(&status); // wait(&status);
// return 0; // return 0;
create_folder(WORK_DIR); // create_folder(WORK_DIR);
// TODO: load assets first // TODO: load assets first
load_config(config_file); // load_config(config_file);
free(config_file); // free(config_file);
// process_list_init(); // process_list_init();
// process_list_append(dnsproxy_load("Domestic", loader.domestic, "domestic.json")); // 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 char** json_string_list_value(char *key, cJSON *json, char **string_list) { // json string array -> string list
if (cJSON_IsString(json)) { 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)) { } else if (cJSON_IsArray(json)) {
json = json->child; json = json->child;
while (json != NULL) { while (json != NULL) {
if (!cJSON_IsString(json)) { if (!cJSON_IsString(json)) {
log_fatal("`%s` must be string array", key); 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 json = json->next; // next key
} }
} else if (!cJSON_IsNull(json)) { // allow null -> empty string list } else if (!cJSON_IsNull(json)) { // allow null -> empty string list

36
src/common/structure.c

@ -4,6 +4,7 @@
#include <string.h> #include <string.h>
#include "sundry.h" #include "sundry.h"
#include "constant.h" #include "constant.h"
#include "structure.h"
char** string_list_init() { // init string list char** string_list_init() { // init string list
char **string_list = (char **)malloc(sizeof(char *)); 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 // TODO: use char *** with void return
char** string_list_append(char **string_list, const char *string) { // add new string at the end of 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); // uint32_t len = string_list_len(string_list);
string_list = (char **)realloc(string_list, sizeof(char *) * (len + 2)); // extend string list // string_list = (char **)realloc(string_list, sizeof(char *) * (len + 2)); // extend string list
string_list[len] = string_init(string); // string_list[len] = string_init(string);
string_list[len + 1] = NULL; // list end sign // string_list[len + 1] = NULL; // list end sign
return string_list; // 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) { 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 void string_list_free(char **string_list) { // free string list

14
src/common/system.c

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

18
src/loader/loader.c

@ -35,9 +35,9 @@ dnsproxy* load_domestic(cleardns_config *config) {
domestic->cache = config->cache.size; domestic->cache = config->cache.size;
domestic->optimistic = config->cache.optimistic; domestic->optimistic = config->cache.optimistic;
} }
domestic->bootstrap = string_list_update(domestic->bootstrap, config->domestic.bootstrap); string_list_update(&domestic->bootstrap, config->domestic.bootstrap);
domestic->fallback = string_list_update(domestic->fallback, config->domestic.fallback); string_list_update(&domestic->fallback, config->domestic.fallback);
domestic->primary = string_list_update(domestic->primary, config->domestic.primary); string_list_update(&domestic->primary, config->domestic.primary);
return domestic; return domestic;
} }
@ -49,9 +49,9 @@ dnsproxy* load_foreign(cleardns_config *config) {
foreign->cache = config->cache.size; foreign->cache = config->cache.size;
foreign->optimistic = config->cache.optimistic; foreign->optimistic = config->cache.optimistic;
} }
foreign->bootstrap = string_list_update(foreign->bootstrap, config->foreign.bootstrap); string_list_update(&foreign->bootstrap, config->foreign.bootstrap);
foreign->fallback = string_list_update(foreign->fallback, config->foreign.fallback); string_list_update(&foreign->fallback, config->foreign.fallback);
foreign->primary = string_list_update(foreign->primary, config->foreign.primary); string_list_update(&foreign->primary, config->foreign.primary);
return foreign; return foreign;
} }
@ -119,8 +119,8 @@ void load_config(const char *config_file) {
config_parser(config, config_file); // configure parser config_parser(config, config_file); // configure parser
// insert code (remove after test) // insert code (remove after test)
config->assets.update_file = string_list_append(config->assets.update_file, "geoip.dat"); 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_url, "https://test.net/geoip.dat");
config_dump(config); config_dump(config);
log_info("Loading configure options"); log_info("Loading configure options");
@ -136,6 +136,6 @@ void load_config(const char *config_file) {
loader.filter = load_filter(config); loader.filter = load_filter(config);
log_debug("Filter options parser success"); log_debug("Filter options parser success");
loader.script = string_list_init(); loader.script = string_list_init();
loader.script = string_list_update(loader.script, config->script); string_list_update(&loader.script, config->script);
config_free(config); 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* process_init(const char *caption, const char *bin) { // init process struct
process *proc = (process *)malloc(sizeof(process)); process *proc = (process *)malloc(sizeof(process));
proc->name = string_init(caption); // process caption 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->env = string_list_init(); // empty environment variable
proc->cwd = WORK_DIR; // current working directory proc->cwd = WORK_DIR; // current working directory
proc->is_group = FALSE; // create new process group 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 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 void process_list_init() { // init process list

Loading…
Cancel
Save