/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data
+ * Copyright (C) 1995-2013 Index Data
* See the file LICENSE for details.
*/
0, /* one shot (single session) */
"", /* no PDUs */
"", /* diagnostic output to stderr */
- "tcp:@:9999", /* default listener port */
PROTO_Z3950, /* default application protocol */
900, /* idle timeout (seconds) */
- 1024*1024, /* maximum PDU size (approx.) to allow */
+ 64*1024*1024, /* maximum PDU size (approx.) to allow */
"default-config", /* configuration name to pass to backend */
"", /* set user id */
0, /* bend_start handler */
"", /* NT Service Dependencies */
"Z39.50 Server", /* NT Service Display Name */
#endif /* WIN32 */
- 0, /* SOAP handlers */
"", /* PID fname */
0, /* background daemon */
"", /* SSL certificate filename */
yaz_log(YLOG_WARN, "Bad/missing root element for config %s",
control_block.xml_config);
return 0;
-
+
}
}
return ptr;
#endif
#if YAZ_HAVE_XML2
-static struct gfs_listen * gfs_listen_new(const char *id,
+static struct gfs_listen * gfs_listen_new(const char *id,
const char *address)
{
struct gfs_listen *n = (struct gfs_listen *)
assoc->server = gfs;
assoc->last_control = &gfs->cb;
statserv_setcontrol(&gfs->cb);
-
+
gfs_server_chdir(gfs);
break;
}
statserv_setcontrol(&control_block);
assoc->last_control = &control_block;
}
- yaz_log(YLOG_DEBUG, "server select: config=%s",
+ yaz_log(YLOG_DEBUG, "server select: config=%s",
assoc->last_control->configname);
assoc->maximumRecordSize = assoc->last_control->maxrecordsize;
struct gfs_server *gfs;
for ( ; attr; attr = attr->next)
- if (!xmlStrcmp(attr->name, BAD_CAST "listenref")
+ if (!xmlStrcmp(attr->name, BAD_CAST "listenref")
&& attr->children && attr->children->type == XML_TEXT_NODE)
listenref = nmem_dup_xml_content(gfs_nmem, attr->children);
else if (!xmlStrcmp(attr->name, BAD_CAST "id")
}
else if (!strcmp((const char *) ptr->name, "directory"))
{
- gfs->directory =
+ gfs->directory =
nmem_dup_xml_content(gfs_nmem, ptr->children);
}
else if (!strcmp((const char *) ptr->name, "docpath"))
{
- gfs->docpath =
+ gfs->docpath =
nmem_dup_xml_content(gfs_nmem, ptr->children);
}
else if (!strcmp((const char *) ptr->name, "maximumrecordsize"))
else if (!strcmp((const char *) ptr->name, "retrievalinfo"))
{
if (yaz_retrieval_configure(gfs->retrieval, ptr))
- {
+ {
yaz_log(YLOG_FATAL, "%s in config %s",
yaz_retrieval_get_error(gfs->retrieval),
control_block.xml_config);
init_control_tls = 1;
pthread_key_create(¤t_control_tls, 0);
#endif
-
+
gfs_nmem = nmem_create();
#if YAZ_HAVE_XML2
if (control_block.xml_config[0] == '\0')
/* Allocate the thread handle array */
pThreadHandles = (HANDLE *)malloc(sizeof(HANDLE) * iHandles);
- pCurrentHandle = pThreadHandles;
+ pCurrentHandle = pThreadHandles;
for (pCurrentThread = pFirstThread;
pCurrentThread != NULL;
}
/* WIN32 listener */
-static void listener(IOCHAN h, int event)
+static void listener(IOCHAN h, int event)
{
COMSTACK line = (COMSTACK) iochan_getdata(h);
IOCHAN parent_chan = line->user;
newHandle = (HANDLE) _beginthread(event_loop_thread, 0, new_chan);
if (newHandle == (HANDLE) -1)
{
-
+
yaz_log(YLOG_FATAL|YLOG_ERRNO, "Failed to create new thread.");
iochan_destroy(h);
return;
#else /* ! WIN32 */
/* To save having an #ifdef in event_loop we need to
- define this empty function
+ define this empty function
*/
void statserv_remove(IOCHAN pIOChannel)
{
COMSTACK new_line = (COMSTACK) vp;
IOCHAN parent_chan = (IOCHAN) new_line->user;
- unsigned cs_get_mask, cs_accept_mask, mask =
+ unsigned cs_get_mask, cs_accept_mask, mask =
((new_line->io_pending & CS_WANT_WRITE) ? EVENT_OUTPUT : 0) |
((new_line->io_pending & CS_WANT_READ) ? EVENT_INPUT : 0);
a = 0;
#endif
yaz_log_xml_errors(0, YLOG_WARN);
- yaz_log(log_session, "Session - OK %d %s %ld",
+ yaz_log(log_session, "Session - OK %d %s PID=%ld",
no_sessions, a ? a : "[Unknown]", (long) getpid());
if (max_sessions && no_sessions >= max_sessions)
control_block.one_shot = 1;
else
mode = "static";
- yaz_log(log_server, "Adding %s listener on %s id=%d", mode, where,
- listen_id);
+ yaz_log(log_server, "Adding %s listener on %s id=%d PID=%ld", mode, where,
+ listen_id, (long) getpid());
l = cs_create_host(where, 2, &ap);
if (!l)
iochan_event_loop(pListener);
}
+#ifndef WIN32
+static void normal_stop_handler(int num)
+{
+ yaz_log(log_server, "Received SIGTERM. PID=%ld", (long) getpid());
+ exit(0);
+}
+#endif
+
static int statserv_sc_main(yaz_sc_t s, int argc, char **argv)
{
char sep;
return 1;
xml_config_open();
-
+
xml_config_bend_start();
if (control_block.inetd)
{
xml_config_add_listeners();
- if (!pListener && *control_block.default_listen)
- add_listener(control_block.default_listen, 0);
+ if (!pListener)
+ add_listener("tcp:@:9999", 0);
#ifndef WIN32
if (control_block.dynamic)
return 1;
if (s)
yaz_sc_running(s);
- yaz_log(YLOG_DEBUG, "Entering event loop.");
+#ifndef WIN32
+ signal(SIGTERM, normal_stop_handler);
+#endif
yaz_daemon(programname,
(control_block.background ? YAZ_DAEMON_FORK : 0),
daemon_handler, &pListener,
static void option_copy(char *dst, const char *src)
{
- strncpy(dst, src ? src : "", 127);
- dst[127] = '\0';
+ strncpy(dst, src ? src : "", BEND_NAME_MAX-1);
+ dst[BEND_NAME_MAX-1] = '\0';
}
int check_options(int argc, char **argv)
int ret = 0, r;
char *arg;
- yaz_log_init_level(yaz_log_mask_str(STAT_DEFAULT_LOG_LEVEL));
+ yaz_log_init_level(yaz_log_mask_str(STAT_DEFAULT_LOG_LEVEL));
- get_logbits(1);
+ get_logbits(1);
while ((ret = options("1a:iszSTl:v:u:c:w:t:k:Kd:A:p:DC:f:m:r:",
argv, argc, &arg)) != -2)
if (add_listener(arg, 0))
return 1; /* failed to create listener */
break;
- case '1':
+ case '1':
control_block.one_shot = 1;
control_block.dynamic = 0;
break;
break;
case 'v':
yaz_log_init_level(yaz_log_mask_str(arg));
- get_logbits(1);
+ get_logbits(1);
break;
case 'a':
option_copy(control_block.apdufile, arg);
case 'w':
if (chdir(arg))
{
- perror(arg);
+ perror(arg);
return 1;
}
break;
fprintf(stderr, "Usage: %s [ -a <pdufile> -v <loglevel>"
" -l <logfile> -u <user> -c <config> -t <minutes>"
" -k <kilobytes> -d <daemon> -p <pidfile> -C certfile"
- " -ziDST1 -m <time-format> -w <directory> <listener-addr>... ]\n", me);
+ " -zKiDST1 -m <time-format> -w <directory> <listener-addr>... ]\n", me);
return 1;
}
}