diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index 22e168586621fc8f5f3224a2ee0a59e19c34836f..5d5db0e784ce0687f6e1ff2d8290b0e459622f36 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -4832,6 +4832,8 @@ void DLLCALL ftp_server(void* arg) if(!terminate_server) { lprintf(LOG_INFO,"Recycling server..."); mswait(2000); + if(startup->recycle!=NULL) + startup->recycle(startup->cbdata); } } while(!terminate_server); diff --git a/src/sbbs3/ftpsrvr.h b/src/sbbs3/ftpsrvr.h index 2ec9640cd5ea1e2b3e4c73fdb26914fa9fb63047..2c7471970dc63468a9c9b7013d122b63b097cf5d 100644 --- a/src/sbbs3/ftpsrvr.h +++ b/src/sbbs3/ftpsrvr.h @@ -60,6 +60,7 @@ typedef struct { int (*lputs)(void*, int, char*); void (*status)(void*, char*); void (*started)(void*); + void (*recycle)(void*); void (*terminated)(void*, int code); void (*clients)(void*, int active); void (*thread_up)(void*, BOOL up, BOOL setuid); diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index b18c78f75e02d10ce0fb4e3a04e55e04c2b186be..3cdb391524a482c05d986b63aa16092b0812f15e 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -4333,6 +4333,8 @@ void DLLCALL mail_server(void* arg) if(!terminate_server) { lprintf(LOG_INFO,"Recycling server..."); mswait(2000); + if(startup->recycle!=NULL) + startup->recycle(startup->cbdata); } } while(!terminate_server); diff --git a/src/sbbs3/mailsrvr.h b/src/sbbs3/mailsrvr.h index 0d1ae33f61bcd1bbe4e100c10a7f5a79a0ebd24b..4885dcbbe25b69e26946423447dedc84922a34a6 100644 --- a/src/sbbs3/mailsrvr.h +++ b/src/sbbs3/mailsrvr.h @@ -67,6 +67,7 @@ typedef struct { int (*lputs)(void*, int, char*); void (*status)(void*, char*); void (*started)(void*); + void (*recycle)(void*); void (*terminated)(void*, int code); void (*clients)(void*, int active); void (*thread_up)(void*, BOOL up, BOOL setuid); diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index a0c881083bc4d0fcd69661729fd61b5d443cc822..521c63eb45a40b60ffa27b8c3346991a0902e494 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -4582,6 +4582,8 @@ void DLLCALL bbs_thread(void* arg) if(!terminate_server) { lprintf(LOG_INFO,"Recycling server..."); mswait(2000); + if(startup->recycle!=NULL) + startup->recycle(startup->cbdata); } } while(!terminate_server); diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c index 4246711f64f7b67e12b06477dbe826a5ab4e3b0b..ae4d2c6f3c242d1c0bc560e1ecb568796d937476 100644 --- a/src/sbbs3/sbbscon.c +++ b/src/sbbs3/sbbscon.c @@ -754,7 +754,8 @@ static void terminate(void) } } -static void read_startup_ini(void) +static void read_startup_ini(bbs_startup_t* bbs, ftp_startup_t* ftp, web_startup_t* web + ,mail_startup_t* mail, services_startup_t* services) { char str[MAX_PATH+1]; FILE* fp=NULL; @@ -775,11 +776,11 @@ static void read_startup_ini(void) /* We call this function to set defaults, even if there's no .ini file */ sbbs_read_ini(fp, NULL, /* global_startup */ - &run_bbs, &bbs_startup, - &run_ftp, &ftp_startup, - &run_web, &web_startup, - &run_mail, &mail_startup, - &run_services, &services_startup); + &run_bbs, bbs, + &run_ftp, ftp, + &run_web, web, + &run_mail, mail, + &run_services, services); /* read/default any sbbscon-specific .ini keys here */ #if defined(__unix__) @@ -797,6 +798,28 @@ static void read_startup_ini(void) fclose(fp); } +/* Server recycle callback (read relevant startup .ini file section) */ +void recycle(void* cbdata) +{ + bbs_startup_t* bbs=NULL; + ftp_startup_t* ftp=NULL; + web_startup_t* web=NULL; + mail_startup_t* mail=NULL; + services_startup_t* services=NULL; + + if(cbdata==&bbs_startup) + bbs=cbdata; + else if(cbdata==&ftp_startup) + ftp=cbdata; + else if(cbdata==&web_startup) + web=cbdata; + else if(cbdata==&mail_startup) + mail=cbdata; + else if(cbdata==&services_startup) + services=cbdata; + + read_startup_ini(bbs,ftp,web,mail,services); +} #if defined(_WIN32) BOOL WINAPI ControlHandler(DWORD CtrlType) @@ -971,10 +994,11 @@ int main(int argc, char** argv) /* Initialize BBS startup structure */ memset(&bbs_startup,0,sizeof(bbs_startup)); bbs_startup.size=sizeof(bbs_startup); - + bbs_startup.cbdata=&bbs_startup; bbs_startup.lputs=bbs_lputs; bbs_startup.event_lputs=event_lputs; bbs_startup.started=bbs_started; + bbs_startup.recycle=recycle; bbs_startup.terminated=bbs_terminated; bbs_startup.thread_up=thread_up; bbs_startup.socket_open=socket_open; @@ -992,8 +1016,10 @@ int main(int argc, char** argv) /* Initialize FTP startup structure */ memset(&ftp_startup,0,sizeof(ftp_startup)); ftp_startup.size=sizeof(ftp_startup); + ftp_startup.cbdata=&ftp_startup; ftp_startup.lputs=ftp_lputs; ftp_startup.started=ftp_started; + ftp_startup.recycle=recycle; ftp_startup.terminated=ftp_terminated; ftp_startup.thread_up=thread_up; ftp_startup.socket_open=socket_open; @@ -1008,8 +1034,10 @@ int main(int argc, char** argv) /* Initialize Web Server startup structure */ memset(&web_startup,0,sizeof(web_startup)); web_startup.size=sizeof(web_startup); + web_startup.cbdata=&web_startup; web_startup.lputs=web_lputs; web_startup.started=web_started; + web_startup.recycle=recycle; web_startup.terminated=web_terminated; web_startup.thread_up=thread_up; web_startup.socket_open=socket_open; @@ -1022,8 +1050,10 @@ int main(int argc, char** argv) /* Initialize Mail Server startup structure */ memset(&mail_startup,0,sizeof(mail_startup)); mail_startup.size=sizeof(mail_startup); + mail_startup.cbdata=&mail_startup; mail_startup.lputs=mail_lputs; mail_startup.started=mail_started; + mail_startup.recycle=recycle; mail_startup.terminated=mail_terminated; mail_startup.thread_up=thread_up; mail_startup.socket_open=socket_open; @@ -1062,8 +1092,10 @@ int main(int argc, char** argv) /* Initialize Services startup structure */ memset(&services_startup,0,sizeof(services_startup)); services_startup.size=sizeof(services_startup); + services_startup.cbdata=&services_startup; services_startup.lputs=services_lputs; services_startup.started=services_started; + services_startup.recycle=recycle; services_startup.terminated=services_terminated; services_startup.thread_up=thread_up; services_startup.socket_open=socket_open; @@ -1089,7 +1121,7 @@ int main(int argc, char** argv) } } - read_startup_ini(); + read_startup_ini(&bbs_startup, &ftp_startup, &web_startup, &mail_startup, &services_startup); #if SBBS_MAGIC_FILENAMES /* This stuff is just broken */ diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 93b863de73598d1c26a2d1eb11750319f74f60dc..eeea76e4d39b7a346f27ebbebe40323497d98716 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -2161,6 +2161,8 @@ void DLLCALL services_thread(void* arg) if(!terminated) { lprintf(LOG_INFO,"Recycling server..."); mswait(2000); + if(startup->recycle!=NULL) + startup->recycle(startup->cbdata); } } while(!terminated); diff --git a/src/sbbs3/services.h b/src/sbbs3/services.h index 86e43f3189b60bd341e4e0065c0e63c81b0f47a8..47e5309433907a211ab47e9f9908f2169ab2eb29 100644 --- a/src/sbbs3/services.h +++ b/src/sbbs3/services.h @@ -63,6 +63,7 @@ typedef struct { int (*lputs)(void*, int, char*); /* Log - put string */ void (*status)(void*, char*); void (*started)(void*); + void (*recycle)(void*); void (*terminated)(void*, int code); void (*clients)(void*, int active); void (*thread_up)(void*, BOOL up, BOOL setuid); diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h index 1cdfead3b2b8baa72eb64781f8b1ea37be607b00..053e94000b1f8e7392d59974d37c8db532e9ce6e 100644 --- a/src/sbbs3/startup.h +++ b/src/sbbs3/startup.h @@ -97,6 +97,7 @@ typedef struct { int (*event_lputs)(int, char*); /* Event log - put string */ void (*status)(void*, char*); void (*started)(void*); + void (*recycle)(void*); void (*terminated)(void*, int code); void (*clients)(void*, int active); void (*thread_up)(void*, BOOL up, BOOL setuid); diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index c1eabb5f2ae91163c0a03e49077d524ba9243aab..9d91a16f7c5d6b4353bd83f15309db9de8920567 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -3183,6 +3183,8 @@ void DLLCALL web_server(void* arg) if(!terminate_server) { lprintf(LOG_INFO,"Recycling server..."); mswait(2000); + if(startup->recycle!=NULL) + startup->recycle(startup->cbdata); } } while(!terminate_server); diff --git a/src/sbbs3/websrvr.h b/src/sbbs3/websrvr.h index 9b16c0ec698d6cfeed9e68bbf98e7eb88e6ecd01..f40f41099964b83b68af51b6cf40d12ab4e25f74 100644 --- a/src/sbbs3/websrvr.h +++ b/src/sbbs3/websrvr.h @@ -60,6 +60,7 @@ typedef struct { int (*lputs)(void*, int, char*); void (*status)(void*, char*); void (*started)(void*); + void (*recycle)(void*); void (*terminated)(void*, int code); void (*clients)(void*, int active); void (*thread_up)(void*, BOOL up, BOOL setuid);