summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-22 22:42:57 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-22 22:42:57 +0200
commitfa25599e90a7535a02641ef03ccfc138cf5c8fd3 (patch)
tree684306c00290324a6b6141bf699292487a267039 /main.c
parentc66ab06124fd757056817b38a9c16f8c8444bf0a (diff)
Add some more config options
Diffstat (limited to 'main.c')
-rw-r--r--main.c87
1 files changed, 82 insertions, 5 deletions
diff --git a/main.c b/main.c
index fd6b2aa..2cdf5d6 100644
--- a/main.c
+++ b/main.c
@@ -32,6 +32,14 @@
#define DEFAULT_HOMEDIR_PATH "/home/david/intest"
#define DEFAULT_MAIN_CONFIG_FILE_PATH "./mcproxy.conf"
#define DEFAULT_ANNOUNCE_INTERVAL 3
+#define DEFAULT_PROXY_CONN_INTERVAL 3
+#define DEFAULT_PROXY_CONN_ATTEMPTS 20
+#define DEFAULT_SOCKET_DEFER true
+#define DEFAULT_SOCKET_FREEBIND true
+#define DEFAULT_SOCKET_KEEPALIVE true
+#define DEFAULT_SOCKET_IPTOS true
+#define DEFAULT_SOCKET_NODELAY true
+
/* Global */
struct cfg *cfg = NULL;
@@ -199,6 +207,13 @@ enum mcfg_keys {
MCFG_KEY_IGMP,
MCFG_KEY_IGMP_IFACE,
MCFG_KEY_ANN_INTERVAL,
+ MCFG_KEY_PROXY_CONN_INTERVAL,
+ MCFG_KEY_PROXY_CONN_ATTEMPTS,
+ MCFG_KEY_SOCKET_DEFER,
+ MCFG_KEY_SOCKET_FREEBIND,
+ MCFG_KEY_SOCKET_KEEPALIVE,
+ MCFG_KEY_SOCKET_IPTOS,
+ MCFG_KEY_SOCKET_NODELAY,
};
struct cfg_key_value_map mcfg_key_map[] = {
@@ -215,6 +230,34 @@ struct cfg_key_value_map mcfg_key_map[] = {
.key_value = MCFG_KEY_ANN_INTERVAL,
.value_type = CFG_VAL_TYPE_UINT16,
}, {
+ .key_name = "proxy_connection_interval",
+ .key_value = MCFG_KEY_PROXY_CONN_INTERVAL,
+ .value_type = CFG_VAL_TYPE_UINT16,
+ }, {
+ .key_name = "proxy_connection_attempts",
+ .key_value = MCFG_KEY_PROXY_CONN_ATTEMPTS,
+ .value_type = CFG_VAL_TYPE_UINT16,
+ }, {
+ .key_name = "socket_defer",
+ .key_value = MCFG_KEY_SOCKET_DEFER,
+ .value_type = CFG_VAL_TYPE_BOOL,
+ }, {
+ .key_name = "socket_freebind",
+ .key_value = MCFG_KEY_SOCKET_FREEBIND,
+ .value_type = CFG_VAL_TYPE_BOOL,
+ }, {
+ .key_name = "socket_keepalive",
+ .key_value = MCFG_KEY_SOCKET_KEEPALIVE,
+ .value_type = CFG_VAL_TYPE_BOOL,
+ }, {
+ .key_name = "socket_iptos",
+ .key_value = MCFG_KEY_SOCKET_IPTOS,
+ .value_type = CFG_VAL_TYPE_BOOL,
+ }, {
+ .key_name = "socket_nodelay",
+ .key_value = MCFG_KEY_SOCKET_NODELAY,
+ .value_type = CFG_VAL_TYPE_BOOL,
+ }, {
.key_name = NULL,
.key_value = MCFG_KEY_INVALID,
.value_type = CFG_VAL_TYPE_INVALID,
@@ -303,6 +346,34 @@ cfg_read()
cfg->announce_interval = value.uint16;
break;
+ case MCFG_KEY_PROXY_CONN_INTERVAL:
+ cfg->proxy_connection_interval = value.uint16;
+ break;
+
+ case MCFG_KEY_PROXY_CONN_ATTEMPTS:
+ cfg->proxy_connection_attempts = value.uint16;
+ break;
+
+ case MCFG_KEY_SOCKET_DEFER:
+ cfg->socket_defer = value.boolean;
+ break;
+
+ case MCFG_KEY_SOCKET_FREEBIND:
+ cfg->socket_freebind = value.boolean;
+ break;
+
+ case MCFG_KEY_SOCKET_KEEPALIVE:
+ cfg->socket_keepalive = value.boolean;
+ break;
+
+ case MCFG_KEY_SOCKET_IPTOS:
+ cfg->socket_iptos = value.boolean;
+ break;
+
+ case MCFG_KEY_SOCKET_NODELAY:
+ cfg->socket_nodelay = value.boolean;
+ break;
+
case MCFG_KEY_INVALID:
default:
die("main config file (%s) invalid", path);
@@ -397,11 +468,20 @@ cfg_init(int argc, char **argv)
if (!cfg)
die("malloc: %m");
+ uring_task_init(&cfg->task, "main", NULL, cfg_free);
+ list_init(&cfg->servers);
+
+ cfg->homedir = DEFAULT_HOMEDIR_PATH;
cfg->announce_interval = DEFAULT_ANNOUNCE_INTERVAL;
+ cfg->proxy_connection_interval = DEFAULT_PROXY_CONN_INTERVAL;
+ cfg->proxy_connection_attempts = DEFAULT_PROXY_CONN_ATTEMPTS;
+ cfg->socket_defer = DEFAULT_SOCKET_DEFER;
+ cfg->socket_freebind = DEFAULT_SOCKET_FREEBIND;
+ cfg->socket_keepalive = DEFAULT_SOCKET_KEEPALIVE;
+ cfg->socket_iptos = DEFAULT_SOCKET_IPTOS;
+ cfg->socket_nodelay = DEFAULT_SOCKET_NODELAY;
cfg->uid = geteuid();
cfg->gid = getegid();
- uring_task_init(&cfg->task, "main", NULL, cfg_free);
- list_init(&cfg->servers);
while (true) {
int option_index = 0;
@@ -495,9 +575,6 @@ cfg_init(int argc, char **argv)
if (optind < argc)
usage(argc, argv, true);
-
- if (!cfg->homedir)
- cfg->homedir = DEFAULT_HOMEDIR_PATH;
}
static void