X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Fstatserv.c;h=8e63fb7bc6178c38bead5a446049b7c654cdb5bc;hb=33ec719e54ba8b5cc86c7745ebcbcfa572eb3e0d;hp=3756a7fd0b0525aeae63cacc6d22bef8a7e9e896;hpb=44c7c8b6a256ed36e88ea3fbe4d6e88c202b1e23;p=yaz-moved-to-github.git diff --git a/server/statserv.c b/server/statserv.c index 3756a7f..8e63fb7 100644 --- a/server/statserv.c +++ b/server/statserv.c @@ -7,7 +7,15 @@ * Chas Woodfield, Fretwell Downing Datasystem. * * $Log: statserv.c,v $ - * Revision 1.38 1997-09-04 14:19:14 adam + * Revision 1.40 1997-09-17 12:10:41 adam + * YAZ version 1.4. + * + * Revision 1.39 1997/09/09 10:10:19 adam + * Another MSV5.0 port. Changed projects to include proper + * library/include paths. + * Server starts server in test-mode when no options are given. + * + * Revision 1.38 1997/09/04 14:19:14 adam * Added credits. * * Revision 1.37 1997/09/01 08:53:01 adam @@ -127,11 +135,6 @@ * */ -/* - * Simple, static server. I wouldn't advise a static server unless you - * really have to, but it's great for debugging memory management. :) - */ - #include #include #ifdef WINDOWS @@ -276,7 +279,8 @@ void statserv_closedown() int iHandles = 0; HANDLE *pThreadHandles = NULL; - /* We need to stop threads adding and removing while we start the closedown process */ + /* We need to stop threads adding and removing while we */ + /* start the closedown process */ EnterCriticalSection(&Thread_CritSect); { @@ -344,11 +348,11 @@ static void listener(IOCHAN h, int event) { if ((res = cs_listen(line, 0, 0)) < 0) { - logf(LOG_FATAL, "cs_listen failed."); + logf(LOG_FATAL, "cs_listen failed."); return; } else if (res == 1) - return; + return; logf(LOG_DEBUG, "listen ok"); iochan_setevent(h, EVENT_OUTPUT); iochan_setflags(h, EVENT_OUTPUT | EVENT_EXCEPT); /* set up for acpt */ @@ -357,46 +361,50 @@ static void listener(IOCHAN h, int event) { COMSTACK new_line; IOCHAN new_chan; - char *a; + char *a = NULL; DWORD ThreadId; - if (!(new_line = cs_accept(line))) - { - logf(LOG_FATAL, "Accept failed."); - iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */ - return; - } - logf(LOG_DEBUG, "accept ok"); + if (!(new_line = cs_accept(line))) + { + logf(LOG_FATAL, "Accept failed."); + iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */ + return; + } + logf(LOG_DEBUG, "accept ok"); - if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session, EVENT_INPUT))) - { - logf(LOG_FATAL, "Failed to create iochan"); + if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session, EVENT_INPUT))) + { + logf(LOG_FATAL, "Failed to create iochan"); iochan_destroy(h); return; - } - if (!(newas = create_association(new_chan, new_line))) - { - logf(LOG_FATAL, "Failed to create new assoc."); + } + + logf(LOG_DEBUG, "accept ok 2"); + if (!(newas = create_association(new_chan, new_line))) + { + logf(LOG_FATAL, "Failed to create new assoc."); iochan_destroy(h); return; - } - iochan_setdata(new_chan, newas); - iochan_settimeout(new_chan, control_block.idle_timeout * 60); - a = cs_addrstr(new_line); - logf(LOG_LOG, "Accepted connection from %s", a ? a : "[Unknown]"); - - /* 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, 0, &ThreadId) == NULL) -*/ - /* Somehow, somewhere we need to store this thread id, otherwise we won't be able to close cleanly */ + } + logf(LOG_DEBUG, "accept ok 3"); + iochan_setdata(new_chan, newas); + iochan_settimeout(new_chan, control_block.idle_timeout * 60); + a = cs_addrstr(new_line); + logf(LOG_LOG, "Accepted connection from %s", a ? a : "[Unknown]"); + /* 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, + 0, &ThreadId) == NULL) */ + /* Somehow, somewhere we need to store this thread id, otherwise we won't be + able to close cleanly */ NewHandle = (HANDLE)_beginthreadex(NULL, 0, event_loop, new_chan, 0, &ThreadId); if (NewHandle == (HANDLE)-1) - { - logf(LOG_FATAL, "Failed to create new thread."); + { + + logf(LOG_FATAL|LOG_ERRNO, "Failed to create new thread."); iochan_destroy(h); return; - } - + } /* We successfully created the thread, so add it to the list */ statserv_add(NewHandle, new_chan); @@ -609,32 +617,24 @@ static void add_listener(char *where, int what) if (!where || sscanf(where, "%[^:]:%s", mode, addr) != 2) { - fprintf(stderr, "%s: Address format: ('tcp'|'osi')':'
.\n", - me); + logf (LOG_WARN, "%s: Address format: ('tcp'|'osi')':'
", me); + return; } if (!strcmp(mode, "tcp")) - { - if (!(ap = tcpip_strtoaddr(addr))) - { - fprintf(stderr, "Address resolution failed for TCP.\n"); - } type = tcpip_type; - } else if (!strcmp(mode, "osi")) { #ifdef USE_XTIMOSI - if (!(ap = mosi_strtoaddr(addr))) - { - fprintf(stderr, "Address resolution failed for TCP.\n"); - } type = mosi_type; #else - fprintf(stderr, "OSI Transport not allowed by configuration.\n"); + logf (LOG_WARN, "OSI Transport not allowed by configuration."); + return; #endif } else { - fprintf(stderr, "You must specify either 'osi:' or 'tcp:'.\n"); + logf (LOG_WARN, "You must specify either 'osi:' or 'tcp:'"); + return; } logf(LOG_LOG, "Adding %s %s listener on %s", control_block.dynamic ? "dynamic" : "static", @@ -643,6 +643,13 @@ static void add_listener(char *where, int what) { logf(LOG_FATAL|LOG_ERRNO, "Failed to create listener"); } + ap = cs_straddr (l, addr); + if (!ap) + { + fprintf(stderr, "Address resolution failed.\n"); + cs_close (l); + return; + } if (cs_bind(l, ap, CS_SERVER) < 0) { logf(LOG_FATAL|LOG_ERRNO, "Failed to bind to %s", where); @@ -756,7 +763,7 @@ int statserv_main(int argc, char **argv) } } -#ifdef WINDOWS +#if 0 log_init(control_block.loglevel, NULL, control_block.logfile); #endif /* WINDOWS */