#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;
/* 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);
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);
}
}
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)
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 "
"<priikone@silcnet.org>\n");
exit(0);
break;
goto fail;
/* Check for another silcd running */
- silc_checkpid(silcd);
+ silc_server_checkpid(silcd);
/* Initialize the server */
ret = silc_server_init(silcd);
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. */
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 */
SilcPrivateKey prv_key;
SilcRng rng;
unsigned char *key;
- uint32 key_len;
+ SilcUInt32 key_len;
char pkfile[256], prvfile[256];
if (!pkcs_name || !path)