yaz-ccl.h yaz-iconv.h yaz-util.h yaz-version.h yconfig.h proto.h \
xmlquery.h libxml2_error.h xmltypes.h snprintf.h query-charset.h \
mutex.h oid_db.h oid_util.h oid_std.h tokenizer.h copy_types.h \
- icu.h match_glob.h poll.h daemon.h \
+ icu.h match_glob.h poll.h daemon.h sc.h \
\
ill.h ill-core.h item-req.h oclc-ill-req-ext.h z-accdes1.h z-accform1.h \
z-acckrb1.h z-core.h z-date.h z-diag1.h z-espec1.h z-estask.h z-exp.h \
int argc, char **argv,
bend_initresult *(*bend_init)(bend_initrequest *r),
void (*bend_close)(void *handle));
-YAZ_EXPORT int statserv_start(int argc, char **argv);
-YAZ_EXPORT void statserv_closedown(void);
YAZ_EXPORT statserv_options_block *statserv_getcontrol(void);
YAZ_EXPORT void statserv_setcontrol(statserv_options_block *block);
YAZ_EXPORT int check_ip_tcpd(void *cd, const char *addr, int len, int type);
record_conv.c retrieval.c elementset.c snprintf.c query-charset.c \
copy_types.c match_glob.c poll.c daemon.c \
iconv_encode_marc8.c iconv_encode_iso_8859_1.c iconv_encode_wchar.c \
- iconv_decode_marc8.c
+ iconv_decode_marc8.c sc.c
libyaz_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
libyaz_server_la_SOURCES = statserv.c seshigh.c eventl.c \
- requestq.c eventl.h session.h service.c service.h mutex.c
+ requestq.c eventl.h session.h mutex.c
libyaz_server_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
char *display_name;
int (*sc_main)(yaz_sc_t s, int argc, char **argv);
void (*sc_stop)(yaz_sc_t s);
+#ifdef WIN32
SERVICE_STATUS_HANDLE gSvcStatusHandle;
SERVICE_STATUS gSvcStatus;
+#endif
};
{
yaz_sc_t s = xmalloc(sizeof(*s));
- s->service_name = xstrdup(service_name);
- s->display_name = xstrdup(display_name);
+ s->service_name = service_name ? xstrdup(service_name) : 0;
+ s->display_name = display_name ? xstrdup(display_name) : 0;
s->install_flag = 0;
s->start_flag = 0;
s->remove_flag = 0;
s->run_flag = 0;
s->sc_main = 0;
s->sc_stop = 0;
+#ifdef WIN32
s->gSvcStatusHandle = 0;
+#endif
return s;
}
+#ifdef WIN32
static void parse_args(yaz_sc_t s, int *argc_p, char ***argv_p)
{
int skip_opt = 0;
/* -run dir */
const char *dir = (*argv_p)[i+1];
s->run_flag = 1;
- chdir(dir);\r
- skip_opt = 2;
- break;
+ chdir(dir);
+ skip_opt = 2;
+ break;
}
}
*argc_p -= skip_opt;
sc_ReportSvcStatus(s, SERVICE_STOPPED,
ret_code ? ERROR_SERVICE_SPECIFIC_ERROR : NO_ERROR, ret_code);
}
+#endif
void yaz_sc_running(yaz_sc_t s)
{
+#ifdef WIN32
sc_ReportSvcStatus(s, SERVICE_RUNNING, NO_ERROR, 0);
+#endif
}
int yaz_sc_program(yaz_sc_t s, int argc, char **argv,
{
s->sc_main = sc_main;
s->sc_stop = sc_stop;
+#ifdef WIN32
parse_args(s, &argc, &argv);
if (s->install_flag || s->remove_flag)
yaz_log(YLOG_FATAL|YLOG_ERRNO, "Service %s could not be controlled",
s->service_name);
}
+ return 0;
}
- else
- {
- /* run the program standalone (with no service) */
- return s->sc_main(s, argc, argv);
- }
- return 0;
+#endif /* WIN32 */
+ /* run the program standalone (with no service) */
+ return s->sc_main(s, argc, argv);
}
void yaz_sc_destroy(yaz_sc_t *s)
}
/* WIN32 statserv_closedown */
-void statserv_closedown()
+static void statserv_closedown()
{
/* Shouldn't do anything if we are not initialized */
if (bInitialized)
{
}
-void statserv_closedown()
+static void statserv_closedown(void)
{
IOCHAN p;
{
}
-int statserv_start(int argc, char **argv)
+static int statserv_sc_main(yaz_sc_t s, int argc, char **argv)
{
char sep;
#ifdef WIN32
#endif
if (pListener == NULL)
return 1;
+ if (s)
+ yaz_sc_running(s);
yaz_log(YLOG_DEBUG, "Entering event loop.");
return iochan_event_loop(&pListener);
}
statserv_reset();
}
-int statserv_sc_main(yaz_sc_t s, int argc, char **argv)
-{
- yaz_sc_running(s);
- return statserv_start(argc, argv);
-}
-
int statserv_main(int argc, char **argv,
bend_initresult *(*bend_init)(bend_initrequest *r),
void (*bend_close)(void *handle))
int ret;
struct statserv_options_block *cb = &control_block;
- yaz_sc_t s = yaz_sc_create(cb->service_name,
- cb->service_display_name);
+ /* control block does not have service_name member on Unix */
+ yaz_sc_t s = yaz_sc_create(
+#ifdef WIN32
+ cb->service_name, cb->service_display_name
+#else
+ 0, 0
+#endif
+ );
cb->bend_init = bend_init;
cb->bend_close = bend_close;