From 88f9b2248bfb016514e340ee5eb81df7337fcc94 Mon Sep 17 00:00:00 2001 From: Test_User Date: Sat, 15 Jun 2024 14:16:50 -0400 Subject: Improvements and the start of reloadable modules --- general_network.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'general_network.c') diff --git a/general_network.c b/general_network.c index a5251c6..8889b75 100644 --- a/general_network.c +++ b/general_network.c @@ -27,7 +27,9 @@ // OTHER DEALINGS IN THE SOFTWARE. #include +#include #include +#include #include #include #include @@ -122,6 +124,8 @@ struct table server_list = {0}; struct table user_list = {0}; struct table channel_list = {0}; +struct server_info *self; + int resolve(struct string address, struct string port, struct sockaddr *sockaddr) { // NULL isn't really valid in this anyways so... just checking it and replacing with null-terminated for now for (size_t i = 0; i < address.len; i++) @@ -202,6 +206,8 @@ int init_general_network(void) { own_info->latency = (struct timeval){0}; own_info->latency_valid = 1; + self = own_info; + user_list.array = malloc(0); channel_list.array = malloc(0); @@ -718,3 +724,26 @@ int notice(struct string from, struct string sender, struct string target, struc return 0; } + +int do_trivial_reloads(void) { +#ifdef USE_PSUEDOCLIENTS +#ifdef USE_HAXSERV_PSUEDOCLIENT + if (reload_psuedoclients[HAXSERV_PSUEDOCLIENT]) { + if (psuedoclients[HAXSERV_PSUEDOCLIENT].pre_reload() != 0) + return 1; + dlclose(psuedoclients[HAXSERV_PSUEDOCLIENT].dl_handle); + psuedoclients[HAXSERV_PSUEDOCLIENT].dl_handle = dlopen("psuedoclients/haxserv.so", RTLD_NOW | RTLD_LOCAL); + if (!psuedoclients[HAXSERV_PSUEDOCLIENT].dl_handle) { + puts(dlerror()); + abort(); // TODO: Ugh... + } + + psuedoclients[HAXSERV_PSUEDOCLIENT].post_reload = dlsym(psuedoclients[HAXSERV_PSUEDOCLIENT].dl_handle, "haxserv_psuedoclient_post_reload"); + if (psuedoclients[HAXSERV_PSUEDOCLIENT].post_reload() != 0) { + abort(); // TODO: Ugh... + } + } +#endif +#endif + return 0; +} -- cgit v1.2.3