Fixed Makefile(s).
[yaz-moved-to-github.git] / server / statserv.c
index e777879..9246daa 100644 (file)
@@ -7,7 +7,16 @@
  *   Chas Woodfield, Fretwell Downing Datasystem.
  *
  * $Log: statserv.c,v $
- * Revision 1.42  1997-10-27 14:03:02  adam
+ * Revision 1.44  1997-11-07 13:31:52  adam
+ * Added NT Service name part of statserv_options_block. Moved NT
+ * service utility to server library.
+ *
+ * Revision 1.43  1997/10/31 12:20:09  adam
+ * Improved memory debugging for xmalloc/nmem.c. References to NMEM
+ * instead of ODR in n ESPEC-1 handling in source d1_espec.c.
+ * Bug fix: missing fclose in data1_read_espec1.
+ *
+ * Revision 1.42  1997/10/27 14:03:02  adam
  * Added new member to statserver_options_block, pre_init, which
  * specifies a callback to be invoked after command line parsing and
  * before the server listens for the first time.
 #include <process.h>
 #include <winsock.h>
 #include <direct.h>
+#include "service.h"
 #else
 #include <unistd.h>
 #include <pwd.h>
@@ -187,7 +197,8 @@ static statserv_options_block control_block = {
     1024*1024,                  /* maximum PDU size (approx.) to allow */
     "default-config",           /* configuration name to pass to backend */
     "",                         /* set user id */
-    NULL
+    NULL,                       /* pre init handler */
+    "Z39.50 Server"             /* NT Service Name */
 };
 
 /*
@@ -400,9 +411,11 @@ static void listener(IOCHAN h, int event)
        logf(LOG_DEBUG, "Setting timeout %d", control_block.idle_timeout);
        iochan_setdata(new_chan, newas);
        iochan_settimeout(new_chan, control_block.idle_timeout * 60);
+#ifndef WINDOWS
        logf(LOG_DEBUG, "Determining client address");
        a = cs_addrstr(new_line);
        logf(LOG_LOG, "Accepted connection from %s", a ? a : "[Unknown]");
+#endif
     /* Now what we need todo is create a new thread with this iochan as
        the parameter */
     /* if (CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)event_loop, new_chan,
@@ -701,7 +714,8 @@ void statserv_setcontrol(statserv_options_block *block)
     memcpy(&control_block, block, sizeof(*block));
 }
 
-int statserv_main(int argc, char **argv)
+
+int statserv_start(int argc, char **argv)
 {
     int ret, listeners = 0, inetd = 0, r;
     char *arg;
@@ -822,3 +836,62 @@ int statserv_main(int argc, char **argv)
     nmem_exit ();
     return ret;
 }
+
+#ifdef WINDOWS
+typedef struct _Args
+{
+    char **argv;
+    int argc;
+} Args; 
+
+static Args ArgDetails;
+
+/* name of the executable */
+#define SZAPPNAME            "server"
+
+/* list of service dependencies - "dep1\0dep2\0\0" */
+#define SZDEPENDENCIES       ""
+
+int statserv_main(int argc, char **argv)
+{
+    statserv_options_block *cb = statserv_getcontrol();
+
+        /* Lets setup the Arg structure */
+    ArgDetails.argc = argc;
+    ArgDetails.argv = argv;
+
+    /* Now setup the service with the service controller */
+    SetupService(argc, argv, &ArgDetails, SZAPPNAME,
+        cb->service_name, /* internal service name */
+        cb->service_name, /* displayed name of the service */
+        SZDEPENDENCIES);
+    return 0;
+}
+
+int StartAppService(void *pHandle, int argc, char **argv)
+{
+    /* Initializes the App */
+    return 1;
+}
+
+void RunAppService(void *pHandle)
+{
+    Args *pArgs = (Args *)pHandle;
+
+    /* Starts the app running */
+    statserv_start(pArgs->argc, pArgs->argv);
+}
+
+void StopAppService(void *pHandle)
+{
+    /* Stops the app */
+    statserv_closedown();
+}
+#else
+int statserv_main(int argc, char **argv)
+{
+    int ret = statserv_start (argc, argv);
+    statserv_closedown ();
+    return ret;
+}
+#endif