/*
- * Copyright (c) 1995-1999, Index Data
+ * Copyright (c) 1995-2000, Index Data
* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
*
* NT server based on threads by
- * Chas Woodfield, Fretwell Downing Datasystems.
+ * Chas Woodfield, Fretwell Downing Informatics.
*
* $Log: statserv.c,v $
- * Revision 1.61 2000-03-15 12:59:49 adam
+ * Revision 1.65 2000-09-04 08:58:15 adam
+ * Added prefix yaz_ for most logging utility functions.
+ *
+ * Revision 1.64 2000/04/05 07:39:55 adam
+ * Added shared library support (libtool).
+ *
+ * Revision 1.63 2000/03/20 19:06:25 adam
+ * Added Segment request for fronend server. Work on admin for client.
+ *
+ * Revision 1.62 2000/03/17 12:47:02 adam
+ * Minor changes to admin client.
+ *
+ * Revision 1.61 2000/03/15 12:59:49 adam
* Added handle member to statserv_control.
*
* Revision 1.60 2000/03/14 09:06:11 adam
"",
0, /* default value for inet deamon */
0, /* handle (for service, etc) */
-
+ 0, /* bend_init handle */
+ 0 /* bend_close handle */
#ifdef WIN32
,"Z39.50 Server", /* NT Service Name */
"Server", /* NT application Name */
void statserv_closedown()
{
IOCHAN p;
+
+ if (control_block.bend_stop)
+ (*control_block.bend_stop)(&control_block);
+
for (p = pListener; p; p = p->next)
iochan_destroy(p);
}
+void sigterm(int sig)
+{
+ statserv_closedown();
+ exit (0);
+}
+
static void *new_session (void *vp);
static void listener(IOCHAN h, int event)
}
}
sprintf(nbuf, "%s(%d)", me, getpid());
- log_init(control_block.loglevel, nbuf, 0);
+ yaz_log_init(control_block.loglevel, nbuf, 0);
}
else /* parent */
{
if (control_block.bend_start)
(*control_block.bend_start)(&control_block);
-#ifndef WIN32
+#ifdef WIN32
+ logf (LOG_LOG, "Starting server %s", me);
+#else
if (control_block.inetd)
inetd_connection(control_block.default_proto);
else
{
+ logf (LOG_LOG, "Starting server %s pid=%d", me, getpid());
+#if 0
+ sigset_t sigs_to_block;
+
+ sigemptyset(&sigs_to_block);
+ sigaddset (&sigs_to_block, SIGTERM);
+ pthread_sigmask (SIG_BLOCK, &sigs_to_block, 0);
+ pthread_create (&
+
+
+#endif
if (control_block.dynamic)
signal(SIGCHLD, catchchld);
}
+
+ signal (SIGTERM, sigterm);
if (*control_block.setuid)
{
struct passwd *pw;
break;
case 'l':
strcpy(control_block.logfile, arg ? arg : "");
- log_init(control_block.loglevel, me, control_block.logfile);
+ yaz_log_init(control_block.loglevel, me, control_block.logfile);
break;
case 'v':
- control_block.loglevel = log_mask_str(arg);
- log_init(control_block.loglevel, me, control_block.logfile);
+ control_block.loglevel = yaz_log_mask_str(arg);
+ yaz_log_init(control_block.loglevel, me, control_block.logfile);
break;
case 'a':
strcpy(control_block.apdufile, arg ? arg : "");
/* list of service dependencies - "dep1\0dep2\0\0" */
#define SZDEPENDENCIES ""
-int statserv_main(int argc, char **argv)
+int statserv_main(int argc, char **argv,
+ bend_initresult *(*bend_init)(bend_initrequest *r),
+ void (*bend_close)(void *handle))
{
statserv_options_block *cb = statserv_getcontrol();
+ cb->bend_init = bend_init;
+ cb->bend_close = bend_close;
+
+ statserv_setcontrol(cb);
+
/* Lets setup the Arg structure */
ArgDetails.argc = argc;
ArgDetails.argv = argv;
statserv_closedown();
}
#else
-int statserv_main(int argc, char **argv)
+int statserv_main(int argc, char **argv,
+ bend_initresult *(*bend_init)(bend_initrequest *r),
+ void (*bend_close)(void *handle))
{
- int ret = statserv_start (argc, argv);
+ int ret;
+ statserv_options_block *cb = statserv_getcontrol();
+
+ cb->bend_init = bend_init;
+ cb->bend_close = bend_close;
+
+ statserv_setcontrol(cb);
+ ret = statserv_start (argc, argv);
statserv_closedown ();
return ret;
}