X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fsilcd.c;h=84e35dc4aab629b45a250e625db6410b121e3b25;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=8de6d80b88abc94eb74fe0d53b561d3c9634973e;hpb=d8414257c2a60e775002e7550feeaa63c17e6f62;p=silc.git diff --git a/apps/silcd/silcd.c b/apps/silcd/silcd.c index 8de6d80b..84e35dc4 100644 --- a/apps/silcd/silcd.c +++ b/apps/silcd/silcd.c @@ -27,7 +27,7 @@ #include "serverincludes.h" #include "server_internal.h" -#include "version.h" +#include "silcversion.h" /* For now, we'll have this one server context global for this module. */ static SilcServer silcd; @@ -102,15 +102,15 @@ Usage: silcd [options]\n\ /* Dies if a *valid* pid file exists already */ -static void silc_checkpid(SilcServer silcd) +static void silc_server_checkpid(SilcServer silcd) { - if (silcd->config->pidfile && silcd->config->pidfile->pid_file) { + if (silcd->config->server_info->pid_file) { int oldpid; char *buf; - uint32 buf_len; + SilcUInt32 buf_len; SILC_LOG_DEBUG(("Checking for another silcd running")); - buf = silc_file_readfile(silcd->config->pidfile->pid_file, &buf_len); + buf = silc_file_readfile(silcd->config->server_info->pid_file, &buf_len); if (!buf) return; oldpid = atoi(buf); @@ -121,7 +121,7 @@ static void silc_checkpid(SilcServer silcd) if (errno != ESRCH) { fprintf(stderr, "\nI detected another daemon running with the same pid file.\n"); fprintf(stderr, "Please change the config file, or erase the %s\n", - silcd->config->pidfile->pid_file); + silcd->config->server_info->pid_file); exit(1); } } @@ -136,16 +136,9 @@ static void got_hup(int z) static void stop_server(int z) { - SILC_LOG_DEBUG(("Start")); - - /* Flush log files */ - silc_log_flush_all(); - - /* Gracefully stop the server */ - /* silc_server_stop(silcd); */ - /* XXX do this for now since doing graceful exit now can remove - the scheduler underneath the server too early and crash it. */ - exit(0); + /* Stop scheduler, the program will stop eventually after noticing + that the scheduler is down. */ + silc_schedule_stop(silcd->schedule); } int main(int argc, char **argv) @@ -168,7 +161,7 @@ int main(int argc, char **argv) printf("SILCd Secure Internet Live Conferencing daemon, " "version %s (base: SILC Toolkit %s)\n", silc_dist_version, silc_version); - printf("(c) 1997 - 2001 Pekka Riikonen " + printf("(c) 1997 - 2002 Pekka Riikonen " "\n"); exit(0); break; @@ -246,7 +239,7 @@ int main(int argc, char **argv) goto fail; /* Check for another silcd running */ - silc_checkpid(silcd); + silc_server_checkpid(silcd); /* Initialize the server */ ret = silc_server_init(silcd); @@ -270,11 +263,11 @@ int main(int argc, char **argv) silc_server_daemonise(silcd); /* If set, write pid to file */ - if (silcd->config->pidfile && silcd->config->pidfile->pid_file) { - char buf[10]; - unlink(silcd->config->pidfile->pid_file); + if (silcd->config->server_info->pid_file) { + char buf[10], *pidfile = silcd->config->server_info->pid_file; + unlink(pidfile); snprintf(buf, sizeof(buf) - 1, "%d\n", getpid()); - silc_file_writefile(silcd->config->pidfile->pid_file, buf, strlen(buf)); + silc_file_writefile(pidfile, buf, strlen(buf)); } /* Drop root. */ @@ -284,7 +277,8 @@ int main(int argc, char **argv) and we will exit. */ silc_server_run(silcd); - /* The server was stopped, free it now */ + /* Stop the server and free it. */ + silc_server_stop(silcd); silc_server_free(silcd); /* Flush the logging system */ @@ -335,7 +329,7 @@ silc_server_create_key_pair(char *pkcs_name, int bits, char *path, SilcPrivateKey prv_key; SilcRng rng; unsigned char *key; - uint32 key_len; + SilcUInt32 key_len; char pkfile[256], prvfile[256]; if (!pkcs_name || !path)