From 7fe8d74f22fcc4d306e35b4fc4cb2a4cd4ff01d8 Mon Sep 17 00:00:00 2001 From: Daniel Collins Date: Sun, 28 Oct 2012 15:53:54 +0000 Subject: [PATCH] Implemented config saving functions and added log_level to main_config. --- src/config.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/config.h | 13 +++++++++++++ src/ipxwrapper.c | 1 + 3 files changed, 59 insertions(+) diff --git a/src/config.c b/src/config.c index 1c5de81..305ab5f 100644 --- a/src/config.c +++ b/src/config.c @@ -69,6 +69,8 @@ main_config_t get_main_config(void) } config.router_port = reg_get_dword(reg, "control_port", config.router_port); + + config.log_level = reg_get_dword(reg, "min_log_level", LOG_INFO); } else if(version == 2) { @@ -77,6 +79,8 @@ main_config_t get_main_config(void) config.w95_bug = reg_get_dword(reg, "w95_bug", config.w95_bug); config.bcast_all = reg_get_dword(reg, "bcast_all", config.bcast_all); config.src_filter = reg_get_dword(reg, "src_filter", config.src_filter); + + config.log_level = reg_get_dword(reg, "log_level", LOG_INFO); } reg_close(reg); @@ -84,6 +88,29 @@ main_config_t get_main_config(void) return config; } +bool set_main_config(const main_config_t *config) +{ + HKEY reg = reg_open_main(true); + + bool ok = reg_set_dword(reg, "single_iface", config->single_iface) + && reg_set_addr32(reg, "single_netnum", config->single_netnum) + && reg_set_addr48(reg, "single_nodenum", config->single_nodenum) + + && reg_set_dword(reg, "port", config->udp_port) + && reg_set_dword(reg, "router_port", config->router_port) + && reg_set_dword(reg, "w95_bug", config->w95_bug) + && reg_set_dword(reg, "bcast_all", config->bcast_all) + && reg_set_dword(reg, "src_filter", config->src_filter) + + && reg_set_dword(reg, "log_level", config->log_level) + + && reg_set_dword(reg, "version", 2); + + reg_close(reg); + + return ok; +} + iface_config_t get_iface_config(addr48_t hwaddr) { char id[18]; @@ -134,6 +161,24 @@ iface_config_t get_iface_config(addr48_t hwaddr) return config; } +bool set_iface_config(addr48_t hwaddr, const iface_config_t *config) +{ + char id[ADDR48_STRING_SIZE]; + addr48_string(id, hwaddr); + + HKEY reg = reg_open_main(false); + HKEY ifreg = reg_open_subkey(reg, id, true); + + bool ok = reg_set_addr32(ifreg, "net", config->netnum) + && reg_set_addr32(ifreg, "node", config->nodenum) + && reg_set_addr32(ifreg, "enabled", config->enabled); + + reg_close(ifreg); + reg_close(reg); + + return ok; +} + addr48_t get_primary_iface(void) { addr48_t primary = addr48_in((unsigned char[]){ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }); diff --git a/src/config.h b/src/config.h index 2b04a2e..c4d12ca 100644 --- a/src/config.h +++ b/src/config.h @@ -23,6 +23,10 @@ #include "common.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef struct main_config { uint16_t udp_port; uint16_t router_port; @@ -31,6 +35,8 @@ typedef struct main_config { bool bcast_all; bool src_filter; + enum ipx_log_level log_level; + unsigned int addr_cache_ttl; unsigned int iface_ttl; @@ -61,8 +67,15 @@ struct v1_iface_config { } __attribute__((__packed__)); main_config_t get_main_config(void); +bool set_main_config(const main_config_t *config); iface_config_t get_iface_config(addr48_t hwaddr); +bool set_iface_config(addr48_t hwaddr, const iface_config_t *config); + addr48_t get_primary_iface(); +#ifdef __cplusplus +} +#endif + #endif /* !IPX_CONFIG_H */ diff --git a/src/ipxwrapper.c b/src/ipxwrapper.c index 45aa2ec..1377063 100644 --- a/src/ipxwrapper.c +++ b/src/ipxwrapper.c @@ -82,6 +82,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { } main_config = get_main_config(); + min_log_level = main_config.log_level; addr_cache_init();