summaryrefslogtreecommitdiff
path: root/src/config
diff options
context:
space:
mode:
authorSoikk2025-06-06 21:10:34 +0200
committerSoikk2025-06-06 21:10:34 +0200
commit422898bc6fb8c48812cb50389fa4f13ba9358881 (patch)
treeb006ef3a9bbb17587c845634a207b403e1e8ce0a /src/config
parent3687db3e3817a14e3d8e2be28a5ebec841707cdb (diff)
downloadsoikk-server-422898bc6fb8c48812cb50389fa4f13ba9358881.tar.xz
soikk-server-422898bc6fb8c48812cb50389fa4f13ba9358881.tar.zst
Added config
Diffstat (limited to 'src/config')
-rw-r--r--src/config/config.c54
-rw-r--r--src/config/config.h19
2 files changed, 73 insertions, 0 deletions
diff --git a/src/config/config.c b/src/config/config.c
new file mode 100644
index 0000000..5b4c6cc
--- /dev/null
+++ b/src/config/config.c
@@ -0,0 +1,54 @@
+#include "config.h"
+
+
+config read_config(str cfg){
+ config conf = {0};
+ int off = 0;
+ while(off < cfg.len){
+ while(charisspace(cfg.ptr[off])) off++;
+ if(cfg.ptr[off] == '#'){
+ while(!charislinebreak(cfg.ptr[off])) off++;
+ continue;
+ }
+ str key = sread_delim_f(cfg.ptr + off, charisspace, true);
+ off += key.len + 1;
+ while(charisspace(cfg.ptr[off])) off++;
+
+ if(streq(key, sstr("port"))){
+ str val = sread_delim_f(cfg.ptr + off, charisspace, true);
+ off += val.len;
+ conf.port = (int)strtou(val);
+ }else if(streq(key, sstr("ipv4"))){
+ conf.ipv4 = 1;
+ }else if(streq(key, sstr("ipv6"))){
+ conf.ipv6 = 1;
+ }else if(streq(key, sstr("root"))){
+ str val = sread_delim_f(cfg.ptr + off, charisspace, true);
+ str trailslash = val.ptr[val.len-1] == '/' ? sstr("") : sstr("/");
+ conf.root = dup_strs(val, trailslash);
+ off += conf.root.len;
+ }else{
+ log_warn("Unexpected entry in configuration: '%.*s'", key.len, key.ptr);
+ }
+ while(!charislinebreak(cfg.ptr[off])) off++;
+ off++;
+ };
+
+ printf(
+ "CONFIGURATION:\n"
+ "\t- port: %d\n"
+ "\t- secure: %s\n"
+ "\t- ipv4: %s\n"
+ "\t- ipv6: %s\n"
+ "\t- workers: %d\n"
+ "\t- root: %s\n",
+ conf.port,
+ conf.secure ? "yes" : "no",
+ conf.ipv4 ? "yes" : "no",
+ conf.ipv6 ? "yes" : "no",
+ conf.workers,
+ conf.root.ptr
+ );
+
+ return conf;
+}
diff --git a/src/config/config.h b/src/config/config.h
new file mode 100644
index 0000000..4f04459
--- /dev/null
+++ b/src/config/config.h
@@ -0,0 +1,19 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "str/str.h"
+#include "log/log.h"
+
+typedef struct config {
+ int port;
+ int secure : 1;
+ int ipv4 : 1;
+ int ipv6 : 1;
+ int workers;
+ str root;
+
+} config;
+
+config read_config(str cfg);
+
+#endif